Fondamenti di Informatica (lettere

Documenti analoghi
Laboratorio di Informatica

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C

Il linguaggio C. Puntatori e dintorni

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

ESERCIZIO: Lettura/Scrittura Array

Anche se due variabili vettore sono dello stesso tipo, NON è possibile l assegnamento diretto:

Esercitazione 11. Liste semplici

Array e puntatori in C

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

C: panoramica. Violetta Lonati

Array k-dimensionali

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Laboratorio di Informatica

Lezione 8 Struct e qsort

Strutture dati e loro organizzazione. Gabriella Trucco

La classe std::vector della Standard Template Library del C++

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Array multidimensionali e stringhe

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Esercizi C su array e matrici

array: strumento per costruire rappresentazioni di tipi strutturati omogenei

Tipi di dato strutturati: Array

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Elementi di Informatica A. A. 2016/2017

Fondamenti di Informatica T-1 Modulo 2

Le strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?

Multidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice

I Vettori (Array) Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Fondamenti di Informatica

Algoritmi e Strutture Dati

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Costanti e Variabili

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Gli Array. Dichiarazione di un array

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Complessità degli algoritmi. Obiettivi: Calcolare (valutare) la complessità di un algoritmo Confrontare algoritmi risolutivi del medesimo problema

Dati aggregati. Violetta Lonati

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Programmazione I - Laboratorio

Programmazione I - Laboratorio

Fondamenti di Informatica

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi

Il linguaggio C Strutture

LE STRUTTURE DATI PARTE 2: RECORD. Prof. G. Ciaschetti

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Notate che...

IEIM Esercitazione X Ripasso: array, puntatori, ricorsione. Alessandro A. Nacci -

Algoritmi di Ricerca. Esempi di programmi Java

Gli array, le stringhe e le strutture

ALGORITMI E STRUTTURE DATI

Problema. Vettori e matrici. Vettori. Vettori

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Introduzione al linguaggio C Puntatori

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

4 GLI ARRAY E LE STRINGHE

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Array. Anno Accademico 2010/2011 Francesco Tortorella

Un vettore è una struttura dati che permette di memorizzare sequenze di dati omogeneii (sequenze di interi, di valori booleani,...

Politecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale. Informatica B [079904]

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Linguaggio C. Aggregati di dati

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Rappresentazione degli algoritmi

Università di Roma Tor Vergata L12-1

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Gestione di files Motivazioni

Introduzione a Matlab

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di ordinamento: Array e ricorsione

Array. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Ottenere una modifica del parametro attuale

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Cicli annidati ed Array multidimensionali

Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Programmazione Procedurale in Linguaggio C++

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

Stringhe in C. Alessandra Giordani Lunedì 23 aprile 2012

Funzioni, Stack e Visibilità delle Variabili in C

Algoritmi di ordinamento

Array ( vettore/matrice Un dato strutturato. indice Accesso diretto

Tipi di dato e Strutture dati elementari

Cicli annidati e matrici di variabili

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Informatica 1. Prova di recupero 21 Settembre 2001

Corso di Informatica di Base

Esercizi Strutture dati di tipo astratto

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Lezione 3 Tipi di Dato Derivati

Transcript:

Strutture Dati Fondamenti di Informatica (lettere J-Z) C++: Array Prof. Francesco Lo Presti Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato a funzionale a particolari compiti Strutture Dati in C++ Array Strutture Classi Vector Code Liste Stacks Array 2 Array (Vettori) Array: : collezione finita di N variabili dello stesso tipo, ognuna identificata da in indice compreso tra e N-1N N dimensione dell array Due tipi di array in C++ array: C-style vector: : classe Standard Template Library Nel primo modulo studieremo il primo tipo di array Array (Vettori) Le variabili di un array (elementi) vengono identificate da un nome (identificatore)) a cui va aggiunto un indice tra parentesi quadre Indice compreso fra e N-1N I vari elementi sono memorizzati in locazioni successive di memoria Il numero di elementi di un array è fisso v[] v[1] v[2] array v v[n-1] Array 3 Array 4

Dichiarazione di un Array Sassi nometipo nomearray[espressione espressione costante]; Definisce l arrayl nomearray di tipo nometipo con numero di elementi pari ad espressione costante Dichiarazione di un Array E possibile inizializzare i valori di un array in fase di dichiarazione test[5]=-3,67,23,,5; omettendo,, volendo, la dimensione test[ ]=-3,67,23,,5; elenco[1]; double temperature[1]; Dimensione di un array: : numero di byte che l arrayl occupa in memoria numero di elementi*numero di byte per ciascun elemento Array 5 Array 6 Elementi di un Array Gli elementi di un array possono essere usati come una qualsiasi variabile del tipo dell array elenco[5]=3; elenco[9]; cin cin >> >> elenco[7]; elenco[]=elenco[1]-elenco[5]; Accesso agli Elementi di un Array L indice di un array può essere una espr.. costante era elenco[8]; o una qualsiasi espressione era for(i=;i<1;i++) elenco[i]=i*i; elenco[i]; x; x; elenco[x]=elenco[x+1]; Array 7 Array 8

Array: Bound Checking In C++ non è previsto nessun meccanismo di verifica che un indice di un array cada all erno dell ervallo [,,N,N-1] E possibile usare indici negativi o maggiori di N-1N si accede alle celle di memoria che precedono o seguono l area di memoria dove è allocato l arrayl elenco[-5]; elenco[11]=4; Corruzione dello spazio di memoria Crash del programma DA EVITARE!!! Lo considero un errore Array 9 Trovare il valore minimo di un array const const DIM=5; A[DIM]; minimo; // // inserimento dati datiin in A i; i; minimo=a[]; for(i=1;i<dim;i++) if(minimo>a[i]) minimo=a[i]; Il Il minimo minimo è minimo; Array 1 Array: : Assegnamento Per copiare i valori da un array ad un altro si assegnano i valori elemento per elemento Array: : Dimensione Fisica vs. Logica Un array è una collezione finita di N variabili (locazioni di memoria) dello stesso tipo const const DIM=5; A[DIM], B[DIM]; // // inserimento dati datiin in A i; i; for(i=;i<dim;i++) B[i]=A[i]; Non significa che si debbano sempre usare tutte le variabili disponibili La dimensione logica dell array (quanti elementi sono effettivamente utilizzati) può essere inferiore alla sua dimensione fisica La porzione dell array effettivamente utilizzata dipende dai dati di ingresso. Array 11 Array 12

Scrivere un programma che: 1. legge da tastiera delle rilevazioni di temperatura in gradi Kelvin; 2. memorizza i valori in un array 3. calcola la media dei valori inseriti Ogni serie di dati consta al più di 1 valori Si inserisce il valore -11 per indicare che la serie di valori è terminata Array 13 #include<iostream> #include<iostream> using using namespace namespace std; std; main main ( ( ) ) const const DIM=1; DIM=1; temp[dim]; temp[dim]; indice=; indice=; double double media; media; bool bool finito=false; finito=false; do do Inserire Inserire temperatura temperatura o o -1\n ; -1\n ; cin cin >> >> temp[indice]; temp[indice]; finito=temp[indice]==-1; finito=temp[indice]==-1; if( if(!finito)!finito) totale+=temp[indice]; totale+=temp[indice]; indice++; indice++; while(!finito); while(!finito); segue segue if(indice>) if(indice>) media=static_cast<double>(totale)/contatore; media=static_cast<double>(totale)/contatore; La La temperatura temperatura media media e e media; media; \n ; \n ; else else Non Non e e stato stato inserito inserito alcun alcun valore valore \n ; \n ; return return ; ; Array 14 Array come Parametri Gli array possono essere usati come parametri di una funzione Gli array sono sempre passati per riferimento Retaggio del C. L argomento L verrà ripreso in seguito Sassi Dichiarazione tipo tipoarray =tipo =tipo [] [] Definizione double media_array( [], [], ) ) parametro formale array array =tipo =tipo parametro[] all erno del corpo della funzione, i parametri formali di tipo array vengono trattati come array Array 15 double media_array( a[ a[ ], ], numero) // // Calcola al al media degli elementi // // Assume che cheilil numero di di elementi sia sia > > totale=; for( i=; i=; i<numero; i++) i++) totale+=a[i]; return (double) totale/numero; size fornisce la dimensione logica dell array array,, non altrimenti nota all erno dell array quanti sono gli elementi effettivamente utilizzati Array 16

Array come Parametri Array come Parametri Chiamata parametro attuale array array = nome nomearray. Vedremo in seguito il caso generale const DIM=1; temp[dim]; // // riempire parte di di temp con con valori if(indice>) media=media_array(temp,indice); Al momento della chiamata il nome del parametro formale per riferimento diventa un sinonimo (alias) del parametro attuale facente riferimento allo stesso array non si crea un nuovo array ma un riferimento ad una array esistente sicuramente più efficiente Modifica degli elementi dell array parametro formale all erno della funzione rappresenta, in realtà,, una modifica agli elementi dell array parametro attuale Array 17 Array 18 Array come Parametri Se gli elementi della funzione non devono essere modificati si può usare const nella specifica dei parametri formali double media_array(const a[ a[ ], ], numero) // // Calcola al al media degli elementi // // Assume che cheilil numero di di elementi sia sia > > totale=; for( i=; i=; i<numero; i++) i++) totale+=a[i]; return (double) totale/numero; Array 19 Array come Tipo Restituito Non è possibile usare un array come tipo restituito di una funzione double[ ]] funzione() NO! Soluzioni 1. Passare un array per riferimento 2. Restituire un puntatore ad un array (non locale) verrà visto in seguito 3. Usare classe vector verrà visto in seguito Array 2

Elementi di un Array come Parametro Funzione che dato un array calcola il minimo ed il massimo Il minimo ed il massimo vengono restituiti tramite un array a due elementi void void min_max(const min_max(const x[ x[ ], ], l, l, y[ y[ ]) ]) main main (()) const const DIM=1; min, max; max; a[dim], m[2], m[2], indice; // // calcola calcolaminimo minimoe e massimo massimo indice; // // riempire riempireparte parte di di a a con con valori // // e e memorizzali memorizzaliin in min min e e max max valori y[]=min; // // indice indicecontiene contieneilil numero numerodi dielementi y[]=min; y[1]=max; // // di dia a utilizzati y[1]=max; utilizzati min_max(a,indice,m); segue Array 21 segue Gli elementi di un array possono essere passati come parametro sia per valore che per riferimento come variabili qualsiasi i=; i=; x=max(temp[2],temp[5]+temp[7]); swap(temp[i],temp[i+1]); Array 22 Array di Caratteri Array di Caratteri C era una volta Array di caratteri che termina con il carattere \ - come unico modo per rappresentare una stringa \ carattere null o terminatore zero Manipolazione stringhe realizzata manipolando array di tipo char char char saluto[5]= C, i, a, o, \ ; char char saluto[5]= Ciao ; char char saluto[ ]= C, i, a, o, \ ; Array 23 char char s[1]; può memorizzare una stringa fino a 1 caratteri incluso il carattere null C i a o \ s[] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9] Gli elementi di un array di tipo char possono essere manipolati come una variabile char s[2]= r ; s[3]; cin cin >> >> s[1]; s[1]; Array 24

Array di Caratteri A differenza degli altri tipi di array è possibile stampare un array di caratteri (ovvero la stringa corrispondente) char char saluto[5]= Ciao ; saluto come si può leggere da tastiera char char saluto[2]; cin cin >> >> saluto Attenzione: : la stringa inserita non deve eccedere la dimensione dell array array!! Array 25 Array di Caratteri e Stringhe Gli oggetti della classe string possono essere visti come array di caratteri di dimensione grande a piacere i singoli caratteri possono essere modificati come gli elementi di un array di tipo char string saluto= Ciao ; saluto[]= M ; saluto; La classe string fornisce una rappresentazione più astratta di una stringa è più facile lavorare con oggetti della classe string che con array di caratteri Array 26 Array Multidimensionali Lunghezza di una stringa 1. Stringa implementata con un oggetto della Classe string string saluto; i=saluto.length( ); ); 2. stringa implementata con un array di caratteri char char saluto[5]; i=; i=; while(saluto[i]!= \ ) i++; i++; Array 27 E possibile dichiarare array con più di una dimensione Sassi nometipo nomearray[dime1] ] [[dime2] [dimen]; Array a 2 dimensioni vengono solitamente detti matrici mat // // dichiarare una unamatrice //di //di 1x2 elementi double mat[1][2]; 1 1 2 19 9 Array 28

Array Multidimensionali Per accedere all elemento che si trova nella riga i e nella colonna j si utilizza la notazione mat nomearray[i] ] [j]; [j]; mat[1][2]; Stesso principio si applica ad array a più di 2 dimensioni 1 9 1 2 19 mat[1][2] 1 9 Memorizzazione Gli array multidimensionali sono memorizzati per righe in locazioni contigue mat 1 2 19 mat[1][2] mat[][] mat[][1] mat[][19] mat[9][] mat[9][1] mat[9][19] memoria riga riga 9 Array 29 Array 3 Inizializzazione Gli array multidimensionali possono essere inizializzati con una lista di valori di inizializzazione racchiusi tra parentesi graffe nome_tipo nomearray[dim1][dim2]=riga dim2]= ]=riga,,riga 1, 11,riga dim1-1; a[4][4]=1,,,,,1,,, a=,,1,,,,,1; 1 2 1 2 3 1 1 1 Elementi di un Array Multidimensionale Gli elementi di un array multidimensionale possono essere usati come una qualsiasi variabile del tipo dell array a[2][3]=3; a[2][]; cin cin >> >> a[][]; a[3][3]=a[1][3]-a[][2]; 3 1 Array 31 Array 32

