Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Вычислить значение функции

Автор: MaxiMum 11.12.2006 21:27

Здравствуйте!!!
Помогите , пожалуйста, написал алгоритм, но там явная ошибка, только не пойму где.
Задача такая: нужно вычислить значение функции
w=sqrt(a*t*t+b*sin(t)+1) при t<0.1
w=a*t+b при t=0.1
w=sqrt(a*t*t+b*cos(t)+1) при t>0.1
a=2.5
b=0.4
t принадлежит отрезку [-1;1] при шаге дельта t равном 0,1


PROGRAM INTEGRAL;
VAR A, B, TK, TN, DT, T, W: REAl;
Begin
READ (A, B, TN, TK, DT);
T:=TN;
REPEAT
IF T<0.1 THEN W:=SQRT(A*T*T+B*SIN(T)+1);
IF T=0.1 THEN W:=A*T+B
ELSE W:=SQRT(A*T*T+B*COS(T)+1);
WRITELN ('W=',W,'T=',T:4:1,'A=',A:3:1,'B=',B:3:1); T':=T+DT
UNTIL T>TK
END


Автор: Michael_Rybak 11.12.2006 21:39

1) после первого if'а поставь else
2) действительные числа сравниваются неточно, поэтому равенство "T=0.1" может не наступить; сравнивай лучше так: Abs(t - 0.1) < 1e-8.
3) "T':=T+DT" - че за апостроф? У тебя компилится?

Автор: AnTiDoD 11.12.2006 21:44

Ошибка в цикле по-моему

Автор: volvo 11.12.2006 21:47

AnTiDoD, очень мудрое замечание - особенно если учесть, что ВНЕ цикла в программе 3 строки...

Автору: выложи сюда свой код в аттаче или СКОПИРУЙ, но не перепечатывай (пока ты его перепечатываешь - вносишь ошибки, получается испорченный телефон...)

Автор: MaxiMum 12.12.2006 0:36

Цитата(volvo @ 11.12.2006 17:47) *

AnTiDoD, очень мудрое замечание - особенно если учесть, что ВНЕ цикла в программе 3 строки...

Автору: выложи сюда свой код в аттаче или СКОПИРУЙ, но не перепечатывай (пока ты его перепечатываешь - вносишь ошибки, получается испорченный телефон...)

Я его и СКОПИРОВАЛ и вставил (в первом посте).

Автор: MaxiMum 16.12.2006 22:32

Цитата(MaxiMum @ 11.12.2006 20:36) *

Я его и СКОПИРОВАЛ и вставил (в первом посте).

Всё, я её уже решил.
Всем спасибо, все свободны.