blikk info infothek forum galerie sitemap

Quellcode Matrizen

zur Aufgabenstellung

Zur Aufgabenstellung

Zur Theorieseite

Das Programm zum Download

Die Reihenfolge der Funktionen/Prozeduren:

  1. Anlegung einer Matrix
  2. Zeilensumme
  3. Zeilendurchschnitt
  4. Spaltensumme
  5. Spaltendurchschnitt
  6. Vormonatsabweichung
  7. Sortieren einer Matrix
  8. Anteilssumme
  9. Ausgabe einer Matrix

PROGRAM matrizen;

USES

  Crt;

TYPE
  Tmat = ARRAY [1..10,1..10] OF INTEGER;

(*Prozedur zur Anlegung einer Matrix, durch Benutzereingabe*)

PROCEDURE matrixan(VAR matrix:Tmat; m,n:INTEGER);

VAR
  i,j     : INTEGER;       (*Laufvariablen*)
  eingabe : INTEGER;       (*Benutzereingabe*)

BEGIN
  FOR i:=1 TO m DO
    FOR j:=1 TO n DO BEGIN
      Writeln(i,'. Zeile, ',j,'. Spalte');
      Writeln('Bitte geben Sie eine Zahl ein');
      Readln(eingabe);
      matrix[i,j]:=eingabe
    END;
END;

(*Die Funktion berechnet die Zeilensumme in einer ausgewaehlten Zeile*)

FUNCTION zeilensumme (matrix : tmat; zeile:INTEGER;
                      n : INTEGER): INTEGER;

VAR
  i     : INTEGER;
  summe : INTEGER; (*Variable zur Summenbildung*)

BEGIN
  summe:=0;
  FOR i:=1 TO n DO
      summe:=summe + matrix[zeile,i];
  zeilensumme:=summe;
END;


(*Die Funktion berechnet den Zeilendurchschnitt einer ausgewaehlten Zeile*)

FUNCTION zeilendurch (matrix:Tmat; zeile: INTEGER; n: INTEGER): REAL;

VAR
  i      : INTEGER;
  summe  : INTEGER;
  durch  : REAL;

BEGIN
  summe:=0;
  FOR i:=1 TO n DO BEGIN
    summe:=summe + matrix[zeile,i];
    durch:=summe/i;
  END;
  zeilendurch:=durch;
END;

(*Die Funktion berechnet die Spaltensumme einer ausgewaehlten Spalte*)

FUNCTION spaltensumme (matrix : Tmat;
                       spalte : INTEGER; m : INTEGER):INTEGER;

VAR
  summe : INTEGER;
      : INTEGER;

BEGIN
  summe:=0;
  FOR j:=1 TO m DO
    summe:=summe + matrix[j,spalte];
  spaltensumme:=summe;
END;

(*Die Funktion berechnet den Spaltendurchschnitt einer ausgewaehlten Spalte*)

 
FUNCTION spaltendurch( matrix : Tmat;
                      spalte : INTEGER; m : INTEGER):REAL;

VAR
  j     : INTEGER;
  summe : INTEGER;
  durch : REAL;

BEGIN
  summe:=0;
  FOR j:=1 TO m DO BEGIN
    summe:=summe + matrix[j,spalte];
    durch:=summe / j;
  END;
  spaltendurch:=durch;
END;

(*Die Funktion berechnet die Abweichung von einem Monat auf dem anderen*)
 
FUNCTION vormonatsab (matrix : Tmat; monat1,
                      monat2 : INTEGER;zeile : INTEGER):REAL;

VAR
  abweichung :REAL;

BEGIN
  abweichung:=(matrix[zeile,monat2]/                                matrix[zeile,monat1]-1)*100;
  vormonatsab:=abweichung
END;

 
(*Prozedur welche die Zeilen einer Matrix nach einer bestimmten Spalte sortiert*)

PROCEDURE matrixsort(VAR matrix : Tmat;
                     spalte : INTEGER;m,n : INTEGER);

VAR

  i,j,k,l  :INTEGER;   (*Laufvariablen fuer die  FOR-Schleifen*)
  zeile    :INTEGER;   (*Zur Bestimmung der Zeile wo  das Minimum ist*)
  anz      :INTEGER;   (*Zaehlt die Anzahl der Durchlaeufe in der WHILE-S.*)
  min      :INTEGER;   (*Minimum der Spalte*)
  hilf     :INTEGER;
  minpos   :INTEGER;

BEGIN
  FOR i:=1 TO m-1 DO BEGIN
    minpos:=i;
    min:=matrix[i, spalte];
    FOR j:=i+1 TO m DO BEGIN
      IF matrix[j, spalte]< min THEN BEGIN
        minpos:=j;
        min:=matrix[j, spalte]
      END
    END;
    FOR j:=1 TO n DO BEGIN
      hilf:=matrix[minpos,j];
      matrix[minpos,j]:=matrix[i,j];
      matrix[i,j]:=hilf
    END
  END
END;

(*Die Funktion berechnet den Anteil einer Matrixkomponente zum Ganzen*)


