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

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

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

#include <stdio.h> #include <stdlib.h> #define L 20 void Proc(char [], int); int N=L; main () { char *s; int i;

Esempio di Prova Scritta

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

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

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

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

Fondamenti di Informatica T-1 Modulo 2

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

Opinione calcolamedia( ) Opinione inverti( )

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 1A di Giovedì 9 Gennaio 2014 tempo a disposizione 2h

Esempio di Prova Scritta

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, 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 3A di Giovedì 9 Febbraio 2012 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 e Laboratorio T-AB Prova Pratica - 12 Dicembre 2008 Compito A

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 e Laboratorio T-AB Prova Pratica - 16 Giugno 2009 Compito A

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, 2014/2015 Modulo 2. Prova d Esame 2A di Martedì 29 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 2

Fondamenti di Informatica 2

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, 2011/2012 Modulo 2. Prova d Esame 2A di Giovedì 12 Gennaio 2012 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

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

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

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, 2012/2013 Modulo 2. Prova d Esame 3A di Giovedì 14 Febbraio 2013 tempo a disposizione 2h

Fondamenti di Informatica 2

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

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

Fondamenti di Informatica 2

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

ALGHERO 5 16 VARIABILE ANCONA 7 9 NUVOLOSO AOSTA 0 4 NEVE BARI VARIABILE BOLOGNA 7 9 PIOGGIA...

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

Lab 16 Gestione file binari"

Compito B. list consolidate(list l1, list l2);

Lab 11 Gestione file binari

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, 2010/2011 Modulo 2. Prova d Esame 1A di Mercoledì 19 Gennaio 2011 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, 2009/2010 Modulo 2 Prova d Esame 4a di Giovedì 10 Giugno 2010 tempo a disposizione 2h30'

Fondamenti di Informatica 2

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

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, 2015/2016 Modulo 2. Prova d Esame 6A di Giovedì 8 Settembre 2016 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, 2009/2010 Modulo 2 Prova d Esame 1B di Martedì 22 Dicembre 2009 tempo a disposizione 2h30'

Compito A. list unify(list a, list b); list clean(list a);

Fondamenti di Informatica 2

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 5A di Giovedì 11 Luglio 2013 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

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

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

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

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 5A di Giovedì 13 Luglio 2017 tempo a disposizione 2h

Informatica 1. Prova di recupero 21 Settembre 2001

Fondamenti di Informatica T1 Prova Pratica - Luglio 2013 Compito

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 3A di Venerdì 9 Febbraio 2018 tempo a disposizione 2h

Esercizio 1. Esercizio 1 - Soluzione

Lab 09 Gestione file di testo

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

Politecnico di Torino

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

Esercizi di programmazione in linguaggio C English Dictionary

Lab 16 Gestione file binari

Il compito del 11 novembre 2004

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

Esercizio 1. Esercizio 1

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

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

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

Esercizio 1 File: ordinamento di un archivio di studenti (file binario)

PROVA SCRITTA DEL MODULO DI

Fondamenti di Informatica 2

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

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

Lab 16 Gestione file binari"

Sistemi operativi A, Unix+C, 26/09/2017. Nome: Cognome: Matricola:

ELEMENTI DI INFORMATICA LB ESERCITAZIONE (del 09/03/2007) Files, Strutture e Liste

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

IL CONCETTO DI LISTA!

Gestione dei file in C

ESERCIZIO 1 (5 punti) Convertire in binario il valore, espresso in decimale, Si usi la rappresentazione in virgola fissa.

Soluzioni seconda prova intermedia del 30 gennaio 2006 temi 1 e 2. Siano date le seguenti definizioni di costanti e tipi in linguaggio C:

Transcript:

