Добрый день! Помогите пожалуйста разобраться с примером, вот сама функция:
.
В Паскале у меня получилась она так:

Program funkciya;
Uses crt;
Var
y,a,b,x:real;
Begin
clrscr;
writeln ('vvedite a=');
readln (a);
writeln ('vvedite b=');
readln (b);
writeln ('vvedite x=');
readln (x);
y:=(sqr(cos(x*x*x))-(x/(sqrt(sqr(a))+(sqr(b)))))*arctan(x/sqrt(1-sqr(x)));
writeln ('y',y:7:2);
readkey;
End.

Но после того как я нажимаю Ctrl+F9 ввожу данные a,b,x, то Паскаль мне выдаёт ошибку: Error 207: Invalid floating point operation , ну если я меняю writeln ('y',y:7:2) на writeln (y) , то выдаёт: Error 200: Division by zero.

Комментарии
21.11.2009 в 15:10

Псих
> sqrt(sqr(a))
тут в чём смысл?
21.11.2009 в 15:14

Псих
> sqrt(1-sqr(x))
Не знаю на счёт остального, но из-за этого ошибку будет кидать. Корень из отрицательного (в программе нет проверок никаких, ни на ноль, ни на что)
21.11.2009 в 15:17

Формула:
y:=sqr(cos(x*x*x)) - (x/sqrt(sqr(a) - sqr(b)))*arctan(x/sqrt(1-sqr(x));
Проверки:
if((sqr(a)-sqr(b)) <> 0)
if(sqrt(1-sqr(x)) <> 0)
21.11.2009 в 16:57

Всё равно выходит такая же ошибка, чёрточка мигает под y:= , как я понял это ошибка в этой строке? Ну в чём то именно ошибка, сделал как вы говорили, бесполезно :(
21.11.2009 в 17:07

Псих
Работающий код без проверок(!):

Program funkciya;
Uses crt;
Var
y,a,b,x:real;

Begin
clrscr;
write('Enter a: ');
readln(a);
write('Enter b: ');
readln(b);
write('Enter x: ');
readln(x);
y:=sqr(cos(x*x*x)) - x/sqrt(sqr(a)+sqr(b)) * arctan(x/sqrt(1-x*x));
writeln('y = ',y);
readkey;
End.


может быть Вы, для проверки, вводите что-то типа 1, 1, 1?
21.11.2009 в 17:14

Попробовал как вы сказали вышла ошибка, Error 200: Division by zero. Нет я ввожу разные цифры: 4, 7, 2!
21.11.2009 в 17:19

Псих
не надо давать функции sqrt отрицательные числа. Попробуйте 0.1, 0.1, 0.1, к примеру.
21.11.2009 в 17:24

Crazy Wizard
НУ а если мне допустим нужно вводить большие значения?
21.11.2009 в 17:32

Псих
вопрос из серии "мне надо поделить на ноль и прибавить 2 бесконечности, но паскаль почему-то ошибку кидает". Математика она такая.. Ну или пишите сложную функцию, которая будет учитывать отрицательные числа и каким-то образом давать ответ комплексным числом.
21.11.2009 в 18:33

НУ а если поставить модуль: y:=sqr(cos(x*x*x)) - x/sqrt(sqr(a)+sqr(b)) *arctan(x/sqrt(abs(1-sqr(x)))) ??
21.11.2009 в 22:33

Не будет ли ошибки??
22.11.2009 в 00:41

Псих
Pharaon@, учите математику) Программной ошибки, конечно, не будет, но как можно вот так просто редактировать формулу? Она же (в теории) какой-то точный результат должна давать и нельзя вот так просто "а давайте вот тут модуль поставим, а вот тут знак поменяем.."
22.11.2009 в 13:01

Crazy Wizard
Ок, всё понятно, ну тогда подскажите пожалуйста правельно ли к этой функции составлена программа??


Program funkciya;
Uses crt;
Var
y,a,b,x:real;
Begin
clrscr;
writeln ('vvedite a=');
readln (a);
writeln ('vvedite b=');
readln (b);
writeln ('vvedite x=');
readln (x);
y:=sqr(cos(sqr(x)*x))-(x/sqrt(sqr(a)+sqr(b))*arctan(x/sqrt(1-sqr(x))));
writeln ('y',y:7:2);
readkey;
End.
22.11.2009 в 13:31

То есть так:
Program funkciya;
Uses crt;
Var
y,a,b,x:real;
Begin
clrscr;
writeln ('vvedite a=');
readln (a);
writeln ('vvedite b=');
readln (b);
writeln ('vvedite x=');
readln (x);
if((sqr(a)-sqr(b)) <> 0)
then
if(sqrt(1-sqr(x)) <> 0)
then
y:=sqr(cos(sqr(x)*x))-(x/sqrt(sqr(a)+sqr(b))*arctan(x/sqrt(1-sqr(x))));
writeln ('y',y:7:2);
readkey;
End.

Я ещё добавил проверку, которую подсказал Тигр
22.11.2009 в 15:07

Crazy Wizard
Спасибо вам за помощь, ну мы к сожалению до такого ещё не доходили, нам про100 нужно написать программу, и если нужно, то задать условия, ну у вас для меня очень сложный вариант.
22.11.2009 в 15:15

Псих
Цикл while - это проще некуда. И вам зачем это всё? 1 курс? Так должны были пройти уже это. Если курсы, то скажите, что сами дома учились, должны оценить старания))

И это и есть "просто написанная программа". Пока писал, раз 5 хотелось сделать это всё через функции)
22.11.2009 в 15:53

Crazy Wizard
Курсы :)
Ну а если я напишу про100 решение в паскале , и буду вводить как вы и говорили выше не надо давать функции sqrt отрицательные числа. Попробуйте 0.1, 0.1, 0.1, то функция, тоже считается решённой?? Если задавать функции sqrt значения меньше 1?
22.11.2009 в 15:59

Псих
Тут какбэ 2 правила:
нельзя делить на ноль и нельзя вычитать кв.корень из отрицательных. То есть a*a+b*b не должно равняться нулю, а x должен быть в интервале (-1;1).