<?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[Stilfrage zu meinem Code]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hätte mal eine etwas allgemeinere Frage zu meinem Programmierstil und meiner Lösung des Problems.<br />
Ich arbeite das Buch &quot;Einführung in die Programmierung mit C++&quot; von Bjarne Strustroup durch und bin gerade bei den Aufgaben von Kapitel 4.</p>
<p>Was im Buch bis jetzt behandelt wurde:<br />
Typen und Objekte<br />
Operationen<br />
If Else<br />
Switch<br />
Vectoren (Mit einer kleinen Han dvoll Methoden.)<br />
Funktionen</p>
<p>Diese Aufgaben sollen also mit sehr einfachen Mitteln gelöst werden.<br />
Außer bei den Vectoren wurden bis jetzt noch keine Methoden vorgestellt.</p>
<p>Ich habe also, wie in der Aufgabe vorgegeben, ein programm geschrieben, dass über eine Schleife per cin double Werte einließt und schaut, ob diese Ungleich sind, ob sie fast identisch sind, oder ob sie gleich sind.<br />
Im Grunde also nichts aufregendes.<br />
Der Schleifenkopf sah dann immer so aus:</p>
<pre><code>while (cin &gt;&gt; wert1 &gt;&gt; wert2)
{
...
}
</code></pre>
<p>Jetzt sollte ich das Programm umschreiben, sodass nur ein Wert pro Schleifendurchlauf eingelesen wird und das Programm ausgibt, ob es die bis jetzt größte oder kleinste eingegebene Zahl ist.<br />
Was ich jetzt gerne von euch wissen würde ist, ob mein Lösungsansatz in Ordnung geht, oder ob mit mir der Italiener durchging und ich C++ Spaghettis fabriziert habe. <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>
<pre><code>#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

using namespace std;

void biggest_smallest(double &amp;smallest, double &amp;biggest, vector&lt;double&gt; num, int i);
double differenz (vector&lt;double&gt; num);

int main ()
{
	vector&lt;double&gt; num(2, 0); //Vector für die Werte, die eingelesen werden sollen.
	double smallest=0, biggest=0; //Variablen für den größten bzw. kleinsten Wert.

	while (true)
	{
		for (int i=0; i&lt;num.size(); i++)
		{
			cin &gt;&gt; num[i];
			biggest_smallest(smallest, biggest, num, i); //Weist smallest oder biggest den kleinsten bzw. größten Wert zu.
			cout &lt;&lt; num[i] &lt;&lt; endl;
		}
		if (num[0] != num[1]) //Wenn ungleich...
		{
			sort(num.begin(), num.end());
			cout &lt;&lt; &quot;Die kleinere Zahl ist &quot; &lt;&lt; num[0] &lt;&lt; '\n';
			cout &lt;&lt; &quot;Die größere Zahl ist &quot; &lt;&lt; num[1] &lt;&lt; endl;

			if (differenz(num) &lt;= 0.5) //Wenn num1 und num2 nicht weiter als 0.5 auseinander sind, dann...
			{
				cout &lt;&lt; &quot;Die Zahlen sind fast identisch und liegen nur &quot; &lt;&lt; differenz(num) &lt;&lt; &quot; auseinander.\n&quot;;
			}
		}
		else //Wenn num1 und num2 nicht ungleich sind...
		{
			cout &lt;&lt; &quot;Die beiden Zahlen &quot; &lt;&lt; num[0] &lt;&lt; &quot; und &quot; &lt;&lt; num[1] &lt;&lt; &quot; sind identisch.\n&quot;;
		}
}
	system(&quot;pause&quot;);
	return 0;
}

void biggest_smallest( double &amp;smallest, double &amp;biggest, vector&lt;double&gt; num, int i)
{
	if (smallest == 0 || num[i] &lt; smallest) //smallest wird immer aktuallisiert, wenn ein kleinerer Wert vorliegt oder smallest noch 0 ist.
	{
		smallest=num[i];
		cout &lt;&lt; &quot;Bisher die kleinste Zahl: &quot;;
	}
	else
	{
		if (biggest == 0 || num[i]&gt; biggest) //Biggest wird immer aktuallisiert, wenn es einen größeren Wert gibt oder biggest noch 0 ist.
		{
			biggest=num[i];
			cout &lt;&lt; &quot;Bisher größte eingegebene Zahl: &quot;;
		}
	}
}

