#include #include /* Per time() */ #include /* Per rand */ /* Prototipi delle funzioni */ int isPerm(int *f, int n); /* restituisce !=0 se f e' una permutazione, 0 altrimenti */ int lungorb(int *f, int i); /* restituisce lunghezza dell'orbita di i sotto azione di f */ double casuale(double min); /* genera numero casuale fra min e 1; assume 0<=min<=1 */ void genera_m(double *m, int n); /* genera distribuzione di probabilita' */ double valatt(int *f, double *m, int n); /* valore atteso di f rispetto a m */ double misorb(int *f, double *m, int i, int n); /* misura orbita di i rispetto a m */ /* Implementazioni */ int main(int argc, char* argv[]) { /* Analisi argomenti sulla riga di comando */ if (argc<2) { printf("Errore: Nome del file mancante.\n"); return -1; } /* Apertura del file in lettura */ FILE *file=NULL; if ( (file = fopen(argv[1],"r")) == NULL) { printf("Errore: Non riesco ad aprire in lettura il file specificato.\n"); return -1; } /* Lettura della funzione f: X -> X */ /* Legge cardinalita' di X */ int n = 0; fscanf(file, "%d", &n); getc(file); /* Newline */ /* In alternativa, per trattare il newline: fscanf(f, "%d%*c", &n); L'asterisco in %*c richiede che il dato di tipo char (%c) sia letto da fscanf, ma non assegnato ad una variabile. */ /* Dichiara array valori f(i) */ int f[n]; /* Dichiara array distribuzione di prob */ double m[n]; srand(time(NULL)); /* Inizializza generatore */ genera_m(m, n); /* Genera distribuzione */ /* Legge i valori f(i) */ int j; for (int i=0; i