Задача на паскале

Задача на паскале.
Условие:
Дано x,y .
Вычислить z = 3 x ⋅ y2 + tg(x) + 7,5 , если y ≠ 0 . Если y = 0 , вывести на печать "y = 0". Если
z > 10 , вычислить g = ex + x ⋅ y , иначе вычислить и напечатать d = arcsin(x) + arccos(y).

И вот что у меня получилось:

var x,y,z,g,d,a: real;
begin
writeln('Введите x и y');
readln(x,y);
if y <> 0 then
begin
a:=power(z,1/3);
z:=x*y*y+(sin(x)/cos(x))+7.5;
writeln(y);
end;
if y=0 then writeln('y = ',y);
if z>10 then
g:=exp(x) + sqrt(x*y)
else d:= arctan(x/sqrt(1-sqr(x)))+ arctan(sqrt(1-sqr(y))/y);
writeln('Переменная d = ',d:2:2);
end.

Из ошибок у меня то, что если я пишу, что y = 0, то вычислить d нельзя из-за деления на 0. И переменная d всегда почему-то равно 0, чтобы я ни завел в x и y. Как это дело исправить?

  • Пиши на форум forumpchelp. ru/forum/25-pascal/
  • Перепишите часть кода по другому, во первых x не может быть равен 1 у вас при вычислении d, во вторых откуда брать значение d если получившиеся z < 10. Предлаю переписать так:
    if y <> 0 then
    begin
    a:=power(z,1/3);
    z:=x*y*y+(sin(x)/cos(x))+7.5;
    writeln(y:-10:2);
    end;
    if y = 0 then
    writeln('y = ',y);
    if z > 10 then
    begin
    g:=exp(x) + sqrt(x*y);
    writeln('Переменная g = ',g:-10:2);
    end
    else
    begin
    if x <> 1 then
    begin
    d:= arctan(x/sqrt(1-x*x))+ arctan(sqrt(1-y*y)/y);
    writeln('Переменная d = ',d:-10:2);
    end
    else
    writeln('При x = 1 переменную d невозможно вычислить! ');
    end;
    writeln('Нажмите любую клавишу для выхода... ');
    readln;