Laboratorio di Informatica

Documenti analoghi
Fondamenti di Informatica II 7. Array e Strutture in C++

Fondamenti di Informatica 12. Linguaggio C -4

Informatica (A-K) 14. Linguaggio C -4

Laboratorio di Informatica

Fondamenti di Informatica

Informatica (A-K) 19. Linguaggio C -6

Fondamenti di Informatica (lettere

Nel seguito, istruzione1 e istruzione2 possono essere un blocco di codice { }, cioè più istruzioni

Fondamenti di Informatica

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ARRAY DI PUNTATORI. ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori

I tipi strutturati e i record in C++

Informatica (A-K) 12. Linguaggio C -3

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

Laboratorio di Informatica I

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

Lezione 6: Array e puntatori

Fondamenti di Informatica

definisce un vettore di 4 puntatori a carattere (allocata memoria per 4 puntatori)!

Il linguaggio C. Puntatori e dintorni

Linguaggio C: Array Valeria Cardellini

Qualsiasi programma in C++ segue lo schema: Variabili

Fondamenti di Informatica Ing. Biomedica

Lezione 8 Struct e qsort

Array k-dimensionali

Quicksort e qsort() Alessio Orlandi. 28 marzo 2010

Array. Unità 7. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Qualsiasi programma in C++ segue lo schema:

Array e puntatori in C

Fondamenti di Informatica

Elementi di Informatica

Introduzione al C. Unità 7 Array. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi

Il linguaggio C. Notate che...

Laboratorio di Informatica

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

C++ funzioni Alberto Ferrari. Alberto Ferrari Programmazione di applicazioni SW

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

Introduzione al linguaggio C Puntatori

Strutture dati e loro organizzazione. Gabriella Trucco

Corso di Programmazione I

Fondamenti di Informatica

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

Informatica (A-K) 5. Algoritmi e pseudocodifica

Lezione 6 Struct e qsort

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

Ambienti di Programmazione per il Software di Base

L AMBIENTE CODE BLOCKS E L IO

Elementi di Informatica A. A. 2016/2017

Università di Roma Tor Vergata L12-1

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Laboratorio di Matematica e Informatica 1

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

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Lezione 8: Stringhe ed array multidimensionali

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

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

Le funzioni: la dichiarazione

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

I Dati Strutturati ed il Linguaggio C

Corso di Fondamenti di Informatica Algoritmi su array / 1

Variabili e Funzioni. Informatica 1 / 19

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

Programmazione C: Esercizi su vettori e funzioni. Titolo presentazione. sottotitolo. Milano, XX mese 20XX

Programmazione I Prova scritta - 10 gennaio h20min

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1)

C: panoramica. Violetta Lonati

Esercitazione di Reti degli elaboratori

Laboratorio di Programmazione e Calcolo

Il linguaggio C. Notate che...

Tipi strutturati - struct

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

Istruzioni Condizionali

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

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

La Standard Template Library Heap, algoritmi e funtori

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

Tipi derivati. Strutture Matrici typedef enum

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

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

L AMBIENTE CODE BLOCKS E L IO

Ripasso R1. Dati strutturati. Esempi. Array. Dichiarazione di un array. Dichiarazione di un array in C

Fondamenti di Informatica Ing. Biomedica

Corso di Informatica A.A

Le funzioni: dichiarazione, definizione e chiamata Il passaggio degli argomenti per valore e riferimento La funzione main() Le regole di visibilità

Ingegneria Elettronica Ingegneria delle Telecomunicazioni (J-Z) Ing. Antonio Monteleone A.A. 2001/02 3 ciclo

Informatica 7. appunti dalle lezioni del 20 e 22/10/2010

Tipi di Dato Derivati

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

A. Veneziani - Le variabili puntatore

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)

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

Algoritmo di ordinamento sul posto che ha tempo di esecuzione :

Laboratorio di programmazione

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014

Elementi di Informatica

Esercizi. La funzione swapint() primo tentativo

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

Transcript:

