Esercitazione 11. Liste semplici

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Esercitazione 11. Liste semplici"

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 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

Dettagli

Esercitazione 12. Esercizi di Ricapitolazione

Esercitazione 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,

Dettagli

Programmazione I - Laboratorio

Programmazione 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

Dettagli

Il linguaggio C. Puntatori e dintorni

Il 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;

Dettagli

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 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

Dettagli

dott. Sabrina Senatore

dott. 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;

Dettagli

Strutture Dinamiche. Fondamenti di Informatica

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));

Dettagli

Linguaggio C - Strutture

Linguaggio 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

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 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

Dettagli

Laboratorio di Programmazione

Laboratorio 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

Dettagli

Linguaggio C. Esercizio 1

Linguaggio 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

Dettagli

Il linguaggio C Strutture

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

Dettagli

Strutture dati dinamiche in C (II)

Strutture 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

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

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

Dettagli

Strutture Dati Dinamiche

Strutture 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

Dettagli

Implementazione di Liste puntate

Implementazione 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

Dettagli

5. Quinta esercitazione autoguidata: liste semplici

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

Dettagli

ADT LISTA: altre operazioni non primitive ADT LISTA COSTRUZIONE ADT LISTA COSTRUZIONE ADT LISTA (2)

ADT 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

Dettagli

Perché il linguaggio C?

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

Dettagli

Struct, enum, Puntatori e Array dinamici

Struct, 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

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 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

Dettagli

C: panoramica. Violetta Lonati

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

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA 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

Dettagli

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. 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;

Dettagli

Esercizi. La funzione swapint() primo tentativo

Esercizi. 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

Dettagli

Inserimento in una lista ordinata

Inserimento 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

Dettagli

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. 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

Dettagli

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

1) 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++:

Dettagli

FUNZIONI che operano su LISTE

FUNZIONI 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

Dettagli

Dati aggregati. Violetta Lonati

Dati 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

Dettagli

Esercitazione 6. Array

Esercitazione 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

Dettagli

Il linguaggio C. Notate che...

Il 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

Dettagli

Stringhe e allocazione dinamica della memoria

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

Dettagli

Scrittura formattata - printf

Scrittura 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

Dettagli

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Puntatori. 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

Dettagli

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Esercitazione 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

Dettagli

Esercizi su strutture dati

Esercizi 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

Dettagli

Fondamenti di Informatica II

Fondamenti 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

Dettagli

Introduzione al linguaggio C Puntatori

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

Dettagli

Esercizi. Stringhe. Stringhe Ricerca binaria

Esercizi. 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)

Dettagli

I puntatori e l allocazione dinamica di memoria

I 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

Dettagli

Lezione 8 Struct e qsort

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

Dettagli

Linguaggio C: PUNTATORI

Linguaggio 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

Dettagli

Esercizio 1: Puntatori impiegati che sono manager

Esercizio 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

Dettagli

Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

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

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi 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

Dettagli

Gestione dinamica della memoria

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.

Dettagli

Compendio 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) 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

Dettagli

Consideriamo un vettore allocato dinamicamente

Consideriamo 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

Dettagli

9 - 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 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

Dettagli

Esercitazione 4. Comandi iterativi for, while, do-while

Esercitazione 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

Dettagli

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Lezione 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

Dettagli

Esercizi C sui tipi definiti dall utente

Esercizi 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

Dettagli

Programmazione I - Laboratorio

Programmazione 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/

Dettagli

Implementazione dell albero binario in linguaggio C++

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

Dettagli

Esercizi di programmazione in linguaggio C English Dictionary

Esercizi 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:

Dettagli

Esercitazione 3. Espressioni booleane I comandi if-else e while

Esercitazione 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

Dettagli

Linguaggio 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 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

Dettagli

Allocazione dinamica della memoria

Allocazione 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

Dettagli

Tipi 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 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

Dettagli

Complementi. - 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 - Complementi - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Università degli Studi di Brescia Prof. Massimiliano Giacomin

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio 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

Dettagli

Laboratorio di Informatica

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

Dettagli

ALGORITMI E STRUTTURE DATI

ALGORITMI 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

Dettagli

Esercizi Strutture dati di tipo astratto

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

Dettagli

Ogni 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. 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

Dettagli

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Array. 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

Dettagli

Fondamenti 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 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

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti 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.

Dettagli

Operazioni su file di caratteri

Operazioni 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

Dettagli

Hash Table. Hash Table

Hash 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

Dettagli

Stringhe e tipi di dati strutturati

Stringhe 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!

Dettagli

Array k-dimensionali

Array 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

Dettagli

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. 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

Dettagli

Linguaggio 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. 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

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE 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

Dettagli

L Allocazione Dinamica della Memoria

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

Dettagli

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

RELAZIONE 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

Dettagli

Gestione di files Motivazioni

Gestione 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)

Dettagli

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Funzioni 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

Dettagli

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Non 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

Dettagli

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Allocazione 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

Dettagli

Politecnico di Milano - Dipartimento di Elettronica, informazione e Bioingegneria Prof. Mauro Negri

Politecnico 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

Dettagli

La struttura dati CODA

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

Dettagli

Programmazione I - Laboratorio

Programmazione 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

Dettagli

Università di Roma Tor Vergata L12-1

Università 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

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI 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

Dettagli

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Breve 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.

(*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

Dettagli

La Struttura Dati Pila

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

Dettagli

Una breve introduzione all implementazione in C di algoritmi su grafo

Una 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

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. 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

Dettagli

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.

Unità 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

Dettagli

Strutture dati. Le liste

Strutture 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

Dettagli

Esercizi C su array e matrici

Esercizi 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]

Dettagli

giapresente( ) leggi( ) char * strstr(char * cs, char * ct) NULL

giapresente( ) 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

Dettagli

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Università 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

Dettagli

1 (4) 2 (4) 3 (12) 4 (6) 5 (6)

1 (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 ! 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

Dettagli

Programmazione I - Laboratorio

Programmazione 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