Schachbrett mit Reiskörner
-
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.
-
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.
-
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
-
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 == 1pow(2,i)Gruß,
SP
-
ok..Danke für eure Hilfe, also jetzt rechnet es alles richtig von 1-64.
Jetzt stell ich mir Frage !
Wie programmiere ich jetzt, dass wenn ein Weizenkorn 0,05 Gramm wiegt und in einem LKW kann 8840 kg Nutzlast geladen werden pro Anzahl Weizekörner !!
-
Glückskeks schrieb:
Wie programmiere ich jetzt, dass wenn ein Weizenkorn 0,05 Gramm wiegt und in einem LKW kann 8840 kg Nutzlast geladen werden pro Anzahl Weizekörner !!
"programmieren" ist vielleicht etwas übertrieben:
int main() { double weizenkorngewicht_gramm = 0.05; double lkw_nutzlast_gramm = 8840000; }
Et voilà!
Du weißt ja jetzt, wieviele Reiskörner Du hast, kannst also auch ausrechnen, wieviele LKW-Ladungen Du brauchst.
Dem Mathematiker krempeln sich jetzt die Fußnägel hoch. Er weiß, dass die Summe von 1+2+4+8+16+...+2^k = (2^(k+1))-1 ist und denk sich: "Dafür brauch ich kein Programm!".
Gruß,
SP
-
also mein Programm seht jetzt so aus
#include <iostream>
#include <conio.h>
#include <cmath>using namespace std;
int main()
{
unsigned long long x;
int i=0;
double kornanzahl = 0
double weizenkorngewichtkilogramm = 0.00005;
double lkwnutzlastkilogramm = 8840;
double
while(i<64)
{
x = 1LL << i;
cout << x << endl;
i++;gesamtgewicht=weizenkorngewichtkilogrammm*kornanzahl
lkwanzahl=gesamtgewicht/lkwnutzlastkilogramm
}cin.get();
return 0;
}aber irgendwas ist falsche..kann mir jemand helfen wo der Fehler drin steckt ??
-
Glückskeks schrieb:
also mein Programm seht jetzt so aus
Nimm doch mal die cpp-Tags für die Darstellung von Code!
Glückskeks schrieb:
aber irgendwas ist falsche..
kann mir jemand helfen wo der Fehler drin steckt ??Debugger benutzen, Schritt für Schritt nachvollziehen.
Gruß,
SP
-
Dafür braucht man keinen Debugger. Erklär uns einfach mal was du dir dabei gedacht hast. An den Stellen, wo du ins Stocken kommst, sind deine Fehler.
-
Glückskeks schrieb:
also mein Programm seht jetzt so aus
#include <iostream>
#include <conio.h>
#include <cmath>using namespace std;
int main()
{
unsigned long long x;
int i=0;
double kornanzahl = 0
double weizenkorngewichtkilogramm = 0.00005;
double lkwnutzlastkilogramm = 8840;
double
while(i<64)
{
x = 1LL << i;
cout << x << endl;
i++;gesamtgewicht=weizenkorngewichtkilogrammm*kornanzahl
lkwanzahl=gesamtgewicht/lkwnutzlastkilogramm
}cin.get();
return 0;
}aber irgendwas ist falsche..kann mir jemand helfen wo der Fehler drin steckt ??
Bitte benutze ab jetzt die CPP-Tags, damit Deine Programme auch so hübsch bunt sind.