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

Documenti analoghi
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, 2011/2012 Modulo 2. Prova d Esame 3A di Giovedì 9 Febbraio 2012 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, 2010/2011 Modulo 2. Prova d Esame 3A di Mercoledì 16 Febbraio 2011 tempo a disposizione 2h

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, 2014/2015 Modulo 2. Prova d Esame 5A di Giovedì 9 Luglio 2015 tempo a disposizione 2h

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, 2009/2010 Modulo 2 Prova d Esame 2A di Mercoledì 13 Gennaio 2010 tempo a disposizione 2h30'

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

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 2A di Mercoledì 2 Febbraio 2011 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 T-1, 2012/2013 Modulo 2. Prova d Esame 6A di Giovedì 12 Settembre 2013 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, 2014/2015 Modulo 2. Prova d Esame 1A di Martedì 13 Gennaio 2015 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, 2014/2015 Modulo 2. Prova d Esame 3A di Giovedì 13 Febbraio 2015 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, 2018/2019 Modulo 2. Prova d Esame 3A di Giovedì 14 Febbraio 2019 tempo a disposizione 2h

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

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

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, 2017/2018 Modulo 2. Prova d Esame 5A di Giovedì 12 Luglio 2018 tempo a disposizione 2h

Fondamenti di Informatica T-1, 2016/2017 Modulo 2. Prova d Esame 6A di Giovedì 14 Settembre 2017 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

Fondamenti di Informatica T-1, 2015/2016 Modulo 2. Prova d Esame 5A di Giovedì 7 Luglio 2016 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 T-1, 2017/2018 Modulo 2. Prova d Esame 4A di Giovedì 14 Giugno 2018 tempo a disposizione 2h

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, 2012/2013 Modulo 2

Fondamenti di Informatica T-1, 2012/2013 Modulo 2. Prova d Esame 5A di Giovedì 11 Luglio 2013 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

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, 2015/2016 Modulo 2. Prova d Esame 4A di Giovedì 16 Giugno 2016 tempo a disposizione 2h

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, 2013/2014 Modulo 2. Prova d Esame 6A di Giovedì 11 Settembre 2014 tempo a disposizione 2h

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, 2016/2017 Modulo 2. Prova d Esame 5A di Giovedì 13 Luglio 2017 tempo a disposizione 2h

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

Fondamenti di Informatica T-1, 2014/2015 Modulo 2. Prova d Esame 4A di Giovedì 11 Giugno 2015 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, 2009/2010 Modulo 2 Prova d Esame 3a di Giovedì 11 Febbraio 2010 tempo a disposizione 2h30'

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

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

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

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

Fondamenti di Informatica T-1 Modulo 2

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

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

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, 2015/2016 Modulo 2. Prova d Esame 2A di Giovedì 28 Gennaio 2016 tempo a disposizione 2h

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

/* Esempio di contenuto del file di testo: */ PaoloBellavista marzo.dat PaolaMello aprile.dat FedericoChesani marzo.dat CarloGiannelli marzo.

Esercizio 1. Liste di interi

Fondamenti di Informatica T1 Prova Pratica - Luglio 2013 Compito

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

Fondamenti di Informatica e Laboratorio T-AB Prova Pratica - 11 Febbraio 2009 Compito A

Opinione calcolamedia( ) Opinione inverti( )

accesso * leggiaccessi(char * nomefile, int * dim);

NOTA SULLA CORREZIONE: Per ottenere un esito positivo è necessario svolgere un elaborato sufficiente in entrambe le parti.

PUNTATORI A STRUTTURE IL CONCETTO DI LISTA ADT LISTA (1) ADT LISTA (2) D può essere qualunque I = { cons, head, tail, emptylist } Π = { empty }

PUNTATORI A STRUTTURE

Esercizio 1 Domanda di teoria (13 punti)

ELEMENTI DI INFORMATICA LB - PROVA PRATICA DEL 27/03/ LINGUAGGIO C (15 punti)

