for schleife Zähleroperator ++k
-
Hi Leute
ich hab da mal ne Frageint 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 nchskKönnen wir da ein Zahlen Bsp machen z.B. n=8; k=1;
Liebe Grüßee
mathgirl
-
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 Frageint 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.