<?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[[gelöst] Endlosshleife]]></title><description><![CDATA[<p>Hi,<br />
ich bin neu hier und habe gestern mit C++ angefangen.<br />
Ich bin nicht besonders gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .<br />
Auf jeden Fall habe ich eine Frage zu der For-Schleife.</p>
<p>In &quot;anderen&quot; Programmiersprachen ist das ja meistens von;bis;step.<br />
Das ist in C++ ja im Prinzip genauso. Das dumme ist nur, dass ich nicht weis, wie ich das &quot;bis&quot; in C++ zu schreiben habe<br />
In meinem Fall wäre das dieser Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

bool istPrim(int kandidat)
{
    bool prim = false;
    int i;
    for(i=2;kandidat-1;i=i+1)
    {
        {
        if ((kandidat%i)==0)
            prim = false;
        else
            prim = true;
        }
    }
    return prim;
}

int main()
{
    int i;
    for(i=1;i&lt;=100;i=i+1)
    {
        {
        if ((istPrim(i))==true)
            cout&lt;&lt;&quot;Die zahl &quot;&lt;&lt;i&lt;&lt;&quot; ist eine Primzahl&quot;&lt;&lt;endl;
        }
    };
};
</code></pre>
<p>In meinem Tutorial sollte ich alle Primzahlen von 1 bis 100 aufzählen.</p>
<p>Durch diesen Code</p>
<pre><code class="language-cpp">for(i=2;kandidat-1;i=i+1)
</code></pre>
<p>hab ich natürlich ne Endlosschleife drin.<br />
Ich bin m ir nicht sicher wie ich das schreiben muss, so vielleicht?</p>
<pre><code class="language-cpp">for(i=2;i&lt;kandidat;i=i+1)
</code></pre>
<p>Es ist aber irgendwo noch en Denkfehler drin, den ich jetzt erst mal suchen muss.</p>
<p>Könnt ihr mir vielleicht noch sagen, was im am Syntax verbessern könnte, oder sonst vom Programmierstil her.</p>
<p>Ich danke euch schonmal ganz herzlich <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>
<p>Mfg. arnonym</p>
<p>PS. gibts hier Spoiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224544/gelöst-endlosshleife</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 12:06:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224544.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Oct 2008 10:52:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Endlosshleife on Sat, 11 Oct 2008 14:28:43 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich bin neu hier und habe gestern mit C++ angefangen.<br />
Ich bin nicht besonders gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .<br />
Auf jeden Fall habe ich eine Frage zu der For-Schleife.</p>
<p>In &quot;anderen&quot; Programmiersprachen ist das ja meistens von;bis;step.<br />
Das ist in C++ ja im Prinzip genauso. Das dumme ist nur, dass ich nicht weis, wie ich das &quot;bis&quot; in C++ zu schreiben habe<br />
In meinem Fall wäre das dieser Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

bool istPrim(int kandidat)
{
    bool prim = false;
    int i;
    for(i=2;kandidat-1;i=i+1)
    {
        {
        if ((kandidat%i)==0)
            prim = false;
        else
            prim = true;
        }
    }
    return prim;
}

int main()
{
    int i;
    for(i=1;i&lt;=100;i=i+1)
    {
        {
        if ((istPrim(i))==true)
            cout&lt;&lt;&quot;Die zahl &quot;&lt;&lt;i&lt;&lt;&quot; ist eine Primzahl&quot;&lt;&lt;endl;
        }
    };
};
</code></pre>
<p>In meinem Tutorial sollte ich alle Primzahlen von 1 bis 100 aufzählen.</p>
<p>Durch diesen Code</p>
<pre><code class="language-cpp">for(i=2;kandidat-1;i=i+1)
</code></pre>
<p>hab ich natürlich ne Endlosschleife drin.<br />
Ich bin m ir nicht sicher wie ich das schreiben muss, so vielleicht?</p>
<pre><code class="language-cpp">for(i=2;i&lt;kandidat;i=i+1)
</code></pre>
<p>Es ist aber irgendwo noch en Denkfehler drin, den ich jetzt erst mal suchen muss.</p>
<p>Könnt ihr mir vielleicht noch sagen, was im am Syntax verbessern könnte, oder sonst vom Programmierstil her.</p>
<p>Ich danke euch schonmal ganz herzlich <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>
<p>Mfg. arnonym</p>
<p>PS. gibts hier Spoiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597308</guid><dc:creator><![CDATA[arnonym]]></dc:creator><pubDate>Sat, 11 Oct 2008 14:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Endlosshleife on Sat, 11 Oct 2008 11:00:24 GMT]]></title><description><![CDATA[<p>Ja, du hast einen Denkfehler. For-Schleifen in C++ haben folgende Semantik:</p>
<pre><code class="language-cpp">for (Initialisierung; Weiterführungsbedingung; Zuweisung für Schritt)
</code></pre>
<p>Aber das sind nun wirklich ziemliche Grundlagen. Bitte schau dir ein Buch an, dort sollte alles gut erklärt werden. Zur Not tuts auch ein Tutorial, was ich aber nicht empfehle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597315</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 11 Oct 2008 11:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Endlosshleife on Sat, 11 Oct 2008 11:11:52 GMT]]></title><description><![CDATA[<p>naja die Endlosschleife haste ja selbst rausgefunden - i&lt; kandidat ist schonmal nicht schlecht.<br />
Zum Stil: Leerzeichen können die Übersichtlichkeit erhöhen, z.B. in deinen for-Schleifenköpfen. Außerdem benutzt du teils zu viele Klammern (doppelt hält besser?) Ich schreib jetzt mal dein Programm nochmal hin mit einigen kleinen Verbesserungen die ich anbringen würde:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

//using namespace std;
//wenn der Namespace nicht grade übermäßig häufig benutzt wird würde ich using-direktiven rauslassen

bool istPrim(int kandidat)
{
    bool prim = true; //die Zahl ist so lange Prim wie du keinen Teiler findest, also true initialisieren!

    for (int i=2; i &lt; kandidat; ++i) 
    //schleifenzähler im schleifenkopf definieren, wenn du ihn nach der schleife nicht mehr brauchst
    // i = i+1 kann ersetzt werden durch den inkrementoperator ++
    {
//        {    //doppelt geschachtelter Block ist unnötig...
        if ((kandidat%i)==0)
            prim = false;
//      else
//          prim = true;     

//der else-zweig muss raus von der Logik her. sonst zäglt nur der letzte schleifendurchlauf, alle anderen davor werden sonst so oder so überschrieben

//        }
    }
    return prim;
}

int main()
{
    for(int i=1; i&lt;=100; ++i)  //siehe oben
    {
        if (istPrim(i))  //vergleich auf true ist unsinnig, istPrim liefert doch schon den wahrheitswert
            std::cout &lt;&lt; &quot;Die Zahl &quot; &lt;&lt; i &lt;&lt; &quot; ist eine Primzahl&quot; &lt;&lt; std::endl;
    };
} //semikolon am Ende braucht nicht sein...
</code></pre>
<p>Das soweit fürs erste. Danach ist immernoch einiges zu verbessern:</p>
<pre><code class="language-cpp">#include &lt;cmath&gt;

bool istPrim(int kandidat)
{
  for (int i = 2; i &lt; std::sqrt(kandidat)+1; ++i)  
  //es reicht bis sqrt(kandidat) zu testen, bzw. zur nächst größeren Ganzzahl
  //denn wenn kandidat einen Teiler größer als die wurzel hat, muss es einen zweiten Teiler kleiner als die Wurzel geben
  {
    if (kandidat%i == 0)
      return false;          //Teiler gefunden, brauche nicht weiter suchen
  }

  //wenn ich hier hinkomme war die suche erfolglos, also:
  return true;
}
</code></pre>
<p>letzte kleine Verbesserung wäre jetzt noch, die Wurzel mittels static_cast in einen int zu casten, damit nicht bei jedem Schleifendurchlauf i in einen double gecastet wird, aber das fällt unter frühzeitige optimierung und verringert die leserlichkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597325</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 11 Oct 2008 11:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Endlosshleife on Sat, 11 Oct 2008 14:27:29 GMT]]></title><description><![CDATA[<p>Danke für deine Mühe <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>
<p>Jetzt weis ich wie der Syntax funktioniert und hab eine Perfekt kommentierte Lösung.<br />
Vielen Dank <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/1597430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597430</guid><dc:creator><![CDATA[arnonym]]></dc:creator><pubDate>Sat, 11 Oct 2008 14:27:29 GMT</pubDate></item></channel></rss>