Lab 11 Gestione file binari

Documenti analoghi
Lab 16 Gestione file binari"

Esercizio 1. Esercizio 1

Lab 16 Gestione file binari

Lab 16 Gestione file binari"

Esercizio 1. Esercizio 1

Fondamenti di Informatica T-1 Modulo 2. Obiettivo di questa esercitazione. File di testo File binari

Liste Definizione e Primitive

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

Lab 12 Allocazione dinamica della memoria

Fondamenti di Informatica T-1 Modulo 2

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

Liste Definizione e Primitive

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

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

Lab 09 Gestione file di testo

Fondamenti di Informatica T-1 Modulo 2

Lab 09 Strutture e programmi su più file

Lab 17 Allocazione dinamica della memoria

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 e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 13 File Binari

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

Lab 13 Strutture e programmi su più file

Opinione calcolamedia( ) Opinione inverti( )

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

Lab 11 Allocazione dinamica della memoria

Lab 13 Strutture e programmi su più file "

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

Esercizio 1 Soluzione

Lab 9 Strutture e programmi su più file

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

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

Esercizio sintesi (1) Esercizio sintesi (1)

Lab 10 Passaggio per riferimento

Ricerca binaria ricorsiva!

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche

Esercizio 1. Esercizio - 1

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

Esercizio 1. Esercizio 1 - Soluzione

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

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

Lab 9 Strutture e programmi su più file

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

Lab 12 Stringhe e strutture

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, 2010/2011 Modulo 2. Prova d Esame 1A di Mercoledì 19 Gennaio 2011 tempo a disposizione 2h

File di testo e file binari Soluzione 1 (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

Es. 1. interi, li stampi a video ponendo prima i numeri pari e poi i numeri dispari. Es. 1. int readlength(file *f, int *even, int *odd)

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

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

Lab 18 Prova d esame

Lab 12 Stringhe e strutture

Lab 08 Stringhe e strutture

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

Fondamenti di Informatica T1 Prova Pratica - Luglio 2013 Compito

Esercizio 1 - Soluzione

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

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 05 Array. Lab06 1

VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 } VN = {<E>, <T>, <F>, <num>, <cifra>, <cifra-non-nulla> }

Esercizio 1: funzione con valore di ritorno di tipo puntatore

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

Lab 17 Allocazione dinamica della memoria

Esercizio 1 Domanda di teoria (13 punti)

Esercizio 1 - Soluzione (array)

Lab 08 Stringhe e strutture

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

Esercizio 1. Esercizio - 1

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 Modulo 2

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

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

Fondamenti di Informatica 2

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

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

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

Operazioni su file di caratteri

È dato un file di testo PEOPLE.TXT che più di 20), una persona per riga

Fondamenti di Informatica T-1

Gestione dei file in C

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

Fondamenti di Informatica L-A

Lab 7 Passaggio per riferimento

Transcript:

Fondamenti di Informatica e Laboratorio T-AB e Fondamenti di Informatica T1 Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2010/2011 Lab 11 Gestione file binari Lab16 1

Lab16 2

Esercizio 1 Un registratore di cassa registra su di un file binario alcuni dati relativi agli scontrini emessi. In particolare, tramite una struttura dati di nome scontrino, il registratore di cassa tiene traccia dell importo (un float) e del numero di oggetti acquistati (un intero). In un apposito file registratore.h, si definisca una struttura dati scontrino atta a contenere/rappresentare i dati forniti dal registratore di cassa. In un apposito modulo software registratore.h / registratore.c, si devono realizzare due funzioni, una di lettura ed una di scrittura delle strutture dati scontrino: int leggi(file * fp, scontrino * dest); int scrivi(file * fp, scontrino src); Lab16 3

Esercizio 1 Si realizzi un programma main che apra il file binario reg.dat in scrittura, e poi simuli il funzionamento del registratore di cassa per testare il modulo registratore. In particolare il programma chieda all utente di inserire coppie importo / numero di oggetti, e le registri sul file binario usando la funzione scrivi( ). L utente può segnalare la fine dell inserimento dei valori indicando una coppia 0.00/0, che ovviamente non deve essere registrata nel file. Terminata la fase di inserimento, il programma chiuda il file e lo ri-apra in lettura, e stampi a video tutte le coppie memorizzate (per la lettura, si utilizzi la funzione leggi( )) Al termine il main chiuda correttamente il file. Lab16 4

registratore.h : Esercizio 1 Soluzione #include <stdio.h> typedef struct { float val; int num; } scontrino; int leggi(file * fp, scontrino * dest); int scrivi(file * fp, scontrino src); Lab16 5

