This blog post has been published on 2010-12-05 and may be out of date.
Mit diesen kleinen Programmen kann man Matrix-Addition durchführen, indem die Werte der Matrizen jeweils zusammengerechnet werden. In dem zweiten Programm habe ich mit Funktionen und Pointeren gearbeitet.
/*
============================================================================
Name : matrix-addition_1.c
Author : Voku
Version : 1.0
Description : Matrix-Addition
============================================================================
*/
#include <stdio.h>
#define MAX_ZEILEN 10
#define MAX_SPALTEN 10
int main (void) {
int index_zeile, zeile, index_spalte, spalte;
double array_a[MAX_ZEILEN][MAX_SPALTEN], array_b[MAX_ZEILEN][MAX_SPALTEN], array_c[MAX_ZEILEN][MAX_SPALTEN];
// Anzahl der Zeilen einlesen
do {
printf("Anzahl der Zeilen (1-%i): ",MAX_ZEILEN);
scanf("%i",&zeile);
if (zeile > MAX_ZEILEN ) {
printf("\n zu viel Zeilen...\n\n");
} else if (zeile < 1) {
printf("\n zu wenig Zeilen...\n\n");
}
} while (zeile > MAX_ZEILEN || zeile < 1);
printf("\n");
// Anzahl der Spalten einlesen
do {
printf("Anzahl der Spalten (1-%i): ",MAX_SPALTEN);
scanf("%i",&spalte);
if (spalte > MAX_SPALTEN ) {
printf("\n zu viel Spalten...\n\n");
} else if (zeile < 1) {
printf("\n zu wenig Spalten...\n\n");
}
} while (spalte > MAX_SPALTEN || spalte < 1);
printf("\n");
// Werte fuer Matrize 1 einlesen
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
printf("Wert fuer Zeile %i und Spalte %i (Matrize 1) eingeben: ",index_zeile+1, index_spalte+1);
scanf("%lf",&array_a[index_zeile][index_spalte]);
}
}
printf("\n");
// Werte fuer Matrize 2 einlesen
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
printf("Wert fuer Zeile %i und Spalte %i (Matrize 2) eingeben: ",index_zeile+1, index_spalte+1);
scanf("%lf",&array_b[index_zeile][index_spalte]);
}
}
// Array A und B addieren und in Array C schreiben
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
array_c[index_zeile][index_spalte]=array_a[index_zeile][index_spalte]+array_b[index_zeile][index_spalte];
}
}
// Ausgabe
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
printf("\n (");
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
printf(" %.2lf", array_a[index_zeile][index_spalte]);
}
printf(" ) ");
}
printf("\n\n +\n");
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
printf("\n (");
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
printf(" %.2lf", array_b[index_zeile][index_spalte]);
}
printf(" ) ");
}
printf("\n\n =\n");
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
printf("\n (");
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
printf(" %.2lf", array_c[index_zeile][index_spalte]);
}
printf(" ) ");
}
return 0;
}
/*
============================================================================
Name : matrix-addition_2.c
Author : Voku
Version : 1.0
Description : Matrix-Addition mit Funktionen (+Pointer)
============================================================================
*/
#include <stdio.h>
#define MAX_ZEILEN 10
#define MAX_SPALTEN 10
void matrix_addition (double *array_a, double *array_b, double *array_c, int zeile, int spalte) {
int index_zeile, index_spalte;
// printf("*array_a %lf\n*array_b %lf\n*array_c %lf\n", *array_a, *array_b, *array_c); // TEST-Ausgabe
for(index_zeile=0; index_zeile < zeile; index_zeile++) {
for(index_spalte=0; index_spalte < spalte; index_spalte++) {
*(array_c + (index_zeile * spalte) + index_spalte) = *(array_a + (index_zeile * spalte) + index_spalte) + *(array_b + (index_zeile * spalte) + index_spalte);
}
printf("\n");
}
}
void matrix_ausgabe (double *matrix, int zeile, int spalte) {
int index_zeile, index_spalte;
// printf("*matrix %lf", *matrix); // TEST-Ausgabe
printf("\n\n");
for(index_zeile=0; index_zeile < zeile; index_zeile++) {
for(index_spalte=0; index_spalte < spalte; index_spalte++) {
printf(" %.2lf", *(matrix + (index_zeile * spalte) + index_spalte));
}
printf("\n");
}
}
int main (void) {
int index_zeile, zeile, index_spalte, spalte;
// Anzahl der Zeilen einlesen
do {
printf("Anzahl der Zeilen (1-%i): ",MAX_ZEILEN);
scanf("%i",&zeile);
if (zeile > MAX_ZEILEN ) {
printf("\n zu viel Zeilen...\n\n");
} else if (zeile < 1) {
printf("\n zu wenig Zeilen...\n\n");
}
} while (zeile > MAX_ZEILEN || zeile < 1);
printf("\n");
// Anzahl der Spalten einlesen
do {
printf("Anzahl der Spalten (1-%i): ",MAX_SPALTEN);
scanf("%i",&spalte);
if (spalte > MAX_SPALTEN ) {
printf("\n zu viel Spalten...\n\n");
} else if (zeile < 1) {
printf("\n zu wenig Spalten...\n\n");
}
} while (spalte > MAX_SPALTEN || spalte < 1);
printf("\n");
double array_a[zeile][spalte], array_b[zeile][spalte], array_c[zeile][spalte];
// Werte fuer Matrize 1 einlesen
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
printf("Wert fuer Zeile %i und Spalte %i (Matrize 1) eingeben: ",index_zeile+1, index_spalte+1);
scanf("%lf",&array_a[index_zeile][index_spalte]);
}
}
printf("\n");
// Werte fuer Matrize 2 einlesen
for (index_zeile=0; index_zeile < zeile; index_zeile++) {
for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
printf("Wert fuer Zeile %i und Spalte %i (Matrize 2) eingeben: ",index_zeile+1, index_spalte+1);
scanf("%lf",&array_b[index_zeile][index_spalte]);
}
}
// printf("zeile + spalta: %i, %i", zeile, spalte); // TEST-Ausgabe
// Array A und B addieren und in Array C schreiben
matrix_addition(&array_a[0][0], &array_b[0][0], &array_c[0][0], zeile, spalte);
// Ausgabe
matrix_ausgabe(&array_a[0][0], zeile, spalte);
printf("\n +");
matrix_ausgabe(&array_b[0][0], zeile, spalte);
printf("\n =");
matrix_ausgabe(&array_c[0][0], zeile, spalte);
return 0;
}