D può essere qualunque. Una lista è una sequenza (cioè un multi-insieme finito. Per denotare strutture a lista useremo la seguente

1. realizzare una funzione int estraimulte(file *fmutui, FILE *fpagamenti, Mutuo *dest, int dim)

PUNTATORI A STRUTTURE

1. Realizzare una funzione: int trovaritardatari(file *fprestiti, FILE *frate, Prestito *dest, int dim)

PUNTATORI A STRUTTURE! IL CONCETTO DI LISTA! ADT LISTA (1)! ADT LISTA (2)!

Esercizio 1 Conta degli elementi distinti (file esercizio1.c e leggi.h/leggi.c - 15 punti)

PUNTATORI A STRUTTURE

Liste semplici - ADT!

Lab 11 Gestione file binari

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

Esercizio 1. Esercizio 1

Laboratorio di Informatica L-A

Lab 16 Gestione file binari"

Progetti su più file su memoria dinamica, liste e File

1. Realizzare una funzione int trovaevasori(file * fcatasto, FILE * ftasse, Lotto * dest, int dim)

Lab 16 Gestione file binari

Liste Definizione e Primitive

Liste Definizione e Primitive

$ PROVA INTERMEDIA 20 Aprile 2017

Fondamenti di Informatica 2

Politecnico di Torino

Esercizi di programmazione in linguaggio C English Dictionary

Fondamenti di Informatica 2

Esercizio 1 Liste: calcolo del numero di elementi ripetuti in una lista

Fondamenti di Informatica 2

IL CONCETTO DI LISTA!

Lab 12 Allocazione dinamica della memoria

Fondamenti di Informatica 2

Fondamenti di Informatica T-1. Esempio di Prova d Esame

ESERCIZIO allochi staticamente un vettore V1 di 10 float e allochi dinamicamente un vettore V2 di 10 double;

Esercizio 1: Puntatori impiegati che sono manager

1. Realizzare una funzione int trovaevasori(file * fcomune, FILE * ftasse, Recapito * dest, int dim)

- matrici - stringhe - file (lettura/scrittura, di testo/binari) - strutture, puntatori - allocazione dinamica della memoria (malloc)

Transcript:

Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit1A.zip contenente i file necessari (progetto Visual Studio ed eventuali altri file di esempio). Avvertenze per la consegna: apporre all inizio di ogni file sorgente un commento contenente i propri dati (cognome, nome, numero di matricola) e il numero 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, eseguire di tanto in tanto Rebuild All. Un software per la gestione di archivi fotografici mantiene l elenco delle foto in gestione tramite un file di testo, di nome archivio.txt. In particolare, sulla prima riga di tale file memorizza quante foto sono presenti in archivio (tramite un intero). A seguire, per ogni foto memorizza i seguenti dati (una foto su ogni riga): id unico della foto (un intero); il nome dell autore della foto (una stringa di al più 63 caratteri, senza spazi), e a seguire uno o più interi (fino a un massimo di dieci interi) separati da spazi, rappresentanti i codici identificativi dei tag associati alla singola foto. Ogni foto ha almeno sempre un tag, e ogni riga (compresa l ultima) è sempre terminata da un carattere ;. In un secondo file di testo di nome keyword.txt sono memorizzati i tag. In dettaglio, su ogni riga del file viene memorizzato l identificativo numerico del tag (un intero), e la sua corrispondente etichetta in linguaggio naturale (una stringa di al più 63 caratteri, senza spazi). Non è noto a priori quante righe siano memorizzate in questo file. Al fine di esempio, si vedano i file omonimi forniti nello StartKit. Esercizio 1 Strutture dati Foto, Tag e funzioni di lettura (mod. element.h e foto.h/foto.c) Si definisca un opportuna struttura dati Foto, al fine di rappresentare i dati relativi ad ogni fotografia, avendo cura di rappresentare i tag relativi ad ogni foto tramite un array dichiarato staticamente, e tenendo traccia in un apposito campo di tipo intero il numero di tag associati alla singola foto. Si definisca poi una struttura dati Tag, al fine di rappresentare il codice di ogni tag e la sua etichetta in linguaggio naturale, come descritto sopra. Si definisca la funzione: Foto * leggifoto(char* filename, int *dim); che, ricevuto in ingresso il nome di un file di testo rappresentante l archivio, restituisca un array di strutture dati di tipo Foto allocato dinamicamente (della dimensione minima necessaria), contenente tutte le informazioni presenti nel file il cui nome è passato come parametro. Tramite il parametro dim la funzione deve restituire la dimensione del vettore. Si definisca la funzione: list leggitag(char* filename); che, ricevuto in ingresso il nome di un file di testo contenente l elenco dei tag, restituisca una lista di strutture dati di tipo Tag. Il candidato abbia cura di realizzare nel main opportuni test al fine di verificare il corretto funzionamento delle funzioni di cui sopra. Esercizio 2 Ordinamento e stampa (moduli element.h/.c e foto.h/.c) Il candidato definisca una procedura: void ordina(foto * v, int dim); tale che, ricevuto un vettore di strutture dati di tipo Foto, e la dimensione di tale vettore, ordini tale vettore in ordine lessicografico in base all autore della foto. In caso di più foto dello stesso autore, devono comparire prima le foto con un numero minore di tag. Il candidato definisca poi una procedura:

void stampa(foto * v, int dim, list taglist); che, ricevuti in ingresso un vettore di strutture dati di tipo Foto e la dimensione di tale vettore, e una lista di strutture dati di tipo Tag, stampi a video l elenco delle foto, avendo cura di sostituire ai codici numerici identificativi delle tag le corrispondenti etichette linguistiche, come specificate tramite il parametro taglist. A tal fine, si suggerisce al candidato di realizzare una funzione ausiliaria che, ricevuti in ingresso la lista dei tag ed un codice numerico, restituisca la stringa contenente l etichetta linguistica associata a tale codice. Il candidato abbia cura di realizzare nel main opportuni test al fine di verificare il corretto funzionamento delle funzioni di cui sopra. Esercizio 3 Eliminazione dei duplicati (modulo foto.h/foto.c) A causa di un problema nel software, a volte nell archivio vengono duplicate le informazioni relative ad una stessa foto. Si definisca una funzione: Foto * duplicati(foto * v, int dimv, int * dimr); che, ricevuta come parametro un vettore di strutture dati di tipo Foto e la sua dimensione dimv, restituisca un nuovo vettore di strutture dati di tipo Foto e la sua dimensione dimr (non necessariamente della dimensione minima), dove siano stati inseriti i dati contenuti nel vettore passato in input, ma con le foto ripetute eliminate. Due foto sono ripetute se hanno lo stesso codice identificativo e lo stesso autore. In caso di due foto ripetute, nel vettore risultante dovrà essere messa la foto con il numero maggiore di tag. Esercizio 4 Stampa ordinata delle foto senza duplicati, e de-allocazione memoria (main.c) Il candidato realizzi nella funzione main( ) un programma che, usando le informazioni fornite tramite i file di esempio forniti nello StartKit, e le funzioni definite agli esercizi precedenti, stampi a video l elenco ordinato (come specificato nell esercizio 2) delle foto senza ripetizioni. Al termine del programma, il candidato abbia cura di de-allocare tutta la memoria allocata dinamicamente, ivi compresa la memoria allocata per le liste.

"element.h": #include <string.h> #ifndef _ELEMENT_H #define _ELEMENT_H #define DIM_AUTORE 64 #define DIM_TAG 64 typedef struct int id; char autore[dim_autore]; int numtag; int tag[10]; Foto; typedef struct int tagid; char tagname[dim_tag]; Tag; typedef Tag element; int compare(foto f1, Foto f2); #endif /* _ELEMENT_H */ "element.c": #include "element.h" #include <stdio.h> #include <string.h> int compare(foto f1, Foto f2) int temp; temp = strcmp(f1.autore, f2.autore); if (temp == 0) temp = f1.numtag - f2.numtag; return temp;

"list.h" #ifndef LIST_H #define LIST_H #include "element.h" typedef struct list_element element value; struct list_element *next; item; typedef item* list; typedef int boolean; /* PRIMITIVE */ list emptylist(void); boolean empty(list); list cons(element, list); element head(list); list tail(list); //void showlist(list l); void freelist(list l); //int member(element el, list l); //list insord_p(element el, list l); #endif "list.c": #include <stdio.h> #include <stdlib.h> #include <string.h> #include "list.h" /* OPERAZIONI PRIMITIVE */ list emptylist(void) /* costruttore lista vuota */ return NULL; boolean empty(list l) /* verifica se lista vuota */ return (l==null); list cons(element e, list l) list t; /* costruttore che aggiunge in testa alla lista */ t=(list)malloc(sizeof(item)); t->value=e; t->next=l;

return(t); element head(list l) /* selettore testa lista */ if (empty(l)) exit(-2); else return (l->value); list tail(list l) /* selettore coda lista */ if (empty(l)) exit(-1); else return (l->next); void freelist(list l) if (empty(l)) return; else freelist(tail(l)); free(l); return; "foto.h": #ifndef FOTO #define FOTO #include "element.h" #include "list.h" Foto * leggifoto(char * filename, int* dim); list leggitag(char * filename); void ordina(foto v[], int n); void stampa(foto * v, int dim, list taglist); Foto * duplicati(foto * v, int dimv, int * dimr); #endif "info.c": #include <stdio.h> #include <stdlib.h> #include <string.h> #include "foto.h" Foto * leggifoto(char * filename, int* dim) Foto * result; FILE * fp;

int i, cont; fp = fopen(filename, "rt"); if (fp == NULL) printf("errore durante l'apertura del file %s\n", filename); system("pause"); exit(-1); else fscanf(fp, "%d", dim); result = (Foto *) malloc(sizeof(foto) * *dim); for (i=0; i<*dim; i++) fscanf(fp, "%d%s", &(result[i].id), result[i].autore); cont = 0; while (fgetc(fp)!= ';' && cont<10) fscanf(fp, "%d", &(result[i].tag[cont])); cont++; result[i].numtag = cont; fclose(fp); return result; list leggitag(char * filename) list result; FILE * fp; Tag temp; result = emptylist(); fp = fopen(filename, "r"); if (fp == NULL) printf("errore durante l'apertura del file %s\n", filename); system("pause"); exit(-1); else while (fscanf(fp, "%d%s", &(temp.tagid), temp.tagname) == 2) result = cons(temp, result); fclose(fp); return result; char * getlabel(int tagid, list taglist) while (!empty(taglist)) if (tagid == head(taglist).tagid) return head(taglist).tagname; taglist = tail(taglist); return NULL;

void scambia(foto *a, Foto *b) Foto tmp = *a; *a = *b; *b = tmp; // bubble sort void ordina(foto v[], int n) int i, ordinato = 0; while (n>1 &&!ordinato) ordinato = 1; for (i=0; i<n-1; i++) if (compare(v[i],v[i+1])>0) scambia(&v[i],&v[i+1]); ordinato = 0; n--; void stampa(foto * v, int dim, list taglist) int i, j; for (i=0; i<dim; i++) printf("%d %s\t%d Tag: ", v[i].id, v[i].autore, v[i].numtag); for (j=0; j<v[i].numtag; j++) printf("%s ", getlabel(v[i].tag[j], taglist)); printf("\n"); Foto * duplicati(foto * v, int dimv, int * dimr) Foto * result; int i, j; int trovato; *dimr = 0; result = (Foto *) malloc(sizeof(foto) * dimv); for (i=0; i<dimv; i++) trovato = 0; for (j=0; j<*dimr &&!trovato; j++) if (v[i].id == result[j].id && strcmp(v[i].autore, result[j].autore) == 0) trovato = 1; if (!trovato) result[*dimr] = v[i]; (*dimr)++; else if (v[i].numtag>result[j].numtag) result[j] = v[i];

return result;

"main.c": #include <stdio.h> #include <stdlib.h> #include <string.h> #include "element.h" #include "foto.h" #include "list.h" int main() // Test es. 1 e es. 2 Foto * v; int dim; list taglist; v = leggifoto("archivio.txt", &dim); taglist = leggitag("keyword.txt"); stampa(v, dim, taglist); ordina(v, dim); printf("\n\n"); stampa(v, dim, taglist); printf("\n\n\n"); free(v); freelist(taglist); // Test es. 3 e es. 4 Foto * v; Foto * v_dup; int dim; int dim_dup; list taglist; v = leggifoto("archivio.txt", &dim); taglist = leggitag("keyword.txt"); ordina(v, dim); stampa(v, dim, taglist); v_dup = duplicati(v, dim, &dim_dup); ordina(v_dup, dim_dup); printf("\n\n"); stampa(v_dup, dim_dup, taglist); free(v); free(v_dup); freelist(taglist); system("pause"); return 0;

archivio.txt : 8 146 Federico 12 45 65; 149 Federico 12 45 66; 151 Carlo 23; 167 Carlo 12 23 78; 168 Carlo 12 23 78; 213 Federico 12 45 65; 214 Federico 12 45 66; 146 Federico 12; keyword.txt : 12 vacanze 45 famiglia 65 francesco 66 elena 23 lavoro 78 calcetto