Fondamenti di Informatica L-A (A.A. precedenti al 2008/2009) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista Prova d Esame di Martedì 22 Dicembre 2009 durata 2h ESERCIZIO 1 (10 punti) Un'azienda fornitrice di connessioni ad internet segna ogni giorno in un file di testo gli utenti che si sono collegati tramite il sistema dell'azienda. In ogni riga del file di testo l'azienda segna l'id del cliente (una stringa di esattamente 7 caratteri) ed la durata del collegamento in secondi (un intero). Le righe sono ordinate cronologicamente: le righe iniziali corrispondono agli accessi avvenuti all'inizio della giornata, le righe in fondo al file rappresentano accesi avvenuti dopo. Se un cliente si collega più volte, sul file vi saranno più rige a lui relative. Dopo aver definito una opportuna struttura dati accesso con lo scopo di rappresentare le informazioni relative ad un collegamento, il candidato realizzi le seguenti funzioni: a) b) accesso * leggiaccessi(char * nomefile, int * dim); che ricevuto in ingresso il nome del file, calcoli quanti accessi sono stati registrati nel file, allochi memoria a sufficienza e restuituisca un vettore di strutture dati accesso contenente tutti i dati memorizzati nel file. Tramite il parametro dim passato per riferimento, la funzione deve restituire la dimensione del vettore. accesso * selezionaultimiaccessi(accesso * elenco, int dim, int * dimselected); Ricevuta in ingresso un elenco di strutture dati accesso e la sua dimensione dim, la funzione deve allocare memoria per un nuovo elenco di strutture dati accesso. Il nuovo elenco dovrà contenere copia degli accessi, ma senza ripetizioni. Inoltre, siccome per ogni cliente saranno registrati nell'elenco iniziale più accessi, nel nuovo elenco dovranno essere selezionati gli accessi più recenti di ogni cliente, cioè gli ultimi accessi memorizzati nel file. Si realizzi infine un breve main per mostrare l'uso delle funzioni di cui ai punti a) e b). ESERCIZIO 2 (10 punti) Si supponga di avere a disposizione, già definite: l ADT lista per interi (denominato list_int, con relative primitive emptylist_int(...), cons_int(...), head_int(...), etc.). l ADT lista per float (denominato list_float, con relative primitive emptylist_float(...), cons_float(...), head_float(...), etc.). Il candidato definisca una funzione ricorsiva: list_float frequenze(list_int l1, list_int l2); La funzione deve restituire una nuova lista contenente le frequenze con cui ognuno dei valori contenuti in l1 compare nella lista l2. Per "frequenza" si intende il numero di volte che un elemento el compare in l2 diviso il numero totale di elementi memorizzati in l2. Si presti attenzione al fatto che se un elemento el non compare mai in l2, la sua frequenza è 0. Si tenga conto anche del possibile caso in cui l2 sia una lista vuota: in tal caso la frequenza di un qualunque elemento è sempre 0. La funzione deve essere implementata utilizzando le sole primitive dell ADT lista. Al fine di semplificare la funzione di cui sopra, il candidato realizzi una funzione iterativa: float calcolafrequenza(int el, list_int l); che calcola la frequenza con cui l elemento el compare in l. Tale funzione deve essere implementata accedendo alle liste tramite la notazione a puntatore, e senza fare ricorso alle primitive dell ADT.

