2 Übungen |
Aufgabenstellung | |
Der Datentyp HE_MATRIX | |
Dateiformat für Matrizen in Textform | |
Hinweise | |
Funktion hsm_et_matrix_new() | |
Funktion hsm_et_matrix_delete() | |
Funktion hsm_et_matrix_from_text() | |
Alle Funktionen |
Es soll ein Programm "matrtest" erstellt werden, welches folgendermaßen aufgerufen wird:
matrtest Quelldatei1 Quelldatei2 Zieldatei
In den Quelldateien und in der Zieldatei befindet sich jeweils eine Matrix.
Für die beiden Quell-Matrizen wird eine Information über den Minimalwert und den Maximalwert der Elemente ausgegeben.
Wenn die Matrizen miteinander multipliziert werden können, wird die Multiplikation durchgeführt und die Ergebnismatrix in der Zieldatei gespeichert. Auch für die Ergebnismatrix werden Minimal- und Maximalwert ausgegeben.
Das Hauptprogramm ist in der Datei matrtest.c vorgegeben.
Der Datentyp HE_MATRIX beinhaltet eine Matrix. Die Headerdatei he-matrix.h enthält Prototypen für Funktionen zum Umgang mit Matrizen. Sie sollen die Funktionen im zugehörigen Modul he-matrix.c realisieren.
In den Komponenten zeilen und spalten wird die Zeilen- bzw. Spaltenanzahl gespeichert. Beim Zugriff auf die Matrixelemente wird jeweils Zeilen- und Spaltennummer angegeben, diese beginnen jeweils bei 0 und enden somit bei zeilen-1 bzw. spalten-1.
Die Komponente daten ist ein Zeiger auf ein dynamisch alloziertes Feld von double-Elementen. Das Feld hat die Größe zeilen*spalten. Im Feld stehen zunächst alle Elemente der ersten Zeile, dann alle Elemente der zweiten Zeile...
Beispiel:
Die Matrix
würde als Textdatei folgendermaßen aussehen:
3 4 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0
Nach dem Test, ob das Argument ein gültiger Zeiger ist, muss auch getestet werden, ob pm->daten ein gültiger Zeiger ist.
Lesen Sie die Eingabedatei zeilenweise mit fgets() ein.
Wenn die Datei zuwenig Werte-Zeilen enthält, bleiben die nicht
in der Datei angegebenen Werte auf 0.
Es müssen aber mindestens die ersten beiden Zeilen (Zeilenanzahl
und Spaltenanzahl der Matrix) vorhanden und auswertbar sein.
Für komplett nicht auswertbare Eingabezeilen soll ein
Programmabbruch erfolgen.
Kann nur ein Teil der Eingabezeile verarbeitet werden, soll eine
Warnung ausgegeben werden.
Verwenden Sie zwei Hilfs-Funktionen
/** Element vom Typ size_t aus Textzeile lesen. @param rp Zeiger auf Variable fuer Ergebnis. @param il Textzeile, die verarbeitet werden soll. @return 1 bei Erfolg, 0 bei Fehler. */ static int hsm_et_matrix_read_size(size_t *rp, char *il); /** Element vom Typ double aus Textzeile lesen. @param rp Zeiger auf Variable fuer Ergebnis. @param il Textzeile, die verarbeitet werden soll. @return 1 bei Erfolg, 0 bei Fehler. */ static int hsm_et_matrix_read_double(double *rp, char *il);
zum Einlesen eines size_t- bzw. double-Wertes aus einer Textzeile. Auch diese Funktionen müssen von Ihnen erstellt werden.
Da he-matrix.c ein Bibliotheksmodul ist, prüfen alle Funktionen ihre erhaltenen Argumente auf Gültigkeit (z.B. keine NULL-Zeiger) und Verwendbarkeit (z.B. keine Zeilen- und Spaltennummern, die über die letzte Zeile bzw. Spalte der Matrix hinausgehen).