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

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

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 T1 Prova Pratica - Luglio 2013 Compito

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 1A di Giovedì 14 Gennaio 2016 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 - 11 Febbraio 2009 Compito A

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 1B di Mercoledì 19 Gennaio 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, 2015/2016 Modulo 2. Prova d Esame 3A di Venerdì 12 Febbraio 2016 tempo a disposizione 2h

Fondamenti di Informatica T-1 Modulo 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, 2014/2015 Modulo 2. Prova d Esame 2A di Martedì 29 Gennaio 2015 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, 2014/2015 Modulo 2. Prova d Esame 5A di Giovedì 9 Luglio 2015 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

Opinione calcolamedia( ) Opinione inverti( )

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 1A di Mercoledì 19 Gennaio 2011 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, 2012/2013 Modulo 2. Prova d Esame 6A di Giovedì 12 Settembre 2013 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, 2016/2017 Modulo 2. Prova d Esame 2A di Giovedì 26 Gennaio 2017 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, 2016/2017 Modulo 2. Prova d Esame 4A di Giovedì 15 Giugno 2017 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, 2016/2017 Modulo 2. Prova d Esame 3A di Giovedì 16 Febbraio 2017 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, 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 2A di Giovedì 25 Gennaio 2018 tempo a disposizione 2h

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

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

Lab 16 Gestione file binari"

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, 2016/2017 Modulo 2. Prova d Esame 1A di Giovedì 12 Gennaio 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, 2012/2013 Modulo 2. Prova d Esame 5A di Giovedì 11 Luglio 2013 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, 2011/2012 Modulo 2. Prova d Esame 1A di Giovedì 22 Dicembre 2011 tempo a disposizione 2h

Esercizio 1 Domanda di teoria (13 punti)

Lab 11 Gestione file binari

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

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

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

Esercizio 1. Esercizio 1

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

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

Lab 16 Gestione file binari

Lab 12 Allocazione dinamica della memoria

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

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, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

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

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

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

Lab 16 Gestione file binari"

Il compito del 11 novembre 2004

Lab 11 Allocazione dinamica della memoria

Esercizio 1. Esercizio 1 - Soluzione

Esercizi di programmazione in linguaggio C English Dictionary

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

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

Lab 09 Gestione file di testo

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

Laboratorio di Informatica L-A

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

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

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

Esercizio sintesi (1) Esercizio sintesi (1)

Fondamenti di Informatica 2

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

Fondamenti di Informatica 2

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

Esercizio 1. Esercizio - 1

Lab 9 Strutture e programmi su più file

Fondamenti di Informatica 2

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

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

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

Lab 18 Prova d esame

Fondamenti di Informatica 2

Lab 10 Passaggio per riferimento

Fondamenti di Informatica 2

Fondamenti di Informatica 1 - Compito A

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

$ PROVA INTERMEDIA 20 Aprile 2017

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

Transcript:

