Laurea In Ingegneria dell Informazione. Esercitazioni Guidate di Tecniche della Programmazione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Laurea In Ingegneria dell Informazione. Esercitazioni Guidate di Tecniche della Programmazione"

Transcript

1 Laurea In Ingegneria dell Informazione Esercitazioni Guidate di Tecniche della Programmazione Note introduttive: 1) Le soluzioni agli esercizi e le versioni di programmi menzionate nel testo delle esercitazioni sono raggiungibili tramite la pagina web del corso. Nel titolo di ogni sezione di questo documento è specificato tra parentesi il nome del (o dei) file in cui è proposta una soluzione (se disponibile...). 2) I programmi che scriveremo dovranno essere in accordo con la definizione standard ANSI C del linguaggio C; perciò, prima di cominciare vogliamo assicurarci che l ambiente di programmazione che usiamo usi anche lui la medesima definizione. 3) Così, se si usa il Dev C++, ad esempio nella versione (lingua inglese) bisogna andare nel menu Tools, selezionare Compiler Options, scegliere Settings e poi C Compiler (selezionare almeno Support all ANSI Standard C Programs ). 4) In questo blocco abbiamo due EG: la 6 sulle strutture, e la 7 relativa all esercizio Gestione Voli 6. Esercitazione Guidata Uso di struct (punto.c, punto2.c). Scrivere un programma in cui - sia definito il tipo struct punto adatto a rappresentare i punti colorati nel piano cartesiano (due dimensioni); - vengano lette coordinate e colori di due punti e venga costruito il punto intermedio, stampandone i dati (il punto intermedia ha il medesimo colore dei due punti letti, se questi hanno il medesimo colore; altrimenti ha colore NERO ). Scrivere poi il medesimo programma, in cui il tipo dei punti colorati sia TipoPunto, definito mediante typedef ed usato nelle dichiarazioni dei punti usati nel programma Uso di struct (distanze.c). Scrivere un programma in cui viene letta una sequenza di punti colorati (definiti come negli esercizi precedenti) e, per ogni punto letto, dal secondo in poi, viene stampata la distanza colorata tra esso e il precedente. Ci sono dei colori prestabiliti come ammissibili: bianco, rosso, giallo, celeste, blu, NERO Quando viene letto il colore di un punto, se questo e al di fuori dei colori prestabiliti, sara considerato NERO. 1

