Programm, gibt nicht die gewünschte Menge an Primzahlen aus.
-
Hallo,
ich bin eine blutige Anfängerin, was das Programmieren angeht und sitze momentan vor dem Problem, dass mir mein Programm nur die Primzahlen bis 800, anstatt wie gewünscht bis 4000, ausgibt. Leider finde ich auch nicht den Fehler. Wäre nett, wenn mir jemand helfen könnte. Vielen Dank im Voraus.
[code][code="cpp"]#include <iostream>
#include <stdio.h>
#include <stdlib.h>int pr_feld[4000]; //Array der zu überprüfenden Zahlen
int i; // Zählvariable
int j; // Funktionsinterner Zählerint main (void)
{
for(i=0;i<4000;i++)pr_feld[i]=0;
int iii=0; // Sieb des Erathostenes
for (i=2; i <= 4000; i++){
if(!pr_feld[i]){
iii++;
printf("4d\t",i);
for (j =1; (ji) <= (sizeof(pr_feld)/sizeof(int));++j)
{
pr_feld[(ji)] =1;
}
}
}return 0;
}
-
bei printf fehlt ein % vor dem d
beim streichen gehtst du mit <= eins zu weit und überschreibst die eine andere lokale variable
//#include <iostream> //weg, du schreibst eh kein c++
#include <stdio.h>
#include <stdlib.h>
int pr_feld[4000];int i;int j;int main(void){
for(i=0; i<4000; i++)pr_feld[i]=0;for(i=2;i<=
4000;i++){if(!pr_feld[i]){printf("%4d\t",i);
for(j=1;(j*i)<(sizeof(pr_feld)/sizeof(int));
++j){pr_feld[(j*i)] =1;}}}return 0;}
-
Danke, dass vor dem d ein % fehlt ist mir auch grade aufgefallen. Ist mir kurzzeitig abhanden gekommen. Verstehe leider nicht wirklich, was du mit der zweiten Anmerkung meinst.
-
for (j =1; (j*i) <= (sizeof(pr_feld)/sizeof(int));++j) { pr_feld[(j*i)] =1; } }
schreibt zu weit!
aberfor (j =1; (j*i) < (sizeof(pr_feld)/sizeof(int));++j) { pr_feld[(j*i)] =1; } }
klappt.
so ein schreiben in ein array ist ganz ungesichert von der sprache.
haste z.B.
int a[3];
int b;
int c;
dann lieben dir im speicher einfach 5 integers hintereinander. a[0]=1 geht und a[1]=1 und a[2]=1 auch. aber a[3]=0 ist verboten und könnte z.B. einfach nur b=0 bewirken, weil b an der stelle steht im speicher, wo a[3] wäre, wenn a 4 oder mehr elemente hätte.
-
Okay, das habe ich jetzt verstanden. Vielen Dank!
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89, C99 und C11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Und da sind wir uns sicher, dass wir als "blutige/r Anfänger/in
" in C hacken wollen? *Kopfkratz* Macht Sinn.
Und jetzt mal die versteckte Kamera aus, warum lernst du nicht zuerst was einfacheres, bspw. Perl oder Java? Sind zwar nicht die schnellsten Sprachen, fliegst du aber auch nicht rasend schnell auf die Fresse mit. C ist nicht nur nicht sonderlich einsteigerfreundlich, sondern haut dir auch erbarmungslos aufs Maul, wenn du einen Fehler (Beispiel hier: Stack-Overflow) machst.
-
Weil ich leider keine andere Wahl habe.
-
Ich hätte noch eine Frage. Wie bekomme ich das Programm dazu, dass es mir sagt wieviele Primzahlen ausgegeben werden. Da brauche ich doch eine Variable, nur was sage ich der, damit sie mir das ausgibt?
Für viele stelle ich wahrscheinlich nerivge und kinderleichte Fragen aber ich bin noch ziemlich am Anfang und bin noch nicht wirklich damit vertraut.
Vielen Dank, fürs Lesen und vielleicht Helfen.
-
Also zunächst mal tut man Code in Codetags:
char*code="Nicht zu verwechseln mit Kot!";
Und wenn du das Manual gelesen hättest, dann wüsstest du das auch -> Siehe auch.
Und da du genau weißt, wie man ein Array durchgeht und die Zahlen im Sieb eleminiert, bin ich mir sicher, dass du bald selbst darauf kommen wirst, wie man in C zählt.
Wie sagt man so schön? Ignoranz ist verzeihbar, Faulheit nicht!