Le strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Le strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?"

Transcript

1 Le strutture /2 Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare? Per ora è possibile gestire l'elenco dei libri (e quindi delle strutture) mediante un vettore di strutture; sarà quindi necessario, per il momento, creare: una funzione che permetta di allocare memoria per questo vettore e che inizializzi a 0 (dopo vedremo in che senso) i membri di ciascuno degli elementi dell'array una funzione che chieda all'utente di inserire dei valori (ad esempio, il titolo, l'autore ed il numero di pagine di un libro) e che memorizzi tali valori all'interno dei corrispondenti membri della struttura (l'array titolo, l'array autore e l'intero pagine) una funzione che visualizzi i valori dei campi di una struttura una funzione che permetta di ordinare gli elementi dell'array di strutture seguendo un determinato criterio (ad esempio, disporre i vari "libri" in ordine alfabetico rispetto al nome dell'autore o in ordine crescente rispetto al numero di pagine) Il prototipo della struttura sarà il seguente: typedef struct {char titolo[200]; char autore[100]; int pagine; libro; /* Cominciamo con la prima funzione. Essa deve allocare memoria per un array di cui non conosciamo ancora la dimensione; il parametro della funzione, quindi, potrebbe essere un intero il cui valore rappresenta il numero di elementi da inserire nell'array. Una volta effettuata l'allocazione di memoria, la funzione dovrà restituire il puntatore a tale area di memoria. */ libro *crea_array(int); libro *crea_array(int numero) {int i; libro * elenco; /* il puntatore che mi permette di gestire l'array */ elenco = (libro*) malloc(numero * sizeof(libro)); if(elenco == NULL)

2 {printf("allocazione fallita"); exit(0); /* ora l'array di strutture è disponibile; possiamo procedere con l'inizializzazione */ /* versione 1: con la notazione a parentesi quadre */ for(i=0; i < numero; i++) {elenco[i].titolo[0] = '\0' ; /* inserisco il terminatore all'inizio della stringa, che quindi risulta essere una stringa vuota*/ elenco[i].autore[0] = '\0' ; elenco[i].pagine = 0 ; /* versione 2: usando l'aritmetica dei puntatori */ for(i=0; i < numero; i++) {*((elenco+i)->titolo) = '\0' ; /* inserisco il terminatore all'inizio della stringa */ *((elenco+i)->autore) = '\0' ; (elenco+i)->pagine = 0 ; return elenco; /* restituisco l'indirizzo del primo elemento dell'array */ /* La seconda funzione deve permettere all'utente di inserire dei valori nei campi di una o più strutture facenti parte dell'array. Grazie alla prima funzione, la memoria è stata già allocata, quindi questa seconda funzione deve limitarsi a scrivere all'interno di tale area, in particolare all'interno di uno degli elementi dell'array. Essa, quindi, dovendo inserire dei valori all'interno di uno dei membri di una struttura (ovvero modificare la struttura stessa) riceverà come parametro un puntatore alla struttura che la funzione deve alterare. Fatto questo, non sarà necessario restituire alcun valore. */ void riempi_libro(libro *); void riempi_libro(libro *testo) {printf("\ninserisci il titolo del libro (max 99 char): "); gets(testo->titolo); printf("\ninserisci il cognome ed il nome dell'autore del libro (max 99 char): "); gets(testo->autore); printf("\ninserisci il numero di pagine del libro: "); scanf("%d", &(testo->pagine) ) /* La terza funzione deve solamente visualizzare i valori dei membri di una struttura di tipo libro. Per svolgere questo compito, sarebbe sufficiente passare per VALORE la struttura di cui ci interessa visualizzare i membri, non dovendo la funzione alterare il valore di tali membri. Per rendere il passaggio alla funzione meno oneroso in termini di memoria (il passaggio di un puntatore richiede 4 Byte di memoria, il passaggio di una

3 variabile di tipo libro almeno 304 Byte), però, passiamo comunque per riferimento la struttura.*/ void mostra_libro(libro *); void mostra_libro(libro *testo) {printf("\nil titolo del libro e\' : %s ", testo->titolo); printf("\nil cognome ed il nome dell'autore sono: %s",testo->autore); printf("\nil libro e\' composto da %d pagine", testo->pagine ); Con queste tre funzioni è già possibile scrivere un programma mediante il quale l'utente possa scegliere quanti libri memorizzare, inserire i corrispondenti dati e visualizzare tali informazioni. /* inizio codice */ #include <stdio.h> /* per utilizzare printf() e gets() */ #include <stdlib.h> /* per l'allocazione dinamica */ libro *crea_array(int); void riempi_libro(libro *); void mostra_libro(libro *); int main() {int num_libri=0, i; libro *biblioteca; /* il puntatore con cui gestire l'array di variabili di tipo libro */ printf("\n Ciao, quanti sono i libri di cui vuoi inserire i dati? ") scanf("%d",& num_libri); printf("\n creo l'array per memorizzare i dati...\n"); /* inizializzo il puntatore */ biblioteca = crea_array(num_libri); printf("\ Ora inserisci i dati relativi a ciascun libro "); for(i = 0 ; i < num_libri; i++) {riempi_libro( biblioteca+i ); /* passo alla funzione l'indirizzo di ciascuna delle strutture di tipo libro che compongono l'array cui fa riferimento il puntatore biblioteca */ printf("\ Ora verranno visualizzati i dati inseriti ");

4 for(i = 0 ; i < num_libri; i++) {mostra_libro( biblioteca+i ); /* passo alla funzione l'indirizzo di ciascuna delle strutture di tipo libro che compongono l'array cui fa riferimento il puntatore biblioteca */ return 0; /*... qui vanno collocate le implementazioni delle funzioni... */ /* fine codice */ Concentriamoci ora sull'implementazione della funzione preposta all'ordinamento delle strutture. Alle strutture in quanto tali non ha senso applicare un criterio di ordinamento; ha invece senso applicare un criterio ai loro elementi (ad esempio chiedersi se un libro abbia più pagine di un altro). L'ordinamento delle strutture all'interno dell'array, quindi, verrà effettuato sulla base di un criterio applicato ai campi delle strutture stesse. Iniziamo implementando la funzione che ordina gli elementi dell'array disponendoli per ordine crescente di numero di pagine. La funzione avrà il medesimo prototipo delle funzioni utilizzate fino ad ora per l'ordinamento degli array, ovvero necessiterà del puntatore al primo elemento dell'array e della dimensione dell'array stesso. void ordina_biblioteca_pag(libro*,int); void ordina_biblioteca_pag(libro* elenco,int numero_libri) {int i,scambio; libro temp; /* la variabile d'appoggio che serve ad effettuare lo scambio */ scambio = 1; while(scambio) {scambio=0; for(i = 0; i<numero_libri-1; i++) {if(elenco[i].pagine > elenco[i+1].pagine) {temp = elenco[i]; elenco[i] = elenco[i+1]; elenco[i+1] = temp; scambio=1; /* NOTA: l'unica traccia del fatto che stiamo agendo su un array di strutture e non su un array formato da elementi di tipo int, ad esempio, si osserva nel criterio di

5 ordinamento, in quanto ora non confrontiamo direttamente un elemento con il successivo ma confrontiamo l'elemento di una struttura con il corrispondente elemento della struttura successiva. La somiglianza del resto del codice con il codice scritto per ordinare un array contenente int, ad esempio, si ha grazie al fatto che l'operatore di assegnazione, =, è applicabile a variabili di tipo struttura */ Usando l'aritmetica dei puntatori, l'implementazione diventa: void ordina_biblioteca_pag(libro*,int); void ordina_biblioteca_pag(libro* elenco,int numero_libri) {int i,scambio; libro temp; /* la variabile d'appoggio che serve ad effettuare lo scambio */ scambio = 1; while(scambio) {scambio=0; for(i = 0; i<numero_libri-1; i++) {if((elenco + i)->pagine > (elenco + i+1)->pagine) {temp = *(elenco+i); *(elenco+i) = *(elenco+i+1); *(elenco+i+1) = temp; scambio=1; Implementiamo ora la funzione che ordina gli elementi dell'array disponendoli in modo tale che i campi titolo siano disposti in ordine alfabetico. La funzione avrà il medesimo prototipo delle funzioni utilizzate fino ad ora per l'ordinamento degli array, ovvero necessiterà del puntatore al primo elemento dell'array e della dimensione dell'array stesso. Date due stringhe, per stabilire quale venga prima, secondo l'ordine alfabetico, uso la funzione int strcmp(char*str1,char*str2) la funzione restituisce un valore negativo se la prima stringa, secondo l'ordine alfabetico, viene prima della seconda, 0 se le due sono identiche, un numero positivo se, secondo l'ordine alfabetico, la prima stringa viene dopo la seconda. void ordina_biblioteca_titolo(libro*,int); void ordina_biblioteca_titolo(libro* elenco,int numero_libri) {int i,scambio; libro temp; /* la variabile d'appoggio che serve ad effettuare lo scambio */ scambio = 1; while(scambio)

6 {scambio=0; for(i = 0; i<numero_libri-1; i++) {if( strcmp( elenco[i].titolo, elenco[i+1].titolo) > 0 ) {temp = elenco[i]; elenco[i] = elenco[i+1]; elenco[i+1] = temp; scambio=1; Esercizi: 1. Per ottenere le stesse funzionalità, sarebbe stato anche possibile non utilizzare questo prototipo typedef struct {char titolo[200]; char autore[100]; int pagine; libro; ma questo typedef struct {char* titolo; char* autore; int pagine; libro; Che cosa avrebbe comportato questa modifica (a parte la necessità di allocare memoria per i puntatori a char contenuti nella struttura e la notevole differenza tra la quantità di memoria richiesta per allocare una variabile del primo tipo, 304 Byte, e la quantità di memoria richiesta per allocare una variabile del secondo tipo, 12 Byte)? Si accettano commenti in proposito Basandosi sul seguente prototipo di struttura typedef struct{char lettera; int numero; double var; valore; implementare delle funzioni che permettano di: a. allocare un'area di memoria contenente delle strutture di tipo valore; il numero di strutture che compongono l'array deve essere fissato mediante una direttiva per il preprocessore b. assegnare a ciascuno degli elementi di ogni struttura dell'array un valore casuale compatibile con il tipo dell'elemento stesso (ovvero una lettera minuscola casuale al membro lettera, un intero compreso tra e al membro numero ed un valore compreso tra e al membro var). c. disporre gli elementi dell'array in modo tale che i membri di tipo char siano disposti in ordine crescente

7 d. disporre gli elementi dell'array in modo tale che i membri di tipo int siano disposti in ordine crescente e. disporre gli elementi dell'array in modo tale che i membri di tipo double siano disposti in ordine crescente 3. Basandosi sul seguente prototipo di struttura typedef struct{char nome[100]; char mese[20]; int giorno; compleanno; implementare delle funzioni che permettano di: a. allocare un'area di memoria sufficiente a contenere un array di strutture di tipo compleanno; il numero di strutture deve essere scelto dall'utente b. inserire il nome di una persona ed il mese ed il giorno del suo compleanno (scegliere se passare la struttura alla funzione per valore o per riferimento) c. disporre gli elementi dell'array in modo tale che i loro nomi siano disposti in ordine alfabetico

Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri.

Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri. Le strutture /3 Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri. typedef struct {char titolo[200]; char autore[100];

Dettagli

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int Gli array Gli array rappresentano una modalità molto compatta per accedere ad un gruppo di variabili; tale gruppo è identificato dal nome dell'array; i tipi delle variabili appartenenti al gruppo devono

Dettagli

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine)

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine) La copia di un file Nell'esercizio di oggi cerchiamo di implementare un programma che permetta di effettuare la copia di un file di testo. L'operazione di copia, oltre a permettere di creare un nuovo file

Dettagli

Le strutture /1. struct temp {char titolo[200]; char autore[100]; int pagine; } ; typedef struct temp libro;

Le strutture /1. struct temp {char titolo[200]; char autore[100]; int pagine; } ; typedef struct temp libro; Le strutture /1 Le strutture rappresentano un tipo di variabile che, diversamente dagli array, consente di gestire in modo compatto, mediante un'unico identificatore, un insieme di valori che non possiedano

Dettagli

da_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra */

da_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra */ Precisazione: int da_costruire = 0; da_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra -> 0000000000000001 (da_costruire vale 1) da_costruire = 0; da_costruire = da_costruire

Dettagli

Costruiamo un programma per crittografare del testo

Costruiamo un programma per crittografare del testo Costruiamo un programma per crittografare del testo Per codificare un messaggio in modo tale che il suo testo non risulti leggibile a persone che non siano in possesso dell'opportuna procedura di decodifica,

Dettagli

I puntatori /2. Ad esempio. // inizio codice. #include <stdio.h> void mostra(int); int main() {int a = 10; mostra(a); return 0;}

I puntatori /2. Ad esempio. // inizio codice. #include <stdio.h> void mostra(int); int main() {int a = 10; mostra(a); return 0;} I puntatori /2 In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta il parametro stesso nel

Dettagli

Il buffer di input. In questo modo, tutte le chiamate alla funzione permetteranno all'utente di inserire caratteri.

Il buffer di input. In questo modo, tutte le chiamate alla funzione permetteranno all'utente di inserire caratteri. Il buffer di input In C, l'input fornito dall'utente viene gestito mediante un buffer; nel buffer vengono inseriti i caratteri premuti dall'utente sulla tastiera e, a chiusura del buffer, viene aggiunto

Dettagli

I puntatori. Il C ci permette di conoscere tale indirizzo, ovvero di determinare dove la variabile sia stata effettivamente memorizzata.

I puntatori. Il C ci permette di conoscere tale indirizzo, ovvero di determinare dove la variabile sia stata effettivamente memorizzata. I puntatori La memoria RAM del calcolatore è formata da un insieme di celle di memoria; per poter localizzare ciascuna cella, ad ognuna di esse è associato un numero, ovvero il suo indirizzo, che viene

Dettagli

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. Puntatori I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. NOTA: quando un programma viene mandato in esecuzione, ad esso viene assegnata un area di memoria di lavoro

Dettagli

in alternativa Quanto spazio occupa in memoria una variabile di tipo struct? dipende...

in alternativa Quanto spazio occupa in memoria una variabile di tipo struct? dipende... Strutture Mentre un array consente di raggruppare, sotto un unico nome, vari elementi tutti dello stesso tipo, una struttura permette di gestire, mediante un unico nome, elementi di QUASI tutti i tipi.

Dettagli

Esercizio 1: media di numeri reali (uso funzioni e struct)

Esercizio 1: media di numeri reali (uso funzioni e struct) Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le

Dettagli

ESERCIZIO: SHIFT ARRAY (1)

ESERCIZIO: SHIFT ARRAY (1) ARRAY E STRINGHE ARRAY ESERCIZIO: SHIFT ARRAY (1) Utilizzando le funzioni scrivere un programma che: genera una sequenza di N = 20 numeri interi e li memorizza in un array ( riempi_array( )) visualizza

Dettagli

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Fondamenti di Informatica 2 Soluzione della prova scritta del 31 Gennaio 2006 Esercizio 1 (4 punti) Elencare i tipi di dato predefiniti del linguaggio C, precisandone il dominio e le operazioni principali

Dettagli

Costruiamo un'immagine o qualcosa di simile.

Costruiamo un'immagine o qualcosa di simile. Costruiamo un'immagine...... o qualcosa di simile. Se consideriamo la C che si trova in fondo a destra, ci accorgiamo che un'immagine non è altro che una tabella di valori. Nel caso in cui si consideri

Dettagli

Introduzione al C. Lez. 2 Funzioni e Puntatori

Introduzione al C. Lez. 2 Funzioni e Puntatori Introduzione al C Lez 2 Funzioni e Puntatori Esercizio 1: test primalità Scrivere un programma che prenda in input un intero n, e stampa SI se n è primo, NO altrimenti (NB: un intero n è primo se e solo

Dettagli

Indovina la lettera...

Indovina la lettera... Indovina la lettera... La lezione di oggi consiste nel preparare un programma che chiede all'utente di indovinare quale sia il carattere generato dal programma stesso in modo casuale. Il numero totale

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Introduzione al C. Lez. 2. Funzioni e Puntatori

Introduzione al C. Lez. 2. Funzioni e Puntatori Introduzione al C Lez 2 Funzioni e Puntatori Esercizio 1: test primalità Scrivere un programma che prenda in input un intero n, e stampa SI se n è primo, NO altrimenti (NB: un intero n è primo se è solo

Dettagli

Puntatori. Grazie ai puntatori:

Puntatori. Grazie ai puntatori: Puntatori Grazie ai puntatori: 1) è possibile permettere ad una funzione di modificare il contenuto di un area di memoria; 2) invece di passare ad una funzione tutto un blocco di memoria, si passa alla

Dettagli

#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30

#include <stdio.h> #include <stdlib.h> //necessaria per la malloc #include <string.h> // costante #define MAX_L 30 /* Dopo aver definito una lista in grado di contenere i dati di alcune persone (nome, genere e altezza in metri), scrivere un programma che consenta di verificare che inizialmente la lista sia vuota e

Dettagli

Prova Scritta del 20/09/10

Prova Scritta del 20/09/10 Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da solo da un lato se si vogliono avere le fotocopie del compito. In testa a ciascun

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio

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

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare

Dettagli

Esercizio 1: calcolo insieme intersezione

Esercizio 1: calcolo insieme intersezione Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 3 Esercitazione: 19 ottobre 2005 Esercizi su array e matrici Esercizio 1: calcolo insieme intersezione Problema: *******************************************************************

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

Riepilogo della puntata precedente

Riepilogo della puntata precedente Riepilogo della puntata precedente Da quanto detto la volta scorsa, la scelta di passare un array mediante un puntatore è giustificata solo dal risparmio, in termini di memoria, che tale scelta comporta.

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

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

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario

Dettagli

Strutture dati dinamiche in C. Emilio Di Giacomo

Strutture dati dinamiche in C. Emilio Di Giacomo Strutture dati dinamiche in C Emilio Di Giacomo Strutture dati Una struttura dati è un contenitore in cui i dati sono organizzati in maniera che possano essere recuperati e manipolati efficientemente Un

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

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

Fondamenti di Programmazione

Fondamenti di Programmazione A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome

Dettagli

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori: Le tabelle In C, dato un tipo di variabile, è possibile costruire un array di variabili di tale tipo usando la dichiarazione (facendo l esempio per il tipo float): float vettore[100]; Applicando lo stesso

Dettagli

Breve riepilogo della puntata precedente:

Breve riepilogo della puntata precedente: Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta

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

E12 Esercizi su Strutture dati dinamiche in C

E12 Esercizi su Strutture dati dinamiche in C E12 Esercizi su Strutture dati dinamiche in C Esercizio 1. Si vuole realizzare una lista caratteri in C utilizzando una rappresentazione semplicemente collegata. Scrivere una struttura nodo che contiene

Dettagli

Informatica B

Informatica B Informatica B 2017-2018 Esercitazione I Primi passi con la programmazione e con il linguaggio C Alessandro A. Nacci alessandro.nacci@polimi.it - www.alessandronacci.it 1 Chi sono - Alessandro Nacci, PhD

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

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

Introduzione al C Lez. 4. Allocazione Dinamica della memoria

Introduzione al C Lez. 4. Allocazione Dinamica della memoria Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria

Dettagli

Lezione 6 Struct e qsort

Lezione 6 Struct e qsort Lezione 6 Struct e qsort Rossano Venturini rossano.venturini@unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Struct Struct Fino ad ora abbiamo utilizzato

Dettagli

Elementi di Informatica A. A. 2016/2017

Elementi di Informatica A. A. 2016/2017 Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 2

Dettagli

IL CONCETTO DI LISTA!

IL CONCETTO DI LISTA! Liste semplici Obiettivi: Discutere la realizzazione collegata (puntatori a strutture) di liste semplici Introdurre l ADT lista semplice e le operazioni tipiche su essa 1 IL CONCETTO DI LISTA Una lista

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista

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

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018

Esercitazioni di Fondamenti di Informatica - Lez. 7 20/11/2018 Esercitazioni di Fondamenti di Informatica - Lez. 7 0/11/018 Esercizi sull allocazione dinamica della memoria in C 1. Cosa stampa il seguente programma? 1 #d e f i n e MAXLENGTH 0 4 typedef struct { char

Dettagli

Introduzione al C Lez. 5. Stringhe

Introduzione al C Lez. 5. Stringhe Introduzione al C Lez. 5 Una stringa è una sequenza di caratteri. Ad esempio una parola, una frase, un testo... In C non è previsto un tipo per le stringhe. Una stringa è vista come un array di caratteri

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

Puntatori (in C) Emilio Di Giacomo

Puntatori (in C) Emilio Di Giacomo Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per

Dettagli

Algoritmi di ordinamento: Array e ricorsione

Algoritmi di ordinamento: Array e ricorsione Laboratorio di Algoritmi e Strutture Dati Aniello Murano http://people.na.infn.it people.na.infn.it/~murano/ 1 Algoritmi di ordinamento: Array e ricorsione 2 1 Indice Algoritmi di ordinamento: Insertion

Dettagli

Tipi derivati: Array

Tipi derivati: Array Tipi derivati: Array Array Gli array (o vettori) sono composti da elementi omogenei (cioè hanno tutti lo stesso tipo base) ogni elemento è identificato all'interno dell'array da un numero d ordine detto

Dettagli

Introduzione al C Lez. 4

Introduzione al C Lez. 4 Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Prof. Aniello Murano Implementazioni di Liste Puntate Semplici Corso di Laurea Codice insegnamento Email docente Anno accademico Informatica 13917 murano@na.infn.it

Dettagli

IEIM Esercitazione II Elementi di programmazione C. Alessandro A. Nacci -

IEIM Esercitazione II Elementi di programmazione C. Alessandro A. Nacci - IEIM 2017-2018 Esercitazione II Elementi di programmazione C Alessandro A. Nacci alessandro.nacci@polimi.it - www.alessandronacci.it 1 Esercizio 4 Dati un numero, stampare il primo numero successivo pari

Dettagli

Allocazione dinamica memoria

Allocazione dinamica memoria Allocazione dinamica memoria Marco Casazza 11/12/2017 1 Esercizio 1 1 /* 2 Creare una lista bidirezionale di interi, ovvero una lista 3 che permette lo scorrimento in entrambe le direzioni ( dal primo

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

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

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 2017

Dettagli

Fondamenti di Informatica 12. Linguaggio C -4

Fondamenti di Informatica 12. Linguaggio C -4 Strutture Dati in C Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Fondamenti di Informatica 12. Linguaggio C -4 Strutture Dati

Dettagli

Puntatori a funzioni - 1

Puntatori a funzioni - 1 Puntatori a funzioni - 1 Un puntatore a funzione è una variabile che contiene un indirizzo (come per i puntatori a dati). L'indirizzo sarà il puntatore ad una zona di memoria che contiene il codice della

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Informatica (A-K) 14. Linguaggio C -4

Informatica (A-K) 14. Linguaggio C -4 Strutture Dati in C Le strutture dati sono entità che permettono di memorizzare dati in modo organizzato e funzionale a particolari esigenze Informatica (A-K) 14. Linguaggio C -4 Strutture Dati tipiche

Dettagli

Corso di Fondamenti di Informatica Prof. Aldo Franco Dragoni Prova scritta del 21/06/2010. Avvertenze. Specifiche

Corso di Fondamenti di Informatica Prof. Aldo Franco Dragoni Prova scritta del 21/06/2010. Avvertenze. Specifiche Avvertenze Usare ESCLUSIVAMENTE penne ad inchiostro nero o blu (NO MATITE). Consegnare solo fogli formato A4 scritti da ambo le parti. In testa a ciascun foglio scrivere: cognome, nome, numero progressivo

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

Informatica B Allievi Meccanici con cognome da Cl a L II prova intermedia del 13/02/01 Prof. Elisabetta Di Nitto

Informatica B Allievi Meccanici con cognome da Cl a L II prova intermedia del 13/02/01 Prof. Elisabetta Di Nitto Informatica B Allievi Meccanici con cognome da Cl a L II prova intermedia del 13/02/01 Prof. Elisabetta Di Nitto Tema d esame con soluzioni NOTA: Per la soluzione delle parti teoriche si faccia riferimento

Dettagli

Gli array Libro cap. 6 Moreno Marzol a Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Gli array Libro cap. 6 Moreno Marzol a Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna Gli array Libro cap. 6 Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Array 2 Ringraziamenti prof. Stefano Mizzaro, Università

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

Istruzioni di selezione ed uso delle funzioni

Istruzioni di selezione ed uso delle funzioni Istruzioni di selezione ed uso delle funzioni Nell'ultima lezione era stato preparato un codice C per la lettura dei caratteri inseriti dall'utente mediante la tastiera e per la loro analisi (v. sotto).

Dettagli

Il processo di compilazione

Il processo di compilazione Il processo di compilazione Il processo che porta dal codice scritto in linguaggio C alla creazione del corrispondente file eseguibile può essere schematizzato in questo modo: 0. Scrittura del codice C

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018 Esercitazioni di Fondamenti di Informatica - Lez. 30/10/018 Esercizi sulle funzioni in C I codici e le soluzioni degli esercizi sono nella cartella parte1 1. Scrivere i prototipi delle seguenti funzioni.

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

L'allocazione dinamica della memoria

L'allocazione dinamica della memoria L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria

Dettagli

L'allocazione dinamica della memoria

L'allocazione dinamica della memoria L'allocazione dinamica della memoria Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino I puntatori Le variabili di tipo puntatore permettono di accedere alla memoria

Dettagli

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Fondamenti di Informatica 2 della prova scritta del 6 Aprile 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int x = -1; Scrivere la porzione di codice che inserisce

Dettagli

Prof. G. Ascia. I puntatori. Fondamenti di Informatica

Prof. G. Ascia. I puntatori. Fondamenti di Informatica I puntatori 1 Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include

Dettagli

Puntatori : idea di base

Puntatori : idea di base Puntatori 2 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo dell'area di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; /* una var intera */ Puntatori

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

Introduzione al C Lez. 3. Puntatori

Introduzione al C Lez. 3. Puntatori Introduzione al C Lez 3 Puntatori Variabili e memoria Variabile tradizionale Es: int a = 10; Proprietà: - nome: a - tipo: int - valore: 10 - dimensione in byte: 4 ( usare sizeof(tipo) ) - indirizzo: 104

Dettagli

Array. Aggragati di variabili omogenee...

Array. Aggragati di variabili omogenee... Array Aggragati di variabili omogenee... Cosa è un array È un insieme di variabili omogenee identificato da un indice, ad esempio Se devo leggere 1 numeri dallo standard input e memorizzarli all'interno

Dettagli

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Fondamenti di Informatica 2 della prova scritta del 27 Giugno 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int i; Scrivere la porzione di codice che sostituisca

Dettagli

PUNTATORI. Introduzione. puntatore. L operatore

PUNTATORI. Introduzione. puntatore. L operatore PUNTATORI Introduzione Dichiarazione ed inizializzazione delle variabili di tipo puntatore L operatore puntatore Chiamata di funzioni per indirizzo Espressioni ed aritmetica dei puntatori Puntatori ed

Dettagli

Associazione Variabile-Indirizzo

Associazione Variabile-Indirizzo I puntatori Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include

Dettagli

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; }

Liste con sentinella. intlist *createlist(void){ intlist *q = malloc(sizeof(intlist)); if(!q) { exit(-1); } q->next = q->prev = q; return q; } Liste con sentinella Un ulteriore semplificazione delle operazioni sulle liste si ottiene utilizzando un elemento sentinella (dummy) che non contiene informazione, ma serve a segnalare la fine e l inizio

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

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome

Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011. Gruppo. Cognome Riontino Nome Raffaele. Cognome Nome Laboratorio Informatica Classe 4A Serale Venerdì 18/02/2011 Gruppo Cognome Riontino Nome Raffaele Cognome Nome TRACCIA 2 ARGOMENTO: LISTE TEMPO: 4h 1. Utilizzando Typedef definire un nuovo tipo di dato

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

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p

Dettagli

Aritmetica dei puntatori

Aritmetica dei puntatori Aritmetica dei puntatori Marco Alberti Programmazione e Laboratorio, A.A. 2016-2017 Dipartimento di Matematica e Informatica - Università di Ferrara Ultima modifica: 7 dicembre 2016 sizeof L operatore

Dettagli

Esercitazione 7. Soluzione:

Esercitazione 7. Soluzione: Esercitazione 7 Esercizio 1: Scrivere una funzione ricorsiva che calcoli il MCD di due numeri interi positivi. Ricordare che la funzione MCD(N,M) termina quando N == M e si ritorna N. int MCD(int N, int

Dettagli

Esercizi. Filtraggio

Esercizi. Filtraggio Politecnico di Milano Esercizi Preparazione alla prima prova intermedia Filtraggio L utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)

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