In questa lezione n.4, gli argomenti affrontati sono tre:
- La condizione multipla in C e lo switch ..case
- La struttura enumerativa in C con “enum”
- La generazione dei numeri casuali in C
La condizione multipla o “scelta multipla”, consente al programmatore
di realizzare un struttura di programma che possa verificare se una variabile assume un valore fra “n possibilità”.
In questo modo tale condizione multipla può essere rappresentata
anche da una serie di “if” disgiunti, e solo nel ultimo è previsto l”else” che laddove la variabile non assuma nessuno dei valori viene eseguita un’azione sul falso.
E’ possibile utilizzare alternativamente il costrutto “switch ..case”, che in linguaggio C, Java, C++, C# permette di utilizzare un unico costrutto più sintetico degli “if”.
La struttura dello switch .. case è quindi così strutturata
switch (variabile)
{
case valore 1:
{
istruzioni ;
break;
}
case valore 2:
{
istruzioni ;
break;
}
.....
case valore N:
{
istruzioni ;
break;
}
default:
{
istruzioni;
break;
}
}
E’ essenziale ricordare che sono ammessi solo valori “enumerabili” e non intervalli di numeri reali, stringhe e altro.
E’ possibile definire in C una struttura dati statica detta enumerazione ovvero una collezione di dati statici che possono eventualmente essere utilizzati con valori di riferimento dei possibili valori dello switch .. case e non solo.
La struttura può essere dichiarata con la sintassi:
enum nome {item 1, item 2, item 3, ..., item n};
esempio:
enum colore {rosso, verde, nero, bianco};
E’ importante precisare che è una struttura statica immodificabile e che nella collezione ogni valore ha un indice il primo elemento parte da zero, e l’ultimo elemento l”ennessimo” vale N-1.
E’ utile sfruttare l’associazione con un valore numerico perchè in questo modo posso indicare l’elemento da selezionare.
La gestione dei numeri casuali
Per gestire i numeri casuali in C occorre utilizzare due librerie del linguaggio di programmazione “stdlib.h” e “time.h”.
La prima gestisce il generatore di numeri casuali e non solo la seconda
le funzioni del tempo.
Quando devo generare un numero “quasi casuale” ( si parla di numeri casuali ma il calcolatore genera numeri pseudo-casuali in un prossimo articolo spiegheremo bene il perchè), occorre inizializzare il generatore con un tempo iniziale combinando la funzione srand() della libreria stdlib.h e la funzione time(argomento) un esempio può essere
srand(time(NUll); oppure srand(time(0);
Qual’è il significato delle due istruzioni scritte sopra ?
La funzione srand prevede l’utilizzo di un “seed” o “seme” per generare numeri quanto più casuali possibile:
Se non utilizzassimo una delle due istruzioni citate sopra e estraiamo i numeri casuali avremo sempre gli stessi numeri.
Inserendo time(NULL) o time(0) siamo sicuri che il seme che verrà utilizzato dal generatore per estrarre i numeri è anch’esso casuale.
La funzione effettiva che poi estrae i numeri è rand() che deve obbligatoriamente essere assegnata ad una variabile intera o reale a seconda di come effettuare la generazione dei numeri casuali.
Immaginando di voler generare dei numeri interi fra 0 e N l’istruzione corrispondente sarebbe:
int x;
int N=100;
x=rand() % N+1;
// in questo modo sono estratti i numeri da 1 a 100 (la presenza //
//dell'aggiunta di uno all'espressione escluse che sia estratto zero.
//Se si vuole includere lo zero allora:
x=rand()%(N+1)
Per tutti i casi di studio e ulteriori spiegazioni riferitevi al video sotto riportata
Se vuoi approfondire invece la programmazione in C++, puoi consultare o il blog informaticaopensource.it in abbonamento oppure iscriverti al mio corso sulla piattaforma udemy al link qui