La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Un nuovo tipo di dati Gli array. Supponiamo di essere in questa situazione Vogliamo memorizzare 1000 valori per poterli manipolare in momenti diversi.

Presentazioni simili


Presentazione sul tema: "Un nuovo tipo di dati Gli array. Supponiamo di essere in questa situazione Vogliamo memorizzare 1000 valori per poterli manipolare in momenti diversi."— Transcript della presentazione:

1 Un nuovo tipo di dati Gli array

2 Supponiamo di essere in questa situazione Vogliamo memorizzare 1000 valori per poterli manipolare in momenti diversi Non è possibile pensare a dichiarare 1000 variabili Pensate solo a scrivere listruzione che le somma tutte Allora come possiamo fare? Dobbiamo utilizzare una struttura dati.

3 Un dato strutturato è un tipo di dato che attraverso una sola dichiarazione di una sua variabile possiamo memorizzare più dati contemporaneamente. Vi sono strutture dati omogenee ed eterogenee Oggi studiamo quelli appartenenti alla prima classe I vettori

4 Sono strutture dati i cui elementi sono tutti dello stesso tipo I dati in essi contenuti possono essere semplici o strutturati Essi sono caratterizzati da: La dimensione che indica quanti elementi possono contenere Il nome Il tipo cioè il tipo di dati che possono contenere Lindice indica il particolare elemento a cui vogliamo fare riferimento

5 I vettori Graficamente essi sono così rappresentati Questo è un vettore di interi Come vedete esso contiene valori numerici di tipo int Ha dimensione 10 Può contenere valori uguali È residente in memoria centrale e pertanto deve essere inizializzato come tutte le variabili Ecco due esempi di vettori di char abcddefhzq 01a

6 I vettori Dichiarazione di un vettore in C++ Le regole sono: [ ] Alcuni esempi int vett[10]; char nome[20]; const int DIM=30; float classe[DIM]; bool a[15];

7 I vettori Come inserire i dati in un vettore? Gli esempi proposti fanno tutti riferimento a vettori di tipo intero di dimensione DIM =10, indice intero i, ma si possono estendere a vettori di altri tipi. Inizializzazione di un vettore v In modo statico valido per tutte le esecuzioni del programma a livello di dichiarazione Int v[DIM]={0}; Azzera tutti gli elementi del vettore Int v[DIM]={1,3,5,67,34,0,57,12,901,1024}; Attribuisce al vettore v sempre gli stessi valori di partenza

8 I vettori Per accede ad un elemento del vettore devo utilizzare un indice Lindice è generalmente di tipo intero al più enumerativo come i char o color Lindice parte da 0 e assume valore massimo dimensione del vettore -1 Cioè se un vettore ha dimensione 10 lindice assume i valori da 0 a 9 Lindice non può mai essere di tipo float perché indica la posizione allinterno del vettore Dichiarato il seguente vettore int vett[20]; int i; Se voglio stampare a schermo il terzo elemento del vettore scriverò cout<

9 I vettori Inizializzazione di un vettore in modo dinamico e differente per ogni esecuzione for (int i=0;i>v[i]; // inserisce valori dati in input da tastiera Per visualizzare tutti gli elementi for (int i=0;i

10 I vettori Per modificare un elemento cout <> i; cout<>v[i];

11 I vettori Il seguente frammento di codice somma tutti gli elementi del vettore v int s=0; for (int i=0;i

12 I vettori esercizio Cosa fa questo codice? int m=v[0]; for (int i=1;i

13 I vettori Come si passa un vettore come parametro ad una procedura? Supponiamo che si vogliano creare due vettori a e b il primo lungo 20 e il secondo lungo 30: si vuole utilizzare ununica procedura per la creazione, e stampa dei due vettori. Proponiamo il seguente codice

14 #include using namespace std; int a[20],b[30]; void carica(int v[], int dim); void stampa(int v[], int dim); int main(int argc, char *argv[]) { cout<<"inserire i valori del vettore a essi sono 20"<>v[i]; return; } void stampa(int v[], int dim){ for(int i=0;i

15 I vettori: la ricerca Costruiamo una funzione che verifica se un valore è presente nel vettore bool ricerca (int v[],int dim,int x){ bool t=false; for (int i=0;i

16 I vettori: la ricerca bool ricerca2 (int v[],int dim,int x){ bool t=false; Int i=0; while (i

17 I vettori: lordinamento Ordinamento per scambio è lalgoritmo più elementare ma anche il più lento: Esso consiste nel ricercare lelemento più piccolo da inserire nella prima posizione, poi riesegue la ricerca perla seconda e così via void ordinaperscambio (int v[],int dim){ for (int i=0;iv[j]) scambia(v[i],v[j]); return ; } void scambia(int &a,int &b){ int c; c=a; a=b; b=c; return; } La sua complessità algoritmica è n(n-1)/2 cioè O(n 2 ) sempre.

18 I vettori: lordinamento Ordinamento a bolle consiste nel confrontare elementi consecutivi del vettore in modo tale che i valori più alti si spostano in coda al vettore: i confronti si ripetono finchè ci sono scambi:si sfrutta il preordinamento. void ordinaabolle (int v[],int dim){ Int k=dim-1; bool scambio=true; while (scambio==true){ scambio=false; for (int j=0;jv[j+1]) { scambia(v[j],v[j+1]); scambio=true; } k--; } return; }

19 I vettori: lordinamento Ordinamento per inserimento consiste nellordinare il vettore come si ordinano in mano un mazzo di carte: partendo dal secondo elemento si fanno scivolare allindietro tutti gli elementi minori void ordinaperinserimento (int v[],int dim){ Int k; for(int i=1;i=0 && v[k]>v[k+1]){ scambia(v[k],v[k+1]); k--; } return; }

20 I vettori: la ricerca ordinata Se il vettore è ordinato allora lalgoritmo di ricerca migliora e diventa bool ricercaordinata (int v[],int dim,int x){ bool t=false; Int i=0; while (i

21 I vettori: la ricerca binaria Sfruttando lordinamento dei vettori questa ricerca funziona come lelenco telefonico: si divide il vettore a metà e si sceglie quella parte il cui intervallo dei valori appartiene allelemento da cercare finchè si trova lelemento e i due estremi dellintervallo coincidono. void ricercabinaria (int v[],int dim,int x ){ int centro, primo=0, ultimo=dim-1; bool t=false; while (primo<=ultimo && t==false){ centro=(primo+ultimo)/2; if (v[centro]==x) t=true; else if (v[centro]


Scaricare ppt "Un nuovo tipo di dati Gli array. Supponiamo di essere in questa situazione Vogliamo memorizzare 1000 valori per poterli manipolare in momenti diversi."

Presentazioni simili


Annunci Google