2 La distanza colorata tra due punti e definita come la coppia <dl, dc>, dove - dl=distanza lineare tra i due punti e - dc=distanza tra i colori dei due punti (stabilita in base alla definizione dei colori prestabiliti data in precedenza: ad es. la distanza tra bianco e rosso e 1, quella tra bianco e giallo e 2, quella tra giallo e nero e 3). Qualche suggerimento per la soluzione segue: non li leggete tutti d un fiato... Suggerimento 0 Quando il programma compila, probabilmente siamo solo a meta dell opera. Provare il programma anche usando le funzionalita di debugging: debugging? What s debugging?? - la linea rossa che si vede in figura e una linea su cui e stato impostato un breakpoint (basta cliccare accanto alla linea per impostare il breakpoint o per rimuoverlo). - Un breakpoint nel punto indicato e utile: cosi possiamo scegliere l opzione di compilazione con debug (F8) e usare F7 (Next Step) per far avanzare l esecuzione del programma passo passo (un istruzione alla volta). - Durante l esecuzione passo passo e utile tener d occhio il contenuto di alcune variabili significative: in figura si vede che e stata impostata la visualizzazione del contenuto delle variabili p1, p2, dc: e stato usato il comando Add Watch. (Nell aggiungere una nuova watch, puo essere necessario eseguire il passo successivo F7 prima di vederla effettivamente.). - La figura mostra un momento dell esecuzione in cui tutte le istruzione di lettura del punto p1 sono state eseguite (la watch su p1 mostra quei valori: 1, 5, rosso). - Se una watch corrisponde a variabili non nello scope dell istruzione in esecuzione, cio viene indicato (ad esempio nel punto del programma in esecuzione non potremmo vedere il contenuto della variabile i definita nella funzione coloreprestabilito(). - Quando e in esecuzione un istruzione di lettura, bisogna andare nella finestra di esecuzione e inserire il dato da leggere 2

3 - Se non si vuole piu procedere passo passo, Shift F7 (Continue) procura l avanzamento dell esecuzione fino alla prossima occorrenza di un breakpoint. Suggerimento 1di5 la struttura del TipoPunto e quella gia vista; inoltre potrebbe convenire dare una definizione di un tipo apposito per la DistanzaColorata. (una struct con un campo double per la distanza lineare e uno int per la distanza tra i colori. Inoltre e bene che sia data una chiara definizione dei colori prestabiliti. Questa potrebbe anche non essere la definizione di un tipo vero e proprio. Una possibilita e quella di usare un array top level di stringhe inizializzato opportunamente COLORI[]={bianco, rosso, giallo, celeste, blu, nero}. 3

4 Suggerimento 2di5 All array COLORI potrebbe essere affiancata una funzione coloreprestabilito che, ricevendo un colore, col, dica se col e o no uno di colori ammessi. Nella soluzione proposta questa e una funzione intera che restituisce 1 se col non e ammissibile, oppure l indice di col nell array COLORI. Suggerimento 3di5 La funzione coloreprestabilito (sempre nella soluzione proposta) viene usata anche per calcolare lo seconda parte della distanza colorata (infatti se il colore di p1 e k1 e il colore di p2 e k2, la distanza tra i colori sara k1-k2 o k2-k1...) Suggerimento 4di5 Schema del programma - lettura primo punto (p1) - ciclo del tipo while (continua!=0) {... } con richiesta finale all utente di inserire 1 se vuole continuare o 0 se vuole terminare (scelta che viene letta in continua). Suggerimento 5di5 4

5 - durante ogni iterazione del ciclo o si legge il punto p2 (si leggono le sue coordinate e colore) o si calcola la distanza colorata tra p1 e p2 (e la si stampa) o l utente indica la sua scelta (se continuare o meno) e di conseguenza viene assegnata la variabile continua. o Infine viene copiato p2 in p1, così in p1 ci sarà l ultimo punto letto da input, e se ne potrà calcolare la distanza da quello successivamente inserito 6.3. Funzioni che ricevono e/o restituiscono struct (punto3.c). Riscrivere il programma del punto 1.1, definendo ed usando le seguenti funzioni: /*funzione che riceve un punto e lo stampa */ void stampapunto(struct Punto p) /* funzione che riceve due punti e ne restituisce il punto medio */ struct Punto puntomedio(struct Punto pr, struct Punto sec) 6.4. Funzioni che ricevono puntatori a struct (punto4.c). Scrivere un programma che soddisfi i seguenti requisiti: - il programma legge i dati relativi a due punti colorati (definiti come in precedenza) - il programma calcola e stampa i dati relativi al punto medio tra i due letti da input; - poi il programma chiede in input un colore e assegna tale colore a tutti e tre i punti, stampandone successivamente i dati in output. Il programma deve far uso delle funzioni definite nell esercizio precedente e della funzione void cambiacolorea(tipopunto *p, char col[]) che, ricevendo un punto (o meglio, il suo indirizzo), e un colore (col), modifica il punto assegnandogli col come colore. Suggerimento: conviene prendere come punto di partenza il programma fatto per l esercizio precedente, aggiungendo la nuova funzione e modificando opportunamente la main(). 5

6 6.5. Funzioni che ricevono puntatori a struct (punto5.c). Ripetere l esercizio del 2.3, definendo e utilizzando, per la lettura di ciascun punto, una funzione leggipunto(...) Suggerimento 1di2: la funzione deve ricevere un punto e riempirlo con dati letti da input. Suggerimento 2di2: quindi la funzione deve ricevere l indirizzo del punto da riempire Funzioni che restituiscono puntatori a struct (punto6.c). Rifacendosi a quanto fatto in precedenza, scrivere una funzione creapuntomedio(...) che, ricevendo due punti, restituisce una struct appositamente allocata dinamicamente, contenente la rappresentazione del punto medio tra i due parametri. Suggerimento 1di2: Si tratta di rifare l esercizio precedente, ma sostituendo la funzione puntomedio con quella qui richiesta (che restituisce un puntatore a struct Punto e non una struct Punto. Suggerimento 2di2: ecco uno stralcio del programma PUNTO6.C in cui si vede come viene usata la funzione creapuntomedio: int main(){ TipoPunto p1, p2, *pm; /* puntatore per il punto medio */ printf("primo punto:"); leggipunto(&p1); printf("secondo punto:"); leggipunto(&p2); pm = creapmedio(p1, p2); /* la chiamata a pmedio restituisce il puntatore ad una struct che e' stata allocata appositamente, e che rappresenta il punto medio tra p1 e p2 */ printf(" - adesso i tre punti sono:\n - p1 = "); 6

7 6.7. Quadrilateri (quadri.c). L oggetto di questo esercizio e un programma capace di gestire quadrilateri dati in input. Un quadrilatero viene specificato come l insieme dei suoi quattro vertici, che sono punti colorati sul piano (cioe variabili del tipo TipoPunto definito precedentemente). Supponiamo che i punti dati in input siano tutti distinti e diano luogo ad una figura in cui i lati sono a 90 gradi. Cio assunto, il programma - costruisce un quadrilatero allocando dinamicamente un array di quattro punti e leggendo i dati relativi ai quattro vertici; - verifica se il quadrilatero e un quadrato - verifica se il quadrilatero e isotetico, cioe i suoi lati sono paralleli agli assi cartesiani; - stampa i dati dei quattro vertici e stampa un messaggio in cui sia specificato se il quadrilatero e o no un quadrato ed e o no isotetico. Se quad e l identificatore usato per il quadrilatero nel programma, si assume anche che i punti siano distribuiti come nel disegno qui sotto: quad[0] quad[1] quad[3] quad[2] Usare nel programma le seguenti funzioni: - void stampapunto(tipopunto ) (per stampare i dati di un punto passato per parametro) - void leggipunto( TipoPunto *) (per leggere un punto) - void leggiquadrilatero(tipopunto q[4]) (per leggere l intero quadrilatero, usando leggipunto); - void stampaquadrilatero(tipopunto q[4]) (per stampare i dati del quadrilatero, ad esempio come sequenza dei punti che ne sono vertici); - double lunghezza(tipopunto primo, TipoPunto secondo) (per calcolare la distanza tra due punti) Suggerimento 1di2: 7

8 per verificare che il quadrilatero quad sia un quadrato basta verificare che siano uguali le misure dei suoi lati (cioe' delle distanze tra vertici consecutivi: quad[0]--quad[1], quad[1]-- quad[2], quad[2]--quad[3], quad[3]--quad[0],). Per calcolare la lunghezza del lato quad[k]quad[h] si usa la funzione lunghezza(...). Suggerimento 2di2: per verificare che i lati sono paralleli agli assi, bisogna verificare che i lati - quad[0]--quad[1] e quad[2]--quad[3] sian paralleli all'asse delle ascisse - quad[1]--quad[2] e quad[3]--quad[0] sian paralleli all'asse delle ordinate. 8

9 7. Esercitazione Guidata 7 Qui ci occupiamo di scrivere un programma abbastanza lungo, dedicato alla gestione di una tabella di dati. Una tabella e una struttura dati che rappresenta all interno di un programma, un archivio di dati del mondo reale Cos e una tabella (in breve...) Di solito la tabella viene definita per permettere la gestione automatizzata di una collezione di dati strutturati (dati composti da varie informazioni di tipo disomogeneo e quindi normalmente rappresentati mediante struct). Un esempio di tabella e l elenco telefonico (una collezione di elementi; ciascu elemento e l insieme di dati relativi ad una persona, come il nome, l indirizzo, il numero di telefono, titoli professionali etc...). Un altro esempio e l elenco degli iscritti ad una associazione (anche qui ogli elemento in tabella e una collezione di dati relativi ad una persona, come il nome e indirizzo, ma anche l anzianita d iscrizione, la quota associativa pagata etc...). Le funzioni generiche di gestione di una tabella sono - l aggiunta di un elemento nella tabella, - l eliminazione di un certo elemento, - la modifica dei dati memorizzati in un un certo elemento - e la ricerca di un certo elemento tra quelli memorizzati nella tabella. Di solito uno dei dati memorizzati in ciascun elemento lo caratterizza univocamente e permette di distinguere quell elemento da tutti gli altri: ad esempio il codice fiscale permette di specificare una certa persona; la matricola permette di indicare univocamente uno degli associati al club, etc... Questi dati caratteristici vengono denominati chiavi di ricerca, o piu brevemente, chiavi, e vengono usati quando si stanno effettuando operazioni di ricerca e selezione di un certo elemento nella tabella Gestione voli (primo passo VOLI1.C) Il programma deve permettere la gestione di un archivio contenente informazioni sui voli aerei di un certo giorno. Un volo e' caratterizzato da o codice (5 caratteri alfanumerici) o destinazione (stringa di caratteri) o ora di partenza (ore, minuti: due interi) o numero di posti attualmente liberi (un intero) La tabella dei voli di quel giorno e una collezione di voli (informazioni su voli) su cui e possibile eseguire le seguenti operazioni di gestione: - stampare un volo della tabella, caratterizzato da un certo codice - stampare i voli della tabella - aggiungere un volo alla tabella - eliminare un volo avente caratterizzato da un certo codice - modificare l'ora di partenza di un volo caratterizzato da un certo codice 9

10 - prenotare k posti in un volo caratterizzato da un certo codice (cioe' modificarne il numero di posti liberi, diminuendolo, se possibile, di k) - memorizzare i dati di una tabella di voli in un file di voli - caricare nella tabella dati da un file di voli Si vede che in questa tabella il campo codice e' la chiave di ricerca per i voli memorizzati. Scrivere un abbozzo del programma che dovra permettere tutte le operazioni sopra indicate. In questo abbozzo di programma ci limitiamo a fornire - la definizione della struttura dati che useremo per rappresentare la tabella dei voli; - la dichiarazione e implementazione (programmazione) delle funzioni necessarie a realizzare le prime tre operazioni elencate sopra; - una funzione main in cui venga stampato un menu di scelte (stampa di un volo, stampa dei voli in tabella, aggiunta di un volo in tabella, termine programma) e vengano conseguentemente usate le funzioni definite. Il programma va scritto e testato. Una proposta di soluzione e in VOLI1.C. Suggerimento 1di3: (sulle strutture dati, tratto da VOLI1.C) tabelle di 10 voli, per scrivere e testare il programma. Dopo potremo cambiare questa dimensione #define MAXVOLI 10 il tipo struct per rappresentare un volo contiene un campo orapartenza. L'ora e' ben rappresentabile con un'altra struct struct ora { int ore, minuti; }; segue il volo 10

11 struct volo { char codice[6]; char * destinazione; struct ora orapartenza; int postiliberi; }; per i voli, decidiamo di definire un sinonimo di tipo typedef struct volo TipoVolo; /* la tabella di voli consiste di un array di MAXVOLI voli, ma anche di un intero quantivoli che in ogni momento specifica quanti sono i voli effettivamente presenti in tabella. Faremo in modo che, se in un dato momento ci sono k voli in tabella, essi siano i primi k elementi dell'array e quantivoli sia uguale a k. Ogni scansione della tabella si limitera' agli elementi di indice da 0 a quantivoli-1. Quindi una tabella di voli e' una struttura a due campi. */ typedef struct { TipoVolo arrayvoli[maxvoli]; /* sostegno di memoria */ int quantivoli; /* quanti voli presenti nel sostegno */ } TipoTabella; Suggerimento 2di3: ipotesi su alcune funzioni che useremo (solo intestazioni) void stampatabella(tipotabella t); /* stampa tutti i voli della tabella */ /*!!! */ /* per entrambe le precedenti funzioni sara' comodo usare una funzione come la seguente... */ void stampavolo(tipovolo v); /* stampa il volo v */ 11

12 int aggiungivolo(tipotabella *t); /* aggiunge un nuovo volo nella tabella *t, chiedendo e leggendo opportunamente i dati relativi Restituisce 1 o 0 a seconda della riuscita dell'ahggiunta. Passiamo l indirizzo t della tabella da modificare, in modo che le modifiche vengano fatte direttamente sulla tabella *t (e non su una sua copia). Sia (*t).arrayvoli (nell'elemento di indice dipendente da quantivoli), che (*t).quantivoli saranno modificati. L elemento in cui si inserisce il nuovo volo e (*t).arrayvoli[kkk] dove k deve essere uguale al campo quantivoli della tabella (KKK=(*t).quantiVoli). Poi (*t).quantivoli deve crescere di uno, perche abbiamo aggiunto un volo in tabella. */ Suggerimento 3di3: ecco la main() int main() { TipoTabella tabvoli; int riuscita, scelta; /* scelta nel menu' */ char buffer[40]; /* per leggere stringhe */ tabvoli.quantivoli=0; do { /* STAMPA MENU */ /* inizializzazione del numero di voli presenti in tabella (cosa ci sia effettivamente in tabvoli.arrayvoli e' di poco interesse. Tanto le scansioni che faremo saranno sempre limitate da quantivoli*/ printf(" - scegli -\n"); printf(" - stampa dei voli (1) -\n"); printf(" - stampa di un certo volo (2) -\n"); printf(" - aggiunta di un volo (3) -\n"); printf(" - fine (0) -\n"); scanf("%d", &scelta); /* SCELTA ESPRESSA DALL UTENTE */ 12

13 switch (scelta) { /* ELABORAZIONE IN BASE ALLA SCELTA */ case 1: printf("- %d voli in tabella:\n", tabvoli.quantivoli); stampatabella(tabvoli); break; case 2: /* funzione non ancora implementata; (rimanadata al prossimo esercizio) printf(" - codice volo? "); scanf("%s", buffer); stampaquelvolo(tabvoli, buffer); */ break; case 3: riuscita=aggiungivolo(&tabvoli); if(!riuscita) printf(" - aggiunta non effettuata -\n"); else printf(" - fatto -\n"); break; case 0: printf(" - USCITA DAL PROGRAMMA\n"); break; default: printf(" - opzione sballata\n"); } /* fine switch */ } while (scelta!=0); /* fine do_while*/ } printf("\nfine\n"); return 0; 7.3. Gestione voli (secondo passo VOLI2.C) Incrementare il programma costruito al passo precedente, con la funzionalita di stampa di un volo, dato il codice. (E poi testarlo...) Suggerimento 1di2: La funzione da implementare e la seguente: void stampaquelvolo(tipotabella t, char cod[]); 13

14 Suggerimento 2di2: Pero per stampare il volo di codice cod, bisogna cercarlo nella tabella. Questo problema di cercare un volo di codice dato ricorre, verosimilmente spesso nel resto del programma. Ecco come risolvere il problema una volta per tutte, con una funzione: int indicevolo(tipotabella t, char cod[]); /* cerca il volo di codice cod in t; cioe cerca nell array t.arrayvoli, limitando la scansione agli elementi che vanno da indice 0 a indice t.quantivoli-1 restituisce l'indice del volo oppure, se non lo ha trovato, -1 */ 7.4. Gestione voli (terzo passo VOLI3.C) Incrementare il programma costruito al passo precedente, con la funzionalita di eliminazione di un volo di codice dato. (E poi testarlo...). Suggerimento 1di2: Bisogna realizzare la funzione di eliminazione ed estendere la main() in modo che permetta di scegliere anche l opzione di eliminazione. Quando viene scelta questa opzione, il programma chiede il codice del volo da eliminare e poi chiama la funzione di eliminazione. La funzione da implementare e la seguente: int eliminavolo(tipotabella *t, char cod[]); /* elimina il volo di codice cod dalla tabella *t (cambiano arrayvoli e quantivoli) restituisce 0 o 1 a seconda del successo dell'operazione Si cerca l'elemento da eliminare, assegnando ad un indice il valore ritornato dalla funzione di ricerca, ad esempio k=indicevolo(*t, cod); e lo si ricopre copiandoci sopra l'ultimo elemento della tabella; ad esempio t->arrayvoli[k] = t->arrayvoli[ultimo]; (quanto vale l indice ultimo?) 14

15 poi si decrementa quantivoli ad esempio t->quantivoli-=1; */ Suggerimento 2di2: ultimo=t->quantivoli-1; 7.5. Gestione voli (quarto passo VOLI4.C) Incrementare il programma costruito al passo precedente, con le funzionalita di modifica richieste, cioe cambio dell ora di partenza di un volo di codice dato e prenotazione di un ecrto numero k di posti su un volo di codice dato. (E poi testarlo...). Bisogna realizzare due funzioni apposite, cambiaorapartenza(...) e cambiapostiliberi(...); e poi modificare la main() in modo che anche queste nuove operazioni siano accessibili dal menu. Suggerimento: le funzioni da realizzare potrebbero essere le seguenti: int cambiaorapartenza (TipoTabella *t, char cod[], int nuovaora, int nuovimin); /* restituisce 0 o 1 a seconda del successo dell'operazione */ int cambiapostiliberi(tipotabella *t, char cod[], int k); /* diminuisce di k i posti liberi, SE POSSIBILE restituisce 0 o 1 a seconda del successo dell'operazione */ Il parametro tabella qui deve essere l indirizzo della tabella attuale da modificare... 15

16 7.6. Gestione voli (quinto passo VOLI5.C) Incrementare il programma costruito al passo precedente, con le funzionalita di salvataggio su file della tabella e caricamento da file della tabella. (E poi testarlo...). Bisogna realizzare due funzioni apposite, void databellainfile(tipotabella t, char *nmf); /* riceve - una tabella da scaricare in memoria secondaria e - il niome del file in cui memorizzare le informazioni; e scarica i dati della tabella nel file di nome nmf*/ void dafileintabella(char *nmf, TipoTabella *t); /* riceve - l indirizzo di una tabella in cui memorizzare i dati contenuti in un file e - il nome del file da cui trarre i dati per riempire la tabella; e carica nella tabella puntata da t (cioe *t) i voli contenuti nel file di nome nmf */ e poi modificare la main() in modo che anche queste nuove operazioni siano accessibili dal menu Gestione voli (sesto passo VOLI6.C) Qui si richiede di risolvere il problema della gestione dei voli con un approccio piu dinamico, cioe facendo in modo che la memoria occupata dall array di voli arrayvoli (campo della tabella TipoVoli) non occupi un numero fissato MAXVOLI di locazioni di tipo TipoVolo (struct) ma modifichi l occupazione di memoria in ragione delle necessita (cioe del numero di voli effettivamente memorizzati nella tabella). Per realizzare questo scopo si suggerisce di adottare il seguente schema: - il tipo TipoTabella viene modificato, in modo che il campo arrayvolo non isa piu un array statico di MAXVOLI voli, ma il puntatore ad un array di voli dinamicamente allocato: TipoVolo * arrayvoli; - l inizializzazione della tabella non si limita piu all azzeramento del campo.quantivoli, ma deve anche procedere ad una prima allocazione del blocco di voli.arrayvoli. Questa allocazione fa in modo che arrayvoli punti ad una blocco di MAXVOLI voli (dove MAXVOLI e un simbolo di costante definito opportunamente, per il quale si consiglia un valore abbastanza basso, es 5 o 6); - la funzione di caricamento dei dati da file a tabella viene modificata, in modo che venga 16

17 o deallocato il blocco eventualmente puntato da arrayvoli e o allocato (e assegnato ad arrayvoli) un blocco di voli che verra riempito con i dati contenuti nel file; in particolare il primo dato letto dal file dice quanti sono i voli presenti nel file; il blocco viene allocato con un numero di voli di circa il 30% superiore a quelli effettivamente necessari, cosi dopo il caricamento dei dati, ci sara spazio per aggiungere nella tabella nuovi voli, ma senza esagerare con lo spazio occupato; - La funzione di aggiunta di un nuovo volo in tabella viene cambiata in modo che quando l aggiunta non e possibile per mancanza di spazio in arrayvoli, anziche lasciar perdere o si fa in modo che arrayvoli punti ad un blocoo di voli esteso (un po piu grande, ad esempio del 30%) o e poi si aggiunge il volo come si faceva prima Per fare in modo che arrayvoli punti ad un blocco di voli che contiene i voli gia presenti in tabella piu qualche altro spazio per nuovi voli, si possono usare varie soluzioni. La piu immediata consiste nel o salvare la tabella in un file TEMP.TXT o ricaricare subito la tabella, con la funzione di caricamento modificata, discussa in un punto precedente. Si consiglia di procedere facendo una copia del file in cui era stato risolto completamente il punto presedente (la cui proposta di soluzione era in VOLI5.C) e modificare questa copia, seguendo l ordine delle suggerimenti elencati sopra; Durante questa opera ci si potrebbe rendere conto che, aproposito di modifiche alla struttura dati di Tabella dei Voli, non tutto e stato detto fin qui: potrebbe essere necessario aggiungere un altra modifica. La scoperta di questa modifica è bella se viene fatta autonomamente... ma comunque se ne parla nel prossimo suggerimento. Suggerimento: visto che la dimensione del blocco di voli puntato da arrayvoli non e piu fissa (sempre uguale a MAXVOLI) durante l esecuzione del programma, diventa necessario averla memorizzata in una variabile. Questa variabile deve contenere, in qualsiasi momento, il numero di voli effettivamente allocati nel blocco arrayvoli, indipendentemente se occupati o disponibili. Quindi deve essere un valore associato stabilmente alla singola tabella (tab) con cui si sta lavorando. Ad esempio, durante l operazione di aggiunta di un nuovo volo si deve verificare che il numero di voli effettivamente memorizzato (.quantivoli) non sia diventato uguale al numero di strutture allocate nel blocco (altrimenti l aggiunta non si puo fare subito). Ne concludiamo che la variabile contenente il numero di voli allocati nel blocco arrayvoli deve essere un campo della tabella. E sara il terzo campo, che in VOLI6.C abbiamo chiamato.voliallocati. 17

Esercitazioni di Tecniche di Programmazione

Esercitazioni di Tecniche di Programmazione Esercitazioni di Tecniche di Programmazione 2. Seconda esercitazione autoguidata due avvertenze: 1) Le soluzioni agli esercizi, le versioni di programmi dati nel testo delle esercitazioni e quant'altro

Dettagli

3. Terza esercitazione autoguidata: progetto gestione voli

3. Terza esercitazione autoguidata: progetto gestione voli 9 3. Terza esercitazione autoguidata: progetto gestione voli Qui ci occupiamo di scrivere un programma abbastanza lungo, dedicato alla gestione di una tabella di dati. Una tabella e una struttura dati

Dettagli

Tecniche della Programmazione lezione 17

Tecniche della Programmazione lezione 17 Tecniche della Programmazione lezione 17 strutture di dati: astratte e concrete - metodologia di rappresentazione (e programmazione) di dati del mondo reale, mediante STRUTTURE DATI - tipo astratto di

Dettagli

Rappresentazione di dati

Rappresentazione di dati Rappresentazione di dati oggetti del mondo reale: - caratteristiche - caratteristiche obiettivo della rappresentazione analisi e progettazione strutture dati teoriche (ADT) - domini ( ) - dominio di interesse

Dettagli

Rappresentazione di dati

Rappresentazione di dati Rappresentazione di dati oggetti del mondo reale: - caratteristiche - caratteristiche obiettivo della rappresentazione analisi e progettazione strutture dati teoriche (ADT) - domini ( ) - dominio di interesse

Dettagli

Laurea In Ingegneria dell Informazione. Esercitazioni Guidate di Tecniche della Programmazione

Laurea In Ingegneria dell Informazione. Esercitazioni Guidate di Tecniche della Programmazione Laurea In Ingegneria dell Informazione Esercitazioni Guidate di Tecniche della Programmazione Note introduttive: 1) Le soluzioni agli esercizi e le versioni di programmi menzionate nel testo delle esercitazioni

Dettagli

- tipo - costruttori di tipo - typedef: alias per i nuovi tipi

- tipo - costruttori di tipo - typedef: alias per i nuovi tipi Tecniche della Programmazione, lez.16 variazioni sul tema dei puntatori... typedef, struct e definizione di tipi strutturati... - tipo - costruttori di tipo - typedef: alias per i nuovi tipi - struct (Record),

Dettagli

Esercizio (o esempio?)

Esercizio (o esempio?) Esercizio (o esempio?) programma che legge un intero n e n double; li memorizza in un array dinamico esatto calcola e stampa minimo, massimo e media dei double #include 1) Lettura e memorizzazione

Dettagli

Esercitazioni di Tecniche di Programmazione. 4. Quarta esercitazione autoguidata: liste concatenate rappresentate mediante struct e puntatori

Esercitazioni di Tecniche di Programmazione. 4. Quarta esercitazione autoguidata: liste concatenate rappresentate mediante struct e puntatori Esercitazioni di Tecniche di Programmazione 4. Quarta esercitazione autoguidata: liste concatenate rappresentate mediante struct e puntatori due avvertenze: 1) Le soluzioni agli esercizi, le versioni di

Dettagli

5. Quinta esercitazione autoguidata: liste semplici

5. Quinta esercitazione autoguidata: liste semplici 22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto

Dettagli

Tecniche della Programmazione, lez.28

Tecniche della Programmazione, lez.28 Tecniche della Programmazione, lez.28 Problema dell'ordinamento di una sequenza di elementi lavorare sulla sequenza ordinata puo' essere utile in parecchi casi - ricerca di un elemento - unicita' di un

Dettagli

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami. Consideriamo l esercizio assegnato la scorsa lezione per rappresentare il libretto di uno studente. Per memorizzare i dati si sono utilizzati tre array: char* nomiesami[max ESAMI] Array dei nomi degli

Dettagli

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO II.2017

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO II.2017 APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2015 2016 22.II.2017 VINCENZO MARRA Indice Esercizio 1 1 Strutture dati e prime funzioni. 1 Punti: 8.

Dettagli

Esercitazioni di Tecniche di Programmazione. 6. Sesta esercitazione autoguidata: file binari e ricorsione

Esercitazioni di Tecniche di Programmazione. 6. Sesta esercitazione autoguidata: file binari e ricorsione Esercitazioni di Tecniche di Programmazione Due avvertenze: 1) Le soluzioni agli esercizi, le versioni di programmi dati nel testo delle esercitazioni e quant'altro sono raggiungibili tramite la pagina

Dettagli

Laurea In Ingegneria dell Informazione. Esercitazioni Guidate di Tecniche della Programmazione

Laurea In Ingegneria dell Informazione. Esercitazioni Guidate di Tecniche della Programmazione Laurea In Ingegneria dell Informazione Esercitazioni Guidate di Tecniche della Programmazione Note introduttive: 1) Le soluzioni agli esercizi e le versioni di programmi menzionate nel testo delle esercitazioni

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017

Dettagli

Esercizio 1. Tavola ordinata in memoria centrale

Esercizio 1. Tavola ordinata in memoria centrale Esercizio 1. Tavola ordinata in memoria centrale E dato un programma che realizza una rubrica telefonica come tavola in memoria centrale. In particolare, ogni elemento della tavola è caratterizzato dalle

Dettagli

Informatica per Statistica Riassunto della lezione del 21/10/2011

Informatica per Statistica Riassunto della lezione del 21/10/2011 Informatica per Statistica Riassunto della lezione del 1/10/011 Igor Melatti Costrutti del linguaggio C: ripasso Si consideri il programma C alla Figura 1 ci sono due dichiarazioni di funzioni, insertion

Dettagli

Esercizio 1: media di numeri reali (uso funzioni e struct)

Esercizio 1: media di numeri reali (uso funzioni e struct) Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Dettagli

I Dati Strutturati ed il Linguaggio C

I Dati Strutturati ed il Linguaggio C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Dati Strutturati Esigenze Vettori

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

Esercizi. Filtraggio

Esercizi. Filtraggio Politecnico di Milano Esercizi Preparazione alla prima prova intermedia Filtraggio L utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)

