Страница 1 из 1

Паскаль, тригонометрические функции

Добавлено: 07 окт 2008, 22:32
RAITER
Разработать программу вывода значения функции. Если в какой-либо точке функция не определена, вывести сообщение «не существует». Формула:y=asin(x*x+6),если x>12,3;y=x*x+b,если x=12,3;y=bcos(x*x+a),если x<12,3;a=2tgx;b=arctgx/18-4.
Вроде програму написал, но в конце выводит ошибку №200, почему не могу понять.
Вот программа:
Program Mufunc;
var a,b,x,y:real;
Begin
a:=2*cos(x)/sin(x);
b:=arcTan(x)/18-4;
If x>12.3 then y:=a*sin(sqr(x)+6) else
If x=12.3 then y:=sqr(x)+b else
If x<12.3 then y:=b*cos(sqr(x)+a) else
Begin
write('y:=');
Readln(y);
End;
write('Vvedite x:');
Readln(x);
Writeln(y);
Readln;
End.
И если можно поясните 2 предложение задания, а то я ни как не возьму втолк,что и как надо сделать.

Re: Паскаль, не идет задача.

Добавлено: 07 окт 2008, 22:58
Apokal
На паскале уже давно не писал нечего и синтаксис подзабыл.Ты сначала присваюеш значения переменным а и b а потом ещо и спрашуеш какой х относительно 12.3:

Код: Выделить всё

a:=2*cos(x)/sin(x);
b:=arcTan(x)/18-4;
If x>12.3 then y:=a*sin(sqr(x)+6) else
If x=12.3 then y:=sqr(x)+b else
If x<12.3 then y:=b*cos(sqr(x)+a) else
Begin
write('y:=');
Readln(y);
End;
И только после этого просиш пользевателя ввести х:

Код: Выделить всё

write('Vvedite x:');
Readln(x);


Тоесть до этих строк програма незнала какое значение у "х" и неизвестно шо присвоила перемннным a и b. А ошыбку наверно выдало бо оно неможет выполнить if'ы бо незнает какой "х", тобтш приходитса 12.3 сравнивать с пустой перемнной.

P.S. Сорри еси нетак понял код. Паскаль далекое прошлое.

Re: Паскаль, не идет задача.

Добавлено: 07 окт 2008, 23:18
RAITER
Спаибо большое, переместил write('Vvedite x:');
Readln(x); и программа пошла, только когда ввожу 0 он выдает ту же ошибку.
И еще вопрос по 2-му предложению актуален, не понимаю что значит ф-ия неопределена.

Re: Паскаль, не идет задача.

Добавлено: 07 окт 2008, 23:33
Apokal
Вот какраз и тошо оно выдает ошыбку и являетса тем самым случаем когда функция неопределена. Ща поподробней обьясню:

На примере того же нуля который ты ввел: Первая сторчка после Begin'a

Код: Выделить всё

a:=2*cos(x)/sin(x);
Шо у нас получаетса сos 0 = 1, а sin 0 = 0. И выходит шо ты должен косинус нуля поделить на синус нуля. но ведь синус нуля это НОЛЬ. А делить на ноль нельзя вот и вылетает ошыбка, а нормальным языком говоря ты неможеш вычислить значение значение функции бо присутствует деление на ноль --- это и есть функция неопределена. Самый простой способ это по формуле посотреть при каких значениях икса нельзя будет получить результат и потом в програме сравнивать введенный икс со значениями которые не дают результата.

И кстати ты в проге написал a:=2*cos(x)/sin(x), а в задании у тебя сказано шо a=2tgx. Tg(x)=sin(x)/cos(x), Ctg(x)=cos(x)/sin(x).

Re: Паскаль, не идет задача.

Добавлено: 08 окт 2008, 00:26
RAITER
Спасибо, теперь понятно о чем речь и спасибо за поправку, с математикой у меня не очень((, но выходит функция везде определена и вывод сообщения вбивать не надо в программу.

Re: Паскаль, не идет задача.

Добавлено: 08 окт 2008, 09:04
somewhere
Нет, вывод такой что нужно подтягивать математику ))) в частности области определения тригонометрических функций.... в точках Pi/2 + Pi*N (N-целое) Tg(x) не существует...