Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'



Documenti analoghi
Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 4A di Martedì 21 Giugno 2011 tempo a disposizione 2h

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

Fondamenti di Informatica T 1, 2009/2010 Modulo 2 Prova d Esame 3a di Giovedì 11 Febbraio 2010 tempo a disposizione 2h30'

Esercizio 1. Esercizio 1

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 2A di Mercoledì 13 Gennaio 2010 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 1A di Giovedì 14 Gennaio 2016 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 3A di Mercoledì 16 Febbraio 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 1A di Giovedì 9 Gennaio 2014 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 5A di Mercoledì 13 Luglio 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 3A di Venerdì 12 Febbraio 2016 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 2A di Giovedì 26 Gennaio 2017 tempo a disposizione 2h

Fondamenti di Informatica 2

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Lab 11 Gestione file di testo"

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 3A di Giovedì 9 Febbraio 2012 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 5A di Giovedì 9 Luglio 2015 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 4a di Giovedì 10 Giugno 2010 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 1B di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 2A di Giovedì 25 Gennaio 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 2A di Martedì 29 Gennaio 2015 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2018/2019 Modulo 2. Prova d Esame 1A di Giovedì 10 Gennaio 2019 tempo a disposizione 2h

Appello di Informatica B

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 2A di Giovedì 12 Gennaio 2012 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 5A di Giovedì 13 Luglio 2017 tempo a disposizione 2h

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 4A di Giovedì 14 Giugno 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 3A di Giovedì 13 Febbraio 2015 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 3A di Giovedì 16 Febbraio 2017 tempo a disposizione 2h

Introduzione alla programmazione in C

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 1A di Martedì 13 Gennaio 2015 tempo a disposizione 2h

Funzioni in C. Violetta Lonati

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 2A di Mercoledì 2 Febbraio 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2018/2019 Modulo 2. Prova d Esame 3A di Giovedì 14 Febbraio 2019 tempo a disposizione 2h

Problem solving elementare su dati vettoriali

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 12 Dicembre 2008 Compito A

Compito di Fondamenti di Informatica

puntatori Lab. Calc. AA 2007/08 1

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 1A di Giovedì 12 Gennaio 2017 tempo a disposizione 2h

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 6A di Mercoledì 14 Settembre 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2010/2011 Modulo 2. Prova d Esame 1A di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 4A di Giovedì 13 Giugno 2013 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 6A di Giovedì 8 Settembre 2016 tempo a disposizione 2h

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 13 File Binari

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1A di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 4A di Giovedì 15 Giugno 2017 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 3A di Giovedì 14 Febbraio 2013 tempo a disposizione 2h

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 5A di Giovedì 7 Luglio 2016 tempo a disposizione 2h

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

Gestione dei File in C

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 6A di Giovedì 12 Settembre 2013 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2011/2012 Modulo 2. Prova d Esame 1A di Giovedì 22 Dicembre 2011 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 5A di Giovedì 12 Luglio 2018 tempo a disposizione 2h

SIMULAZIONE Fondamenti di Informatica T-1 Prova di Laboratorio - 14 Dicembre 2009 Compito B

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A

Fondamenti di Informatica T-1, 2013/2014 Modulo 2. Prova d Esame 6A di Giovedì 11 Settembre 2014 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 1B di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 5A di Giovedì 11 Luglio 2013 tempo a disposizione 2h

Politecnico di Torino

Inizializzazione, Assegnamento e Distruzione di Classi

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 3A di Venerdì 9 Febbraio 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2017/2018 Modulo 2. Prova d Esame 1A di Giovedì 11 Gennaio 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 4A di Giovedì 16 Giugno 2016 tempo a disposizione 2h

Allocazione dinamica della memoria - riepilogo

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 6A di Giovedì 14 Settembre 2017 tempo a disposizione 2h

Gestione dei File. dischi nastri cd

I puntatori e l allocazione dinamica di memoria

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Fondamenti di Informatica T- 1, 2012/2013 Modulo 2

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Esercizio 1. Esercizio 2

RICERCA DI UN ELEMENTO

MANUALE UTENTE Fiscali Free

Esempio: Array di struct

Record in C: il costruttore struct.

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

INFORMATICA 1 L. Mezzalira

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Laboratorio di programmazione

Laboratorio di Algoritmi e Strutture Dati

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

La struttura dati ad albero binario

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Lezione 9: Strutture e allocazione dinamica della memoria

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Algoritmi di ordinamento

INFORMATICA - I puntatori Roberta Gerboni

Le stringhe. Le stringhe

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

dall argomento argomento della malloc()

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

costruttori e distruttori

