Universität Ulm - Abteilung Angewandte Informationsverarbeitung

 


11. Übungsblatt zur Vorlesung Allgemeine Informatik I


Abgabetermin: Mittwoch, 22.01.2003


Aufgabe 1:     Arbeiten mit Matrizen (2-dim. Arrays)(4 Punkte)


Euer Programm soll diesmal eine quadratische Matrix transponieren. Dabei soll die Transponierung direkt (durch Vertauschung der Indizes) auf der ursprünglichen Matrix erfolgen. Der Algorithmus sollte unabhängig von der Dimension der Matrix sein (Was das genau heißt wird weiter unten erklärt)! Die Zahlenwerte sollen dabei von der Tastatur eingelesen werden können. Anschließend sollen die Werte der transponierter Matrix ausgegeben werden!

$
\left(
\begin{array}{cccc}
a_{11} & \dots & a_{1n}\\
\vdots & \ddots & \vdots\\
a_{n1} & \dots & a_{nn}
\end{array}\right)
$   $\Rightarrow$   $
\left(
\begin{array}{cccc}
a_{11} & \dots & a_{n1}\\
\vdots & \ddots & \vdots\\
a_{1n} & \dots & a_{nn}
\end{array}\right)^T
$


Transponieren bedeutet also, die Werte der Matrix an der Diagonalen zu spiegeln, wie das nachfolgende Zahlenbeispiel zeigt (Die Werte werden quasi an der Diagonalen 11, 5, 23 gespiegelt):


$
\left(
\begin{array}{cccc}
11 & 17 & 75\\
7 & 5 & 6\\
2 & 19 & 23
\end{array}\right)
$   $\Rightarrow$   $
\left(
\begin{array}{cccc}
11 & 7 & 2\\
17 & 5 & 19\\
75 & 6 & 23
\end{array}\right)^T
$




HINWEISE ZUM LÖSEN DER AUFGABE:


Folgende Datenstruktur kann/soll(te) verwendet werden:

CONST length = 4;

(* So wird ein 2-dimensionales Array definiert *)
TYPE Matrix =  ARRAY length,length OF INTEGER;

VAR matrix: Matrix;
    i, j: INTEGER;


Was bedeutet nun, daß der Algorithmus unabhängig von der Dimension sein soll? Gemeint ist hier, daß wenn Ihr die Konstante length z.B. von 4 auf 3 reduziert am Algorithmus selbst keine Veränderungen gemacht werden sollten!


Beispiel: Wie kann ein 2-dimensionales Array unabhängig von der Dimension durchlaufen werden (z.B. um die Array-Werte einzugeben)? Hier der Programmcode (und zugleich erster Teil der Lösung):

i := 0; (* erster Schleifenzähler *)
  WHILE i < length DO
    j := 0; (* zweiter Schleifenzähler *)
    WHILE j < length DO
      Read.Int(matrix[i,j]); (* die Werte einlesen *)
        INC(j);
    END;
  INC(i);
END;

Aufgabe 2:     Fit For Fun(6 Punkte)

Die Firma Fit For Fun produziert Kraftnahrung für Sportler. Im Angebot sind drei verschiedene Fitnessmischungen zu finden, die sich im Wesentlichen wie folgt zusammensetzen:


  Energy 2000 Power Extra Active x
Sojaeiweiß 75% 60% 68%
Magermilchpulver 22% 35% 28%
Vitaminzusätze 3% 5% 4%


Der Firma liegen Aufträge von verschiedenen Sportfachgeschäften vor. Die Bestellungen vom letzten Freitag hat die Sekretärin in einer Tabelle zusammengefasst (Bestellmengen in kg).


  Sport Krauss Sport Sohn Sport Abt Olympia
Energy 2000 200 150 150 250
Power Extra 150 200 200 200
Active x 100 200 150 100


Aus den Tabellen ist nun ersichtlich, daß z.B. das Sportfachgeschäft Sport Sohn 0.75 * 150 + 0.6 * 200 + 0.68 * 200 = 368.50 kg Sojaeiweiß benötigt!


Euer Programm sollte nun so gestaltet sein, daß die Bestellmengen eines Sportfachgeschäfts anhand eines Vektors eingegeben werden können. Anschließend soll errechnet werden, wieviel kg der einzelnen Bestandteile für ein Sportfachgeschäft benötigt werden.


Beispielrechnung für das Sportfachgeschäft Sport Sohn:


    Matrixeinträge         Eingabe         Ausgabe


\begin{displaymath}
\left(
\begin{array}{ccc}
0.75 & 0.60 & 0.68\\
0.22 & 0.35 ...
...left(
\begin{array}{c}
368,5\\
159\\
22,5
\end{array}\right)
\end{displaymath}


Für die Matrixeinträge muß eine entsprechende 2-dimensionale Arraystruktur im Programm vorhanden sein, wobei die Einträge bereits im Programm fest vorgegeben sein sollen.


Für die Eingabe sowie für die Ausgabe muß eine 1-dimensionale Arraystruktur im Programm vorhanden sein. Die Bestellmengen sollen dabei über die Tastatur eingelesen werden. Die Mengen der Bestandteile sollen in einem Vektor abgespeichert und anschließend ausgegeben werden!



Viel Erfolg!



Hans Braxmeier