Corso di Fondamenti di Informatica



Documenti analoghi
Funzioni in C. Violetta Lonati

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

INFORMATICA - I puntatori Roberta Gerboni

Introduzione alla programmazione in C

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Introduzione al linguaggio C Gli array

Laboratorio di programmazione

Le stringhe. Le stringhe

Record in C: il costruttore struct.

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

puntatori Lab. Calc. AA 2007/08 1

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

LINGUAGGI DI PROGRAMMAZIONE

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Inizializzazione, Assegnamento e Distruzione di Classi

Gestione dei File in C

Allocazione dinamica della memoria - riepilogo

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Visibilità dei Membri di una Classe

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

4 3 4 = 4 x x x 10 0 aaa

Variabili e tipi di dato

Strutturazione logica dei dati: i file

La struttura dati ad albero binario

Le variabili. Olga Scotti

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura


Vettori Algoritmi elementari di ordinamento

Codifica: dal diagramma a blocchi al linguaggio C++

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Gestione della memoria centrale

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

I file di dati. Unità didattica D1 1

Breve riepilogo della puntata precedente:

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Concetto di Funzione e Procedura METODI in Java

Le operazioni di allocazione e deallocazione sono a carico del sistema.

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

Fondamenti di Informatica T. Linguaggio C: i puntatori

Modulo 4: Ereditarietà, interfacce e clonazione

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

La selezione binaria

Esercitazione 10. Strutture ed Enumerazioni. Allocazione dinamica di memoria

RICERCA DI UN ELEMENTO

Definizione di nuovi tipi in C

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Esame del 3 febbraio 2010

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Calcolare il massimo di una lista

Linguaggio C - Stringhe

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

LABORATORIO DI SISTEMI

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

Fondamenti di Informatica 2

Prova Scritta del 19/07/10

Per accedere clicca su START o AVVIO (in basso a sinistra sul tuo schermo), poi su PROGRAMMI, ACCESSORI e infine su BLOCCO NOTE.

Algoritmi e strutture dati. Codici di Huffman

Appunti sulla Macchina di Turing. Macchina di Turing

Database. Si ringrazia Marco Bertini per le slides

Esempio: Array di struct

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Gestione delle stringhe in C

Esercitazione di Basi di Dati

Lezione 9: Strutture e allocazione dinamica della memoria

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

costruttori e distruttori

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Sistema operativo: Gestione della memoria

Plate Locator Riconoscimento Automatico di Targhe

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Rappresentare i nessi logici con gli insiemi

Introduzione al Linguaggio C

LE FUNZIONI A DUE VARIABILI

SIFORM MANUALE VOUCHER FORMATIVI A DOMANDA AZIENDALE

Gestione Risorse Umane Web

Alcune regole di base per scrivere un programma in linguaggio C

Biblioteca di Cervia NOZIONI BASE DI INFORMATICA

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Programmazione dinamica

Transcript:

Corso di Fondamenti di Informatica I tipi strutturati: gli array e le strutture Claudio De Stefano - Corso di Fondamenti di Informatica 1

arrays un array (o vettore) è una sequenza di oggetti dello stesso tipo gli oggetti si chiamano elementi dell'array e si numerano consecutivamente 0, 1, 2, 3.. ; questi numeri si dicono indici dell array, ed il loro ruolo è quello di localizzare la posizione di ogni elemento dentro l array, fornendo acceso diretto ad esso il tipo di elementi immagazzinati nell'array può essere qualsiasi tipo di dato predefinito del C++, ma anche tipi di dato definiti dall utente se il nome del vettore è a, allora a[0] è il nome del primo elemento, a[1] è il nome del secondo elemento, ecc; l elemento i-esimo si trova quindi nella posizione i-1, e se l array ha n elementi, i loro nomi sono a[0], a[1],..., a[n-1]

