Esercitazioni su liste

Slides:



Advertisements
Presentazioni simili
Uso avanzato di C.
Advertisements

Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°13 Heap massimo.
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Introduzione alla Object Oriented Programming, OOP E.Mumolo. DEEI
E.Mumolo. DEEI Introduzione alla programmazione ad oggetti in C++ Object Oriented Programming, OOP E.Mumolo. DEEI
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
Esercizi su code Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori.
Esercizi su alberi binari
Struct, enum, Puntatori e Array dinamici
1 Strutture Dinamiche Corso di Informatica A Vito Perrone.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
La Programmazione Ricorsiva
Sorting: MERGESORT Vogliamo ordinare lista (a 1,…,a n ). 1.Dividi lista in 2 sottoliste aventi (quasi) la stessa dimensione: (a 1,a 3,a 5,…) e (a 2,a 4,…),
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
Corso di informatica Athena – Periti Informatici
1. 2 Struct Al fine di illustrare luso del tipo struct, utilizzando le struct descritte nella lezione precedente, mostriamo come si scrive un programma.
Programmazione di Calcolatori
C. Gaibisso Programmazione di Calcolatori Lezione XXII La struttura di dati lista di variabili strutturate Programmazione di Calcolatori: le liste di.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Esercizi Liste.
Esercizi su File e Liste
Università degli Studi di BresciaA.A. 2012/2013 Fondamenti di Programmazione Docente: Alessandro SaettiA.A. 2012/2013 Università degli Studi di Brescia.
Grafi Rappresentazione mediante liste di adiacenza:
Tail recursion: esempio
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Esercizi su alberi binari di ricerca
Alberi binari Definizione della struttura dati: struct tree { };
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
CORSO DI PROGRAMMAZIONE II Lezione 22
Sistemi e Tecnologie Informatiche Ricorsione Umberto Ferraro Petrillo.
1 Un esempio con iteratore: le liste ordinate di interi.
Struttura di una lista legata Una lista legata è una variabile strutturata in cui ogni elemento mantiene l’indirizzo (mediante un puntatore) dell’elemento.
Esercizio Si legga una sequenza di numeri interi da tastiera (terminatore: 0), quindi: Creare lista L1 con inserimento in testa; cons Creare lista L2 con.
Dato un vettore di reali di dimensione DIM, si inseriscano N elementi presi da tastiera, si utilizzi 0 per terminare l’inserimento. Ordinare gli elementi.
AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Il linguaggio C Notate che ....
Liste Concatenate 11 Aprile E’ una delle strutture dati fondamentali in tutti i linguaggi di programmazione di alto livello Una Lista Concatenata.
1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
Fondamenti di Informatica
LIP: 4 Maggio 2007 Interfacce. Cos’e’ una Interfaccia una interfaccia e’ un particolare tipo di classe contiene solo la specifica non ha implementazione.
Fondamenti di informatica T-A Esercitazione 2 : Linguaggio Java, basi e controllo del flusso AA 2012/2013 Tutor : Domenico Di Carlo.
Esercitazioni su alberi
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi sui dati strutturati 13 Tipi di dati strutturati.
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi su stringhe e file 15 Stringhe e file.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

Esercitazioni su liste Si vuole tenere in memoria le informazioni riguardanti gli studenti iscritti ad un corso di informatica. Il corso è organizzato in due gruppi, si utilizzi una lista per ogni gruppo. Si astragga il concetto di lista in modo da rendere l’implementazione il più strutturata possibile. *

Esercitazioni su liste Per fare ciò si cominci a implementare: Una libreria (studente.h, studente.c) contenente la definizione della struttura studente e le funzioni principali per la sua manipolazione. #define DIM_STR 20 typedef struct { char nome[DIM_STR]; char cognome[DIM_STR]; float media; } element; *

Esercitazioni sulle liste Creare le funzioni: boolean isLess(element, element); boolean isEqual(element, element); element getElement(void); void printElement(element); Usare queste librerie per astrarre il tipo di elemento delle liste dall’implementazione *

Esercitazioni sulle liste Dove boolean isLess(element, element); Controlla se un elemento è minore dell’altro boolean isEqual(element, element); Uguaglianza fra elementi element getElement(void); Input da tastiera di un elemento void printElement(element); Stampa a video di un elemento *

Esercitazioni su liste Il programma deve prendere in input un numero N di studenti (N definito dall’utente sempre in input) inserendoli nella lista l1 e un numero M di studenti inserendoli nella lista l2. NB: in l1 inserimento in testa in l2 inserimento in coda. Visualizzare un menu nel quale è possibile: Visualizzare tutti gli studenti, Cercare uno studente (per nome e cognome), Ricerca dello studente con la media più alta, Calcolo della media delle medie dei voti, Cancellazione di uno studente da una lista, Append delle due liste, Copia di una delle due liste in una terza, Stampare il numero di studenti nelle due liste. *

Esercitazioni su liste Le funzioni di manipolazione delle liste, da inserire nel file list.c, list.h secondo le modalità solite, richieste sono state già introdotte a lezione, di seguito un rapido ripasso: typedef enum { false, true } boolean; typedef struct node{ element n; node *next; } listNode; typedef listNode* list; element head(list l); list tail(list l); boolean empty(list l); list emptyList(); list cons(element n, list l); *

Esercitazioni su liste Utilizzando questa base andiamo a implementare le seguenti funzioni. list consTail(element n, list l); // inserimento in coda void showlist(list l); // stampa della lista l list copy(list l); // copia di l in un’altra lista (diversa da l) boolean member(element el, list l); // ricerca di el in l int length(list l); // numero di elementi in l list append (list l1, list l2); // append di l2 in coda a l1 list deleteValue(element n, list l); // cancellazione di n da l element maxAVG(list l); // ricerca studente con media più alta float AVGMedia(list l); // calcolo media dei voti. Tutte le funzioni dovranno essere implementate in maniera RICORSIVA. *

Esercitazioni su liste FACOLTATIVO: implementare l’inserimento ordinato, creare le due liste ordinate in base al cognome (e al nome in caso di cognomi uguali) e aggiungere la funzione di merge delle due liste ordinate in una terza, sempre ordinata. list merge (list l1, list l2); /* unione di due liste ordinate in una terza ordinata anch’essa */ Tutte le funzioni dovranno essere implementate in maniera RICORSIVA. *

Esercitazioni sulle liste Ricorsione, cosa gestire? Un esempio: void recFunct(list l){ if (empty(l)) \\ CASO BASE -> FINE DELLA RICORSIONE \\ TODO else { \\ GESTIONE DEGLI ALTRI CASI \\ CHIAMATA RICORSIVA ALLA FUNZIONE recFunct(tail(l)); } *

Esercitazioni sulle liste TIPS: valutare come eseguire la ricorsione è molto importante per evitare di complicare troppo le funzioni. A volte conviene creare delle sotto funzioni che eseguono il calcolo ricorsivo (a volte potrebbe essere necessario, soprattutto se le interfacce date non possono essere modificate). Un esempio: float recFunct(list l){ return recFunctInterna(l) * 5; } Float recFunctInterna(list l) { if (empty(l)) \\ TODO CASO BASE else { \\ GESTIONE DEGLI ALTRI CASI + CHIAMATA RICORSIVA recFunctInterna(tail(l)); *