10 REM ***********  ΠΡΟΓΡΑΜΜΑ  Π207   ***************

20 REM *                                            *

30 REM * Εύρεση Πραγματικών και Μιγαδικών Ριζών     *

40 REM *                                            *

50 REM **********************************************

60 CLS

70 DIM A(20),B(20),C(20),D(20)

80 INPUT "ΔΩΣΕ ΤΟ ΒΑΘΜΟ ΠΟΛΥΩΝΥΜΟΥ";N

90 E=.000001

100 PRINT

110 NN=N

120 D=1

130 PRINT "ΔΩΣΕ ΤΟΥΣ ΣΥΝΤΕΛΕΣΤΕΣ ΤΟΥ ΠΟΛΥΩΝΥΜΟΥ"

140 PRINT

150 FOR I=0 TO N

160 PRINT "A(";I;")";

170 INPUT A(I)

180 NEXT I

190 PRINT

200 IF INT(N/2)=N/2 THEN GOTO 480

210 X=0

220 REM ΒΡΙΣΚΟΥΜΕ ΤΗ ΠΡΑΓΜΑΤΙΚΗ ΡΙΖΑ ΑΝ Ν ΕΙΝΑΙ ΠΕΡΙΤΤΟΣ

230 FOR I=1 TO 100

240 GOSUB 360

250 IF ABS(C(N-1))<1E-08 THEN GOTO 460

260 XN=X-B(N)/C(N-1)

270 IF ABS(XN-X)<.000001 THEN GOTO 320

280 X=XN

290 NEXT I

300 IF I>100 THEN STOP

310 GOTO 690

320 PRINT:PRINT "X(";D;")= ";X

330 N=N-1

340 FOR L=0 TO N:A(L)=B(L):NEXT L

350 GOTO 490

360 B(0)=A(0)

370 FOR J=1 TO N

380 B(J)=B(J-1)*X+A(J)

390 NEXT J

400 C(0)=B(0)

410 FOR T=1 TO N-1

420 C(T)=C(T-1)*X+B(T)

430 NEXT T

440 RETURN

450 END

460 IF I=1 THEN X=X+1

470 GOTO 230

480 D=-1

490 TEMP=A(0)

500 FOR I=1 TO N

510 A(I-1)=A(I)/TEMP

520 NEXT I

530 IF N=2 THEN GOTO 960

540 PRINT

550 REM ΒΡΙΣΚΟΥΜΕ ΟΛΕΣ ΤΙΣ ΡΙΖΕΣ ΜΕ ΤΗ ΜΕΘΟΔΟ BAIRSTOW

560 REM ΥΠΟΛΟΓΙΖΟΝΤΑΙ ΤΑ b(j)

570 P=0:Q=0

580 IN=0

590 B(0)=A(0)-P

600 B(1)=A(1)-P*B(0)-Q

610 FOR J=2 TO N-3

620 B(J)=A(J)-P*B(J-1)-Q*B(J-2)

630 NEXT J

640 R=A(N-2)-P*B(N-3)-Q*B(N-4)

650 S=A(N-1)-Q*B(N-3)

660 REM ΥΠΟΛΟΓΙΖΟΝΤΑΙ ΤΑ c(j)

670 C(0)=-1

680 C(1)=-B(0)+P

690 FOR J=2 TO N-3

700 C(J)=-B(J-1)-P*C(J-1)-Q*C(J-2)

710 NEXT J

720 RP=-B(N-3)-P*C(N-3)-Q*C(N-4)

730 SP=-Q*C(N-3)

740 REM ΥΠΟΛΟΓΙΖΟΝΤΑΙ ΤΑ d(j)

750 D(0)=0

760 D(1)=-1

770 FOR J=2 TO N-3

780 D(J)=-B(J-1)-P*D(J-1)-Q*D(J-2)

790 NEXT J

800 RQ=-B(N-4)-P*D(N-3)-Q*D(N-4)

810 SQ=-B(N-3)-Q*D(N-3)

820 REM

830 DT=RP*SQ-SP*RQ

840 DP=(S*RQ-R*SQ)/DT

850 DQ=(R*SP-S*RP)/DT

860 IF ABS(DP)>E  AND ABS(DQ)>E  THEN GOTO 900

870 P=P+DP

880 Q=Q+DP

890 GOTO 950

900 IN=IN+1

910 IF IN>100 THEN GOTO 1210

920 P=P+DP

930 Q=Q+DQ

940 GOTO 590

950 GOSUB 970

960 P=A(0):Q=A(1)

970 F=P*P-4*Q

980 T=SQR(ABS(F))

990 D=D+2

1000 IF ABS(F)<1E-08 THEN GOTO 1130

1010 IF F<0 THEN GOTO 1080

1020 PRINT

1030 PRINT "X(";D;")=";.5*(-P+T)

1040 PRINT

1050 PRINT "X(";D+1;")=";.5*(-P-T)

1060 PRINT

1070 GOTO 1150

1080 PRINT "X(";D;")=";-.5*P;"+";.5*T;"i"

1090 PRINT

1100 PRINT "X(";D+1;")=";-.5*P;"-";.5*T;"i"

1110 PRINT

1120 GOTO 1150

1130 PRINT "X(";D;")=X(";D+1;")=";-.5*P

1140 PRINT

1150 N=N-2

1160 IF N=0 THEN STOP

1170 FOR L=0 TO N-1

1180 A(L)=B(L)

1190 NEXT L

1200 GOTO 530

1210 PRINT "ΜΕΤΑ ΑΠΟ 100 ΕΠΑΝΑΛΗΨΕΙΣ ΔΕΝ ΕΧΟΥΜΕ ΣΥΓΚΛΙΣΗ"