Accesso agli Elementi di un Array Multidimensionale Gli indicii di un array mult.. possono essere espr. costanti ere a[2][3]; o una qualsiasi espressione era for(i=;i<1;i++) a[][i]=i*i; a[][i]; x; x; a[1][x]=a[][x+1]; Impostare tutti gli elementi di un array ad 1 const RIGHE=5, COLONNE=2; a[righe][colonne]; i,j; i,j; for(i=;i<righe;i++) for(j=; j<colonne; j++) j++) a[i][j]=1; Array 33 Array 34 Memorizzare la Tavola Pitagorica const RIGHE=1, COLONNE=1; a[righe][colonne]; i,j; i,j; for(i=;i<righe;i++) for(j=; j<colonne; j++) j++) a[i][j]=(i+1)*(j+1); Modificare gli elementi di una riga Impostare gli elementi della riga 3 con il relativo numero di colonna const RIGHE=5, COLONNE=2; a[righe][colonne]; j; j; for(j=; j<colonne; j++) j++) a[3][j]=j; Array 35 Array 36

Modificare gli elementi di una colonna Copiare gli elementi della colonna 3 sulla colonna const RIGHE=5, COLONNE=2; a[righe][colonne]; i; i; for(i=; i<righe; i++) i++) a[i][]=a[i][3]; Array Multidimensionali come Parametri Nel caso di passaggio di array multidimensionali nella dichiarazione bisogna specificare 1. Tutte le dimensioni void void stampa( mat[nrighe][ncolonne]) i,j; i,j; for(i=; i<nrighe; i++) i++) for(j=; j<ncolonne; j++) j++) setw(1) mat[i][j]; \n ; \n ; Array 37 Array 38 Array Multidimensionali come Parametri : Prodotto Matrici Quadrate 2. tutte le dimensioni dalla seconda in poi nel caso di matrici il numero di colonne è essenziale perché il compilatore sappia come accedere agli elementi in memoria void void stampa( mat[ mat[ ][NCOLONNE], n) n) i,j; i,j; for(i=; i<n; i<n; i++) i++) for(j=; j<ncolonne; j++) j++) setw(1) mat[i][j]; \n ; \n ; Array 39 const const N=5; void void prodotto(double prodotto(double [[][N], ][N], double double [[ ][N], ][N], double double [[][N]); ][N]); main main (()) double double A[N][N]; A[N][N]; double double B[N][N]; B[N][N]; double double C[N][N]; C[N][N]; // // inserire inseriredati datiin in A, A, B prodotto(a,b,c); prodotto(a,b,c); // // C=AxB C=AxB void void prodotto(double prodotto(doublex[ X[ ][N], ][N], double double Y[ Y[ ][N], ][N], double double Z[ Z[ ][N]); ][N]); i,j,k; i,j,k; double double somma; somma; for(i=; for(i=; i<n; i<n; i++) i++) for(j=; for(j=; j<n; j<n; j++) j++) somma=; somma=; for(k=;k<n; for(k=;k<n; k++) k++) somma+=x[i][k]*y[k][j]; Z[i][j]=somma; Z[i][j]=somma; Array 4

