![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Jr. Member
Registriert seit: 20.05.2001
Alter: 42
Beiträge: 72
|
![]() 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 |
![]() |
![]() |
![]() |
#2 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() 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 ![]() |
![]() |
![]() |
![]() |
#3 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() 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 |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|