Problem mit Zeiger oder mein code?

...komplette Frage anzeigen

1 Antwort

in main:

int p, s; ...

sieb_des_Eratosthenes(N , &p , &s);

Die Platz für die Int-variablen muss ja erst geschaffen werden, dann die Adresse auf die Variable erzeugen mit dem & Operator (das ist die Umkehrung des * Operators, der aus einer Adresse/Zeiger wieder einen Wert macht)

Dann noch viele kleine Fehler. Das N=N*2 am Ende der Schleife.

i<N anstatt i<=N bei der Schleife, oder int  a[N+1] als Deklaration des Arrays machen. Die Indizes bei einem Array mit Größe N gehen von 0 bis N-1.

"false" habe ich mit 0 ersetzt, das kannte mein standard-c-compiler nicht.

(*s)++ anstatt *s++, die Reihenfolge der Operatoren passt sonst nicht.

das s++ raus

void  sieb_des_Eratosthenes (int N , int *p , int *s ){
int a[N];
int i;
for(i=0; i kleiner N; i++)
a[i]=i;
*p=0;
*s=0;
for(i=2 ; i kleiner N ; i++ ){
int j;
for(j=i ; i*j kleiner N; j++ ){
a[i*j]=0;
(*s)++;
}
}
for(i=2 ; i kleiner N ; i++ ){
if (a[i])
(*p)++ ;
}
}

int main (){

int N=4;
int i=1;
int p, s;
for (i ; i kleiner 20 ; i++ ){
sieb_des_Eratosthenes(N , &p , &s);
printf("prim_zahl %d , %d , %d\n", N, p , s);
N=N*2;
}

return 0 ;
}
1
@Maimaier

hier fehlt das #include <stdio.h> am anfang. und das "<" musste ich durch "kleiner" ersetzen, weil ich sonst den Code nicht über Copy&Paste einfügen konnte, warum auch immer.

Auf "http://www.tutorialspoint.com/compile_c_online.php" gibt es ein Segmentation fault bei 32768*2, offenbar ist da int nur 16 bit groß. Sollte daheim aber klappen.

1

Was möchtest Du wissen?