double differenz (vector&lt;double&gt; num) //Berechnet, wie weit die beiden übergebenen Variablen auseinanderliegen. //Berechnet die Differenz zweier Werte.
{
	double diff = 0;
	sort(num.begin(), num.end());
	diff=num[1]-num[0]; //Weise dif die Differenz zu.
	return diff; //Differenz als Rückgabewert.
}
</code></pre>
<p>Würde mich freuen, dass wer Zeit und Lust hat, sich das einmal anschaut.<br />
Manchmal habe ich nämlich das Gefühl, dass ich Probleme zu kompliziert angehe. Wenn ich dann immere einfachere Beispiele von anderen finde, könnte ich mir immer vor die Stirn klatschen. <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>P.S.: Ich weiß. Die while Schleife einfach auf true zu setzen ist nicht optimal. Werde ich auch noch ändern.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320602/stilfrage-zu-meinem-code</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 15:31:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320602.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Oct 2013 16:16:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 16:16:26 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hätte mal eine etwas allgemeinere Frage zu meinem Programmierstil und meiner Lösung des Problems.<br />
Ich arbeite das Buch &quot;Einführung in die Programmierung mit C++&quot; von Bjarne Strustroup durch und bin gerade bei den Aufgaben von Kapitel 4.</p>
<p>Was im Buch bis jetzt behandelt wurde:<br />
Typen und Objekte<br />
Operationen<br />
If Else<br />
Switch<br />
Vectoren (Mit einer kleinen Han dvoll Methoden.)<br />
Funktionen</p>
<p>Diese Aufgaben sollen also mit sehr einfachen Mitteln gelöst werden.<br />
Außer bei den Vectoren wurden bis jetzt noch keine Methoden vorgestellt.</p>
<p>Ich habe also, wie in der Aufgabe vorgegeben, ein programm geschrieben, dass über eine Schleife per cin double Werte einließt und schaut, ob diese Ungleich sind, ob sie fast identisch sind, oder ob sie gleich sind.<br />
Im Grunde also nichts aufregendes.<br />
Der Schleifenkopf sah dann immer so aus:</p>
<pre><code>while (cin &gt;&gt; wert1 &gt;&gt; wert2)
{
...
}
</code></pre>
<p>Jetzt sollte ich das Programm umschreiben, sodass nur ein Wert pro Schleifendurchlauf eingelesen wird und das Programm ausgibt, ob es die bis jetzt größte oder kleinste eingegebene Zahl ist.<br />
Was ich jetzt gerne von euch wissen würde ist, ob mein Lösungsansatz in Ordnung geht, oder ob mit mir der Italiener durchging und ich C++ Spaghettis fabriziert habe. <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>
<pre><code>#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;

using namespace std;

void biggest_smallest(double &amp;smallest, double &amp;biggest, vector&lt;double&gt; num, int i);
double differenz (vector&lt;double&gt; num);

int main ()
{
	vector&lt;double&gt; num(2, 0); //Vector für die Werte, die eingelesen werden sollen.
	double smallest=0, biggest=0; //Variablen für den größten bzw. kleinsten Wert.

	while (true)
	{
		for (int i=0; i&lt;num.size(); i++)
		{
			cin &gt;&gt; num[i];
			biggest_smallest(smallest, biggest, num, i); //Weist smallest oder biggest den kleinsten bzw. größten Wert zu.
			cout &lt;&lt; num[i] &lt;&lt; endl;
		}
		if (num[0] != num[1]) //Wenn ungleich...
		{
			sort(num.begin(), num.end());
			cout &lt;&lt; &quot;Die kleinere Zahl ist &quot; &lt;&lt; num[0] &lt;&lt; '\n';
			cout &lt;&lt; &quot;Die größere Zahl ist &quot; &lt;&lt; num[1] &lt;&lt; endl;

			if (differenz(num) &lt;= 0.5) //Wenn num1 und num2 nicht weiter als 0.5 auseinander sind, dann...
			{
				cout &lt;&lt; &quot;Die Zahlen sind fast identisch und liegen nur &quot; &lt;&lt; differenz(num) &lt;&lt; &quot; auseinander.\n&quot;;
			}
		}
		else //Wenn num1 und num2 nicht ungleich sind...
		{
			cout &lt;&lt; &quot;Die beiden Zahlen &quot; &lt;&lt; num[0] &lt;&lt; &quot; und &quot; &lt;&lt; num[1] &lt;&lt; &quot; sind identisch.\n&quot;;
		}
}
	system(&quot;pause&quot;);
	return 0;
}

