<?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[Zufallszahl generieren, aber wie?]]></title><description><![CDATA[<p>Huhu</p>
<p>Ich habe bereits gegoogelt und bin dabei immer auch zwei Möglichkeiten gestossen. Die eine war, diese hier:</p>
<p>rand()</p>
<p>Ich habe anschliessend folgenden Code erstellt:</p>
<pre><code class="language-cpp">int chosen_door = rand() &amp; Amount_of_doors;
</code></pre>
<p>Diese lieferte mir Werte zwischen 0 und 3.</p>
<p>Da ich jedoch nur int-Werte zwischen 0 und 2 gebrauchen kann, habe ich folgendes versucht:</p>
<pre><code class="language-cpp">int chosen_door = rand() &amp; ( Amount_of_doors - 1 );
</code></pre>
<p>Das Problem ist jedoch, dass dieser Code immer nur 0 und 2 ausgegeben hat, niemals 1. Kann mir jemand dieses Verhalten erklären? Ich habe beim googeln nur immer konkrete Beispiele gefunden, keine Erklärungen wie die Methode rand() genau Zufallszahlen generiert.</p>
<p>Gibt es für C++ nicht so etwas wie</p>
<pre><code class="language-java">Math.random()
</code></pre>
<p>in Java?</p>
<p>*Edit:<br />
Das hier habe ich noch vergessen:</p>
<pre><code class="language-cpp">const int Amount_of_doors = 3;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/256786/zufallszahl-generieren-aber-wie</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 03:00:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256786.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Dec 2009 19:49:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 19:50:10 GMT]]></title><description><![CDATA[<p>Huhu</p>
<p>Ich habe bereits gegoogelt und bin dabei immer auch zwei Möglichkeiten gestossen. Die eine war, diese hier:</p>
<p>rand()</p>
<p>Ich habe anschliessend folgenden Code erstellt:</p>
<pre><code class="language-cpp">int chosen_door = rand() &amp; Amount_of_doors;
</code></pre>
<p>Diese lieferte mir Werte zwischen 0 und 3.</p>
<p>Da ich jedoch nur int-Werte zwischen 0 und 2 gebrauchen kann, habe ich folgendes versucht:</p>
<pre><code class="language-cpp">int chosen_door = rand() &amp; ( Amount_of_doors - 1 );
</code></pre>
<p>Das Problem ist jedoch, dass dieser Code immer nur 0 und 2 ausgegeben hat, niemals 1. Kann mir jemand dieses Verhalten erklären? Ich habe beim googeln nur immer konkrete Beispiele gefunden, keine Erklärungen wie die Methode rand() genau Zufallszahlen generiert.</p>
<p>Gibt es für C++ nicht so etwas wie</p>
<pre><code class="language-java">Math.random()
</code></pre>
<p>in Java?</p>
<p>*Edit:<br />
Das hier habe ich noch vergessen:</p>
<pre><code class="language-cpp">const int Amount_of_doors = 3;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1824150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824150</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 17 Dec 2009 19:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 19:53:26 GMT]]></title><description><![CDATA[<p>&amp; nix gut, % gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824153</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 17 Dec 2009 19:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 19:54:24 GMT]]></title><description><![CDATA[<p>Ich weiß nicht wo du das <code>&amp;</code> her hast, aber eigentlich sieht der Aufruf so aus:</p>
<pre><code class="language-cpp">int chosen_door = (rand () % Amount_of_doors - 1);
</code></pre>
<p><code>rand ()</code> erzeugt große Zufallszahlen (hier: von -2^31 bis 2^31-1). Das Modulo <code>%</code> sorgt dafür, dass nur Zahlen, die kleiner als der Operand sind, herauskommen können (weil bei einer Division der Rest nicht größer sein kann als der Divisor).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824154</guid><dc:creator><![CDATA[devkid]]></dc:creator><pubDate>Thu, 17 Dec 2009 19:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 19:56:22 GMT]]></title><description><![CDATA[<p>devkid schrieb:</p>
<blockquote>
<p>große Zufallszahlen (hier: von -2^31 bis 2^31-1)</p>
</blockquote>
<p>Ich kenne viel Code, der sich drauf verläßt, daß rand() immer &gt;=0 liefert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824155</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 17 Dec 2009 19:56:22 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 19:58:05 GMT]]></title><description><![CDATA[<p>Mann, bin ich ein Depp, habe ich doch tatsächli das falsche Zeichen genommen <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=":-/"
      alt="😕"
    /></p>
<p>Ich wundere mich, dass der Compiler nicht gemeckert hat, der müsste sowas doch merken? Oder ist das erlaubt, bedeutet aber etwas anderes?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824158</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 17 Dec 2009 19:58:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 20:03:42 GMT]]></title><description><![CDATA[<p>&amp; ist bitweise UND-Verknüpfung<br />
% ist modulo<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/rand/" rel="nofollow">http://www.cplusplus.com/reference/clibrary/cstdlib/rand/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824160</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Thu, 17 Dec 2009 20:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 20:04:01 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Oder ist das erlaubt, bedeutet aber etwas anderes?</p>
</blockquote>
<p>Ja, wie immer in C++.<br />
&amp; ist bitweises AND.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824163</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 17 Dec 2009 20:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 20:04:45 GMT]]></title><description><![CDATA[<p>Alles klar.</p>
<p>Vielen Danke für die 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/1824165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824165</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 17 Dec 2009 20:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Thu, 17 Dec 2009 20:13:28 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Ich kenne viel Code, der sich drauf verläßt, daß rand() immer &gt;=0 liefert.</p>
</blockquote>
<p>Upps, bin jetzt vom <code>int</code> in seinem Code ausgegangen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1824173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824173</guid><dc:creator><![CDATA[devkid]]></dc:creator><pubDate>Thu, 17 Dec 2009 20:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 12:32:02 GMT]]></title><description><![CDATA[<p>Ich habe immer noch ein Problem... die Zufallszahlen werden zwar generiert, aber es kommt immer ein falsches Ergebnis raus. (Die Problemstellung steht im Classenkommentar, des geposteten Java-Codes.</p>
<p>Hier mal den Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;ctime&gt;

int get_random_car_door();
int get_random_player_choice();
int get_opened_door(int car_door, int chosen_door);
int get_changed_door(int opened_door, int chosen_door);

const int Amount_of_doors = 3;

int main()
{	
	using namespace std;

	cout &lt;&lt; &quot;Enter the amount of games the computer shall play: &quot;;
	int loops;
	cin &gt;&gt; loops;
	cout &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;

	int chosen_door;
	int opened_door;
	int car_door;

	int wins = 0;
	int losses = 0;

	for(int i = 0; i &lt; loops; i++){

		car_door = get_random_car_door();
		chosen_door = get_random_player_choice();
		opened_door = get_opened_door(car_door, chosen_door);

		chosen_door = get_changed_door(opened_door, chosen_door);

		if(chosen_door == car_door){
			wins++;
		} else {
			losses++;
		}

	}

	cout &lt;&lt; &quot;Wins:   &quot; &lt;&lt; wins &lt;&lt; endl;
	cout &lt;&lt; &quot;Losses: &quot; &lt;&lt; losses &lt;&lt; endl;

	int exit;
	cin &gt;&gt; exit;
	return 0;
}

int get_random_car_door(){

	return ( rand() % ( Amount_of_doors - 1 ) );

}

int get_random_player_choice(){

	return ( rand() % ( Amount_of_doors - 1 ) );

}

int get_opened_door(int car_door, int chosen_door){

	int opened_door;

	while(true){
		opened_door = ( rand() % ( Amount_of_doors - 1 ) );

		if(opened_door != car_door &amp;&amp; opened_door != chosen_door){
			return opened_door;
		}
	}

}

int get_changed_door(int opened_door, int chosen_door){

	for(int i = 0; i &lt; Amount_of_doors; i++){

		if(i != opened_door &amp;&amp; i != chosen_door){
			return i;
		}
	}

	return -1;
}
</code></pre>
<p>Ich habe das Gefühl, dass vor alem in der Funktion get_opened_door(int car_door, int chosen_door) etwas nicht stimmt, denn wenn ich mehr als 2 Eingebe am Anfang, bleibt das Programm irgendwie wie in einer Endlosschleiffe.</p>
<p>Da ich zuerst dachte, dass ich einfach etwas falsch programmiert habe, habe ich es noch in Java, da kenne ich mich recht gut aus, geschrieben und da funktioniert alles.</p>
<pre><code class="language-java">import javax.swing.JOptionPane;

/**
 * This program demonstrates a mathematical probability problem, called 
 * &quot;car and the goat&quot;.
 * 
 * The Car and the Goat
 * We assume that you are the winner in a TV-show. You get either a luxury car or a goat
 * as the prize. The presenter of the show takes you to three closed doors behind which
 * there is the car and two goats. First you choose one door at random. Then, to increase
 * the excitement, the presenter opens a door with a goat behind, and he asks you if 
 * you still want to change the door or not. What will you do?
 * 
 * Of course, you should change the door.
 * 
 * The program simulates the result, for a player who always changes doors, and prints
 * the ratio between wins and losses.
 * 
 * @author Urs Müller (17.12.09)
 *
 */
public class CarGoat {

	private final static int AMOUNT_OF_DOORS = 3; //total amount of doors

	protected CarGoat(){

		int chosenDoor; 	//stores which door the player chooses (it is chosen randomly by the computer)
		int openedDoor; 	//the door, the presenter opens
		int carDoor; 		//the door, behind which the car is

		long startTime, endTime;

		int wins = 0;
		int losses = 0;

		//determines how many games the computer shall simulate
		String input = JOptionPane.showInputDialog(null, &quot;Enter the amount of games \nthe computer shall play.&quot;);
		int loops = Integer.valueOf(input);
		startTime = System.currentTimeMillis();

		//loops through all games
		for(int i = 0; i &lt; loops; i++){

			carDoor = getRandomCarDoor();
			chosenDoor = getRandomPlayerChoice();
			openedDoor = getOpenedDoor(carDoor, chosenDoor);

			chosenDoor = getChangedDoor(openedDoor, chosenDoor);

			if(chosenDoor == carDoor){
				wins++;
			}else{
				losses++;
			}
		}

		endTime = System.currentTimeMillis();
		System.out.println(endTime - startTime);

		//round to 3 decimal places
		double ratio = (double)wins / (double)losses;
		final int DECIMAL_PLACES = 3;
		double factor = Math.pow(10, DECIMAL_PLACES);
		ratio = Math.round(ratio * factor) / factor;

		//shows the result
		JOptionPane.showMessageDialog(null, &quot;Wins:   &quot; + wins + &quot;\n&quot; +
											&quot;Losses: &quot; + losses + &quot;\n&quot; +
											&quot;Ratio:  &quot; + wins + &quot; / &quot; + losses + &quot; = &quot; + ratio + &quot; : 1&quot;);

	}

	public int getRandomCarDoor(){

		return (int)( Math.random() * 3 );

	}

	public int getRandomPlayerChoice(){
		return (int)( Math.random() * 3 );
	}

	/**
	 * Calculates which door is opened by the presenter.
	 * 
	 * @param carDoor - the door behind which the car is
	 * @param chosenDoor - the door, the player has chosen
	 * @return the door, the presenter opens
	 */	
	public int getOpenedDoor(int carDoor, int chosenDoor){

		int openedDoor;

		while(true){

			openedDoor = (int) ( Math.random() * 3 );

			if(openedDoor != carDoor &amp;&amp; openedDoor != chosenDoor){
				return openedDoor;
			}
		}

	}

	/**
	 * Changes the door
	 * 
	 * @param carDoor - the door behind which the car is
	 * @param openedDoor - the door the presenter has opened
	 * @param chosenDoor - the door, the player has chosen
	 * @return
	 */
	public int getChangedDoor(int openedDoor, int chosenDoor){

		for(int i = 0; i &lt; AMOUNT_OF_DOORS; i++){

			if(i != openedDoor &amp;&amp; i != chosenDoor){
				return i;
			}

		}

		return -1;
	}

	public static void main(String[] args) {

		new CarGoat();

	}

}
</code></pre>
<p>Ich wäre sehr froh, wenn mir jemand einen Unteschied sagen kann. Auch wenn mein C++ Programmierstil schlecht ist, könnt ihr es mich ruhig wissen lassen <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>
<p>Danke schon im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824929</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 19 Dec 2009 12:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 13:02:18 GMT]]></title><description><![CDATA[<p>Wenn Du eine Zufallszahl aus der Menge {0,1,...,Amount_of_doors-1} haben möchtest, ist sowohl<br />
<code>rand() % Amount_of_doors - 1</code><br />
als auch<br />
<code>rand() % ( Amount_of_doors - 1 )</code><br />
falsch.</p>
<p>Das -1 hat hier nichts zu suchen. Im ersten Fall bekommst Du Zahlen -1,0,1 und im zweiten Fall bekommst Du nur 0 und 1.</p>
<p>Das mit dem &amp; klappt auch nur für Zweierpotenzen. Wenn also x und y positiv sind, und y eine Zweierpotenz ist, dann gilt<br />
<code>x % y == x &amp; (y-1)</code><br />
aber auch nur dann.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824946</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 19 Dec 2009 13:02:18 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 13:10:40 GMT]]></title><description><![CDATA[<p>Schonmal &lt;random&gt; (bzw &lt;tr1/random&gt;) angeguckt?<br />
z.B.:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class random_generator
{
public:
	random_generator(T min, T max)
		: m_ui(min, max)
	{	}
	T operator()()
	{
		return m_ui(m_eng);
	}
private:
	std::tr1::uniform_int&lt;T&gt; m_ui;
	std::tr1::mt19937 m_eng;
};

int main()
{
    random_generator&lt;int&gt; ig(0,100);
    for(int i=0; i&lt;10; ++i)
        std::cout &lt;&lt; ig() &lt;&lt; &quot;\n&quot;;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1824948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824948</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 19 Dec 2009 13:10:40 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 13:33:08 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-172876.html" rel="nofollow">Marc++us Artikel</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824956</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sat, 19 Dec 2009 13:33:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 14:12:10 GMT]]></title><description><![CDATA[<p>@ Sebastian Pizer<br />
Aso, jetzt ist natürlich klar, wiso es nicht funktioniert hat.</p>
<p>@ brotbernd<br />
Sieht interessant aus, aber atm überfordert mich der Code noch etwas. Ich werde mal noch ein bisschen in meinem C++ Buch lesen.</p>
<p>@ FreakY&lt;3Cpp<br />
Der Link sieht sehr interessant aus. Ich werde das ganze mal lesen, brauche allerdings etwas Zeit dafür, der ganze Post ist ja zimlich lange ^^</p>
<p>Vielen Danke für eure Antworten. Ich hoffe, dass ich das mit Hilfe eurer Posts hinbekomme. Wenn nicht schreib ichs wieder hier 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>
]]></description><link>https://www.c-plusplus.net/forum/post/1824969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824969</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 19 Dec 2009 14:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 14:22:06 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>atm überfordert mich der Code noch etwas.</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;random&gt;
// #include &lt;tr1/random&gt; // gcc

int main()
{
   using namespace std::tr1;

   const int Amount_of_doors = 3;
   uniform_int&lt;int&gt; get_random_car_door(0, Amount_of_doors-1);
   mt19937 engine;

   int car_door = get_random_car_door(engine);
   int nochmal = get_random_car_door(engine);
   ...
}
</code></pre>
<p>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/1824976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824976</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 19 Dec 2009 14:22:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 14:39:22 GMT]]></title><description><![CDATA[<p>Hehe, ja das ist schon besser <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>
<p>Vielen Dank.</p>
<p>Hab ich nur das Gefühl, dass C++ komplizierter ist als Java, oder ist das wirklich so? Ich habe das Gefühl, dass dem Programmierer bei sehr vielen Sachen sehr viel mehr Freiheiten gelassen werden?<br />
(Muss natürlich nicht heissen, dass C++ schlechter ist, ich will hier keine Java vs. C++ Diskussion <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/1824982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824982</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 19 Dec 2009 14:39:22 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 14:49:26 GMT]]></title><description><![CDATA[<p>Ja, das kann man wohl so sagen.<br />
Über besser oder schlechter kann man sowieso nur im Zusammenhang mit einer konkreten Aufgabenstellung diskutieren. Es gibt viele Aufgaben für die C++ sicherlich eine schlechte Wahl ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1824986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1824986</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 19 Dec 2009 14:49:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 15:34:10 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Hab ich nur das Gefühl, dass C++ komplizierter ist als Java, oder ist das wirklich so? Ich habe das Gefühl, dass dem Programmierer bei sehr vielen Sachen sehr viel mehr Freiheiten gelassen werden?</p>
</blockquote>
<p>Komplizierter ist Ansichtssache, aber sicher komplexer.</p>
<p>In C++ wird eher die Philosophie vertreten, dass 1. der Benutzer das letzte Wort hat und 2. man für nichts zahlen möchte, das man nicht braucht. Punkt 1 sieht man daran, dass dem Programmierer sehr viele Freiheiten – darunter auch gefährliche – geboten werden. Wenn er einen Zeiger als <code>int</code> ansprechen möchte, okay, <code>reinterpret_cast</code> macht es möglich. Das erfordert natürlich eine gewisse Verantwortung, im Normalfall braucht man diese Mittel auch nicht. Dennoch ist es praktisch, in den anderen Fällen nicht von der Sprache daran gehindert zu werden. Bei Punkt 2 geht Java den sichereren Weg. Es nimmt für viele Dinge einen Laufzeitoverhead in Kauf, um gewisse Fehler über Exceptions mitzuteilen (Array-Indizes, Klassen-Casts, Nullzeiger).</p>
<p>Es spielt halt eine Rolle, wie man die Prioritäten legt. Ich würde C++ nicht prinzipiell als unsicher ansehen: Man kann sehr gut programmieren, ohne dauernd Low-Level-Rumgehacke zu betreiben. Dank Techniken wie RAII muss man sich nur noch sehr selten wirklich manuell um Speicher kümmern. In gewissen Aspekten ist C++ sogar sicherer, weil es sehr mächtige Metaprogrammierung zur Compilezeit und damit statische Typsicherheit ermöglicht. Dafür fällt es einem als Anfänger in C++ schwerer, sich mit Zeigern und solchen Dingen zurechtzufinden, weil es eben etwas mehr Fehlerquellen gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825009</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 15:44:30 GMT]]></title><description><![CDATA[<p>Wenn man aber erst mal einige Jahre Erfahrung hat, alle Regeln und Idiome verinnerlicht hat, seinen Stil entwickelt hat ist C++ alles andere als unsicher, eben weil man genau weiss was man da macht. Ich glaube ich habe schon ewig kein explizites delete irgendwo hingeschrieben. Und wenn mal was sehr optimiertes benötigt oder sich mit einer C Biblitothek rumschlagen muss, wird jede Ekligkeit in eine Klasse gekabselt und Ruhe.<br />
Das Problem ist, dass &quot;gutes&quot; Programmieren meist erst in fortgeschrittener Literatur behandelt wird, obwohl diese Dinge für Anfänger viel wichtiger sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825010</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 15:57:53 GMT]]></title><description><![CDATA[<p>Volle Zustimmung, brotbernd. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Leider ist der Markt auch heute noch überschwemmt von Büchern, die mit <code>char*</code> -Frickeleien beginnen und einen solchen Stil angewöhnen. Kein Wunder denken immer noch so viele Leute, dass man sich in C++ wahnsinnige Mühe für grundlegende Dinge wie Speicherverwaltung oder Stringverarbeitung machen müsse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825018</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Dec 2009 15:57:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 16:07:05 GMT]]></title><description><![CDATA[<p>Also ich lese gerade den C++ Primer Plus.</p>
<p>Der enthält schon solche Dinge wie char *. Im Moment kämpfe ich mich gerade durch das Kapitel &quot;Memory Models and namespaces&quot;. Ist etwas mühsam, aber ich freue mich auf das Kapitel &quot;Objects and Classes&quot; <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/1825021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825021</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 19 Dec 2009 16:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 16:20:29 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Also ich lese gerade den C++ Primer Plus. Der enthält schon solche Dinge wie char *.</p>
</blockquote>
<p>Das ist überhaupt kein Problem, der Primer gehört auch zur guten Anfängerliteratur. Natürlich darf man schon wissen, dass es <code>char</code> -Arrays gibt und man damit Strings verwalten kann. Es schadet auch nicht, es anwenden zu können. Aber wenn einem von Anfang an <em>ausschliesslich</em> solche Dinge gezeigt werden, sodass man effektiv das Gefühl bekommt, die Sprache ermögliche keine besseren Wege, ist das etwas anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825027</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Dec 2009 16:20:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 16:36:49 GMT]]></title><description><![CDATA[<p>Wie sieht es bei C++ eigentlich mit naming convetions aus?</p>
<p>Ich habe schon verschiedenes gelesen. camel_case, camelCase und noch anderes. Im Primer steht, es gibt verschiedene Dinge. Gibt es aktuelle naming conventions für C++ oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825033</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 19 Dec 2009 16:36:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 17:56:54 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Ich habe schon verschiedenes gelesen. camel_case, camelCase und noch anderes. Im Primer steht, es gibt verschiedene Dinge. Gibt es aktuelle naming conventions für C++ oder nicht?</p>
</blockquote>
<p>Es gibt verschiedene Namenskonventionen in C++.</p>
<p>Die Standardbibliothek und Boost verwenden <code>unter_striche</code> , aber selbst bist du frei. Sei einfach einheitlich, mindestens innerhalb eines Projekts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825055</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Dec 2009 17:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sat, 19 Dec 2009 23:20:16 GMT]]></title><description><![CDATA[<p>So, ich habs hinbekommen... alles funktioniert <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>
<p>Ich habe es so gelöst:</p>
<p>Ich habe alles in dem geposteten Link gelesen und anschliessend diese Klasse hier übernommen:</p>
<pre><code class="language-cpp">//Datei: random.cpp

#ifndef _RANDOM_H
#define _RANDOM_H

#include &lt;cstdlib&gt;
#include &lt;ctime&gt;
#include &lt;cassert&gt;

class Random
{
private:
	Random()
	{
		std::srand(static_cast&lt;int&gt;(std::time(NULL)));
	}
public:
	static int rnd(int lowerbounds, int upperbounds)
	{
		static Random dummy;
		assert(upperbounds - lowerbounds &lt; RAND_MAX);
		return lowerbounds + std::rand() % (upperbounds - lowerbounds + 1);
	}
};

#endif
</code></pre>
<p>Das hier ist anschliessend das file, von dem aus das Prog gestartet wird:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &quot;random.cpp&quot;

int get_random_car_door();
int get_random_player_choice();
int get_opened_door(int car_door, int chosen_door);
int get_changed_door(int opened_door, int chosen_door);
double round(double number, int places);

static const int Amount_of_doors = 3;

int main()
{

	using std::cin;
	using std::cout;
	using std::endl;

	int games;
	cout &lt;&lt; &quot;Enter the amount of games the computer shall simulate: &quot;;
	cin &gt;&gt; games;
	cout &lt;&lt; endl &lt;&lt; endl;

	int wins = 0;
	int losses = 0;

	int car_door;
	int chosen_door;
	int opened_door;

	for(int i = 0; i &lt; games; i++){

		car_door = get_random_car_door();
		chosen_door = get_random_player_choice();
		opened_door = get_opened_door(car_door, chosen_door);

		chosen_door = get_changed_door(opened_door, chosen_door);

		if(chosen_door = car_door){
			wins++;
		} else {
			losses++;
		}

	}

	double ratio = (float)wins / (float)losses;
	ratio = round(ratio, 3);

	cout &lt;&lt; &quot;Wins:   &quot; &lt;&lt; wins &lt;&lt; endl;
	cout &lt;&lt; &quot;Losses: &quot; &lt;&lt; losses &lt;&lt; endl;
	cout &lt;&lt; &quot;Ratio:  &quot; &lt;&lt; wins &lt;&lt; &quot; / &quot; &lt;&lt; losses &lt;&lt; &quot; = &quot; &lt;&lt; ratio &lt;&lt; &quot; : 1&quot; &lt;&lt; endl;

	int exit;
	cin &gt;&gt; exit;
	return 0;
}

int get_random_car_door(){
	return Random::rnd(0, Amount_of_doors - 1);
}

int get_random_player_choice() {
	return Random::rnd(0, Amount_of_doors - 1);
}

int get_opened_door(int car_door, int chosen_door){

	int opened_door;

	while(true){

		opened_door = Random::rnd(0, Amount_of_doors - 1);

		if(opened_door != car_door &amp;&amp; opened_door != chosen_door){
			return opened_door;
		}
	}

}

int get_changed_door(int opened_door, int chosen_door){

	for(int i = 0; i &lt; Amount_of_doors; i++){

		if(i != opened_door &amp;&amp; i != chosen_door){
			return i;
		}
	}
}

double round(double number, const int places){

	int factor = pow(10.0, places);
	number = (int) ( number * factor );
	number = number / factor;

	return number;
}
</code></pre>
<p>Falls was im Code sehr hässlich ist, gebt mir bescheid <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>Ansonsten nochmals vielen Dank für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825150</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sat, 19 Dec 2009 23:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahl generieren, aber wie? on Sun, 20 Dec 2009 00:15:18 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Falls was im Code sehr hässlich ist, gebt mir bescheid <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>
</blockquote>
<p>Ok.</p>
<p>.cpp-Dateien inkludieren ist sehr sehr hässlich. Das macht man nicht. Die Idee von getrennter Übersetzung ist die, dass man cpp-Dateien (.cpp + #includes = Übersetzungseinheit) einzeln kompiliert und hinterher zusammenschnürt. Wenn die eine ÜE etwas von der anderen ÜE benötigt, löst man das über Header-Dateien, in denen &quot;gemeinsame&quot; Dinge (üblicherweise Funktionsdeklarationen und Klassendefinitionen) stehen.</p>
<p>Du solltest Dir auch abgewöhnen, Bezeichner zu wählen, die mit einem Unterstrich anfangen oder zwei aufeinanderfolgende Unterstriche enthalten -- auch wenn es Makros sind. Diese Bezeichner sind reserviert.</p>
<p>In Deinem Fall kannst Du das Zufallszeug soweit abstrahieren, dass nur noch eine freie Funktion übrig bleibt. Ob Du intern mit einem Singleton arbeitest oder nicht, interessiert den Nutzer Deiner rnd-Funktion nicht:</p>
<p>myrandon.hpp</p>
<pre><code class="language-cpp">#ifndef MYRANDOM_HPP_INCLUDED
#define MYRANDOM_HPP_INCLUDED

int myrnd(int low, int high);

#endif // MYRANDOM_HPP_INCLUDED
</code></pre>
<p>myrandon.cpp</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;ctime&gt;
#include &quot;myrandom.hpp&quot;

namespace {

int myrand_seed()
{
  std::srand(static_cast&lt;int&gt;(std::time(NULL)));
  return 0;
}

} // anonymous namespace ends here

int myrnd(int low, int high) {
  static int dummy = myrand_seed();
  return low + std::rand() % (high - low + 1);
}
</code></pre>
<p>(ungetestet)</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1825164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1825164</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sun, 20 Dec 2009 00:15:18 GMT</pubDate></item></channel></rss>