Dettagli

Informatica B Allievi Meccanici con cognome da Cl a L II prova intermedia del 13/02/01 Prof. Elisabetta Di Nitto

Informatica B Allievi Meccanici con cognome da Cl a L II prova intermedia del 13/02/01 Prof. Elisabetta Di Nitto Informatica B Allievi Meccanici con cognome da Cl a L II prova intermedia del 13/02/01 Prof. Elisabetta Di Nitto Tema d esame con soluzioni NOTA: Per la soluzione delle parti teoriche si faccia riferimento

Dettagli

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B

Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B Università di Ferrara Dipartimento di Ingegneria Esercitazioni di FONDAMENTI DI INFORMATICA MODULO B Tutor Arnaud Nguembang Fadja: ngmrnd@unife.it Damiano Azzolini: damiano.azzolini@student.unife.it Esercizio

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Lo scopo. Il primo esperimento. Soluzione informale. Le variabili

Lo scopo. Il primo esperimento. Soluzione informale. Le variabili Lo scopo 2 Il primo esperimento Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video Ver. 2.4

Dettagli

Strutture dati dinamiche in C. Emilio Di Giacomo

Strutture dati dinamiche in C. Emilio Di Giacomo Strutture dati dinamiche in C Emilio Di Giacomo Strutture dati Una struttura dati è un contenitore in cui i dati sono organizzati in maniera che possano essere recuperati e manipolati efficientemente Un

