okay...errore trovato...era nella funz del...che ho preso con molta fiducia da un programma che avevo fatto qualche tempo fa...pensando che faceva il suo lavoro esattamente, invece, eliminava solo il primo 0 che incontrava nel vettore...e lasciava gli altri...quindi si verificava la divizione per 0 e andava in crash...comunque posto lo stesso il codice, che dovrebbe funzionare...e intanto penso ad un modo per fare l'esercizio senza usare il vettore...
codice:
/*Algoritmo numeri primi*/
#include <stdio.h>
#include <stdlib.h>
void primi ( int*, int* );
void del ( int*, int*);
int main ()
{
int *vet, dim;
int i, N;
printf ("Numero elementi del vettore: ");
scanf ("%d", &dim);
N = dim;
vet = (int *) malloc ( (dim+1) * sizeof(int));
if ( vet == NULL ) {
printf ("Errore allocazione!!\n");
return 0;
}
for ( i=1; i<=dim; i++ )
vet[i]=i;
primi ( vet, &dim);
printf ("Sequenza numeri primi da 1-%d\n", N);
for ( i=2; i<=dim; i++ )
printf ("%4d", vet[i]);
printf ("\n");
free(vet);
system("pause");
return 0;
}
void primi ( int* v, int *size)
{
int x, y;
for ( x=2; x<=*size; x++ ) {
for ( y=x+1; y<=(*size); y++ ) {
if ( (v[y]%v[x]) == 0 )
v[y]=0;
}
del ( v, &(*size) );
}
}
void del ( int *v2, int *dim )
{
int x, y;
for ( x=2; x<=(*dim); x++ ) {
if ( v2[x] == 0 ) {
for ( y=x; y<=(*dim)-1; y++ ) {
v2[y] = v2[y+1];
}
(*dim)--;
x--;
}
}
}