<?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[Erstes Programm mit Klasse - sinnvoll?]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe mein erstes C++-Programm geschrieben, das über &quot;Hello World!&quot; hinausgeht und sogar eine Klasse mit Funktionen enthält.</p>
<p>Falls jemand von euch Zeit hätte, würde ich mich sehr freuen, wenn er es sich ansähe und mir Rückmeldung gäbe, ob ich irgendwelche Fehler gemacht habe, die ich mir schnell abgewöhnen sollte.</p>
<p>Inhaltlich scheint es zu funktionieren. Das Programm &quot;wirft&quot; mit Darts auf ein Einheitsquadrat [0,1] x [0,1] und zählt die Anzahl der Treffer im Einheitskreis. Daraus wird eine Näherung für Pi berechnet.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;math.h&gt;
#include &lt;time.h&gt;
#include &lt;stdlib.h&gt;

class dart{
	private:
	double x,y;			//Koordinaten

	public:
	dart(){};			//Kontruktor leer
	~dart(){};			//Destruktor leer
	void werfen(void);		//Koordinaten zufaellig bestimmen
	bool getroffen(void);		//Falls im Einheitskreis
};

void dart::werfen(void){
	x = (rand() % 1000) / 1000.0;	//Zahl zwischen 0 und 1 mit 3 Nachkommastellen
	y = (rand() % 1000) / 1000.0;	//Hier auch
}

bool dart::getroffen(){
	if(pow(x,2)+pow(y,2)&lt;=1) return true;	//Wenn x^2+y^2&lt;=1 ist, dann im Kreis
	else return false;
}

