<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem mit Schleife]]></title><description><![CDATA[<p>Hey,</p>
<p>wir haben folgende Hausaufgabe aufbekommen :</p>
<blockquote>
<ol start="3">
<li>Der indische König Schehram verlangte, dass Sessa, der Erfinder des Schach-<br />
spiels, sich eine Belohnung wählen solle. Dieser erbat sich die Summe<br />
Weizenkörner, die sich ergibt, wenn für das 1. Feld des Schachbrettes 1 Korn,<br />
für das 2. Feld 2 Körner, für das 3. Feld 4 Körner usw. gerechnet werden.<br />
a) Schreiben Sie ein Programm, das für alle 64 Felder die Gesamtsumme der Körner<br />
berechnet.<br />
b) Geben Sie auch das Gewicht der Körner an, wenn 200 Körner 1 g wiegen.<br />
c) Errechnen Sie im Programm, wie viele Eisenbahnwaggons man zum Transport des<br />
Reises bräuchte und wie lang der Zug wäre, wenn ein Eisenbahnwaggon 30 t<br />
fasst und 15 m lang ist.</li>
</ol>
</blockquote>
<p>Und der will bei mir einfach nur die Anzahl der Reiskörner ausrechnen. Hier ist mein Versuch :</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main () {

  long long int reiskorn = 1;
  short int felder;

  do {
    reiskorn = reiskorn * 2;  
    felder = felder + 1;
  } while (felder != 63);

  cout &lt;&lt; reiskorn ;
  system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/278085/problem-mit-schleife</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 15:31:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278085.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Nov 2010 18:33:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 18:33:57 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>wir haben folgende Hausaufgabe aufbekommen :</p>
<blockquote>
<ol start="3">
<li>Der indische König Schehram verlangte, dass Sessa, der Erfinder des Schach-<br />
spiels, sich eine Belohnung wählen solle. Dieser erbat sich die Summe<br />
Weizenkörner, die sich ergibt, wenn für das 1. Feld des Schachbrettes 1 Korn,<br />
für das 2. Feld 2 Körner, für das 3. Feld 4 Körner usw. gerechnet werden.<br />
a) Schreiben Sie ein Programm, das für alle 64 Felder die Gesamtsumme der Körner<br />
berechnet.<br />
b) Geben Sie auch das Gewicht der Körner an, wenn 200 Körner 1 g wiegen.<br />
c) Errechnen Sie im Programm, wie viele Eisenbahnwaggons man zum Transport des<br />
Reises bräuchte und wie lang der Zug wäre, wenn ein Eisenbahnwaggon 30 t<br />
fasst und 15 m lang ist.</li>
</ol>
</blockquote>
<p>Und der will bei mir einfach nur die Anzahl der Reiskörner ausrechnen. Hier ist mein Versuch :</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main () {

  long long int reiskorn = 1;
  short int felder;

  do {
    reiskorn = reiskorn * 2;  
    felder = felder + 1;
  } while (felder != 63);

  cout &lt;&lt; reiskorn ;
  system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1987678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987678</guid><dc:creator><![CDATA[fake-account]]></dc:creator><pubDate>Mon, 29 Nov 2010 18:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 18:37:14 GMT]]></title><description><![CDATA[<p>Du solltest auch irgendwo <code>felder</code> einen Wert zuweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987680</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Mon, 29 Nov 2010 18:37:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 18:39:03 GMT]]></title><description><![CDATA[<p>Naja dann kommt da eine negative Zahl raus was eigentlich nicht sein kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987682</guid><dc:creator><![CDATA[fake-account]]></dc:creator><pubDate>Mon, 29 Nov 2010 18:39:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 18:44:57 GMT]]></title><description><![CDATA[<p>Was ist bei dir denn <code>sizeof(long long int)</code> ? Wenn das 8 ist, solltest du <code>unsigned long long int</code> nehmen. Wenn es weniger als 8 ist, hast du ein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987687</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 29 Nov 2010 18:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 18:54:18 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig sehe, addierst du ja auch nirgends die Anzahlen der einzelnen Felder. Alles was du tust ist, wenn ich es einfach ausdrücke, in einer Schleife 2^x mit x++ in jedem Durchlauf zu rechnen. Du willst aber die Summe, also musst du die einzelnen Produkte noch addieren.</p>
<p>BTW du hast meinen Vorredner nicht richtig verstanden. Mit short int felder; hat &quot;felder&quot; nicht zwingend den Wert 0! Es ist halt noch mit keinem Wert belegt. Probiere am besten mal eine for-Schleife. Die ist viel einfacher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987689</guid><dc:creator><![CDATA[*-BootLag-*]]></dc:creator><pubDate>Mon, 29 Nov 2010 18:54:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 18:58:48 GMT]]></title><description><![CDATA[<p>Da braucht man kein Programm für. Die Gesamtsumme der Reiskörner auf den ersten n Feldern ist 2^n - 1, der Beweis dafür ist induktiv trivial:</p>
<p>Def. S(n + 1) = S(n) + 2^n, S(1) = 1</p>
<p>Für n = 1 gilt S(n) = 1 = 2^1 - 1.<br />
S(n) = 2^n - 1 =&gt; S(n + 1) = S(n) + 2^n = 2^n - 1 + 2^n = 2 * 2^n - 1 = 2^(n+1) - 1 q.e.d.</p>
<p>Für 64 Felder bedeutet das 2^64 - 1, und das kriegst du in einen vorzeichenbehafteten 64-bit-Integer nicht rein. Benutz unsigned long long.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Der C-Standard verlangt, dass long long mindestens den Wertebereich eines 64-bit-Integers aufnehmen kann (C99 5.2.4.2.1). Das ist zwar für C++ streng genommen nicht bindend, aber es sollte mich doch sehr wundern, wenn ein C++-Compiler, der long long unterstützt, diese Regel bräche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987692</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 29 Nov 2010 18:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 19:04:49 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Was ist bei dir denn <code>sizeof(long long int)</code> ? Wenn das 8 ist, solltest du <code>unsigned long long int</code> nehmen. Wenn es weniger als 8 ist, hast du ein Problem.</p>
</blockquote>
<p>Im Notfall gibt es ja noch double. Nur typischerweise kann bei so riesigen Zahlen nicht mehr exakt gerechnet werden. Aber der Fehler sollte hier nicht wirklich ins gewicht Fallen. Ob man hier drei Milliarden Eisenbahnwagons oder drei Milliarden und einen benötigt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987697</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 29 Nov 2010 19:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 19:47:48 GMT]]></title><description><![CDATA[<p>Ja, war zu faul, nachzugucken, was die Mindestgröße von long long ist. Bei negativem Ergebnis lag ein Überlauf nahe. Und tut es immer noch: 2^64-1 passt nicht mehr in signed long long, wenn dieser nur die Mindestlänge hat. Bei unsigned long long würde es genau passen.</p>
<p>Und double wäre eher unschön, da double precission normalerweise eine 53 Bit Mantisse bedeutet, wo das erst recht nicht (genau) reinpasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987718</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 29 Nov 2010 19:47:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 20:01:05 GMT]]></title><description><![CDATA[<p>Also zusammengefasst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main () {

  long long int reiskorn = 1; // Zahlenbereich anpassen
  short int felder; // felder -&gt; initialisieren

  do {
    reiskorn = reiskorn * 2; // das ist ein Korn zu viel -&gt; korrigieren
    felder = felder + 1;
  } while (felder != 63); // wie viele Felder hat ein Schachspiel?

  cout &lt;&lt; reiskorn ;
  system(&quot;PAUSE&quot;);
}
</code></pre>
<p>Der gcc 4.4.? gibt eine Warnung long long ist noch nicht genormt.<br />
Das Ergebnis zeigt aber keine Auffälligkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987727</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Mon, 29 Nov 2010 20:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 20:04:37 GMT]]></title><description><![CDATA[<p>Auf meinem System unterscheidet sich die Zahl der Kilometer beim Vergleich unsigned long long und double um eins.<br />
Es ist zwar ein Fehler, aber dennoch mMn vernachlässigbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987732</guid><dc:creator><![CDATA[Vicious Falcon]]></dc:creator><pubDate>Mon, 29 Nov 2010 20:04:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 21:11:45 GMT]]></title><description><![CDATA[<p>Vicious Falcon schrieb:</p>
<blockquote>
<p>Auf meinem System unterscheidet sich die Zahl der Kilometer beim Vergleich unsigned long long und double um eins.<br />
Es ist zwar ein Fehler, aber dennoch mMn vernachlässigbar.</p>
</blockquote>
<p>Wie hast du das gemessen? Das mag ich irgendwie nicht glauben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987779</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 29 Nov 2010 21:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 21:39:00 GMT]]></title><description><![CDATA[<p>Zwei Aufrufe einer Templatefunktion, ich hatte aber /=15 statt *=15 geschrieben. Da lag die Differenz der Kilometer bei 1.</p>
<p>Es ist mir aber gerade erst aufgefallen, als ich meinen Code anhand der Aufgabenstellung noch einmal kontrolliert habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987795</guid><dc:creator><![CDATA[Vicious Falcon]]></dc:creator><pubDate>Mon, 29 Nov 2010 21:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 21:41:15 GMT]]></title><description><![CDATA[<p>Vicious Falcon schrieb:</p>
<blockquote>
<p>Zwei Aufrufe einer Templatefunktion, ich hatte aber /=15 statt *=15 geschrieben. Da lag die Differenz der Kilometer bei 1.</p>
<p>Es ist mir aber gerade erst aufgefallen, als ich meinen Code anhand der Aufgabenstellung noch einmal kontrolliert habe.</p>
</blockquote>
<p>Beim ersten Mal habe ich ja noch gedacht, dass du versehentlich &quot;Kilometer&quot; statt Körner geschrieben hättest, aber nun bin ich komplett verwirrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987796</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 29 Nov 2010 21:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 21:47:01 GMT]]></title><description><![CDATA[<p>Vicious Falcon bezieht sich wohl auf die Länge des Zuges(letze Teilaufgabe).<br />
Die Abweichung der Körneranzahl bei int zu double beträgt 385. Dabei wurde der double-wert aufgerundet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987799</guid><dc:creator><![CDATA[JaykopX]]></dc:creator><pubDate>Mon, 29 Nov 2010 21:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Mon, 29 Nov 2010 21:50:17 GMT]]></title><description><![CDATA[<p>Wieso, die Reihenfolge ist doch</p>
<pre><code>Körner -&gt; Gramm -&gt; Tonnen -&gt; Wagen -&gt; Länge (m) -&gt; Länge (km)
</code></pre>
<p>Zwischen Wagen und Länge (m) hat sich der Fehler eingeschlichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987800</guid><dc:creator><![CDATA[Vicious Falcon]]></dc:creator><pubDate>Mon, 29 Nov 2010 21:50:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Schleife on Tue, 30 Nov 2010 18:11:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">do {
    reiskorn = reiskorn * 2;  
    felder = felder + 1;
  } while (felder != 63);
</code></pre>
<p>Auch wenn die Anzahl der Multiplikationen *2 stimmen mag (63), berechnet es die Anzahl der Reiskörner <em>auf dem aktuellen Feld</em>. Das dürfte von der <em>Gesamtsumme</em> ein wenig abweichen und somit den armen Fahrdienstleiter dann doch etwas ins Schwitzen bringen...</p>
<p>Wenn man das Ganze mal <em>binär</em> und &quot;von Hand&quot; betrachtet, ist das recht einfach zu verstehen (entspricht in etwa der bereits genannten Formel):</p>
<pre><code>1. Feld:          1 Reiskorn
2. Feld:         10
3. Feld:        100
...
-------------------
Summe  ...111111111
</code></pre>
<p>Da bei jeder Multiplikation *2 im Prinzip ja nur ein Bitshift der 1 stattfindet, ist leicht ersichtlich, dass die 1 nach 63 Bitshifts, also auf dem 64. Feld, im obersten Bit des <code>unsigned long long</code> angekommen ist. Jetzt müssen nur eben alle Bits addiert werden. Sollte die schöne Zahl <code>0xFFFFFFFFFFFFFFFF</code> ergeben.</p>
<p>Ergänzung: Wenn man tatsächlich ein 2^64 -1 versucht, wird klar, dass 2^64 = 0 ergibt (zumindest wenn <code>unsigned long long</code> 64 Bit groß ist.). Das Ergebnis ist dann als <code>unsigned</code> ausgedrückt -1 bzw. als <code>signed</code> die genannte Zahl. Die -1 rettet alles...</p>
<p>Edit: ein paarmal die 63 und 64 verwechselt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1987873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1987873</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Tue, 30 Nov 2010 18:11:02 GMT</pubDate></item></channel></rss>