Dettagli

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

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015 APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 15.VI.2015 VINCENZO MARRA Indice Esercizio 1 1 Definizione dei tipi P e T, e calcolo dell area.

Dettagli

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C e diagrammi a blocchi. Preparazione prima prova intermedia

Informatica A (per gestionali) A.A. 2004/2005. Esercizi C e diagrammi a blocchi. Preparazione prima prova intermedia Informatica A (per gestionali) A.A. 2004/2005 Esercizi C e diagrammi a blocchi Preparazione prima prova intermedia Indice 1 Array... 3 1.1 Filtraggio...3 1.2 Trasformazione...3 2 Struct e array... 5 2.1

Dettagli

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

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Lab 13 Strutture e programmi su più file "

Lab 13 Strutture e programmi su più file Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 13 Strutture e programmi su più file " Lab13 1 n Sia data la struttura Esercizio 1" struct time { int hour, minute,

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci

Dettagli

Le strutture. UNIVERSITÀ DEGLI STUDI DEL SANNIO Benevento DING DIPARTIMENTO DI INGEGNERIA

Le strutture. UNIVERSITÀ DEGLI STUDI DEL SANNIO Benevento DING DIPARTIMENTO DI INGEGNERIA UNIVERSITÀ DEGLI STUDI DEL SANNIO Benevento DING DIPARTIMENTO DI INGEGNERIA CORSO DI "PROGRAMMAZIONE I" Prof. Franco FRATTOLILLO Dipartimento di Ingegneria Università degli Studi del Sannio Le strutture

Dettagli

Lezione 6: Array e puntatori

Lezione 6: Array e puntatori Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci

Dettagli

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while) Laboratorio Due 1) Switch 2) Costrutti Iterazione (For, While, do while) GLI ARGOMENTI DI OGGI Istruzione switch I costrutti di iterazione (For, while, do while) Le funzioni (e ricorsione) Terza Esercitazione

