Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычислить функцию по заданным условиям
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Leya
Код
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

За меня решать не прошу... просто обьясните что у меня не так в коде (шутку про ДНК я знаю). Я пишу программу второй раз в жизни. mega_chok.gif Прошу не ругать и не стебацца. Заранее спасибо за помощь.

Добавлено через 3 мин.
Если бы можно было у кого-то спросить еще.. я бы не стала тратить чужое время на это. Но мучать некого... unsure.gif
Lapp
Цитата(Leya @ 26.04.2007 1:58) *

Прошу не ругать и не стебацца.

Ругать тебя пока что не за что (будет - поругаю, будь уверена smile.gif), а второго слова я не знаю.. no1.gif

Ошибка твоя вот, в чем..
Ты проверяешь на принадлежность интервалу:

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, чтобы разобраться.
Дальше я не смотрел..
Если непонятно объяснил или что еще неясно - спрашивай smile.gif
Успехов!

PS
и используй паскалевсие теги [cоde=pas], пожалуйста
volvo
Цитата
просто обьясните что у меня не так в коде
Просто In работает только со множествами... Для того, чтобы (как ты хочешь) проверить попадание числа в интервал, надо делать так:
if (x >= a) and (x <= b) then ...


ну, и во втором случае - аналогично...
Кстати, у тебя еще и ** стоит вместо одного умножения ...
Leya
Цитата(Lapp @ 26.04.2007 2:14) *

А нужно проверять так:

if (x>a)and(x<b) then F:=exp(sin(x)**3)+ln(arctan(x))




Исходя из этого b>a, а если наоборот окажется?
Lapp
Цитата(volvo @ 26.04.2007 2:17) *

Кстати, у тебя еще и ** стоит вместо одного умножения ...

Это не умножение, это куб..
Leya, чтобы получить куб можно перемножить три раза, а можно сделать настоящую степень через экспоненту и логарифм. Операции ** не существует..
Цитата(Leya @ 26.04.2007 2:30) *

Исходя из этого b>a, а если наоборот окажется?

Ну, тогда можно так, например:
if (x-a)*(x-b)<0 then ...
Leya
2 Lapp Большое спасибо, я попробую. blush.gif

Добавлено через 11 мин.
Большое спасибо за помощь, все работает rolleyes.gif
Lapp
Цитата(Leya @ 26.04.2007 2:38) *

все работает

Йес!! smile.gif
только синус запомни где-нить, прежде чем умножать три раза.. Ладно?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.