115 lines
3.3 KiB
C
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;
|
|
}
|
|
|