2 2-Dim. Array addieren
-
Einfaches Beispiel:
int add(int x, int y) { // die Funktion erwartet 2 ganzzahlige Parameter return x + y; // die Parameter werden addiert und das Ergebnis der Addition zurückgegeben } int main() { int c; c = add(3, 4); // 3 und 4 werden als Werte für die Parameter in die Funktion gegeben // der Wert, den die Funktion zurückliefert, wird anschließend in c gesichert printf("Result: %d", c); return 0; }
-
oh...habe etwas vergessen!
ich meine, ich weiß (noch) nicht, wie das mit der Parameterübergabe von arrays an Funktionen ist!
ich muss das ja irgendwie nutzen; so steht es jedenfalls in der aufgabe!
-
-
Im Prinzip auch nicht besonders komplex:
void outpArr(int* arr) { int i; for(i=0; i<=sizeof(arr); i++) { printf("%d\n",arr[i]); } } int main(void) { int array[5]; int i; for(i=0; i<5; i++) { array[i] = i+2; } outpArr(array); return 0; }
Vielleicht solltest du den Kauf eines Buche in betracht ziehen. Das sind eigentlich Themen, die du in jeder halbwegs brauchbaren Fachliteratur nachlesen kannst...
-
Hallo Matthias
Du hast aber auch einen schweren Fehler in deinem Programm.
for(i=0; i<=sizeof(arr); i++)
sizeof(arr) liefert die anzahl der Bytes vonn arr. Das sind 4 * die Anzahl der Feldelemente. (Da int mit 4 Bytes definiert ist). Das gibt dir eine riesige Speicherverletzung
Korrekt muss es lauten
for(i = 0; i < (sizeof(arr) / sizeof(int)); i++)
Gruß Robert
-
Hups.. Naja, kann zu der Uhrzeit ja schon mal passieren. Merkt man dann ja auch spätestens der Debugger
-
Razer_6 schrieb:
sizeof(arr) liefert die anzahl der Bytes vonn arr. Das sind 4 * die Anzahl der Feldelemente. (Da int mit 4 Bytes definiert ist). Das gibt dir eine riesige Speicherverletzung
Noch schlimmer: sizeof(arr) liefert die Größe EINES int-Zeigers, egal wieviele Daten dort dahinterstehen. An die tatsächliche Größe des Arrays kommst du außerhalb der main() nicht mehr portabel ran (das heißt für dich: Wenn du nicht davon ausgehen kannst, diese Größe zu kennen, mußt du sie als Parameter mitgeben).
-
Ich möchte diese Aufgabe jetzt mit Zeigern lösen und meine Lösung sieht für die erste Hälfte wie folgt aus:
#include <stdio.h> #define MAX_X 15 #define MAX_Y 10 int init_matrix(int, int) int main(void) { int matrix1[MAX_X][MAX_Y]; int matrix2[MAX_X][MAX_Y]; init_matrix(matrix1,0); init_matrix(matrix2,1); return 0; } void init_matrix(int (*matrix)[MAX_Y],int x) { int i, k; if(x==0) { int m=1; for((*matrix)< MAX_X; (*matrix)++) { for(k=0; k < MAX_Y; k++) { *matrix(*matrix)[k]=m++; } } } else { int p=MAX_X*MAX_Y; for((*matrix)< MAX_X; (*matrix)++) { for(k=0; k < MAX_Y; k++) { *matrix(*matrix)[k]=p--; } } } }
Ich habe ihn noch nicht umsetzen lassen. Aber kann mir jemand jetzt schon sagen, wo meine Fehler sein könnten?!
gruß Sheddy
-
@sheddy "Ich möchte diese Aufgabe jetzt mit Zeigern lösen und meine Lösung sieht für die erste Hälfte wie folgt aus:"
Wenn schon mit Zeigern, dann so:#define MAX_X 15 #define MAX_Y 10 void init_matrix(int(*)[MAX_Y], int); int main(void) { int matrix1[MAX_X][MAX_Y]; int matrix2[MAX_X][MAX_Y]; init_matrix(matrix1,0); init_matrix(matrix2,1); return 0; } void init_matrix(int(*matrix)[MAX_Y],int x) { int i, k; if(x==0) { int m=1; for(i = 0; i< MAX_X; i++) { for(k=0; k < MAX_Y; k++) { matrix[i][k]=m++; } } } else { int p=MAX_X*MAX_Y; for(i = 0; i < MAX_X; i++) { for(k=0; k < MAX_Y; k++) { matrix[i][k]=p--; } } } }
:xmas1:
-
Okay, sonst habe ich auch alles so!
habe es nachdem ich es gepostet habe auch in deine Form gebracht un er hat ständig noch einen Fehler gebracht!
error C2664: 'init_matrix': Konvertierung des Parameters 1 von 'int [15][10]' in 'int' nicht möglich
Und ich glaube, es lag ständig an der Funktions-Definition im Präprozessor!
Ich habe stundenlang nach diesem blöden Fehler gesucht!!
Endlich, danke...
halt moment:
Wo liegt mein Fehler in der Präprozessoranweisung?!?!
Wenn ich nämlich alle Funktionen vor die main-Funktion schiebe, klappt das Programm.So aber nicht:
#include <stdio.h> #define MAX_X 15 #define MAX_Y 10 void init_matrix(int (*)[MAX_Y],int); void print_matrix(int (*)[MAX_Y],int (*)[MAX_Y],int (*)[MAX_Y]); void add_matrix(int (*)[MAX_Y]); int main(void) { int matrix1[MAX_X][MAX_Y]; int matrix2[MAX_X][MAX_Y]; int matrix3[MAX_X][MAX_Y]; init_matrix(matrix1,1); init_matrix(matrix2,0); add_matrix(matrix1, matrix2, matrix3); print_matrix(matrix1); print_matrix(matrix2); print_matrix(matrix3); return 0; } void init_matrix(int (*imat)[MAX_Y], int x) { int i,k; if(x==1) { int m=1; for(i=0;i < MAX_X; i++) { for(k=0; k < MAX_Y; k++) { imat[i][k]=m++; } } } else { int m=MAX_X*MAX_Y; for(i=0;i < MAX_X; i++) { for(k=0; k < MAX_Y; k++) { imat[i][k]=m--; } } } } void add_matrix(int (*amat1)[MAX_Y],int (*amat2)[MAX_Y],int (*amat3)[MAX_Y]) { int i,k; for(i=0;i < MAX_X; i++) { for(k=0; k < MAX_Y; k++) { amat3[i][k]=amat1[i][k]+amat2[i][k]; } } } void print_matrix(int (*pmat)[MAX_Y]) { int i,k; for(i=0;i < MAX_X; i++) { for(k=0; k < MAX_Y; k++) { printf("%5d",pmat[i][k]); } printf("\n"); } printf("\n"); }
Warum?!
-
STOPP
Habe den Flüchtigkeitsfehler gefunden!!1
Vielen Danke für eure Hilfe