C-Programm – Matrix-Addition
Dieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!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;
} Bewertung:
Ähnliche Blog-Einträge:
C-Programm – doppelte Schleife
C-Programm – eulersche Zahl
C-Programm – Euro & Dollar Umrechnung
C-Programm – Skalarprodukt
