01. Es. svolto: estrazioni dall'urna
Traccia:
Scrivere un programma che simula l'estrazione di numeri da un'urna (senza reimbussolamento).
Fare riferimento ad un'urna contenente 90 numeri.
Strategia:
Per simulare l'estrazione senza reimbussolamento, occorre evitare che uno stesso numero possa presentarsi più volte.
A tale scopo si utilizza un array di appoggio, denominato urna, che contiene tutti i numeri inizialmente presenti nell'urna (nel nostro caso da 1 a 90).
Con la funzione rand() si procede alla selezione di un indice i dell'array: il numero estratto coinciderà con il valore contenuto nella cella urna[i].
Quando un numero è estratto si ricalcola un nuovo limite per l'array in modo da escludere l'ultima cella. Contemporaneamente il valore della cella esclusa è ricopiato nella cella urna[i].
Svolgimento:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_BUSSOLOTTI 90
int main()
{
int urna[NUM_BUSSOLOTTI], i, j;
// Caricamento dei numeri nell'urna
for (i=0; i<NUM_BUSSOLOTTI; i++)
urna[i]=i+1;
// Selezione casuale di una sequenza pseudo-casuale
srand(time(NULL));
// Estrazione di tutti i bussolotti (uno alla volta)
for (i=0; i<NUM_BUSSOLOTTI; i++){
j=rand()%(NUM_BUSSOLOTTI-i);
printf("%d ", urna[j]);
urna[j]=urna[NUM_BUSSOLOTTI-i-1]; //ultima cella valida
}
return 0;
}
#define NUM_BUSSOLOTTI 90
Questa istruzione è utilizzata per definire delle costanti.
Per l'esattezza, in fase di precompilazione, il testo NUM_BUSSOLOTTI viene sostituito in tutte le occorrenze presenti nel programma con il valore definito nell'istruzione (nella fattispecie 90). Solo allora la compilazione vera e propria ha inizio.
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 02. Introduzione al C
Paragrafo: 12. Funzione random()
Approfondimento: 01. Es. svolto: estrazioni dall'urna
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. Hello World - 02. Variabile di tipo int - 03. Input da tastiera - 04. Controllo condizionale if - 05. Operatori logici - 06. Ciclo while - 07. Operatore modulo - 08. Array - 09. Ciclo for - 10. Ciclo do/while - 11. Variabili di tipo float - 12. Funzione random() - 13. Impostazione del set di caratteri - 14. Definizione di funzioni - 15. Passaggio di parametri: gli array - 16. Variabili: visibilità e durata - 17. Il tipo char - 18. I file - 19. Funzioni matematiche
Indice degli approfondimenti: 01. Es. svolto: estrazioni dall'urna - 02. Es. svolto: pi greco