# Informatica 2 Liceo Scientifico Scienze Applicate/I vettori

Informatica 2 Liceo Scientifico Scienze Applicate
Copertina Tutti i moduli · Sviluppo
* Linguaggi di programmazioneInformatica 2 Liceo Scientifico Scienze Applicate/Linguaggi di programmazione
* Compilare un programmaInformatica 2 Liceo Scientifico Scienze Applicate/Compilare un programma
* CiaoMondoInformatica 2 Liceo Scientifico Scienze Applicate/CiaoMondo
* AreaRettangoloInformatica 2 Liceo Scientifico Scienze Applicate/AreaRettangolo
* AreaTrapezioInformatica 2 Liceo Scientifico Scienze Applicate/AreaTrapezio
** Compito1Informatica 2 Liceo Scientifico Scienze Applicate/Compito1
* Programmazione ImperativaInformatica 2 Liceo Scientifico Scienze Applicate/Programmazione Imperativa
* Diagrammi di FlussoInformatica 2 Liceo Scientifico Scienze Applicate/Diagrammi di Flusso
* Operatori AritmeticiInformatica 2 Liceo Scientifico Scienze Applicate/Operatori Aritmetici
* Istruzione ifInformatica 2 Liceo Scientifico Scienze Applicate/Istruzione if
** Esercizio Equazione 2^ gradoInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Equazione 2^ grado
** Esercizio Calcola lo ScontoInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Calcola lo Sconto
** Esercizio Calcola lo Sconto2Informatica 2 Liceo Scientifico Scienze Applicate/Esercizio Calcola lo Sconto2
* Operatori LogiciInformatica 2 Liceo Scientifico Scienze Applicate/Operatori Logici
** Esercizio x interno all'intervalloInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio x interno all'intervallo
** Esercizio x esterno all'intervalloInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio x esterno all'intervallo
* Istruzione switchInformatica 2 Liceo Scientifico Scienze Applicate/Istruzione switch
** Esercizio Scelta EquazioneInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Scelta Equazione
* Altre Istruzioni di Scelta o DiramazioneInformatica 2 Liceo Scientifico Scienze Applicate/Altre Istruzioni di Scelta o Diramazione
* Istruzioni di RipetizioneInformatica 2 Liceo Scientifico Scienze Applicate/Istruzioni di Ripetizione
** Es (do-while) Indovina il numeroInformatica 2 Liceo Scientifico Scienze Applicate/Es (do-while) Indovina il numero
** Es (while) La nonna è stancaInformatica 2 Liceo Scientifico Scienze Applicate/Es (while) La nonna è stanca
** Es (for) Somma di 5 numeriInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Somma di 5 numeri
** Es (for) Analisi sequenza datiInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Analisi sequenza dati
** Es (for) Sequenze NumericheInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Sequenze Numeriche
** Es (for) SupermarketInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Supermarket
** Es (while) Bisca ClandestinaInformatica 2 Liceo Scientifico Scienze Applicate/Es (while) Bisca Clandestina
* Compito2Informatica 2 Liceo Scientifico Scienze Applicate/Compito2
* I vettoriInformatica 2 Liceo Scientifico Scienze Applicate/I vettori
** Es Usiamo i vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es Usiamo i vettori
** Es2 Usiamo i vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es2 Usiamo i vettori
** Es3 Supermarket con vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es3 Supermarket con vettori
** Compito dic 2019Informatica 2 Liceo Scientifico Scienze Applicate/Compito dic 2019
** BubbleSortInformatica 2 Liceo Scientifico Scienze Applicate/BubbleSort
** Ricerca DicotomicaInformatica 2 Liceo Scientifico Scienze Applicate/Ricerca Dicotomica
* Matrici e ArrayInformatica 2 Liceo Scientifico Scienze Applicate/Matrici e Array
** Es matrici battaglia navaleInformatica 2 Liceo Scientifico Scienze Applicate/Es matrici battaglia navale
** Es matrici 1Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 1
** Es matrici 2Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 2
* PuntatoriInformatica 2 Liceo Scientifico Scienze Applicate/Puntatori
* StructInformatica 2 Liceo Scientifico Scienze Applicate/Struct
** Es Bubble Sort con StructInformatica 2 Liceo Scientifico Scienze Applicate/Es Bubble Sort con Struct
* FunzioniInformatica 2 Liceo Scientifico Scienze Applicate/Funzioni
* Funzioni Void e non VoidInformatica 2 Liceo Scientifico Scienze Applicate/Funzioni Void e non Void
** esercizi1 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi1 funzioni
** esercizi2 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi2 funzioni
** esercizi3 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi3 funzioni
* BacktrackingInformatica 2 Liceo Scientifico Scienze Applicate/Backtracking
* TemplateInformatica 2 Liceo Scientifico Scienze Applicate/Template
* FileInformatica 2 Liceo Scientifico Scienze Applicate/File
** File di TestoInformatica 2 Liceo Scientifico Scienze Applicate/File di Testo
** File BinariInformatica 2 Liceo Scientifico Scienze Applicate/File Binari
** File RecordsInformatica 2 Liceo Scientifico Scienze Applicate/File Records
** Es FilesInformatica 2 Liceo Scientifico Scienze Applicate/Es Files
* Esercizi VacanzeInformatica 2 Liceo Scientifico Scienze Applicate/Esercizi Vacanze
** Esercizi1Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi1
** Esercizi2Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi2
** Esercizi3Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi3
* Olimpiadi Informatica
** NobileChimicoInformatica 2 Liceo Scientifico Scienze Applicate/NobileChimico
** Sunnydale
** MappaAnticaInformatica 2 Liceo Scientifico Scienze Applicate/MappaAntica
Modifica il sommario

