Страница 1 из 1

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

СообщениеДобавлено: 18.05.2013 22:44:04
RARARA
Не понимаю почему программа виснет, т.е. после нажатия 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.

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

СообщениеДобавлено: 18.05.2013 23:14:34
Лекс Айрин
Код: Выделить всё
readln(fp1);


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

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

Эти два правила сильно облегчат понимание и написание текста программы.

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

СообщениеДобавлено: 18.05.2013 23:23:12
RARARA
Лекс Айрин писал(а):КОД: ВЫДЕЛИТЬ ВСЁ
readln(fp1);

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

Если убрать, все равно аналогичная ситуация

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

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

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

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

СПАСИБО БОЛЬШОЕ,
программа зараболтала!!! :D ABS(TB-TA)>=TE - в условии была проблема;D

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

СообщениеДобавлено: 19.05.2013 00:19:46
trengtor
Полезно рисовать блок-схему алгоритма. Помогает и грамотно написать программу, и разбираться в проблемах.
На курсах по PL/1 (ох и давно же это было...) это подавалось как одно из непременных условий хорошего стиля программирования.