/**********************************************************************\ * Kurzbeschreibung: matrixOp.c * Bietet Funktionen fuer Operationen mit Matrizen * * Datum: Autor: Grund der Aenderung: * * \**********************************************************************/ /*--- #includes ------------------------------------------------------*/ #include #include #include #include #include "matrixOp.h" /*--- #defines -------------------------------------------------------*/ /*--- Lokale Datentypen (typedef) ------------------------------------*/ /*--- Modulglobale static Variablen ----------------------------------*/ /*--- Prototypen lokaler Funktionen ----------------------------------*/ /*--- Funktionsdefinitionen ------------------------------------------*/ /*--------------------------------------------------------------------*\ * Erstellt eine neue Matrix (cM) * - reserviert lediglich den notwendigen Speicher * - dynamische Verwaltung von Speicher muss mit malloc() und free() * durchgef�hrt werden; dynamische Arrays sind nicht erlaubt !!! \*--------------------------------------------------------------------*/ Matrix createMatrix(unsigned int spalten, unsigned int zeilen) { Matrix matrix1; matrix1.mElement = (float *)malloc(spalten * zeilen * sizeof(float)); matrix1.zeilen = zeilen; matrix1.spalten = spalten; return matrix1; } /*--------------------------------------------------------------------*\ * Erstellt und initialisiert eine neue Matrix (zM) * - reserviert den notwendigen Speicher * - befuellt die Matrix mit 0 \*--------------------------------------------------------------------*/ Matrix createMatrixZero(unsigned int spalten, unsigned int zeilen) { Matrix matrix1 = createMatrix(spalten,zeilen); float inhalt[zeilen][spalten]; //matrix1.mElement = *inhalt; for (int i = 0; i < zeilen; ++i) { for (int j = 0; j < spalten; ++j) { inhalt[i][j] = 0; } } return matrix1; } /*--------------------------------------------------------------------*\ * Erstellt und initialisiert eine neue Matrix (rM) * - reserviert den notwendigen Speicher * - befuellt die Matrix mit Zufallszahlen \*--------------------------------------------------------------------*/ Matrix createMatrixRand(unsigned int spalten, unsigned int zeilen) { Matrix matrix1 = createMatrix(spalten,zeilen); float inhalt[zeilen][spalten]; for (int i = 0; i < zeilen; ++i) { for (int j = 0; j < spalten; ++j) { inhalt[i][j] = 69; } } return matrix1; } /*--------------------------------------------------------------------*\ * Kopiert eine Matrix und gibt die Kopie zurueck (yM) \*--------------------------------------------------------------------*/ Matrix copyMatrix(const Matrix toCopy) { // TODO return toCopy; } /*--------------------------------------------------------------------*\ * "Loescht" eine Matrix (dM) * - gibt reservierten Speicher wieder frei ! * - in der urspruenglichen, uebergebenen Matrix bleiben die Werte erhalten! \*--------------------------------------------------------------------*/ void deleteMatrix(Matrix toDelete) { // TODO } /*--------------------------------------------------------------------*\ * "Loescht / Zerstoert" eine uebergegebene Matrix (ddM) * - gibt Speicher wieder frei, setzt alle Werte auf NULL bzw. "0" ! * - Beachte Unterschiede zur vorigen Funktion !!! \*--------------------------------------------------------------------*/ void destroyMatrix(Matrix *pToDestroy) { // TODO } /*--------------------------------------------------------------------*\ * Gibt den Eintrag der Matrix an der Stelle (xPos, yPos) zurueck (gE) * Rueckgabe im Fehlerfall: ERROR \*--------------------------------------------------------------------*/ MatTyp getEntryAt(const Matrix ma, unsigned int xPos, unsigned int yPos) { // TODO return *ma.mElement; } /*--------------------------------------------------------------------*\ * Setzt den Eintrag der Matrix an der Stelle (xPos, yPos) (sE) * Rueckgabe: TRUE, im Fehlerfall: FALSE \*--------------------------------------------------------------------*/ Bool setEntryAt(Matrix ma, unsigned int xPos, unsigned int yPos, MatTyp value) { // TODO return TRUE; } /*--------------------------------------------------------------------*\ * Gibt eine Matrix im Kommandofenster "schoen formatiert" aus (pM) \*--------------------------------------------------------------------*/ void printMatrix(const Matrix ma) { float inhalt[ma.zeilen][ma.spalten]; //inhalt[0][0] = *ma.mElement; for (int i = 0; i < ma.zeilen; ++i) { for (int j = 0; j < ma.spalten; ++j) { printf("%.2f\t", inhalt[i][j]); } printf("\n"); } } /*--------------------------------------------------------------------*\ * Addiert zwei Matrizen (aM) * Rueckgabe: * - Ergebnis der Addition in neu erzeugter Matrix * - Rueckgabe im Fehlerfall: Matrix der Groesse "0" \*--------------------------------------------------------------------*/ Matrix addMatrix(const Matrix ma, const Matrix mb) { // TODO return ma; } /*--------------------------------------------------------------------*\ * Subtrahiert zwei Matrizen (sM) * Rueckgabe: "ma - mb" * - Ergebnis der Subtraktion in neu erzeugter Matrix * - Rueckgabe im Fehlerfall: Matrix der Groesse "0" \*--------------------------------------------------------------------*/ Matrix subMatrix(const Matrix ma, const Matrix mb) { // TODO return ma; } /*--------------------------------------------------------------------*\ * Multipliziert zwei Matrizen (mM) * Rueckgabe: "ma * mb" * - Ergebnis der Multiplikation in neu erzeugter Matrix * - Rueckgabe im Fehlerfall: Matrix der Groesse "0" \*--------------------------------------------------------------------*/ Matrix multMatrix(const Matrix ma, const Matrix mb) { // TODO return ma; } /*--------------------------------------------------------------------*\ * Transponiert eine Matrix (tM) * Rueckgabe: "ma^T" \*--------------------------------------------------------------------*/ Matrix transposeMatrix(const Matrix ma) { // TODO return ma; } /*--------------------------------------------------------------------*\ * Gibt die Determinante der Matrix ma zurueck (dt) * Rueckgabe im Fehlerfall: ERROR * !!! Optional / Implementation freiwillig !!! * fuer kleine Matrizen reicht ein einfacher Algorithmus * wer moechte kann auch ein effizientes Verfahren implementieren \*--------------------------------------------------------------------*/ double determMatrix(const Matrix ma) { // TODO return 6.9; }