<?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[Array erstellt, Programm bricht beim füllen des Arrays ab!]]></title><description><![CDATA[<p>Hallo,<br />
ich habe hier ein Programm, welches mir Primzahlen mithilfe des Siebes von Atkin die Primzahlen berechnet. Leider bricht das Programm immer in der Schleife, welche das Array anfänglich auf false setzt bei mir immer vorzeitig ab!</p>
<p>Hier erstmal das Programm:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;math.h&gt;
using namespace std;

unsigned int limit;
bool* prim;

void befuellen() {
	prim = new bool (limit+6); //arr. beg. bei 0; zähl. fängt bei 5 an -&gt; +6
	for(unsigned int i=0; i&lt;=limit; i++) {
		prim[i] = false;
		cout &lt;&lt; i &lt;&lt; endl;
	}
	prim[2]= true;
	prim[3]=true;
}

void rechnung(){
	for(unsigned int x=1; x&lt;=sqrt(limit); x++) {
		for(unsigned int y=1; y&lt;=sqrt(limit); y++) {

			unsigned int n = 4 * x*x + y*y;
			if(n&lt;=limit &amp;&amp; (n%12==1 || n%12==5)) {
				if(prim[n]) {
					prim[n]=false;
				}
				else {
					prim[n]=true;
				}
			}

			n = 3 * x*x + y*y;
			if(n&lt;=limit &amp;&amp; (n%12==7)) {
				if(prim[n]) {
					prim[n]=false;
				}
				else{
					prim[n]=true;
				}
			}

			n = 3 * x*x - y*y;
			if(x&gt;y &amp;&amp; n&lt;=limit &amp;&amp; (n%12==11 )) {
				if(prim[n]) {
					prim[n] = false;
				}
				else {
					prim[n] = true;
				}
			}
		}
	}
}

void streichen() {
for(unsigned int n = 5; n&lt;=sqrt(limit); n++) {
	if(prim[n]) {
		for(unsigned int i=1; i*n*n&lt;=limit; i++) {
			prim[i*n*n]=false;
			}
		}
	}
}

void ausgabe() {
	for(unsigned int i=2; i&lt;=limit; i++) {
		if(prim[i]) {
			cout &lt;&lt; i &lt;&lt; endl;
		}
	}
}

int main() {
	cout &lt;&lt; &quot;Limit: &quot;;
	cin &gt;&gt; limit;
	cout &lt;&lt; &quot;Befuellen&quot; &lt;&lt; endl;
	befuellen();
	cout &lt;&lt; &quot;rechnung&quot; &lt;&lt; endl;
	rechnung();
	cout &lt;&lt; &quot;streichen&quot; &lt;&lt; endl;
	streichen();
	cout &lt;&lt; &quot;ausgabe&quot; &lt;&lt; endl;
	ausgabe();
}
</code></pre>
<p>in der Methode &quot;befüllen&quot; wird auf einmal abgebrochen. Wenn ich das Programm über die (windows) console starte, bricht der bei ungefähr 3000 stellen ab, über die eclipse console bei 10250. darunter werden die primzahlen wunderbar berechnet, nur ab dann weigert es sich weiter zu füllen ... worann kann das liegen?</p>
<p>Ich kenne mich mit c++ nicht gut aus, weiß nichtmal ob ich das mit dem array richtig hinbekommen habe (das erstellen). Wäre sehr nett wenn ihr mir ein paar tipps geben könntet hinsichtlich einer verbesserung <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>Vielen Dank im vorraus!</p>
<p>MfG</p>
<p>Schubi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259164/array-erstellt-programm-bricht-beim-füllen-des-arrays-ab</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 23:08:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259164.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Jan 2010 20:14:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array erstellt, Programm bricht beim füllen des Arrays ab! on Tue, 19 Jan 2010 20:16:11 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe hier ein Programm, welches mir Primzahlen mithilfe des Siebes von Atkin die Primzahlen berechnet. Leider bricht das Programm immer in der Schleife, welche das Array anfänglich auf false setzt bei mir immer vorzeitig ab!</p>
<p>Hier erstmal das Programm:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;math.h&gt;
using namespace std;

unsigned int limit;
bool* prim;

void befuellen() {
	prim = new bool (limit+6); //arr. beg. bei 0; zähl. fängt bei 5 an -&gt; +6
	for(unsigned int i=0; i&lt;=limit; i++) {
		prim[i] = false;
		cout &lt;&lt; i &lt;&lt; endl;
	}
	prim[2]= true;
	prim[3]=true;
}

void rechnung(){
	for(unsigned int x=1; x&lt;=sqrt(limit); x++) {
		for(unsigned int y=1; y&lt;=sqrt(limit); y++) {

			unsigned int n = 4 * x*x + y*y;
			if(n&lt;=limit &amp;&amp; (n%12==1 || n%12==5)) {
				if(prim[n]) {
					prim[n]=false;
				}
				else {
					prim[n]=true;
				}
			}

			n = 3 * x*x + y*y;
			if(n&lt;=limit &amp;&amp; (n%12==7)) {
				if(prim[n]) {
					prim[n]=false;
				}
				else{
					prim[n]=true;
				}
			}

			n = 3 * x*x - y*y;
			if(x&gt;y &amp;&amp; n&lt;=limit &amp;&amp; (n%12==11 )) {
				if(prim[n]) {
					prim[n] = false;
				}
				else {
					prim[n] = true;
				}
			}
		}
	}
}

void streichen() {
for(unsigned int n = 5; n&lt;=sqrt(limit); n++) {
	if(prim[n]) {
		for(unsigned int i=1; i*n*n&lt;=limit; i++) {
			prim[i*n*n]=false;
			}
		}
	}
}

void ausgabe() {
	for(unsigned int i=2; i&lt;=limit; i++) {
		if(prim[i]) {
			cout &lt;&lt; i &lt;&lt; endl;
		}
	}
}

int main() {
	cout &lt;&lt; &quot;Limit: &quot;;
	cin &gt;&gt; limit;
	cout &lt;&lt; &quot;Befuellen&quot; &lt;&lt; endl;
	befuellen();
	cout &lt;&lt; &quot;rechnung&quot; &lt;&lt; endl;
	rechnung();
	cout &lt;&lt; &quot;streichen&quot; &lt;&lt; endl;
	streichen();
	cout &lt;&lt; &quot;ausgabe&quot; &lt;&lt; endl;
	ausgabe();
}
</code></pre>
<p>in der Methode &quot;befüllen&quot; wird auf einmal abgebrochen. Wenn ich das Programm über die (windows) console starte, bricht der bei ungefähr 3000 stellen ab, über die eclipse console bei 10250. darunter werden die primzahlen wunderbar berechnet, nur ab dann weigert es sich weiter zu füllen ... worann kann das liegen?</p>
<p>Ich kenne mich mit c++ nicht gut aus, weiß nichtmal ob ich das mit dem array richtig hinbekommen habe (das erstellen). Wäre sehr nett wenn ihr mir ein paar tipps geben könntet hinsichtlich einer verbesserung <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>Vielen Dank im vorraus!</p>
<p>MfG</p>
<p>Schubi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1841643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1841643</guid><dc:creator><![CDATA[Schubi]]></dc:creator><pubDate>Tue, 19 Jan 2010 20:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to Array erstellt, Programm bricht beim füllen des Arrays ab! on Tue, 19 Jan 2010 20:34:55 GMT]]></title><description><![CDATA[<p>Eckige Klammern:</p>
<pre><code class="language-cpp">prim = new bool [limit+6];
</code></pre>
<blockquote>
<p>Ich kenne mich mit c++ nicht gut aus, weiß nichtmal ob ich das mit dem array richtig hinbekommen habe (das erstellen). Wäre sehr nett wenn ihr mir ein paar tipps geben könntet hinsichtlich einer verbesserung <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>
</blockquote>
<p>Ganz ehrlich: Es ist grauenhaft. Aber ich empfehle erstmal vernünftig C++ nach irgendeinem Lehrbuch zu lernen, sonst bringen konkrete Ratschläge nicht viel. An dem Code ist einfach zu vieles ungeschickt gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1841656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1841656</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Jan 2010 20:34:55 GMT</pubDate></item><item><title><![CDATA[Reply to Array erstellt, Programm bricht beim füllen des Arrays ab! on Wed, 20 Jan 2010 06:03:01 GMT]]></title><description><![CDATA[<p>danke schön!<br />
komisch, ich dachte ich hätte es erst so gehabt und er hat mir nen fehler angezeigt ... naja aber es funktioniert!</p>
<p>habe noch verbessert, dass die wurzel aus limit nur einmal global berechnet wird und er die in den abfragen nicht jedesmal neu berechnen muss. beschleunigt das programm echt ganz schön. (bei einer milliarde von ca 25 sek auf 5 sek).</p>
<p>tut mir leid, ic kann mir denken das es rauenhaft aussieht, warscheinlich hat das auch mit c++ nicht wirklich viel zu tun...habe in der schule java gelernt und habe mir das programm so ähnlich mit java geschrieben. ich brauche es aber in c++, habe den quellcode quasi nur kopiert und in einen c++ compiler gepackt und solange umgeschrieben, bis es kompiliert werden konnte.</p>
<p>wäre trotzdem noch dankbar für jede weitere hilfe, die das programm vielleicht noch schneller/effizienter macht. um c++ zu lernen reicht die zeit nicht mehr aus, aber das werde ich auf jeden fall nachholen... <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>danke schön</p>
<p>MfG</p>
<p>Schubi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1841771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1841771</guid><dc:creator><![CDATA[Schubi]]></dc:creator><pubDate>Wed, 20 Jan 2010 06:03:01 GMT</pubDate></item><item><title><![CDATA[Reply to Array erstellt, Programm bricht beim füllen des Arrays ab! on Wed, 20 Jan 2010 08:57:37 GMT]]></title><description><![CDATA[<p>Sonst ein kleiner Tipp:</p>
<p>du prüfst immer auf x &lt; sqrt(limit) und arbeitest danach nur noch mit dem Quadrat von x. Daher brauchst du die Wurzel gar nicht.</p>
<p>Einfach durchweg mit dem Quadrat arbeiten. In vielen Fällen kann auf sqrt verzichtet werden (bei dir überall) und das bringt immer was.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1841816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1841816</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 20 Jan 2010 08:57:37 GMT</pubDate></item></channel></rss>