Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2011, 16:14   #1
Elabrion
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 17
По умолчанию Проблема с программой на Паскале. Циклы.

Не могу понять, почему программа в цикле считает значение функции, при аргументе со значением больше конечного??
вот код + фото результатов. исходные данные: а=2,7 xn=0.8 xk=2.4 dx=0.2
Код:
program lab2; 
var 
 Q,E:text; 
 a,x,xk,xn,dx,w:real; 
begin 
assign(Q,'lab2.dat'); 
assign(E,'lab2.res'); 
reset(Q); 
rewrite(E); 
read(Q,a,xn,xk,dx); 
x:=xn; 
while x<=xk do 
 begin 
 if x<=1 then 
 begin 
 w:=(a*(ln(x)/ln(10))+exp(1/5*ln(abs(sin(x)*sin(x)*sin(x)/cos(x)*cos(x)*cos(x)-cos(x))))); 
 writeln(E,'x=',x:5:2,' w=',w:5:2) 
 end 
 else 
 if x>=2 then 
 begin 
 w:=ln(a+x)/ln(x)-sin(exp(x))*sin(exp(x))*sin(exp(x)); 
 writeln(E,'x=',x:5:2,' w=',w:5:2) 
 end 
 else 
 begin 
 w:=(exp((x-1)*ln(a))+exp(1/3*ln(a*x))+(Pi*x*x*x)); 
 writeln(E,'x=',x:5:2,' w=',w:5:2) 
 end; 
 x:=x+dx; 
 end; 
write(E,'x=',x:5:2,' w=',w:5:2); 
close(Q); 
close(E); 
end.
Elabrion вне форума Ответить с цитированием
Старый 03.07.2011, 16:45   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Надо табуляцию использовать, тогда сразу видно, что в конце цикла идёт строка
Код:
x:=x+dx;
которая увеличивает переменную x, и в последней итерации х может выйти за границу, в этом случае цикл прерывается, НО после цикла снова идёт вывод последнего результата с уже изменённым значением икса.
Код:
 end; 
write(E,'x=',x:5:2,' w=',w:5:2); 
close(Q); 
close(E);
Либо после цикла убирай повторный вывод, либо исправляй повторный вывод на
Код:
write(E,'x=',(x-dx):5:2,' w=',w:5:2); 
close(Q); 
close(E);
, либо заменяй на repeat-until, и т.д. и т.п.

P.S. Зачем весь экран фотографировать? Достаточно маленького куска или просто скопировать вывод как текст.
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклы на Паскале. vlad1991 Помощь студентам 34 22.06.2012 13:13
Циклы в Паскале bwitcher Помощь студентам 10 10.11.2010 12:49
Циклы в Паскале loloverg Помощь студентам 6 17.05.2010 13:57
Циклы в паскале ates Помощь студентам 3 14.05.2010 18:05