Fehlersuche!?
-
Zeile 27: Weder ruft man auf diese Weise Funktionen auf, noch ist puts hier die passende Funktion.
Die Logik des Programms scheint mir ebenfalls nicht zu stimmen. Wenn ein Zahl nicht durch eine andere (und zwar irgendeine andere) teilbar ist, ist sie prim? Und wenn doch, dann ... keine Ahnung was dein else-Zweig überhaupt machen soll.
-
Also der Rest der funktion funktioniert!!!
Die Funktion prüft, ob die Zahlen ( in dem Fall bis 100) teilbar sind durch Zahlen zwischen 2 und sich selbst. Sind sie es, sind es keine Primzahlen -> else if -> break. Sind sie es nicht bleibt es beim ersten if zweig und es ist eine Primzahl!
Die Größe des Arrays kann ich nicht angeben, da die Primzahlen ja im fertigen Programm bis ins Bereiche von 100000 Primzahlen angeben soll und ich nicht weiß wieviele das sind.
Bezüglich der Ausgabe des Arrays und der Speicherung in diesen und der initialisierung ist ja meine Frage...
Wäre nett, wenn es dazu antworten geben würde
und nicht mein programm moniert, obwohl es funktioniert...
-
realloc
-
Primax schrieb:
Die Größe des Arrays kann ich nicht angeben, da die Primzahlen ja im fertigen Programm bis ins Bereiche von 100000 Primzahlen angeben soll und ich nicht weiß wieviele das sind.
ohne angabe der array-größe wird aber leider gar nichts passieren.
falls du funktionen wie malloc und realloc noch nicht kennst solltest du zumindest als größe für das array die maximale anzahl an zahlen angeben, die du eben prüfst. mehr primzahlen als zahlen die geprüft werden wird es ja wohl sicher nicht ausspucken.initialisieren kannst du das array einfach auf 0.
dann kannst du für die ausgabe z.b. mit printf in einer schleife jedes element des arrays ausgeben, bis ein element den wert 0 hat.mir fällt grad noch auf, dass deine main keinen rückgabewert hat. return 0 muss als letzte zeile noch rein.
außerdem kann das hier auch nicht so funktionieren wie du es dir vorstellst:
if(is_prim == 1) printf("Primzahl gefunden: %d\n", zahl); Primzahlen[zahl]=zahl;
wenn die if-anweisung wahr ist führt es nur den ersten befehl aus. nicht aber den zweiten, der die zahl in das array schreibt. um letzteres auch noch zu machen musst beide anweisungen in geschweifte klammern tun.
alsoif (is_prim == 1){ printf("Primzahl gefunden: %d\n", zahl); Primzahlen[zahl] = zahl; }
und Primzahlen[zahl] kann so auch nicht gut funktionieren. überleg mal. du findest die erste primzahl...
das währe wohl die 3.
dann kommt die also nach Primzahlen[3] ins 4 element des arrays.
ist das wirklich so von dir gewollt?
wahrscheinlich wirst du sie ja lieber ins erste element des arrays packen wollen. die nächste primzahl, also die 5 möchtest du dann wahrscheinlich ins ins zweite array-element schreiben usw.und was ist mit der primzahl 2?
die soll bestimmt auch in das array. bei deinem programm passiert das aber nicht.
-
Habe es jetzt zu folgendem bearbeitet:
int main() { int Primzahlen[100]; Primzahlen[0]=1; Primzahlen[1]=2; int pruefen, zahl; int is_prim; int i=2; for(zahl=2; zahl<100; zahl++) { is_prim = 0; for(pruefen = 2; pruefen<zahl; pruefen++) { if(zahl % pruefen != 0) { is_prim = 1; } else if(zahl != pruefen) { is_prim = 0; break; } } if (is_prim == 1){ printf("Primzahl gefunden: %d\n", zahl); Primzahlen[i] = zahl; i=i+1; } } for (i=0; i<100; i++) { printf("%i",Primzahlen[i]); } }
Als Ausgabe bekomme ich:(nach dem einzelnen Aufzählen)
1235711131719232931374143475359616771737983899700000000000000000000000000000000001005752484-3019896091606416904327671606570608327671601041101606416688327671606423163327671606416712327671606416712327670116064167363276701001606416752327670000000000Bis zur 97 ist das ja korrekt, dann kommen Nullen und dann wirres Zeug...
Wie verhindere ich das?Und von malloc und realloc habe ich noch nichts gehört.
Ist die Veranstaltung Informatik 1, bin deshalb blutiger Anfänger... Und noch nicht mal Informatiker
-
In Zeile 30 zählst du bis 100, aber in Wirklichkeit hast du viel weniger Primzahlen gefunden.
-
Primax schrieb:
Bis zur 97 ist das ja korrekt, dann kommen Nullen und dann wirres Zeug...
Wie verhindere ich das?Du gibst das ganze Array aus, hast aber nicht jedem Element einen Wert zugewiesen. Deshalb kommen da undefinierte Werte heraus.
Primax schrieb:
Und von malloc und realloc habe ich noch nichts gehört.
Dann mal los mit googeln
-
Habe das ganze jetzt so gelöst:
... for (i=0; Primzahlen[i] != 0; i++) { printf("%i",Primzahlen[i]); ...
-
Primax schrieb:
Und von malloc und realloc habe ich noch nichts gehört.
Das war nicht unsere Idee.
Es waren deine WortePrimax schrieb:
Die Größe des Arrays kann ich nicht angeben,
Und das löst man mit realloc.
Primax schrieb:
Habe das ganze jetzt so gelöst:
Dann musst du aber auch dafür sorgen, dass da Nullen drin stehen. Von alleine passiert das nicht.
-
das problem ist, dass dein programm 25 primzahlen findet. du dir aber alle 100 werte des arrays ausgeben lässt.
alle array-elemente, die keine primzahlen bekommen haben enthalten einfach den müll der sich zufällig im speicher an der stelle befand wo das array-element hingelegt wurde. daher so komische zahlen.du darfst die for-schleife für die ausgabe nur soweit zählen lassen, wie primzahlen im array sind.
z.b. so:
for(zahl=2; zahl<100; zahl++) { // blabla code if (is_prim == 1){ printf("Primzahl gefunden: %d\n", zahl); Primzahlen[i] = zahl; i=i+1; } int anzahl = i; } for (i=0; i < anzahl; i++) { printf("%i",Primzahlen[i]); }
Habe das ganze jetzt so gelöst:
C:
...
for (i=0; Primzahlen[i] != 0; i++) {
printf("%i",Primzahlen[i]);
...geht auch. wird aber nur funktionieren, wenn du das array zu beginn mit null initialisierst.
also ganz am anfang des programms statt
int Primzahlen[100];
einfach
int Primzahlen[100] = { 0 };
ansonsten wird es nicht mit sicherheit das ende finden. es war diesmal zufall, dass nach der 97 nullen kamen. wenn ich dein programm ausführe kommen direkt nach der 97 irgendwelche zahlen aber keine null. wie gesagt, da ist überall einfach müll drin.
deine main hat übrigens immer noch keinen rückgabewert
EDIT: die 1 ist übrigens keine primzahl