Prima di cominciare: si scarichi il file StartKit1A.zip contenente i file di esempio. Avvertenze per la consegna: nominare i file sorgenti come richiesto nel testo del compito, 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 ed i file contenuti nello StartKit. Rispettare le specifiche, in particolare inserire le funzioni nei file specificati fra parentesi dopo il nome della funzione. Chi non rispetta le specifiche sarà opportunamente penalizzato. NON SARANNO CORRETTI gli elaborati che presenteranno un numero non ragionevole di errori di compilazione. Consiglio: per verificare l assenza di warnings, effettuare di tanto in tanto un Rebuild All. Si deve realizzare un programma che permetta di gestire le informazioni relative ad un insieme di carte di credito ed ai pagamenti effettuati, individuando potenziali truffe. Le informazioni sono contenute in due differenti file, denominati rispettivamente clienti.txt e pagamenti.txt. Il primo file memorizza le informazioni statiche relative ai clienti, ovvero CODICE della carta di credito (una stringa di 16 caratteri), NOME del proprietario (al più 63 caratteri senza spazi), DATA DI SCADENZA della carta; i campi sono separati da uno spazio. Le date di scadenza sono memorizzate tramite due interi, separati da uno spazio, nel formato MM AAAA. Il secondo file memorizza le informazioni dinamiche relative ai pagamenti effettuati con le carte di credito. Il file, per ogni riga, memorizza la DATA DI PAGAMENTO, il CODICE della carta utilizzata, l IMPORTO (un numero con virgola), la VALUTA (una stringa di 3 caratteri); le varie informazioni sono separate dal carattere spazio. Le date di pagamento sono memorizzate tramite tre interi, nella forma GG MM AAAA. Esercizio 1 Gestione dei clienti (clienti.h/clienti.c) Il candidato realizzi un modulo che definisca una struttura dati opportuna, di nome client, per rappresentare un cliente, e definisca le funzioni per (a) leggere da file i clienti e (b) visualizzare a video le informazioni relative ad un cliente. La funzione di lettura riceve come parametri di ingresso il nome di un file (da cui andare a leggere) e deve restituire un array di clienti allocato dinamicamente (si abbia cura di allocare solo ed unicamente lo spazio strettamente necessario); inoltre la dimensione del vettore deve essere restituita tramite un ulteriore apposito parametro in ingresso. Il candidato valuti l eventuale utilizzo della funzione rewind( ). Client * readallclient(char * filename, int * dim); La procedura di stampa invece riceve come parametro di ingresso una struttura dati di tipo client, e stampa a video tutti i dati relativi al cliente. void printclient(client c); Contestualmente, il candidato scriva nel main opportune istruzioni per invocare le funzioni definite al fine di verificarne la corretta implementazione: usi a tale scopo il file clienti.txt fornito nello starter kit. Una volta verificato il corretto funzionamento delle funzioni, il candidato non cancelli il codice nel main ma si limiti a commentarlo. Esercizio 2 Gestione dei pagamenti (clienti.h/clienti.c) Il candidato definisca una opportuna struttura dati spesa per rappresentare un pagamento, e definisca opportune funzioni per (a) leggere da file i pagamenti relativi ad una certa carta (identificata dal suo codice), e (b) visualizzare le informazioni relative ad un pagamento. La funzione di lettura, riceve in ingresso il nome del file ed il codice di un carta, e restituisce un array di strutture di tipo spesa con tutti i pagamenti effettuati con quella carta. Tramite un intero passato per riferimento, la funzione restituisce anche la dimensione di tale array. Spesa * readspesa(char * filename, char * codice, int * dim);

La procedura di stampa, invece, riceve in ingresso una struttura dati spesa e la visualizza a video. void printspesa(spesa s); Il modulo deve inoltre fornire una funzione int comparespese(spesa s1, Spesa s2); che restituisca -1, 0 o 1 a seconda che s1 sia avvenuta un giorno precedente a s2, lo stesso giorno o un giorno successivo, rispettivamente. Contestualmente, il candidato scriva nel main opportune istruzioni per invocare le funzioni definite, al fine di verificarne la corretta implementazione: usi a tale scopo il file pagamenti.txt fornito nello starter kit. Una volta verificato il corretto funzionamento delle funzioni, il candidato non cancelli il codice nel main ma si limiti a commentarlo. Esercizio 3 Gestione delle truffe (clienti.h/clienti.c) Data la lista delle spese effettuate da una singola carta di credito, è necessario analizzare tale elenco al fine di identificare eventuali truffe. Si implementi la funzione: int findtruffa(spesa v[], int dim); che ricevuti in ingresso un array di spese effettuate con una certa carta, e la dimensione di tale array, stampi a video le spese sospette. In particolare, una spesa è da considerarsi sospetta qualora lo stesso giorno ne sia stata effettuata un altra con valuta diversa. Una volta individuata una coppia di spese sospette (cioè due spese avvenute lo stesso giorno ma con valute diverse), esse devono essere entrambe stampate a video al fine di permettere all utente di analizzare i dati. La funzione restituisce il numero di coppie di pagamenti sospetti incontrati. Contestualmente, il candidato scriva nel main opportune istruzioni per invocare le funzioni definite, al fine di verificarne la corretta implementazione. Una volta verificato il corretto funzionamento delle funzioni, il candidato non cancelli il codice nel main ma si limiti a commentarlo. Esercizio 4 Main (main.c) Il candidato realizzi un programma main.c che provveda a caricare l elenco dei clienti registrati in clienti.txt, e poi, per ogni cliente, acceda al file pagamenti.txt e stampi a video tutte le spese che potrebbero essere oggetto di truffa. Dopo aver stampato le spese sospette, il programma stampi anche i dati della carta di credito ed il numero di coppie di spese sospette. Il candidato abbia cura di deallocare (al termine del programma) tutte le strutture allocate dinamicamente.

