Der gute alte Zeiger!



  • Hi!
    Ich bin der Meinung, dass ich die Aufgabe gelöst habe!! aber irgendwie gibt er immer noch 0 0 aus! Kann mir mal jemand helfen?

    /*
    Die Funktion CountEvensAndOdds soll die Anzahl der geraden (numEvens) und die Anzahl der ungeraden Zahlen (numOdds)
    in einem Feld array der Laenge n bestimmen. Beide Werte sollen in Speicherzellen abgelegt werden, deren Adressen vom aufrufenden
    Programm an die Funktion CountEvensAndOdds uebergeben werden. Ergaenzen Sie in dem obigen Programmstueck den Rumpf der Funktion CountEvensAndOdds.

    Illustrieren Sie den Laufzeitkeller nach Abarbeitung der Funktion CountEvensAndOdds, aber bevor sie verlassen wird.
    */

    #include<stdio.h>
    #include<stdlib.h>
    
    void CountEvensAndOdds ( int array[], int n, int *numEvens, int *numOdds); 
    
    void main ( void )
    { 
       int arr[] = {7,4,13,8};
       int numEvens = 0; 
       int numOdds = 0;
    
       CountEvensAndOdds(arr,4,&numEvens,&numOdds);
       printf("Das Feld enthaelt %d gerade und %d ungerade Zahlen\n", numEvens, numOdds);
    }
    
    void CountEvensAndOdds(int array[], int n, int *numEvens, int *numOdds)
    {
    	int i;
    	for(i=0;i<n;i++)
    	{
    		if(array[i]%2==0)
    			*numEvens++;
    		else
    			*numOdds++;
    
    	}
    }
    

    gruß Sheddy



  • sheddy schrieb:

    Laufzeitkeller

    LOL 😃 Man sollte nicht alles übersetzen

    Du erhöhst nur den Pointer. (*bal)++;



  • void CountEvensAndOdds(int array[], int n, int *numEvens, int *numOdds)
    {
        int i;
        for(i=0;i<n;i++)
            if(array[i]&1)
                (*numEvens)++;
        *numOdds = n - *numEvens;
    }
    

    🙂
    'laufzeitkeller' soll wohl der stack sein?



  • Illustrieren Sie den Laufzeitkeller nach Abarbeitung der Funktion CountEvensAndOdds, aber bevor sie verlassen wird.

    das ist ne zweite aufgabe aus meiner vorlesung, die ihr nicht versteht! sorry!! einfach nur die erste aufgabe über dem absatz durchlesen!!!

    ich will doch einfach den NUM etc-. hochzählen!!! und ich bin der meinung, dass es so richtig ist!!! was ist daran falsch?!?!

    warum sollt ich "*numOdds = n - *numEvens;" machen, wenn ich anstatt "bla%2" mache!?!

    ichg muss doch einfach die variablen hochzählen,oder?!?!

    gruß sheddy



  • Deine Lösung ist schon ok.
    vista's Lösung ist lediglich ein anderer Ansatz.
    Er zählt nur numEvens, da sich hinterher numOdds aus n - numEvens ergibt.



  • sheddy schrieb:

    Illustrieren Sie den Laufzeitkeller nach Abarbeitung der Funktion CountEvensAndOdds, aber bevor sie verlassen wird.
    das ist ne zweite aufgabe aus meiner vorlesung, die ihr nicht versteht! sorry!! einfach nur die erste aufgabe über dem absatz durchlesen!!!

    auch sorry 😉
    laufzeitkeller 😃 versteht kein schwein, der nicht irgendwann mal den begriff 'kellerspeicher' gehört hat 😉
    ausserdem: das "*numOdds = n - *numEvens;" hat den gleichen effekt wie dein code.
    sowas gewöhnt man sich an, wenn man mit schwachbrüstigen systemen und miesen compilern rumfummelt (das nennt sich 'premature optimization', in insiderkreisen auch als C++ bekannt 😃 ). bei wiederholtem dereferenzieren in schleifen verlässt man sich zu sehr auf die optimierungsfähigkeiten des compilers (unser code ist in dieser hinsicht übrigens suboptimal, weil in der schleife immer noch das "(*numEvens)++;" steht).



  • ⚠ (*numEvens)++; != *numEvens++; ⚠

    Auch schön: lokales Gedächtnis


Anmelden zum Antworten