Esercitazione 11. Liste semplici
|
|
- Carolina Viviani
- 6 anni fa
- Visualizzazioni
Transcript
1 Esercitazione 11 Liste semplici
2 Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene un informazione e un puntatore per mezzo del quale è legato al successivo. inf Indichiamo con info la parte informazione di ogni elemento, con coda la parte puntatore e con lista il puntatore al primo elemento della lista. info coda info coda info coda NULL lista
3 Liste semplici (o lineari) Una lista vuota non ha elementi ed è rappresentata da lista che punta a NULL. lista NULL La parte informazione (info) dell elemento dipende dal tipo di dati che stiamo trattando: può essere un tipo semplice o derivato. Esempio: lista di stringhe. info coda info coda buon gior info no coda NULL lista
4 Liste semplici (o lineari) Nel caso di una lista lineare i cui elementi sono di tipo intero, lista info coda info coda info coda NULL la dichiarazione del tipo di ogni elemento è: typedef struct Elemento { int info; struct Elemento *coda; /* coda un puntatore ad una struttura Elemento; di tipo elemento */ La dichiarazione del tipo lista di interi è: typedef Elemento *Lista_int;
5 Gestione di una lista Consideriamo il problema di memorizzare e successivamente visualizzare una sequenza di n interi. Il valore di n non è conosciuto a priori, ma è determinato in fase di esecuzione. Se si decide di utilizzare la struttura array si deve prefissare il numero massimo di valori della sequenza. È preferibile quindi una soluzione che utilizzi la memoria in modo dinamico. Il problema presentato si può dividere nei due sottoproblemi: memorizzare la sequenza visualizzare la sequenza
6 Verso il programma Definiamo due funzioni: Lista_int crea_lista ( ); void visualizza_lista ( Lista_int ); Nel main definiamo una variabile lista che punterà al primo elemento della lista: Lista_int lista; e chiamiamo le due funzioni sopra come segue: lista = crea_lista( ); visualizza_lista ( lista );
7 La funzione crea_lista Dichiariamo una variabile lista che conterrà la lista finale, e una variabile list_temp, lista temporanea, per creare gli elementi successivi al primo. Chiediamo all utente di inserire il numero di elementi della lista. Se la lista contiene 0 elementi allora p è la lista vuota: p = NULL Altrimenti, creiamo il primo elemento nel seguente modo: p = (Lista_int) malloc (sizeof (Elemento)); p info coda
8 La funzione crea_lista (continua) Chiediamo quindi all utente di inserire il primo numero che viene assegnato al campo info del primo elemento della lista, cioè p -> info. Inizializziamo poi list_temp con il valore di p. Come per ogni altro tipo di variabile semplice, è possibile fare assegnamenti fra due variabili di tipo lista. Da questo momento sia p che list_temp fanno riferimento ad una lista con un solo elemento. info coda p 7 list_temp
9 La funzione crea_lista (continua) Iniziamo poi un ciclo per la creazione degli elementi successivi al primo. Questo ciclo si ripete n -1 volte, dove n è la lunghezza della sequenza in ingresso. Il ciclo è così costituito: for (i=2; i <= n; i++) crea il nuovo elemento da mettere in coda al precedente sposta di una posizione avanti list_temp chiedi all utente il nuovo numero inserisci il nuovo numero nel campo info del nuovo elemento ciò corrisponde a list_temp -> coda= (Lista_int) malloc (sizeof(elemento)); list_temp = list_temp -> coda; printf ( \ninserisci informazione %d:, i); scanf ( %d, &(list_temp -> info));
10 Le seguenti figure illustrano l esecuzione delle istruzioni all interno del ciclo for per la creazione del secondo elemento della lista. info coda info coda p 7 list_temp info coda info coda p 7 list_temp info coda info coda p 7 3 list_temp
11 La funzione crea_lista (continua) Infine, la funzione assegna al campo coda dell ultimo elemento il valore NULL e termina passando al chiamante il valore di p, cioè la lista creata: return (p); La seguente figura illustra la situazione alla fine dell esecuzione della funzione crea_lista. p info coda info coda info coda NULL Le variabili list_temp e n non esistono più perché sono state dichiarate locali alla procedura.
12 La procedura visualizza_lista La procedura visualizza_lista effettua la scansione. Essa visualizza il campo info di ogni elemento mediante un ciclo while e non restituisce alcun valore. La procedura viene chiamata con il parametro attuale lista visualizza_lista (lista); che corrisponde al parametro formale p. La scansione della lista è: while (p!= NULL) { printf ( %d, p -> info); /* visualizza il campo info */ printf ( ---> ); p = p -> coda; /* scorri di un elemento in avanti */
13 Programma /* Accetta in ingresso una sequenza di interi e li memorizza in una lista. Il numero di interi che compongono la sequenza è richiesto all utente. La lista creata viene visualizzata */ #include <stdio.h> #include <stdlib.h> typedef struct Elemento { /* tipo degli elementi della lista */ int info; struct Elemento *coda; Elemento; typedef Elemento *Lista_int; /* tipo della lista di interi */ Lista_int crea_lista( ); void visualizza_lista ( Lista_int );
14 /* funzione principale */ int main ( ) { Lista_int lista; /* variabile di tipo lista */ lista = crea_lista ( ); /* chiamata alla funzione che crea una lista in cui si memorizza la sequenza di interi */ visualizza_lista (lista); /* chiamata alla funzione che visualizza una lista */
15 /* Funzione per l accettazione dei valori immessi e la creazione della lista. Restituisce la lista creata. */ Lista_int crea_lista ( ) { Lista_int p, list_temp; int i, n; printf ( \n Inserire numero elementi della sequenza: ); scanf ( %d, &n); if (n == 0) p = NULL; /* lista vuota */ else { /* viene creato prima il primo elemento e poi gli elementi successivi */
16 /* creazione del primo elemento */ p = (Lista_int) malloc (sizeof (Elemento)); printf ( \n Inserisci informazione 1: ); scanf ( %d, &(p -> info)); list_temp = p; /* creazione degli elementi successivi */ for (i=2; i<=n; i++) { list_temp -> coda = (Lista_int) malloc (sizeof (Elemento)); list_temp = list_temp -> coda; printf ( \ninserisci informazione %d:, i); scanf ( %d, &(list_temp -> info)); list_temp -> coda = NULL; /* marca di fine lista */ return (p);
17 /* Funzione per la visualizzazione della lista. Il parametro in ingresso è una lista. Versione iterativa.*/ void visualizza_lista (Lista_int p) { printf ( \n lista ---> ); /* ciclo di scansione della lista */ while (p!= NULL) { printf ( %d, p -> info); /* visualizza il campo info */ printf ( ---> ); p = p -> coda; /* scorri di un elemento in avanti */ printf ( NULL\n\n );
18 Maggiore di una lista Consideriamo il seguente problema: memorizzare una sequenza di numeri interi terminante con 0 (zero) in una lista lineare, visualizzare la lista e determinare il maggiore degli elementi. Il valore 0 (zero) non fa parte della lista. Dividiamo il problema in tre sottoproblemi: memorizzare la sequenza in una lista lineare visualizzare la lista determinare il maggiore della sequenza
19 Programma /* Accetta in ingresso una sequenza di interi e li memorizza in una lista. La sequenza termina quando viene immesso il valore 0 (zero). La lista creata viene visualizzata. Determina il maggiore della lista */ #include <stdio.h> #include <stdlib.h> #include <limits.h> typedef struct Elemento { /* tipo degli elementi della lista */ int info; struct Elemento *coda; Elemento; Typedef Elemento *Lista_int; /* tipo della lista di interi */
20 /* dichiarazione delle funzioni usate nel main */ Lista_int crea_lista0 ( ); void visualizza_lista (Lista_int); int maggiore_lista (Lista_int); /* funzione principale */ int main ( ) { Lista_int lista; /* variabile di tipo lista */ lista = crea_lista0 ( ); visualizza_lista (lista); /* chiamata alla funzione che crea una lista */ /* chiamata alla funzione che visualizza una lista */ /* stampa il valore di ritorno della funzione maggiore_lista ( ) */ printf ( \n Il maggiore è: %d\n\n, maggiore_lista(lista));
21 /* Funzione per l accettazione dei valori immessi e la creazione della lista. La sequenza dei valori immessi termina con il valore 0 (zero). Restituisce la lista costruita. */ Lista_int crea_lista0 ( ) { Lista_int p, list_temp; int x; printf ( \n Inserire un numero (0 per fine lista): ); scanf ( %d, &x); if (x == 0) p = NULL; /* lista vuota */ else { /* viene creato prima il primo elemento e poi gli elementi successivi */
22 /* creazione del primo elemento */ p = (Lista_int) malloc (sizeof (Elemento)); p -> info = x; list_temp = p; while (x!= 0) { printf ( \n Inserire un numero (0 per fine lista): ); scanf ( %d, &x); if (x!=0) { /* creazione dell elemento successivo */ list_temp -> coda = (Lista_int) malloc (sizeof (Elemento)); list_temp = list_temp -> coda; list_temp -> info = x; else /* inserimento dell informazione nell elemento */ list_temp -> coda = NULL; /* marca di fine lista */ return (p);
23 /* Determina il maggiore della lista. Il parametro in ingresso è una lista di interi. Versione iterativa.*/ int maggiore_lista (Lista_int p) { int max = INT_MIN; /* minimo intero rappresentabile */ /* ciclo di scansione della lista */ while (p!= NULL) { if (p -> info > max ) max = p -> info; p = p -> coda; /* scorre di un elemento in avanti */ return (max);
24 /* Funzione per la visualizzazione della lista. Il parametro in ingresso è una lista di interi. Versione ricorsiva.*/ void visualizza_lista (Lista_int p) { if (p!= NULL) { printf ( %d, p->info); /* visualizza il campo info */ printf ( ---> ); visualizza_lista ( p -> coda); /* chiamata ricorsiva */ else printf ( NULL\n\n );
25 Esercizio Scrivere la versione ricorsiva della funzione maggiore_lista che determina il valore dell elemento maggiore in una lista di interi. In questo caso, la variabile max che contiene il maggiore deve essere inizializzata fuori dalla funzione, prima della sua chiamata, e deve essere passata come argomento alla funzione maggiore_lista nel seguente modo: /* dichiarazione della funzione */ int maggiore_lista (Lista_int, int); /* nel main ci sono le seguenti istruzioni */ int max = INT_MIN; printf ( \n Il maggiore è: %d\n\n, maggiore_lista( lista, max));
26 Soluzione /* Versione ricorsiva della funzione maggiore_lista */ int maggiore_lista (Lista_int p, int max) { if (p!= NULL) { if (p -> info > max ) max = p -> info; max = maggiore_lista (p -> coda, max); return (max);
27 Esercizio Data in ingresso una sequenza di valori interi terminante con 0 (zero), costruire due liste lineari, una contenente i valori positivi e una contenente i valori negativi. Visualizzare le liste costruite. #include <stdio.h> #include <stdlib.h> Programma typedef struct Elemento { /* tipo degli elementi della lista */ int info; struct Elemento *coda; Elemento; typedef Elemento *Lista_int; /* tipo della lista di interi */
28 /* dichiarazione delle funzioni usate nel main */ void visualizza_lista (Lista_int); /* vedi esercizi precedenti */ Lista_int aggiungi (Lista_int, int); /* funzione principale */ int main ( ) { Lista_int lista_positivi = NULL; /* inizializzazione della lista dei valori positivi */ Lista_int lista_negativi = NULL; /* inizializzazione della lista dei valori negativi */ int x;
29 /* Inserimento dei valori letti nelle liste lista_positivi e lista_negativi */ do { printf ( \n Inserisci un valore (0 per fine lista): ); scanf ( %d, &x); if (x > 0) lista_positivi = aggiungi (lista_positivi, x); if (x < 0) lista_negativi = aggiungi (lista_negativi, x); while (x!= 0); visualizza_lista (lista_positivi); visualizza_lista (lista_negativi);
30 /* La funzione aggiungi inserisce un elemento in testa ad una lista data */ Lista_int aggiungi (Lista_int p, int x) { Lista_int list_temp; list_temp = (Lista_int) malloc (sizeof (Elemento)); list_temp -> info = x; list_temp -> coda = p; p = list_temp; return (p);
31 Esercizio Modificare il programma precedente in modo tale che la funzione aggiungi utilizzi il passaggio dei parametri mediante indirizzo. In questo caso non restituisce alcun valore. Programma #include <stdio.h> #include <stdlib.h> typedef struct Elemento { /* tipo degli elementi della lista */ int info; struct Elemento *coda; Elemento; typedef Elemento *Lista_int; /* tipo della lista di interi */
32 /* dichiarazione delle funzioni usate nel main */ void visualizza_lista (Lista_int); /* vedi esercizi precedenti */ void aggiungi (Lista_int *, int); /* nuova definizione della funzione aggiungi */ /* funzione principale */ int main ( ) { Lista_int lista_positivi = NULL; /* inizializzazione della lista dei valori positivi */ Lista_int lista_negativi = NULL; /* inizializzazione della lista dei valori negativi */ int x;
33 /* Inserimento dei valori letti nelle liste lista_positivi e lista_negativi */ do { printf ( \n Inserisci un valore (0 per fine lista): ); scanf ( %d, &x); if (x > 0) aggiungi (&lista_positivi, x); if (x < 0) aggiungi (&lista_negativi, x); while (x!= 0); visualizza_lista (lista_positivi); visualizza_lista (lista_negativi);
34 /* Funzione aggiungi con passaggio dei parametri mediante indirizzo.*/ void aggiungi (Lista_int *p, int x) { Lista_int list_temp; list_temp = (Lista_int) malloc (sizeof (Elemento)); list_temp -> info = x; list_temp -> coda = *p; *p = list_temp;
35 ESEMPIO Di Esecuzione Inserisci un valore (0 per fine lista): 9 Inserisci un valore (0 per fine lista): -9 Inserisci un valore (0 per fine lista): -7 Inserisci un valore (0 per fine lista): -3 Inserisci un valore (0 per fine lista): 5 Inserisci un valore (0 per fine lista): 3 Inserisci un valore (0 per fine lista): 2 Inserisci un valore (0 per fine lista): > 3--> 5 --> 9--> NULL -3 --> -7 --> -9 --> NULL
36 Esercizio: una gara di pesca 1) Definire un tipo enumerazione TipoPesce che rappresenta i tipi di pesce d acqua dolce carpa, luccio e trota. typedef enum TipoPesce {carpa, luccio, trota TipoPesce; 2) Definire un tipo Pesce che è una struttura con due campi: la specie (carpa, luccio o trota) ed il peso, rispettivamente. typedef struct Pesce { TipoPesce tipo; double peso; Pesce;
37 3) Dichiarare un tipo record Pescatore che rappresenta un concorrente della gara di pesca. Un pescatore ha un nome, gli viene assegnata una postazione (di tipo intero), e man mano che i pesci abboccano alla sua lenza questi si aggiungono alla lista dei pesci da lui pescati, rappresentata dal campo rete. typedef struct Catturato { Pesce pesce; struct Catturato *next; Catturato; typedef Catturato* Rete; typedef struct Pescatore { char *nome; int postazione; Rete rete; Pescatore;
38 4) Definire il tipo Gara che è un array di pescatori. #define MAX 100 typedef Pescatore Gara [MAX]; 5) Implementare la seguente procedura: void IscriviConcorrente (Gara gara, char * nome, int postazione, int i); che inserisce nella cella gara[i] i dati del nuovo concorrente del quale vengono passati il nome e la postazione a lui assegnata. Ovviamente la rete del nuovo concorrente iscritto alla gara sarà inizialmente vuota. void IscriviConcorrente (Gara gara, char * nome, int postazione, int i) { gara[i].nome = (char *) calloc (strlen(nome)+1, sizeof (char)); strcpy (gara[i].nome, nome); gara[i].postazione = postazione; gara[i].rete = NULL;
39 6) Implementare la seguente procedura: void Abbocca (Gara gara, int i, TipoPesce tipo, double peso); che inserisce nella rete corrispondente al pescatore in gara[i] un pesce del tipo e peso specificato. void Abbocca (Gara gara, int i, TipoPesce tipo, double peso){ Rete nuovo = (Rete) malloc (sizeof(catturato)); (nuovo -> pesce).tipo = tipo; (nuovo -> pesce).peso = peso; nuovo -> next = gara[i].rete; gara[i].rete = nuovo;
40 7) Implementare la seguente procedura: double PesoReteVincente (Gara gara, int dim); che restituisce il peso della rete più pesante. La dimensione della porzione significativa dell array gara è dim. double Max (double i, double j) { if (i>j) return i; return j; double PesoRete (Rete rete) { if (rete == NULL) return 0.0; return (rete -> pesce.peso + PesoRete(rete -> next)); double PesoReteVincente (Gara gara, int dim) { if (dim == 0) return 0.0; return Max(PesoRete(gara[dim-1].rete),PesoReteVincente(gara, dim-1));
41 8) Implementare la seguente procedura: double MaxPesce (Gara gara, int dim); che restituisce il peso del pesce più pesante tra tutti quelli pescati dai dim concorrenti alla gara. double MaxNellaRete (Rete rete) { if (rete == NULL) return 0.0; return Max(rete -> pesce.peso, MaxNellaRete(rete -> next)); double MaxPesce(Gara gara, int dim) { if (dim == 0) return 0.0; return Max(MaxNellaRete(gara[dim-1].rete), MaxPesce(gara, dim-1));
42 9) Implementare la seguente procedura: void Stampa (Gara gara, int dim); che produce una rappresentazione sullo standard output dello stato della gara: per ognuno dei concorrenti deve stampare il nome, la postazione e lo stato della rete. void StampaRete (Rete rete) { if (rete! = NULL) { switch ((rete -> pesce).tipo) { case carpa: printf( [carpa, ); break; case luccio: printf( [luccio, ); break; case trota: printf( [trota, ); break; default : ; printf ( %lf ], (rete -> pesce).peso); StampaRete (rete -> next);
43 void Stampa (Gara gara, int dim) { int i; for (i=0; i<dim; i++) { printf( concorrente %d: nome = %s, postazione = %d, rete =, i, gara[i].nome, gara[i].postazione); StampaRete (gara[i].rete); printf ( \n );
Liste a puntatori: un esercizio passo passo
Liste a puntatori: un esercizio passo passo Prof. Orazio Mirabella Liste a puntatori: un esercizio passo passo (for dummies) Prof. Orazio Mirabella 1 Ripassiamo le Liste lineari Una lista lineare è una
DettagliEsercitazione 12. Esercizi di Ricapitolazione
Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 6 - Liste Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
DettagliIl 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;
DettagliEsercizio 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
Dettaglidott. Sabrina Senatore
dott. Sabrina Senatore Dipartimento di Informatica Riepilogo strutture 1 Sintassi della dichiarazione: typedef struct nome_tipo { Dichiarazione dei campi nome_tipo; typedef struct point{ int x; int y;
DettagliStrutture 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));
DettagliLinguaggio C - Strutture
Strutture: Le strutture (talvolta chiamate aggregati), così come gli array, sono tipi di dati derivati. Indicano collezioni di variabili collegate sotto un unico nome. Le strutture possono contenere variabili
DettagliEsercizio 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
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 21 Strutture dinamiche Gli array ci permettono di memorizzare un insieme di dati dello stesso tipo Deve essere noto staticamente il
DettagliLinguaggio C. Esercizio 1
Linguaggio C Esercizi su puntatori e liste Walter Didimo (e-mail:didimo@dia.uniroma3.it) supplemento al Corso di Calcolatori Elettronici (Riccardo Torlone) 1 Esercizio 1 Siano p e q due puntatori a variabili
DettagliIl 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
DettagliStrutture dati dinamiche in C (II)
Strutture dati dinamiche in C (II) Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Le liste concatenate (ancora ma in modo più formale) L
DettagliL'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
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliImplementazione di Liste puntate
Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Implementazione di Liste puntate 2 1 Indice Liste puntate semplici: Gli elementi sono logicamente
Dettagli5. 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
DettagliADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)
ADT LISTA Pochi Linguaggi forniscono tipo lista fra predefiniti (LISP, Prolog); per gli altri, ADT lista si costruisce a partire da altre strutture dati (in C tipicamente vettori o puntatori) OPERAZIONI
DettagliPerché 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
DettagliStruct, enum, Puntatori e Array dinamici
Struct, enum, Puntatori e Array dinamici Tratti dal corso del Dr. Francesco Fabozzi Corso di Informatica Tipi di dato in C Abbiamo esaminato diversi tipi di dato che il C mette a disposizione dell utente
DettagliInformatica 1. Prova di recupero 21 Settembre 2001
Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo
DettagliC: 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
DettagliERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
DettagliUnità 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;
DettagliEsercizi. 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
DettagliInserimento in una lista ordinata
Inserimento in una lista ordinata Vogliamo inserire un nuovo elemento in una lista in cui gli elementi sono memorizzati in ordine crescente: Passo 1: creare un nuovo nodo della lista Passo 2: trovare il
DettagliArgomenti 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
Dettagli1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio
soluzione di un problema 1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio rappresentazioni disponibili in C++:
DettagliFUNZIONI che operano su LISTE
U N D I C E S I M A ESERCITAZIONE 2007/2008 L. MANDELLI FUNZIONI che operano su LISTE Sfruttando i tipi pelemento (puntatore ad un tipo elemento) e/o ELEMENTO codificare le seguenti funzioni che operano
DettagliDati 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
DettagliEsercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliStringhe 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
DettagliScrittura formattata - printf
Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliEsercitazione 5. Procedure e Funzioni Il comando condizionale: switch
Esercitazione 5 Procedure e Funzioni Il comando condizionale: switch Comando: switch-case switch (espressione) { /* espressione deve essere case costante1: istruzione1 di tipo int o char */ [break]; case
DettagliEsercizi su strutture dati
Esercizi su strutture dati Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 21 dicembre 2016 Liste collegate
DettagliFondamenti di Informatica II
Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura
DettagliIntroduzione 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
DettagliEsercizi. Stringhe. Stringhe Ricerca binaria
Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria L allocazione delle variabili Allocazione e rilascio espliciti di memoria Le funzioni malloc e free 2 2006 Politecnico di Torino 1 Allocare = collocare in
DettagliLezione 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
DettagliLinguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
DettagliEsercizio 1: Puntatori impiegati che sono manager
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 10 Esercitazione: 25 gennaio 2006 Esercizi di riepilogo Problema: Esercizio 1: Puntatori impiegati che sono manager Si
DettagliProf. 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
DettagliElementi 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
DettagliGestione 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.
DettagliCompendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)
Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione
DettagliConsideriamo un vettore allocato dinamicamente
Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero
Dettagli9 - 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
DettagliEsercitazione 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
DettagliLezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit
Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione
DettagliEsercizi C sui tipi definiti dall utente
Politecnico di Milano Esercizi C sui tipi definiti dall utente Typedef,, tipi enumerativi e strutturati Sinonimi: typedef int Intero; Intero a; int b; Definire un nuovo tipo typedef char Stringa[10]; Stringa
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 5 Struct, Union e allocazione dinamica della memoria Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
DettagliImplementazione 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
DettagliEsercizi di programmazione in linguaggio C English Dictionary
Esercizi di programmazione in linguaggio C English Dictionary Il file di testo wordnet.txt contiene un certo numero di parole (word) e il corrispondente significato (meaning) secondo il seguente formato:
DettagliEsercitazione 3. Espressioni booleane I comandi if-else e while
Esercitazione 3 Espressioni booleane I comandi if-else e while Esercizio Si consideri la seguente istruzione: if (C1) if (C2) S1; else S2; A quali delle seguenti interpretazioni corrisponde? if (C1) if
DettagliLinguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C tipi di dati definiti dall utente Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Tipi di dati in C Predefiniti
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliComplementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -
Complementi - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Università degli Studi di Brescia Prof. Massimiliano Giacomin
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliLaboratorio 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
DettagliALGORITMI E STRUTTURE DATI
ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Introduzione al C + Array
DettagliEsercizi 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
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliArray. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali
MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono
DettagliFondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009
Fondamenti di informatica, Sez. Ing. Informatica, Ing. Gestionale, Ing. Ambientale II prova in itinere, 29 Gennaio 2009 Esercizio 1 (punti 3) Sia data la funzione ricorsiva seguente: void elabora (unsigned
DettagliFondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array 2 Esercizio 1 Creare un programma che legga da input un numero non noto a priori di interi (al più 10) terminati da 0.
DettagliOperazioni su file di caratteri
Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si
DettagliHash Table. Hash Table
Hash Table La ricerca di un elemento su una lista (semplice o doppia) presenta una complessità di tipo O(n), dato che occorre scandire (al più) l intera lista per poter trovare l elemento desiderato. Le
DettagliStringhe e tipi di dati strutturati
Stringhe e tipi di dati strutturati Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 21 Marzo 2013 Info sui Labs http://tinyurl.com/ieimlabextra Ricordate di portare un adattatore!
DettagliArray k-dimensionali
Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per
Dettagli4 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
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
DettagliLE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve
LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione
DettagliL 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
DettagliRELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA
RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA Anno scolastico Lab informatica AULA n 35 Data inizio svolgimento Progr. relazione primo trimestre secondo pentamestre Cognome e Nome DATI DELLO STUDENTE
DettagliGestione di files Motivazioni
Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
DettagliNon ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
DettagliAllocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()
Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili
DettagliPolitecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri
Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri Fondamenti di Informatica II appello 5 luglio 2014 Matricola Cognome Nome Istruzioni Durata prova: 2
DettagliLa 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
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 3 - Array Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
DettagliUniversità di Roma Tor Vergata L12-1
Università di Roma Tor Vergata L12-1 soluzione di un problema fl 1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliBreve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
Dettagli(*lista == NULL (*lista)->info >= elem) accede al campo next di *lista solo se *lista non e' NULL. */ #include <stdio.h> #include <stdlib.
/* ATTENZIONE: non accedere mai ai campi di un elemento della lista prima di essersi accertati che tale elemento sia diverso da NULL; Si osservi che la condizione booleana (*lista == NULL (*lista)->info
DettagliLa 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
DettagliUna breve introduzione all implementazione in C di algoritmi su grafo
Una breve introduzione all implementazione in C di algoritmi su grafo A cura di Gianmaria Leo Introduzione La lezione è un introduzione a concetti e strumenti che permettono l implementazione di algoritmi
DettagliStrutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)
Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi
DettagliUnità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.
Unità Didattica 5 Linguaggio C Stringhe. Accesso a file ASCII. Strutture. 1 Stringhe Una stringa è una sequenza di caratteri (es: ciao, sd!n29dnqa ); In C non esiste una variabile di tipo stringa; Una
DettagliStrutture dati. Le liste
Strutture dati Le liste Introduzione Una lista è una successione finita di valori di un tipo (insieme di valori e ordine). Come tipo di dato è qualificata dalle operazioni che ci si possono svolgere: inserimento
DettagliEsercizi C su array e matrici
Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]
Dettagligiapresente( ) 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
DettagliUniversità degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti
Linguaggio C 1! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti Oggetti dello stesso tipo Identificazione univoca degli oggetti! Il tipo più semplice ha una sola
Dettagli1 (4) 2 (4) 3 (12) 4 (6) 5 (6)
CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B, C Anno Accademico 2016-2017 Proff. Danilo ARDAGNA Prima Prova in Itinere 4.5.2017 Cognome Nome Matricola Firma Durata: 2h Valutazioni
Dettagli! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente
! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti
Dettagli