Primzahlsuche in C

Hallo,
Ich versuche grade, in C ein Programm zu schreiben, das eine Obergrenze eingeben lässt und dann bis zu dieser alle Primzahlen nach dem Sieb des Erathostenes berechnet. Ich benutze Dev-C++.

Meine Fragen sind:
* Wie kann ich bewirken, dass mein Programm nicht sofort nach der Berechnung wieder zugeht? Ich will ja die Ausgabe noch erkennen können…
Komischerweise ignoriert es sogar, wenn ich ganz unten vor die letzte } nochmal eine Eingabeaufforderung (scanf…) hinschreibe (auf die müsste er doch warten, nich?)
*Sieht auffe Schnelle jemand, warum keine einzige Primzahl ausgegeben wird? (wenn ich 1000000 als obergrenze eingebe, rechnets zwar scheinbar, aber ohne Ausgabe von Zahlen (die müsste ich ja zumindest scrollen sehen). Prüfausgaben kann ich wegen obigem Problem ja nochnich erkennen *lach*

Hier das Programm:
(Ja, noch sehr umständlich teilweise, aber ich wills ja erstmal überhaupt zum laufen kriegen, bevor ich irgendwas optimiere…)

#include 
#include 

int main(void)
{
 int \*value;
 int n, i, j, p = 0;
 printf("Bitte die Obergrenze für die Primzahlsuche eingeben: ");
 scanf("%d",&n);

 value = (int \*)malloc(n\*sizeof(int));

 for(i = 2; i 2; i++)
 {
 //printf("Prüfe %d , value(%d) = %d... \n",i,i,value[i]);
 if(value[i] == 1)
 p = i;
 }
 printf("%d, ",p);


 i = 1;
 while(i\*p 
----------------------------------------------------------------

Viele Grüße!
Giogio

Hallo,

* Wie kann ich bewirken, dass mein Programm nicht sofort nach
der Berechnung wieder zugeht? Ich will ja die Ausgabe noch
erkennen können…

Konfiguriere die Dos-Box so, dass sie nach Ende des Programms nicht von alleine zu geht. Wenn die Umgebung (hier die Dos-Box) das Problemm ist, musst du die Umgebung verbessern, nicht dein Programm.

> #include   
> #include   
>   
> int main(void)  
> {  
> int \*value;  
> int n, i, j, p = 0;  
> printf("Bitte die Obergrenze für die Primzahlsuche eingeben:  
> ");  
> scanf("%d",&n);

n ist also die Obergrenze. Dafür hätte man auch einen aussagekräftigeren Namen finden können :wink:

> value = (int \*)malloc(n\*sizeof(int));  
>   
> for(i = 2; i


Du initialisierst n Werte für value, d.h. von 0 bis n-1. Dann schreibst du aber von 0 .. n, d.h. du schreibst über die Grenze deines Arrays (weshalb das Programm auf meinem Rechner auch einen segfault liefert)



    
    
    
    > /\* Bestimmung des kleinsten noch nicht gestrichenen  
    > Wertes: \*/  
    > p=0;  
    > for(i = n; i \>2; i++)
    




Du lässt i bei der Obergrenze (also z.B. 100) starten, und lässt es weiter laufen, solange es \> 2 ist? Das ist nicht wirklich intuitiv.

Du solltest deine innere Schleife ein wenig einfacher machen, hier ein Vorschlag in Pseudocode:



    
    p = 2; /\* aktuelle Primzahl \*/
    while (p 
    
    HTH,
    Moritz

Hallo Amöbe,

* Wie kann ich bewirken, dass mein Programm nicht sofort nach
der Berechnung wieder zugeht? Ich will ja die Ausgabe noch
erkennen können…

Es genügt, am Ende

getchar();

oder auch

system("pause"); /\* mit stdlib.h \*/

zu schreiben.

lg
Martin B