Einzelnen Beitrag anzeigen
Alt 09.04.2002, 02:43   #1
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

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
kikakater ist offline   Mit Zitat antworten