Dettagli

L AMBIENTE CODE BLOCKS E L IO

L AMBIENTE CODE BLOCKS E L IO L AMBIENTE CODE BLOCKS E L IO Il primo programma #include main() { printf("ciao Mondo!"); } Il file deve essere salvato con estensione.c Il primo programma in C++ #include using

Dettagli

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

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea

Dettagli

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T -Struttura vettore 0/08/0 Prerequisiti Programmazione elementare Passaggio parametri per indirizzo 0/08/0 Introduzione I dati di tipo semplice (Intero, Reale, Carattere, Booleano)

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Lab 09 Strutture e programmi su più file

Lab 09 Strutture e programmi su più file Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 09 Strutture e programmi su più file Lab13 1 Alcune Informazioni Utili Funzioni per manipolare stringhe (in string.h)!

Dettagli

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario

Dettagli

Esercizi. La funzione swapint() primo tentativo

Esercizi. La funzione swapint() primo tentativo Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include

Dettagli

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine)

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine) La copia di un file Nell'esercizio di oggi cerchiamo di implementare un programma che permetta di effettuare la copia di un file di testo. L'operazione di copia, oltre a permettere di creare un nuovo file

Dettagli

Debug di un programma

Debug di un programma Debug di un programma Col termine Debug si intende una fase di sviluppo del software, nella quale si cerca di eliminare gli errori dal programma Due tipi di errori: Errori sintattici, rilevati sempre dal

