Не понимаю почему программа виснет, т.е. после нажатия 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.
После нажатия Run у меня лично происходит выполнение программы. А виснет потому, что условие UNTIL ABS(TB-TA)<=TE; всегда ложно. Хотя возможно это зависит от данных в файле isdan.pas. Видимо алгоритм составлен неверно.
Mirage писал(а):После нажатия Run у меня лично происходит выполнение программы. А виснет потому, что условие UNTIL ABS(TB-TA)<=TE; всегда ложно. Хотя возможно это зависит от данных в файле isdan.pas. Видимо алгоритм составлен неверно.
СПАСИБО БОЛЬШОЕ, программа зараболтала!!! ABS(TB-TA)>=TE - в условии была проблема;D
Полезно рисовать блок-схему алгоритма. Помогает и грамотно написать программу, и разбираться в проблемах. На курсах по PL/1 (ох и давно же это было...) это подавалось как одно из непременных условий хорошего стиля программирования.