Ad esempio, se l1 = {1, 4, 2, ed l2 = {1, 3, 4, 1, 3, 1, la funzione frequenze(...) restituirà la lista {0.5, 0.166666, 0, poiché il valore 1 compare 3 volte su un totale di 6 elementi, il valore 4 compare compare 1 volta su 6 elementi (1/6 = 0.166666), ed il valore 2 invece non compare affatto. ESERCIZIO 3 (3 punti) Un elaboratore rappresenta i numeri interi su 8 bit tramite la notazione in complemento a 2. Indicare come viene svolta la seguente operazione aritmetica calcolandone il risultato secondo la rappresentazione binaria in complemento a 2 (si trasli anche il risultato in decimale per verificare la correttezza dell'operazione): 45 + (-58) ESERCIZIO 4 (6 punti) Il seguente programma C compila correttamente? In caso affermativo, quali sono i valori stampati a tempo di esecuzione? (si motivi opportunamente la risposta data) #include <stdio.h> #include <stdlib.h> int temp = 1; int blip(char * v, char * p, int step){ int i = step/2-1; int j = step/2; for (;i>=0 && j<step;) { p[i] = v[j]; p[j] = v[i]; i--, j++; *(p+step) = '\0'; return i; int main(){ char * p; char str[] = "stressed"; int dim=0; int temp; do { if (str[dim]) dim++; while (str[dim]!= '\0'); p = (char *) malloc(sizeof(char)*(dim +1)); temp = blip(str, p, dim); printf("%s %d\n", p, temp); free(p); return (0); ESERCIZIO 5 (3 punti) Illustrare in C come avviene il passaggio dei parametri, e cosa si intendo con l'espressione "passaggio per riferimento".

Soluzioni ESERCIZIO 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #define DIM_ID 8 typedef struct { char id[dim_id]; int durata; accesso; accesso * selezionaultimiaccessi(accesso * elenco, int dim, int * dimselected) { accesso * result; int i, j, k, trovato; *dimselected = 0; for (i=0; i< dim; i++) { trovato = 0; for (j=i+1; j< dim &&!trovato; j++) { if (strcmp(elenco[i].id, elenco[j].id) == 0) { trovato = 1; if (!trovato) *dimselected = *dimselected + 1; result = (accesso * ) malloc(sizeof(accesso) * *dimselected); k = 0; for (i=0; i< dim; i++) { trovato = 0; for (j=i+1; j< dim &&!trovato; j++) { if (strcmp(elenco[i].id, elenco[j].id) == 0) { trovato = 1; if (!trovato) { result[k] = elenco[i]; k++; return result; accesso * leggiaccessi(char * nomefile, int * dim) { FILE * fp; accesso * result; accesso temp; int i; fp = fopen(nomefile, "r");

if (fp == NULL) { printf("errore aprendo il file %s\n", nomefile); system("pause"); exit(-1); *dim = 0; while (fscanf(fp, "%s %d", temp.id, &(temp.durata))==2) (*dim)++; rewind(fp); result = (accesso *) malloc(sizeof(accesso) * *dim); for (i=0; i< *dim; i++) { fscanf(fp, "%s %d", result[i].id, &(result[i].durata)); fclose(fp); return result; int main() { accesso * a1; accesso * a2; int dim1, dim2, i; a1 = leggiaccessi("accessi.txt", &dim1); a2 = selezionaultimiaccessi(a1, dim1, &dim2); for (i=0; i< dim2; i++) { printf("%s %d\n", a2[i].id, a2[i].durata); system("pause"); return 0; ESERCIZIO 2 float calcolafrequenza(int el, list_int l) { int dim = 0; int cont = 0; while (l!= NULL) { if (l->value == el) cont++; dim++; l = l->next; if (dim == 0) return 0; else return ((float) cont)/dim; list_float frequenze(list_int l1, list_int l2) { if (empty_int(l1)) return emptylist_float(); else

return cons_float( calcolafrequenza(head_int(l1), l2), frequenze(tail_int(l1), l2) ); ESERCIZIO 3 45 -> 00101101 00101101 + (45) +58 -> 00111010 11000110 = (-58) 11000101 ---------------- -58 -> 11000110 11110011 (-13) 11110011 00001100 ---------------- 00001101 -> (+13) ESERCIZIO 4 Il programma è corretto sintatticamente e la sua esecuzione produce la stampa: desserts -1 La funzione main() dapprima calcola la lunghezza della stringa str, e poi alloca memoria sufficente per contenere una stringa di lunghezza uguale (si noti che la dimensione viene aumentata di uno al fine di avere spazio a sufficienza anche per il termiantore). Quindi viene invacata la funzione blip( ). Tale funzione inizializza gli indici i e j ai due indici centrali dell'array v, grazie alla dimensione step passata come parametro. Nel caso particolare di una stringa di 8 caratteri, indici validi da 0 a 7, gli indici dei due caratteri centrali sono 3 e 4. La funzione procede poi ad assegnare al vettore p i caratteri di v, scambiandoli pero' di posizione tramite i e j: il carattere all'indice 4 di v finisce all'indice 3 di p, il carattere all'indice 3 di v finisce all'indice 4 di p, e cosi' via incrementando/decrementando rispettivametne le variabili i e j. Alla fine in p viene memorizzata la stringa str ma in ordine invertito. Un opportuno terminatore di stringa viene poi messo nell'array p nell'ultima posizione disponibile. La funzione main() infine stampa a video la stringa p e l'intero ottenuto dalla funzione blip( ).