Markort

AcadEx: Lottery Simulation - ITA

Jan 19th, 2013 (edited)
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.47 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <time.h>
  3. #include <stdio.h>
  4. #define NMIN 10
  5. #define NMAX 1000000
  6.  
  7. void estrazione (int*);
  8. int controlloEstr (int*,int);
  9. void controlloVinc (int*,int*,int*);
  10. void getInt (char*,int*,int,int);
  11. void printAr (int*,int);
  12.  
  13. int main () {
  14.   /*dichiaro variabili*/
  15.   int vincente[6], N, i, j, giocata[6], freq[4]={0};
  16.   FILE *fp;
  17.   /*inizializzo seme*/
  18.   srand48(time(0));
  19.   /*intro*/
  20.   printf("Questo programa simula il Superenalotto, estraendo e confontando N sestine con quella vincente. Infine tutte le giocate verrano scritte sul file ''giocate.dat''\n");
  21.   /*estraggo la sestina vincente*/
  22.   estrazione(vincente);
  23.   printf("Sestina vincente: ");
  24.   printAr(vincente,6);
  25.   /*acquisico numero di giocate*/
  26.   getInt ("Inserire il numero di giocate che vuoi effettuare",&N,NMIN,NMAX);
  27.   /*avvio le giocate e controllo le vittorie*/
  28.   if ( (fp=fopen("giocate.dat","w")) != NULL ) {
  29.     for (i=0;i<N;i++) {
  30.       estrazione(giocata);
  31.       controlloVinc (vincente,giocata,freq);
  32.       fprintf(fp,"Giocata#%d: ",i);
  33.       for (j=0;j<6;j++) {
  34.     fprintf(fp,"%d ",giocata[j]);
  35.       }
  36.       fprintf(fp,"\n");
  37.     }
  38.     fclose(fp);
  39.   } else {
  40.     printf("Impossibile aprire il file ''giocate.dat''. Il programma verrà terminato.");
  41.     exit(EXIT_FAILURE);
  42.   }
  43.   /*stampo le percentuali di vittoria*/
  44.   for (i=0;i<4;i++) {
  45.     printf("Freq di %d: %.3lfpercento\n",i+3, ((double)(*(freq+i))*100)/N );
  46.   }
  47.  
  48.   exit(0);
  49. }/*fine main*/
  50.  
  51. void printAr (int* array, int len) {
  52.   int i;
  53.   for (i=0;i<len;i++) {
  54.     printf("%d\t",*(array+i));
  55.   }
  56.   printf("\n");
  57. }/*fine printar*/
  58.  
  59. void controlloVinc (int* vincente, int* giocata, int* freq) {
  60.   int i,j,k;
  61.   k=0;
  62.   for (i=0;i<6;i++) {
  63.     for (j=0;j<6;j++) {
  64.       if (*(vincente+k) == *(giocata+j)) k++;
  65.     }
  66.   }
  67.   if (k>2) {
  68.     printf("Hai vinto con %d numeri uguali. Giocata:\n",k);
  69.     printAr(giocata,6);
  70.     *(freq+k-3) += 1;
  71.   }
  72. }/*fine controllo*/
  73.  
  74. void getInt (char* mess, int* input, int min, int max) {
  75.   do {
  76.     printf("%s tra %d e %d: ",mess,min,max);
  77.     scanf("%d",input);
  78.   } while (*input<min || *input>max);
  79. }/*fine get*/
  80.  
  81. void estrazione (int* array) {
  82.   int i;
  83.   for (i=0;i<6;i++) {
  84.     do {
  85.       *(array+i) = (lrand48()%90)+1;
  86.     } while (controlloEstr(array,i));
  87.   }
  88. }/*fine estrazione*/
  89.  
  90. int controlloEstr (int* array, int ind) {
  91.   int i;
  92.   for (i=0;i<ind;i++) {
  93.     if ( *(array+i) == *(array+ind) ) return 1;
  94.   }
  95.   return 0;
  96. }/*fine controllo*/
Add Comment
Please, Sign In to add comment