Dettagli

Ingresso ed Uscita in C. Informatica 1 / 15

Ingresso ed Uscita in C. Informatica 1 / 15 Ingresso ed Uscita in C Informatica 1 / 15 Input e Output in C Linguaggio C: progettato per essere semplice e con poche istruzioni Non esistono istruzioni di ingresso / uscita (I/O)!!! Ingresso ed uscita

Dettagli

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

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

L AMBIENTE CODE BLOCKS E L IO

L AMBIENTE CODE BLOCKS E L IO L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

Implementazione dell albero binario in linguaggio C++

Implementazione dell albero binario in linguaggio C++ Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati

Algoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati Passaggio dei parametri in Java Nel seguente esempio public class parametri2 public static void main(string args[]) int x = 1; int y; double d[] = new double[2]; d[0] = 25; y= metodo1(d, x); System.out.println("Il

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

Dettagli

Variabili e input/ Alessandra Giordani Lunedì 18 marzo

Variabili e input/ Alessandra Giordani Lunedì 18 marzo Variabili e input/ output da tastiera Alessandra Giordani agiordani@disi.unitn.it Lunedì 18 marzo 2013 http://disi.unitn.it/~agiordani/ Es. compilazione helloworld.c 2 Variabili e valori Una variabile

Dettagli

Passare argomenti al programma

Passare argomenti al programma Passare argomenti al programma Quando si invoca un programma è possibile passare degli argomenti ad esso durante la chiamata. Gli argomenti ricevuti saranno stringhe (array di char) quindi l insieme di

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 27 novembre 2007 In C una stringa è rappresentata da una sequenza di caratteri terminante con il carattere nullo \0 il cui valore è

Dettagli

Dati aggregati. Violetta Lonati

Dati aggregati. Violetta Lonati 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

Dettagli

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL Materiale di ausilio utilizzabile durante l appello: tutto il materiale è a disposizione, inclusi libri, lucidi, appunti, esercizi svolti e siti Web ad accesso consentito in Lab06. L utilizzo di meorie

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 5 31/10/2013 Original work Copyright Sara Migliorini, University of Verona Modifications Copyright Damiano Macedonio, University

Dettagli

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Damiano Macedonio Esercizio 1 Scrivere una funzione che riceve in ingresso un puntatore ad un array di interi e modifica tale array

Dettagli

Lezione 23 - ADT LISTA

Lezione 23 - ADT LISTA Lezione 23 - ADT LISTA Rappresentazione concreta del Tipo di Dati Astratto LISTA. - Cenni sulla rappresentazione mediante array (puah!) - Rappresentazione concreta mediante struct e puntatori. - concetto

Dettagli

Tipi di dato, variabili, istruzioni

Tipi di dato, variabili, istruzioni Tipi di dato, variabili, istruzioni Esercizio 1 Implementare un servizio che estrae due numeri random tra 1 e 100, stampa a video i due numeri ed esegue le seguenti operazioni: se almeno uno dei due numeri

Dettagli

Assegnazione di una variabile

Assegnazione di una variabile Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

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

Esercitazione 4. Comandi iterativi for, while, do-while Esercitazione 4 Comandi iterativi for, while, do-while Comando for for (istr1; cond; istr2) istr3; Le istruzioni vengono eseguite nel seguente ordine: 1) esegui istr1 2) se cond è vera vai al passo 3 altrimenti

