Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    [c]estrazioni del lotto

    Ciao,
    volevo trovare una procedura per fare in modo di estrarre numeri casuali su una data ruota della lotteria.

    Per ogni ruota vengono estratti cinque numeri. In pratica devo generare dei numeri casuali, e all'estrazione del numero successivo ovviamente non può uscire il numero precedente dato che è già uscito nell'estrazione precedente. Purtroppo però non so da dove partire.

    Qui la mia prima bozza di codice:
    codice:
    #include <stdio.h>
    
    main()
    {
     int i;
     char *estr[]={"prima","seconda","terza","quarta","quinta","sesta","settima","ottava","nona","decima"};
     printf("\n\t\t\t* ESTRAZIONI DEL LOTTO *\n\n");
     for(i=0;i<10;i++) {
         printf("%s estrazione:\n\n",estr[i]);
         
     }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Comincia ad estrarre un numero per una ruota.

    Confronta il numero uscito con tutti quelli gia' usciti per quella ruota; se e' gia' uscito, estraine un altro.

    Continua fino a che hai estratto 5 valori diversi.

    Ripeti le 3 fasi precedenti per ogni ruota.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Grazie.

    Però si è presentato un problema: cioè usare la funzione per estrarre il numero.
    Ho cercato di documentarmi, ma sembra che la funzione rand non sia proprio buona, nel senso che ha qualche problema.
    Mi chiedevo se voi ne conoscete qualcuna di migliore

  4. #4
    Originariamente inviato da cristianc
    Ho cercato di documentarmi, ma sembra che la funzione rand non sia proprio buona, nel senso che ha qualche problema.
    Che problema dovrebbe avere? Per i tuoi scopi va più che bene. Ricordati solo di inizializzare il generatore di numeri casuali prima di richiamare la rand() utilizzando
    codice:
    srand(time(NULL));
    (per la funzione time dovrai includere time.h).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da cristianc
    Ho cercato di documentarmi, ma sembra che la funzione rand non sia proprio buona, nel senso che ha qualche problema.
    Se ti sei documentato, non dire "sembra che" , "ha qualche problema" ... ma dici esattamente qual e' il problema e dove hai letto che esiste questo problema ...

    Da quando "conosco" la rand non mi ha dato mai nessun problema ... :-)

    Mi chiedevo se voi ne conoscete qualcuna di migliore
    "Migliore" ... in cosa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    quindi va utilizzato questo?

    srand(time(NULL));
    i = rand() % 90 + 1;

    "Migliore" ... in cosa?
    per migliore intendo più efficiente

  7. #7
    Originariamente inviato da cristianc
    quindi va utilizzato questo?

    srand(time(NULL));
    i = rand() % 90 + 1;
    Sì, ma la prima riga va richiamata solo una volta all'inizio del programma.
    per migliore intendo più efficiente
    Hai riscontrato problemi di efficienza nella rand()?
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Ho realizzato una primissima versione del programma. Ecco il codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    main()
    {
     int estr;
     int num[10][11][5];
     char *ordine[] = {"prima","seconda","terza","quarta","quinta","sesta","settima","ottava","nona","decima"};
     char *citta[] = {"BARI","CAGLIARI","FIRENZE","GENOVA","MILANO","NAPOLI","PALERMO","ROMA","TORINO","VENEZIA","NAZIONALE"};
     srand(time(NULL));
     printf("\n\t\t\t* ESTRAZIONI DEL LOTTO *\n\n");
     for(estr=0;estr<10;estr++) {
         int ruota;
         printf("%s estrazione:\n\n",ordine[estr]);
         for(ruota=0;ruota<11;ruota++) {
             int i,j;
             printf("%s\t",citta[ruota]);
             for(i=0;i<5;i++) {
                 num[estr][ruota][i] = rand() % 90 + 1;
                 for(j=0; j<i; j++)
                     if (num[estr][ruota][i] == num[estr][ruota][j]) {
                         j=i;
                         i--;
                     }
                     printf("%d ",num[estr][ruota][i]);
             }
             printf("\n\n");
         }
     }
     printf("\n\n");
    }
    Ed ecco il suo output:
    codice:
    			* ESTRAZIONI DEL LOTTO *
    
    prima estrazione:
    
    BARI	12 10 74 15 38 
    
    CAGLIARI	56 50 16 31 81 
    
    FIRENZE	31 84 21 82 73 
    
    GENOVA	15 1 2 75 89 
    
    MILANO	35 63 82 12 64 
    
    NAPOLI	86 11 77 79 15 
    
    PALERMO	29 1 25 64 67 
    
    ROMA	24 81 79 39 21 
    
    TORINO	31 31 15 52 23 87 
    
    VENEZIA	66 75 50 51 35 
    
    NAZIONALE	85 75 26 58 10 
    
    seconda estrazione:
    
    BARI	21 68 87 62 82 
    
    CAGLIARI	77 24 68 12 52 
    
    FIRENZE	1 2 40 40 74 71 
    
    GENOVA	32 88 84 16 46 
    
    MILANO	59 90 6 71 35 
    
    NAPOLI	52 18 22 19 27 
    
    PALERMO	5 48 75 66 39 
    
    ROMA	23 51 69 34 12 
    
    TORINO	69 87 52 70 71 
    
    VENEZIA	84 64 68 77 79 
    
    NAZIONALE	76 7 41 43 40 
    
    terza estrazione:
    
    BARI	75 4 57 58 74 
    
    CAGLIARI	45 62 31 30 89 
    
    FIRENZE	31 52 49 9 48 
    
    GENOVA	61 78 44 74 57 
    
    MILANO	24 67 30 54 15 
    
    NAPOLI	71 39 21 21 81 22 
    
    PALERMO	57 46 78 24 29 
    
    ROMA	33 48 59 24 46 
    
    TORINO	89 37 57 60 84 
    
    VENEZIA	79 47 90 24 65 
    
    NAZIONALE	23 90 57 76 66 
    
    quarta estrazione:
    
    BARI	37 76 48 19 28 
    
    CAGLIARI	70 37 73 19 22 
    
    FIRENZE	63 51 69 83 36 
    
    GENOVA	77 44 73 5 13 
    
    MILANO	28 83 21 27 16 
    
    NAPOLI	85 12 67 13 49 
    
    PALERMO	4 11 87 51 29 
    
    ROMA	24 30 27 59 49 
    
    TORINO	49 83 61 79 76 
    
    VENEZIA	59 27 29 3 31 
    
    NAZIONALE	3 30 75 23 19 
    
    quinta estrazione:
    
    BARI	90 69 82 28 28 40 
    
    CAGLIARI	31 54 88 44 45 
    
    FIRENZE	22 73 71 42 83 
    
    GENOVA	29 34 16 70 19 
    
    MILANO	74 6 9 76 37 
    
    NAPOLI	63 67 21 85 85 73 
    
    PALERMO	26 38 62 69 40 
    
    ROMA	55 32 37 8 76 
    
    TORINO	58 42 57 9 87 
    
    VENEZIA	47 5 12 26 23 
    
    NAZIONALE	85 32 84 84 30 56 
    
    sesta estrazione:
    
    BARI	8 50 13 55 84 
    
    CAGLIARI	38 2 56 68 3 
    
    FIRENZE	72 9 40 79 85 
    
    GENOVA	7 82 51 68 78 
    
    MILANO	7 72 89 85 56 
    
    NAPOLI	45 26 49 38 55 
    
    PALERMO	67 46 66 41 62 
    
    ROMA	60 40 25 77 17 
    
    TORINO	28 58 25 67 8 
    
    VENEZIA	19 35 89 31 12 
    
    NAZIONALE	39 90 45 37 84 
    
    settima estrazione:
    
    BARI	11 44 71 21 81 
    
    CAGLIARI	87 87 88 62 89 21 
    
    FIRENZE	83 38 8 31 54 
    
    GENOVA	35 50 79 63 57 
    
    MILANO	59 7 18 90 71 
    
    NAPOLI	56 89 77 54 44 
    
    PALERMO	87 59 24 70 50 
    
    ROMA	20 28 9 43 27 
    
    TORINO	30 36 64 89 28 
    
    VENEZIA	80 33 78 68 57 
    
    NAZIONALE	44 36 25 23 87 
    
    ottava estrazione:
    
    BARI	5 78 85 44 4 
    
    CAGLIARI	90 2 62 23 71 
    
    FIRENZE	73 4 61 44 47 
    
    GENOVA	87 35 44 22 33 
    
    MILANO	71 11 65 58 40 
    
    NAPOLI	83 64 38 17 86 
    
    PALERMO	34 74 36 81 27 
    
    ROMA	39 80 28 62 13 
    
    TORINO	61 45 68 31 50 
    
    VENEZIA	24 27 84 67 10 
    
    NAZIONALE	26 10 21 52 67 
    
    nona estrazione:
    
    BARI	60 44 40 59 59 88 
    
    CAGLIARI	3 5 33 83 31 
    
    FIRENZE	33 72 21 4 46 
    
    GENOVA	81 10 24 21 59 
    
    MILANO	9 9 52 38 18 77 
    
    NAPOLI	47 90 90 23 22 43 
    
    PALERMO	25 80 65 74 82 
    
    ROMA	69 16 36 62 48 
    
    TORINO	70 82 51 77 34 
    
    VENEZIA	61 62 54 29 71 
    
    NAZIONALE	24 43 18 41 81 
    
    decima estrazione:
    
    BARI	64 3 81 48 24 
    
    CAGLIARI	85 34 65 21 17 
    
    FIRENZE	57 90 32 54 23 
    
    GENOVA	41 33 66 2 72 
    
    MILANO	9 24 43 62 14 
    
    NAPOLI	23 85 56 40 87 
    
    PALERMO	47 65 89 89 23 74 
    
    ROMA	83 56 49 14 73 
    
    TORINO	67 65 66 30 49 
    
    VENEZIA	17 25 24 70 6 
    
    NAZIONALE	32 3 48 55 68
    Ovviamente ho fatto scrivere il numero anche se è ripetuto (ma va corretto) e devo migliorare la formattazione per l'allineamento.

    Volevo chiedervi: con l'istruzione che ho usato viene escluso lo 0?
    E poi: ho notato facendo alcune esecuzioni del programma che si verificano diverse volte ripetizioni di numeri.

    Sì, ma la prima riga va richiamata solo una volta all'inizio del programma.
    si, ma siamo sicuri che la srand vada chiamata una sola volta nel programma o che invece la devo richiamare ogni 5 numeri (cioè quando cambio la ruota)?

    Hai riscontrato problemi di efficienza nella rand()?
    per cercare di documentarmi avevo fatto una ricerca in internet e alcuni risultati davano questa impressione. Ma se questa funzione genera davvero numeri «casuali» allora va bene. L'importante è che funzioni bene Come velocità di calcolo sembra buona

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Ho eliminato la ripetizione del numero ed ho migliorato un po' la formattazione:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    main()
    {
     int estr;
     int num[10][11][5];
     char *ordine[] = {"prima","seconda","terza","quarta","quinta","sesta","settima","ottava","nona","decima"};
     char *citta[] = {"BARI","CAGLIARI","FIRENZE","GENOVA","MILANO","NAPOLI","PALERMO","ROMA","TORINO","VENEZIA","NAZIONALE"};
     srand(time(NULL));
     printf("\n\t\t\t* ESTRAZIONI DEL LOTTO *\n\n");
     for(estr=0;estr<10;estr++) {
         int ruota;
         printf("%s estrazione:\n\n",ordine[estr]);
         for(ruota=0;ruota<11;ruota++) {
             int i,j;
             printf("%-25s",citta[ruota]);
             for(i=0;i<5;i++) {
                 num[estr][ruota][i] = rand() % 90 + 1;
                 for(j=0; j<i; j++) { 
                     if (num[estr][ruota][i] == num[estr][ruota][j]) {
                         j=i;
                         i--;
                     }                 
                     else {
                           printf("%d ",num[estr][ruota][i]);
                           j=i;
                     }
                 }
             }
             printf("\n\n");
         }
     }
     printf("\n\n");
    }
    E questo è l'output:
    codice:
    			* ESTRAZIONI DEL LOTTO *
    
    prima estrazione:
    
    BARI                     36 28 52 24 
    
    CAGLIARI                 59 20 16 32 
    
    FIRENZE                  15 19 83 82 
    
    GENOVA                   18 52 72 7 
    
    MILANO                   88 53 75 6 
    
    NAPOLI                   3 73 88 46 
    
    PALERMO                  85 73 65 70 
    
    ROMA                     33 89 35 26 
    
    TORINO                   12 44 11 70 
    
    VENEZIA                  15 49 87 48 
    
    NAZIONALE                10 46 69 47 
    
    seconda estrazione:
    
    BARI                     30 49 85 79 
    
    CAGLIARI                 8 35 38 34 
    
    FIRENZE                  57 66 64 53 
    
    GENOVA                   83 64 6 3 
    
    MILANO                   40 69 53 88 
    
    NAPOLI                   69 60 34 47 
    
    PALERMO                  46 77 26 3 
    
    ROMA                     29 10 62 28 
    
    TORINO                   37 46 70 11 
    
    VENEZIA                  84 3 86 89 
    
    NAZIONALE                90 90 88 15 
    
    terza estrazione:
    
    BARI                     24 45 57 19 
    
    CAGLIARI                 34 64 40 59 
    
    FIRENZE                  66 49 89 89 
    
    GENOVA                   3 36 83 72 
    
    MILANO                   52 27 10 47 
    
    NAPOLI                   66 9 63 75 
    
    PALERMO                  48 29 2 28 
    
    ROMA                     87 2 31 55 
    
    TORINO                   7 65 80 5 
    
    VENEZIA                  82 40 4 26 
    
    NAZIONALE                17 52 56 64 
    
    quarta estrazione:
    
    BARI                     32 72 63 56 
    
    CAGLIARI                 46 66 46 9 
    
    FIRENZE                  76 5 56 16 
    
    GENOVA                   47 74 85 36 
    
    MILANO                   6 27 42 61 
    
    NAPOLI                   89 77 14 54 
    
    PALERMO                  52 47 45 24 
    
    ROMA                     62 31 2 18 
    
    TORINO                   56 3 5 22 
    
    VENEZIA                  25 30 16 19 
    
    NAZIONALE                56 76 53 59 
    
    quinta estrazione:
    
    BARI                     15 57 84 80 
    
    CAGLIARI                 6 41 81 50 
    
    FIRENZE                  17 22 56 18 
    
    GENOVA                   56 74 3 60 
    
    MILANO                   34 84 86 49 
    
    NAPOLI                   60 66 11 22 
    
    PALERMO                  18 88 53 63 
    
    ROMA                     35 68 79 78 
    
    TORINO                   14 4 63 69 
    
    VENEZIA                  63 34 19 65 
    
    NAZIONALE                75 60 48 32 
    
    sesta estrazione:
    
    BARI                     73 53 46 83 
    
    CAGLIARI                 42 10 34 5 
    
    FIRENZE                  72 1 12 23 
    
    GENOVA                   53 36 44 25 
    
    MILANO                   27 87 62 7 
    
    NAPOLI                   27 43 45 36 
    
    PALERMO                  25 19 36 32 
    
    ROMA                     71 74 35 66 
    
    TORINO                   69 10 80 32 
    
    VENEZIA                  5 29 33 29 
    
    NAZIONALE                21 78 29 79 
    
    settima estrazione:
    
    BARI                     17 31 16 52 
    
    CAGLIARI                 2 32 11 34 
    
    FIRENZE                  43 69 39 71 
    
    GENOVA                   17 42 57 58 
    
    MILANO                   46 62 63 40 
    
    NAPOLI                   82 22 2 72 
    
    PALERMO                  63 88 40 41 
    
    ROMA                     15 4 5 77 
    
    TORINO                   61 30 15 9 
    
    VENEZIA                  32 77 51 51 
    
    NAZIONALE                85 58 30 19 
    
    ottava estrazione:
    
    BARI                     82 10 81 83 
    
    CAGLIARI                 1 17 40 2 
    
    FIRENZE                  13 69 23 17 
    
    GENOVA                   59 77 84 36 
    
    MILANO                   55 29 85 67 
    
    NAPOLI                   90 23 47 29 
    
    PALERMO                  16 72 13 58 
    
    ROMA                     56 58 43 57 
    
    TORINO                   61 69 90 45 
    
    VENEZIA                  16 14 85 10 
    
    NAZIONALE                41 26 39 35 
    
    nona estrazione:
    
    BARI                     80 87 77 88 
    
    CAGLIARI                 80 13 59 55 
    
    FIRENZE                  72 52 36 38 
    
    GENOVA                   59 69 34 13 
    
    MILANO                   49 78 20 20 
    
    NAPOLI                   22 46 89 19 
    
    PALERMO                  78 15 48 75 
    
    ROMA                     90 49 59 54 
    
    TORINO                   53 87 3 50 
    
    VENEZIA                  75 18 64 70 
    
    NAZIONALE                89 29 70 70 
    
    decima estrazione:
    
    BARI                     68 53 17 28 
    
    CAGLIARI                 78 67 47 36 
    
    FIRENZE                  10 87 61 68 
    
    GENOVA                   82 8 67 42 
    
    MILANO                   51 21 67 83 
    
    NAPOLI                   27 73 31 58 
    
    PALERMO                  60 20 9 87 
    
    ROMA                     86 63 9 83 
    
    TORINO                   18 79 7 48 
    
    VENEZIA                  70 1 59 8 
    
    NAZIONALE                62 21 63 90
    Non riesco però a capire come mai ci sono 4 numeri invece di 5

    Ho sempre dubbi sullo 0 e sul fatto di dover chiamare la srand una sola volta nel programma

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Ora come ora non ho visto il perchè dei soli 4 numeri... adesso ho troppo sonno per ragionarci, ci provo domani.

    rand() è (se non sbaglio :S) un Linear Congruential Generator. Cercatelo su wikipedia: cmq il succo del discorso è che

    1) su un computer non puoi mai avere numeri casuali, al massimo pseudocasuali
    2) un LCG ha bisogno di un "seed", ovvero di un numero da cui iniziare la sequenza. La chiamata a srand imposta il seed di rand usando l'orologio di sistema. Perciò basta chiamarlo una volta sola in tutto il programma.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.