(*$B- Aufgabe 5.8 *) PROGRAM cram; TYPE vektor = ARRAY[1..10] OF real; matrix = ARRAY[1..10] OF vektor; VAR i,j,n:integer; s,d:real; ai,a : matrix; b,x:ARRAY[1..10] OF real; stri: string[20]; ein,tf : text; FUNCTION det(n:integer; a:matrix):real; VAR i,j,k,jmax:integer;h:vektor; d, z, faktor:real; BEGIN d :=1; i:=1; WHILE (i<=n) AND (d<>0) DO BEGIN (*PIVOTSUCHE *) jmax:=i; FOR j:=i+1 TO n DO IF abs(a[j,i])>abs(a[jmax,i]) THEN jmax:=j; IF a[jmax,i]=0 THEN d :=0 ELSE BEGIN IF jmax<>i THEN BEGIN h:=a[i]; a[i]:=a[jmax]; a[jmax]:=h; d:=-d END; (*ELIMINATION*) d:=d*a[i,i]; FOR k:=i+1 TO n DO BEGIN faktor:=a[k,i]/a[i,i]; FOR j:= i+1 TO n DO a[k,j]:=a[k,j]-faktor*a[i,j]; END END; i:=i+1; END; det := d; END; PROCEDURE print(n:integer; a:matrix); VAR i,j : integer; BEGIN FOR i := 1 TO n DO BEGIN writeln(tf); FOR j:=1 TO n DO write(tf,a[i,j]:12:3) END; writeln(tf) END; BEGIN writeln('Wohin mit dem Output ? '); read(stri); assign(tf,stri); rewrite(tf); writeln('woher kommt der Input ?'); readln; readln(stri); assign(ein,stri); reset(ein); writeln('n eingeben'); read(ein,n); writeln('Matrix A zeilenweise eingeben'); FOR i:=1 TO n DO FOR j:=1 TO n DO read(ein,a[i,j]); writeln('rechte Seite eingeben'); FOR i := 1 TO n DO read(b[i]); writeln(tf,'Gegebene Matrix'); print(n,a); writeln(tf); writeln(tf,'rechte Seite'); FOR i:=1 TO n DO writeln(tf,b[i]:12:7); d := det(n,a); writeln(tf,'Determinante von A = ',d); FOR i := 1 TO n DO BEGIN ai:= a; FOR j := 1 TO n DO ai[j,i] := b[j]; x[i] := det(n,ai)/d; writeln(tf,'x[',i:2,'] = ',x[i]); END; writeln(tf);writeln(tf, 'Residuenvektor'); FOR i:=1 TO n DO BEGIN s:=-b[i]; FOR j := 1 TO n DO s := s + a[i,j]*x[j]; writeln(tf,s); END; close(tf); close(ein) END.