home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DET_CALC.PAS *)
- (* Berechnung von Determinanten *)
- (* (c) 1990 Stefan Kriso & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM Berechnung_von_Determinanten; { txMath }
-
- USES Crt;
-
- CONST
- max = 10;
-
- TYPE
- WerteFeld = ARRAY [1..max, 1..max] OF REAL;
-
- VAR
- a : WerteFeld;
- n : INTEGER;
-
- PROCEDURE Eingabe;
- VAR
- i, j : 1..max;
- BEGIN
- ClrScr;
- WriteLn('Berechnung von Determinanten');
- WriteLn; WriteLn;
- Write('Zeilen-/Spaltenzahl: ');
- Read(n);
- IF (n < 2) OR (n > max) THEN Exit;
- WriteLn;
- FOR i := 1 TO max DO
- FOR j := 1 TO max DO a[i,j] := 0;
- Write(' ':6);
- HighVideo;
- FOR i := 1 TO n DO Write(i:6);
- WriteLn;
- FOR i := 1 TO n DO WriteLn(i:2, ' ':4);
- NormVideo;
- FOR i := 1 TO n DO
- FOR j := 1 TO n DO BEGIN
- GotoXY(6 * (j+1), i+7); Read(a[i,j]);
- END;
- WriteLn; WriteLn;
- END;
-
- FUNCTION Det(n : INTEGER;
- a : WerteFeld;
- Spalte : INTEGER) : REAL;
- VAR
- i, j : 1..max;
- d : REAL;
- b : WerteFeld;
- BEGIN
- FOR i := 1 TO n DO
- FOR j := 1 TO n DO BEGIN
- b[i,j] := 0;
- IF j < Spalte THEN b[i,j] := a[i,j];
- IF j >= Spalte THEN b[i,j] := a[i,j+1];
- END;
- IF n = 2 THEN
- Det := b[1,1] * b[2,2] - b[1,2] * b[2,1]
- ELSE BEGIN
- d := 0;
- { rekursiver Funktionsaufruf:
- Entwicklung der Determinanten jeweils nach der
- letzten Zeile }
- FOR j := 1 TO n DO
- IF Odd(n+j) THEN
- d := d - b[n,j] * Det(n-1, b, j)
- ELSE
- d := d + b[n,j] * Det(n-1, b, j);
- Det := d;
- END;
- END;
-
- PROCEDURE Ausgabe;
- VAR
- ch : CHAR;
- BEGIN
- WriteLn('Determinantenwert = ', Det(n, a, max+1):1:5);
- WriteLn;
- ch := ReadKey;
- END;
-
- BEGIN
- REPEAT
- Eingabe;
- IF (n > 1) AND (n <= max) THEN Ausgabe;
- UNTIL (n < 2) OR (n > max);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von DET_CALC.PAS *)