WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Wie mache ich zweidimensionale Felder in C++? (http://www.wcm.at/forum/showthread.php?t=52546)

Hamster Riot 08.04.2002 19:24

Wie mache ich zweidimensionale Felder in C++?
 
Hallo Leute!

Ich habe ein Problem beim C++ programmieren. Ich kann leider keine zweidimensionalen Felder machen bzw. ansprechen. Könnt ihr mir bitte helfen?

Danke!

Hamster Riot

irrsinn 08.04.2002 22:44

ganz einfach. zB

unsigned int feldname[30][30];

damit legst du ein 30mal30 feld an.

ansprechen tust du das ganze dann wie folgt: feldname[0][0] = 2;

vorsicht. mehrdimensionale felder können unmengen an arbeitsspeicher verschlingen. (was unter windows generell zu abstürzen führt) darum :tux: !

kikakater 09.04.2002 02:43

Mehrdimensionale Felder legt man dynamisch so an:

int * reserve_space_for_3dim_integer_matrix (int dim1, int dim2, int dim3)
{
int *startadresse;
startadresse= (int *) malloc( sizeof(int) * (dim1 * dim2 * dim3 + 4) );

startadresse[0]= 3; /* 3 Dimensionen */
startadresse[1]= dim1; /* Ausdehnung der 1. Dimension */
startadresse[2]= dim2; /* Ausdehnung der 2. Dimension */
startadresse[3]= dim3; /* Ausdehnung der 3. Dimension */

return startadresse;
}

void main (void)
{
int *zeiger_auf_3dimensionale_matrix; /* feld mit 3 dimensionen */

zeiger_auf_3dimensionale_matrix= reserve_space_for_3dim_integer_matrix(10,20,12);

if(!zeiger_auf_3dimensionale_matrix) { printf("zuwenig freier Speicher vorhanden !\n"); exit(0); }

matrix_werte_einlesen(zeiger_auf_3dimensionale_mat rix);
matrix_werte_eingeben_bzw_nachtraeglich_veraendern (zeiger_auf_3dimensionale_matrix);
matrix_manipulieren(zeiger_auf_3dimensionale_matri x);
matrix_werte_ausgeben(zeiger_auf_3dimensionale_mat rix);
matrix_in_einer_datei_sichern("C:\\DAT\\matrix.dat ",zeiger_auf_3dimensionale_matrix);

/* Speicherplatz, der dynamisch angefordert worden ist, wieder freigeben am Programmende */
free(zeiger_auf_3dimensionale_matrix);
}

Der Zugriff auf das x.te y.te z.te Element erfolgt so:

int return_element_of_3dimensional_array(int *array, int x, int y, int z)
{
return *(array + 1 + array[0] + ((array[2] + array[3]) * x + array[3] * y + z));
}

void main (void)
{

int a,b,c,*matrix;

matrix= reserve_space_for_3dim_integer_matrix(2,3,5);

if(!matrix) { printf("zuwenig freier Speicher vorhanden !\n"); exit(0); }

/* Ausgabe aller Elemente des Arrays (=der Matrix) */

for(a=0;a<matrix[1];a++)
for(b=0;b<matrix[2];b++)
for(c=0;c<matrix[3];c++)
printf("Das Element [%d][%d][%d] lautet: %d\n",a,b,c,return_element_of_3dimensional_array(m atrix,a,b,c));
}


Das Programm bzw. die Funktionen kann bzw. können selbstverständlich auch von 3 dimensionaler Behandlung eines Arrays auf die Behandlung allgemein n-dimensionaler Felder (also Arrays) umgeschrieben werden. Im Element 0 ... matrix[0] ... steht die Anzahl der Dimensionen. Danach folgen die Ausprägungen der Dimensionen.

Kikakater


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag