<?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[3 Zahlen Sortieren ohne logische Operatoren]]></title><description><![CDATA[<p>Wollte nicht den alten Thread ausgraben..<br />
<a href="https://www.c-plusplus.net/forum/91070-full">https://www.c-plusplus.net/forum/91070-full</a></p>
<pre><code>#include &lt;iostream&gt;
using namespace std;
int main() {
	int a,b,c;
	cout&lt;&lt;&quot;Gib drei Zahlen zw. 0 und 999 ein&quot;&lt;&lt;endl;
	cin&gt;&gt;a&gt;&gt;b&gt;&gt;c;
	int x=a, y=b, z=c;
	for(int i=0; i=999; i++){
		x=x--;
		y=y--;
		z=z--;
		if(x);
		else{
			cout&lt;&lt;a;
			x=999;
		}
		if(y);
		else{
			cout&lt;&lt;b;
			y=999;
		}
		if(z);
		else{
			cout&lt;&lt;c;
			z=999;
		}
	}
	return 0;
}
</code></pre>
<p>Weiß jemand wieso das nicht funktioniert? Programm gibt seitenweise Zahlen aus.</p>
<p>Dabei sollte meiner Meinung doch nur eine Zahl ausgegeben werden wenn x, y, oder z 0 erreicht hat. Und das nur einmal, da dann ja die Variablen wieder hochgesetzt werden und somit im nächsten Durchlauf &gt;0 sind.</p>
<p>mfg CS</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332454/3-zahlen-sortieren-ohne-logische-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 22:00:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332454.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 May 2015 21:41:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Fri, 01 May 2015 21:41:31 GMT]]></title><description><![CDATA[<p>Wollte nicht den alten Thread ausgraben..<br />
<a href="https://www.c-plusplus.net/forum/91070-full">https://www.c-plusplus.net/forum/91070-full</a></p>
<pre><code>#include &lt;iostream&gt;
using namespace std;
int main() {
	int a,b,c;
	cout&lt;&lt;&quot;Gib drei Zahlen zw. 0 und 999 ein&quot;&lt;&lt;endl;
	cin&gt;&gt;a&gt;&gt;b&gt;&gt;c;
	int x=a, y=b, z=c;
	for(int i=0; i=999; i++){
		x=x--;
		y=y--;
		z=z--;
		if(x);
		else{
			cout&lt;&lt;a;
			x=999;
		}
		if(y);
		else{
			cout&lt;&lt;b;
			y=999;
		}
		if(z);
		else{
			cout&lt;&lt;c;
			z=999;
		}
	}
	return 0;
}
</code></pre>
<p>Weiß jemand wieso das nicht funktioniert? Programm gibt seitenweise Zahlen aus.</p>
<p>Dabei sollte meiner Meinung doch nur eine Zahl ausgegeben werden wenn x, y, oder z 0 erreicht hat. Und das nur einmal, da dann ja die Variablen wieder hochgesetzt werden und somit im nächsten Durchlauf &gt;0 sind.</p>
<p>mfg CS</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452250</guid><dc:creator><![CDATA[Chromo sapiens]]></dc:creator><pubDate>Fri, 01 May 2015 21:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Fri, 01 May 2015 21:50:29 GMT]]></title><description><![CDATA[<p>i=999?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452252</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 01 May 2015 21:50:29 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Fri, 01 May 2015 22:19:28 GMT]]></title><description><![CDATA[<p>Zeile 8: <code>=</code> ist eine Zuweisung, kein Vergleich. Außerdem wäre ein Vergleich hier sowieso falsch. Und fällt vermutlich unter die Definition einer logischen Operation. Ebenso ist eine for-Schleife an sich bloß syntaktischer Zucker für etwas, was man logische Operation nennen könnte (was auch immer das genau heißen mag bei dir).<br />
Zeilen 9-11: Undefiniertes Verhalten.<br />
Zeilen 12, 17 und 21 fallen wahrscheinlich unter die Definition einer logischen Operation.</p>
<p>Insgesamt finde ich deine Lösungsidee nicht gut. Sowohl verwendest du lauter Dinge, die man als logische Operation bezeichnen würde; verbrauchst ungeheuer viel Rechenzeit für solch eine simple Operation; und du bist in der Eingabemenge auf einen kleinen, vorgegebenen Zahlenbereich beschränkt.</p>
<p>Wenn du genauer erläuterst, was erlaubt ist und was nicht, kann man dir sicherlich was besseres vorschlagen. Allgemein kann man jedenfalls das Minimum/Maximum zweier Zahlen durch ein paar clevere Rechenoperationen finden. Die Erweiterung auf das Sortieren dreier Zahlen ist dann simpel und vermutlich eher der Lösungsweg, den euer Lehrer sehen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452253</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 01 May 2015 22:19:28 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 10:30:06 GMT]]></title><description><![CDATA[<p>Danke das = ist natürlich Blödsinn.<br />
Aber du hast natürlich recht auch in der for Schleife werden logische Op. angewendet. Das kann dann wohl nicht richtig sein.</p>
<p>In der Angabe ist leider nicht genau definiert was unter log. Op. zu verstehen ist und was nicht. Könnte mir schon vorstellen, dass if(a) als &quot;Trick&quot; gemeint ist.</p>
<p>Gehen wir einmal davon aus, dass wirklich keine log. Op. erlaubt sind - über Rechenoperationen wäre ohnedies um einiges eleganter.<br />
Bei Überlegungen wie das funktionieren könnte, dachte ich an etwa sowas</p>
<pre><code>int a,b;
cin&gt;&gt;a&gt;&gt;b;
cout&lt;&lt;a*int(b/a)/int(b/a)&lt;&lt;b&lt;&lt;a*int(a/b)/int(a/b)&lt;&lt;endl;
</code></pre>
<p>Dadurch wäre ein Mechanismus vorhanden, der falls der eine Wert größer ist eine Null erzeugt int(b/a), im anderen Fall würde der Wert unverändert bleiben. Offensichtliches Problem ist natürlich, dass wir im ersten Fall noch durch Null dividieren müssen. Mir fällt keine Mechanismus ein wie man das umgehen könnte.</p>
<p>Hast du oder jemand anders eine Idee wie solche &quot;cleveren Rechenoperationen&quot; aussehen könnten?</p>
<p>mfg CS</p>
<p>btw. warum ist 9-11 undefiniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452339</guid><dc:creator><![CDATA[Chromo sapiens]]></dc:creator><pubDate>Sun, 03 May 2015 10:30:06 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 12:35:48 GMT]]></title><description><![CDATA[<p>Erstmal in Zeile 12, 17 und 22 willst du wahrscheinlich kein Semicolon hinter dem if.</p>
<p>Und Ausdrücke wie</p>
<pre><code>a = a++;
</code></pre>
<p>sind deswegen undefiniert, weil a zwar inkrementiert wird, jedoch das Ergebnis vorher ausgewertet wird. Und nun weist du das alte Ergebnis der Variable selbst wieder zu, obwohl diese schon angefasst wurde.<br />
Was soll passieren? Soll a den Wert von a (also den alten) haben? Oder den Wert a+1 (also den neuen)?</p>
<p>Und undefiniert heisst hier in der Praxis bei dir, jeder Compiler könnte ein adneres Ergebnis ausspucken dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452346</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 03 May 2015 12:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 13:26:28 GMT]]></title><description><![CDATA[<blockquote>
<p>Und undefiniert heisst hier in der Praxis bei dir, jeder Compiler könnte ein adneres Ergebnis ausspucken dafür.</p>
</blockquote>
<p>Psst, gleich kommt SeppJ und erzählt dir etwas über Pizzas oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452349</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 03 May 2015 13:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 13:38:42 GMT]]></title><description><![CDATA[<p>Danke, ok eine Zuweisung eines Postdekrements an sich selbst ergibt wirklich keinen Sinn. Also ist</p>
<pre><code>x=x--;
</code></pre>
<p>nicht äquvialent zu</p>
<pre><code>x--;
</code></pre>
<p>, sondern unterschiedliche Compiler verarbeiten diesen Befehl unterschiedlich?</p>
<p>Die Semikolons nach dem if stören nicht (bzw. sind ja nötig oder?). Ich will im Fall, dass die bedingung erfüllt ist ja, dass genau nichts passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452350</guid><dc:creator><![CDATA[Chromo sapiens]]></dc:creator><pubDate>Sun, 03 May 2015 13:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 13:48:34 GMT]]></title><description><![CDATA[<blockquote>
<p>Danke, ok eine Zuweisung eines Postdekrements an sich selbst ergibt wirklich keinen Sinn.</p>
</blockquote>
<p>Das zu akzeptieren ist der erste Schritt. <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>
<blockquote>
<p>sondern unterschiedliche Compiler verarbeiten diesen Befehl unterschiedlich?</p>
</blockquote>
<p>Sie dürfen, können, und tuns.</p>
<blockquote>
<p>Die Semikolons nach dem if stören nicht (bzw. sind ja nötig oder?).</p>
</blockquote>
<p>Warum denn nicht statt</p>
<pre><code>if(z);
        else{
            cout&lt;&lt;c;
            z=999;
        }
</code></pre>
<p>einfach</p>
<pre><code>if(!z) {
            cout&lt;&lt;c;
            z=999;
        }
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452352</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 03 May 2015 13:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 14:08:52 GMT]]></title><description><![CDATA[<p>Interessante Idee, so ganz ohne logische Operatoren. Für 32 Bit lange <strong>unsigned</strong> Integer, deren Werte voneinander <strong>verschieden</strong> und <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mo>≤</mo><msup><mn>2</mn><mrow><mn>3</mn><mn>1</mn></mrow></msup><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\le 2^{31}-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.8141079999999999em;"></span><span class="strut bottom" style="height:0.950078em;vertical-align:-0.13597em;"></span><span class="base textstyle uncramped"><span class="mrel">≤</span><span class="mord"><span class="mord mathrm">2</span><span class="vlist"><span style="top:-0.363em;margin-right:0.05em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle uncramped"><span class="mord scriptstyle uncramped"><span class="mord mathrm">3</span><span class="mord mathrm">1</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mbin">−</span><span class="mord mathrm">1</span></span></span></span> sind, ist mir auf die Schnelle sowas hier eingefallen:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdint&gt;

int main()
{
    using namespace std;
    std::uint32_t a, b, c;
    cout &lt;&lt; &quot;Gib drei verschiedene Zahlen zw. 0 und &quot; &lt;&lt; (std::numeric_limits&lt;std::uint32_t&gt;::max() &gt;&gt; 1) &lt;&lt; &quot; ein&quot; &lt;&lt; endl;
    cin &gt;&gt; a &gt;&gt; b &gt;&gt; c;

    std::uint32_t sortiert[3];

    sortiert[((b - a) &gt;&gt; 31) + ((c - a) &gt;&gt; 31)] = a;
    sortiert[((a - b) &gt;&gt; 31) + ((c - b) &gt;&gt; 31)] = b;
    sortiert[((a - c) &gt;&gt; 31) + ((b - c) &gt;&gt; 31)] = c;

    std::cout &lt;&lt; sortiert[0] &lt;&lt; &quot;, &quot; &lt;&lt; sortiert[1] &lt;&lt; &quot;, &quot; &lt;&lt; sortiert[2] &lt;&lt; std::endl;
}
</code></pre>
<p>Müsste den Job erledigen, wenn ich nicht einen groben Denkfehler (oder UB) drin habe :D. Kann mann sicher leicht mit Divide&amp;Conquer-Strategie in einen <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>O</mi><mo>(</mo><mi>n</mi><mi>log</mi><mi>n</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord mathit">n</span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mord mathit">n</span><span class="mclose">)</span></span></span></span>-Sortieralgorithmus für beliebig lange Arrays umwandeln, dafür fehlt mir aber grad die Muße.</p>
<p>Gruss,<br />
Finnegan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452354</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sun, 03 May 2015 14:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 14:00:09 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Warum denn nicht ...</p>
<pre><code>if(!z) {
</code></pre>
</blockquote>
<p>! ist das <strong>logische</strong> Nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452356</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Sun, 03 May 2015 14:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 14:03:26 GMT]]></title><description><![CDATA[<p>Wenn man ganz auf logische Operatoren, if sowie ?: verzichten möchte, könnte man folgendes machen:</p>
<p>Die eingegeben Zahlen sind größer gleich 0 und kleiner als N_MAX.</p>
<pre><code>const int N_MAX = 1000;

int greaterThan(int x, int y) {
    return (x + N_MAX) / (y + N_MAX); // + N_MAX sorgt dafür, dass nur 0 oder 1 rauskommt
}

int min(int a, int b) {
    return a * greaterThan(b,a) + b * greaterThan(a,b); // wir nehmen an, dass a != b
}

int max(int a, int b) {
    return a * greaterThan(a,b) + b * greaterThan(b,a);
}

int min(int a, int b, int c) {
    return min(min(a,b), c);
}

int max(int a, int b, int c) {
    return max(max(a,b), c);
}

int mid(int a, int b, int c) {
    return max(min(a,b), min(a,c), min(b,c)); // gibt den mittleren Wert zurück
}
</code></pre>
<p>Alles ungetestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452357</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Sun, 03 May 2015 14:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 15:15:37 GMT]]></title><description><![CDATA[<p>Das sieht sehr gut aus Ramanujan! Der Trick mit</p>
<pre><code>+ N_MAX
</code></pre>
<p>um keine größeren Werte als 1 zu bekommen ist genau das was ich gesucht habe.<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452363</guid><dc:creator><![CDATA[Chromo sapiens]]></dc:creator><pubDate>Sun, 03 May 2015 15:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to 3 Zahlen Sortieren ohne logische Operatoren on Sun, 03 May 2015 15:27:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28594">@Ramanujan</a><br />
Deine <code>greaterThan</code> Funktion macht in Wirklichkeit &quot;greater or equal&quot;.</p>
<p>Und die Annahme &quot;a != b&quot; ist eigentlich auch unnötig:</p>
<pre><code class="language-cpp">const int N_MAX = 1000;

int greater(int x, int y) {
    return (x + N_MAX) / (y + N_MAX + 1);
}

int greaterOrEqual(int x, int y) {
    return (x + N_MAX) / (y + N_MAX);
}

int max(int a, int b) {
    return a * greater(a, b) + b * greaterOrEqual(b, a);
}

//...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2452366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452366</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 03 May 2015 15:27:33 GMT</pubDate></item></channel></rss>