Dati aggregati. Violetta Lonati

Documenti analoghi
C: panoramica - I parte

Elementi del linguaggio di programmazione C

Esercizi. Stringhe. Stringhe Ricerca binaria

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

Elementi di Informatica A. A. 2016/2017

Esercizio 1: funzione con valore di ritorno di tipo puntatore

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

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

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

Introduzione al linguaggio C Puntatori

Fondamenti di Informatica

Le basi del linguaggio Java

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

Laboratorio di Programmazione I Compitino (Vers. C)

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

Verso i puntatori: Cosa è una variabile?

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Il linguaggio C. Notate che...

Introduzione a Matlab

Struct, enum, Puntatori e Array dinamici

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

Costanti e Variabili

4 GLI ARRAY E LE STRINGHE

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

Università di Roma Tor Vergata L12-1

Stringhe e tipi di dati strutturati

Stringhe e allocazione dinamica della memoria

Caratteri e stringhe

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Lezione 8 Struct e qsort

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Esercitazione 12. Esercizi di Ricapitolazione

Scrittura formattata - printf

SULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI

Informazione e sua rappresentazione: codifica

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Fondamenti di Informatica

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

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

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

Uso avanzato dei puntatori Allocazione dinamica della memoria

Array multidimensionali e stringhe

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

a.a Codice corso: 21012, 22010

Lezione 6 Selection/Insertion Sort su interi e stringhe

Passare argomenti al programma

Struttura dei programmi C

Esercitazione 6. Array

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

Laboratorio di informatica Ingegneria meccanica

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Linguaggio C - Stringhe

Informatica 1. Prova di recupero 21 Settembre 2001

Il paradigma OO e le Classi

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

L Allocazione Dinamica della Memoria

Il linguaggio C Strutture

Un esecutore di un linguaggio simbolico e costituito dalla coppia Compilatore, processore (o Interprete, processore)

FONDAMENTI DI INFORMATICA

Strutture dati e loro organizzazione. Gabriella Trucco

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice:

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Corso di Fondamenti di Informatica Tipi strutturati: Strutture typedef Anno Accademico 2008/2009 Francesco Tortorella

Vittoria de Nitto Personè. Esercizi proposti per il corso Fondamenti di informatica

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

Laboratorio di Algoritmi e Strutture Dati

Esercitazione 4. Comandi iterativi for, while, do-while

Caratteristiche di un linguaggio ad alto livello

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

La sintassi del C APPENDICE H

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

Programmazione II Compitino (Vers. B)

ALGORITMI E STRUTTURE DATI

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

Primi passi col linguaggio C

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Corso di Laurea in Matematica. LABORATORIO DI INFORMATICA Compito Totale - 21 Marzo Soluzione degli Esercizi

Funzioni in C. Violetta Lonati

Come ragiona il computer. Problemi e algoritmi

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Programmazione I - Laboratorio

Strutture. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Programmazione I - Laboratorio

Algoritmi e basi del C Struttura di un programma

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

array: strumento per costruire rappresentazioni di tipi strutturati omogenei

Esercizio 1 Liste: calcolo perimetro di un poligono

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

Linguaggio C - sezione dichiarativa: costanti e variabili

Esercizi Programmazione I

Lezione 9 Esercizi d esame

Indice. Introduzione PARTE PRIMA LE BASI DEL C++: IL LINGUAGGIO C 1

Linguaggio C: introduzione

Programmazione in Java (I modulo)

Transcript:

Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

- in breve: Definizione di tipi Array Stringhe Strutture Enumerazioni

Definizione di tipi La parola chiave typedef consente di definire nuovi tipi a partire da quelli built-in o dai tipi precedentemente definiti Esempio Definiamo un nuovo tipo Bool. Bool potrà essere usato nelle dichiarazioni di variabili esattamente come gli altri tipi built-in. #d e f i n e VERO 1 #d e f i n e FALSO 0 typedef i n t Bool ; / D i c h i a r a z i o n e d e l t i p o Bool / i n t main ( void ) { } Bool f l a g ; / D i c h i a r a z i o n e d e l l a var f l a g / f l a g = VERO; / Assegno a f l a g v a l o r e VERO /...

