In MAIN soll ein 2 dimensionales und dynamisches Feld angelegt werden. (Über einen Funktionsaufruf einer selbst geschriebenen Funktion).
Mit Hilfe einer zweiten Funktion sollen hier Werte eingelesen werden, damit das Feld zu weiteren Bearbeitungen zur Verfügung steht.
Es sollen zwei Funktionen a) Spaltensumme und b) Zeilensumme erzeugt werden, die dem Namen gemäß entsprechende Berechnungen
durchführen und den Pointer auf das dynamisch erzeugte Ergebnisfeld zurückgeben (1. Dimension).
Eine Funktion Check soll prüfen, ob die Gesamtsumme der Spaltensummen und die Gesamtsumme der Zeilensummen gleich sind.
// ************************************************************************************************
// Autor/en: http://www.online-vba.de - Marc Wershoven
// Verwendung der Quelltexte auf eigene Gefahr!
// Es gelten die Nutzungsbedingungen von www.Online-VBA.de!
// Original-Quelltext: www.online-vba.de/cpp_2ddynfeld.php
// ************************************************************************************************
#include <stdlib.h>
#include <stdio.h>
// ******************* PROTOTYPEN *******************
void erzfeld2dim(int *** p, int x, int y);
void fuellefeld(int ** p, int x, int y);
void anzeigen(int ** p,int x, int y);
int * zeilensumme(int ** p,int x, int y);
int * spaltensumme(int ** p,int x, int y);
void ausgabesummen(int *, int x);
void check(int *, int *, int x1, int x2);
// **************************************************
void main()
{
int ** feld;
int * zeilenfeld;
int * spaltenfeld;
erzfeld2dim(&feld,3,3);
fuellefeld(feld,3,3);
anzeigen(feld,3,3);
//Zeilensummen
zeilenfeld=zeilensumme(feld,3,3);
printf("\nDie Adresse des Ergebnisfeldes lautet: %p\n",zeilenfeld);
printf("Die Zeilensummen betragen: ");
ausgabesummen(zeilenfeld,3);
//Spaltensummen
spaltenfeld=spaltensumme(feld,3,3);
printf("\nDie Adresse des Ergebnisfeldes lautet: %p\n",spaltenfeld);
printf("Die Spaltensummen betragen: ");
ausgabesummen(spaltenfeld,3);
//Checkfunktion
check(spaltenfeld, zeilenfeld, 3, 3);
}
// ******************* FUNKTIONEN *******************
void erzfeld2dim(int *** p, int x, int y)
{
int i;
*p=(int**)malloc(x*sizeof(int *));
for(i=0;i<y;i++)
(*p)[i]=(int*)malloc(y*sizeof(int));
}
void fuellefeld(int ** p, int x, int y)
{
int i,j;
printf("Es werden nun die Werte fuer das zu verwendende Feld abgefragt!\n\n");
for(i=0;i<x;i++)
for(j=0;j<y;j++)
{
printf("Bitte Wert fuer Element [%i][%i] eingeben: ",i,j);
scanf("%i", &(p[i][j]));
}
}
void anzeigen(int ** p,int x, int y)
{
int i,j;
printf("\nDas Feld hat folgenden Inhalt:\n\n");
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
printf("%5i", p[i][j]);
printf("\n");
}
}
int * zeilensumme(int ** p,int x, int y)
{
int i,j;
int * efeld;
efeld=(int*) malloc(x*sizeof(int));
for(i=0;i<x;i++)
{
efeld[i]=0;
for(j=0;j<y;j++)
efeld[i]=efeld[i]+p[i][j];
}
return efeld;
}
void ausgabesummen(int * pe, int x)
{
int i;
for(i=0;i<x;i++)
printf("%5i",pe[i]);
printf("\n");
}
int * spaltensumme(int ** p,int x, int y)
{
int i,j;
int * efeld;
efeld=(int*) malloc(x*sizeof(int));
for(i=0;i<x;i++)
{
efeld[i]=0;
for(j=0;j<y;j++)
efeld[i]=efeld[i]+p[j][i];
}
return efeld;
}
void check(int * f1, int * f2, int x1, int x2)
{
int i,e1=0,e2=0;
for(i=0;i<x1;i++)
{
e1=e1+f1[i];
e2=e2+f2[i];
}
if(e1=e2)
printf("\nErgebnisse: %i = %i - Summen sind identisch!\n\n",e1,e2);
else
printf("\nErgebnisse: %i <> %i - Summen sind nicht identisch!\n\n",e1,e2);
}