Помогите, глюк

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Помогите, глюк

Сообщение RARARA » 18.05.2013 22:44:04

Не понимаю почему программа виснет, т.е. после нажатия Run дальше ничего не происходит. Приходится закрывать Паскаль :(
Спасибо!

Program IZDAN12;
TYPE ODN=Array[1..5] of real;
VAR A,B:real;
E:ODN;
FA,FB,X:real;
I:byte;
fp1,fp2:text;

FUNCTION ZNF(X:real):real;
Begin
ZNF:=((EXP(1/3*ln(4))-SQR(sin(X/10)))/SQRT(X)-X);
End;

PROCEDURE XTE(Var TA,TB,TE:real; Var X:real);
Var S,FTB,FS:real;
Begin
FTB:=ZNF(B);
S:=(TB-TA)/2;
REPEAT
FS:=ZNF(S);
IF (FS*FTB<0) THEN
TA:=S
ELSE
begin
TB:=S;
FTB:=FS
end;
S:=(TB-TA)/2;
UNTIL ABS(TB-TA)<=TE;
X:=S;
End;

BEGIN
ASSIGN(fp1,'isdan.pas');
ASSIGN(fp2,'vdan.pas');
RESET(fp1);
REWRITE(fp2);
FOR I:=1 TO 5 DO
read(fp1,E[I]);
readln(fp1);
Readln(fp1,A,B);
Writeln(fp2,' ':35,'RESULT');
Writeln(fp2);
FA:=ZNF(A);
FB:=ZNF(B);
FOR I:=1 TO 5 DO
IF FA*FB<0 THEN
begin
XTE(A,B,E[I],X);
writeln(fp2,'Znachenie kornya X=',X:4:4,'Pri zadannoi tochnosti E=',E[I]:4:4)
end
ELSE
writeln(fp2,'kornei net');
CLOSE(fp1);
CLOSE(fp2)
END.
RARARA
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.05.2013 22:26:07

Re: Помогите, глюк

Сообщение Лекс Айрин » 18.05.2013 23:14:34

Код: Выделить всё
readln(fp1);


Куда читаете?

ЗЫ: И все же...
1)пользуйтесь отступами.
2)Операторы в циклах и условиях лучше выделять операторными скобками ДАЖЕ ЕСЛИ он один.

Эти два правила сильно облегчат понимание и написание текста программы.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Помогите, глюк

Сообщение RARARA » 18.05.2013 23:23:12

Лекс Айрин писал(а):КОД: ВЫДЕЛИТЬ ВСЁ
readln(fp1);

Куда читаете?

Если убрать, все равно аналогичная ситуация
RARARA
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.05.2013 22:26:07

Re: Помогите, глюк

Сообщение Mirage » 18.05.2013 23:24:35

После нажатия Run у меня лично происходит выполнение программы.
А виснет потому, что условие UNTIL ABS(TB-TA)<=TE; всегда ложно.
Хотя возможно это зависит от данных в файле isdan.pas.
Видимо алгоритм составлен неверно.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Помогите, глюк

Сообщение RARARA » 18.05.2013 23:30:31

Mirage писал(а):После нажатия Run у меня лично происходит выполнение программы.
А виснет потому, что условие UNTIL ABS(TB-TA)<=TE; всегда ложно.
Хотя возможно это зависит от данных в файле isdan.pas.
Видимо алгоритм составлен неверно.

СПАСИБО БОЛЬШОЕ,
программа зараболтала!!! :D ABS(TB-TA)>=TE - в условии была проблема;D
RARARA
незнакомец
 
Сообщения: 3
Зарегистрирован: 18.05.2013 22:26:07

Re: Помогите, глюк

Сообщение trengtor » 19.05.2013 00:19:46

Полезно рисовать блок-схему алгоритма. Помогает и грамотно написать программу, и разбираться в проблемах.
На курсах по PL/1 (ох и давно же это было...) это подавалось как одно из непременных условий хорошего стиля программирования.
Аватара пользователя
trengtor
новенький
 
Сообщения: 77
Зарегистрирован: 03.05.2013 08:57:43
Откуда: Москва


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru