<?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[C++ Übung aus Buch]]></title><description><![CDATA[<p>Hallo, in einem Buch für C++ Anfänger steht folgende Aufgabe:</p>
<blockquote>
<p>Schreiben Sie die Funktion namens <em>sign</em>, der Sie einen int-Wert übergeben und die Folgendes zurückliefert: -1, wenn der Wert negativ ist, 0, wenn der Wert null ist, und 1, wenn der Wert positiv ist.</p>
<p>Schreiben Sie dazu auch eine <em>main</em>-Funktion, mit der Sie <em>sign</em> testen können, und die das Ergebnis mit einer entsprechenden Textausgabe quittiert.</p>
</blockquote>
<p>Nun habe ich die Aufgabe wie folgt gelöst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int sign(int a)
{
		if(a&gt;0)
			return(1);
		if(a==0)
			return(0);
		if(a&lt;0)
			return(-1);
}

int main(void)
{
int x;

	cout &lt;&lt; &quot;Bitte geben Sie eine Zahl ein: &quot; &lt;&lt; endl;
	cin &gt;&gt; x;
	if(sign(x)==1)
		cout &lt;&lt; &quot;Die Zahl ist positiv.&quot; &lt;&lt; endl;
	if(sign(x)==0)
		cout &lt;&lt; &quot;Die Zahl ist gleich Null.&quot; &lt;&lt; endl;
	if(sign(x)==-1)
		cout &lt;&lt; &quot;Die Zahl ist negativ.&quot; &lt;&lt; endl;
}
</code></pre>
<p>Danach kommt folgende Aufgabe:</p>
<blockquote>
<p>Schreiben Sie die Funktion <em>sign</em> aus der vorherigen Übung so um, dass weder <em>if</em>-Anweisungen noch ?:-Operatoren verwendet werden.</p>
</blockquote>
<p>Im Buch wird folgende Lösung genannt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int sign(int x)

{

int a;

  a=2*(x&gt;0);
  a-=1;
  a*=!(x==0);
  return(a);
}

int main()

{
  int a,erg;
  cout &lt;&lt; &quot;Wert :&quot;;
  cin &gt;&gt; a;

  erg=sign(a);

  if(erg==1)
    cout &lt;&lt; &quot;Der Wert ist positiv.&quot; &lt;&lt; endl;
  if(erg==0)
    cout &lt;&lt; &quot;Der Wert ist Null.&quot; &lt;&lt; endl;
  if(erg==-1)
    cout &lt;&lt; &quot;Der Wert ist negativ.&quot; &lt;&lt; endl;

  return(0);
}
</code></pre>
<p>Ich verstehe die Lösung nicht, und sie wird im Buch auch nicht weiter erklärt. Was genau machen diese paar Zeilen:</p>
<pre><code class="language-cpp">a=2*(x&gt;0);
  a-=1;
  a*=!(x==0);
</code></pre>
<p>Wäre nett wenn Ihr meine Frage beantworten könntet, vielen Dank.</p>
<p>Gruß,<br />
Cherry64</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264857/c-übung-aus-buch</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 21:02:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264857.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Apr 2010 20:55:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Übung aus Buch on Tue, 13 Apr 2010 20:55:13 GMT]]></title><description><![CDATA[<p>Hallo, in einem Buch für C++ Anfänger steht folgende Aufgabe:</p>
<blockquote>
<p>Schreiben Sie die Funktion namens <em>sign</em>, der Sie einen int-Wert übergeben und die Folgendes zurückliefert: -1, wenn der Wert negativ ist, 0, wenn der Wert null ist, und 1, wenn der Wert positiv ist.</p>
<p>Schreiben Sie dazu auch eine <em>main</em>-Funktion, mit der Sie <em>sign</em> testen können, und die das Ergebnis mit einer entsprechenden Textausgabe quittiert.</p>
</blockquote>
<p>Nun habe ich die Aufgabe wie folgt gelöst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int sign(int a)
{
		if(a&gt;0)
			return(1);
		if(a==0)
			return(0);
		if(a&lt;0)
			return(-1);
}

int main(void)
{
int x;

	cout &lt;&lt; &quot;Bitte geben Sie eine Zahl ein: &quot; &lt;&lt; endl;
	cin &gt;&gt; x;
	if(sign(x)==1)
		cout &lt;&lt; &quot;Die Zahl ist positiv.&quot; &lt;&lt; endl;
	if(sign(x)==0)
		cout &lt;&lt; &quot;Die Zahl ist gleich Null.&quot; &lt;&lt; endl;
	if(sign(x)==-1)
		cout &lt;&lt; &quot;Die Zahl ist negativ.&quot; &lt;&lt; endl;
}
</code></pre>
<p>Danach kommt folgende Aufgabe:</p>
<blockquote>
<p>Schreiben Sie die Funktion <em>sign</em> aus der vorherigen Übung so um, dass weder <em>if</em>-Anweisungen noch ?:-Operatoren verwendet werden.</p>
</blockquote>
<p>Im Buch wird folgende Lösung genannt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int sign(int x)

{

int a;

  a=2*(x&gt;0);
  a-=1;
  a*=!(x==0);
  return(a);
}

int main()

{
  int a,erg;
  cout &lt;&lt; &quot;Wert :&quot;;
  cin &gt;&gt; a;

  erg=sign(a);

  if(erg==1)
    cout &lt;&lt; &quot;Der Wert ist positiv.&quot; &lt;&lt; endl;
  if(erg==0)
    cout &lt;&lt; &quot;Der Wert ist Null.&quot; &lt;&lt; endl;
  if(erg==-1)
    cout &lt;&lt; &quot;Der Wert ist negativ.&quot; &lt;&lt; endl;

  return(0);
}
</code></pre>
<p>Ich verstehe die Lösung nicht, und sie wird im Buch auch nicht weiter erklärt. Was genau machen diese paar Zeilen:</p>
<pre><code class="language-cpp">a=2*(x&gt;0);
  a-=1;
  a*=!(x==0);
</code></pre>
<p>Wäre nett wenn Ihr meine Frage beantworten könntet, vielen Dank.</p>
<p>Gruß,<br />
Cherry64</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882392</guid><dc:creator><![CDATA[Cherry64]]></dc:creator><pubDate>Tue, 13 Apr 2010 20:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Tue, 13 Apr 2010 21:10:49 GMT]]></title><description><![CDATA[<p>Am besten probierst du das einfach mal mit 3 Zahlen aus und rechnest nach, dann siehst du, wie das funktioniert.</p>
<p>sagen wir x ist 2:</p>
<pre><code>a=2*(x&gt;0); // x&gt;0 ist wahr, also wird da a 2 * 1, als 2 zugewiesen
a-=1; // 2-1 = 1
a*=!(x==0); (1)
</code></pre>
<p>(1) x ist nicht gleich 0, also ist (x==0) falsch, also 0, aber !0 ist 1. Und jetzt wird a, also 1 mit 1 multipliziert und ergibt dann am Ende 1.</p>
<p>sei x = -2:</p>
<pre><code>a=2*(x&gt;0); // x&gt;0 ist falsch, also 0. 2*0 gibt 0
a-=1; // 0 -1 gibt -1
a*=!(x==0); (1)
</code></pre>
<p>(1) x ist nicht gleich 0, also wieder !0 = 1. Und somit wird -1 mit 1 multipliziert und ergibt auch wieder -1.</p>
<p>Und wenn x = 0 ist, überlasse ich jetzt mal dir, zum nachvollziehen. <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>Ist das jetzt klarer geworden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882404</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 13 Apr 2010 21:10:49 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Tue, 13 Apr 2010 21:22:10 GMT]]></title><description><![CDATA[<p>Hallo, Ich versuche auch mal, das zu erklären.</p>
<p>erst einmal die Erklärung zu dieser Zeile: a=2*(x&gt;0);</p>
<p>Der Wert in den Klammern ist ein boolscher Ausdruck welcher entweder true oder false ergibt. Da hier allerdings mit Zahlen gearbeitet werden muss, wandelt der Compiler true zu 1 um und false zu 0.<br />
sollte x also größer als 0 sein, wird a ein wert von 2 zugewiesen, andernfalls ist a 0.</p>
<p>Nun diese Zeile: a-=1;</p>
<p>Diese Zeile bedarf egentlich keiner Erklärung. Hier wird a um 1 erniedrigt.<br />
Sollte x größer als 0 sein, is a in diesem Moment 1. Andernfalls ist a zu diesem Zeitpunkt -1.</p>
<p>Die letzte Zeile: a*=!(x==0);</p>
<p>Sollte x gleich 0 sein, ergibt der Ausdruck in der Klammer true. Da der Operator ! vor der Klammer steht, wird true zu false (=0). mit diesem Wert wird a multipliziert. a wird also 0. Sollte x ungleich 0 sein, wird die klammer false, !(x==0) ergibt true und der Wert von a bleibt unangetastet.</p>
<p>Alles klar?</p>
<p>Was mich jetzt noch interessiert: In welchem Anfängerbuch steht denn sowas?<br />
Und dann noch ohne Erklärung?</p>
<p>MfG, Jochen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882411</guid><dc:creator><![CDATA[Jochen S.]]></dc:creator><pubDate>Tue, 13 Apr 2010 21:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Tue, 13 Apr 2010 21:33:44 GMT]]></title><description><![CDATA[<p>Ich schlag mal eine Alternative vor.</p>
<pre><code class="language-cpp">return (a&gt;0)-(a&lt;0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1882415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882415</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 13 Apr 2010 21:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Tue, 13 Apr 2010 21:49:10 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Ich schlag mal eine Alternative vor.</p>
<pre><code class="language-cpp">return (a&gt;0)-(a&lt;0);
</code></pre>
</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="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Wollt mir auch noch was kürzere überlegen, aber musste einem Kollegen bei seinem Splay Tree helfen. <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/1882423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882423</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 13 Apr 2010 21:49:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Wed, 14 Apr 2010 15:15:58 GMT]]></title><description><![CDATA[<p>Danke an alle, ich habe die Lösung jetzt verstanden. Wusste vorher nicht, dass z.B. bei x&gt;0 automatisch 1 oder 0 ausgegeben wird; übrigens, ist dies nicht doch eine Art von Bedingung?</p>
<p>Jochen S. schrieb:</p>
<blockquote>
<p>Was mich jetzt noch interessiert: In welchem Anfängerbuch steht denn sowas?<br />
Und dann noch ohne Erklärung?</p>
</blockquote>
<p>C++ Programmierung lernen aus dem Addison-Wesley-Verlag. ISBN 978-3-8273-2674-4.</p>
<p>Gruß,<br />
Cherry64</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882860</guid><dc:creator><![CDATA[Cherry64]]></dc:creator><pubDate>Wed, 14 Apr 2010 15:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Wed, 14 Apr 2010 15:19:26 GMT]]></title><description><![CDATA[<p>Das ist doch beknackt. Die Lösung soll den ?:-Operator benutzen, aber die Musterlösung benutzt diesen Operator überhaupt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882864</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Wed, 14 Apr 2010 15:19:26 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Wed, 14 Apr 2010 15:22:55 GMT]]></title><description><![CDATA[<p>?!</p>
<blockquote>
<p>dass <strong>weder</strong> if-Anweisungen noch ?:-Operatoren verwendet werden.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1882873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882873</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Wed, 14 Apr 2010 15:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Wed, 14 Apr 2010 15:26:52 GMT]]></title><description><![CDATA[<p>Hups. Lesen bildet. <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/1882877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882877</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Wed, 14 Apr 2010 15:26:52 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Übung aus Buch on Wed, 14 Apr 2010 19:10:38 GMT]]></title><description><![CDATA[<p>Cherry64 schrieb:</p>
<blockquote>
<p>Danke an alle, ich habe die Lösung jetzt verstanden. Wusste vorher nicht, dass z.B. bei x&gt;0 automatisch 1 oder 0 ausgegeben wird; übrigens, ist dies nicht doch eine Art von Bedingung?</p>
</blockquote>
<p>Nein, nicht direkt. Das ist lediglich ein Ausdruck, welcher ausgewertet wird, welcher wahr oder falsch sein kann. Und da du da einen int hast, wird true zu 1 und false zu 0 ohne cast umgewandelt.<br />
Umgekehrt wird 0 zu false und alles andere zu true umgewandelt. Du kannst also auch das hier machen:</p>
<pre><code class="language-cpp">int i = 2;
if ( i ) .. // i wird hier zu true ausgewertet
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1883004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1883004</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 14 Apr 2010 19:10:38 GMT</pubDate></item></channel></rss>