Ordinamento Ordinamento Una delle operazioni più comune nell elaborazione elaborazione dati Problema: Data una sequenza di elementi a a 1 a n-1 a i eri, double,, stringhe, e un relazione di ordinamento totale tra gli elementi trovare una permutazione degli indici j, j 1,,, j n-1 tale che a j a j1 a jn-1 è ordinata, ovvero tale che a j a j1 a j2 a jn-1 Array 41 Nostra formulazione Problema: Dato un array di, double,, stringhe, etc. a[] a[1] a[2] a[n-1] riorganizzare i valori dell array in modo tale che al termine gli elementi rispettino una relazione di ordinamento (non decrescente) a[] a[1] a[2] a[n-1] eri, double: : crescente, non decrescente, stringhe: lessicografico (del dizionario) altro: da definire volta per volta Array 42 Ordinamento Ordinamento: Bubblesort 34,12,78,9,4,2,45,23,12,1,21 Algoritmo di diordinamento 1,2,4,12,12,21,23,34,45,78,9 Esistono diversi algoritmi di ordinamento Bubblesort, Insertion sort, Quicksort, Mergesort, Heapsort, etc Noi vedremo uno dei più sempici: Bubblesort Ordinamento a bolle Array 43 Si scandisce la lista di elementi confrontando coppie di elementi successivi a[] <-> < > a[1] a[1] <-> < > a[2] a[n-2] <-> < > a[n-1] Per ogni coppia: se i due elementi non sono in ordine (a[i]>a[i+1]) scambiare gli elementi Ripetere fanto che si effettua almeno uno scambio al più n ripetizioni 9 12 4 6 34 25 9 4 12 6 34 25 9 4 6 12 34 25 9 4 6 12 25 34 4 9 6 12 25 34 4 6 9 12 25 34 4 6 9 12 25 34 pass 3 pass 2 pass 1 Array 44