## I Vettori

I vettori sono delle strutture dati omogenee i cui elementi sono accessibili tramite un indice. Finora abbiamo usato delle singole variabili per memorizzare i dati, quando le informazioni diventano tante si utilizzano dei vettori per memorizzare tutte queste informazioni per poi poterle elaborare facilmente.
Un vettore memorizza ciascuna informazione in una cella, se il vettore contiene n elementi (informazioni) ci sono n celle continue in memoria ordinate secondo un indice che assume i valori interi da 0 a n-1 , si parla allora di cella 0, cella 1, cella 2 o ... cella i-esima del vettore. Per accedere a un elemento del vettore bisogna conoscere il nome del vettore e l'indice dell'elemento.Un vettore e' una struttura dati omogenea perché i dati di un singolo vettore sono tutti dello stesso tipo (intero,float,bool,string etc).
per dichiarare un vettore di nome vett in grado di contenere 10 interi si scrive
int vett[10];
e per riferirsi all'elemento di indice 5 si scrive vett[5]
si possono allora scrivere i seguenti comandi:
vett[0]=3; abbiamo caricato nella cella 0 del vettore vett il numero 3;
vett[1]=14; abbiamo caricato nella cella 1 del vettore vett il numero 14;
vett[2]=vett[0]+vett[1]+4; questa istruzione utilizza l'operatore di assegnazione , prima si deve calcolare l'espressione di destra e poi trasferire il risultato nella variabile di sinistra, valutando quello che c'e' a dx si trova che vett[0] vale 3 che vett[1] vale 14, 3+14+4 vale 21 questo numero viene caricato nella cella 2 del vettore
le cose si possono complicare scrivendo vett[vett[0]+2]=7;
cioe' ogni indice puo' essere indicato sia con una costante ma anche tramite una espressione intera , in questo caso l'espressione vale vett[0]+2 visto che vett[0] vale 3 allora vett[0]+2 vale 5 , la precedente istruzione equivale allora ad aver scritto vett[5]=7;
che carica il numero 7 nella cella 5 del vettore vett.
vett[5]=vett[5]+1;
carica il valore 8 nella cella 5 del vettore vett
se il vettore ha 10 elementi l'indice puo' assumere i valori da 0 a 9, e quindi scrivere vett[10]=3; e' un errore perché la cella 10 non esiste nel vettore vett (sarebbe l'undicesimo elemento altrimenti).
in generale per dichiarare un vettore la sintassi da usarsi e'
tipodato nomevettore[numeroelementivettore];
per dichiarare un vettore di 5 stringhe che rappresentino dei nomi possiamo scrivere
string nome[5];
dopo questo comando si hanno a disposizione 5 celle numerate da 0 a 4 accessibili mediante nomevettore[indice] possiamo allora scrivere
nome[2]="luca";
abbiamo allora creato il vettore vett di 10 interi e il vettore nomi di 5 elementi
possiamo dichiarare e inizializzare un vettore con comandi del tipo
int v1[10]= { 3,5,7,-1,3,0,1,12,5,6 }; attenzione a inizializzare il vettore con un numero di elementi uguale a quelli specificato fra parentesi quadrate (nel nostro caso 10), dopo questo comando la cella zero ha assunto il valore 3, la cella uno il valore 5 .... la cella nove il valore 6
oppure int v2= { 3,2,7,-1,1,0 }; in questo caso la dimensione complessiva del vettore e' desunta dal numero di elementi usati per l'inizializzazione, e di solito si fa cosi' per dichiarare e inizializzare contemporaneamente
char v3= { 'a','h','z' };
string v4= { "marco","luca","anna","maria" };
bool v5={ true, false, true, false,false};
double v6={ 2.1, 7.003 , 0,-45.34};
se non viene inizializzato un vettore puo' contenere valori qualsiasi, se i valori di inizializzazione sono minori della dimensione del vettore , gli elementi mancanti sono posti a zero
int va[2000]= { }; crea un vettore di 2000 celle tutte inizializzate a zero
il c non controlla se stiamo accedendo ai dati con un indice corretto, se diamo un indice superiore o uguale alla dimensione n stiamo leggendo o scrivendo celle di memorie che non sono quelle riservate al vettore e questo e' fonte di problemi (o di vantaggi per gli hacker)
il nome di un vettore da solo (senza parentesi quadre) rappresenta l'indirizzo di memoria della cella iniziale del vettore ed e' un valore costante non modificabile , quindi si puo' scrivere cout<<a; e stampa l'indirizzo della cella zero del vettore ma non si puo scrivere a=a+1; perché a e' un valore costante ( che riceve il suo valore nel momento della dichiarazione del vettore (cioe' quando viene allocato in memoria il blocco di celle continue che rappresenta tutto il vettore). Quando viene allocato (cioe' vengono riservate da parte del sistema operativo (che gestisce la ram) le celle di memoria per il vettore) il vettore la sua dimensione e' pari alla dimensione in byte del tipo di dato moltiplicato per il numero di celle , quindi se per memorizzare un intero servono 4 byte, quando creo un vettore di 10 interi lo spazio occupato e' 40 byte, se l'indirizzo iniziale della cella zero vale 134 (esempio) allora la cella 1 inizia all'indirizzo 138 .
se dichiariamo due vettori int a[6]={ 5,6,7,8,9,10 }; int b[7]; non posso scrivere b=a per caricare tutti i valori di a e b, l'istruzione genera poi un errore perché e' un tentativo di modificare il valore costante b , per fare la copia bisogna copiare uno a uno tutti i valori delle celle del vettore a in quelle di b, quindi scrivere delle istruzioni del tipo b[0]=a[0]; poi b[1]=a[1]; etc
e' possibile dichiarare la dimensione di un vettore in fase di compilazione tramite una variabile o una costante quindi possiamo scrivere
int n=10; float vett[n];
oppure const int m=10; float vetta[m];
m e' una variabile costante che nel seguito del programma non potra' essere modificata
e' possibile anche se non conforme allo standard c89 dichiarare la dimensione di un vettore durante l'esecuzione di un programma quindi si puo scrivere
int i;
cin>>i; int vett[i];
in alternativa rispettando lo standard c89 possiamo allocare dinamicamente il vettore con la funzione malloc che vedremo dopo aver studiato i puntatori
la potenza di un vettore si esplica quando si utilizza insieme alle istruzioni cicliche e a uno o piu' contatori.