Strutture Dati in C++ Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Laboratorio di Informatica 4. Array e strutture in C++ Strutture Dati tipiche in C++ Array Matrici Strutture Classi Code (queues) Liste Pile (stacks) ecc Corso di Laurea in Ingegneria Elettronica e Telecomunicazioni A.A. 2013-2014 2 Semestre Prof. Giovanni Pascoschi 2 Array (vettori) Array (vettori) Un array è un insieme finito di N variabili dello stesso tipo, ognuno identificata da un indice compreso tra 0 e N-1 Le variabili di un array (elementi) vengono identificate da un nome a cui va aggiunto un indice tra parentesi quadre (che parte da 0) Memoria In C++ ci sono due tipi di array array (come nel C) vector (classe Standard Template Library) (non in questo corso) sintassi tipo nomearray[espressione costante] p.e. int voti[100]; double temperature[20]; I vari elementi sono memorizzati in locazioni di memoria successive Il numero di elementi di un array è fisso il numero di byte che l array occupa in memoria = numero di elementi * numero di byte per ciascun elemento voti[0] voti[1] voti[2] 8 4 3... 3 4

Elementi di un Array Dichiarazione di un Array Gli elementi di un array possono essere usati come una qualsiasi variabile del tipo dell array Esempi: voti[3] = 28; cout << voti[13]; cin >> voti[32]; voto_diff = voti[2] voti[18]; E possibile inizializzare i valori di un array in fase di dichiarazione Esempi: int temp[6] = {-5, -1, 3, 12, 15, 21 ; oppure int temp[ ] = {-5, -1, 3, 12, 15, 21 ; 5 6 Accesso agli elementi di un Array Bound checking L indice di un array puo essere una espressione costante intera o comunque una qualsiasi espressione intera Esempio: for (int i=0; i< 500; i++) { cin >> voti[i]; cout << voti[i]; Il linguaggio C++ non prevede nessun meccanismo di controllo che un indice di un array cada all interno dell intervallo [0,...,N-1] dove N è la dimensione dell array (bound checking) In teoria è possibile anche usare indici negativi In questi casi di fuoriuscita dell indice dall intervallo si accede a celle di memoria che precedono o seguono l area di memoria dov è allocato l array si sporca l area di memoria producendo in alcuni casi anche il crash del programma o comunque effetti indisiderati nell elaborazione del programma Esempio: cout << voti[ -3]; 7 8

Esempio 1 (algoritmo di massimo con gli array) Passaggio di array come parametri #include <iostream> using namespace std; int main () { int temp[100];...caricamento dei dati nell array... int i, max; for(i=0; i<100; i++) { if(i == 0) max = temp[i]; else { if( temp[i] > max) max = temp[i]; cout << Il valore piu grande è << max; return 0; Gli array possono essere usati come parametri di una funzione Gli array sono sempre passati per referenza (riferimento) Esempio: float media( int [ ], int); float media( int a [ ], int num) media ( temp, numero); // dichiarazione prototipo // definizione della funzione // chiamata della funzione N.B.: bisogna fornire la dimensione dell array alla funzione perchè altrimenti non è nota 9 10 Esempio di passaggio di un array in una funzione Array come parametri #include <iostream> using namespace std; float media(int [ ], int); // prototipo della funzione const int MAX = 100; float med; int main () { int temp[ MAX ]; int num;...caricamento parziale dei dati nell array... med = media( temp, num);... return 0; float media(int a[ ], int numero) { int somma = 0; for (int i=0; i<numero; i++) { somma += a[i]; return somma/numero; Al momento della chiamata il nome del parametro formale passato per riferimento diventa un sinonimo (alias) del parametro attuale facente riferimento allo stesso array (non si crea un nuovo array ma un riferimento ad un array esistente) Ogni modifica degli elementi dell array parametro formale all interno della funzione rappresenta, in effetti, una modifica agli elementi dell array parametro attuale 11 12

Come avere un array come tipo restituito da una funzione? Elementi di un array come parametro Non è possibile usare un array come tipo restituito da una funzione: float[ ] funzione(...) // errore: non è possibile Soluzioni: passare un array per riferimento (dove passera l insieme dei dati) restituire un puntatore ad un array (non locale) vedremo in seguito usare la classe vector (non in questo corso) Gli elementi di un array possono essere passati come parametro sia per valore che per riferimento come delle semplici variabili: p.e.: nel main swap( temp[i], temp[j] ); Definizione della funzione swap(int& a, int& b) 13 14 Array di caratteri Array di caratteri la stringa è un array di caratteri con il terminatore \0 (carattere nullo) la manipolazione delle stringhe si puo realizzare manipolando array di char Esempi equivalenti: char citta = { M, i, l, a, n, o ; char citta[ ] = { M, i, l, a, n, o ; char citta[7] = Milano ; A differenza degli altri tipi di array è possibile stampare ed acquisire un array di caratteri globalmente (stringa): char citta[7] = Milano ; cout<< citta; oppure cin>>nome; 15 16

Array di caratteri e stringhe (differenza) Array di caratteri e stringhe (differenza) Gli oggetti della classe string possono essere considerati come array di caratteri di dimensione grande a piacere Ad esempio per copiare una stringa: I singoli caratteri possono essere modificati come gli elementi di un array di tipo char Esempio string citta = Roma ; citta[1] = i ; cout<<citta; string citta1, citta2; citta1 = citta2; char citta1[10], citta2[10]; strcpy(citta1, citta2); // oggetto della classe string // array di caratteri La classe string fornisce una rappresentazione piu astratta di una stringa ed è piu facile lavorare con oggetti della classe string che con array di caratteri 17 18 Array multidimensionali Matrici E possibile dichiarare array con piu dimensioni Sintassi : tipo nomearray[dim1][dim2]...[dimn]; Gli array a 2 dimensioni si chiamano matrici Per accedere all elemento che si trova nella riga i e nella colonna j si utilizza la seguente notazione: mat[i][j] Esempio: Esempio: cout<< mat[2][3]; // stampa l elemento della matrice di coordinate 2 e 3 float mat[10][5]; // matrice di 10 righe e 5 colonne gli indici di riga e colonna partono entrambi dal valore 0 19 20

Memorizzazione di Matrici Inizializzazione di Matrici Gli array multidimensionali sono memorizzati per righe in locazioni contigue Memoria Gli array multidimensionali possono essere inizializzati con una lista di valori di inizializzazione racchiusi tra parentesi graffe: i 0 1 2 3 4 5 6 j 0 1 2 3 4 mat[0][0]... mat[0][4] mat[1][0]... mat[1][4]... riga 0 riga 1 int mat[3][3]= { {1,0,0, {0,1,0, {0,0,1 ; i 0 1 2 0 1 0 0 1 0 1 0 j 7 8 2 0 0 1 9 21 22 Esempio con matrici Array multidimensionali come parametri Memorizzazione di una tavola pitagorica Nel caso di passaggio di array multidimensionali nella dichiarazione bisogna specificare:... const int ROW=10, COL=10; int mat[row][col]; int i,j; for(i=0; i<row; i++) for(j=0; j<col; j++) mat[ i ] [ j ] = (i+1) * (j+1);... tutte le dimensioni oppure tutte le dimensioni dalla seconda in poi (il compilatore ha bisogno di conoscere queste informazioni per poter accedere agli elementi nella memoria) 23 24

Array multidimensionali come parametri (esempio 1) Array multidimensionali come parametri (esempio 2) void stampa(int mat[row][col]) { void stampa(int mat[ ][COL], int n) { int i, j; for(i=0; i<row; i++) for(j=0; j<col; j++) cout << mat[ i ] [ j ] << endl; int i, j; for(i=0; i<n; i++) for(j=0; j<col; j++) cout << mat[ i ] [ j ] << endl; 25 26 Algoritmi fondamentali sugli array Ricerca sequenziale Algoritmi fondamentali sugli array Ricerca binaria(dicotomica) Scrivere una funzione che dato in input un array di interi serie[ ] ed un numero find, restituisca vero o falso a seconda che il numero find sia presente o meno nell array bool ricerca(int serie[ ], int n, int find) { bool trovato = false; int i = 0; while(i<n &&!trovato) { if(serie[i] == find) trovato = true; i++; return trovato; Scrivere una funzione che dato in input un array ordinato di interi serie[ ] ed un numero find, restituisca vero o falso a seconda che il numero find sia presente o meno nell array Supponiamo che l array sia ordinato in senso crescente: serie[0]<=serie[1]<=...serie[n-1] Passi dell algoritmo 1.sx=0, dx=n-1, med=(sx+dx)/2 2.si confronta l elemento cercato find con l elemento mediano serie[med] 3.se find=serie[med] il numero è presente 4.altrimenti, se il vettore ha almeno due elementi se find<serie[med] si ripete la ricerca nella prima metà del vettore (da serie[0] a serie[med-1] si aggiornano dx e med e si va al passo 2 se find>serie[med] si ripete la ricerca nella seconda metà del vettore (da serie[med+1] a serie[dx] si aggiornano sx e med e si va al passo 2 27 28

Algoritmi fondamentali sugli array Ricerca binaria (dicotomica) Algoritmi fondamentali sugli array Ordinamento bool ricerca(int serie[ ], int n, int find) { bool trovato = false; int sx = 0, dx = n-1, med = (sx + dx)/2; while(sx<=dx &&!trovato) { if(serie[med] == find) trovato = true; else if (find<serie[med]) dx=med-1; else sx=med+1; med=(sx+dx)/2; Dato un array di elementi (interi, float, stringhe,...) serie[ ] ordinare gli elementi dell array in ordine crescente o decrescente, ossia in maniera tale che: serie[0]<= serie[1]<= serie[2]<=...<= serie[n-1] Esistono diversi algoritmi di ordinamento (Bubblesort, Insertion sort, Quicksort, Mergesort, Heapsort, ecc) return trovato; 29 30 Algoritmo di Ordinamento Bubblesort Algoritmo di Ordinamento Bubblesort : esempio si scandisce la lista degli elementi confrontando coppie di elementi successivi: serie[0] con serie[1] serie[1] con serie[2]... serie[n-2] con serie[n-1] 6 25 2 4 45 32 6 2 25 4 45 32 6 2 4 25 45 32 6 2 4 25 32 45 2 6 4 25 32 45 2 4 6 25 32 45 passo 1 passo 2 Per ogni coppia, se i due elementi non sono in ordine p.e. serie[i]>serie[i+1] scambiare gli elementi 2 4 6 25 32 45 passo 3 Ripetere fintanto che si effettua almeno uno scambio (al massimo n ripetizioni) 31 32

Ordinamento Bubblesort Strutture di dati void bubblesort(int serie[ ], int n) { int i; bool swapped; do { swapped=false; for(i=0;i<n-1;i++) { if (serie[i]>serie[i+1]) { swap(serie[i],serie[i+1]); swapped=true; while(swapped); Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna identificata con un nome l insieme dei campi è denominato record sintassi struct nome_struttura { tipo1 nome_variabile1;... tipon nome_variabilen; La struttura definisce un nuovo tipo di dato 33 34 Strutture di dati Strutture di dati Dopo aver definito 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 esempio: cd.prezzo=10; cout<<cd.titolo; cd.copie++; Una volta definito un tipo dati struttura, essa si comporta come un qualsiasi altro tipo di dati. Si puo ad esempio: assegnare una variabile struttura ad un altra far si che una funzione restituisca una struttura alla funzione chiamante passare strutture sia per valore che per referenza (riferimento) 35 36

Esempi strutture di dati Tabelle di dati La tabella di dati è un array di strutture daticd cd1 = { Toccata e fuga, Bach, 30, sinfonia ; daticd cd2 = cd1; //uguaglianza tra strutture void stampa_cd(daticd x) { // passaggio per valore cout<< x.autore<<x.titolo<<x.prezzo<<x.genere<<endl; struct giorno { int gg; int mm; int aa; ; void prezzo_scontato(daticd& x) { x.prezzo=x.prezzo * 80/100; // passaggio per referenza struct daticd { string titolo; string autore; float prezzo; string genere; struct giorno giorno_vendita; ; struct daticd CD[100]; // tabella costituita da 100 CD 37 38 Istruzione typedef Riepilogo della lezione per poter descrivere in maniera piu concisa un tipo struttura si puo usare la parola chiave typedef struct giorno { int gg; int mm; int aa; ; struct daticd { string titolo; string autore; float prezzo; string genere; struct giorno vendita; ; typedef struct daticd cddata; //non definisce un nuovo tipo, ma un sinonimo!!!! cddata CD[100]; // tabella costituita da 100 CD 39 Funzioni in C++ Array in C++ Array come parametro nelle funzioni Array di caratteri Matrici (array multidimensionali) Algoritmi fondamentali sugli array Strutture di dati Tabelle di dati 40

Fine della lezione Domande? 41