<?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++ quad. Gleichung]]></title><description><![CDATA[<p>Hallo zusammen,<br />
nachdem ich meinen Fehler leider nicht finden kann, hoff ich mal, dass Ihr mir weiterhelfen könnt. Hab mir den Thread zum richtigen Codeposten durchgelesen und werds hoffentlich verständlich hinkriegen <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="😉"
    /><br />
Nun zum eigentlichem Problem.<br />
Steck noch relativ in den Kinderschuhen vom C++ Programmieren. Bei der Aufgabe gehts um die Lösung einer quad. Gleichung. Das Programm funktioniert fast wie gewünscht, nur gibt es bei gewissen Eingaben Probleme. Aber zuerst mal zum Programm selbst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cmath&gt;

using namespace std;

int main ()
{

    float a, b, c, x, erg1, erg2, diskr, imag1, imag2;

    cout &lt;&lt; &quot;Bitte Wert zur Loesung von Gleichung ax^2+bx+c=0 fuer a, b und c eingeben&quot;;
    cin &gt;&gt; a &gt;&gt; b &gt;&gt; c;

    if (a==0.0&amp;&amp;b==0.0&amp;&amp;c==0.0){
       cout &lt;&lt;&quot;Das Ergebnis ist eine wahre Aussage. Es gibt unendlich viele Loesungen&quot; &lt;&lt; endl;
}

       else if (a==0&amp;&amp;b==0&amp;&amp;c!=0){
         cout &lt;&lt;&quot;keine Loesung moeglich&quot; &lt;&lt; endl;
         }

       else if (a==0&amp;&amp;b!=0&amp;&amp;c!=0){
         x=b/c;
         cout &lt;&lt;&quot;Das Ergebnis ist eine Gerade fuer die gilt: x = &quot; &lt;&lt; x &lt;&lt; endl;
         }

    else{
         diskr=b*b-4.0*a*c;
         cout &lt;&lt;&quot;Die Diskriminante der Gleichung betraegt &quot; &lt;&lt; diskr &lt;&lt; endl;
         }

    if (diskr&gt;=0&amp;&amp;a!=0) {
                  erg1=(-b+sqrt(diskr))/(2*a);
                  erg2=(-b-sqrt(diskr))/(2*a);
                  cout &lt;&lt;&quot;Fuer x1 und x2 gilt: x1 = &quot; &lt;&lt; erg1 &lt;&lt;&quot;; x2 = &quot; &lt;&lt; erg2 &lt;&lt; endl;
                  }

    else {
         erg1= -b/(2*a);
         erg2= -b/(2*a);
         imag1= sqrt(-diskr)/(2*a);
         imag2= -sqrt(-diskr)/(2*a);
         cout &lt;&lt;&quot;Fuer x1 und x2 gilt: x1 = &quot; &lt;&lt; erg1 &lt;&lt; &quot;+&quot; &lt;&lt;imag1&lt;&lt;&quot;*i ; x2 = &quot; &lt;&lt; erg2&lt;&lt; &quot;+&quot;&lt;&lt; imag2&lt;&lt;&quot;*i&quot; &lt;&lt; endl;
         }

         system (&quot;PAUSE&quot;);
         return (0);   
         }
</code></pre>
<p>Wie gesagt, Funktion ist gewährleistet, solange die beiden else if Abfragen in Zeile 17 bzw. 21 _nicht_ genutzt werden.<br />
Sobald ich eines davon benötige, passiert folgendes</p>
<p><a href="http://imageshack.us/f/337/33799894.jpg/" rel="nofollow">http://imageshack.us/f/337/33799894.jpg/</a></p>
<p>Vermutlich ist irgendwo eine Klammer falsch gesetzt, anders kann ich es mir nicht erklären.<br />
Zuerst dachte ich, wenn ich zu dem if in Zeile 33 noch die zusätzliche Abfrage &quot;&amp;&amp;a!=0&quot; hinzufüg, es dann funktioniert. Dem war allerdings nicht so^^<br />
Selbstverständlich bin ich aber gerne andersweitig zu überzeugen:)</p>
<p>Etwas ganz anderes noch. Kann ich, wenn ich im Programm selbst Zahlen eingeb, kann ich diese immer -wenns Ganzzahlen sind- als ganze Zahl eingeben, oder ist bei double/float/was auch immer, ein z.B. 4.0 nötig?</p>
<p>Schonmal Danke für eure Hilfe</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305681/c-quad-gleichung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 07:49:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305681.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Jul 2012 11:16:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ quad. Gleichung on Thu, 05 Jul 2012 11:16:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
nachdem ich meinen Fehler leider nicht finden kann, hoff ich mal, dass Ihr mir weiterhelfen könnt. Hab mir den Thread zum richtigen Codeposten durchgelesen und werds hoffentlich verständlich hinkriegen <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="😉"
    /><br />
Nun zum eigentlichem Problem.<br />
Steck noch relativ in den Kinderschuhen vom C++ Programmieren. Bei der Aufgabe gehts um die Lösung einer quad. Gleichung. Das Programm funktioniert fast wie gewünscht, nur gibt es bei gewissen Eingaben Probleme. Aber zuerst mal zum Programm selbst:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cmath&gt;

using namespace std;

int main ()
{

    float a, b, c, x, erg1, erg2, diskr, imag1, imag2;

    cout &lt;&lt; &quot;Bitte Wert zur Loesung von Gleichung ax^2+bx+c=0 fuer a, b und c eingeben&quot;;
    cin &gt;&gt; a &gt;&gt; b &gt;&gt; c;

    if (a==0.0&amp;&amp;b==0.0&amp;&amp;c==0.0){
       cout &lt;&lt;&quot;Das Ergebnis ist eine wahre Aussage. Es gibt unendlich viele Loesungen&quot; &lt;&lt; endl;
}

       else if (a==0&amp;&amp;b==0&amp;&amp;c!=0){
         cout &lt;&lt;&quot;keine Loesung moeglich&quot; &lt;&lt; endl;
         }

       else if (a==0&amp;&amp;b!=0&amp;&amp;c!=0){
         x=b/c;
         cout &lt;&lt;&quot;Das Ergebnis ist eine Gerade fuer die gilt: x = &quot; &lt;&lt; x &lt;&lt; endl;
         }

    else{
         diskr=b*b-4.0*a*c;
         cout &lt;&lt;&quot;Die Diskriminante der Gleichung betraegt &quot; &lt;&lt; diskr &lt;&lt; endl;
         }

    if (diskr&gt;=0&amp;&amp;a!=0) {
                  erg1=(-b+sqrt(diskr))/(2*a);
                  erg2=(-b-sqrt(diskr))/(2*a);
                  cout &lt;&lt;&quot;Fuer x1 und x2 gilt: x1 = &quot; &lt;&lt; erg1 &lt;&lt;&quot;; x2 = &quot; &lt;&lt; erg2 &lt;&lt; endl;
                  }

    else {
         erg1= -b/(2*a);
         erg2= -b/(2*a);
         imag1= sqrt(-diskr)/(2*a);
         imag2= -sqrt(-diskr)/(2*a);
         cout &lt;&lt;&quot;Fuer x1 und x2 gilt: x1 = &quot; &lt;&lt; erg1 &lt;&lt; &quot;+&quot; &lt;&lt;imag1&lt;&lt;&quot;*i ; x2 = &quot; &lt;&lt; erg2&lt;&lt; &quot;+&quot;&lt;&lt; imag2&lt;&lt;&quot;*i&quot; &lt;&lt; endl;
         }

         system (&quot;PAUSE&quot;);
         return (0);   
         }
</code></pre>
<p>Wie gesagt, Funktion ist gewährleistet, solange die beiden else if Abfragen in Zeile 17 bzw. 21 _nicht_ genutzt werden.<br />
Sobald ich eines davon benötige, passiert folgendes</p>
<p><a href="http://imageshack.us/f/337/33799894.jpg/" rel="nofollow">http://imageshack.us/f/337/33799894.jpg/</a></p>
<p>Vermutlich ist irgendwo eine Klammer falsch gesetzt, anders kann ich es mir nicht erklären.<br />
Zuerst dachte ich, wenn ich zu dem if in Zeile 33 noch die zusätzliche Abfrage &quot;&amp;&amp;a!=0&quot; hinzufüg, es dann funktioniert. Dem war allerdings nicht so^^<br />
Selbstverständlich bin ich aber gerne andersweitig zu überzeugen:)</p>
<p>Etwas ganz anderes noch. Kann ich, wenn ich im Programm selbst Zahlen eingeb, kann ich diese immer -wenns Ganzzahlen sind- als ganze Zahl eingeben, oder ist bei double/float/was auch immer, ein z.B. 4.0 nötig?</p>
<p>Schonmal Danke für eure Hilfe</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2230274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230274</guid><dc:creator><![CDATA[mads]]></dc:creator><pubDate>Thu, 05 Jul 2012 11:16:35 GMT</pubDate></item><item><title><![CDATA[Reply to C++ quad. Gleichung on Thu, 05 Jul 2012 11:31:56 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cmath&gt; 

using namespace std;

int main ()
{

  //  float a, b, c, x, erg1, erg2, diskr, imag1, imag2;  Variablen so lokal wie möglich halten. Wir sind hier nicht in C

  cout &lt;&lt; &quot;Bitte Wert zur Loesung von Gleichung ax^2+bx+c=0 fuer a, b und c eingeben&quot;;
  double a, b, c;  // Warum float, wenn double doch auf modernen Rechnern praktisch nix kostet?
  cin &gt;&gt; a &gt;&gt; b &gt;&gt; c;

  if (a==0.0 &amp;&amp; b==0.0 &amp;&amp; c==0.0) // Ein paar Leerzeichen helfen Wunder bei der Leserlichkeit
    {
      cout &lt;&lt;&quot;Das Ergebnis ist eine wahre Aussage. Es gibt unendlich viele Loesungen&quot; &lt;&lt; endl;
    }
  else if (a==0 &amp;&amp; b==0 &amp;&amp; c!=0)  // Warum manchmal 0.0, manchmal 0?
    {
      cout &lt;&lt;&quot;keine Loesung moeglich&quot; &lt;&lt; endl;
    }
  else if (a==0 &amp;&amp; b!=0 &amp;&amp; c!=0)
    {
      double x=b/c;
      cout &lt;&lt;&quot;Das Ergebnis ist eine Gerade fuer die gilt: x = &quot; &lt;&lt; x &lt;&lt; endl;
    }
  else
    {
      double diskr=b*b-4.0*a*c;
      cout &lt;&lt;&quot;Die Diskriminante der Gleichung betraegt &quot; &lt;&lt; diskr &lt;&lt; endl;
      //    } Logikfehler. Diese Klammer wolltest du wohl nicht hier schließen
      // Durch die frühzeitige Definition der Variablen diskr konnte der Compiler den Fehler nicht bemerken. 
      // Mit der lokalen Definition würde er sich nun beschweren, wenn in der nächsten Zeile diskr benutzt wird:         
      if (diskr&gt;=0 &amp;&amp; a!=0)  // Aber nun ist die Klammer ja weg, daher geht's
        {
          double erg1=(-b+sqrt(diskr))/(2*a);
          double erg2=(-b-sqrt(diskr))/(2*a);
          cout &lt;&lt;&quot;Fuer x1 und x2 gilt: x1 = &quot; &lt;&lt; erg1 &lt;&lt;&quot;; x2 = &quot; &lt;&lt; erg2 &lt;&lt; endl;
        }

      else 
        {
          double erg1= -b/(2*a);
          double erg2= -b/(2*a);
          double imag1= sqrt(-diskr)/(2*a);
          double imag2= -sqrt(-diskr)/(2*a);
          cout &lt;&lt;&quot;Fuer x1 und x2 gilt: x1 = &quot; &lt;&lt; erg1 &lt;&lt; &quot;+&quot; &lt;&lt;imag1&lt;&lt;&quot;*i ; x2 = &quot; &lt;&lt; erg2&lt;&lt; &quot;+&quot;&lt;&lt; imag2&lt;&lt;&quot;*i&quot; &lt;&lt; endl;
        }
    } // Hier wolltest du den BLock eigentlich schließen         
  //        system (&quot;PAUSE&quot;);  unnötig, unportabel, gibt's besser, siehe FAQ
  //         return (0);   in main schon implizit
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2230278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2230278</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Jul 2012 11:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to C++ quad. Gleichung on Wed, 08 Aug 2012 15:27:28 GMT]]></title><description><![CDATA[<p>Ich glaube bei deinem Code, war das Problem die Leserlichkeit.<br />
Die zweite Klammer bei deiner ersten if- Anweisung z.B. war so gesetzt, dass man meinen könnten, sie ist der Endpunkt der main- Funktion. Ich habe den Code mal kopiert, alles leserlich eingerückt und schwupps, alles prima.</p>
<p>Arbeite vielleicht mehr mit klareren Grenzen zwischen Anweisungen und setze gezielt Kommentare, um deinen Code noch Jahre später nachvollziehen zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240133</guid><dc:creator><![CDATA[amichian]]></dc:creator><pubDate>Wed, 08 Aug 2012 15:27:28 GMT</pubDate></item></channel></rss>