Transcript:

Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5.zip contenente i file necessari (solution di VS2008 e progetto compresi). Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e l'identificativo (A/B) della prova d esame. Al termine, consegnare tutti i file sorgenti e i file contenuti nello StartKit. Nota: il main non è opzionale; i test richiesti vanno implementati. Consiglio: per verificare l assenza di warning, effettuare di tanto in tanto Rebuild All. Una macchina automatica per la distribuzione di bevande ed altri alimenti è controllata da un programma che gestisce in memoria le giacenze dei vari prodotti, nonchè i codici identificativi e la loro descrizione. La macchina dispone di un numero (non noto a priori) di slot. In particolare, per ogni slot vengono memorizzate le seguenti informazioni: il codice dello slot, una stringa di al più 3 caratteri alfanumerici, che il cliente digita per selezionare il prodotto da acquistare (ad esempio, per l acqua frizzante il codice potrebbe essere B55 ); il prezzo del prodotto contenuto in quello slot (un float); la quantità di prodotti presenti in quel particolare slot (un intero); la descrizione del prodotto contenuto in quello slot, uan stringa di al più 63 caratteri, senza spazi; Si noti che slot differenti possono contenere lo stesso prodotto: ad esempio ai codici B55, B56 e B57 potrebbero corrispondere prodotti con la stessa descrizione Acqua_Minerale_Gassata : questo accade perchè i prodotti più venduti spesso vengono inseriti più volte (in più slot) nella macchina distributrice. Tutte le volte che la macchina viene spenta, salva i dati in un file binario ( dati.dat ), nel seguente modo: dapprima salva il numero di strutture dati Slot, e poi salva consecutivamente tutte le strutture dati di tipo Slot. All accensione, la macchina legge da questo file binario i dati e li memorizza in memoria. Si devono progettare alcune funzioni di utilità che verranno poi utilizzate durante il funzionamento della macchina. Attenzione: ciascuna funzione realizzata deve essere opportunamente testata invocandola correttamente dal main(...) e mostrando sullo standard output il risultato dell'elaborazione effettuata. Inoltre tutta la memoria allocata dinamicamente (quindi anche gli elementi delle liste) deve essere opportunamente deallocata alla fine della computazione di ciascun esercizio. Esercizio 1 Strutture dati e funzioni di scrittura/lettura/stampa (moduli element.h e prodotti.h/prodotti.c) a) Si definisca un opportuna struttura dati Slot al fine di rappresentare il contenuto di uno slot, come descritto in precedenza; b) Si realizzi la funzione void scrivi(slot* dati, int dim, char* nomefile); che, ricevuto il nome di un file (su cui scrivere in modo binario ), ed un array di strutture dati di tipo Slot e la sua dimensione dim, scriva tali dati nel file indicato. In particolare, la funzione dapprima scriva il numero di strutture dati (il parametro dim) e poi il contenuto dell array dati. c) Si realizzi la funzione Slot* leggi(char * filename, int* dim); che, ricevuto il nome di un file contenente un elenco di Slot, legga i dati contenuti e li memorizzi in un vettore di strutture dati di tipo Slot di dimensione opportuna. L'array restituito deve essere della dimensione esatta sufficiente a contenere tutti gli item registrati. Tale dimensione deve essere restituita tramite il parametro dim. Il file ha il formato descritto al punto precedente: all inizio vi è memorizzato (in modo binario ) un intero che rappresenta il numero di strutture contenute nel file. Di seguito poi vi sono tutte le strutture dati, memorrizzate sempre in modo binario.

d) Si realizzi poi la procedura void stampaslot(slot *vector, int n); che, ricevuto in ingresso un vettore di strutture dati di tipo Slot, stampi i primi n elementi di tipo Slot contenuti nel vettore. Esercizio 2 Ordinamento in base alla descrizione ed allo slot (element.h/prodotti.h/prodotti.c) Al fine di conoscere i prodotti inseriti nella macchina e la loro posizione è necessario ordinare i dati letti dal file al momento dell avvio (tramite le funzioni di cui all Es. 1) in una opportuna struttura dati di tipo lista. Si definisca la funzione: list ordina(slot* FullVector, int dim); che, ricevuto un vettore di Slot e la sua dimensione dim, restituisce una lista contente gli stessi dati, ordinati però dapprima in base alla descrizione e, nel caso di slot differenti ma con prodotti con la stessa descrizione, si utilizzi allora il codice identificativo dello Slot. Il criterio di ordinamento, sia per la descrizione che per il codice, deve essere quello lessicografico. Suggerimento: si definisca in element.h/element.c una funzione compare(...) ausiliaria per confrontare due strutture dati di tipo Slot. Esercizio 3 Conta dei prodotti diversi (prodotti.h/prodotti.c) E necessaria una funzione di utilià che conti quanti prodotti diversi (cioè con diversa descrizione) siano presenti nella macchina distributrice. Si definisca una funzione: int conta(list elenco); che, ricevuta in ingresso una lista di strutture dati di tipo Slot, ordinate come specificato all Es. 2, conti quanti prodotti sono presenti in tale lista. Esercizio 4 Calcolo delle giacenze (modulo element.h/element.c/prodotti.h/prodotti.c) E necessario calcolare le giacenze, al fine di poter riempire la macchina distributrice. Cioè per ogni tipo di prodotto (cioè con la stessa descrizione) si vuole sapere quanti oggetti sono ancora presenti nella macchina. A tal fine: a) Si definisca una opportuna struttura dati totale, contenente due soli campi: una striga desc, ed un intero quantita (come i campi omonimi di cui all esercizio 1). b) Si realizzi la funzione totale* calcolatotali(list elenco, int * dimresult); che, ricevuto in ingresso una lista di strutture dati di tipo Slot (lista già ordianta come specificato alles. 2), calcoli le giacenze totali dei prodotti con uguale descrizione, le memorizzi in strutture dati di tipo totale e restituisca tali informazioni tramite un array allocato dinamicamente, di dimensione dimresult. L array restituito come risultato deve essere della dimensione fisica minima possibile. Si abbia cura di testare la funzione nel main, stampando a video i totali così calcolati. Dove specificato realizzare le funzioni nei moduli indicati; laddove non specificato si lascia libertà di scelta al candidato. NOTA: Si abbia cura di deallocare la memoria allocata dinamicamente dal programma realizzato.

