<?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[Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!!]]></title><description><![CDATA[<p>Untenstehendes Programm soll Primzahlen berechnen und auf der Konsole ausgeben.<br />
Allerdings wird nach Ausgabe auf der Konsole eine Fehlermeldung (Windowsmeldung &quot;Programm funktioniert nicht richtig&quot;) ausgegeben, bei größeren Zahlen(&gt;=10^4) erfolgt sofort die Fehlermeldung ein Programmabbruch. Hat jemand eine Idee, woran das liegen könnte?<br />
<strong>Edit: Der Fehler bestand darin, daß auf Elemente ausserhalb des Index zugegriffen wurde. Code wurde korrigiert.<br />
(Zeile 27-34 wurden neu eingefügt).</strong></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cmath&gt;
using namespace std;

int main()
{
  unsigned long long int n;
  unsigned long long int z=0;
  unsigned long long int y;
  cout&lt;&lt;&quot;Bitte geben sie die Zahl ein, &quot;&lt;&lt;endl;
  cout&lt;&lt;&quot;bis zu der Primzahlen berechnet werden sollen: &quot;&lt;&lt;endl;
  cin&gt;&gt; n;
  y=sqrt(n);                                      //Da Primzahlen nur bis zur Wurzel von n berechnet werden müssen

  vector&lt;bool&gt; vb(n);                             //Ein Array mit boolschen Werten, Nichtprimzahlen werden markiert.

  for(unsigned long long int i = 2; i&lt;=y; ++i)
  {
   if(vb[i]==false)                               //Falls ein Wert auf true steht, also schon als Nichtprimzahl markiert 
                                                  //wurde,geht die Schleife ein Element weiter.
    {
     for(unsigned long long int k=1;(i*k)&lt;=n;++k)
      {
        unsigned long long int m;
        m=(i*(i+k));                          //Produkte der Zahlen 2&lt;=i,k&lt;=m und i*k=m
        if(m&lt;n)                            //Korrektur Beginn
         {
          vb[m]=true;       
         }
        if(i*i&lt;n)
         {
          vb[i*i]=true;
         }                                //Korrektur Ende

         //vb[m]=true;                         //!!! fehlerhafter Code!!
         //vb[i*i]=true;             
      }
    }

  }

  for(unsigned long long int j=2;j&lt;vb.size();j++)      //Ausgabe der Primzahlen
   {
     if(vb[j]==false)
      {
       cout&lt;&lt;&quot; &quot;&lt;&lt;j;
       z+=1;
      }
   }
cout&lt;&lt;endl&lt;&lt;&quot;Anzahl der Primzahlen: &quot;&lt;&lt;z&lt;&lt;endl;
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/286368/programm-verursacht-eine-fehlermeldung-aus-hat-jmd-eine-idee-warum-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 22:22:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286368.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 May 2011 18:26:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 21:18:35 GMT]]></title><description><![CDATA[<p>Untenstehendes Programm soll Primzahlen berechnen und auf der Konsole ausgeben.<br />
Allerdings wird nach Ausgabe auf der Konsole eine Fehlermeldung (Windowsmeldung &quot;Programm funktioniert nicht richtig&quot;) ausgegeben, bei größeren Zahlen(&gt;=10^4) erfolgt sofort die Fehlermeldung ein Programmabbruch. Hat jemand eine Idee, woran das liegen könnte?<br />
<strong>Edit: Der Fehler bestand darin, daß auf Elemente ausserhalb des Index zugegriffen wurde. Code wurde korrigiert.<br />
(Zeile 27-34 wurden neu eingefügt).</strong></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;cmath&gt;
using namespace std;

int main()
{
  unsigned long long int n;
  unsigned long long int z=0;
  unsigned long long int y;
  cout&lt;&lt;&quot;Bitte geben sie die Zahl ein, &quot;&lt;&lt;endl;
  cout&lt;&lt;&quot;bis zu der Primzahlen berechnet werden sollen: &quot;&lt;&lt;endl;
  cin&gt;&gt; n;
  y=sqrt(n);                                      //Da Primzahlen nur bis zur Wurzel von n berechnet werden müssen

  vector&lt;bool&gt; vb(n);                             //Ein Array mit boolschen Werten, Nichtprimzahlen werden markiert.

  for(unsigned long long int i = 2; i&lt;=y; ++i)
  {
   if(vb[i]==false)                               //Falls ein Wert auf true steht, also schon als Nichtprimzahl markiert 
                                                  //wurde,geht die Schleife ein Element weiter.
    {
     for(unsigned long long int k=1;(i*k)&lt;=n;++k)
      {
        unsigned long long int m;
        m=(i*(i+k));                          //Produkte der Zahlen 2&lt;=i,k&lt;=m und i*k=m
        if(m&lt;n)                            //Korrektur Beginn
         {
          vb[m]=true;       
         }
        if(i*i&lt;n)
         {
          vb[i*i]=true;
         }                                //Korrektur Ende

         //vb[m]=true;                         //!!! fehlerhafter Code!!
         //vb[i*i]=true;             
      }
    }

  }

  for(unsigned long long int j=2;j&lt;vb.size();j++)      //Ausgabe der Primzahlen
   {
     if(vb[j]==false)
      {
       cout&lt;&lt;&quot; &quot;&lt;&lt;j;
       z+=1;
      }
   }
cout&lt;&lt;endl&lt;&lt;&quot;Anzahl der Primzahlen: &quot;&lt;&lt;z&lt;&lt;endl;
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2060567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060567</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 08 May 2011 21:18:35 GMT</pubDate></item><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 18:38:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for(unsigned long long int k=1;(i*k)&lt;=n;++k) 
{ 
  unsigned long long int m; 
  m=(i*(i+k));                          //Produkte der Zahlen 2&lt;=i,k&lt;=m und i*k=m 
  vb[m]=true;                           //Da das Produkt keine Primzahl ist, wird es markiert 
  vb[i*i]=true;             
}
</code></pre>
<p>Mit der Schleife überschreitest du ziemlich sicher das Ende des vector&lt;&gt;s - und dann schreibst du in Datenbereiche, die dich nichts angehen (und die möglicherweise vom Heap-Managment verwendet werden).</p>
<p>PS: Zehntausend ist noch keine &quot;größere Zahl&quot; <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2060574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060574</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 08 May 2011 18:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 19:38:21 GMT]]></title><description><![CDATA[<p>Stimmt, ich habe mal aus</p>
<pre><code class="language-cpp">vb[m]=true;                          
vb[i*i]=true;
</code></pre>
<p>[/code]</p>
<pre><code class="language-cpp">if(m&lt;=n)
{
 vb[m]=true;       
}
if(i*i&lt;=n)
{
 vb[i*i]=true;
}
</code></pre>
<p>gemacht und schon funktioniert es. Danke für den Tip!</p>
<blockquote>
<p>PS: Zehntausend ist noch keine &quot;größere Zahl&quot; <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="😃"
    /></p>
</blockquote>
<p>Wenn ich mir anschaue, was mein Chef monatlich so überweist....ist 10^4 verdammt groß.<br />
Wir können uns ja mal anschauen, was Dir Dein Chef monatlich überweist....bestimmt überdenkst Du dann Deine Ansicht noch mal .... <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2060608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060608</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 08 May 2011 19:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 19:57:50 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>Stimmt, ich habe mal aus [...] [...] gemacht und schon funktioniert es. Danke für den Tip!</p>
</blockquote>
<p>Nächster Tip: setz deine Schleifengrenzen gleich so, daß du diese zusätzlichen Überprüfungen nicht benötigst.<br />
(btw, es reicht auch, i*i einmal als zusammengesetzte Zahl zu markieren ;))</p>
<p>Edit: Und ehe ich es vergesse: Welches ist der höchste zulässige Index in einem vector mit n Elementen?</p>
<blockquote>
<blockquote>
<p>PS: Zehntausend ist noch keine &quot;größere Zahl&quot; <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="😃"
    /></p>
</blockquote>
<p>Wenn ich mir anschaue, was mir mein Chef monatlich überweist....ist 10^4 verdammt groß.<br />
Wir können uns ja mal anschauen, was Dir Dein Chef monatlich überweist....bestimmt überdenkst Du dann Deine Ansicht noch mal .... <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="😃"
    /></p>
</blockquote>
<p>Wir reden hier auch nicht vom durchschnittlichen SW-Entwickler-Gehalt <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="😃"
    /> Dein Computer bis ca. 18 Trilliarden rechnen (auch wenn das eventuell etwas länger dauert und deinen RAM an die Grenzen bringt), da sind zehntausend wirklich nur eine Kleinigkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2060623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060623</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 08 May 2011 19:57:50 GMT</pubDate></item><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 20:18:32 GMT]]></title><description><![CDATA[<p>Merke gerade, daß ich mich zu früh gefreut habe. Nun gibt die Konsole die gleiche Fehlermeldung teilweise doch wieder aus, z.B. bei 10^6 oder mehr, allerdings nicht immer.</p>
<p>Was genau meinst du mit</p>
<blockquote>
<p>es reicht auch i*i einmal als zusammengesetzte Zahl zu markieren</p>
</blockquote>
<p>?<br />
i*i wird doch nur einmal markiert, dadurch,daß sich i verändert (Schleife darüber).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2060642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060642</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 08 May 2011 20:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 20:22:56 GMT]]></title><description><![CDATA[<p>Liegt vermutlich an der Frage, die ich dazu-editiert habe.</p>
<p>redrew99 schrieb:</p>
<blockquote>
<p>Was genau meinst du mit</p>
<blockquote>
<p>es reicht auch i*i einmal als zusammengesetzte Zahl zu markieren</p>
</blockquote>
<p>?<br />
i*i wird doch nur einmal markiert, dadurch,daß sich i verändert (Schleife darüber).</p>
</blockquote>
<p>Die innere Schleife hat mehr als einen Durchlauf - und dazwischen ändert sich i (und i*i) nicht.</p>
<p>Mein Ansatz (sicher noch optimierungswürdig):</p>
<pre><code class="language-cpp">for(i=2;i&lt;y;++i)
  for(k=i;(i*k)&lt;n;++k)
    vb[i*k]=true;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2060646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060646</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 08 May 2011 20:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 21:03:06 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Liegt vermutlich an der Frage, die ich dazu-editiert habe.<br />
i*i wird doch nur einmal markiert, dadurch,daß sich i verändert (Schleife darüber).Die innere Schleife hat mehr als einen Durchlauf - und dazwischen ändert sich i (und i*i) nicht.</p>
</blockquote>
<p>Stimmt. Einfachste Lösung wäre wohl,</p>
<pre><code class="language-cpp">vb[i*i]=true
</code></pre>
<p>im Anschluß an die K-Schleife zu setzen. Aber der Algorithmus ist eh noch lange nicht perfekt, hatte den Code auch nur gepostet wegen der Fehlermeldung.</p>
<blockquote>
<p>Welches ist der höchste zulässige Index in einem vector mit n Elementen?</p>
</blockquote>
<p>n-1,es müßte also heissen</p>
<pre><code class="language-cpp">if(m&lt;=(n-1))
</code></pre>
<p>und</p>
<pre><code class="language-cpp">if((i*i)&lt;=(n-1))
</code></pre>
<p>Edit:<br />
Habe n-1 jeweils ergänzt, Code läuft jetzt fehlerfrei <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="🙂"
    /> (Hätte nicht gedacht, daß so oft auf ein Element,welches ausserhalb des Vektors liegt, zugegriffen wird.)</p>
<p>Jetzt kann ich den Algorithmus weiter optimieren. <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="🙂"
    /><br />
Freue mich schon auf die nächsten Geschwindigkeitssteigerungen...10^9 in unter 20s gilt es zu erreichen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2060654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060654</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 08 May 2011 21:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to Programm verursacht eine Fehlermeldung aus, hat jmd. eine Idee,warum? !!GELÖST!! on Sun, 08 May 2011 20:51:15 GMT]]></title><description><![CDATA[<p>vb[i*i] mußt du gar nicht gesondert setzen, das wirst du schon innerhalb der Schleife erwischen (k läuft von 1 (ist eigentlich auch nicht ganz richtig) bis n/i, also gibt es auch einen Schleifendurchlauf, in dem k==i gilt).</p>
<p>redrew99 schrieb:</p>
<blockquote>
<blockquote>
<p>Welches ist der höchste zulässige Index in einem vector mit n Elementen?</p>
</blockquote>
<p>n-1,es müßte also heissen</p>
<pre><code class="language-cpp">if(m&lt;=(n-1))
</code></pre>
<p>und</p>
<pre><code class="language-cpp">if((i*i)&lt;=(n-1))
</code></pre>
</blockquote>
<p>Richtig - und meistens schreibt man (weil's kürzer ist ;)) dort dann <code>if(m&lt;n)</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2060656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2060656</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 08 May 2011 20:51:15 GMT</pubDate></item></channel></rss>