Bubblesort Ricerca void void bubblesort( a[ a[ ], ], n) n) i; i; bool boolswapped; do do swapped=false; for(i=; i<n-1; i++) i++) if(a[i]>a[i+1]) swap(a[i],a[i+1]); swapped=true; while(swapped); Array 45 Array 46 Scrivere una funzione che dato un array di eri a ed un numero x restituisce vero o falso a seconda che x occorra o meno in a bool boolricerca(a[ a[ ], ], n, n, x) bool booltrovato=false; i=; i=; while(i<n and and!trovato) if(a[i]==x) trovato=true; return return trovato; Ricerca Ricerca Binaria L algoritmo di ricerca precedente ha complessità lineare il numero di operazioni richieste è in media proporzionale alla metà del numero di elementi dell array Se il vettore è ordinato, è l algoritmo di ricerca può essere notevolmente migliorato Algoritmo di Ricerca Binaria il numero di operazioni richieste è in media proporzionale al logaritmo (in base 2) del numero di elementi dell array numero di elementi N=1.. N/2=5. log 2 N 2 Array 47 Si assuma che l arrayl sia ordinato in senso non decrescente a[] a[1] [1] a[n] Algoritmo 1. first=, last=n-1, med=(first+last first+last)/2 2. Si confronta l elemento l cercato x con l elemento l mediano del vettore a[med med] 3. Se x=a[med med], ho terminato 4. Altrimenti, se il vettore ha almeno due elementi se x<a[med med] ] si ripete la ricerca nella prima metà del vettore (da a[] a a[med-1]) aggiornare last e med,, andare al passo 2 se x>a[med med] ] si ripete la ricerca nella seconda metà del vettore (da a[med+1] a a[last last]) aggiornare first e med,, andare al passo 2 Array 48

