*
 * 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.
 */