Форум «Всё о Паскале» _ Задачи _ Вычислить функцию по заданным условиям
Автор: Leya 26.04.2007 4:58
Код
program Lab_2; uses crt; var F,a,b,c,d,x:real; q:char; begin ClrScr; writeln('a='); readln(a); writeln('b='); readln(b); writeln('c='); readln(c); writeln('d='); readln(d); x:=0.2*sqrt(a)/(sin(b)/cos(b)); if x in (a,b) then F:=exp(sin(x)**3)+ln(arctan(x)) else if x in (c,d) then F:=sqrt(x)*sin(x/a) else F:=ln(a+3*exp(a*x))); writeln (' a= ', a,' b= ', b,' c= ', c,' d= ', d,' x= ', x,' F= ', F); readln(q); end.
Выдает ошибку.
А выражение выглядит так: ^ - возведение в степень F(x)= {exp^(sin^3(x))+ln(arctg(x)); (x^1/2)*sin(x/a); ln(a+3*(exp^ax))}, если x принадлежит |a,b|, если x принадлежит |c,d|, в остальных случаях.
x=0,2*(a^1/2)/tg(b), a=4.44 b=3.076 c=6.03 d=8.4
За меня решать не прошу... просто обьясните что у меня не так в коде (шутку про ДНК я знаю). Я пишу программу второй раз в жизни. Прошу не ругать и не стебацца. Заранее спасибо за помощь.
Добавлено через 3 мин. Если бы можно было у кого-то спросить еще.. я бы не стала тратить чужое время на это. Но мучать некого...
Автор: Lapp 26.04.2007 5:14
Цитата(Leya @ 26.04.2007 1:58)
Прошу не ругать и не стебацца.
Ругать тебя пока что не за что (будет - поругаю, будь уверена ), а второго слова я не знаю..
Ошибка твоя вот, в чем.. Ты проверяешь на принадлежность интервалу:
if x in (a,b) then F:=exp(sin(x)**3)+ln(arctan(x))
- и дальше тоже, аналогично. А нужно проверять так:
if (x>a)and(x<b) then F:=exp(sin(x)**3)+ln(arctan(x))
- и дальше аналогично.. В Паскале есть оператор in, но он только для множеств, которые не могут содержать такой тип, как real. Прочти в учебнике про тип set, чтобы разобраться. Дальше я не смотрел.. Если непонятно объяснил или что еще неясно - спрашивай Успехов!
PS и используй паскалевсие теги [cоde=pas], пожалуйста
Автор: volvo 26.04.2007 5:17
Цитата
просто обьясните что у меня не так в коде
Просто In работает только со множествами... Для того, чтобы (как ты хочешь) проверить попадание числа в интервал, надо делать так:
if (x >= a) and (x <= b) then ...
ну, и во втором случае - аналогично... Кстати, у тебя еще и ** стоит вместо одного умножения ...
Автор: Leya 26.04.2007 5:30
Цитата(Lapp @ 26.04.2007 2:14)
А нужно проверять так:
if (x>a)and(x<b) then F:=exp(sin(x)**3)+ln(arctan(x))
Исходя из этого b>a, а если наоборот окажется?
Автор: Lapp 26.04.2007 5:36
Цитата(volvo @ 26.04.2007 2:17)
Кстати, у тебя еще и ** стоит вместо одного умножения ...
Это не умножение, это куб.. Leya, чтобы получить куб можно перемножить три раза, а можно сделать настоящую степень через экспоненту и логарифм. Операции ** не существует..
Цитата(Leya @ 26.04.2007 2:30)
Исходя из этого b>a, а если наоборот окажется?
Ну, тогда можно так, например: if (x-a)*(x-b)<0 then ...
Автор: Leya 26.04.2007 5:38
2 Lapp Большое спасибо, я попробую.
Добавлено через 11 мин. Большое спасибо за помощь, все работает
Автор: Lapp 26.04.2007 5:51
Цитата(Leya @ 26.04.2007 2:38)
все работает
Йес!! только синус запомни где-нить, прежде чем умножать три раза.. Ладно?