A large commit.
[pdp8.git] / sw / src / pascal / GAUSS.PS
1 PROGRAM GAUSS (INPUT, OUTPUT);
2
3 VAR I, J, K, L, M, N: INTEGER;
4 Q: REAL;
5 A: ARRAY[1..9, 1..10] OF REAL;
6 X: ARRAY[1..9] OF REAL;
7
8 BEGIN (*EINLESEN DER KOEFFIZIENTEN UND DER RECHTEN SEITEN*)
9 READ(N); WRITELN("N =",N:2);
10 FOR I := 1 TO N DO
11 BEGIN
12 FOR J := 1 TO N+1 DO BEGIN READ(A[I,J]); WRITE(A[I,J]:8:2) END;
13 WRITELN
14 END;
15 FOR I := 1 TO N-1 DO
16 BEGIN (*AUFSUCHEN DES GROESSTEN KOEFFIZIENTEN A[I,J]*)
17 M := I;
18 FOR K:=I+1 TO N DO
19 IF ABS(A[K,I]) > ABS(A[M,I]) THEN M := K;
20 IF M <> I THEN (*ZEILENTAUSCH*)
21 FOR J := I TO N+1 DO
22 BEGIN
23 Q := A[I,J]; A[I,J] := A[M,J]; A[M,J] :=Q
24 END;
25 (* ELIMINATION DER X[I] AUS D. K-TEN GLEICHUNG *)
26 FOR K:= I+1 TO N DO
27 BEGIN Q:=A[K,I]/A[I,I];
28 FOR J:=I+1 TO N+1 DO A[K,J]:=A[K,J]-A[I,J]*Q
29 END;
30 END;
31 FOR I := N DOWNTO 1 DO (* BERECHNUNG VON X[I]*)
32 BEGIN Q := A[I,N+1];
33 FOR J := I+1 TO N DO Q := Q - A[I,J]*X[J];
34 X[I] := Q/A[I,I]
35 END;
36 WRITELN;
37 FOR I := 1 TO N DO (*AUSGABE VON X[I] *)
38 WRITELN("X",I:1, " = ", X[I]:8:2)
39 END.