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


Anmelden zum Antworten