int main(void){
	srand(time(NULL));			//Zur Initialisierung von rand()

	int wuerfe, treffer=0;
	double pi;				//Schaetzung fuer Pi
	dart D;					//Wird gleich oft geworfen

	std::cout &lt;&lt; &quot;Werfe Darts auf Quadrat [0,1] X [0,1]. Wie viele soll ich werfen? &quot;;
	std::cin &gt;&gt; wuerfe;			//Anzahl der Wurfe abfragen

	for(int i=1; i&lt;=wuerfe; i++){
	D.werfen();				//erst werfen...
	if(D.getroffen()) treffer++;		//... und dann sehen, ob ich getroffen habe
	}

	pi = 4.0*treffer/wuerfe;		//mal 4 wegen Wurf auf Viertelkreis

	std::cout &lt;&lt; &quot;Habe &quot;&lt;&lt; wuerfe &lt;&lt; &quot; mal geworfen und &quot; &lt;&lt; treffer &lt;&lt; &quot; mal die Einheitsscheibe getroffen.&quot; &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;Meine Schaetzung fuer Pi ist &quot; &lt;&lt; pi &lt;&lt; &quot;.&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Gruß<br />
alaundo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326974/erstes-programm-mit-klasse-sinnvoll</link><generator>RSS for Node</generator><lastBuildDate>Mon, 25 May 2026 17:45:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326974.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jul 2014 10:42:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 10:42:39 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe mein erstes C++-Programm geschrieben, das über &quot;Hello World!&quot; hinausgeht und sogar eine Klasse mit Funktionen enthält.</p>
<p>Falls jemand von euch Zeit hätte, würde ich mich sehr freuen, wenn er es sich ansähe und mir Rückmeldung gäbe, ob ich irgendwelche Fehler gemacht habe, die ich mir schnell abgewöhnen sollte.</p>
<p>Inhaltlich scheint es zu funktionieren. Das Programm &quot;wirft&quot; mit Darts auf ein Einheitsquadrat [0,1] x [0,1] und zählt die Anzahl der Treffer im Einheitskreis. Daraus wird eine Näherung für Pi berechnet.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;math.h&gt;
#include &lt;time.h&gt;
#include &lt;stdlib.h&gt;

class dart{
	private:
	double x,y;			//Koordinaten

	public:
	dart(){};			//Kontruktor leer
	~dart(){};			//Destruktor leer
	void werfen(void);		//Koordinaten zufaellig bestimmen
	bool getroffen(void);		//Falls im Einheitskreis
};

void dart::werfen(void){
	x = (rand() % 1000) / 1000.0;	//Zahl zwischen 0 und 1 mit 3 Nachkommastellen
	y = (rand() % 1000) / 1000.0;	//Hier auch
}

bool dart::getroffen(){
	if(pow(x,2)+pow(y,2)&lt;=1) return true;	//Wenn x^2+y^2&lt;=1 ist, dann im Kreis
	else return false;
}

int main(void){
	srand(time(NULL));			//Zur Initialisierung von rand()

	int wuerfe, treffer=0;
	double pi;				//Schaetzung fuer Pi
	dart D;					//Wird gleich oft geworfen

	std::cout &lt;&lt; &quot;Werfe Darts auf Quadrat [0,1] X [0,1]. Wie viele soll ich werfen? &quot;;
	std::cin &gt;&gt; wuerfe;			//Anzahl der Wurfe abfragen

	for(int i=1; i&lt;=wuerfe; i++){
	D.werfen();				//erst werfen...
	if(D.getroffen()) treffer++;		//... und dann sehen, ob ich getroffen habe
	}

	pi = 4.0*treffer/wuerfe;		//mal 4 wegen Wurf auf Viertelkreis

	std::cout &lt;&lt; &quot;Habe &quot;&lt;&lt; wuerfe &lt;&lt; &quot; mal geworfen und &quot; &lt;&lt; treffer &lt;&lt; &quot; mal die Einheitsscheibe getroffen.&quot; &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;Meine Schaetzung fuer Pi ist &quot; &lt;&lt; pi &lt;&lt; &quot;.&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Gruß<br />
alaundo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409073</guid><dc:creator><![CDATA[alaundo]]></dc:creator><pubDate>Thu, 17 Jul 2014 10:42:39 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 10:58:20 GMT]]></title><description><![CDATA[<p>- kommentiere nicht das offensichtliche<br />
- keine leeren Konstruktoren / Destruktoren<br />
- verwende cmath, cstdlib, ctime statt der alten C-Header</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409075</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 17 Jul 2014 10:58:20 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 10:59:48 GMT]]></title><description><![CDATA[<ul>
<li>Du musst Default-Konstruktoren oder -Destruktoren die überhaupt nichts tun hier nicht selber angeben.</li>
<li><code>pow(y,2)</code> solltest du schleunigst durch <code>y*y</code> ersetzen. Das dürfte deutlich schneller sein.</li>
<li>&quot;Zahl zwischen 0 und 1 mit 3 Nachkommastellen&quot; macht so keinen Sinn. Eine Fließkommazahl speichert ihr Ergebnis nicht in dezimaler Schreibweise sondern rundet sie (höchstwahrscheinlich).<br />
Du solltest stattdessen <code>rand()</code> durch<a href="http://en.cppreference.com/w/cpp/numeric/random/RAND_MAX" rel="nofollow"> <code>RAND_MAX</code> </a>teilen.</li>
<li><code>void</code> in leeren Parameterlisten ist in C++ nicht nötig.</li>
<li><code>&lt;stdlib.h&gt;</code> ist der falsche Header - du musst das C++-äquivalent einbinden, <code>&lt;cstdlib&gt;</code> . (Das .h am Ende wird durch ein c am Anfang ersetzt)</li>
<li>Deklariere Variablen <strong>dort wo du sie brauchst</strong>, nicht am Anfang der <code>main</code> ! Das gilt hier bspw. für <code>pi</code> .</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2409076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409076</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 17 Jul 2014 10:59:48 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 10:58:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ziemlich gut für ein erstes nicht-Hallo-Welt-Programm.<br />
Konstruktor &amp; Destruktor solltest du weglassen. Das irritiert nur, wenn die expliziet angelegt werden und nix machen.</p>
<p>void als Parameter genauso weglassen oder es zumindest einheitlich machen.<br />
Den Block der for-Schleife solltest du einrücken.<br />
Variablen erst da deklarieren, wo Sie gebraucht werden (pi in main).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409077</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 17 Jul 2014 10:58:35 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:15:15 GMT]]></title><description><![CDATA[<p>Wow, vielen Dank für die schnellen Antworten!</p>
<p>Habe die voids weggelassen, einige Kommentare reduziert, die richtigen Header eingebunden, Kontruktor und Destruktor entfernt. Ist alles klar für mich.</p>
<p>RAND_MAX ist natürlich eine gute Idee, habe ich jetzt so implementiert (und direkt den Fehler gemacht, nicht zu bedenken, dass es eine Ganzzahl ist...).</p>
<p>Die Einrückung habe ich jetzt auch gemacht und meine Variablen da deklariert, wo ich sie brauche.</p>
<blockquote>
<p>pow(y,2) solltest du schleunigst durch y*y ersetzen. Das dürfte deutlich schneller sein.</p>
</blockquote>
<p>Tatsächlich, aber warum? Ich habe bisher eigentlich immer die Funktionen aus math benutzt, weil ich mir gedacht habe, dass ich so oft wie möglich auf bereits vorhandene Funktionen zurückgreifen sollte. Gibt es da Richtlinien, wann man das machen sollte?</p>
<p>Ich hänge auch nochmal den aktualisierten Code an:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;ctime&gt;
#include &lt;cstdlib&gt;

class dart{
	private:
	double x,y;			

	public:			
	void werfen();		//Koordinaten zufaellig bestimmen
	bool getroffen();		//Falls im Einheitskreis
};

void dart::werfen(){
	x = 1.0 * rand() / RAND_MAX;
	y = 1.0 * rand() / RAND_MAX;	
}

bool dart::getroffen(){
	if(x*x+y*y&lt;=1) return true;	//Wenn x^2+y^2&lt;=1 ist, dann im Kreis
	else return false;
}

int main(){
	srand(time(NULL));			//Zur Initialisierung von rand()

	int wuerfe;				

	std::cout &lt;&lt; &quot;Werfe Darts auf Quadrat [0,1] X [0,1]. Wie viele soll ich werfen? &quot;;
	std::cin &gt;&gt; wuerfe;			//Anzahl der Wurfe abfragen

	dart D;
	int treffer=0;
	for(int i=1; i&lt;=wuerfe; i++){
		D.werfen();				
		if(D.getroffen()) treffer++;		
	}

	double pi = 4.0*treffer/wuerfe;		//mal 4 wegen Wurf auf Viertelkreis

	std::cout &lt;&lt; &quot;Habe &quot;&lt;&lt; wuerfe &lt;&lt; &quot; mal geworfen und &quot; &lt;&lt; treffer &lt;&lt; &quot; mal die Einheitsscheibe getroffen.&quot; &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot;Meine Schaetzung fuer Pi ist &quot; &lt;&lt; pi &lt;&lt; &quot;.&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Danke!<br />
alaundo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409081</guid><dc:creator><![CDATA[alaundo]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:15:15 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:34:44 GMT]]></title><description><![CDATA[<p>Das pow war ja nicht total falsch oder so, aber es ist halt ein bisschen 'mit Kanonen auf Spatzen schießen'.<br />
Die allgemeine Funktion muss mit belieber Basis &amp; Exponenten zurecht kommen und wird sicher nichts besseres als x*x machen.<br />
Was denke ich auch nicht schlechter lesbar ist.</p>
<p>Nebenbei:<br />
Deine for-Schleife (i=1; i &lt;= n) ist natürlich auch nicht falsch, aber ich würde mir direkt angewöhnen von 0 zu zählen (i=0; i&lt;n), so wie du es später mal bei Arrays &amp; co auch machen musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409083</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:34:44 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:35:24 GMT]]></title><description><![CDATA[<p>x*x ist für den Computer nur mal eben schnell eine Multiplikation, die fast keine Zeit braucht.</p>
<p>std::pow ist auf den generellen Fall ausgelegt, sprich pow kann auch mit krummen Parametern rechnen. Das macht es flexibel, aber für so kleine Kinkerlitzen eben langsamer. Die Faustregel ist x² händisch auszuschreiben und alles andere mit pow machen. Ausnahme bilden Multiplikationen un Divisionen mit/durch Zweierpotenzen, das geht sehr schnell mit &lt;&lt; und &gt;&gt;.</p>
<p>(x*x*x wird öfters vielleicht auch noch schneller sein als pow(x, 3), vermutlich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409084</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:35:24 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:40:29 GMT]]></title><description><![CDATA[<p>Kleinigkeit noch:</p>
<pre><code class="language-cpp">if(x*x+y*y&lt;=1) return true;	//Wenn x^2+y^2&lt;=1 ist, dann im Kreis
	else return false;

// geht auch einfacher mit
return x*x+y*y&lt;=1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2409085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409085</guid><dc:creator><![CDATA[huppel]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:40:29 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:47:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Die Faustregel ist x² händisch auszuschreiben und alles andere mit pow machen.</p>
</blockquote>
<p>Wenn der Exponent zur Compile-Zeit feststeht, dann sollte man auf jeden Fall<a href="http://www.boost.org/doc/libs/1_46_1/libs/math/doc/sf_and_dist/html/math_toolkit/special/powers/ct_pow.html" rel="nofollow"> <code>boost::math::pow</code> </a>verwenden oder es nachschreiben. Das wird definitiv einen Performance-Boost gegenüber <code>pow</code> bringen.</p>
<blockquote>
<p>(x*x*x wird öfters vielleicht auch noch schneller sein als pow(x, 3), vermutlich)</p>
</blockquote>
<p>Nicht vermutlich sondern hundertprozentig. Ob es <em>viel</em> schneller ist, ist natürlich eine andere Frage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409087</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:50:36 GMT]]></title><description><![CDATA[<p>alaundo schrieb:</p>
<blockquote>
<pre><code>double pi = 4.0*treffer/wuerfe;		//mal 4 wegen Wurf auf Viertelkreis
</code></pre>
</blockquote>
<p>Mit diesem Kommentar stimmt etwas nicht. Wäre der Faktor wirklich ein anderer, wenn die Würfe auf den Vollkreis oder z.B. nur auf einen 1/8-Kreissektor (im Dreieck mit y &lt;= x) erfolgen würden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409090</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:50:36 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:51:54 GMT]]></title><description><![CDATA[<p>Einzig noch zwei Minianmerkungen, das ist aber eher eine Geschmackssache, nach meiner Erfahrung erhöht dies in großen Projekten aber die Lesbarkeit etwas.</p>
<p>1. ich habe public:/private nicht auf der gleichen Ebene wie die Methoden/Attribute (Von der Einrückung her ist dies schneller zu erkennen, was zu welchen Teil gehört).</p>
<p>2. hinter if/else schreibe ich aus dem gleichen Grund niemals direkt die Anweisung in die gleiche Zeile, selbst bei 1-Zeilen Anweisungsblöcken (Statt dessen eingerückt in Nächster). Auch wenn ich ursprünglich hier keinen Unterschied beim Lesen erwartet hätte, ist mir beim schnellen Fehlersuchen ohne die Einrückung etwas einmal entgangen.</p>
<p>Zudem würde ich dir davon abraten Tabulatoren in dem Forum zu verwenden (in den meisten Projekten, in denen ich gearbeitet habe wurde auch der Tabulator immer durch eine fixe Leerzeilenanzahl ersetzt).</p>
<p>alaundo schrieb:</p>
<blockquote>
<blockquote>
<p>pow(y,2) solltest du schleunigst durch y*y ersetzen. Das dürfte deutlich schneller sein.</p>
</blockquote>
<p>Tatsächlich, aber warum?</p>
</blockquote>
<p>Ich weiß nicht ob die Aussage stimmt, könnte mir es aber gut vorstellen. Bei ^2 kann man auf eine Multiplikation ausweichen (Spezialfall), pow ist aber für den allgemeinen Fall mit beliebigen Exponenten ausgelegt, und die Berechnung könnte aufwendiger sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409091</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 11:58:03 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>alaundo schrieb:</p>
<blockquote>
<pre><code>double pi = 4.0*treffer/wuerfe;		//mal 4 wegen Wurf auf Viertelkreis
</code></pre>
</blockquote>
<p>Mit diesem Kommentar stimmt etwas nicht. Wäre der Faktor wirklich ein anderer, wenn die Würfe auf den Vollkreis oder z.B. nur auf einen 1/8-Kreissektor (im Dreieck mit y &lt;= x) erfolgen würden?</p>
</blockquote>
<p>Eigentlich wird ja nicht auf den Viertelkreis sondern auf das Einheitsquadrat geworfen. Und das überdeckt halt nur einen Viertelkreis, sodass im Endeffekt pi/4 angenähert wird, also stimmt das schon, glaube ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409094</guid><dc:creator><![CDATA[huppel]]></dc:creator><pubDate>Thu, 17 Jul 2014 11:58:03 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 12:08:08 GMT]]></title><description><![CDATA[<p>pow ist für ganzzahlige Exponenten nicht effizient. Deshalb sollte man es nur für Exponenten vom Typ float/double benutzen.</p>
<p>Statt den Zufallswert durch Multiplikation und Division auf 3 Nachkommastellen zu runden, könntest du gleich Integer-Werte von 0-1000 nehmen. Dadurch sparst du dir die Fließkommaberechnungen und Ungenauigkeiten. Dementsprechend wird auch die Berechnung ob innerhalb des Einheitskreises effizienter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409100</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Thu, 17 Jul 2014 12:08:08 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 12:07:54 GMT]]></title><description><![CDATA[<p>oenone schrieb:</p>
<blockquote>
<p>pow ist für ganzzahlige Exponenten nicht effizient. Deshalb sollte man es nur für Exponenten vom Typ float/double benutzen.</p>
</blockquote>
<p>Und was ist bei x^84287423784278342378 ?<br />
Manuell ausschreiben?<br />
Schnell nen for-Loop schreiben (vllt mit Funktion)?<br />
std::pow benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409102</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 17 Jul 2014 12:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 12:16:57 GMT]]></title><description><![CDATA[<p>huppel schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>alaundo schrieb:</p>
<blockquote>
<pre><code>double pi = 4.0*treffer/wuerfe;		//mal 4 wegen Wurf auf Viertelkreis
</code></pre>
</blockquote>
<p>Mit diesem Kommentar stimmt etwas nicht. Wäre der Faktor wirklich ein anderer, wenn die Würfe auf den Vollkreis oder z.B. nur auf einen 1/8-Kreissektor (im Dreieck mit y &lt;= x) erfolgen würden?</p>
</blockquote>
<p>Eigentlich wird ja nicht auf den Viertelkreis sondern auf das Einheitsquadrat geworfen. Und das überdeckt halt nur einen Viertelkreis, sodass im Endeffekt pi/4 angenähert wird, also stimmt das schon, glaube ich.</p>
</blockquote>
<p>Es wurde ja nicht der Code beanstandet, sondern der Kommentar.<br />
Würden die Darts auf [-1,1]x[-1,1] geworfen, würde trotzdem pi/4 angenähert.<br />
Hat mit dem Viertelkreis im Kommentar nix zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409105</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Thu, 17 Jul 2014 12:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 13:15:02 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<blockquote>
<p>Mit diesem Kommentar stimmt etwas nicht. Wäre der Faktor wirklich ein anderer, wenn die Würfe auf den Vollkreis oder z.B. nur auf einen 1/8-Kreissektor (im Dreieck mit y &lt;= x) erfolgen würden?</p>
</blockquote>
<p>Ja, beispielsweise 1/8-Kreissekter im Einheitsquadrat hat genau den halben Flächeninhalt, dementsprechend würde pi/8 angenähert (liefert mein Programm auch <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="👍"
    /> ). Dass es vom Winkel abhängt sieht man schon daran, dass bei sehr sehr kleinen Winkeln die Trefferchance auch nur noch sehr klein ist, also ein größerer Faktor multipliziert werden muss.</p>
<p>Klar: wenn ich den Vollkreis im (vergrößerten) Quadrat nehme, bleibt der Faktor 1/4.</p>
<p>Danke für die Tipps mit pow, ich werde wohl einfach die Multiplikationen, die man noch schnell aufschreiben kann, mit * machen, und bei Fließkommazahlen oder großen Potenzen mit pow. Wie würde das bei Zweierpotenzen mit &lt;&lt; gehen?</p>
<p>Die anderen Anmerkungen (Einrückungen, if-Schleife bei 0, Einrückung und Tabulatoren) baue ich ein.</p>
<p>Danke!<br />
alaundo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409118</guid><dc:creator><![CDATA[alaundo]]></dc:creator><pubDate>Thu, 17 Jul 2014 13:15:02 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 13:19:22 GMT]]></title><description><![CDATA[<p>alaundo schrieb:</p>
<blockquote>
<p>if-Schleife</p>
</blockquote>
<p>if != Schleife <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/2409119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409119</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 17 Jul 2014 13:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 13:21:18 GMT]]></title><description><![CDATA[<p>Äh ja, klar :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409120</guid><dc:creator><![CDATA[alaundo]]></dc:creator><pubDate>Thu, 17 Jul 2014 13:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 13:23:46 GMT]]></title><description><![CDATA[<p>Die &lt;&lt; und &gt;&gt; sind Bitshiftoperatoren:</p>
<pre><code>for(unsigned int i = 0; i &lt; sizeof(unsigned int)*8; ++i)
    std::cout &lt;&lt; (1 &lt;&lt; i) &lt;&lt; &quot; vs. &quot; &lt;&lt; std::pow(2, i) &lt;&lt; std::endl;
</code></pre>
<p>Es werden die Bits eines Datums einfach nach links* geschoben. Praktische ist das eine Multiplikation* mit der i-ten Zweierpotenz. Dabei gibt es dann noch so Späße, was mit Vorzeichen passiert oder bei Überläufen.</p>
<p>Meiner Erfahrung nach braucht man das relativ selten. Und wenn mans braucht, dann weiss mane rstens schon ziemlich genau was man macht. In den meisten anderen Fällen kann der Compiler das selsbt einbauen (z.B. bei einer simplem Multiplikation/Division mit 2).</p>
<p>*: rechts bzw. Division</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409122</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 17 Jul 2014 13:23:46 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 13:30:36 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Die &lt;&lt; und &gt;&gt; sind Bitshiftoperatoren:</p>
<pre><code>for(unsigned int i = 0; i &lt; sizeof(unsigned int)*8; ++i)
    std::cout &lt;&lt; (1 &lt;&lt; i) &lt;&lt; &quot; vs. &quot; &lt;&lt; std::pow(2, i) &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Hier war '\n' statt endl gemeint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409123</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 17 Jul 2014 13:30:36 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 19:13:47 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Die &lt;&lt; und &gt;&gt; sind Bitshiftoperatoren:</p>
<pre><code>for(unsigned int i = 0; i &lt; sizeof(unsigned int)*8; ++i)
    std::cout &lt;&lt; (1 &lt;&lt; i) &lt;&lt; &quot; vs. &quot; &lt;&lt; std::pow(2, i) &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Hier war '\n' statt endl gemeint.</p>
</blockquote>
<p>Ich weis das wurde schon öfters diskutiert, aber können wir nicht mal schön sauber zusammenfassen was die Vor- und Nachteile sind. Manche hier im Forum sind ja der Meinung, dass endl am besten komplett aus dem Standard gestrichen wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409153</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 17 Jul 2014 19:13:47 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 20:20:44 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Die &lt;&lt; und &gt;&gt; sind Bitshiftoperatoren:</p>
<pre><code>for(unsigned int i = 0; i &lt; sizeof(unsigned int)*8; ++i)
    std::cout &lt;&lt; (1 &lt;&lt; i) &lt;&lt; &quot; vs. &quot; &lt;&lt; std::pow(2, i) &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Hier war '\n' statt endl gemeint.</p>
</blockquote>
<p>Ich weis das wurde schon öfters diskutiert, aber können wir nicht mal schön sauber zusammenfassen was die Vor- und Nachteile sind. Manche hier im Forum sind ja der Meinung, dass endl am besten komplett aus dem Standard gestrichen wird...</p>
</blockquote>
<p>Sobald ich nicht nur cout verwende, muss ich mir endl wieder abgewöhnen. Wozu es Einsteigern vorher angewöhnen, das ist nicht nett.<br />
<a href="http://www.aristeia.com/Papers/C++ReportColumns/novdec95.pdf" rel="nofollow">http://www.aristeia.com/Papers/C++ReportColumns/novdec95.pdf</a><br />
Ja, ich würde endl als gestrichen ansehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409163</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 17 Jul 2014 20:20:44 GMT</pubDate></item><item><title><![CDATA[Reply to Erstes Programm mit Klasse - sinnvoll? on Thu, 17 Jul 2014 21:18:22 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p><a href="http://www.aristeia.com/Papers/C++ReportColumns/novdec95.pdf" rel="nofollow">http://www.aristeia.com/Papers/C++ReportColumns/novdec95.pdf</a></p>
</blockquote>
<p>Wer nur denkt, das wäre &quot;Auch Meyers wettert nun gegen endl&quot;, sollte bis zum Ende lesen. Oder gleich zur Nachdiskussion springen. Ich war ebenso überrascht wie Herr Meyers, als ich über <a href="http://www.cplusplus.com/reference/ios/unitbuf/" rel="nofollow">unitbuf</a> und die Standardvorgaben für den cout-Buffer gelesen habe (bei letzterem meine ich, dass mir das früher schon einmal begegnete, aber ich habe es als Verständnisfehler meinerseits abgetan, weil ich es nicht glauben konnte).</p>
<p>P.S.: cout beim GCC hat unitbuf nicht gesetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2409168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2409168</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 17 Jul 2014 21:18:22 GMT</pubDate></item></channel></rss>