"element.h" #ifndef _ELEMENT_H #define _ELEMENT_H #define DIM_CODICE 4 #define DIM_DESC 64 typedef struct { char codice[dim_codice]; float price; int quantita; char desc[dim_desc]; Slot; typedef Slot element; typedef struct { int quantita; char desc[dim_desc]; totale; int compare(element el1, element el2); #endif /* _ELEMENT_H */ "element.c" #include "element.h" #include <string.h> int compare(element el1, element el2) { int result = 0; result = strcmp(el1.desc, el2.desc); if ( result == 0) result = strcmp(el1.codice, el2.codice); "prodotti.h" #include "element.h" #include "list.h" #include <stdlib.h> #ifndef PRODOTTI #define PRODOTTI void scrivi(slot* dati, int dim, char* nomefile); Slot* leggi(char * filename, int* dim); void stampaslot(slot *vector, int n); list ordina(slot* FullVector, int dim); int conta(list elenco); totale* calcolatotali(list elenco, int * dimresult); #endif

"prodotti.c" #include "prodotti.h" #include "list.h" #include <string.h> void scrivi(slot* dati, int dim, char* nomefile) { FILE * fp; if ((fp=fopen(nomefile, "wb")) == NULL) { printf("problema nell'aprire il file: %s\n", nomefile); exit(-1); fwrite(&dim, sizeof(int), 1, fp); fwrite(dati, sizeof(slot), dim, fp); fclose(fp); return; Slot* leggi(char * nomefile, int* dim) { Slot * result; FILE * fp; if ((fp=fopen(nomefile, "rb")) == NULL) { printf("problema nell'aprire il file: %s\n", nomefile); exit(-1); fread(dim, sizeof(int), 1, fp); result = (Slot*) malloc(sizeof(slot) * *dim); fread(result, sizeof(slot),*dim, fp); fclose(fp); void stampaslot(slot *v, int n) { for (i=0; i<n; i++) printf("%s %f %d %s\n", v[i].codice, v[i].price, v[i].quantita, v[i].desc); return; list ordina(slot* FullVector, int dim) { list result; result = emptylist(); for (i=0; i<dim; i++) { result = insord_p(fullvector[i], result);

int conta(list elenco) { Slot current; int result = 0; if (!empty(elenco)) { current = head(elenco); result++; while (!empty(elenco)) { if (strcmp(current.desc, head(elenco).desc)!= 0) { current = head(elenco); result++; totale* calcolatotali(list elenco, int * dimresult) { totale * result; Slot current; *dimresult = conta(elenco); result = (totale *) malloc(sizeof(totale) * *dimresult); if (!empty(elenco)) { i=0; strcpy(result[i].desc, head(elenco).desc); result[i].quantita = head(elenco).quantita; while (!empty(elenco)) { if (strcmp(result[i].desc, head(elenco).desc)!= 0) { i++; strcpy(result[i].desc, head(elenco).desc); result[i].quantita = head(elenco).quantita; else result[i].quantita = result[i].quantita + head(elenco).quantita;

"main.c" #include "element.h" #include "list.h" #include "prodotti.h" #include <stdlib.h> int main() { /* ES. 1*/ { Slot content[4] = { {"B55",0.35F,6,"Acqua_Minerale_Frizzante", {"B56",0.36F,6,"Acqua_Minerale_Frizzante", {"B57",0.35F,8,"Acqua_Minerale_Naturale", {"B58",0.35F,0,"Acqua_Minerale_Frizzante" ; printf("esercizio 1:\n"); scrivi(content, 4, "dati.dat"); stampaslot(test, dim); /* ES. 2*/ { list testlist; printf("\n\nesercizio 2:\n"); stampaslot(test, dim); printf("\n\n"); testlist = ordina(test, dim); showlist(testlist); freelist(testlist); /* ES. 3*/ { list testlist; printf("\n\nesercizio 3:\n"); testlist = ordina(test, dim); printf("prodotti diversi: %d\n", conta(testlist)); freelist(testlist); /* ES. 4*/{ totale * tot; list testlist; int dimtot; printf("\n\nesercizio 4:\n"); testlist = ordina(test, dim); tot = calcolatotali(testlist, &dimtot); for (i=0; i<dimtot; i++) printf("%s %d\n", tot[i].desc, tot[i].quantita); freelist(testlist); free(tot);