problem bei for-schleife



  • moin,ich habe folgendes problem bei einer for-schleife

    #include<iostream> 
    #include <stdlib.h>
    #include <complex> 
    
    using namespace std;
    
    int main()
    {
    
    complex <double> c;
    
    for((real(c) = -9)&& (imag(c) = -9);(real(c) <9)&&(imag(c)<9);c+=1)
    {
    cout << real(c) << "    " << imag(c) << endl;
    }
    
    system("pause");
    return 0;
    
    }
    

    leider verteht der dumme kompiler nicht dass er beide (imaginär und reel) teile um 1 erhöhen muss ,wenn ihr euch die ausgabe anguckt sieht ihr dass nur die reel teile um 1 erhöht werden,die imaginär bleiben aber bei -9 😞
    warum?
    kann mir jd mein source code verbessern? 🙂
    danke
    mfg



  • wie wäre es mit c += complex<double>(1, 1) ?

    btw. verwende cstdlib und nicht stdlib.h



  • hab ich grade versucht die ausgabe ist so

    -9 -9
    -8 -8
    .
    .
    .
    1 1
    2 2
    3 3
    .
    .
    .
    etc
    

    hier gibt der program nur 18 komplexe zahlen (zeilen)aus

    was ich eigetnlich will ist so

    -9 -9
    -9  -8
    -9   -7
    .
    .
    .
    .
    -8 -9
    -8  -8
    -8 -7
    .
    .
    .
    1 -9
    1 -8
    1 -7
    .
    .
    .
    etc
    

    alle mögliche kombinationen real teil von -9 bis 9 und imaginär von -9 bis 9

    also insgesamt 324 plus die zeile von 0-0 sind dann 323 komplexe zahlen oder (zeilen)
    kann mir jd da helfen 🙂
    mfg



  • Da benötigst du auch zwei verschachtelte Schleifen - in der äußeren zählst du den Realteil hoch, in der inneren den Imaginärteil (oder umgekehrt).



  • wie ? kannste mal das schreiben als source code das mache ich bei jedem versuch falsch,schreib mir nur die schleife
    bitte 🙂



  • Ich könnte ja sagen - schau in deinem Lehrbuch nach. Aber ich will mal nicht so sein:

    for(real(c)=-9;real(c)<=9;real(c)+=1)
      for(imag(c)=-9;imag(c)<=9;imag(c)+=1)
        mach was
    


  • natürlich habe ich vorher im lehrbuch nachgeschaut,ich dachte das solte ich mit dem operator && machen ,jetzt funktioniert danke Cstoll 🙂



  • Der operator&& gibt einen boole'schen Wert zurueck - naemlich das logische UND der beiden Argumente, was in der Initialisierung der for-Schleife keinen Effekt hat (das Ergebnis wird nie verwendet). Wer hat dir gesagt dass du op&& verwenden musst?



  • In dem Fall wäre es egal, ob er && oder , verwendet. Beides ist in dem Sinne korrekt. Denn auch der ,-Operator hat einen Rückgabewert, der in dem Fall ignoriert werden würde. Auch x = 0; gibt einen Wert zurück...



  • Fellhuhn schrieb:

    In dem Fall wäre es egal, ob er && oder , verwendet. Beides ist in dem Sinne korrekt. Denn auch der ,-Operator hat einen Rückgabewert, der in dem Fall ignoriert werden würde. Auch x = 0; gibt einen Wert zurück...

    nein, egal ist es nicht und korrekt auch nicht - auch wenn zufaellig das erwartete ergebnis dabei herauskommt.
    denn bei einem ausdruck a && b wird nur a und b ausgewertet wenn a true (also ungleich 0) ist. wenn aber a bereits false (gleich 0) ist, dann wird b gar nicht mehr ausgewertet.

    in diesem fall sind a und b zuweisungen, dass heisst wenn zuweisung a false liefert wird zuweisung b gar nicht mehr durchgefuehrt.

    ein beispiel:

    int i, j;
    for( (i = 1) && (j = 1); i < 5; ++i ) {}
    

    dies hat den den effekt, dass i und j mit 1 initialisiert werden. aber eben nur, weil der ausdruck (i = 1) 1 (also ungleich 0 und somit true) liefert. deshalb wird der ausdruck (j = 1) ueberhaupt erst ausgewertet.

    anderes beispiel:

    int i, j;
    for( (i = 0) && (j = 0); i < 5; ++i ) {}
    

    in dem fall bleibt j uninitialisiert. der ausdruck (i = 0) liefert 0 (also false) und deshalb wird der ausdruck (j = 0) gar nicht mehr ausgewertet.


Anmelden zum Antworten