13/05/11 11:11
Pitagora
Salve a tutti. Ho scritto questo programmino, senza richiamare nessuna funzione dipendente dal sistema. Compilando e avviandolo su ubuntu, nessun problema. Su windows 7 il programma, una volta compilato ed avviato si pianta! Perchè tutto questo?
#include <stdio.h> #include <stdlib.h> #ifndef RANGE #define RANGE 100000 /* sostituire 100000 con un numero più alto per aumentare la capienza */ #endif void ottieni (int *); int main() { int max = 0, contatore = 0; int i, j; FILE *testo = fopen ("file.txt", "w"); int *n_primi_low = malloc (sizeof (int) * RANGE); int *n_primi; if (!n_primi_low) exit (EXIT_FAILURE); ottieni (n_primi_low); for (i = 0, j = 0; i <= RANGE; i++) { if (! n_primi_low[i]) continue; else { max += 1; n_primi[j] = n_primi_low[i]; j += 1; } } free (n_primi_low); n_primi = malloc (sizeof (int) * max); if (!n_primi) exit (EXIT_FAILURE); i = 2; j = 3; fprintf (testo, "2 --> 3\n"); while (contatore <= max) { if ( (n_primi[j] - n_primi[i]) == 2) fprintf (testo, "%d --> %d\n", n_primi[i], n_primi[j]); /* inserisco dentro il file tutti i numeri gemelli */ j += 1; i += 1; contatore += 1; } fclose (testo); free (n_primi); return 0; } void ottieni (int *n_prime) { int a, b; int counter = 3, index = 0; n_prime[index] = 2; /* questo e' l'unico numero primo non dispari */ index += 1; while (counter <= RANGE) { n_prime[index] = counter; counter += 2; index += 1; } for (a = 3; a <= RANGE; a++) { for (b = a + 1; b <= RANGE; b++) { if ( (n_prime[b] % a) == 0) n_prime[b] = 0; } } }
Ultima modifica effettuata da Pitagora 13/05/11 11:14
aaa