<?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[srand() will nicht so wie ich will]]></title><description><![CDATA[<p>Schönen Nachmittag an euch alle<br />
Ich muss für die Uni etwas in C++ programmieren und komme an einer Stelle echt nicht weiter, deswegen dachte ich ich frage mal hier nach.<br />
Es geht um eine Funktion die zufällig Flugzeuge generieren soll, eben mit zufälligem Tankinhalt und einer zufälligen Flugnummer. Diese soll dann als Vektor übergeben werden:</p>
<pre><code>vector&lt;int&gt; hilfsv::gzeit(int o)
{
    srand(time(NULL));
    vector&lt;int&gt; flugzeug;
    flugzeug.clear();

        if(flip(20) == true){

           flugzeug.push_back(zufall(20000));
           flugzeug.push_back(zufall(99)+1);
           flugzeug.push_back(o);

            }
    return flugzeug;
}
</code></pre>
<p>Dabei sieht die Funktion <strong>zufall</strong> so aus:</p>
<pre><code>int hilfsv::zufall(int z) {
    srand(time(NULL));
    int zufallszahl = 0;
			zufallszahl = rand()%z;
            return zufallszahl;
        }
</code></pre>
<p><strong>flip</strong> ist einfach nur eine Funktion die einen Münzwurf simuliert. Die Idee dahinter ist dass in der main eine Schleife durchläuft die die Zeit darstellt. Bei jedem Schleifendurchlauf wird mit einer (in diesem Fall 20%igen) Wahrscheinlichkeit ein Flugzeug generiert, welches danach eben übergeben wird.</p>
<p>Das Problem ist, dass bei jedem Schleifendurchlauf nur einmal ein Flugzeug entsteht (oder eben nicht) und wenn es entsteht bei jedem Durchlauf die selben Eigenschaften (also Tank und FlugNr. hat)</p>
<p>Weiß einer von euch weiter? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338693/srand-will-nicht-so-wie-ich-will</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 07:01:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338693.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Jul 2016 14:32:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 14:32:00 GMT]]></title><description><![CDATA[<p>Schönen Nachmittag an euch alle<br />
Ich muss für die Uni etwas in C++ programmieren und komme an einer Stelle echt nicht weiter, deswegen dachte ich ich frage mal hier nach.<br />
Es geht um eine Funktion die zufällig Flugzeuge generieren soll, eben mit zufälligem Tankinhalt und einer zufälligen Flugnummer. Diese soll dann als Vektor übergeben werden:</p>
<pre><code>vector&lt;int&gt; hilfsv::gzeit(int o)
{
    srand(time(NULL));
    vector&lt;int&gt; flugzeug;
    flugzeug.clear();

        if(flip(20) == true){

           flugzeug.push_back(zufall(20000));
           flugzeug.push_back(zufall(99)+1);
           flugzeug.push_back(o);

            }
    return flugzeug;
}
</code></pre>
<p>Dabei sieht die Funktion <strong>zufall</strong> so aus:</p>
<pre><code>int hilfsv::zufall(int z) {
    srand(time(NULL));
    int zufallszahl = 0;
			zufallszahl = rand()%z;
            return zufallszahl;
        }
</code></pre>
<p><strong>flip</strong> ist einfach nur eine Funktion die einen Münzwurf simuliert. Die Idee dahinter ist dass in der main eine Schleife durchläuft die die Zeit darstellt. Bei jedem Schleifendurchlauf wird mit einer (in diesem Fall 20%igen) Wahrscheinlichkeit ein Flugzeug generiert, welches danach eben übergeben wird.</p>
<p>Das Problem ist, dass bei jedem Schleifendurchlauf nur einmal ein Flugzeug entsteht (oder eben nicht) und wenn es entsteht bei jedem Durchlauf die selben Eigenschaften (also Tank und FlugNr. hat)</p>
<p>Weiß einer von euch weiter? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500981</guid><dc:creator><![CDATA[MrMeikkel]]></dc:creator><pubDate>Sun, 03 Jul 2016 14:32:00 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 14:44:28 GMT]]></title><description><![CDATA[<p>Die Funktion <code>srand(..)</code> soll nur ein einziges Mal (am besten irgendwo am Anfang in der <code>main</code> Funktion) aufgerufen werden, denn <code>srand</code> initialisiert dein Random Seed.</p>
<p>Allgemein ist <code>rand</code> nicht die beste Methode, um Zufallszahlen zu generieren. Schau dir mal <a href="http://en.cppreference.com/w/cpp/numeric/random" rel="nofollow">Pseudo-random number generation</a> an.</p>
<p>Deine if-Abfrage ist auch etwas merkwuerdig. Wenn du ganze Zufallszahlen im Bereich \[1,..,N\] erzeugen willst kannst du eifach <code>rand() % N + 1</code> verwenden (sind dann allerdings nicht wirklich uniform verteilt, ist fuer dein Programm aber wohl kein Problem).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500984</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 03 Jul 2016 14:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 14:59:02 GMT]]></title><description><![CDATA[<p>Die if Abfrage sorgt einfach nur dafür dass nicht bei jedem Schleifendurchlauf ein Flugzeug generiert wird.<br />
Das srand(time(NULL)) sollte also in die main? Wieso kann ich es nicht in der Klasse lassen?<br />
Und es müsste doch eigentlich auch erstmal mit der rand() Funktion funktionieren (auch wenn die Zufallszahlen dann nicht wirklich zufällig verteilt sind, aber das sei mal dahingestellt). Aber selbst wenn ich innerhalb der Funktion eine Schleife erzeuge sind die Zufallszahlen immer gleich:</p>
<pre><code>vector&lt;int&gt; hilfsv::gzeit(int o)
{
    int i;
    vector&lt;int&gt; flugzeug;
    flugzeug.clear();

        for(i=0; i&lt;10; i++) {
           flugzeug.push_back(rand()%20000);
           flugzeug.push_back(rand()%100 + 1);
           flugzeug.push_back(o);

     cout &lt;&lt; &quot;8:00&quot;  &lt;&lt; &quot;: Ein Flug mit der Flugnummer &quot; &lt;&lt;  flugzeug[0] &lt;&lt; &quot; und &quot; &lt;&lt; flugzeug[1] &lt;&lt; &quot;% Tankfuellung kommt an!&quot; &lt;&lt; endl;
        }
    return flugzeug;
}
</code></pre>
<p>(Die Funktion wird gerade in der main aufgerufen. Das srand(time(NULL)) steht gerade ganz am Anfang in der main.)</p>
<p>Aber danke schonmal für die schnelle Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500987</guid><dc:creator><![CDATA[MrMeikkel]]></dc:creator><pubDate>Sun, 03 Jul 2016 14:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 15:12:10 GMT]]></title><description><![CDATA[<p>MrMeikkel schrieb:</p>
<blockquote>
<p>Die if Abfrage sorgt einfach nur dafür dass nicht bei jedem Schleifendurchlauf ein Flugzeug generiert wird.</p>
</blockquote>
<p>Ach, haette deine Frage genauer lesen sollen.</p>
<p>MrMeikkel schrieb:</p>
<blockquote>
<p>Das srand(time(NULL)) sollte also in die main? Wieso kann ich es nicht in der Klasse lassen?</p>
</blockquote>
<p>Wie bereits gesagt soll <code>srand</code> nur einmal aufgerufen werden. Gibt keinen Grund das in die Klasse zu stecken (was wenn du mehrere Klassen hast, die <code>rand</code> brauchen, in welcher Klasse rufst du dann <code>srand</code> auf?).</p>
<p>MrMeikkel schrieb:</p>
<blockquote>
<p>Und es müsste doch eigentlich auch erstmal mit der rand() Funktion funktionieren (auch wenn die Zufallszahlen dann nicht wirklich zufällig verteilt sind, aber das sei mal dahingestellt).</p>
</blockquote>
<p>Ja klar, hier ist das sicher kein Problem. Aber ist immer gut zu wissen, dass es noch im Allgemeinem bessere Moeglichkeiten gibt <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>
<p>MrMeikkel schrieb:</p>
<blockquote>
<p>Aber selbst wenn ich innerhalb der Funktion eine Schleife erzeuge sind die Zufallszahlen immer gleich:</p>
<pre><code>vector&lt;int&gt; hilfsv::gzeit(int o)
{
    int i;
    vector&lt;int&gt; flugzeug;
    flugzeug.clear();

        for(i=0; i&lt;10; i++) {
           flugzeug.push_back(rand()%20000);
           flugzeug.push_back(rand()%100 + 1);
           flugzeug.push_back(o);

     cout &lt;&lt; &quot;8:00&quot;  &lt;&lt; &quot;: Ein Flug mit der Flugnummer &quot; &lt;&lt;  flugzeug[0] &lt;&lt; &quot; und &quot; &lt;&lt; flugzeug[1] &lt;&lt; &quot;% Tankfuellung kommt an!&quot; &lt;&lt; endl;
        }
    return flugzeug;
}
</code></pre>
<p>(Die Funktion wird gerade in der main aufgerufen. Das srand(time(NULL)) steht gerade ganz am Anfang in der main.)</p>
</blockquote>
<p>Der Code sieht eigentlich in Ordnung aus. Kannst du ein minimales, kompilierbares Beispiel posten? (Im Notfall den ganzen Code, wenns nicht zu viel ist).</p>
<p>*Edit<br />
Das <code>flugzeug.clear</code> brauchst du uebringens nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500989</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 03 Jul 2016 15:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 15:19:45 GMT]]></title><description><![CDATA[<p>MrMeikkel schrieb:</p>
<blockquote>
<pre><code>vector&lt;int&gt; hilfsv::gzeit(int o)
{
    int i;
    vector&lt;int&gt; flugzeug;
    flugzeug.clear();

        for(i=0; i&lt;10; i++) {
           flugzeug.push_back(rand()%20000);
           flugzeug.push_back(rand()%100 + 1);
           flugzeug.push_back(o);

     cout &lt;&lt; &quot;8:00&quot;  &lt;&lt; &quot;: Ein Flug mit der Flugnummer &quot; &lt;&lt;  flugzeug[0] &lt;&lt; &quot; und &quot; &lt;&lt; flugzeug[1] &lt;&lt; &quot;% Tankfuellung kommt an!&quot; &lt;&lt; endl;
        }
    return flugzeug;
}
</code></pre>
</blockquote>
<p>Du schiebst hier 30 Werte in den Vektor (10 mal 3), aber mittels cout gibst Du immer nur dieselben (die ersten beiden) aus ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500991</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sun, 03 Jul 2016 15:19:45 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 15:22:49 GMT]]></title><description><![CDATA[<p>Also im Prinzip wird gerade nur folgendes aufgerufen:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;time.h&gt;
#include &lt;vector&gt;
#include &lt;queue&gt;

using namespace std;

int main()  {
    srand(time(NULL));
    int i;
    vector&lt;int&gt; flugzeug;
    flugzeug.clear();

        for(i=0; i&lt;10; i++) {
           flugzeug.push_back(rand()%20000);
           flugzeug.push_back(rand()%100 + 1);
           flugzeug.push_back(1); //normalerweise wird hier die globale Zeit übergeben bei der das Flugzeug generiert wurde

     cout &lt;&lt; &quot;8:00&quot;  &lt;&lt; &quot;: Ein Flug mit der Flugnummer &quot; &lt;&lt;  flugzeug[0] &lt;&lt; &quot; und &quot; &lt;&lt; flugzeug[1] &lt;&lt; &quot;% Tankfuellung kommt an!&quot; &lt;&lt; endl;
        }
    return 0;
}
</code></pre>
<p>Erzeugt bei mir immer dieselben Tankfüllungen und Flugnummern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500992</guid><dc:creator><![CDATA[MrMeikkel]]></dc:creator><pubDate>Sun, 03 Jul 2016 15:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 15:33:13 GMT]]></title><description><![CDATA[<p>Ach Gott, natürlich kann das nicht funktionieren, danke Belli <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Und gerade wollte ich den Code posten und habe alle Änderungen die ich zum testen gemacht hab rückgängig gemacht, jetzt funktioniert alles wie es soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Danke für eure Hilfe auf alle Fälle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500997</guid><dc:creator><![CDATA[MrMeikkel]]></dc:creator><pubDate>Sun, 03 Jul 2016 15:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 15:35:05 GMT]]></title><description><![CDATA[<p>Mach mal ein flugzeug.clear() in die Schleife rein <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>
<p>*Edit<br />
Wups, zu spaet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500999</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 03 Jul 2016 15:35:05 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 18:33:54 GMT]]></title><description><![CDATA[<p>MrMeikkel schrieb:</p>
<blockquote>
<p>Das srand(time(NULL)) sollte also in die main? Wieso kann ich es nicht in der Klasse lassen?</p>
</blockquote>
<p>Weil damit der Generator auf einen Startwert gesetzt <a href="http://wird.In" rel="nofollow">wird.In</a> diesem Fall ist es eine Anzahl Sekunden seit einem Startpunkt.</p>
<p>Also änderst sich der Startwert nur jede Sekunde. Das Programm ist aber viel schneller und erzeugt somit viele gleiche Werte.</p>
<p>Da es sehr selten ist, dass das Programm mehrmals innerhalb von derselben Sekunde gestartet wird, gibt es bei jedem Programmlauf eine andere Reihenfolge der Zufallswerte (so der Idealzustand).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501018</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Sun, 03 Jul 2016 18:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to srand() will nicht so wie ich will on Sun, 03 Jul 2016 18:51:16 GMT]]></title><description><![CDATA[<p>Schau dir dieses Video an, wenn du wissen willst, warum du am besten auf rand verzichtest du wie es besser geht: <a href="https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful" rel="nofollow">https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501021</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Sun, 03 Jul 2016 18:51:16 GMT</pubDate></item></channel></rss>