Hilfe pointer/array , kein Rückgabewert [c Anfänger]



  • Hi, ich bräuchte eure Hilfe ich hab eine Hausaufgabe bekommen in der ich aus einem Array ,das Minimum,die Summe und das Maximum ausgeben muss. Die Summe muss ich mithilfe eines pointers ausgeben und darf keinen Rückgabewert besitzen, leider happerts genau daran.

    Hier die Aufgaben Stellung und weiter unten mein Lösungsvorschlag der leider eine Falsche summe ausgibt (64) .

    [list]

    MEIN ANSATZ:

    #include <stdio.h>
    #include <stdlib.h>
    
    void print_array(int array[], int len) {
       printf("Array: "); 
       for(int i=0;len>i;i++){
    
        printf("%d" ,array[i] );
    }
    
    }
    
    int sum(int array[],int len,int *p) {  // HIER HAB ICH MEINE PROBLEME
                                           // sum() darf kein Rückgabewert haben
    
     for(int j=0;len>j;j++){               // Void !
    *p += array[j] ;
     }
     return *p;
    }
    
    // Schreibe die Funktion "sum", "min" und "max"
    
    int main() {
    
        int array[] = {9,4, 7, 8, 10, 5, 1, 6, 3, 2};
        int len =10;
        int *p;
        p=array;
    
    	print_array(array, len);
    
    	int dadu=sum(array,len,p);
        printf("\nSumme:%d\n", dadu);
    
    	// Gebe hier nacheinander das Minimum, Maximum und die Summe
        // aus. Trenne die Werte durch einen einzelnen Zeilenumbruch.
    }
    


  • Beachte die Compiler-Warnungen und arbeite sie schrittweise ab.
    Wenn du keine erhältst, schalte die Warnstufe des Compiler hoch.



  • [quote="Wutz"]Beachte die Compiler-Warnungen und arbeite sie schrittweise ab.
    Wenn du keine erhältst, schalte die Warnstufe des Compiler hoch.[/quote]

    Ich benutze std=c99 und -Wall und erhalte keine Compiler Fehler, ich glaube es ist auch kein Compiler Fehler in meinem Code sondern irgendein Logik Fehler den ich nicht finde.

    Wie erhöhe ich den die Warnstufe?



  • Der Code kompiliert bei mir auch ohne Fehler und Warnungen, also nehme ich an, dass es sich um ein Verständnisproblem handelt.
    Wo genau hast du Probleme mit der sum-Funktionsaufgabe?



  • [quote="Singender Holzkübel"]Der Code kompiliert bei mir auch ohne Fehler und Warnungen, also nehme ich an, dass es sich um ein Verständnisproblem handelt.
    Wo genau hast du Probleme mit der sum-Funktionsaufgabe?[/quote]

    Ich muss in der sum-funktion die Summe aller zahlen im array errechnen und diese mithilfe des pointers (call by reference) ausgeben ohne rückgabewert. Ich erhalte aber anstatt 55 immer 64 , dauern addiert er die erste Zahl(9) im array doppelt.

    Deswegen hab ich das geühl das ich den Pointer vollkommen falsch verwende



  • regnur schrieb:

    Deswegen hab ich das geühl das ich den Pointer vollkommen falsch verwende

    Jep. Überleg Dir mal, in welcher Variable (aus main) die Summe berechnet wird.



  • regnur schrieb:

    Singender Holzkübel schrieb:

    Der Code kompiliert bei mir auch ohne Fehler und Warnungen, also nehme ich an, dass es sich um ein Verständnisproblem handelt.
    Wo genau hast du Probleme mit der sum-Funktionsaufgabe?

    Ich muss in der sum-funktion die Summe aller zahlen im array errechnen und diese mithilfe des pointers (call by reference) ausgeben ohne rückgabewert. Ich erhalte aber anstatt 55 immer 64 , dauern addiert er die erste Zahl(9) im array doppelt.

    Deswegen hab ich das geühl das ich den Pointer vollkommen falsch verwende

    Das Problem liegt am Aufruf deiner sum Funktion.
    Über das Argument p soll die Addresse deiner Variable übergeben werden, in der das Ergebnis der sum Funktion gespeichert wird.
    Du übergibst aber die Addresse deines Arrays, und nicht die einer Ergebnis-Variable.

    Deine sum Funktion erhöt also immer den Wert hinter p. p selbst aber zeigt dabei auf das erste Element deines Arrays. (Die Addresse eines Arrays ist auch die Addresse des ersten Elements in diesen Array)



  • [quote="Singender Holzkübel"]
    Das Problem liegt am Aufruf deiner sum Funktion.
    Über das Argument p soll die Addresse deiner Variable übergeben werden, in der das Ergebnis der sum Funktion gespeichert wird.
    Du übergibst aber die Addresse deines Arrays, und nicht die einer Ergebnis-Variable.

    Deine sum Funktion erhöt also immer den Wert hinter p. p selbst aber zeigt dabei auf das erste Element deines Arrays. (Die Addresse eines Arrays ist auch die Addresse des ersten Elements in diesen Array)[/quote]

    Danke , 👍 😃
    So jetzt habe ich deas richtige Ergebnis:
    int sum(int array[],int len,int *p) {

    int temp=0;
    for(int j=0;len>j;j++){
    temp += array[j] ;
    }
    return *p=temp;
    }

    nur wie übertrage ich den Wert ,ohne return und void anstelle des int ,in meine main so dass ich die Summe ausgeben kann? Also wie kann ich den Zeiger auf temp richten und dann ausgeben?



  • Danke euch nun ist laut uni Bot meine HA richtig , danke :D.

    void sum(int array[],int len,int *p) {

    int temp=0;
    for(int j=0;len>j;j++){
    temp += array[j] ;
    }
    *p = temp;
    }

    int main(){
    sum(array,len,&p);

    }

    nur verstehe ich die Fehlermeldung nicht;

    C:\Users\Cooltek\Desktop\Studium\Informatik\Hausaufgaben\ckurs\Blatt05\Vorgaben\ckurs_blatt05_aufgabe01.c In function 'main':
    65 2 C:\Users\Cooltek\Desktop\Studium\Informatik\Hausaufgaben\ckurs\Blatt05\Vorgaben\ckurs_blatt05_aufgabe01.c [Warning] passing argument 3 of 'sum' from incompatible pointer type [enabled by default]
    42 6 C:\Users\Cooltek\Desktop\Studium\Informatik\Hausaufgaben\ckurs\Blatt05\Vorgaben\ckurs_blatt05_aufgabe01.c [Note] expected 'int *' but argument is of type 'int **'



  • // ...
    int summe;
    
    sum(array, len, &summe);
    


  • [quote="Th69"]

    // ...
    int summe;
    
    sum(array, len, &summe);
    

    [/quote]

    Ah okey danke. 🙂



  • regnur schrieb:

    Th69 schrieb:

    // ...
    int summe;
    
    sum(array, len, &summe);
    

    Ah okey danke. 🙂

    Du solltest mal "BBCode in diesem Beitrag deaktivieren" deaktivieren 😉


Anmelden zum Antworten