Array unidimensionali Dichiarazione #d e f i n e N 100 i n t a [N + 2 ] ; Indicizzazione a[ i ] indica l i-esimo elemento dell array a. Al posto di a[ i ] si può mettere una qualsiasi espressione intera. Attenzione agli effetti collaterali in a[ i ] = b[i++]; Inizializzazione i n t a [ 4 ] = {1, 2, 0, 0 } ; i n t b [ ] = {1, 2, 0, 0 } ; i n t c [ 4 ] = {1, 2 } ; Eventuali elementi mancanti sono inizializzati a 0.

Array unidimensionali - continua Lunghezza di un array sizof ( a ) / sizeof( a[0] ) Array costanti const int MESI[i] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} Il qualificatore const rende ogni elemento immodificabile. Esempi f o r ( i = 0 ; i < N; i++ ) a [ i ] = 0 / a z z e r o l array a / f o r ( i = 0 ; i < N; i++ ) s c a n f ( %d, &a [ i ] ) ; / l e g g o e memorizzo in a / f o r ( i = 0 ; i < N; i++ ) p r i n t f ( %d, a [ i ] ) ; / stampo /

Array unidimensionali - errori tipici La dimensione degli array deve essere costante Secondo l ansi C, la dimensione dell array va fissata in fase di compilazione (non di esecuzione) usando un espressione costante. / compilando con gcc pedantic produce warning! / i n t n ; i n t a [ n ] ; Non c è controllo dei limiti i n t a [N], i ; f o r ( i = 0 ; i <= N; i++ ) p r i n t f ( %d\n, a [ i ] ) ; / accede ad a [N] che non e d e f i n i t o!! /

Array unidimensionali - esercizi Rovescia: scrivete un programma che legga una sequenza di numeri interi terminata da 0 e li stampi dall ultimo (0 escluso) al primo. Potete assumere che la sequenza contenga al più 100 numeri non nulli. Cifre ripetute: scrivete un programma che legga in input un numero intero n usando scanf( %d, &n ) e stabilisca se n contiene qualche cifra ripetuta e in caso affermativo quali. Da base 10 a base b: scrivere un programma che data una coppia di numeri interi b e n (separati da spazio e in base 10) stampi la rappresentazione di n in base b. Potete assumere che il numero di cifre in base b sia sempre minore di 100. Da base b a base 10: scrivere un programma che dato un numero b (in base 10) e una sequenza s di cifre in {0,... b 1} terminata da un punto, stampi il numero la cui rappresentazione in base b è data da s. Potete assumere che il numero di cifre di s sia sempre minore di 100.

Array bidimensionali i n t mat [ R ] [ C ], r, c ; / i n i z i a l i z z o a 0 / f o r ( r = 0 ; r < R ; r++ ) f o r ( c = 0 ; c < C ; c++ ) mat [ r ] [ c ] = 0 ; Mappa di memorizzazione Un array di R righe e C colonne viene memorizzato come array di lunghezza R C. In altre parole M[i ][ j ] si trova i C + j posizioni dopo M[0][0]. Inizializzazione i n t a [ 3 ] [ 2 ] = { {1, 2}, {3, 4}, {0, 0} } ; i n t b [ ] [ 2 ] = { {1, 2}, {3, 4}, {0, 0} } ; / non s i puo omettere l a seconda dimensione! / i n t c [ 3 ] [ 2 ] = {1, 2, 3, 4, 0, 0 } ; i n t d [ 3 ] [ 2 ] = {1, 2, 3, 4 } ; / e v e n t u a l i e l e m e n t i mancanti sono i n i z i a l i z z a t i a 0 /

Array bidimensionali - esercizi Esami e studenti: scrivete un programma che permetta di inserire gli esiti di 5 esami per 5 studenti e calcoli la media di ciascuno studente e la media dei voti ottenuti in ciascun esame. Quadrato magico: scrivete un programma che legga un intero n e stampi un quadrato magico di dimensione n.

Stringhe Le stringhe in C sono array di char, terminati dal carattere di fine stringa. Il carattere di fine stringa ha valore 0 (i char sono trattati come interi!), ma è opportuno indicarlo come carattere \0. La lunghezza di una stringa è data dal numero dei suoi caratteri + 1 (per il simbolo di fine stringa). Inizializzazione char p a r o l a 1 [ 5 ] = c i a o ; char p a r o l a 2 [ ] = c i a o ; char p a r o l a 3 [ ] = { c, i, a, o, \0 } ; Lettura e scrittura di stringhe s c a n f ( %s \n, p a r o l a ) ; / senza &!!! / p r i n t f ( %s \n, p a r o l a ) ; Funzioni per elaborare stringhe <string. h> contiene le dichiarazioni di alcune funzioni utili: strcpy, strcmp, strcat, strlen,...