Ricerca Binaria Strutture bool boolricerca_binaria( a[ a[ ], ], n, n, x) x) bool booltrovato=false; first=, last=n-1, med=(first+last)/2; while(first<=last && &&!trovato) if(a[med]==x) trovato=true; else else if(x<a[med] )) last=med-1; else else first=med+1; med=(first+last)/2; return return trovato; è possibile scrivere l algoritmo l in forma ricorsiva Array 49 Una struttura è una collezione finita di variabili dette campi - non necessariamente dello stesso tipo, ognuna identificata da un nome presente anche nel C Sassi struct nome_struttura tipo1 tipo1 nome_variabile1; tipon tiponnome_variabilen; Definisce un nuovo tipo di dato. Differentemente da una classe tutte le variabili sono pubbliche non ci sono funzioni membro associate ad una struttura Array 5 Archivio libri di una biblioteca Un libro è caratterizzato da: titolo, autore, numero copie, ci sono copie disponibili? struct structdatilibro Definizione Struttura string string titolo, titolo, autore; num_copie; bool boolprestito; ; ; Dichiarazioni variabili Struttura datilibro libro1, libro1, libro2, libro2, libri[2]; datilibro libro3= Divina Commedia, Dante, 3, 3, true; true; Strutture Una volta definita una variabile struttura, si accede ai singoli campi mediante la notazione punto I campi di una struttura possono essere usati come qualunque variabile dello stesso tipo libro1.num_copie=2; libro1.titolo; libro2.nun_copie++; Array 51 Array 52

Strutture Una volta definito, un tipo dati struttura si comporta come un qualsiasi altro tipo di dati (che non sia un tipo array di ) In particolare, è possibile: 1. assegnare una variabile struttura ad un altra 2. che una funzione restituisca una struttura 3. passare strutture sia per valore che per riferimento Assegnare una variabile struttura ad un altra datilibro libro1= I Promessi Sposi, Sposi, Manzoni, 2, 2, true; true; datilibro libro2=libro1; che una funzione restituisca una struttura datilibro funzione() Array 53 Array 54 passare strutture sia per valore che per riferimento void void stampa_libro(datilibro x) x) Autore: x.autore \n \n Titolo: x.titolo \n ; \n ; Copie CopieDisponibili: x.num_copie Prestito: x.prestito \n ; \n ; void void aggiungi copia(datilibro& x) x) x.num_copie++; Array 55