<?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[Der Quelltext mit den lustigen Lottozahlen.]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>bearbeite gerade, viel zu lange, eine dieser C++ Aufgaben, (hoffentlich wird man mit der Zeit schneller, da der Anfang um einiges zeitintensiver ist als ich es angenommen habe), dabei wollte ich eine Beobachtung von euch bestätigen lassen.</p>
<p>Hier ist erstmal ein Abschnitt von dieser Aufgabe :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
using namespace std;

const int KugelZahl = 6;
const int MaxZahl = 49; // Maximale Anzahl der sortierten Zahlen

int main()
{
    int lotto[KugelZahl];
    int i, j;
    int hilf;
    bool neueZahl;

    srand(time(0)); //Mische einmal durch!
    //Ermittle sechs Lottozahlen
    [b]for(i=0; i&lt;KugelZahl; i++)[/b]
    {
		//Schleife prüft auf Doppelte
		do
		{
			lotto[i] = rand() % MaxZahl + 1;
			neueZahl = true; //positiv denken!
			//Alle bisherigen Zahlen gegentesten
			[b]for(j=0;j&lt;i;j++)[/b]
			{
				if(lotto[j]==lotto[i])
				{
					neueZahl = false; //die gab es schon!
				}
			}
		} while (!neueZahl);
    }
</code></pre>
<p>Als Anfänger wundert man sich, weshalb der Wert der for-Schleife (i) nicht zurückgesetzt wird, die for-Schleife (j) immer auf 0 gesetzt wird.</p>
<p>Soweit ich das verstanden habe hängt das mit der Abarbeitung des Programmes zusammen, Schleifen die verlassen werden und in welche wieder zurückgekehrt wird, hier ist das die j-Schleife, für diese gilt die Startanweisung ihrer eigenen Schleife (hier wäre es die Setzung auf 0).<br />
Da aber die for-Schleife(i), in diesem Abschnitt, nicht verlassen wird gilt auch ihre eigene Startanweisung nicht und somit kann die Variable i ihren Wert behalten.</p>
<p>Demnach kommt das Programm jeweils &quot;nur&quot; bis zur while Überprüfung, springt dann zu do und dann und dann zur for-Schleife(i).</p>
<p>Die for-Schleife(i) wird verlassen wenn die 6 Werte in die Indexfelder einfgefügt und auf Ungleichheit überprüft wurden.</p>
<p>Wenn THEORETISCH zu einem späteren Zeitpunkt eine Rückkehr in die for-Schleife(i) geschehen würde, aus welchem Grund auch immer, würde i auf 0 gesetzt werden, da die Schleife &quot;wieder frisch startet&quot;.</p>
<p>Kommt das der Wahrheit ungefähr nahe?</p>
<p>Danke schon im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/288621/der-quelltext-mit-den-lustigen-lottozahlen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 18:59:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288621.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Jun 2011 04:37:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Der Quelltext mit den lustigen Lottozahlen. on Mon, 20 Jun 2011 04:47:28 GMT]]></title><description><![CDATA[<p>Guten Morgen,</p>
<p>bearbeite gerade, viel zu lange, eine dieser C++ Aufgaben, (hoffentlich wird man mit der Zeit schneller, da der Anfang um einiges zeitintensiver ist als ich es angenommen habe), dabei wollte ich eine Beobachtung von euch bestätigen lassen.</p>
<p>Hier ist erstmal ein Abschnitt von dieser Aufgabe :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
using namespace std;

const int KugelZahl = 6;
const int MaxZahl = 49; // Maximale Anzahl der sortierten Zahlen

int main()
{
    int lotto[KugelZahl];
    int i, j;
    int hilf;
    bool neueZahl;

    srand(time(0)); //Mische einmal durch!
    //Ermittle sechs Lottozahlen
    [b]for(i=0; i&lt;KugelZahl; i++)[/b]
    {
		//Schleife prüft auf Doppelte
		do
		{
			lotto[i] = rand() % MaxZahl + 1;
			neueZahl = true; //positiv denken!
			//Alle bisherigen Zahlen gegentesten
			[b]for(j=0;j&lt;i;j++)[/b]
			{
				if(lotto[j]==lotto[i])
				{
					neueZahl = false; //die gab es schon!
				}
			}
		} while (!neueZahl);
    }
</code></pre>
<p>Als Anfänger wundert man sich, weshalb der Wert der for-Schleife (i) nicht zurückgesetzt wird, die for-Schleife (j) immer auf 0 gesetzt wird.</p>
<p>Soweit ich das verstanden habe hängt das mit der Abarbeitung des Programmes zusammen, Schleifen die verlassen werden und in welche wieder zurückgekehrt wird, hier ist das die j-Schleife, für diese gilt die Startanweisung ihrer eigenen Schleife (hier wäre es die Setzung auf 0).<br />
Da aber die for-Schleife(i), in diesem Abschnitt, nicht verlassen wird gilt auch ihre eigene Startanweisung nicht und somit kann die Variable i ihren Wert behalten.</p>
<p>Demnach kommt das Programm jeweils &quot;nur&quot; bis zur while Überprüfung, springt dann zu do und dann und dann zur for-Schleife(i).</p>
<p>Die for-Schleife(i) wird verlassen wenn die 6 Werte in die Indexfelder einfgefügt und auf Ungleichheit überprüft wurden.</p>
<p>Wenn THEORETISCH zu einem späteren Zeitpunkt eine Rückkehr in die for-Schleife(i) geschehen würde, aus welchem Grund auch immer, würde i auf 0 gesetzt werden, da die Schleife &quot;wieder frisch startet&quot;.</p>
<p>Kommt das der Wahrheit ungefähr nahe?</p>
<p>Danke schon im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080898</guid><dc:creator><![CDATA[Peng*uin*]]></dc:creator><pubDate>Mon, 20 Jun 2011 04:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to Der Quelltext mit den lustigen Lottozahlen. on Mon, 20 Jun 2011 05:31:23 GMT]]></title><description><![CDATA[<p>Pass auf, bald kommen ganz viele Leute an und werden dir sagen, dass du nicht C++, sondern C programmierst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Du hast es schon richtig verstanden. Die Startanweisung, also meistens das Initialisieren einer Variable, wird, wie der Name schon sagt, beim Start der Schleife aufgerufen.</p>
<p>Es stimmt zwar nicht zu 100%, du kannst es dir eine for-Schleife aber so vorstellen, wenn es dir hilft:</p>
<pre><code class="language-cpp">for (int i = 0; i &lt; 21; i++)
{}

// entspricht:
int i = 0;
while (i &lt; 21)
{
  i++;

Also ja, die j-Schleife wird mehrmals gestartet, die i-Schleife aber nur ein einziges mal.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2080909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080909</guid><dc:creator><![CDATA[Wurstinator]]></dc:creator><pubDate>Mon, 20 Jun 2011 05:31:23 GMT</pubDate></item><item><title><![CDATA[Reply to Der Quelltext mit den lustigen Lottozahlen. on Mon, 20 Jun 2011 05:58:25 GMT]]></title><description><![CDATA[<p>Wurstinator schrieb:</p>
<blockquote>
<p>Pass auf, bald kommen ganz viele Leute an und werden dir sagen, dass du nicht C++, sondern C programmierst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Du hast es schon richtig verstanden. Die Startanweisung, also meistens das Initialisieren einer Variable, wird, wie der Name schon sagt, beim Start der Schleife aufgerufen.</p>
<p>Es stimmt zwar nicht zu 100%, du kannst es dir eine for-Schleife aber so vorstellen, wenn es dir hilft:</p>
<pre><code class="language-cpp">for (int i = 0; i &lt; 21; i++)
{}

// entspricht:
int i = 0;
while (i &lt; 21)
{
  i++;

Also ja, die j-Schleife wird mehrmals gestartet, die i-Schleife aber nur ein einziges mal.
}
</code></pre>
</blockquote>
<p>Alles klar, danke für die Antwort.</p>
<p>Muss dem C++ Kommentar widersprechen, da der ganze Quellcode so aussieht :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
using namespace std;

const int KugelZahl = 6;
const int MaxZahl = 49; // Maximale Anzahl der sortierten Zahlen

int main()
{
    int lotto[KugelZahl];
    int i, j;
    int hilf;
    bool neueZahl;

    srand(time(0)); //Mische einmal durch!
    //Ermittle sechs Lottozahlen
    for(i=0; i&lt;KugelZahl; i++)
    {
		//Schleife prüft auf Doppelte
		do
		{
			lotto[i] = rand() % MaxZahl + 1;
			neueZahl = true; //positiv denken!
			//Alle bisherigen Zahlen gegentesten
			for(j=0;j&lt;i;j++)
			{
				if(lotto[j]==lotto[i])
				{
					neueZahl = false; //die gab es schon!
				}
			}
		} while (!neueZahl);
	}
	//Nun werden die Zahlen sortiert (per Bubblesort)
	for(i=KugelZahl-1; i&gt;0; i--)
	{
		for(j=0;j&lt;i;j++)
		{
			if(lotto[j]&gt;lotto[j+1])
			{
				hilf = lotto[j];
				lotto[j] = lotto[j+1];
				lotto[j+1] = hilf;
			}
		}
	}
	//Ausgabe der sortierten Zahlen
	for(i=0; i&lt;KugelZahl; i++)
	{
		cout &lt;&lt; lotto[i] &lt;&lt; &quot; &quot;;
	}
	cout &lt;&lt; endl;
}
</code></pre>
<p>Cout und cin sind Befehle für C++, war aus dem Abschnitt dort nicht erkennbar.<br />
Habe früher mit C programmiert, dort jedoch mit printf und und scanf, etc.<br />
Abgesehen davon bearbeite ich ein &quot;Einstieg in C++&quot; Buch, sagen tue ich es nur damit ich die vorhergesagten Kommentare etwas abbremse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080912</guid><dc:creator><![CDATA[Peng*uin*]]></dc:creator><pubDate>Mon, 20 Jun 2011 05:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to Der Quelltext mit den lustigen Lottozahlen. on Mon, 20 Jun 2011 06:08:52 GMT]]></title><description><![CDATA[<p>[quote=&quot;Peng(uin)&quot;]</p>
<p>Wurstinator schrieb:</p>
<blockquote>
<p>Pass auf, bald kommen ganz viele Leute an und werden dir sagen, dass du nicht C++, sondern C programmierst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Du hast es schon richtig verstanden. Die Startanweisung, also meistens das Initialisieren einer Variable, wird, wie der Name schon sagt, beim Start der Schleife aufgerufen.</p>
<p>Es stimmt zwar nicht zu 100%, du kannst es dir eine for-Schleife aber so vorstellen, wenn es dir hilft:</p>
<pre><code class="language-cpp">for (int i = 0; i &lt; 21; i++)
{}

// entspricht:
int i = 0;
while (i &lt; 21)
{
  i++;

Also ja, die j-Schleife wird mehrmals gestartet, die i-Schleife aber nur ein einziges mal.
}
</code></pre>
</blockquote>
<p>Alles klar, danke für die Antwort.</p>
<p>Muss dem C-Kommentar widersprechen, da der ganze Quellcode so aussieht :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
using namespace std;

const int KugelZahl = 6;
const int MaxZahl = 49; // Maximale Anzahl der sortierten Zahlen

int main()
{
    int lotto[KugelZahl];
    int i, j;
    int hilf;
    bool neueZahl;

    srand(time(0)); //Mische einmal durch!
    //Ermittle sechs Lottozahlen
    for(i=0; i&lt;KugelZahl; i++)
    {
		//Schleife prüft auf Doppelte
		do
		{
			lotto[i] = rand() % MaxZahl + 1;
			neueZahl = true; //positiv denken!
			//Alle bisherigen Zahlen gegentesten
			for(j=0;j&lt;i;j++)
			{
				if(lotto[j]==lotto[i])
				{
					neueZahl = false; //die gab es schon!
				}
			}
		} while (!neueZahl);
	}
	//Nun werden die Zahlen sortiert (per Bubblesort)
	for(i=KugelZahl-1; i&gt;0; i--)
	{
		for(j=0;j&lt;i;j++)
		{
			if(lotto[j]&gt;lotto[j+1])
			{
				hilf = lotto[j];
				lotto[j] = lotto[j+1];
				lotto[j+1] = hilf;
			}
		}
	}
	//Ausgabe der sortierten Zahlen
	for(i=0; i&lt;KugelZahl; i++)
	{
		cout &lt;&lt; lotto[i] &lt;&lt; &quot; &quot;;
	}
	cout &lt;&lt; endl;
}
</code></pre>
<p>Cout,cin sind Befehle für C++, war aus dem Abschnitt dort aber nicht erkennbar.<br />
Habe früher mit C programmiert, dort jedoch mit printf,scanf, hatten auch dieses using namespace std nicht.</p>
<p>&quot;Einstieg in C++&quot; heisst das Buch, dort quäle ich mich gerade im Schneckentempo hindurch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080913</guid><dc:creator><![CDATA[Peng*uin*]]></dc:creator><pubDate>Mon, 20 Jun 2011 06:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Der Quelltext mit den lustigen Lottozahlen. on Mon, 20 Jun 2011 06:15:19 GMT]]></title><description><![CDATA[<p>Peng(uin) schrieb:</p>
<blockquote>
<p>Muss dem C-Kommentar widersprechen, da der ganze Quellcode so aussieht :</p>
</blockquote>
<p>Er meinte wohl, dass man dir eher etwas in diese Richtung andrehen möchte:</p>
<pre><code class="language-cpp">#include &lt;array&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
#include &lt;iostream&gt;
int main()
{
    std::array&lt;unsigned, 49&gt; kugeln;
    unsigned i = 0;
    std::generate(kugeln.begin(), kugeln.end(), [&amp;i]()-&gt;unsigned{return ++i;});
    std::random_shuffle(kugeln.begin(), kugeln.end());
    std::array&lt;unsigned, 6&gt; ziehung;
    std::copy_n(kugeln.begin(), 6, ziehung.begin());
    std::sort(ziehung.begin(), ziehung.end());
    std::copy(ziehung.begin(), ziehung.end(), std::ostream_iterator&lt;unsigned&gt;(std::cout, &quot; &quot;));
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2080915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080915</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 20 Jun 2011 06:15:19 GMT</pubDate></item><item><title><![CDATA[Reply to Der Quelltext mit den lustigen Lottozahlen. on Mon, 20 Jun 2011 06:21:21 GMT]]></title><description><![CDATA[<p>Hm, wie beschreibt man das so knapp wie möglich:</p>
<pre><code>for(i = 0; i &lt; max; i++)
{
    Alles was hier in der geschweiften Klammer steht wird wiederholt bis i &lt; max.
    Auch weitere Schleifen werden wie normale Funktionen behandelt. D.h., wenn
    sie aufgerufen werden verhalten sich wie Schleifen sich halt so verhalten.
    for(j = 0; j &lt; max; j++)
    {
        siehe Text zuvor - wenn for(j aufgerufen wird, muss nun aber alles was
        innerhalb der j-Klammern steht abgearbeitet werden.
    }
    erst nachdem die j-Klammer geschlossen ist, ist der Rest der i-Klammer angesagt.
}
</code></pre>
<p>Man kann die Verschachtelungen noch tiefer gestalten. Aber das sollte man nicht übertreiben, sonst geht die Übersichtlichkeit verloren. Alte Compiler konnten maximal nur 8 Schleifen in der Tiefe verarbeiten. Wie viel da bei den Neuen geht weiss ich nicht. Aber, sollte man wirklich nachdenken über mehr als 8 for-Schleifen in der Tiefe, sollte man sich erst mal seinen bisherigen Quelltext genau ansehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Das so kurz.<br />
Man auch</p>
<pre><code class="language-cpp">for(i = max; i &gt; 0; i--)
</code></pre>
<p>nach kurzem Nachdenken wird das schon.<br />
Aber, wenn die Varianten kommen würde das länger.<br />
Hier mal ein Link zu Schleifen:<br />
<a href="http://www.cplusplus.com/doc/tutorial/control/" rel="nofollow">http://www.cplusplus.com/doc/tutorial/control/</a></p>
<p>MfG f.-th.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2080918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2080918</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Mon, 20 Jun 2011 06:21:21 GMT</pubDate></item></channel></rss>