definizione di array un array si definisce specificando il tipo dei suoi elementi e, tra parentesi quadre, la sua dimensione (o lunghezza): tipo_elementi nome_array[numero_elementi]; dove numero_elementi deve essere o un valore intero, o un espressione costante oppure una variabile che sia stata però istanziata prima della definizione dell'array; ad esempio, per creare un array (lista) di dieci variabili intere, si scrive: int numeri[10]; //Crea un array di 10 elementi int

accesso agli elementi di un array si può accedere ad un elemento dell'array mediante il suo nome ed un indice scorrevole che ne rappresenta la posizione: nomearray[n] C++ non verifica che gli indici dell array stiano dentro la dimensione definita; così, ad esempio, se si accede a numeri[12] il compilatore non segnalerà alcun errore (buffer overflow) int eta[5]; // contiene 5 elementi: il primo, eta[0] e l ultimo, eta[4] int pesi[25], lunghezze[100]; // definisce 2 arrays di interi float salari[25]; // definisce un array di 25 elementi float double temperature[50]; // definisce un array di 50 elementi double char lettere[15]; // definisce un array di caratteri eta[4] // referenzia il quinto elemento del vettore salario[mese[i] * 5] // accede all'elemento del vettore salario il cui // indice è dato dal valore dell'i-esimo elemento del vettore // mese moltiplicato per cinque

allocazione in memoria di un array gli elementi degli arrays si immagazzinano in blocchi contigui; così, ad esempio, gli arrays: int eta[5]; char codici[5]; si rappresentano graficamente così: si può utilizzare l'operatore sizeof per conoscere il numero di bytes occupati dall'array; ad esempio, supponiamo che si definisca un array di 100 numeri interi denominato eta: n = sizeof(eta); assegna 400 ad n; se si vuole conoscere la dimensione di un elemento individuale dell array si può scrivere: n = sizeof(eta[0]);

inizializzazione di un array per assegnare un valore ad un elemento di un array si può usare ovviamentre l'operatore di assegnamento: prezzi[0] = 10; ma assegnare un intero array si può fare solo nella sua definizione: int numeri[6] = {10, 20, 30, 40, 50, 60}; int numeri[] = {10, 20, 30, 40, 50, 60};

array di caratteri e stringhe C++ rappresenta le stringhe di testo inserendole in arrays di caratteri terminandole con il carattere nullo \0 (caso b in figura); senza di esso la stringa non è tale ma è un semplice array di caratteri (caso a) char Stringa2[9] = "Mortimer"

array multidimensionali gli arrays di arrays si dicono bidimensionali; hanno due dimensioni e, pertanto, due indici; sono noti anche con il nome di tabelle o matrici: la sintassi per la dichiarazione è: tipo_elemento nome_array [NumRighe][NumColonne] gli arrays di arrays di arrays sono tridimensionali e così via gli array multidimensionali si inizializzano normalmente; es: int tabella[2][3] = {{51, 52, 53}, {54, 55, 56}}; oppure: int tabella[2][3] = {51, 52, 53, 54, 55, 56}; anche gli assegnamenti sono intuitivi: int x = tabella[1][0] // assegna ad x 54 tabella[1][2] = 58; // sostituisce 58 a 55

passaggio di array come argomenti gli arrays si passano per riferimento; ciò significa che quando s'invoca una funzione e le si passa un array come parametro C++ tratta la chiamata come se vi fosse l operatore di indirizzo & davanti al nome del vettore il 4 nel char[4] della figura precedente può essere omesso, ma se si passano array multidimensionali gli altri indici devono essere specificati; ad esempio, se il vettore c[] fosse stato una matrice l'intestazione della funzione sarebbe stata: cambiare(char c[][4])

dichiarazione di un tipo struttura il formato della dichiarazione è: struct <nome della struttura> { <tipo_dato_campo1> <nome_campo_1>; <tipo_dato_campo2> <nome_campo_2>;... <tipo_dato_campon> <nome_campo_n>; }; ad esempio: struct CD { char titolo[30]; char artista[25]; int num_canzoni; float prezzo; char data_acquisto[8]; }

