Perche'
usare gli array?
Per comprendere l'utilita' degli array con un esempio
pratico, ritorniamo alla simulazione del lancio di un dado vista la
volta scorsa.
In particolare, scriviamo un programma che simula il
lancio di N=100 dadi, e
che memorizza il numero di uscite delle varie facce.
- Digitare il seguente testo all'interno della finestra dell'editor:
/*
Programma per contare il
#include <stdio.h>numero di occorrenze delle facce di un dado in N lanci */ #include <stdlib.h> #include <time.h> #define N 100 int main () { //dichiarazione variabili} |
> gcc -ostatistica contaFacce.c
- Eseguire il programma per vedere il valore della costante:
> ./statistica
- Digitare il seguente testo all'interno della finestra dell'editor:
/*
Programma per contare il
#include <stdio.h>numero di occorrenze delle facce di un dado in N lanci - versione con array*/ #include <stdlib.h> #include <time.h> #define N 100 int main () { //dichiarazione variabili} |
Quali sono i costrutti nuovi?
La
dichiarazione del vettore
<nome_tipo>
<nome_vettore> [<dimensione>]
che
definisce le variabili
<nome_vettore>[0],
<nome_vettore>[1]...
<nome_vettore>[<dimensione>-1]
tutte dello stesso tipo <nome_tipo>.
Nello specifico, il tipo è int, il nome del vettore è occorrenze, e la sua dimensione è 6.
È importante ricordarsi che la prima posizione del vettore ha indice 0, non 1!
Siccome il vettore contiene 6 elementi, l'ultimo ha indice 5, non 6!
Dopo aver definito il vettore è sempre meglio ricordarsi di inizializzarlo. A questo scopo usiamo un ciclo for che scorre gli elementi del vettore.
Non
abbiamo più bisogno del costrutto switch
per decidere quale variabile
incrementare perché questa è determinata dal valore
sotto esame:
Se valore==0
dobbiamo
incrementare il valore dell'elemento del vettore in posizione
0
Se
valore==1
dobbiamo
incrementare il valore dell'elemento del vettore in posizione
1...
In pratica, se valore==i dobbiamo incrementare il valore dell'elemento del vettore in posizione i.
Infine la stampa
della statistica può essere eseguita
attraverso un comodissimo ciclo.
In altre parole,
usando un array abbiamo reso molto piu' compatto ed efficiente il
nostro programma.
> gcc -ostatistica contaFacce.c
- Eseguire il programma per simulare il lancio del dado:
> ./statistica
Esercitazione
non guidata
Risolvere
il seguente esercizio e spedire il solo
file sorgente
(suffisso .c)
all'indirizzo paolo.santi@iit.cnr.it
all'interno di
un messaggio di posta elettronica con subject: Esercitazione Lezione 5.
Nel messaggio indicare il vostro nome, cognome e gruppo di appartenenza.
Per costruire la cartella, il programma deve generare casualmente 15 numeri DIVERSI compresi tra 1 e 90, memorizzandoli in un vettore di nome cartella. Le prime cinque posizioni (da indice 0 a indice 4) costituiranno la prima riga della cartella, le seconde cinque (da 5 a 9) la seconda riga e le ultime cinque (da 10 a 14) la terga riga.
Una volta generata la cartella, il programma deve stamparla a video, producendo una scritta del tipo:
+----------------+
| 12 8 23 87 45 |
| 4 56 11 74 1 |
| 43 10 46 89 71 |
+----------------+
Infine, il programma deve simulare una
sessione di gioco generando casualmente numeri
compresi tra 1 e 90: ad ogni estrazione, dopo aver controllato che il
numero estratto non sia gia' uscito precedentemente, bisogna verificare
se il
numero è presente nel vettore cartella ed eventualmente sostituirlo col
valore speciale 0.
Inoltre
bisogna segnalare la tombola,
stampando il numero totale di estrazioni necessarie per fare tombola.
Per tener traccia dei numeri usciti si
consiglia di utilizzare un vettore di 90 numeri.
Si raccomanda di stampare, per ogni estrazione, sia la situazione della cartella che il numero estratto.
Se vi trovate a vostro agio, potete usare una matrice (vettore a due dimensioni) invece di un vettore per memorizzare la cartella.