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.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Uso avanzato di C.
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Procedure e funzioni ricorsive
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
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:
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
PROGRAMMI DI RICERCA E ORDINAMENTO
Esercizi su alberi binari
Tail recursion: esempio
Alberi binari Definizione della struttura dati: struct tree { };
Esercizi su alberi binari di ricerca
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli.
Corso di Fondamenti di programmazione a.a.2009/2010
Esercizi di esonero (a.a. 2007/2008) Compito C, terzo esercizio Data una sequenza di caratteri s1 ed una stringa s2 diciamo che s1 è contenuta in s2 se.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.
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. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
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.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
CORSO DI PROGRAMMAZIONE II
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
Le liste dinamiche La ricorsione
Le funzioni.
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.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Corso di informatica Athena – Periti Informatici
Massimo Comun Divisore
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
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 su File.
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.
Esercitazioni su liste
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.
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.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Fondamenti di Informatica
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Informatica 4 La ricorsione. Definizione di ricorsione Ricorsione è la proprietà di quei programmi che, all’interno delle istruzioni che li compongono,
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Esercitazioni di Prog. II (esercizi su alberi ennari)
comprensione e modifica di codice
Transcript della presentazione:

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 in Informatica Università degli Studi La Sapienza (esercizi di preparazione al secondo esonero)

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 1 Data una lista L di interi e dato un intervallo [i,j] si scriva una funzione che verifichi se esistono in L valori interi nellintervallo specificato La funzione dovrà prendere in input La funzione dovrà prendere in input una lista L una lista L due valori interi (i,j) due valori interi (i,j) Dovrà restituire in output Dovrà restituire in output 0 se nessuno degli elementi di L ha valori nellintervallo [i,j] 0 se nessuno degli elementi di L ha valori nellintervallo [i,j] 1 altrimenti 1 altrimenti Diamo la soluzione ricorsiva Diamo la soluzione ricorsiva

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 1-soluzione ricorsiva int Rfindintervallista (LISTA L, int i, int j) { if (L==NULL) return 0; else if ((L->elem>=i)&&(L->elem next,i,j)); }

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 2 Data una lista L di interi e dato un intervallo [i,j] si scriva una funzione che calcoli il numero di elementi di L che abbiano un valore intero nellintervallo specificato La funzione dovrà prendere in input La funzione dovrà prendere in input una lista L una lista L due valori interi (i,j) due valori interi (i,j) Dovrà restituire in output Dovrà restituire in output Il numero di elementi di L che ha un valore in [i,j] Il numero di elementi di L che ha un valore in [i,j] Diamo la soluzione ricorsiva e la soluzione iterativa

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 2-soluzione ricorsiva int Rnum_occintervallista (LISTA L,int i, int j) { if (L==NULL) return 0; else if ((L->elem>=i)&&(L->elem next,i,j)); else return (Rnum_occintervallista(L->next,i,j)); } int Rnum_occintervallista (LISTA L,int i, int j) { if (L==NULL) return 0; else if ((L->elem>=i)&&(L->elem next,i,j)); else return (Rnum_occintervallista(L->next,i,j)); }

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 2-soluzione iterativa int num_occintervallista (LISTA L,int i, int j) { int count=0; while (L!=NULL) { if ((L->elem>=i)&&(L->elem elem>=i)&&(L->elem<=j)) count++; L=L->next; } return count; }

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 3 Si scriva una funzione ricorsiva che data una lista L elimini un elemento, ne lasci val, elimini di nuovo un elemento, ne lasci val etc. Cosa intendiamo? – se val=3 vogliamo eliminare: il primo elemento il primo elemento il quarto elemento (lasciamo tre elementi) il quarto elemento (lasciamo tre elementi) Lottavo elemento etc.

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 3 –versione ricorsiva Si scriva una funzione Ricorsiva che, data una lista elimini Un elemento ogni val La funzione è chiamata Dal main con k==0 struct node { int elem; struct node *next; }; typedef struct node NODOLISTA; typedef NODOLISTA *LISTA; LISTA eliminaognik (LISTA l1, int k, int val) { LISTA temp; if (l1==NULL) return l1; else if (k==0) {temp=l1;l1=l1->next; free (temp); return eliminaognik(l1,val,val); }else{l1->next=eliminaognik(l1->next,k-1,val); return l1; }}

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 3-variante void eliminaognikpuntpunt (LISTA *l1, int k, int val) { LISTA temp; if (*l1==NULL) return; else if (k==0) {temp=*l1;*l1=(*l1)->next; free (temp); eliminaognikpuntpunt(l1,val,val);return;}else{eliminaognikpuntpunt(&((*l1)->next),k-1,val);return;}} Si scriva una funzione Ricorsiva che, data una lista elimini Un elemento ogni val struct node { int elem; struct node *next; }; typedef struct node NODOLISTA; typedef NODOLISTA *LISTA;

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 4 Data una lista si scriva una funzione che elimini gli elementi con valori pari della lista (si fornisca una versione ricorsiva) Data una lista si scriva una funzione che elimini gli elementi con valori pari della lista (si fornisca una versione ricorsiva)

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 4 void eliminapari(LISTA *l1) { LISTA temp; if (*l1==NULL) return; else if ((*l1)->elem %2) {eliminapari(&(*l1)->next);return;}else{temp=*l1;*l1=(*l1)->next;free(temp);eliminapari(l1);return;}} Si scriva una funzione Ricorsiva che, data una lista elimini Gli elementi contenenti Valori pari

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 5 Si scriva una funzione che date due liste costruisca una terza lista data dallunione delle prime due Potete utilizzare allinterno del codice funzioni che abbiamo precedentemente definito

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 5 void mergeliste (LISTA *PTRLISTA, LISTA L1, LISTA L2) { LISTA curr, temp; temp=NULL;PTRLISTA=&temp; curr = L1; while (curr!=NULL) { if (!(Rfindlista(*PTRLISTA,curr->elem))) insertHEADlista(PTRLISTA,curr->elem); curr = curr->next; } curr = L2; while (curr!=NULL) { if (!(Rfindlista(*PTRLISTA,curr->elem))) insertHEADlista(PTRLISTA,curr->elem); curr = curr->next; }}

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 6 Si scriva una funzione che date due liste costruisca (e restituisca il puntatore alla testa di) una terza lista i cui elementi contengono tutti e soli i valori che sono presenti in entrambe le prime liste (ogni valore compare esattamente una volta) Potete utilizzare funzioni precedentemente definite

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 6 void intersezioneliste (LISTA *PTRLISTA, LISTA L1, LISTA L2) { LISTA curr, temp; temp=NULL;PTRLISTA=&temp; curr = L1; while (curr!=NULL) { if ((Rfindlista(L2,curr->elem)) &&(!(Rfindlista(*PTRLISTA,curr->elem)))) insertHEADlista(PTRLISTA,curr->elem); curr = curr->next; }} SUPPONETE CHE LE DUE LISTE L1 e L2 SIANO ORDINATE. POTETE RENDERE PIU EFFICIENTE IL CODICE?

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Glicini struct nodoramo{ int valore; struct nodoramo *succ; }; struct elemglicine{ struct nodoramo *ramo; struct elemglicine *next; }; typedef struct nodoramo NODO; typedef NODO *RAMO; typedef struct elemglicine GLICINE2; typedef GLICINE2 *GLICINEPTR; next ramo succ

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 7 Si scriva una funzione che dato un glicine stampi i valori dei suoi elementi

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 7 void stampaglicine (GLICINEPTR G) { RAMO r; if (G!=NULL) { printf("[ ] ->"); r=G->ramo;while(r!=NULL){printf("[[%d]]->",r->valore);r=r->succ;} printf("\n | \n"); stampaglicine(G->next);}} next ramo succ G

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 8 Si scriva una funzione che dato un glicine calcoli la somma dei suoi elementi pari Si possono utilizzare funzioni ausiliarie

Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2007/2008 Esercizio 8 int sommapariramo(RAMO R) {if(R==NULL) return 0; else return((R->valore%2)?sommapariramo(R- >succ):(1+sommapariramo(R->succ))); } /*Post: restituisce il numero di valori pari nel glicine*/ int sommapari(GLICINEPTR G) { if (G==NULL) return 0; elsereturn(sommapariramo(G->ramo)+sommapari(G->next));} Funzione ausiliaria