for schleife Zähleroperator ++k



  • Hi Leute 🙂
    ich hab da mal ne Frage 😕

    int choosek (int n, int k)

    if (k < n_k)
    {
    k=n_k;
    n_k=n-k;
    }
    for (i=1; i<=n_k; i++)
    nchsk*=(++k); ➡ wie ist es hier mit ++k gemeint ???
    nchsk/=i;
    }
    return nchsk

    Können wir da ein Zahlen Bsp machen z.B. n=8; k=1;
    Liebe Grüßee
    mathgirl


  • Mod

    Der Ausdruck ++k ergibt den Wert k+1 und hat außerdem den Nebeneffekt, k um 1 zu erhöhen. Bei k = 1 ergibt ++k demnach 2 und hinterher hat k auch den Wert 2. Das n ist an dem Gesamtausdruck nicht beteiligt, ich weiß nicht, was du dir da von einem Beispiel erhoffst.

    Diese Frage wird in jedem Anfängerbuch, auch den schlechten, zu C und C++, ja selbst zu Java und vielen anderen Sprachen beantwortet.



  • mathgirl schrieb:

    Hi Leute 🙂
    ich hab da mal ne Frage 😕

    int choosek (int n, int k)
    
    if (k < n_k)
    {
    k=n_k;
    n_k=n-k;
    }
    for (i=1; i<=n_k; i++)
    nchsk*=(++k);// wie ist es hier mit ++k gemeint ??? 
    nchsk/=i;
    }
    return nchsk
    

    Können wir da ein Zahlen Bsp machen z.B. n=8; k=1;
    Liebe Grüßee
    mathgirl

    ++k bedeutet k wird um einen erhöht und dann aufgerufen. Unterschied zu k++ da wird erst k aufgerufen und dann erhöht.



  • Aufgerufen stimmt nicht ganz, ausgewertet passt besser.

    Das ganze lässt sich anhand eines Beispiels sehr einfach erklären:

    #include <iostream>
    
    class MyInt
    {
    	int x;
    
    public:
    	MyInt(int i = 0)
    		: x(i)
    	{ }
    
    	int get() const 
    	{
    		return this->x;
    	}
    
    	MyInt& operator++()
    	{
    		std::cout << "++X" << std::endl;
    		this->x = this->x + 1;
    		return *this;
    	}
    
    	MyInt operator++(int)
    	{
    		std::cout << "X++ \t->";
    
    		MyInt tmp(*this);
    		++(*this); // ruft den anderen ++ Operator auf
    
    		std::cout << std::endl;
    		return tmp;
    	}
    };
    
    int main()
    {
    	using std::cout;
    	using std::endl;
    
    	MyInt i;
    
    	cout << "i = " << i.get() << endl;
    	i++;
    	++i;
    	cout << "i = " << i.get() << endl;
    
    	return 0;
    }
    

    Da lässt sich jetzt natürlich noch ein wenig rumexperimentieren.

    Was da passiert? Ich habe den ++x und den x++ Operator überladen, also selbst geschrieben. Und wenn du dir die Implementierung anschaust, siehst du auch genau den Unterschied.


Anmelden zum Antworten