Informatik2_Pr/TestMatrix.c
2025-05-20 18:41:53 +02:00

115 lines
3.3 KiB
C

/**********************************************************************\
* Kurzbeschreibung:
* "Funktionstest" - Matrizen mit Werten erzeugen
* und alle implementierten Funktionen aus matrixOp.c zum Test aufrufen
*
* Datum: Autor:
*
*
\**********************************************************************/
/*--- #includes ------------------------------------------------------*/
#define _CRT_SECURE_NO_WARNINGS //VC++: keine scanf() Warnungen
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "matrixOp.h"
/*--- #defines -------------------------------------------------------*/
/*--- Lokale Datentypen (typedef) ------------------------------------*/
/*--- Modulglobale static Variablen ----------------------------------*/
/*--- Prototypen lokaler Funktionen ----------------------------------*/
/*--- Funktionsdefinitionen ------------------------------------------*/
/*--- main -----------------------------------------------------------*/
int main(void) {
unsigned int zeilen, spalten;
float startWert;
printf("Test verschiedener Funktionen der Bibliothek\n");
printf("Gewuenschte Matrizen-Groesse eingeben\n");
printf(" Zeilen, Spalten (> 0; z.B. 3,4): ");
scanf("%u,%u", &zeilen, &spalten);
Matrix a = createMatrix(spalten, zeilen);
printf("Matrix Elemente eingeben (F. Test nur 1.Elem., weitere Elemente werden mit +1 erzeugt)\n");
printf(" Element in [1,1] (z.B.: 4.5): ");
scanf("%f", &startWert);
float wert = startWert;
for (unsigned int y = 0; y < zeilen; y++) {
for (unsigned int x = 0; x < spalten; x++) {
setEntryAt(a, x, y, wert);
wert += 1.0f;
}
}
printf("\nTest Create Zero und Rand:\n");
Matrix zero = createMatrixZero(spalten, zeilen);
printf("CreateMatrixZero: a[%d,%d]=\n", spalten, zeilen);
printMatrix(zero);
printf("\nInfo: Called srand!\n");
srand((unsigned int)time(NULL));
Matrix randMat = createMatrixRand(spalten, zeilen);
printf("CreateMatrixRand: a[%d,%d]=\n", spalten, zeilen);
printMatrix(randMat);
printf("\nTests mit eingegebenen Werten:\n");
printf("CreateMatrix: a[%d,%d]=\n", spalten, zeilen);
printMatrix(a);
Matrix b = copyMatrix(a);
printf("\nCreateMatrix: b[%d,%d]=\n", spalten, zeilen);
printMatrix(b);
Matrix sum = addMatrix(a, b);
printf("\nc[%d,%d]= a + b =\n", sum.spalten, sum.zeilen);
printMatrix(sum);
Matrix diff = subMatrix(a, b);
printf("\nc[%d,%d]= a - b =\n", diff.spalten, diff.zeilen);
printMatrix(diff);
Matrix bT = transposeMatrix(b);
printf("\nc[%d,%d]= b^T\n", bT.spalten, bT.zeilen);
printMatrix(bT);
Matrix c = multMatrix(a, bT); // a * b^T
printf("a * b^T = c\n");
// Nur die obere linke 2x2-Matrix drucken
printf("{\n");
for (int y = 0; y < 2; y++) {
printf(" ");
for (int x = 0; x < 2; x++) {
printf("%6.2f", getEntryAt(c, x, y));
if (x < 1) printf(" ");
}
printf("\n");
}
printf("}\n");
printf("\ndet(c) = %.2f\n", determMatrix(c));
// Speicher freigeben
destroyMatrix(&a);
destroyMatrix(&b);
destroyMatrix(&sum);
destroyMatrix(&diff);
destroyMatrix(&zero);
destroyMatrix(&randMat);
destroyMatrix(&bT);
destroyMatrix(&c);
return 0;
}