<?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[Variable aus if-Abfrage weiter verwenden?]]></title><description><![CDATA[<p>Ich versuche, die kleinste positive Zahl aus einer Funktionsausgabe in Form eines Arrays &quot;rx&quot; zu finden und in weiteren Rechenschritten zu benutzen. Dazu möchte ich eine if-Abfrage in der Form</p>
<pre><code class="language-cpp">double sol;
   	if (rx[0] &gt; 0.0 &amp;&amp;
   	    rx[0] &lt; rx[1] &amp;&amp;
            rx[0] &lt; rx[2] ) 
             sol = 0;

   	else if (rx[1] &gt; 0.0 &amp;&amp;
   		rx[1] &lt; rx[0] &amp;&amp;
            	rx[1] &lt; rx[2] ) 
            	sol = 1;

   	else if (rx[2] &gt; 0.0 &amp;&amp;
   		rx[2] &lt; rx[1] &amp;&amp;
          	rx[2] &lt; rx[0] ) 
          	sol = 2;

// Rechenschritte, die rx[sol] benutzen sollen
</code></pre>
<p>benutzen. Den Fehler habe ich (so glaube ich) schon selbst erkannt, nämlich dass die Variable &quot;sol&quot; mit Ende der if-Abfrage ihren scope verliert und daher in den folgenden Rechenschritten wieder mit dem Ursprungswert aus der Definition</p>
<pre><code class="language-cpp">double sol;
</code></pre>
<p>benutzt wird. Dabei handelt es sich offenbar um Null.<br />
Meine Frage ist, wie ich das Ergebnis aus der if-Abfrage in weiteren Rechenschritten benutzen kann. Über weitere Tipps zu if-Abfragen wäre ich ebenfalls dankbar.</p>
<p>Vielen Dank im voraus!</p>
<p>Mit freundlichen Grüßen</p>
<p>justusjonas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305995/variable-aus-if-abfrage-weiter-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 12:07:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305995.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Jul 2012 14:32:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sat, 14 Jul 2012 14:32:27 GMT]]></title><description><![CDATA[<p>Ich versuche, die kleinste positive Zahl aus einer Funktionsausgabe in Form eines Arrays &quot;rx&quot; zu finden und in weiteren Rechenschritten zu benutzen. Dazu möchte ich eine if-Abfrage in der Form</p>
<pre><code class="language-cpp">double sol;
   	if (rx[0] &gt; 0.0 &amp;&amp;
   	    rx[0] &lt; rx[1] &amp;&amp;
            rx[0] &lt; rx[2] ) 
             sol = 0;

   	else if (rx[1] &gt; 0.0 &amp;&amp;
   		rx[1] &lt; rx[0] &amp;&amp;
            	rx[1] &lt; rx[2] ) 
            	sol = 1;

   	else if (rx[2] &gt; 0.0 &amp;&amp;
   		rx[2] &lt; rx[1] &amp;&amp;
          	rx[2] &lt; rx[0] ) 
          	sol = 2;

// Rechenschritte, die rx[sol] benutzen sollen
</code></pre>
<p>benutzen. Den Fehler habe ich (so glaube ich) schon selbst erkannt, nämlich dass die Variable &quot;sol&quot; mit Ende der if-Abfrage ihren scope verliert und daher in den folgenden Rechenschritten wieder mit dem Ursprungswert aus der Definition</p>
<pre><code class="language-cpp">double sol;
</code></pre>
<p>benutzt wird. Dabei handelt es sich offenbar um Null.<br />
Meine Frage ist, wie ich das Ergebnis aus der if-Abfrage in weiteren Rechenschritten benutzen kann. Über weitere Tipps zu if-Abfragen wäre ich ebenfalls dankbar.</p>
<p>Vielen Dank im voraus!</p>
<p>Mit freundlichen Grüßen</p>
<p>justusjonas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232745</guid><dc:creator><![CDATA[justusjonas]]></dc:creator><pubDate>Sat, 14 Jul 2012 14:32:27 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sat, 14 Jul 2012 14:42:05 GMT]]></title><description><![CDATA[<p>benutze <code>unsigned</code> statt <code>double</code> . es ist kein scope-problem, das sollte so funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232750</guid><dc:creator><![CDATA[ganszahl]]></dc:creator><pubDate>Sat, 14 Jul 2012 14:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sat, 14 Jul 2012 15:41:55 GMT]]></title><description><![CDATA[<p>es kann natürlich sein, dass keine bedingung zutrifft. dann ist der inhalt von sol undefiniert. null (wie nulltpr) kann er jedenfalls nicht sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232767</guid><dc:creator><![CDATA[ganszahl]]></dc:creator><pubDate>Sat, 14 Jul 2012 15:41:55 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sat, 14 Jul 2012 17:48:29 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten. Ich habe &quot;double&quot; in &quot;unsigned&quot; geändert, erhalte damit allerdings beim Ausführen des Programms einen Wert von 134519369 für sol und danach stürzt es ab mit der Fehlermeldung &quot;Segmentation fault (core dumped)&quot;.</p>
<p>Ich habe weiterhin folgendes versucht:</p>
<pre><code class="language-cpp">unsigned sol = 3;
   	if (rx[0] &gt; 0.0 &amp;&amp;
   	    rx[0] &lt; rx[1] &amp;&amp;
            rx[0] &lt; rx[2] ) 
             sol = 0;

   	else if (rx[1] &gt; 0.0 &amp;&amp;
   		rx[1] &lt; rx[0] &amp;&amp;
            	rx[1] &lt; rx[2] ) 
            	sol = 1;

   	else if (rx[2] &gt; 0.0 &amp;&amp;
   		rx[2] &lt; rx[1] &amp;&amp;
          	rx[2] &lt; rx[0] ) 
          	sol = 2;

   cout &lt;&lt; &quot;rx[0]= &quot; &lt;&lt; rx[0] &lt;&lt; endl;
   cout &lt;&lt; &quot;rx[1]= &quot; &lt;&lt; rx[1] &lt;&lt; endl;
   cout &lt;&lt; &quot;rx[2]= &quot; &lt;&lt; rx[2] &lt;&lt; endl;
   cout &lt;&lt; &quot;sol= &quot; &lt;&lt; sol &lt;&lt; endl;
</code></pre>
<p>Damit erhalte ich für rx sinnvolle Werte und das Programm stürzt auch nicht ab (z.B. rx[0] = -3.14407 ; rx[1]= -1.06378 und rx[2] = 15.3603) ; die sol-Abfrage ergibt allerdings wieder 3! Wenn ich das im C++-Tutorial richtig verstanden habe, müsste der Wert von &quot;sol&quot; doch überschrieben werden, wenn in der Abfrage z.B. &quot;sol = 1&quot; gesetzt wird. Meine Abfragen habe ich auch noch einmal überprüft, ich denke nicht, dass der Fehler hier zu suchen ist, da im o.g. Beispiel 15.3603 die Bedingungen erfüllt.<br />
Könnte es evtl. funktionieren, dass ich meine &quot;sol&quot;-Variable als return-value der if-Abfrage ausgeben lassen? Habe mal ein return vor die sol = ... - Definition gesetzt, das hat das Problem leider nicht beheben können. Aber da gibt es bestimmt einen eleganten Lösungsweg für ...</p>
<p>Ich danke nochmals für die schnelle Hilfe und würde mich über weitere Vorschläge sehr freuen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232814</guid><dc:creator><![CDATA[justusjonas]]></dc:creator><pubDate>Sat, 14 Jul 2012 17:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sat, 14 Jul 2012 18:10:01 GMT]]></title><description><![CDATA[<p>Zeig doch mal die ganze Funktion (im Zusammenhang) und nicht nur zusammengefrickelte Zeilen.</p>
<p>Das letzte</p>
<pre><code class="language-cpp">else if
</code></pre>
<p>sollte außerdem ein</p>
<pre><code class="language-cpp">else
</code></pre>
<p>sein. Falls du das so willst.</p>
<p>Was ohne abschließenden else-Zweig passiert kann ich nur raten.<br />
Wahrscheinlich die Verwendung deiner uninitialisierten Variablen sol.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232823</guid><dc:creator><![CDATA[EOP]]></dc:creator><pubDate>Sat, 14 Jul 2012 18:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sat, 14 Jul 2012 21:49:32 GMT]]></title><description><![CDATA[<p>&amp;&amp; bedeutet und, d.h. keine deiner Bedingungen wird erfüllt! Suchst du oder (||)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232860</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 14 Jul 2012 21:49:32 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sat, 14 Jul 2012 23:35:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if (rx[0] &gt; 0.0 &amp;&amp; 
           rx[0] &lt; rx[1] &amp;&amp; 
            rx[0] &lt; rx[2] ) 
             sol = 0; 

       else if (rx[1] &gt; 0.0 &amp;&amp; 
           rx[1] &lt; rx[0] &amp;&amp; 
                rx[1] &lt; rx[2] ) 
                sol = 1; 

       else if (rx[2] &gt; 0.0 &amp;&amp; 
           rx[2] &lt; rx[1] &amp;&amp; 
              rx[2] &lt; rx[0] ) 
              sol = 2;
</code></pre>
<p>Was zum Teufel-?<br />
Und du bist dir ganz sicher, dass man das nicht eleganter mit Schleifen lösen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232872</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 14 Jul 2012 23:35:10 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sun, 15 Jul 2012 01:40:54 GMT]]></title><description><![CDATA[<p>Ich nehme an rx ist ein c-Array, sollte man in c++ nicht benutzen, dafür ist der std::vector einfach zu nützlich.</p>
<pre><code class="language-cpp">//c mit cout Lösung
#include &lt;iostream&gt;
using namespace std;

int main() {
	double rx[3];
	unsigned sol = 0;

	rx[0] = 1.1;
	rx[1] = -6;
	rx[2] = 1.7;

	bool firstNumberFound=false;
	for(unsigned i=0; i&lt;3; ++i) {	//Gehe alle 3 Werte durch
		if(rx[i] &gt; 0.0) {			//Zahl soll Positiv sein
			if(!firstNumberFound) {  //Ersten Index einer positiven Zahl merken
				firstNumberFound=true;
				sol=i;
			}

			if(rx[i] &lt; rx[sol]) {	//Ist die Zahl kleiner als die bekannteste kleinste?
				sol = i;			 //Index Merken
			}
		}
	}

   cout &lt;&lt; &quot;rx[0]= &quot; &lt;&lt; rx[0] &lt;&lt; endl;
   cout &lt;&lt; &quot;rx[1]= &quot; &lt;&lt; rx[1] &lt;&lt; endl;
   cout &lt;&lt; &quot;rx[2]= &quot; &lt;&lt; rx[2] &lt;&lt; endl;
   cout &lt;&lt; &quot;sol= &quot; &lt;&lt; sol &lt;&lt; endl;
}
</code></pre>
<p>Dann das Ganze in c++, wenn man nur die Zahl haben möchte(die Eingangsdaten werden manipuliert durch remove_if).</p>
<pre><code class="language-cpp">//c++ Lösung
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

bool isNegative(double i) {
	return i&lt;0.;
}

double findPositiveSmallest(vector&lt;double&gt;&amp; Vector) {
	vector&lt;double&gt;::iterator newEnd = remove_if(Vector.begin(), Vector.end(), isNegative);	//Entferne alle nicht-Positiven zahlen
	//remove_if(Vector.begin(), Vector.end(), [](int i) {return i&lt;0.;});	//Alternative mit Lambda, isNegativ braucht dann nicht definiert werden
	return *min_element(Vector.begin(), newEnd);		//Gibt die kleinste Zahl zurück
}

int main() {
	vector&lt;double&gt; Test;	//Ersatz für dein rx[3]
	Test.push_back(-1.1);
	Test.push_back(7.);
	Test.push_back(0.1);

	cout&lt;&lt;findPositiveSmallest(Test);
}
</code></pre>
<p>Den Fall, dass alle Zahlen negativ sind muss man noch hinzufügen. Hoffe, da ist nichts Falsches drin, ist schon spät, Licht aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232879</guid><dc:creator><![CDATA[JaykopX]]></dc:creator><pubDate>Sun, 15 Jul 2012 01:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sun, 15 Jul 2012 02:10:59 GMT]]></title><description><![CDATA[<p>JaykopX schrieb:</p>
<blockquote>
<p>Dann das Ganze in c++, wenn man nur die Zahl haben möchte(die Eingangsdaten werden manipuliert durch remove_if).</p>
</blockquote>
<p>remove_if ist nicht erforderlich, man kann ja auch min_element mit einem geeigneten Komparator versehen, z.B.</p>
<pre><code class="language-cpp">min_element(first, last, [](double a, double b){ return a &gt; 0 ? b &lt;= 0 || a &lt; b : b &lt;= 0 &amp;&amp; a &gt; b; });
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2232881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232881</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 15 Jul 2012 02:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sun, 15 Jul 2012 09:36:48 GMT]]></title><description><![CDATA[<p>Ich habe jetzt gesehen und sogar verstanden, was an meiner Abfrage falsch ist. Die Lösungsvorschläge funktionieren hervorragend, ich werde mir noch anlesen müssen, was genau die einzelnen Elemente daraus bedeuten und wie sie verwendet werden. Ist aber auch das erste kleine Programm, das ich ohne Anleitung versucht habe ...<br />
Wenn ich es fertig und funktionsfähig habe und meine Lösung in mehr als nur zwei Buchstaben von der von JaykopX vorgeschlagenen differiert, werde ich sie noch posten.</p>
<p>Ganz vielen herzlichen Dank für eure Antworten!</p>
<p>Viele Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232899</guid><dc:creator><![CDATA[justusjonas]]></dc:creator><pubDate>Sun, 15 Jul 2012 09:36:48 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sun, 15 Jul 2012 11:32:35 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>JaykopX schrieb:</p>
<blockquote>
<p>Dann das Ganze in c++, wenn man nur die Zahl haben möchte(die Eingangsdaten werden manipuliert durch remove_if).</p>
</blockquote>
<p>remove_if ist nicht erforderlich, man kann ja auch min_element mit einem geeigneten Komparator versehen, z.B.</p>
<pre><code class="language-cpp">min_element(first, last, [](double a, double b){ return a &gt; 0 ? b &lt;= 0 || a &lt; b : b &lt;= 0 &amp;&amp; a &gt; b; });
</code></pre>
</blockquote>
<p>Stimmt, aber ist hier</p>
<pre><code class="language-cpp">b &lt;= 0 &amp;&amp; a &gt; b
</code></pre>
<p>nicht überflüssig? Könnte doch so aussehen:</p>
<pre><code class="language-cpp">min_element(first, last, [](double a, double b){ return a &gt; 0 ? b &lt;= 0 || a &lt; b : false; });
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2232922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232922</guid><dc:creator><![CDATA[JaykopX]]></dc:creator><pubDate>Sun, 15 Jul 2012 11:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Variable aus if-Abfrage weiter verwenden? on Sun, 15 Jul 2012 14:46:59 GMT]]></title><description><![CDATA[<p>JaykopX schrieb:</p>
<blockquote>
<p>Stimmt, aber ist hier</p>
<pre><code class="language-cpp">b &lt;= 0 &amp;&amp; a &gt; b
</code></pre>
<p>nicht überflüssig? Könnte doch so aussehen:</p>
<pre><code class="language-cpp">min_element(first, last, [](double a, double b){ return a &gt; 0 ? b &lt;= 0 || a &lt; b : false; });
</code></pre>
</blockquote>
<p>Dann wird nicht das am nächsten an 0 liegende Element, sondern immer das erste der Sequenz zurückgegeben, falls kein ELement postiv ist. Da der OP nicht auf diesen Fall eingegangen ist, habe ich einfach etwas genommen, was mir gerade in den SInn kam.<br />
Deine Version würde ich allerdings eher als</p>
<pre><code class="language-cpp">a &gt; 0 &amp;&amp; ( a &lt; b || b &lt;= 0 )
</code></pre>
<p>schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2232960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2232960</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 15 Jul 2012 14:46:59 GMT</pubDate></item></channel></rss>