<?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[Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot;]]></title><description><![CDATA[<p>Hallo allesamt.<br />
Ich bin Neuling beim C++ Programmieren und arbeite gerade Bjarne Stroustrups &quot;Einführung in die Programmierung mit C++&quot; durch. (Bin noch recht am Anfang)</p>
<p>Eine der Aufgaben forderte, ein Programm zu schreiben, dass 3 Zahlen einliest<br />
und sie ordnet.<br />
Wollte ich jede Zahl einzeln einlesen, wäre das ganze kein Problem, aber ich dachte, ich lasse den Benutzer mehrere Zahlen aufeinmal eingeben via Whileschleife.</p>
<pre><code>int main()
{
    int counter = 0;
    int input = -1;
    int input1 = -1;
    int input2 = -1;
    int input3 = -1;
    while (counter != 4){

        while(counter != 3 &amp;&amp; cin&gt;&gt;input){
                if(counter==0){
                input1 = input;
                ++counter;
            }
                else if(counter==1){
                input2 = input;
                ++counter;
            }
                else if(counter==2){
                input3 = input;
                ++counter;

            }
        }
        if(input1&gt;=input2 &amp;&amp; input1&gt;=input3){

                if(input2&gt;=input3){
                cout &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input2 &lt;&lt; &quot; &quot; &lt;&lt; input1;
                }
                else cout &lt;&lt; input2 &lt;&lt; &quot; &quot; &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input1;
                }

        else if(input2&gt;=input1 &amp;&amp; input2&gt;=input3){

                if(input1&gt;=input3){
                cout &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input1 &lt;&lt; &quot; &quot; &lt;&lt; input2;
                }
                else cout &lt;&lt; input1 &lt;&lt; &quot; &quot; &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input2;

            }
        else cout &lt;&lt; input1 &lt;&lt; &quot; &quot; &lt;&lt; input2 &lt;&lt; &quot; &quot; &lt;&lt; input3;

        counter = 0;
        cout &lt;&lt; &quot;\n&quot;;
        cin.clear();
    }

}
</code></pre>
<p>Mein Problem ist, dass wenn man mehr als 3 Zahlen eingibt, die übrigen Zahlen immernoch im cinbuffer (heißt das so? Ich hoffe ihr wisst was ich meine) gespeichert sind um beim erneuten durchgehen auch vom Programm benutzt werden.<br />
Ich würde also am liebsten den cinspeicher &quot;leeren&quot;, wenn das denn irgendwie möglich ist. Wie funktioniert das?</p>
<p>Kann man so ein Programm mit den einfachen Mitteln if, else und while Schleife auch einfacher gestallten? Brauche keinen Code aber wenn jemand mir einen Denkanstoß geben könnte wäre ich verbunden!</p>
<p>Vielen Dank im voraus,<br />
mit freundlichen Grüßen,<br />
Thez</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326674/obligatorisches-quot-3-zahlen-ordnen-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 25 May 2026 14:47:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326674.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Jun 2014 13:35:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 13:37:11 GMT]]></title><description><![CDATA[<p>Hallo allesamt.<br />
Ich bin Neuling beim C++ Programmieren und arbeite gerade Bjarne Stroustrups &quot;Einführung in die Programmierung mit C++&quot; durch. (Bin noch recht am Anfang)</p>
<p>Eine der Aufgaben forderte, ein Programm zu schreiben, dass 3 Zahlen einliest<br />
und sie ordnet.<br />
Wollte ich jede Zahl einzeln einlesen, wäre das ganze kein Problem, aber ich dachte, ich lasse den Benutzer mehrere Zahlen aufeinmal eingeben via Whileschleife.</p>
<pre><code>int main()
{
    int counter = 0;
    int input = -1;
    int input1 = -1;
    int input2 = -1;
    int input3 = -1;
    while (counter != 4){

        while(counter != 3 &amp;&amp; cin&gt;&gt;input){
                if(counter==0){
                input1 = input;
                ++counter;
            }
                else if(counter==1){
                input2 = input;
                ++counter;
            }
                else if(counter==2){
                input3 = input;
                ++counter;

            }
        }
        if(input1&gt;=input2 &amp;&amp; input1&gt;=input3){

                if(input2&gt;=input3){
                cout &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input2 &lt;&lt; &quot; &quot; &lt;&lt; input1;
                }
                else cout &lt;&lt; input2 &lt;&lt; &quot; &quot; &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input1;
                }

        else if(input2&gt;=input1 &amp;&amp; input2&gt;=input3){

                if(input1&gt;=input3){
                cout &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input1 &lt;&lt; &quot; &quot; &lt;&lt; input2;
                }
                else cout &lt;&lt; input1 &lt;&lt; &quot; &quot; &lt;&lt; input3 &lt;&lt; &quot; &quot; &lt;&lt; input2;

            }
        else cout &lt;&lt; input1 &lt;&lt; &quot; &quot; &lt;&lt; input2 &lt;&lt; &quot; &quot; &lt;&lt; input3;

        counter = 0;
        cout &lt;&lt; &quot;\n&quot;;
        cin.clear();
    }

}
</code></pre>
<p>Mein Problem ist, dass wenn man mehr als 3 Zahlen eingibt, die übrigen Zahlen immernoch im cinbuffer (heißt das so? Ich hoffe ihr wisst was ich meine) gespeichert sind um beim erneuten durchgehen auch vom Programm benutzt werden.<br />
Ich würde also am liebsten den cinspeicher &quot;leeren&quot;, wenn das denn irgendwie möglich ist. Wie funktioniert das?</p>
<p>Kann man so ein Programm mit den einfachen Mitteln if, else und while Schleife auch einfacher gestallten? Brauche keinen Code aber wenn jemand mir einen Denkanstoß geben könnte wäre ich verbunden!</p>
<p>Vielen Dank im voraus,<br />
mit freundlichen Grüßen,<br />
Thez</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406339</guid><dc:creator><![CDATA[Thez]]></dc:creator><pubDate>Mon, 30 Jun 2014 13:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 13:56:15 GMT]]></title><description><![CDATA[<p>Den cin-Buffer leeren kannst du so:</p>
<pre><code>// Ignore to the end of file
cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max())

// Ignore to the end of line
cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n')
</code></pre>
<p>Bitte nicht vom Namen &quot;clear&quot; auf das Leeren schließen, das macht nämlich etwas ganz anderes.</p>
<p>Zur Aufgabe selbst: Du könntest die Zahlen auch in ein Array oder einen std::vector einlesen. Dann müsstest du keine ifs beim Einlesen benutzen, sondern könntest die Zahlen einfach über den aktuellen Index ins Array schreiben oder mit push in den vector.<br />
Das Sortieren wäre dann auch einfacher, z.B. mittels std::sort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406344</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Mon, 30 Jun 2014 13:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 15:01:27 GMT]]></title><description><![CDATA[<p>oenone schrieb:</p>
<blockquote>
<p>Das Sortieren wäre dann auch einfacher, z.B. mittels std::sort.</p>
</blockquote>
<p>Der Sinn der Aufgabe ist es programmieren zu lernen, nicht <code>std::sort</code> aufzurufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406355</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 30 Jun 2014 15:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 16:07:55 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>oenone schrieb:</p>
<blockquote>
<p>Das Sortieren wäre dann auch einfacher, z.B. mittels std::sort.</p>
</blockquote>
<p>Der Sinn der Aufgabe ist es programmieren zu lernen, nicht <code>std::sort</code> aufzurufen.</p>
</blockquote>
<p>Da könnte man aber argumentieren, dass <code>std::sort</code> aufrufen programmieren lernen ist. Zumal die meisten (wie hier) lieber <code>if/else/while</code> nehmen statt es richtig zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406362</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Mon, 30 Jun 2014 16:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 16:14:12 GMT]]></title><description><![CDATA[<p>Thez schrieb:</p>
<blockquote>
<p>Wollte ich jede Zahl einzeln einlesen, wäre das ganze kein Problem, aber ich dachte, ich lasse den Benutzer mehrere Zahlen aufeinmal eingeben via Whileschleife.</p>
</blockquote>
<p>Was könnte einfacher sein als <code>cin &gt;&gt; zahl1 &gt;&gt; zahl2 &gt;&gt; zahl3;</code> ?</p>
<blockquote>
<pre><code>while(counter != 3 &amp;&amp; cin&gt;&gt;input){
                if(counter==0){
                input1 = input;
                ++counter;
            }
                else if(counter==1){
                input2 = input;
                ++counter;
            }
                else if(counter==2){
                input3 = input;
                ++counter;

            }
        }
</code></pre>
</blockquote>
<p>Das ist eine Variante des For-Case-Antipatterns. Unbedingt abgewöhnen <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 />
<a href="http://thedailywtf.com/Articles/The_FOR-CASE_paradigm.aspx" rel="nofollow">http://thedailywtf.com/Articles/The_FOR-CASE_paradigm.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406363</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 30 Jun 2014 16:14:12 GMT</pubDate></item><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 17:14:07 GMT]]></title><description><![CDATA[<p>Danke für die Antworten. Dass man cin &gt;&gt; zahl1 &gt;&gt; zahl2 usw. machen kann, hätte ich mir ja denken können, kam aber garnicht drauf. Sehr klasse, danke! Werde es ausprobieren sobald ich wieder am Heim-Rechner bin. Das mit den Arrays habe ich mir auch schon gedacht, aber in dem Kaptiel wurden Arrays eigentlich noch garnicht behandelt. Werde aber wohl auch diese Variante probieren, der Übung halber.</p>
<p>Danke sehr 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/2406368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406368</guid><dc:creator><![CDATA[Thez]]></dc:creator><pubDate>Mon, 30 Jun 2014 17:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 20:59:26 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>oenone schrieb:</p>
<blockquote>
<p>Das Sortieren wäre dann auch einfacher, z.B. mittels std::sort.</p>
</blockquote>
<p>Der Sinn der Aufgabe ist es programmieren zu lernen, nicht <code>std::sort</code> aufzurufen.</p>
</blockquote>
<p>Da könnte man aber argumentieren, dass <code>std::sort</code> aufrufen programmieren lernen ist. Zumal die meisten (wie hier) lieber <code>if/else/while</code> nehmen statt es richtig zu machen.</p>
</blockquote>
<p>Ja, könnte man argumentieren.<br />
MMn. sollte man es aber erstmal schaffen die drei zahlen ohne <code>std::sort</code> zu sortieren.<br />
Wer das nicht zusammenbringt, der kann nicht programmieren.<br />
Wer es geschafft hat, der sollte dann in Zukunft <code>std::sort</code> verwendet.</p>
<p>Idealerweise kommt das dann auch in der Reihenfolge im Unterricht.</p>
<p>ps: Die Frage ist also: was soll bei dieser Aufgabe alles gelernt/geübt werden? Umgang mit iostreams? Umgang mit Arrays/Containern? Einfache Logik mit Schleifen/ifs/... abbilden?<br />
Und wenn letzteres dabei ist, was ich vermute, dann ist <code>std::sort</code> eben nicht das Mittel der Wahl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406400</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 30 Jun 2014 20:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Obligatorisches &amp;quot;3 Zahlen ordnen&amp;quot; on Mon, 30 Jun 2014 23:14:28 GMT]]></title><description><![CDATA[<blockquote>
<p>MMn. sollte man es aber erstmal schaffen die drei zahlen ohne std::sort zu sortieren.</p>
</blockquote>
<p>Hier ist das Sortiernetzwerk:</p>
<pre><code>X  o  o
   |  |
X  |  o  o
   |     |
X  o     o
</code></pre>
<p>Und hier ein wenig Testcode:</p>
<pre><code>#include &lt;algorithm&gt;

template &lt;typename T, std::size_t N&gt;
bool test_sort_function( void f(T(&amp;)[N]) )
{
	std::uintmax_t counter = 0;

	do
	{
		T arr[N];
		for( std::size_t i = 0; i != N; ++i )
			arr[i] = counter &amp; (T(1) &lt;&lt; i);

		f( arr );

		if( !std::is_sorted(std::begin(arr), std::end(arr)) )
			return false;
	}
	while( ++counter != (T(1) &lt;&lt; N) );

	return true;
}

void sort3( int (&amp;arr)[3] )
{
	// swap if greater
	// vertauscht die Werte der Arrayelemente an Positionen i bzw. j falls das Element an Position i größer ist als das an j
	#define sig(i, j) if( arr[i] &gt; arr[j] ) std::swap(arr[i], arr[j]);

	// Diese Zeilen entsprechen den Operationen im Sortiernetzwerk oben in entsprechender Reihenfolge
	sig( 0, 2 )
	sig( 1, 2 )
	sig( 0, 1 )
}

#include &lt;iostream&gt;

int main()
{
	std::cout &lt;&lt; (test_sort_function(sort3)? &quot;passed!&quot; : &quot;failed!&quot;);
}
</code></pre>
<p>So kann man ein wenig Sortiernetzwerke üben.</p>
<p>Edit: Habe die Test-Funktion verbessert, sodass sie nun das <a href="http://en.wikipedia.org/wiki/Sorting_network#Zero-one_principle" rel="nofollow">Zero-One-Prinzip</a> verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406415</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 30 Jun 2014 23:14:28 GMT</pubDate></item></channel></rss>