{$N+$E+} Program Dempkvad; {Demonstruje vypocet korenu kvadrat.rovnice dle vzorce a vypocet maximalne presny - pri vypoctu dle vzorce dochazi k chybam pokud 4*a*c << b*b } Type Real=Single; Procedure Neprkor(a,b,c:Real;Var kor1,kor2:Real;Var realkor:Boolean); Var diskr:Real; BEGIN IF a=0 THEN BEGIN Writeln(' Chyba a=0 - rovnice neni kvadraticka '); Halt END; diskr:= 0.25*b*b-a*c; IF diskr >= 0 THEN BEGIN realkor:=True; kor1:= (-0.5*b + Sqrt(diskr))/a; kor2:= (-0.5*b - Sqrt(diskr))/a END ELSE BEGIN realkor:=False; kor1:= -0.5*b/a; kor2:= Sqrt(-diskr)/a END; END; Procedure Preskor(a,b,c:Real;Var kor1,kor2:Real;Var realkor:Boolean); Var diskr:Real; BEGIN diskr:= 0.25*b*b-a*c; IF diskr >= 0 THEN BEGIN realkor:=True; IF b <= 0 THEN BEGIN kor1:= (-0.5*b + Sqrt(diskr))/a; kor2:= c/a/kor1 END ELSE BEGIN kor2:= (-0.5*b - Sqrt(diskr))/a; kor1:= c/a/kor2 END END ELSE BEGIN realkor:=False; kor1:= -0.5*b/a; kor2:= Sqrt(-diskr)/a END; END; Var a,b,c,kor1n,kor2n,kor1p,kor2p:Real; dk1,dk2,rk1,rk2:Real; realkor:boolean; Label 1; BEGIN WHILE True DO BEGIN Write('Zadej koeficienty kvadraticke rovnice - a,b,c >>'); Readln(a,b,c); Writeln(' (Zadani a=0 konci cyklus) '); IF a=0 THEN GOTO 1; Neprkor(a,b,c,kor1n,kor2n,realkor); IF realkor THEN BEGIN Preskor(a,b,c,kor1p,kor2p,realkor); Writeln('kor1n=',kor1n,' kor2n=',kor2n); Writeln('kor1p=',kor1p,' kor2p=',kor2p); dk1 := kor1n - kor1p; dk2 := kor2n - kor2p; Writeln('chyb1=',dk1,' chyb2=',dk2); IF kor1p <> 0 THEN BEGIN rk1 := dk1/kor1p; Write('rel.ch.1=',rk1); END ELSE Write('rel.ch.1 neni definovana'); IF kor2p <> 0 THEN BEGIN rk2 := dk2/kor2p; Writeln(' rel.ch.2=',rk2); END ELSE Writeln(' rel.ch.2 neni definovana'); END ELSE BEGIN Writeln('Koreny jsou komplexni'); Writeln('kor1,2 =',kor1n,' +- i ',kor2n) END; END; 1: Writeln('Konec'); Readln; END.