La lezione è centrata su un esercizio per impratichirsi sui seguenti argomenti:
|
|
- Ladislao Blasi
- 6 anni fa
- Visualizzazioni
Transcript
1 1 Lezione 7 La lezione è centrata su un esercizio per impratichirsi sui seguenti argomenti: liste rappresentate con puntatori liste rappresentate con cursori Chi notasse eventuali incoerenze o errori, oppure avesse dubbi sul contenuto di queste pagine e dei codici, è pregato di segnalarmeli per contribuire a migliorare la qualità dei materiali del corso. Esercizio Si vuole scrivere un programma biblio.c per la gestione per una biblioteca. Al principio, il programma acquisisce i libri disponibili in ordine alfabetico (prima per autore, poi per titolo). Quindi, il programma riceve un elenco di indicazioni di movimento dei libri, vale a dire dei prestite e delle rese. I libri prestati vanno rimossi subito dall elenco dei libri disponibili e conservati in un elenco a parte. I libri resi non tornano immediatamente disponibili, perché il personale della biblioteca è insufficiente a riordinarli subito. Vengono invece conservati al banco del prestito impilati uno sull altro fino alla sera. Il programma però deve tenere traccia dell ordine delle rese perché alla sera deve fornire al bibliotecario un elenco di istruzioni che lo aiutino a riordinare i libri: in particolare, deve indicare per ogni libro della pila (dalla cima al fondo) non la posizione assoluta dove metterlo, ma il libro disponibile prima del quale ciascun libro reso va riposto 1. Il file input01a.txt riporta un esempio di elenco dei libri disponibili. Ogni libro occupa una riga di lunghezza non superiore a 80 caratteri. I libri sono tutti diversi e sono già ordinati. Il termine dell elenco è indicato da una riga contenente solo la parola FINE. Adams S., "Il principio di Dilbert" Bertossi A., "Algoritmi e Strutture Dati" Chaucer G., "I Racconti di Canterbury" Hoeg P., "Il senso di Smilla per la neve" Hofstadter D., "Godel, Escher, Bach" Kernighan B. e Ritchie D., "Il linguaggio C" King S., "L ombra dello scorpione" Pennac D., "La prosivendola" Shakespeare W., "Le allegre comari di Windsor" Yourcenar M., "L opera al nero" FINE Il file input01b.txt riporta un esempio di elenco dei movimenti. Ogni movimento occupa una riga, costituita dalla parola chiave PRESTITO oppure RESTITUZIONE, seguita dal libro (nello stesso formato usato per l elenco dei libri disponibili). Per semplicità, il prestito è giornaliero, cioè i libri vanno resi prima di sera, per cui tutti i libri resi figurano nell elenco iniziale dei libri disponibili. L elenco dei movimenti termina con una riga che contiene solo la parola chiave FINE. PRESTITO Bertossi A., "Algoritmi e Strutture Dati" PRESTITO Kernighan B. e Ritchie D., "Il linguaggio C" PRESTITO Adams S., "Il principio di Dilbert" RESTITUZIONE Kernighan B. e Ritchie D., "Il linguaggio C" PRESTITO Shakespeare W., "Le allegre comari di Windsor" 1 Questa è ovviamente una stranezza, ma altrimenti l esercizio si riduce al semplice accesso a un vettore con indici assoluti. 1
2 PRESTITO Pennac D., "La prosivendola" PRESTITO Yourcenar M., "L opera al nero" RESTITUZIONE Bertossi A., "Algoritmi e Strutture Dati" RESTITUZIONE Shakespeare W., "Le allegre comari di Windsor" FINE Il programma deve restituire per prima cosa l elenco dei libri ancora disponibili, nello stesso formato usato per acquisirlo al principio. Poi deve fornire una serie di istruzioni. Ogni istruzione consiste in una riga costituita dalla parola chiave METTERE, seguita dal libro reso, dalle parole chiave PRIMA DI e dal libro disponibile prima del quale il libro reso va riposto. Se il libro va messo per ultimo, si scriverà la parola chiave METTERE seguita dal libro e dalle parole chiave PER ULTIMO. Al termine delle operazioni, il programma stampa la parola chiave FINE. Si noti che quando un libro reso è stato riposto diventa immediatamente disponibile, e quindi potrebbe fare da punto di riferimento per l inserimento dei successivi libri resi. Al termine, il programma deve stampare nuovamente la lista dei libri disponibili, nel solito formato. Traccia Prima di eseguire l esercizio, si possono scorrere interamente i lucidi fino a pagina 11 per acquisire il concetto di lista astratta e le basi delle implementazioni di liste con puntatori. Quindi si può ragionare un po sul modello del problema. Le operazioni richieste sono: scorrere i libri sullo scaffale per stamparne l elenco; tenere traccia dei libri prestati e dei libri resi; fornire informazioni sulla posizione dei libri da riporre; determinare la posizione corretta di un libro in base all ordine alfabetico e all elenco dei libri attualmente disponibili (cioè non prestati o già riposti in ordine). Occorre quindi gestire tre insiemi di libri: quelli sullo scaffale, quelli in prestito e quelli restituiti. Sono tre insiemi completamente dinamici, anche se esiste un sovrainsieme statico che li contiene tutti (quelli dei libri). Il primo insieme (libri sullo scaffale) è in ordine alfabetico e deve rimanerlo. Il secondo insieme (libri in prestito) è in genere privo di qualsiasi ordine. Il terzo insieme (libri resi) è in un ordine determinato dalla sequenza di movimenti di restituzione: i libri sono impilati e i libri resi per primi stanno alla base della pila, quelli resi per ultimi alla cima. Inoltre, il fatto che i libri siano consente solo l accesso all ultimo libro aggiunto all insieme (LIFO = Last In First Out). Viene quindi spontaneo gestire almeno questi due insiemi come liste e per semplicit gestiremo cos anche l altro. Tutte le operazioni prima elencate verranno quindi realizzate come operazioni su liste. Quindi, si apre il file start.c, che già contiene: 1. le direttive per simulare il tipo boolean; 2. la costante simbolica ROW LENGTH per gestire le righe in lettura e scrittura. A rigore, il testo indica una dimensione massima di 80 caratteri, che però vanno incrementati per tener conto delle parole chiave PRESTITO e RESTITUZIONE nel file dei movimenti. Ipotizzando un solo spazio bianco fra la parola chiave e il libro, risultano caratteri a cui va aggiunto l a capo (se si usa la funzione fgets per leggere le righe) e il terminatore, per un totale di 94 2
3 caratteri. Qualsiasi valore superiore va bene: si tratta di decidere se ha senso risparmiare memoria o ammettere che qualche libro violi la regola. 3. le variabili file libri e file movimenti dove conservare il nome dei file dei libri disponibili e dei movimenti effettuati; 4. la funzione InterpretaLineaComando che scrive i nomi dei due file nelle corrispondenti variabili recuperandoli dalla linea di comando (argv[1] e argv[2] rispettivamente). Si avvia la realizzazione top-down dell algoritmo scrivendo opportune funzioni e aggiungendo al codice la loro chiamata nel main, la dichiarazione fra i prototipi prima del main, la definizione vuota dopo il main: 1. carica l elenco dei libri disponibili creando la corrispondente lista 2. crea le liste (vuote) dei libri prestati e resi 3. esegue i movimenti riportati nel file dei prestiti e dei resi 4. stampa l elenco dei libri disponibili 5. stampa le istruzioni per riporre i libri resi 6. stampa l elenco dei libri disponibili 7. distrugge le liste dei libri disponibili, prestati e resi (cancellando prima i loro elementi) Per poter scrivere queste funzioni, occorre avere a disposizione una libreria per la gestione di liste di libri. Ne costruiamo una, creando un file header e un file listato nei quali dichiareremo (nel primo) e definiremo (nel secondo) tutte le strutture e funzioni che occorrono, seguendo la falsariga della lezione. In particolare, realizzeremo per prima un implementazione a puntatori, in cui la lista è bidirezionale, circolare e dotata di sentinella. Questa implementazione consente un costo temporale molto basso per tutte le operazioni, al costo di un occupazione di memoria maggiore (e un piccolo aumento nel costo temporale per alcune operazioni, dato che ci sono più puntatori da tenere aggiornati). Brevemente, dichiariamo: un libro come un vettore di caratteri una listalibri come un puntatore a un elemento (partiamo quindi con un implementazione a puntatori) una posizione come un puntatore a un elemento (ancora una volta, perché abbiamo scelto un implementazione a puntatori) un elemento come una struttura contenente un libro e due posizioni: quella precedente e quella successiva (abbiamo scelto un implementazione bidirezionale). Il risultato di questa fase della lezione sono i file biblio2.c, lista.h e lista-start.c. In quest ultimo, le definizioni delle procedure sono tutte vuote, e quelle che devono restituire un valore restituiscono un valore fittizio convenzionale (NO LIST per le liste, NO ELEMENT per le posizioni, TRUE per i valori logici). Ora sospendiamo la progettazione top-down del programma per passare temporaneamente all approccio bottom-up: avendo scelto di realizzare una libreria per gestire liste di libri, è ragionevole dedicarcisi in modo ordinato. Nell ordine, definiamo: 3
4 listalibri crealistalibri (), che alloca un elemento sentinella, lo fa puntare a sé stesso in entrambe le direzioni (lista circolare) e lo restituisce come valore della lista; void leggelista (listalibri L, posizione p, libro TitoloAutore), che restituisce l informazione associata a una data posizione di una data lista. Questa definizione non corrisponde a quella dei lucidi, perché la funzione dovrebbe restituire un libro; il libro, però, è un vettore e in C non si possono restituire i vettori, mentre si possono passare per valore se si deve solo andare a modificare il valore degli elementi del vettore. listalibri scrivelista (listalibri L, posizione p, libro TitoloAutore), che assegna un libro a una data posizione della lista boolean listavuota (listalibri L), che verifica se la lista è vuota: nel nostro caso, verificherà se la sentinella punta sé stessa. posizione primolista (listalibri L), che restituisce un puntatore alla prima posizione vera della lista, cioè il successore della sentinella; se la lista è vuota, restituisce la sentinella. posizione ultimolista (listalibri L), che restituisce un puntatore all ultima posizione vera della lista, cioè il predecessore della sentinella; se la lista è vuota, restituisce la sentinella. posizione succlista (listalibri L, posizione p), che restituisce un puntatore alla posizione successiva lungo la lista; se la posizione è l ultima, restituisce la sentinella. posizione predlista (listalibri L, posizione p), che restituisce un puntatore alla posizione precedente lungo la lista; se la posizione è la prima, restituisce la sentinella. boolean finelista (listalibri L, posizione p), che restituisce FALSE se la posizione è valida, TRUE se è la sentinella. listalibri inslista (listalibri L, posizione p, libro TitoloAutore), che alloca un nuovo elemento, inserendovi il libro indicato, lo inserisce nella lista subito prima della posizione p, ovvero fra il predecessore di p e p, e restituisce la lista modificata. listalibri canclista (listalibri L, posizione p), che sgancia l elemento puntato dalla lista e lo dealloca, restituendo la lista modificata. Che valore ha p dopo l esecuzione della procedura? 4
5 void distruggelista (listalibri *L), che esegue ripetutamente canclista sul primo elemento finché la lista non è vuota; a questo punto, dealloca la sentinella e assegna a L il valore fittizio NO LIST per indicare che non è più una vera lista. Il risultato di questa fase della lezione è il file lista.c. Affinch e il file biblio2.c funzioni correttamente con questa libreria, bisogna modificare leggermente la procedura CaricaLibri, in modo che non restituisca più il valore fittizio NO LIST, ma una lista vuota generata con crealistalibri). Questo perché altrimenti la procedura di distruzione della lista dei libri disponibili va in errore. Ora torniamo ad applicare l approccio top-down, realizzando la procedura CaricaLibri, che legge dal primo file di ingresso una riga alla volta (fgets) e riconosce la prima parola della riga (sscanf): se è la terminazione FINE (strcmp), interrompe la lettura; altrimenti, inserisce la riga nella lista dei libri disponibili. Qui c è una tecnicalità: leggendolo con fgets, il libro terminerà con un carattere di a capo, che si deve decidere se tenere o rimuovere (sovrascrivendolo con \0 dopo averne determinato la posizione con strlen). Per verificare la correttezza della procedura, conviene realizzare subito dopo la funzione StampaLibri, per la quale basta scorrere la lista con una variabili di tipo posizione, partendo da primolista, leggendo ogni elemento con leggelista e passando al successivo con succlista. Il risultato di questa fase della lezione è il file biblio3.c. Quindi passiamo all esecuzione dei movimenti. La procedure EsegueMovimenti: apre il file dei movimenti legge la prima parola di ogni riga (fscanf) per determinare se i movimenti sono terminati e per distinguere fra prestiti e rese se si tratta di prestito o resa, assegna il resto della riga a un libro; purtroppo, c è una tecnicalità: il resto della riga potrebbe partire con degli spazi, che non vanno inclusi nel libro; per saltarli, basta leggere la prima parola con la specifica "%s " anziché "%s". Perché? in caso di prestito: 1. cerca il libro sullo scaffale, chiamando un apposita funzione TrovaLibro (da dichiarare solamente, in base all approccio top-down), 2. lo cancella dalla lista dei libri disponibili 3. lo inserisce nella lista dei prestiti In quale posizione? in caso di resa: 1. cerca il libro nella lista dei prestiti con la funzione TrovaLibro 2. lo cancella dalla lista dei libri disponibili 3. lo inserisce il libro in cima alla lista dei resi Il risultato di questa fase della lezione è il file biblio4.c. Ora procediamo alla realizzazione della procedure StampaIstruzioniRiordino che esegue il riordino e stampa a video le istruzioni corrispondenti. La procedura scorre la lista dei libri resi dalla cima, estraendo e cancellando il primo 5
6 per ciascun libro, scorre la lista dei libri disponibili cercando il primo libro alfabeticamente successivo a quello corrente (primolista, finelista, succlista, leggilista, strcmp) se lo trova, inserisce il libro reso prima di esso e stampa il corrispondente messaggio a video; altrimenti, lo inserisce in coda e stampa il corrispondente messaggio a video. Il risultato di questa fase della lezione è il file biblio5.c. Ora si può procedere a creare una nuova libreria di gestione, basata sull implementazione con cursori. La differenze fondamentali sono: la lista è ospitata in un vettore allocato una volta per tutte dalla funzione crealistalibri; la dimensione non varia durante l esecuzione (se è insufficiente, si esce con un messaggio di errore) e il suo valore LIST SIZE+2 tiene conto degli elementi massimi ospitabili, della sentinella e di una sentinella per la così detta lista libera, che ospita gli elementi del vettore non impiegati nella lista data i puntatori sono sostituiti da indici numerici; per accedere agli elementi, bisogna quindi conoscere sia la posizione sia la lista: l elemento in posizione p della lista L è banalmente L[p] la creazione della lista richiede l allocazione del vettore, l impostazione della sentinella (nella posizione SENTINELLA), che punta sé stessa, e la costruzione di una lista libera contenente tutti gli altri elementi inserimenti e cancellazioni corrispondono a spostamenti fra lista vera e propria e lista libera: ci sono più operazioni sulle posizioni, ma vengono a mancare le allocazioni e deallocazioni La nuova implementazione è molto diversa dalla precedente, ma non richiede nessuna modifica al file biblio.c. Potenza delle strutture dati astratte. Il risultato di questa fase della lezione sono i file lista2.h e lista2.c. Rigorosamente parlando, sarebbe possibile gestire tutte e tre le liste sul vettore, dato che sono mutuamente esclusive. Tecnicamente, basterebbe avere 4 posizioni definite come sentinelle (una per ogni lista più una per la lista libera). Questo richiederebbe però di rendere dichiarazioni e definizioni specifiche per questo caso particolare. Il che potrebbe essere conveniente: è una scelta di progetto. 6
Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi
Fondamenti di Informatica T-1 modulo 2 Laboratorio 10: preparazione alla prova d esame 1 Esercizio 1 - Gestione degli impegni Gli impegni giornalieri dei dipendenti di un azienda devono essere aggiornati
Strutture Dinamiche. Fondamenti di Informatica
Strutture Dinamiche Fondamenti di Informatica 1 Indice Allocazione e de-allocazione di memoria Liste e loro gestione Companies, srl 2 Allocazione e cancellazione di memoria malloc (sizeof (TipoDato));
Fondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array e funzioni 2. Array e funzioni ricorsive 3. Array e confronto di array 2 Esercizio 1 Creare un programma che legga da
Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc
Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Oggetti e puntatori Un oggetto è un area di memoria
Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
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
La struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
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
Programmazione (imperativa)
Programmazione (imperativa) Corso di Laurea in Informatica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Lunedì 12.00-13.00 e 14.00-16.00 Mercoledì 14.00-17.00 Laboratorio: Giovedì 12.00-13.00
Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto
Argomenti della lezione Introduzione agli Algoritmi e alle Strutture Dati Operazioni su Liste Dr. Emanuela Merelli Tipi di Dato Astratto Lista Lineare Pila Coda Concetto di Struttura dati dinamiche Lista
I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
Assembly (3): le procedure
Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 13 1/23 Chiamata
Sommario. Le strutture dati elementari per implementare sequenze: Vettori Liste
Sequenze Sommario Le strutture dati elementari per implementare sequenze: Vettori Liste Strutture dati elementari Le strutture dati vettore e lista sono fra le strutture dati più usate e semplici Il loro
Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 3 Cristian Del Fabbro Prossima lezione GIOVEDÌ 12 NOVEMBRE ORE 14:00 Array a.k.a. vettore Un array è una collezione ordinata di dati omogenei (cioé sono tutti dello
Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano
Scope delle variabili e passaggio parametri Danilo Ardagna Politecnico di Milano 1-4-2014 Introduzione! Con le funzioni è stato introdotto un meccanismo per definire dei piccoli programmi all interno di
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
Ottenere una modifica del parametro attuale
Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)
Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.
Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010 Sommario 1 Gestione della Memoria 2/24 Programmazione II Lezione 7 9/11/2010
Gestione dinamica della memoria
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.
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
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
4. I moduli in Access 2000/2003
LIBRERIA WEB 4. I moduli in Access 2000/2003 Il modulo è uno degli oggetti del database di Access e rappresenta un insieme di dichiarazioni e routine scritte con il linguaggio Visual Basic, memorizzate
Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
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
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori
Esercizio 2: Algebra dei Puntatori e Puntatori a Puntatori Salvatore Mandrà 7 Ottobre 2008 1 Esercizio L esercizio prevede l implementazione di funzioni per il prodotto di una matrice per un vettore, attraverso
Esercizi Strutture dati di tipo astratto
Salvatore Cuomo Esercizi Strutture dati di tipo astratto Lezione n. 20 Parole chiave: Strutture dati, pile code, liste Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio
Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1
Operazioni sulle liste Definiamo una serie di procedure e funzioni per operare sulle liste. Usiamo liste di interi per semplicità, ma tutte le operazioni sono realizzabili in modo del tutto analogo su
Introduzione ai puntatori in C Definizione
Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il
Tipi astratti pila e coda
Tipi astratti pila e coda Una pila è un tipo astratto che consente di rappresentare un insieme di elementi in cui ogni eliminazione ha per oggetto l elemento che è stato inserito per ultimo. Questa disciplina
GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
La programmazione strutturata
La programmazione strutturata Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Strutturare un programma Scrivere programmi illeggibili
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 2016
Heap e code di priorità
Heap e code di priorità 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
Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }
Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio
Programmazione con Java
Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:
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
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
L Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
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
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
La Gestione della Memoria. Carla Binucci e Walter Didimo
La Gestione della Memoria Carla Binucci e Walter Didimo Esecuzione di programmi Java L esecuzione di un programma Java richiede: la compilazione del codice Java in bytecode Java (un linguaggio macchina
CORSO DI PROGRAMMAZIONE
ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE PILE E CODE DI DATI DISPENSA 11.02 11-02_Pile_Code_[ver_15] Questa dispensa è rilasciata sotto la licenza Creative Common CC BY-NC-SA.
Video Scrittura (MS Word) Lezione 3 Formattazione e Stampa documenti
Video Scrittura (MS Word) Lezione 3 Formattazione e Stampa documenti Formattazione di un documento La formattazione di un documento consente di migliorare l impaginazione del testo e di dare al al documento
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
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
Es. 1. interi, li stampi a video ponendo prima i numeri pari e poi i numeri dispari. Es. 1. int readlength(file *f, int *even, int *odd)
Es. 1 È dato un file binario, di nome valori.dat, contenente una sequenza di int; non è noto a priori quanti interi siano presenti nel file. I valori sono disposti in ordine casuale. Si realizzi un programma
Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)
Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Selezione di prove di esame al calcolatore Esercizio 1 (esame del 13/01/2006) La classe Matrice definisce oggetti che rappresentano matrici
LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice
LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 18.III.2015 VINCENZO MARRA Indice Parte 1. L algoritmo euclideo 3 Esercizio 1 3 L algoritmo euclideo
Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Informatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list
LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Lezione 13 - Modulo 1 Free list Politecnico di Milano - Prof. Sara Comai 1 Politecnico di
Lezione 8 Struct e qsort
Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort
Scope, Memoria e Tabella dei Simboli
Scope, Memoria e Tabella dei Simboli La tabella dei simboli è uno strumento fondamentale attraverso il quale interpreti e compilatori implementano la traduzione da un programma scritto in un linguaggio
Memoria Virtuale. Alessandro A. Nacci ACSO 2014/2014
Memoria Virtuale Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014 1 2 Algoritmo LRU! Buone prestazioni in media! Utilizza bit di controllo che riportano le informazioni sugli accessi alle
Linguaggio C: le funzioni. Introduzione e sintassi
ISIS "Guido Tassinari" di Pozzuoli Indirizzo Informatico - Articolazione Informatica Informatica Prof. A.S. 2012/2013 Linguaggio C: le funzioni. Introduzione e sintassi 21/10/2012 Introduzione Spesso alcuni
4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
Liste, Pile e Code. 1. L ADT Lista. Liste Pile e Code Pag. 1/18
Liste Pile e Code Pag. 1/18 Liste, Pile e Code Le liste, le pile e le code rappresentano tre ADT elementari che ricorrono frequentemente nella vita reale. Esempi usuali di una lista, una pila ed una coda
Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
Allocazione dinamica della memoria: calloc() Se T è il nomed di un tipo, la chiamata calloc(n, sizeof(t)) è equivalente a malloc(n * sizeof(t))
Allocazione dinamica della memoria: malloc() In C è possibile allocare dinamicamente un area di memoria (ossia, durante l esecuzione di un programma) tramite le funzioni malloc() e calloc() (occorre includere
Procedura. Procedure e funzioni. Esempio di procedura in C. Procedure in C. Esempio con prototipo. Esecuzione del codice
Procedure e funzioni In linguaggio C Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata. In un primo tempo la macchina deve essere
Fondamenti di Informatica T-1
Fondamenti di Informatica T-1 Mappe Tutor: Allegra De Filippo allegra.defilippo@unibo.it a.a. 2015/2016 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 1 Mappe: definizione Tabelle a due colonne:
Grafi: visita generica
.. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima
Algoritmi e strutture dati
Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 3 Implementazioni dei dizionari ordinati Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio
Linguaggio C: i file
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa
INTRODUZIONE ALLA PROGRAMMAZIONE
INTRODUZIONE ALLA PROGRAMMAZIONE Prof. Enrico Terrone A. S: 2008/09 Definizioni Programmare significa risolvere problemi col computer, cioè far risolvere problemi al computer attraverso un insieme di informazioni
Fondamenti di Informatica
Fondamenti di Informatica Prima prova intermedia - 11 Novembre 2009 Si risolvano i seguenti esercizi. Il compitino prevede un punteggio massimo di 15/14-esimi, cui andranno sommati i punti ottenuti nel
Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni 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
Esercizio 1 (15 punti)
Esercizio 1 (15 punti) Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I Prova scritta del 16 giugno 2017 Il noto gioco MasterMind
Abstact Data Type. Abstact Data Type. Pubblico e privato. Struttura di un ADT
Abstact Data Type 2 Abstact Data Type Ver. 2.4 ADT, definisce un concetto astratto e il suo comportamento Viene utilizzato come una scatola nera (oggetto) di cui è visibile solo che cosa fa e non come
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 06 Array" Lab06 1 Esercizio 1" n Creare un programma che legga da input un numero non noto a priori di interi
Struttura dati astratta Coda
CODE Struttura dati astratta Coda La coda o queue è una struttura dati astratta in cui l'inserimento e l estrazione sono consentite solo in specifiche posizioni; in particolare, l'inserimento è consentito
ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)
ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente
Algoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
Rappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
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
Algoritmi e Strutture Dati
schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] Strutture dati Dinamiche: Le liste Una lista è una sequenza di elementi di un certo tipo in cui è possibile aggiungere e/o
Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura
Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina
Caratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
Uso avanzato dei puntatori Allocazione dinamica della memoria
Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
Introduzione al C++ (continua)
Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x
Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)
Le procedure L insieme delle istruzioni (4) Architetture dei Calcolatori (lettere A-I) In ogni linguaggio di programmazione si struttura il proprio codice usando procedure (funzioni, metodi, ) L utilizzo
liste ogni nodo ha un successore, tranne l ultimo della lista che ne ha zero; alberi binari ogni nodo ha zero, uno oppure due figli
Alberi generali Gli alberi visti fino a questo momento erano insiemi di nodi collegati fra di loro, in cui ogni nodo poteva avere al massimo due figli. Negli alberi generali, ogni nodo può avere un numero
Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa Array di array A. Miola Febbraio 8 http://www.dia.uniroma.it/~java/fondinf/ Array di array Contenuti Array bidimensionali creazione
14Ex-Cap11.qxd :20 Pagina Le macro
14Ex-Cap11.qxd 21-12-2006 11:20 Pagina 203 11 Le macro Creare le macro Registrare una macro Eseguire una macro Riferimenti assoluti e relativi nelle macro Assegnare un pulsante a una macro Modificare una
Gestore di Stringhe 1
Gestore di Stringhe 1 Esercizio Specifica Si implementi il gestore di un array di Stringhe. public void add (String st) Consente di aggiungere la stringa st all array qualora ci sia spazio disponibile,
Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0
STRINGHE: ARRAY DI CARATTERI Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1
Linguaggio C: le funzioni. Introduzione e sintassi
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Introduzione e sintassi La presente dispensa
Esercitazione: Implementazione in linguaggio C dell ADT. Stack con l utilizzo. di linked list
Esercitazione: Implementazione in linguaggio C dell ADT Stack con l utilizzo di linked list Laboratorio di Programmazione Introduzione un ADT (Abstract Data Type) è un modello (formale) che generalizza
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E03 Esempi di algoritmi e programmi A. Miola Novembre 2011 1 Contenuti q Progettazione di algoritmi q Problemi di ingresso - uscita
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
La Struttura Dati Pila
La Struttura Dati Pila La pila o stack è una particolare struttura dati in cui l'inserimento e la cancellazione sono consentite solo in una specifica posizione, chiamata cima (top) dello stack. La gestione
Laboratorio di Informatica
Liste semplici (semplicemente linkate) Una lista semplice e costituita da nodi Laboratorio di Informatica 7. Strutture complesse di dati in C++ Ogni nodo e una struttura che contiene : Dati Un riferimento
Il linguaggio C Strutture
Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi
Laboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 8 gennaio 8 Il problema è simile all esercizio 5.6 del libro di testo di algoritmi (Introduzione agli algoritmi e strutture dati, T.
Strutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
Parametri Formali di una Funzione e Record di Attivazione
Parametri Formali di una Funzione e Attivazione Un record di attivazione rappresenta il mondo di una funzione, e contiene tutto ciò che ne caratterizza l esistenza, tra cui ad esempio: le variabili locali
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