registratore.c : Esercizio 1 Soluzione #include "registratore.h" int leggi(file * fp, scontrino * dest) { return fread(dest, sizeof(scontrino), 1, fp); } int scrivi(file * fp, scontrino src) { return fwrite(&src, sizeof(scontrino), 1, fp); } Lab16 6

main.c : #include <stdio.h> #include <stdlib.h> #include "registratore.h" int main(void) { scontrino temp; FILE * fp; Esercizio 1 Soluzione if ( (fp=fopen("reg.dat", "wb")) == NULL) exit(-1); do { printf("inserisci valore e numero di pezzi: "); scanf("%f %d", &(temp.val), &(temp.num) ); if (temp.val!=0 temp.num!=0)scrivi(fp, temp); } while (temp.val!=0 temp.num!=0); fclose(fp); if ( (fp=fopen("reg.dat", "rb")) == NULL) exit(-1); while (leggi(fp, &temp)>0) printf("prezzo: %f, pezzi: %d\n", temp.val, temp.num); fclose(fp); system("pause"); return (0); } Lab16 7

Esercizio 2 Un venditore di ortofrutta è solito fare credito ai propri clienti. Al fine di tenere traccia dei crediti, utilizza una funzione del registratore di cassa che salva, su un file binario di nome log.dat, strutture dati del tipo transaction contenenti i seguenti dati: una stringa customer, contenente il nome del cliente (al più 128 caratteri, senza spazi); un intero transactionid, recante un codice identificativo della transazione; un float value, contenente l'ammontare del credito concesso. #define DIM 129 typedef struct { char customer[dim]; int transactionid; float value; } transaction; Lab16 8

Esercizio 2 Al momento di riscuotere i crediti, il commerciante deve però poter accedere ai valori registrati nel file binario. A tal scopo, egli vuole avere un programma che, richiesto il nome del cliente, scriva su un file in formato testo gli importi relativi solo al cliente specificato. Inoltre il file deve avere come nome il nome del cliente con l aggiunta dell estensione.txt. Ad esempio, se il cliente richiesto si chiama Federico, allora il file dovrà chiamarsi Federico.txt. Lab16 9

Esercizio 2 In un apposito modulo software, denominato registratore.h / registratore.c, dopo aver definito opportunamente le strutture dati necessarie, si realizzi una procedura void copy(file* source, FILE* dest, char *name, int *result) che, ricevuti in ingresso un puntatore source al file binario, un puntatore dest al file di testo, un puntatore a carattere name e un intero result passato per riferimento, copi su dest tutti gli importi presenti in source e relativi al cliente specificato con parametro name La funzione deve tenere traccia del numero di importi di credito copiati e deve restituire tale numero tramite il parametro result. Gli importi devono essere scritti su una sola linea, separati da uno spazio, con al termine un carattere di newline ( \n ). Al fine di confrontare due stringhe, si utilizzi la funzione strcmp( ), che restituisce 0 se le due stringhe passate come parametri sono identiche Lab16 10

Esercizio 2 Realizzare poi un programma main.c che chieda inizialmente all utente il nome di un cliente. Per creare un opportuno nome per il file di destinazione, il candidato può utilizzare le funzioni di libreria: strcpy(char *s, char *ct), che provvede a copiare la stringa ct nella stringa s; strcat(char * s, char * ct), che concatena il contenuto della stringa ct in fondo alla stringa s (si faccia particolare attenzione a dimensionare opportunamente la stringa s per contenere i 4 caratteri dell estensione.txt ). La stringa s, al termine dell invocazione, è sempre una stringa ben formata Dopo aver aperto i file nell opportuna modalità di lettura/scrittura, il programma utilizzi la funzione copy( ) definita al punto precedente per filtrare i dati. Il programma stampi infine a video il numero totale di crediti che sono stati copiati da un file all altro Lab16 11

Esercizio 2 Soluzione void copy(file *source, FILE *dest, char *name, int *result) { transaction temp; *result = 0; } while ( fread(&temp, sizeof(transaction), 1, source) >0 ) { if (strcmp(name, temp.customer) == 0) { fprintf(dest, "%f ", temp.value); (*result)++; } } fprintf(dest, "\n"); Lab16 12

Esercizio 2 Soluzione int main() { char name[dim], filename[dim+4]; FILE *source, *dest; int result = 0; printf("insert customer name: "); scanf("%s", name); if ((source = fopen("log.dat", "rb")) == NULL) { printf("error opening the file %s\n", "log.dat"); exit(-1);} strcpy(filename, name); strcat(filename, ".txt"); if ((dest = fopen(filename, "w")) == NULL) { printf ("Error opening the file %s\n", filename); exit(-1);} copy(source, dest, name, &result); } fclose(source); fclose(dest); printf("%d records copied by log.dat to %s\n",result,filename); return 0; Lab16 13