Zur Aufgabenstellung Zur Theorieseite Das Programm zum Download Die Reihenfolge der Funktionen/Prozeduren: - Anlegung einer Matrix
- Zeilensumme
- Zeilendurchschnitt
- Spaltensumme
- Spaltendurchschnitt
- Vormonatsabweichung
- Sortieren einer Matrix
- Anteilssumme
- 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; j : 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.
|