<?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[Primzahlen auslesen funktioniert nur bis 100]]></title><description><![CDATA[<p>Hallo,<br />
Ich muss für meine Uni ein C++-Programm schreiben mit dessen Hilfe man die Primzahlen bis zu einem selbst gewählten Endpunkt berechnen lassen. Das Programm funktioniert soweit auch gut, aber sobald man als Endpunkt Zahlen wählt die größer als 100 sind wird das Programm einfach ohne Ausgabe beendet.</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;
int main(int argc, char** argv){
	int n;
	cout&lt;&lt;&quot;Geben Sie eine Zahl an bis zu der Sie auf Primzahlen testen moechten: &quot;&lt;&lt;endl;
	cin&gt;&gt;n;
	bool isPrime[n];

	int i=2;

for(i=0;i&lt;n;i++){
	isPrime[i]=true;}

for(i=2;i&lt;n;i++)
{

	if(isPrime[i]==true)
	   {
	   int j;
	   int d=0;
	     for(j=2;d&lt;n;j++)
	        {d=j*i;
	         isPrime[d]=false;
	        }
	   }
}

int y;
for(y=0;y&lt;=n;y++)
        {
	if (isPrime[y]==true)
               {
		cout&lt;&lt;y&lt;&lt;&quot;, &quot;;
	        }
        }

return 0;
}
</code></pre>
<p>Wahrscheinlich ist der Fehler eh ganz offensichtlich und ich bin einfach betriebsblind. Aber falls jemand einen Fahler entdecken sollte wäre das sehr nett mir den aufzuzeigen <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/topic/315924/primzahlen-auslesen-funktioniert-nur-bis-100</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 10:54:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315924.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Apr 2013 09:33:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 09:33:35 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich muss für meine Uni ein C++-Programm schreiben mit dessen Hilfe man die Primzahlen bis zu einem selbst gewählten Endpunkt berechnen lassen. Das Programm funktioniert soweit auch gut, aber sobald man als Endpunkt Zahlen wählt die größer als 100 sind wird das Programm einfach ohne Ausgabe beendet.</p>
<pre><code>#include &lt;iostream&gt;
using namespace std;
int main(int argc, char** argv){
	int n;
	cout&lt;&lt;&quot;Geben Sie eine Zahl an bis zu der Sie auf Primzahlen testen moechten: &quot;&lt;&lt;endl;
	cin&gt;&gt;n;
	bool isPrime[n];

	int i=2;

for(i=0;i&lt;n;i++){
	isPrime[i]=true;}

for(i=2;i&lt;n;i++)
{

	if(isPrime[i]==true)
	   {
	   int j;
	   int d=0;
	     for(j=2;d&lt;n;j++)
	        {d=j*i;
	         isPrime[d]=false;
	        }
	   }
}

int y;
for(y=0;y&lt;=n;y++)
        {
	if (isPrime[y]==true)
               {
		cout&lt;&lt;y&lt;&lt;&quot;, &quot;;
	        }
        }

return 0;
}
</code></pre>
<p>Wahrscheinlich ist der Fehler eh ganz offensichtlich und ich bin einfach betriebsblind. Aber falls jemand einen Fahler entdecken sollte wäre das sehr nett mir den aufzuzeigen <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/2315810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2315810</guid><dc:creator><![CDATA[zpol]]></dc:creator><pubDate>Tue, 16 Apr 2013 09:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 09:37:19 GMT]]></title><description><![CDATA[<p>nimm anstelle von bool isPrime[n]; mal nen std::vector.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2315814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2315814</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 16 Apr 2013 09:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 09:45:42 GMT]]></title><description><![CDATA[<p>zpol schrieb:</p>
<blockquote>
<pre><code>[...]
	   int d=0;
	     for(j=2;d&lt;n;j++)
	        {d=j*i;
	         isPrime[d]=false;
	        }
[...]
</code></pre>
</blockquote>
<p>bist Du sicher, dass immer gilt d&lt;n?</p>
<p>Ausserdem: Warnungen im Compiler einschalten! Dein Array variabler Länge ( <code>bool isPrime[n];</code> ) ist kein C++!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2315819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2315819</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 16 Apr 2013 09:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 09:46:09 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>nimm anstelle von bool isPrime[n]; mal nen std::vector.</p>
</blockquote>
<p>nimm anstelle von <code>std::vector&lt;bool&gt;</code> einen <code>std::vector&lt;char&gt;</code> (aber speichere trotzdem nur true/false darin)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2315820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2315820</guid><dc:creator><![CDATA[damn_vector_bool]]></dc:creator><pubDate>Tue, 16 Apr 2013 09:46:09 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 10:15:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/27454">@daddy_felix</a> und damn_vector_bool: Der Übungsassistent meinte dass wir unsere Programme nur mit den in der Vorlesung durchgemachten Themengebieten lösen dürfen. std::vector gehört leider nicht dazu...</p>
<p>@furble wurble: Wenn man n nichtnegativ wählt sollte das doch zumindest beim ersten Durchlauf der Fall sein. Die Schleife soll ja eben abgebrochen werden wenn d grösser als n ist. Wieso ist das denn kein C++? Soll ich n auf const setzen?<br />
(Warnungen sind eingeschalten)</p>
<p>Ich habe nun d mit 2*i initialisiert und das Programm funktioniert jetzt bis 140^^.</p>
<p>Aber eigentlich sollte das doch nicht so schnell abbrechen. Was ist denn eigentlich der Grund für den Abbruch wenn ich d mit 0 initialisier. Einfach weil das Programm probiert auf einen sozusagen nicht existenten Teil eines Arrays zuzugreifen? Und wieso passierte das erst bei 100? Und warum jetzt bei 140? Ich bin das ganze Programm im Debug Mode(Eclipse) durchgegangen, verstehe es aber trotzdem nicht...</p>
<p>Ah ja.. Sorry für den Doppelpost.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2315829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2315829</guid><dc:creator><![CDATA[zpol]]></dc:creator><pubDate>Tue, 16 Apr 2013 10:15:41 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 10:46:21 GMT]]></title><description><![CDATA[<p>zpol schrieb:</p>
<blockquote>
<p>Der Übungsassistent meinte dass wir unsere Programme nur mit den in der Vorlesung durchgemachten Themengebieten lösen dürfen. std::vector gehört leider nicht dazu...</p>
</blockquote>
<p>Okay.<br />
Dann nimmst Du ein starres Array der Größe m und n muss halt kleiner sein. Hier z.B. mit <code>m=1024</code></p>
<pre><code class="language-cpp">bool isPrime[1024];
  int n;
  cout&lt;&lt;&quot;Geben Sie eine Zahl an bis zu der Sie auf Primzahlen testen moechten: &quot;&lt;&lt;endl;
  cin&gt;&gt;n;
  if(1024&lt;n)
    return -1;
</code></pre>
<p>Die ganze Arbeit macht ja dieser Teil:</p>
<pre><code class="language-cpp">for(i=2;i&lt;n;i++)
{
    if(isPrime[i]==true)
       {
       int j;
       int d=0;
         for(j=2;d&lt;n;j++)
            {
             d=j*i;
             isPrime[d]=false;
            }
       }
}
</code></pre>
<p>Warum überhaupt die Variable j?<br />
Wenn Du d richtig initialisierst (2*i), die Laufbedingung d&lt;n setzt und danach mit Schrittlänge i durch das Array marschierst(*) ist doch alles geritzt?<br />
Wikipedia hat den Algorithmus so auch als Pseudocode da stehen.</p>
<p>Das Hauptproblem oben ist, dass die Laufbedingung d&lt;n beim (erneuten) Eintritt in die Schleife ausgewertet wird, du d allerdings im Schleifenkörper zuweist und _dann_ als Index in Dein Array benutzt.</p>
<p>(*) Mit Schrittlänge meine ich den Wert, um den Du d erhöhst, z.B. Schrittlänge vier wäre sowas</p>
<pre><code class="language-cpp">for(int i=0; i&lt;42; i+=4) /* blabla */;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2315835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2315835</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 16 Apr 2013 10:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 11:15:58 GMT]]></title><description><![CDATA[<p>damn_vector_bool schrieb:</p>
<blockquote>
<p>daddy_felix schrieb:</p>
<blockquote>
<p>nimm anstelle von bool isPrime[n]; mal nen std::vector.</p>
</blockquote>
<p>nimm anstelle von <code>std::vector&lt;bool&gt;</code> einen <code>std::vector&lt;char&gt;</code> (aber speichere trotzdem nur true/false darin)</p>
</blockquote>
<p>Es wurde hier im Forum schon mehrmals festgestellt, dass der vector&lt;bool&gt; für diese Aufgabe günstiger ist. Keiner seiner Nachteile greift bei dieser Aufgabenstellung, dafür ist er schneller und kann bis zu größeren Zahlen benutzt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2315841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2315841</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Apr 2013 11:15:58 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 18:26:27 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Das Hauptproblem oben ist, dass die Laufbedingung d&lt;n beim (erneuten) Eintritt in die Schleife ausgewertet wird, du d allerdings im Schleifenkörper zuweist und _dann_ als Index in Dein Array benutzt.</p>
</blockquote>
<p>Danke dir! Jetzt funktioniert alles wunderbar. Ich frage mich nur noch warum der Programmcode am Anfang bei 140 noch funktionierte und bei 141 nicht mehr. Kann mir das wirklich nicht erklären.</p>
<p>Falls ich den Code hier reinschreiben soll sagt mir das bitte.<br />
Danke nochmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2316027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316027</guid><dc:creator><![CDATA[zpol]]></dc:creator><pubDate>Tue, 16 Apr 2013 18:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to Primzahlen auslesen funktioniert nur bis 100 on Tue, 16 Apr 2013 19:07:07 GMT]]></title><description><![CDATA[<p>zpol schrieb:</p>
<blockquote>
<p>Ich frage mich nur noch warum der Programmcode am Anfang bei 140 noch funktionierte und bei 141 nicht mehr. Kann mir das wirklich nicht erklären.</p>
</blockquote>
<p>Dass es bei Dir bei 141, oder bei 150 &quot;knallt&quot; ist Zufall - bei anderen mag es früher oder später zu Problemen kommen. Wenn Du über Arraygrenzen schreibst/liest passieren immer wunderliche Dinge.</p>
<p>Manche schwören auf Debugger.<br />
Andere schwören auf logging auf die Konsole - ich auch! <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>Z.B. könnte eine einfache Verzweigung mit Ausgabe schon Hinweise geben, wenn man den Fehler ungefähr lokalisiert hat.<br />
Im folgenden gibt es zwar eigentlich erst ab d==1023 Probleme, aber es verdeutlicht, wo Dein ursprüngliches Programm über dass Array hinausschrieb.<br />
(Ich habe noch die Deklaration der Laufvariablen in den Schleifenkopf mit reingenommen - macht man so in C++)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int main(int argc, char** argv){
  bool isPrime[1024];
  int n;
  cout&lt;&lt;&quot;Geben Sie eine Zahl an bis zu der Sie auf Primzahlen testen moechten: &quot;&lt;&lt;endl;
  cin&gt;&gt;n;
  if(1024&lt;n)
    return -1;

  for(int i=0;i&lt;n;i++)
  {
    isPrime[i]=true;
  }

  for(int i=2;i&lt;n;i++)
  {

    if(isPrime[i]==true)
    {
      int j;
      int d=0;
      for(j=2;d&lt;n;j++)
      {
        d=j*i;
        if( !(d&lt;n) )
        {
          std::cerr&lt;&lt;&quot;index (would be) out of bounds!(d: &quot; &lt;&lt; d &lt;&lt; &quot; i: &quot; &lt;&lt; i &lt;&lt; &quot;)\n&quot;;
          if(!(d&lt;1024)) return -1;  // genug ist genug!
        }
        isPrime[d]=false;
      }
    }
  }

  for(int i=0; i&lt;n; ++i)
  {
    if (isPrime[i]==true)
    {      
       cout&lt;&lt;i&lt;&lt;&quot;, &quot;;
    }
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2316040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2316040</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 16 Apr 2013 19:07:07 GMT</pubDate></item></channel></rss>