definizione di variabili di tipo struttura variabili di un certo tipo struct si possono definire di due modi: elencandole dopo la parentesi graffa di chiusura della dichiarazione della struttura struct CD { char titolo[30]; char artista[25]; int num_canzoni; float prezzo; char data_acquisto[8]; } cd1, cd2, cd3; oppure scrivendo il nome della struttura seguita dalle variabili di quel tipo : CD cd1, cd2, cd3;

inizializzazione di variabili di tipo struct una variabile di tipo struttura si può inizializzare in qualunque punto del Gli programma, elementi anche degli nella arrays definizione; si immagazzinano per esempio: in blocchi struct data contigui. Così, ad esempio, gli arrays { int eta[5]; int mese; char codici[5]; int giorno; int anno; si rappresentano graficamente in memoria nella } data_di_nascita = {1,6,1982}; struct CD cd1 = {"Hebron Gate", "Groundation", 9, 11.99, "08/10/07"}; variabili di tipo struttura possono essere assegnate; per esempio: CD cd1, cd2, cd3; cd1 = cd2;

accesso ai campi di una struct per accedere in lettura o in scrittura ad un singolo campo della struttura si utilizza l operatore punto (.) : <variabile_struct>.<nome_campo> = valore; esempi: cd1.prezzo = 30.75; cd1.num_canzoni = 7; strcpy (cd1.titolo, "Io non so parlar d'amore"); cout << "Introduca la potenza del motore: "; cin >> miamacchina.potenzacv; cout <<"La potenza è di << miamacchina.potenzacv << "CV.";

strutture annidate un campo di una struttura può a sua volta essere di tipo struttura; per esempio, la seguente struttura generica: Questa struttura contiene campi che si potrebbero raccogliere in una struttura, info: struct info { char nome[30]; char indirizzo[25]; char citta[20]; char provincia[20]; long int cod_postale; }; può diventare un campo di un'altra struct impiegato { struct info anagrafica; double salario; };

strutture annidate Ogni campo della sottostruttura si raggiunge mediante un doppio uso dell'operatore punto (.); ad esempio, supponiamo di avere definita una variabile x di tipo impiegato; se dobbiamo assegnargli il nome leggendolo dalla tastiera scriviamo: cout << "Introduca il nome dell impiegato: "; cin >> x.anagrafica.nome; Claudio De Stefano - Corso di Fondamenti di Informatica 15

array di strutture gli arrays di strutture sono utili per rappresentare basi di dati : tipo_struttura nome_array [dimensione] ad esempio: libro libri[100]; riserva spazio in memoria per ospitare un array di 100 elementi di tipo libro; per accedere ai campi di ognuno degli elementi struttura si utilizzano l'indice dell'array e l'operatore punto: libri[0].anno = 1994; strcpy(libri[0].titolo, "C++"); strcpy(libri[0].autore, "Luis Joyanes"); strcpy(libri[0].editore, "McGraw-Hill");

unioni somigliano alle strutture, ma invece di allocare i campi in maniera contigua li sovrappongono nella stessa posizione di memoria; la sintassi è: union nome { tipo_1 campo_1;... tipo_n campo_n; }; la quantità di memoria riservata per una unione è data dal campo più grande, perché i campi condividono la stessa zona di memoria; servono per risparmiare memoria

enumerazioni è un tipo definito dall utente costituito da un insieme di costanti; ci sono tre tipi di dichiarazione/definizione: enum {enumeratore1, enumeratore2,..., enumeratore_n}; enum nome {enumeratore1,..., enumeratore_n}; enum nome { enumeratore_1 = espressione_costante_1,... enumeratore_n = espressione_costante_n, }; enum {ROSSO, VERDE, AZZURRO}; equivalente a: const int ROSSO = 0; const int VERDE = 1; const int AZZURRO = 2; con il nome: enum giorni_settimana{lun, MAR, MER, GIO, VEN, SAB, DOM};