echt ein overflow



  • hi
    bin anfänger also nicht lachen:)

    wie kann ich die folgende schleife:

    {
    {
    cout<<"short:\n";
    short i=2;
    while(1) {
    short t=i*i;
    if(t<=i) break;
    i=t;
    cout<<i<<"\n";
    }
    }

    in eine for schleife umformen.

    es geht darum ein zahl solange mit sich selbst zu multipl. bis es zu einem overflow kommt.

    eine erklärung dazu wäre auch nett, kann total nicht verstehen was er da macht.

    meine version war:

    int main()
    {

    unsigned int b=-1;
    int a=2;

    for(int i =0; i++;)
    {
    a=a*a;
    if(a>b) break;
    }

    cout << a <<"\n" ;

    }
    was natürlich nicht klappt.

    danke


  • Mod

    jango schrieb:

    meine version war:

    int main()
    {
      
    unsigned int b=-1;
    int a=2;
    
    for(int i =0; i++;)
    {
      a=a*a;
      if(a>b) break;
    }
    
    cout << a <<"\n" ;
    
    }
    

    was natürlich nicht klappt.

    Du denkst hier schon in die richtige Richtung, nur deine Syntax ist noch falsch:

    unsigned int b=-1;
    int a=2;
    
    for(int i =0;/*Abbruchbedingung hierher!*/; i++)  // Achte auf die Stellung der Semikolons
    	{
    		a=a*a;
    		if(a>b) break;  // Hierdrüber solltest du nochmal nachdenken, diese Schleife bricht nie ab. 
    						// Außerdem kannst du die Abbruchbedingung auch in den Schleifenkopf schreiben, siehe oben
    
    /* Und noch eine Anmerkung: Wozu soll i gut sein? Es wird nirgends verwendet. 
    Nur um die Schleife am Laufen zu halten? Wozu dann überhaupt ein for-Schleife 
    nehmen? */
    	}
    

    edit: Und da mir gerade langweilig ist: Hier ein Programm, dass das gewünschte leistet. guck dir aber erstmal die Anmerkungen oben an, damit du verstehst, warum ich es ziemlich anders mache als du.

    int a;  
    for(a =2; a>0; a*=a);
    
    cout << a << endl;  // Gibt für alle gängigen Implementierungen 0 aus.
    


  • danke jedoch hab ich es nicht verstanden...
    könntest du eventuell mir einfach sagen was ich falsch gemacht habe, wäre sehr cool.
    wir schreiben nächste woche die info klausur und ich hab nichts gemacht dafür 🙄.

    gruß



  • jango schrieb:

    könntest du eventuell mir einfach sagen was ich falsch gemacht habe, wäre sehr cool.

    Findest du nicht, daß SeppJ das schon sehr ausführlich getan hat? Ein bißchen Lesen und Verstehen sollte schon drin sein, sonst kann das ja nichts werden mit deiner Klausur... 🙄



  • wenn ich das so sehen würde hätte ich nicht wieder gefragt 🙂

    keine ahnung vielleicht bin ich müde oder so... hab es nicht kapiert.



  • Dann schlaf eine Nacht drüber und versuchs morgen (eigentlich heute) nochmals. 😉

    An der Klausur wirst du wohl keine Zeit übrig haben, dann ist es sicher auch nicht schlecht, du versuchst den Code schnell nachzuvollziehen.



  • jango schrieb:

    unsigned int b=-1;

    Hmmm, geht das überhaupt? 😕
    Weil keiner was gesagt hat.

    Lg



  • ="Mentras"

    jango schrieb:

    unsigned int b=-1;

    Hmmm, geht das überhaupt? 😕
    Weil keiner was gesagt hat.

    Ist das gleiche wie:

    unsigned b = MAX_UINT;
    

    Bei -1 sind alle bits auf 1 gesetzt wegen der Komplimentdarstellung.



  • DeepCopy schrieb:

    Bei -1 sind alle bits auf 1 gesetzt wegen der Komplimentdarstellung.

    Die Zahl bedankt sich für das Komplement.


Anmelden zum Antworten