Stringhe - esempio / copia parola in b i s / char p a r o l a [ ] = c i a o, b i s [ 4 + 1 ] ; i n t i ; while ( p a r o l a [ i ]!= \0 ) { b i s [ i ] = p a r o l a [ i ] ; i ++; } b i s [ i ] = \0 ; p r i n t f ( %s \n, b i s ) ;

Stringhe - esercizio Una stringa si dice palindroma se è uguale quando viene letta da destra a sinistra e da sinistra a destra. Quindi enne è palindroma, ma papa non lo è. Scrivete un programma che legga una stringa terminata da. e stabilisca se è palindroma. Potete assumere che la stringa sia al più di 100 caratteri.

Strutture Si tratta di tipi di dati aggregati. Ogni variabile strutturata è composta da membri, ciascuno dei quali è individuato da un nome. Ogni struttura ha un namespace distinto, quindi i nomi dei membri possono essere usati anche per altre cose! In altri linguaggi, le strutture sono chiamate array e i membri campi. / D i c h i a r a z i o n e d e l l a v a r i a b i l e s t r u t t u r a t a studente / / avente 3 membri : nome, cognome, anno. / s t r u c t { char nome [ 1 0 ] ; char cognome [ 1 0 ] ; i n t anno ; } s t u d e n t e ;

Strutture - continua Inizializzazione s t r u c t { char nome [ 1 0 ] ; char cognome [ 1 0 ] ; i n t anno ; } s t u d e n t e 1 = { F e r r a r i, Mario, 1988 }, s t u d e n t e 2 = { R o s s i, Maria, 1988 } ; Accesso ai membri s t u d e n t e. anno = 1987; p r i n t f ( %s \n, s t u d e n t e. nome ) ; Assegnamento E possibile farlo tra due variabili strutturate dello stesso tipo: tutti i membri vengono copiati. s t u d e n t e 1 = s t u d e n t e 2 ;

Definizione di tipi strutturati Ci sono due modi per definire tipi strutturati: / usando un tag / s t r u c t s t u d e n t e { char nome [ 1 0 ] ; char cognome [ 1 0 ] ; i n t anno ; } ;... s t r u c t s t u d e n t e stud1, stud2 ; / usando typedef / typedef s t r u c t { char nome [ 1 0 ] ; char cognome [ 1 0 ] ; i n t anno ; } Studente ;... Studente stud1, stud2 ;

Strutture nidificate typedef s t r u c t { f l o a t x, y ; } Punto ; typedef s t r u c t { punto p1, p2 ; } R e t t a n g o l o ;... R e t t a n g o l o r ; r. p1. x = 0 ; r. p1. y = 1 ; r. p2. x = 5 ; r. p2. y = 3 ; Esercizio: Scrivete un programma che calcoli l area e il perimetro di rettangoli e cerchi.

Array di strutture #d e f i n e LUNG 20 / lunghezza massima per l e s t r i n g h e / #d e f i n e N 100 / numero massimo di v o c i / typedef char S t r i n g a [LUNG + 1 ] ; typedef s t r u c t { S t r i n g a n o m i n a t i v o ; S t r i n g a t e l ; } Voce ;... / d i c h i a r o r u b r i c a come array di N v o c i / Voce r u b r i c a [N ] ; Esercizio: Scrivete un programma per la gestione di una semplice rubrica. Attraverso un menu l utente deve poter visualizzare la rubrica e inserire nuovi numeri.

Enumerazioni Si tratta di tipi di dati i cui valori sono enumerati dal programmatore. enum { CUORI, QUADRI, FIORI, PICCHE } seme1, seme2 ; Ad ogni possibile valore si associa una costante di enumerazione intera. Per default i valori associati alle costanti sono 0, 1, 2,..., in questo ordine. E possibile scegliere altri valori. enum { VENDITE = 1 0, RICERCA = 21, PRODOTTI = 17 } s e t t o r e ; Si possono definire tipi enumerativi usando sia typedef che tag. typedef enum { FALSO, VERO } Bool ;