Anzeige

VBA
Programmierer
gesucht?
 
Anzeige
VBA Programmierer gesucht?
 

Einfache C/C++ Beispiele für Einsteiger

Einfache Übung zu einem 2 dimensionalen und dynamischen Feld

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);
}



Autor: Marc Wershoven (2001)

Zum Seitenanfang