clienti.h : #include <stdio.h> #include <string.h> #include <stdlib.h> #ifndef CLIENT #define CLIENT #define DIM_CODICE 17 #define DIM_NOME 64 typedef struct { char codice[dim_codice]; char nome[dim_nome]; int mese; int anno; Client; #endif #ifndef SPESA #define SPESA #define DIM_VALUTA 4 typedef struct { int giorno; int mese; int anno; char codice[dim_codice]; float importo; char valuta[dim_valuta]; Spesa; #endif Client * readallclient(char * filename, int * dim); void printclient(client c); Spesa * readspesa(char * filename, char * codice, int * dim); void printspesa(spesa s); int comparespese(spesa s1, Spesa s2); int findtruffa(spesa v[], int dim);

clienti.c : #include "clienti.h" /* LETTURA/SCRITTURA di Client Client * readallclient(char * filename, int * dim) { int count, i; FILE * fp; Client * result; Client temp; if ((fp=fopen(filename, "r")) == NULL) exit(1); count = 0; while (fscanf(fp, "%s %s %d %d", temp.codice, temp.nome, &(temp.mese), &(temp.anno)) == 4) count++; rewind(fp); result = (Client *) malloc(count * sizeof(client)); for (i=0; i<count; i++) fscanf(fp, "%s %s %d %d", result[i].codice, result[i].nome, &(result[i].mese), &(result[i].anno)); fclose(fp); *dim = count; return result; void printclient(client c) { printf("%s Carta: %s Scadenza: %d/%2d\n", c.nome, c.codice, c.mese, c.anno); /* LETTURA e SCRITTURA di Spesa Spesa * readspesa(char * filename, char * codice, int * dim) { int count, i; FILE * fp; Spesa * result; Spesa temp; if ((fp=fopen(filename, "r")) == NULL) exit(1); count = 0; while (fscanf(fp, "%d %d %d %s %f %s", &(temp.giorno), &(temp.mese), &(temp.anno), temp.codice, &(temp.importo), temp.valuta) == 6) if (strcmp(codice, temp.codice) == 0) count++; rewind(fp);

result = (Spesa *) malloc(count * sizeof(spesa)); i=0; while (i<count) { fscanf(fp, "%d %d %d %s %f %s", &(result[i].giorno), &(result[i].mese), &(result[i].anno), result[i].codice, &(result[i].importo), result[i].valuta); if (strcmp(codice, result[i].codice) == 0) i++; fclose(fp); *dim = count; return result; void printspesa(spesa s) { printf("carta: %s Importo: %f%s Data: %d/%d/%d\n", s.codice, s.importo, s.valuta, s.giorno, s.mese, s.anno); int comparespese(spesa s1, Spesa s2) { if (s1.anno!= s2.anno) if (s1.anno<s2.anno) return -1; else return 1; else { if (s1.mese!=s2.mese) if (s1.mese<s2.mese) return -1; else return 1; else { if (s1.giorno<s2.giorno) return -1; else { if (s1.giorno==s2.giorno) return 0; else return 1; int findtruffa(spesa v[], int dim) { int i, j; int result = 0; for (i=0; i<dim; i++) { for (j=i+1; j<dim; j++) { if (comparespese(v[i], v[j]) == 0) if (strcmp(v[i].valuta, v[j].valuta)) { printf("spese sospette:\n"); printspesa(v[i]); printspesa(v[j]); result++; return result;

main.c : #include <stdio.h> #include <string.h> #include <stdlib.h> #include "clienti.h" int main(void) { Client * v; int dimv; Spesa * s; int dims; int i; int num; /* test es 1 v = readallclient("clienti.txt", &dimv); for (i=0; i<dimv; i++) printclient(v[i]); /* test es 2 s = readspesa("spese.txt", "1234567812345678", &dims); for (i=0; i<dims; i++) printspesa(s[i]); printf("%d\n", comparespese(s[0], s[1])); /* test es 3 printf("%d\n", findtruffa(s, dims)); /* es 4 for (i=0; i<dimv; i++) { s = readspesa("pagamenti.txt", v[i].codice, &dims); num = findtruffa(s, dims); if (num>0) { printf("dati della carta di credito:\n"); printclient(v[i]); printf("coppie di transazioni sospette: %d\n", num); free(s); free(v); system("pause"); return (0);