void biggest_smallest( double &amp;smallest, double &amp;biggest, vector&lt;double&gt; num, int i)
{
	if (smallest == 0 || num[i] &lt; smallest) //smallest wird immer aktuallisiert, wenn ein kleinerer Wert vorliegt oder smallest noch 0 ist.
	{
		smallest=num[i];
		cout &lt;&lt; &quot;Bisher die kleinste Zahl: &quot;;
	}
	else
	{
		if (biggest == 0 || num[i]&gt; biggest) //Biggest wird immer aktuallisiert, wenn es einen größeren Wert gibt oder biggest noch 0 ist.
		{
			biggest=num[i];
			cout &lt;&lt; &quot;Bisher größte eingegebene Zahl: &quot;;
		}
	}
}

double differenz (vector&lt;double&gt; num) //Berechnet, wie weit die beiden übergebenen Variablen auseinanderliegen. //Berechnet die Differenz zweier Werte.
{
	double diff = 0;
	sort(num.begin(), num.end());
	diff=num[1]-num[0]; //Weise dif die Differenz zu.
	return diff; //Differenz als Rückgabewert.
}
</code></pre>
<p>Würde mich freuen, dass wer Zeit und Lust hat, sich das einmal anschaut.<br />
Manchmal habe ich nämlich das Gefühl, dass ich Probleme zu kompliziert angehe. Wenn ich dann immere einfachere Beispiele von anderen finde, könnte ich mir immer vor die Stirn klatschen. <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>P.S.: Ich weiß. Die while Schleife einfach auf true zu setzen ist nicht optimal. Werde ich auch noch ändern.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357886</guid><dc:creator><![CDATA[BIOSzillator]]></dc:creator><pubDate>Fri, 04 Oct 2013 16:16:26 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 17:25:32 GMT]]></title><description><![CDATA[<p>Wieso erstellst du einen <code>vector</code> mit fester Größe für zwei Variablen? Das muss doch schöner gehen. Eine Differenz-Funktion ist übrigens einfach so zu implementieren:</p>
<pre><code>template&lt;typename T&gt;
T difference( T a, T b )
{
    return std::abs(a - b);
}
</code></pre>
<p>(Ein Bilderbuchbeispiel für ein Funktionstemplate)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357905</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 04 Oct 2013 17:25:32 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 17:28:01 GMT]]></title><description><![CDATA[<blockquote>
<p>C++ Spaghettis</p>
</blockquote>
<p>Ja, ist es. Bitte akzeptiere, dass du kein perfektes C++ von Anfang an schreibst. Komm wieder, wenn du ein echtes Problem hast.</p>
<blockquote>
<p>Eine Differenz-Funktion ist übrigens einfach so zu implementieren</p>
</blockquote>
<p>Funktioniert nicht mit unsigned.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357906</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 04 Oct 2013 17:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 17:30:06 GMT]]></title><description><![CDATA[<p>- wenn du als Anwender eine 0 eingibst, wird smallest und biggest zurückgesetzt<br />
- ich dachte, du sollst immer nur einen Wert einlesen?<br />
- bei deiner Funktion biggest_smallest ist es ausreichend, num[i] zu übergeben, statt den ganzen Vector und den Index<br />
- der Einsatz eines Vectors ist nur dann sinnvoll, wenn du mehrere Werte speichern willst, du aber vorher nicht weißt, wie viele. Ein Vector ist dynamisch, das heißt, man kann leicht Einträge hinzufügen mit vector.push_back(), für Dinge fester Größe gibt es Arrays, bei nur zwei Variablen kannst du auch gleich beide einzeln definieren.</p>
<p>Hier mein Vorschlag, den Teil mit (fast) gleich habe ich weggelassen:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

void addValue(double &amp;smallest, double &amp;biggest, double input, int count);
int main ()
{
    int count = 0;
	double smallest, biggest, input;
    while (true)
    {
        count++;
		cout &lt;&lt; &quot;Zahl eingeben: &quot;;
		cin &gt;&gt; input;
		addValue(smallest, biggest, input, count);
		cout &lt;&lt; &quot;  kleinste Zahl: &quot; &lt;&lt; smallest &lt;&lt; endl;
		cout &lt;&lt; &quot;  groesste Zahl: &quot; &lt;&lt; biggest &lt;&lt; endl;
	}
    system(&quot;pause&quot;);
    return 0;
}

void addValue(double &amp;smallest, double &amp;biggest, double input, int count)
{
	if(count == 1)
	{
		smallest = input;
		biggest = input;
	}
	if(smallest &gt; input)
		smallest = input;
	if(biggest &lt; input)
		biggest = input;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2357908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357908</guid><dc:creator><![CDATA[eulerscheZahl]]></dc:creator><pubDate>Fri, 04 Oct 2013 17:30:06 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 17:37:47 GMT]]></title><description><![CDATA[<p>@ *<br />
Dank dir. Templates waren allerdings noch nicht dran.<br />
Was hättest du denn zum Einlesen von zwei Variablen implementiert? Mir ist jetzt nichts anderes eingefallen, was man in der Reihenfolge beschreiben könnte.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@Knivil</a><br />
Das erwarte ich auch nicht. Ich hätte nur gern gewusst, was ich falsch machen, da ich meine Fehler nicht von Kapitel zu Kapitel weiterschleppen möchte.<br />
Etwas ähnliches hat mir mein Musiklehrer früher auch gesagt.<br />
&quot;Beim Klavierspielen darfst du dir eine falsche Fingerhaltung gar nicht erst angewöhnen. Ansonsten bekommst du sie nur schwer wieder weg.&quot;</p>
<p>Leider gibt es zu den wenigsten Aufgaben in diesem Buch eine Lösung. Und gerade zu dieser Aufgabe gibt es keine.</p>
<p>Wo ist denn nach deiner Meinung der Spaggethicode?<br />
Zu viele if else? Unlogische Unterteilung in Funktionen?<br />
Oder hätte ich sogar eine der Schleifen sparen können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357910</guid><dc:creator><![CDATA[BIOSzillator]]></dc:creator><pubDate>Fri, 04 Oct 2013 17:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 17:44:43 GMT]]></title><description><![CDATA[<blockquote>
<p>Zu viele if else? Unlogische Unterteilung in Funktionen?<br />
Oder hätte ich sogar eine der Schleifen sparen können?</p>
</blockquote>
<p>Ja, ja, ja ... und mehr. Ich glaube auch, dass du die Aufgabe missverstanden hast. Btw. Programmieren ist nicht wie Klavierspielen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357913</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 04 Oct 2013 17:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 17:53:54 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Btw. Programmieren ist nicht wie Klavierspielen.</p>
</blockquote>
<p>c.rackwitz schrieb:</p>
<blockquote>
<p>Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. <em>Du</em> musst <strong>genau</strong> wissen, <em>warum</em> du <em>wo</em> und <em>welches</em> Zeichen setzt.</p>
</blockquote>
<p>Nur um das spezifische Beispiel mal nicht unkritisiert zu lasse: Inwiefern nicht? Denkst du etwa, ein Komponist schmeißt wahllos Noten und Pausen in einen Topf?</p>
<blockquote>
<p>von zwei Variablen implementiert?</p>
</blockquote>
<p>Von zwei? Das war doch die vorige Aufgabe.</p>
<p>@eulerscheZahl: Falsch implementiert. Es soll ausgeben, <strong>ob</strong> der letzte Wert ... .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357916</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 04 Oct 2013 17:53:54 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 17:54:03 GMT]]></title><description><![CDATA[<p>@Eulaschezahl</p>
<p>Danke!<br />
Das sieht auf jeden Fall schon einmal sauberer als meine Version aus.<br />
Stimmt, ich sollte immer nur eine Zahl einlesen. Allerdings pro Schleifendurchlauf, was ich ja auch gemacht habe. Wie ich das verstanden habe, solltes nur nicht aufeinmal sein.</p>
<p>Bei deinem Programm gibt es nur ein kleines Problem.<br />
Wenn die Schleife jetzt durchgelaufen ist und input nicht kleiner als smallest oder größer als biggest war, wird kein Text ausgegeben.<br />
Daher habe ich einen Vector genommen, von dem man die Zahlen nach jedem Durchlauf verwenden kann.</p>
<p>Das mit der Variable Counter finde ich gut. Da die Zahl nicht wieder 1 sein wird, werden smallest und biggest auch nur einmal initialisiert.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@Knivil</a><br />
Gerade die if else Sache macht mir Probleme. Da steig ich noch nicht so durch, wie man sowas vermeiden kann.<br />
Das mit der Aufgabenstellung kann durchaus sein, da manchmal nicht klar ersichtlich ist, ob man eine Funktion hinzufügen oder ersetzen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357917</guid><dc:creator><![CDATA[BIOSzillator]]></dc:creator><pubDate>Fri, 04 Oct 2013 17:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Fri, 04 Oct 2013 18:05:28 GMT]]></title><description><![CDATA[<p>@*</p>
<p>Ja, da hab ich mich wohl etwas ungenau ausgedrückt.<br />
Die Aufgabenstellung war ja, dass pro Durchlauf nur eine eingelesen werden soll. Das es insgesamt nur eine sein darf, wurde nicht gesagt.<br />
Denn wenn es nur eine insgesamt sein darf, kann ich ja nicht sagen, ob die letzten beiden gleich oder ungleich waren</p>
<p>Mit den letzten beiden meine ich nicht smallest und biggest. Die sollen ja nur sagen, welche die bisher größte und kleinste Zahl war..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357921</guid><dc:creator><![CDATA[BIOSzillator]]></dc:creator><pubDate>Fri, 04 Oct 2013 18:05:28 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 00:16:03 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>Wieso erstellst du einen <code>vector</code> mit fester Größe für zwei Variablen? Das muss doch schöner gehen. Eine Differenz-Funktion ist übrigens einfach so zu implementieren:</p>
<pre><code>template&lt;typename T&gt;
T difference( T a, T b )
{
    return std::abs(a - b);
}
</code></pre>
<p>(Ein Bilderbuchbeispiel für ein Funktionstemplate)</p>
</blockquote>
<p>Da fehlt was. <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>
<pre><code>class foo_type{};
foo_type operator-(foo_type, foo_type)
{
  return foo_type();
}

foo_type abs(foo_type)
{
  return foo_type();
}

foo_type a,b;
foo_type c = difference(a,b);
</code></pre>
<p><a href="http://ideone.com/4lQxRT" rel="nofollow">http://ideone.com/4lQxRT</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357988</guid><dc:creator><![CDATA[Zion Templer]]></dc:creator><pubDate>Sat, 05 Oct 2013 00:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 00:34:13 GMT]]></title><description><![CDATA[<p>Das habe ich natürlich für Fließkommazahlen geschrieben.</p>
<p>Und ich habe nicht vor, ADL oder Unterstützung für vorzeichenlose Skalare zu ergänzen, um den TE nicht zu verwirren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357990</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 05 Oct 2013 00:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 01:34:47 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>knivil schrieb:</p>
<blockquote>
<p>Btw. Programmieren ist nicht wie Klavierspielen.</p>
</blockquote>
<p>c.rackwitz schrieb:</p>
<blockquote>
<p>Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. <em>Du</em> musst <strong>genau</strong> wissen, <em>warum</em> du <em>wo</em> und <em>welches</em> Zeichen setzt.</p>
</blockquote>
<p>Nur um das spezifische Beispiel mal nicht unkritisiert zu lasse: Inwiefern nicht? Denkst du etwa, ein Komponist schmeißt wahllos Noten und Pausen in einen Topf?</p>
</blockquote>
<p>Nicht völlig wahllos, nein.</p>
<p>Hat aber auch niemand behauptet. &quot;Völlig wahllos zusammenschmeissen&quot; ist nicht die Negation von &quot;ganz genau wissen warum man wo was wie macht&quot;. Und &quot;ganz genau wissen warum man wo was wie macht&quot; kann ein Komponist nicht immer, denn sonst könnte er nie was neues komponieren. So könnte man nichtmal nen erfolgreichen Remix von irgendwas basteln.</p>
<p>Du scheinst recht gerne Aussagen falsch verstehen zu wollen. Bloss peinlich wenn du beim Kritisieren dann dumme Fehler machst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357994</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 05 Oct 2013 01:34:47 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 06:10:03 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Wieso erstellst du einen <code>vector</code> mit fester Größe für zwei Variablen? Das muss doch schöner gehen. Eine Differenz-Funktion ist übrigens einfach so zu implementieren:</p>
<pre><code>template&lt;typename T&gt;
T difference( T a, T b )
{
    return std::abs(a - b);
}
</code></pre>
<p>(Ein Bilderbuchbeispiel für ein Funktionstemplate)</p>
</blockquote>
<p>Aber ganz schlechter Stil. Was Du implememntiert hast, wäre wohl absulute_difference, wobei man als Anwender wohl lieber abs(a-b) schreibt, also absolute_difference(a,b). difference(a,b) muss a-b sein,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2357997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2357997</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 05 Oct 2013 06:10:03 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 10:00:27 GMT]]></title><description><![CDATA[<blockquote>
<p>Aber ganz schlechter Stil.</p>
</blockquote>
<p>Das ist der bequemlichkeit wegen kurz gehalten. Der TE hat ebenfalls Differenz geschrieben, ich habe nur sein Wort genommen und übersetzt.</p>
<blockquote>
<p>Daher habe ich einen Vector genommen, von dem man die Zahlen nach jedem Durchlauf verwenden kann.</p>
</blockquote>
<p>Das ist überflüssig. Ein vector ist ein dynamisches Array. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /><br />
Edit: Nun gut, du kennst ja nichts anderes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358025</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 05 Oct 2013 10:00:27 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 10:05:56 GMT]]></title><description><![CDATA[<p>Trifft es nicht schon dieses simple Programm:</p>
<pre><code>#include &lt;iostream&gt;

int main()
{
	double min;
	std::cin &gt;&gt; min;
	double max = min;

	for( double current; std::cin &gt;&gt; current; )
		if( current &gt; max )
		{
			max = current;
			std::cout &lt;&lt; &quot;Groesster bisher eingegebener Wert!\n&quot;;
		}
		else if( current &lt; min )
		{
			min = current;
			std::cout &lt;&lt; &quot;Kleinster bisher eingegebener Wert!\n&quot;;
		}
}
</code></pre>
<p>Du hast ja in deinem Anfangsposting Code gepostet, der offensichtlich noch mehr macht - war das Teil der Aufgabenstellung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358030</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 05 Oct 2013 10:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 10:09:17 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<pre><code>for( double current; std::cin &gt;&gt; current; )
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /><br />
Das entwertet die Stärke des for-Schlüsselworts für die Verbesserung der Lesbarkeit typischer for-Schleifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358031</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 05 Oct 2013 10:09:17 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 10:32:30 GMT]]></title><description><![CDATA[<p>Bei mir hat es nicht mal für einen müden Schmunzler gereicht. Dagegen war der heilige Grahl in der Bluse definitiv ein Brüller.</p>
<p>Ernst kannst du das wohl kaum meinen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358040</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 05 Oct 2013 10:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 11:07:01 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>Ernst kannst du das wohl kaum meinen.</p>
</blockquote>
<p>Doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358045</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 05 Oct 2013 11:07:01 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 11:37:47 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>Ernst kannst du das wohl kaum meinen.</p>
</blockquote>
<p>Doch.</p>
</blockquote>
<p><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="🙂"
    /><br />
Gut. Ich sehe ja, dass du (aus gutem Grund) die for-Schleife tatsächlich nur als Zähl-Schleife nutzt. Alles andere wäre das Zusammenpressen mehrerer Zeilen auf Eine durch den Missbrauch der for-Schleife.</p>
<p>Also</p>
<pre><code>double current;
while( std::cin &gt;&gt; current )
</code></pre>
<p>Ich sah nun die obige Schleife als sehr gut lesbar an. Na gut, wenn du so konsequent in deinen Prinzipien bist - ich versuche die for-Schleife nicht zu missbrauchen, und habe fast nirgends eine stehen (weil ich keine Zählschleifen habe) . Aber das sah ich als absolut in Ordnung an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358048</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 05 Oct 2013 11:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 11:44:08 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>ich versuche die for-Schleife nicht zu missbrauchen, und habe fast nirgends eine stehen (weil ich keine Zählschleifen habe)</p>
</blockquote>
<p>Ist beides veraltet. Heutzutage schreibt man</p>
<pre><code class="language-cpp">for (int i : range(0, 10))
  // mach was mit i
</code></pre>
<p>und</p>
<pre><code class="language-cpp">for (double d : istream_range&lt;double&gt;(std::cin))
  // mach was mit d
</code></pre>
<p>Die Helferklassen zu schreiben ist trivial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358054</guid><dc:creator><![CDATA[c++11kiddy]]></dc:creator><pubDate>Sat, 05 Oct 2013 11:44:08 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 11:50:23 GMT]]></title><description><![CDATA[<p>c++11kiddy schrieb:</p>
<blockquote>
<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>ich versuche die for-Schleife nicht zu missbrauchen, und habe fast nirgends eine stehen (weil ich keine Zählschleifen habe)</p>
</blockquote>
<p>Ist beides veraltet. Heutzutage schreibt man</p>
<pre><code class="language-cpp">for (int i : range(0, 10))
  // mach was mit i
</code></pre>
</blockquote>
<p>Hab damit keine supi Erfahrungen gemacht, weil sie ruck zuck eklig werden, wenn die Schleifen nicht ganz so einfach sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358055</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 05 Oct 2013 11:50:23 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 11:53:24 GMT]]></title><description><![CDATA[<p>Beides völliger Unsinn.<br />
(Und mit Unsinn beziehe ich mich auf die Lesbarkeit, die sich dadurch kein Stück verbessert hat)</p>
<p>Edit: Ich mache erstmal noch keine Aussagen bezüglich Performance...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358056</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 05 Oct 2013 11:53:24 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 11:57:28 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Hab damit keine supi Erfahrungen gemacht, weil sie ruck zuck eklig werden, wenn die Schleifen nicht ganz so einfach sind.</p>
</blockquote>
<p>Man muss daran auch nicht pragmatisch festhalten.</p>
<p>Einfache Schleifen einfaches for.<br />
Komplizierte Schleifen komplexes for.</p>
<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>Edit: Ich mache erstmal noch keine Aussagen</p>
</blockquote>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/2358057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358057</guid><dc:creator><![CDATA[c++11kiddy]]></dc:creator><pubDate>Sat, 05 Oct 2013 11:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 12:43:31 GMT]]></title><description><![CDATA[<p>Jetzt darf ich Aussagen tätigen.<br />
Edit: Folgende Implementierung ist natürlich vereinfacht.</p>
<pre><code>#include &lt;iostream&gt;

template&lt; typename Type &gt;
struct range_impl
{
	Type a, b;

	range_impl( Type a, Type b ):
		a{a}, b{b} {}

	struct Proxy
	{
		Type val;

		Proxy( Type m ):
			val(m) {}

		bool operator!=( Proxy const&amp; p ){ return val != p.val; }
		Proxy&amp; operator++(){ ++val; return *this; }
		Type operator*() { return val; } // prvalue
	};

	Proxy begin() { return a; }
	Proxy end() { return b; }
};

template&lt; typename Type &gt;
range_impl&lt;Type&gt; range( Type a, Type b ) { return {a, b}; }

int main()
{
	unsigned value = 0;
	auto first = clock();

	for( auto i : range_impl&lt;unsigned&gt;(0, 1 &lt;&lt; 31 ) )
		value += i;

	std::cout &lt;&lt; &quot;Time: &quot; &lt;&lt; clock() - first &lt;&lt; &quot; value: &quot; &lt;&lt; value &lt;&lt; '\n';

	value = 0; first = clock();

	for( unsigned i = 0; i != 1 &lt;&lt; 31; ++i )
		value += i;

	std::cout &lt;&lt; &quot;Time: &quot; &lt;&lt; clock() - first &lt;&lt; &quot; value: &quot; &lt;&lt; value &lt;&lt; '\n';
}
</code></pre>
<p>Ergibt, dass deine Variante ohne Optimierungslevel etwa 1.1 bis 1.2 mal mehr Zeit braucht. (Getestet auf Clang 3.3 und GCC 4.9)</p>
<p>Edit: Deine Variante ist natürlich nur etwas langsamer <em>ohne Optimierung</em>. Mit Optimierung wird wahrscheinlich die zweite Schleife wegoptimiert... daher macht das Beispiel wenig sinn...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2358067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358067</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 05 Oct 2013 12:43:31 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 12:31:45 GMT]]></title><description><![CDATA[<p>@ *<br />
Danke. Ich wusste gar nicht, dass man eine for Schleife so benutzen kann.<br />
In deinem Beispiel wurde das Problem der Initialisierung der beiden Variablen min und max gelöst, worüber ich die ganze Zeit schon nachgedacht habe.<br />
Und das ist genau das, was ich in meinem Anfangspost gemeint hatte. Wenn ich dann soetwas lese, ist es plötzlich logisch für mich.<br />
&quot;Wenn ich nicht möchte, dass die Variablen immer wieder initialisiert werden, muss die Initialisierung außerhalb der Schleife statt finden.&quot;</p>
<p>Zu deiner Frage, warum mein Code mehr macht, als in der Aufgabe stand:<br />
Die Aufgabe hat aufeinander aufgebaut. Die Aufgabe, um die sich der Thread handelt ist Nr. 6.<br />
Hier mal die genauen Aufgabenstellungen:</p>
<p>1. Schreiben Sie ein Programm, das aus einer while-Schleife besteht, die bei jedem Schleifendurchlauf zwei int-Werte einliest und diese dann ausgibt. Verlassen Sie das Programm, wenn zum Beenden ein '|' eingegeben wurde.</p>
<p>2. Ändern Sie das Programm so, dass die Ausgabe lautet: „Der kleinere Wert ist: “, gefolgt von der kleineren der beiden Zahlen und weiter „Der größere Wert ist:“, gefolgt von dem größeren Wert.</p>
<p>3. Erweitern Sie das Programm so, dass es die Zeile „Die Zahlen sind gleich“ ausgibt, wenn die Zahlen gleich sind.</p>
<p>4. Ändern Sie das Programm so, dass es double-Werte statt int-Werte verwendet.</p>
<p>5. Ändern Sie das Programm so, dass es erst die größere und dann die kleinere Zahl ausgibt und anschließend die Zeile „Die Zahlen sind fast gleich“, wenn die beiden Zahlen sich um weniger als 1,0/10.000.000 unterscheiden.</p>
<p>6. Ändern Sie jetzt den Schleifenrumpf, sodass er bei jedem Schleifendurchlauf nur einen double Wert einliest. Definieren Sie zwei Variablen um festzuhalten, welcher Wert bisher der kleinste und bisher der größte war. Geben Sie nach jedem Schleifendurchlauf den eingegebenen Wert aus. Wenn es der bisher kleinste Wert war, schreiben Sie nach der ausgegebenen Zahl „bisher der kleinste Wert“, und wenn es der bisher größte Wert war, schreiben Sie nach der Zahl „bisher der größte Wert“.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@Hustbaer</a></p>
<p>Ich glaube, dass du einen etwas falschen Eindruck vom Remixen und dem Musik machen ansich hast.<br />
Vielleicht habe ich deinen Post ja auch nur falsch verstanden, jedoch klingt deine Aussage nach:<br />
&quot;Kein Musikproduzent weiß was er da macht, denn ansonsten könnte es keine neue Musik mehr geben.&quot;</p>
<p>Als Musiker muss man genau so wissen, was man mit den 12 Noten macht, die einem zur Verfügung stehen. Jeder der sich mal etwas mit Musiktheorie beschäftigt hat, weiß was ich meine.<br />
Ganz Kritisch wird es im Mixing und Mastering. Wenn man da etwas falsch macht, klingt es ganz schnell, ganz schön scheiße.<br />
Es soll jetzt hier aber nicht weiter um Musik gehen. Nur als Ergänzung... <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/2358071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358071</guid><dc:creator><![CDATA[BIOSzillator]]></dc:creator><pubDate>Sat, 05 Oct 2013 12:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage zu meinem Code on Sat, 05 Oct 2013 12:41:28 GMT]]></title><description><![CDATA[<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>Jetzt darf ich Aussagen tätigen.<br />
[...]<br />
Ergibt, dass deine Variante selbst mit -O2 immer noch etwa 1.1 bis 1.2 mal mehr Zeit braucht. (Getestet auf Clang 3.3 und GCC 4.9)</p>
</blockquote>
<p>Nächstes Mal bitte richtig messen, danke.</p>
<p>Ich bin überzeugt, dass, wenn du zuerst die normale for-Loop testest und dann die range-based, dass dann die range-based schneller ist.</p>
<p>Wieso? Weil erst std::cout &lt;&lt; &quot;Time: &quot; aufgerufen wird, was dazu führt das die Bibliothek geladen werden muss und dann erst clock(). Das zweite Mal ist sie schon da.</p>
<p>Aber es ist sinnlos zu messen, denn beide erzeugen den gleichen Assemblercode, deshalb sind beide gleich schnell.</p>
<p>Darum bleibe bei:</p>
<ul>
<li>schrieb:</li>
</ul>
<blockquote>
<p>Edit: Ich mache erstmal noch keine Aussagen</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2358076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2358076</guid><dc:creator><![CDATA[c++11kiddy]]></dc:creator><pubDate>Sat, 05 Oct 2013 12:41:28 GMT</pubDate></item></channel></rss>