Dettagli

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sull environment esterno Per riferimento

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1: funzione con valore di ritorno di tipo puntatore Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 4 23/10/2018

Esercitazioni di Fondamenti di Informatica - Lez. 4 23/10/2018 Esercitazioni di Fondamenti di Informatica - Lez. 4 2/0/20 Esercizi sui tipi in C I codici e le soluzioni degli esercizi sono nella cartella parte. Dato il seguente codice, trovare gli errori, correggerli

Dettagli

Passaggio dei parametri. Passaggio dei parametri

Passaggio dei parametri. Passaggio dei parametri Per valore Il valore viene copiato dal mondo esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sul mondo esterno rimangono circoscritti all environment

Dettagli

Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.

Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi. Laboratorio 8 Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi. Note Quando dovete usare o ritornare dei valori booleani, usate la seguente

Dettagli

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

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione. Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 13 Novembre 2012 COGNOME E NOME RIGA COLONNA MATRICOLA Spazio riservato ai docenti Il presente plico contiene

Dettagli

Puntatori e array. Violetta Lonati

Puntatori e array. Violetta Lonati Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array

Dettagli

Perché il linguaggio C?

Perché il linguaggio C? Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare

Dettagli

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2019

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VII.2019 APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2018 2019 8.VII.2019 VINCENZO MARRA Indice Esercizio 1 2 Strutture dati e visualizzazione 2 Punti: 3.

