Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Uso avanzato di C.
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Iterazione A. Ferrari.
Procedure e funzioni ricorsive
Sviluppo di programmi strutturati
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Introduzione al linguaggio C
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Algoritmi e strutture dati 2/ed 2 Copyright © The McGraw.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
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, 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 PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
APPUNTI SUL LINGUAGGIO C
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
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
Struct, enum, Puntatori e Array dinamici
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi C sui tipi definiti dall’utente
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
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.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Esercizi C su array e matrici
Le liste dinamiche La ricorsione
Le funzioni.
Equazione di secondo grado.
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 =
Corso di informatica Athena – Periti Informatici
Programmazione di Calcolatori
void binario(int n); …………………
Massimo Comun Divisore
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 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.
C14 #5 I cicli FOR e WHILE Piero Scotto - C14.
Soluzioni e commenti esercizi 1 e 2
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 { };
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
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.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Lezione sulle allocazioni dinamiche
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
Transcript della presentazione:

Esercizi su strutture dinamiche Fondamenti di Programmazione Canale AD a.a. 2009/2010

Glicine 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; void stampaglicine(GLICINEPTR); int sommapari(GLICINEPTR); int sommapariramo(RAMO); main() …..

Costruzione di un Glicine main() { int insramo; int i; int valore; int dimramo; GLICINEPTR GG=NULL; RAMO RR; GLICINEPTR tempg; RAMO tempr; printf("vuoi inserire un nuovo ramo? se si scrivi 1 altrimenti 0 \n"); scanf("%d",&insramo); while (insramo) { tempg=malloc(sizeof(GLICINE2)); tempg->next=GG; tempg->ramo=NULL; GG=tempg; RR=NULL; printf("numero di elementi del ramo?\n"); scanf("%d",&dimramo); for (i=0;i<dimramo;i++) { printf("inserisci valore primo elemento \n"); scanf("%d",&valore); tempr=malloc(sizeof(NODO)); tempr->valore=valore; tempr->succ=RR; RR=tempr; } GG->ramo=RR; printf("vuoi inserire un nuovo ramo? se si scrivi 1 altrimenti 0 \n"); scanf("%d",&insramo); } printf("stampa del glicine \n"); stampaglicine(GG); printf(la somma dei valori pari e' %d \n", sommapari(GG)); }

Costruzione di un Glicine… main() { int insramo; int i; int valore; int dimramo; GLICINEPTR GG=NULL; RAMO RR; GLICINEPTR tempg; RAMO tempr; printf("vuoi inserire un nuovo ramo? se si scrivi 1 altrimenti 0 \n"); scanf("%d",&insramo); while (insramo) { tempg=malloc(sizeof(GLICINE2)); tempg->next=GG; tempg->ramo=NULL; GG=tempg; RR=NULL; printf("numero di elementi del ramo?\n"); scanf("%d",&dimramo);

…Costruzione di un Glicine for (i=0;i<dimramo;i++) { printf("inserisci valore primo elemento \n"); scanf("%d",&valore); tempr=malloc(sizeof(NODO)); tempr->valore=valore; tempr->succ=RR; RR=tempr; } GG->ramo=RR; printf("vuoi inserire un nuovo ramo? se si scrivi 1 altrimenti 0 \n"); scanf("%d",&insramo); } printf("stampa del glicine \n"); stampaglicine(GG); printf(la somma dei valori pari e' %d \n", sommapari(GG)); }

Esercizio 1 Si scriva una procedura che, dato un glicine Ne stampi gli elementi /*Post: stampa i valori contenuti in un glicine*/ 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); }

Esercizio 2 Si scriva una funzione Che dato un GLICINE calcoli La somma degli elementi Pari nel GLICINE /*Post:Restituisce la somma dei valori pari nel ramo corrente*/ int sommapariramo(RAMO R) { if(R==NULL) return 0; else return((R->valore%2)?sommapariramo(R->succ): (R->valore+sommapariramo(R->succ))); } /*Post: restituisce la somma di valori pari nel glicine*/ int sommapari(GLICINEPTR G) { if (G==NULL) return 0; else return(sommapariramo(G->ramo)+sommapari(G->next)); }

Esercizio 2 Si scriva una funzione Che dato un GLICINE calcoli Il numero degli elementi Pari nel GLICINE /*Post:Restituisce il numero dei valori pari nel ramo corrente*/ int numpariramo(RAMO R) { if(R==NULL) return 0; else return((R->valore%2)?numpariramo(R->succ): (1+numpariramo(R->succ))); } /*Post: restituisce il numero di valori pari nel glicine*/ int numpari(GLICINEPTR G) { if (G==NULL) return 0; else return(numpariramo(G->ramo)+numpari(G->next)); }

Esercizio 3 Si scriva una funzione Che dato un GLICINE ne calcoli la Profondita (ovvero La lunghezza Del ramo piu lungo) int elementiramo(RAMO R) { if(R==NULL) return 0; else return(1+elementiramo(R->succ))); } int profondita(GLICINEPTR G) { int temp, temp1; if (G==NULL) return 0; else { temp=profondita(G->next); temp1=elementiramo(G->ramo); if (temp>=temp1) return temp; else return temp1; }

Esercizio 4 Si scriva una funzione che dato un GLICINE verifichi se e elegante Un glicine si dice elegante se i suoi rami hanno una lunghezza crescente int elegante(GLICINEPTR G) {if ((G==NULL)|| (G->next==NULL)) return 1; else { return ((elementiramo(G->ramo) next->ramo)) &&(elegante(G->next)); }