Schachbrett mit Reiskörner



  • z. B. so:

    long long x;
    for(int i=0; i<64; i++) {
         x = 2 << i;
         cout << x << endl;
    }
    

    http://de.wikipedia.org/wiki/Bitweiser_Operator



  • curry-king schrieb:

    long long x;
    for(int i=0; i<64; i++) {
         x = 2 << i;
         cout << x << endl;
    }
    

    Du meintest wohl 1 << i und cout << (i+1) << '\t' << x << '\n';


  • Mod

    Oder auch:

    cout << "18446744073709551615" << endl;
    


  • Sebastian Pizer schrieb:

    curry-king schrieb:

    long long x;
    for(int i=0; i<64; i++) {
         x = 2 << i;
         cout << x << endl;
    }
    

    Du meintest wohl 1 << i und cout << (i+1) << '\t' << x << '\n';

    Ehm, oh, ähh, ja meinte ich!



  • Hey könnte jemand in dieses Programm eine While-Schleife einbauen ???



  • Glückskeks schrieb:

    Hey könnte jemand in dieses Programm eine While-Schleife einbauen ???

    Klar. Aber da gibt es viele Möglichkeiten.

    Davor:

    long long x; 
    while(false) {
    }
    for(int i=0; i<64; i++) { 
         x = 2 << i; 
         cout << x << endl; 
    }
    

    Drin:

    long long x; 
    for(int i=0; i<64; i++) { 
         while(false) {
         }
         x = 2 << i; 
         cout << x << endl; 
    }
    

    Danach:

    long long x; 
    for(int i=0; i<64; i++) { 
         x = 2 << i; 
         cout << x << endl; 
    }
    while(false) {
    }
    

    Drumherum:

    while(true) {
         long long x; 
         for(int i=0; i<64; i++) { 
              x = 2 << i; 
              cout << x << endl; 
         }
         break;
    }
    

    Man kann das auch kombinieren und zum Beispiel eine davor und eine danach machen. Der Fantasie sind keine Grenzen gesetzt. Mit genug while-Schleifen kann man sogar Muster malen. Wozu willst Du while drin haben.



  • 😃 sehr cool volkard 😃



  • Ich müsste, dass Programm schreiben und mein Lehrer hat verlangen, dass wir eine While_schleife ienbauen müssen.
    Und da war ich ehrlich gesagt überfordert !!

    Aber wollte mich bei dir bedanken, denn das hat mich weiter gebracht.



  • Glückskeks schrieb:

    Ich müsste, dass Programm schreiben und mein Lehrer hat verlangen, dass wir eine While_schleife ienbauen müssen.
    Und da war ich ehrlich gesagt überfordert !!

    Aber wollte mich bei dir bedanken, denn das hat mich weiter gebracht.

    Du hast jetzt doch nicht etwa eins von volkards bsp. übernommen?
    ps: falls du aus dtschl kommst, solltest du deine deutsch-kenntnisse dringend verbessern...

    bb



  • Glückskeks schrieb:

    Aber wollte mich bei dir bedanken, denn das hat mich weiter gebracht.

    volkard, ich bin mir sicher, dein Sarkasmus wird dir noch eines Tages zum Verhängnis! 😃



  • Nexus schrieb:

    Glückskeks schrieb:

    Aber wollte mich bei dir bedanken, denn das hat mich weiter gebracht.

    volkard, ich bin mir sicher, dein Sarkasmus wird dir noch eines Tages zum Verhängnis! 😃

    ich hoffe nicht, meist ist es ziemlich genial - das hier hat mich z.bsp. über ne extrem langweilige vorlesung hinweggerettet : D

    bb



  • Nexus schrieb:

    Glückskeks schrieb:

    Aber wollte mich bei dir bedanken, denn das hat mich weiter gebracht.

    volkard, ich bin mir sicher, dein Sarkasmus wird dir noch eines Tages zum Verhängnis! 😃

    Ich wundere mich, dass das nicht schon längst passiet ist.. 🙂 (nimmt mich wunder, wie er so im RL dauf ist. :p, btw: Nexus, ans nächste Forentreffen gehen wir auch OK?)



  • Glückskeks schrieb:

    Ich müsste, dass Programm schreiben und mein Lehrer hat verlangen, dass wir eine While_schleife ienbauen müssen.

    Achso. Dann mein er bestimmt, daß nur eine while-Schleife genommen wird aber keine for-Schleife. Dazu schobst man den Initialisierungsausdruck vor die Schleife und den Weiterschaltungsausdruck ans Ende der Schleife.
    Aus

    long long x; 
    for(int i=0; i<64; i++) { 
         x = 2 << i; 
         cout << x << endl; 
    }
    

    wird dann

    long long x; 
    int i=0;
    while(i<64) { 
         x = 2 << i; 
         cout << x << endl; 
         i++;
    }
    


  • Danke und ich wollte mich noch einmal für mein Deutsch entschuldigen 🙂

    Also mein Programm seht jetzt wie gefolgt aus....

    #include <iostream>
    #include <conio.h>
    #include <cmath>

    using namespace std;

    int main()
    {
    long long x;
    int i=0;
    while(i<64) {
    x = 2 << i;
    cout << x << endl;
    i++;
    }

    cin.get();
    return 0;
    }

    Aber i-wie rechnet es falsch und alles 2-mal, vielleicht wei0 ja jemand von euch die Ursache, würde mich freuen.


  • Mod

    Glückskeks schrieb:

    Aber i-wie rechnet es falsch und alles 2-mal, vielleicht wei0 ja jemand von euch die Ursache, würde mich freuen.

    Erklär doch mal, was diese Zeile macht:

    x = 2 << i;
    

    Wenn du das erklären kannst (und nicht nur abschreibst), dann hast du dein Problem gefunden und kannst es lösen.

    P.S.: Was willst du mit cmath? Was willst du mit conio.h? Und kannst du mal bitte die cpp-Tags für deinen Code benutzen?



  • es rechnet immer mal 2
    Danke, dass hatte ich gar nicht beachtet.


  • Mod

    Glückskeks schrieb:

    es rechnet immer mal 2

    Nun, eigentlich nicht. Höchstens wenn du dich sehr salopp ausdrückst.

    Danke, dass hatte ich gar nicht beachtet.

    Aber anscheinend reicht es dir als Erklärung, wenn ich auch nicht verstehe wie diese halbgare Erklärung reichen kann.



  • es rechnet zwar jetzt richtig, aber trotzdem alles noch doppelt, wenn es bei 2147483648 angelangt ist fängt es wieder bei 1 an


  • Mod

    Glückskeks schrieb:

    es rechnet zwar jetzt richtig, aber trotzdem alles noch doppelt, wenn es bei 2147483648 angelangt ist fängt es wieder bei 1 an

    Schreib mal LL direkt hinter die Zahl vor dem <<. Also in deinem zuletzt geposteten Programm "2LL << i". Bloß dieses Mal mit dem richtigen Startwert.

    edit: Eine Sache bleibt aber immer noch, selbst mit meinem Tipp: Du musst 'unsigned long long' anstatt 'long long' als Datentyp für x nehmen, ansonsten bekommst du beim 64. Durchlauf einen Überlauf.



  • SeppJ schrieb:

    Glückskeks schrieb:

    es rechnet zwar jetzt richtig, aber trotzdem alles noch doppelt, wenn es bei 2147483648 angelangt ist fängt es wieder bei 1 an

    Schreib mal LL direkt hinter die Zahl vor dem <<. Also in deinem zuletzt geposteten Programm "2LL << i". Bloß dieses Mal mit dem richtigen Startwert.

    Ich wollte nur nochmal drauf hinweisen, dass
    2 << i == 2pow(2,i)
    1 << i == 1
    pow(2,i)

    Gruß,
    SP


Anmelden zum Antworten