FUNCTION anteilsumme(matrix : Tmat; n : INTEGER;
                     zeile,spalte : INTEGER):REAL;
 

VAR
  anteil   : REAL;
  i,j      : INTEGER;
  summe    : INTEGER;

BEGIN
  summe:=0;
  FOR i:=1 TO n DO
      summe:=summe +matrix[zeile,i];
  anteil:=matrix[zeile,spalte]/summe*100;
  anteilsumme:=anteil;
END;

(*Prozedur zur Ausgabe der Matrix*)
 

PROCEDURE matrixaus(matrix : Tmat;m,n : INTEGER);

VAR
  i,j :INTEGER;

BEGIN
  FOR i:=1 TO m DO  BEGIN
    Write(i,'. Zeile:');
    FOR j:=1 TO n DO
      Write(matrix[i,j]:5);
    Writeln;
  END;
END;

(*Hauptprogramm*)
 

VAR
  matrix        : Tmat;
  m,n           : INTEGER;
  eingabe       : INTEGER;
  zeile,spalte  : INTEGER;
  monat1,monat2 : INTEGER;
  produkt       : INTEGER;
 

BEGIN
  ClrScr;
  Writeln('Geben Sie bitte an wie viele Zeilen die    Matrix haben soll');
  Readln(m);
  Writeln('Geben Sie bitte die Anzahl der Spalten     an');
  Readln(n);
  Writeln('=========================Was wollen Sie   machen======================');
  Writeln; Writeln;
  Writeln('  Zeilensummen        (1)');
  Writeln('  Spaltensummen       (2)');
  Writeln('  Zeilendurschnitt    (3)');
  Writeln('  Spaltendurschnitt   (4)');
  Writeln('  Matrixsortierung    (5)');
  Writeln('  Vormonatsabweichung (6)');
  Writeln('  Anteilsummen        (7)');
  Readln(eingabe);
  Writeln; 
  Writeln;
  Writeln;
  CASE eingabe OF
    1:  BEGIN
          matrixan(matrix,m,n);
          Writeln('Bitte geben Sie eine Zeile an');
          Readln(zeile);
          zeilensumme(matrix,zeile,n);
          matrixaus(matrix,m,n);
          Writeln('Die Summe der ',zeile,'.Zeile      betraegt ',zeilensumme(matrix,zeile,n))
        END;
    2:  BEGIN
          matrixan(matrix,m,n);
          Writeln('Bitte geben Sie eine Spalte an');
          Readln(spalte);
          zeilensumme(matrix,spalte,m);
          matrixaus(matrix,m,n);
          Writeln('Die Summe der ',spalte,'.Spalte  betraegt ',zeilensumme(matrix,spalte,m))
        END;
    3:  BEGIN
          matrixan(matrix,m,n);
          Writeln('Bitte geben Sie eine Zeile an');
          Readln(zeile);
          zeilendurch(matrix,zeile,n);
          matrixaus(matrix,m,n);
          Writeln('Der Durschnitt der',zeile,'. Zeile betraegt ',zeilendurch(matrix,zeile,n) :6:2)
        END;
    4:  BEGIN
          matrixan(matrix,m,n);
          Writeln('Bitte geben Sie eine Spalte an');
          Readln(spalte);
          spaltendurch(matrix,spalte,m);
          matrixaus(matrix,m,n);
          Writeln('Der Durschnitt der',spalte,'. Spalte betraegt ',spaltendurch(matrix,spalte,m) :6:2)
        END;
    5:  BEGIN
          matrixan(matrix,m,n);
          Writeln('Bitte geben Sie eine Spalte an');
          Readln(spalte);
          matrixsort(matrix,spalte,m,n);
          matrixaus(matrix,m,n);
        END;
    6:  BEGIN
          Writeln('Die Monate sind die Spalten,die Produkte sind die Zeilen');
          matrixan(matrix,m,n);
          matrixaus(matrix,m,n);
          Writeln('Bitte geben Sie den ersten(Vor)Monat an');
          Readln(monat1);
          Writeln('Bitte geben Sie den zweiten Monat                    an');
          Readln(monat2);
          Writeln('Bitte geben Sie ein Produkt an');
          Readln(produkt);
         vormonatsab(matrix,monat1,monat2,produkt);
          Write('Im ',monat2,'. Monat hat Sie',vormonatsab(matrix,monat1,monat2,produkt) :6:2,'% Umsatz im Verhaeltnis zum');
          Writeln(monat1,'. Monat des Jahres');
        END;
    7:  BEGIN
          matrixan(matrix,m,n);
          matrixaus(matrix,m,n);
          Writeln('Bitte geben Sie die Zeile an,von   wessen Elementen Sie dann Bezug nehmen wollen');
          Readln(zeile);
          Writeln('Bitte geben Sie eine Spalte an, von welcher Sie Bezug zur Zeilensumme machen wollen');
          Readln(spalte);
          anteilsumme(matrix,n,zeile,spalte);
          Writeln('Das ',produkt,'. Produktmacht ',anteilsumme(matrix,n,zeile,produkt):6:2,'% zum Ganzen aus')
        END;
    END;
  Readln
END.

nach oben