Dettagli

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int Gli array Gli array rappresentano una modalità molto compatta per accedere ad un gruppo di variabili; tale gruppo è identificato dal nome dell'array; i tipi delle variabili appartenenti al gruppo devono

Dettagli

Implementazione di DFA in C

Implementazione di DFA in C Implementazione di DFA in C Dispensa di Laboratorio di Linguaggi di Programmazione Sommario Corrado Mencar, Pasquale Lops, Stefano Ferilli Questa dispensa fornisce le linee guida per l implementazione,

Dettagli

Dispensa 18 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratori

Dispensa 18 CORSO DI PROGRAMMAZIONE A.A CORSO DI LAUREA IN INGEGNERIA E SCIENZE INFORMATICHE CESENA. Laboratori ORSO I LURE IN INGEGNERI E SIENZE INFORMTIHE ESEN ORSO I PROGRMMZIONE.. 2016-17 ispensa 18 Laboratori ott. Mirko Ravaioli e-mail: mirko.ravaioli@unibo.it http://www.programmazione.info orso di Programmazione..

Dettagli

Progetto per il Laboratorio di Programmazione Un interprete per il linguaggio PINO. Modulo I: Le tavole dei simboli (TS)

Progetto per il Laboratorio di Programmazione Un interprete per il linguaggio PINO. Modulo I: Le tavole dei simboli (TS) Progetto per il Laboratorio di Programmazione Un interprete per il linguaggio PINO Modulo I: Le tavole dei simboli (TS) Stefano Guerrini A.A. 2002/03 Canale P-Z Versione del 20 giugno 2003 1 Modulo I:

Dettagli

7. Settima esercitazione autoguidata: alberi binari

7. Settima esercitazione autoguidata: alberi binari 7. Settima esercitazione autoguidata: alberi binari 31 7.1. Costruzione di un albero (ALBERI1.C) Scrivere un programma che - riceve il nome di un file contenente la rappresentazione parentetica di un albero

Dettagli

Indovina la lettera...

Indovina la lettera... Indovina la lettera... La lezione di oggi consiste nel preparare un programma che chiede all'utente di indovinare quale sia il carattere generato dal programma stesso in modo casuale. Il numero totale

Dettagli

C: primi elementi. Lezione 4

C: primi elementi. Lezione 4 C: primi elementi Lezione 4 Evoluzione del BCPL (1967) e B (1970), entrambi typeless Sviluppato da Dennis Ritchie nel 1972 ed implementato per il PDP-11 Usato per lo sviluppo del sistema operativo UNIX

Dettagli

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

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice: Corso di Ingegneria Biomedica Corso di Ingegneria Elettronica Insegnamento di Informatica I a.a. 2007-08 Laboratorio 1 Durante le esercitazioni verra utilizzato il compilatore a riga di comando DJGPP,,

Dettagli

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti INFORMATICA A Titolo presentazione sottotitolo A.A. 2018-19 Milano, XX mese 20XX Laboratorio n 4 Dott. Michele Zanella Ing. Gian Enrico Conti Puntatori I puntatori sono delle variabili che contengono l

Dettagli

Liste concatenate e allocazione dinamica

Liste concatenate e allocazione dinamica Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Fondamenti Teorici e Programmazione

Fondamenti Teorici e Programmazione Fondamenti Teorici e Programmazione Modulo A Elementi di Programmazione Claudio Gallicchio, Ph.D. Array 2 Dati Strutturati I tipi di dati visti finora sono numeri (interi o razionali) booleani (valori

Dettagli

Quadrato Magico. Fondamenti di Programmazione

Quadrato Magico. Fondamenti di Programmazione Quadrato Magico Si richiede lo sviluppo di un programma che permette all utente l inserimento di una matrice quadrata di numeri interi positivi e verifica se si tratta di un quadrato magico Una matrice

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Record Laboratorio di Informatica Ingegneria Meccanica Lezione 9, 6 dicembre 2007 versione 18 dicembre 2007 Renato Menicocci Array: collezione di dati omogenei

Dettagli

Esame Laboratorio di Programmazione

Esame Laboratorio di Programmazione Esame Laboratorio di Programmazione 20 Giugno 2014 NOA Non è possibile usare le classi del package prog.io del libro di testo L obiettivo è scrivere una applicazione che permette di costruire delle torri

Dettagli