*
* Ora introdurremo gli Array, detti anche vettori.
* Un array e' un'insieme di elementi dello stesso tipo, cui e' possibile
* accedere tramite un indice, che e' il numero dell'elemento, partendo da
* zero. Per esempio con indice 0 si accede al primo elemento, con indice
* 3 si accede al quarto elemento. Questi elementi possono essere delle
* veriabili INT,FLOAT, o di altro tipo.
* Agli array si da un nome a piacere, col quale identificheremo tutti gli
* elementi (variabili) che lo compongono.
* Gli Array sono fisicamente una serie di variabili messe in fila in
* memoria ad indirizzi adiacenti.
* Iniziamo con gli array ad una dimensione.
* Gli array monodimensionali (o lineari), possono essere visti come i
* gradini di una scala o le pagine di un libro, ossia come una fila di
* elementi tutti uguali. Supponiamo di trovarci in una zona desolata del
* West, nel deserto degli indiani americani. Ad un certo punto troviamo
* i resti di un binario morto delle vecchie ferrovie: perfetto per
* spiegare gli array monodimensionali! Fatto uno spuntino, analiziamo
* quel pezzo di binario: lo possiamo vedere schematicamente come una
* fila di rettangoli tutti uguali. Dato che il treno non ci passa piu'
* posiamo una mela del nostro pranzo nel primo rettangolo. Abbiamo messo
* la mela nel primo elemento dell'array chiamato BINARIO!.
* Mettiamo che quel binario sia composto da 50 rettangoli "interi":
*
* int binario[50];
*
* Abbiamo definito l'array come una serie di 50 variabili intere.
* Ora, se volessimo riprendere la mela, posta nel primo rettangolo, dovremmo
* riferirci a binario[0], mentre se volessimo accedere all'ottavo
* rettangolo, dato che la numerazione dell'indice parte da 0, dovremmo
* scrivere:
*
* binario[7]
*
* Il formato di una dichiarazione di array e' questo:
*
* tipo nome[dimensione];
*
* tipo = tipo di dati di ogni elemento dell'array (int, float...)
* nome = nome che diamo all'array, a piacere
* dimensione = indice: numero degli elementi che compongono l'array.
*
* Attenzione: se l'array dovesse contenere 4 elementi, la dimensione e' 4,
* e gli indici possibili sono 0,1,2,3.
* Da notare che gli indici sono numeri interi non negativi, e vanno da
* 0 a n-1, dove n e' il numero di elementi.
* Basta ricordarsi che l'array parte da 0, anziche' 1, e il gioco e' fatto.
* Facciamo un esempio:
*
* int vett[4]; * Dichiaro un array composto da 4 interi *
*
* vett[0]=3; * Metto nel primo elemento il valore 3 *
* vett[1]=6; * Metto nel secondo elemento il valore 6 *
* vett[2]=2; * Terzo Elem. = 2 *
* vett[3]=9; * Quarto Elem. = 9 *
*
* Abbiamo definito un array con 4 elementi e li abbiamo "riempiti" con
* dei valori. Dato che questi 4 elementi sono variabili di tipo int, gli
* elementi che abbiamo inserito sono dei numeri interi.
* Il numero che mettiamo tra parentesi quadre e' l'indice, ossia il numero
* di elemento dell'array, partendo da 0.
* In un certo senso, un array e' un insieme di n variabili dello stesso
* tipo che condividono lo stesso nome.
* Per riprendere un valore dall'array, si usa la stessa sintassi:
*
* int vett[4]; * Dichiaro un array composto da 4 interi *
*
* vett[0]=3; * Metto nel primo elemento il valore 3 *
* vett[1]=6; * Metto nel secondo elemento il valore 6 *
* vett[2]=2; * Terzo Elem. = 2 *
* vett[3]=9; * Quarto Elem. = 9 *
* pippo = vett[1]; * Pippo varra' 6 *
* printf("Il terzo elemento vale ", vett[3]); * Stampa 9 *
*
* IMPORTANTISSIMO: Il compilatore non verifica il limite di un array, per
* cui e' possibile superarlo senza segnalazioni di errore, trovandoci
* a scrivere per la memoria del computer mandando in coma il sistema.
* Se per esempio definiamo un array con 33 elementi:
*
* AnniGesu[33];
*
* Non appaiono errori di compilazione se scriviamo troppo avanti:
*
* AnniGesu[50]=4;
*
* Ma dove va a finire il 4 che scriviamo? Se AnniGesu[0] si trovava
* all'indirizzo 2000, ad esempio, AnniGesu[32], l'ultimo elemento, si
* sarebbe trovato all'indirizzo di memoria 2032 (ipotizzando che ogni
* elemento sia lungo un solo byte). Quindi scriveremmo all'indirizzo 2050,
* dove poteva anche esserci qualcosa di utile, ed e' pericolosissimo!
* Come mai il C, che e' il linguaggio piu' usato nelle applicazioni serie,
* non controlla queste cose?
* Proprio perche' si suppone che chi lo usa sia uno a cui non servono le
* cinture di sicurezza quando programma. Inoltre, non eseguendo controlli,
* il programma risulta piu' veloce (senza cinture si lavora meglio!).
* NOTA: Il Java controlla la fine degli array, e non permette di scrivere
* fuori dai loro limiti. Questo per evitare problemi di sicurezza.
* Facciamo una prima prova con gli array.
*/
#include <stdio.h> /* Includiamo la libreria standard */
/* Funzione principale e inizio del programma */
int main(void) /* Funzione principale, eseguita per prima */
{ /* Inizio della funzione main() */
int prova[4]; /* Un array con 4 elementi interi, che
* quindi avra' indici da 0 a 3 */
int pippo; /* Definiamo 1 variabile intera */
prova[0]=20; /* Mettiamo un 20 nel primo elemento del
* nostro bravo array */
printf("\nChe velore metto nel secondo elemento? ");
scanf("%d",&pippo);
prova[1]=pippo; /* Copiamo pippo nel secondo elemento...*/
pippo=pippo*2; /* Si puo' scrivere anche pippo *= 2; */
prova[2]=pippo; /* Il terzo elemento vale pippo*2 */
pippo=prova[0]+prova[1];
prova[3]=pippo; /* Il quarto elemento e' uguale al primo
* piu' il secondo */
printf("\nIl primo elemento vale %d\n", prova[0]);
printf("\nIl secondo elemento vale %d\n", prova[1]);
printf("\nIl terzo elemento vale %d\n", prova[2]);
printf("\nIl quarto elemento vale %d\n", prova[3]);
return(0); /* la funzione main restituisce uno 0 intero */
} /* Fine della funzione main() */
/* Abbiamo eseguito un sacco di operazioni inutili e aggrovigliate, che
* pero' in fondo si possono definire utili per scopi didattici.
*/
