Lab 09 Gestione file di testo

Documenti analoghi
Esercizio 1. Esercizio 1 - Soluzione

Lab 15 Gestione file di testo

Lab 10 Gestione file di testo

Esercizio 1. Esercizio 2

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

Esercizi in preparazione alla seconda prova intermedia. Argomenti che verranno trattati in questa e nella prossima esercitazione:

Lab 11 Gestione file di testo"

Matrici. Seconda Esercitazione. Matrici. Matrici

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

-matrici - stringhe. - strutture, puntatori. - liste, pile, code. Seconda Esercitazione. Matrici. Matrici. Matrici

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

Esercizio 1 - Soluzione

ESERCIZIO (Domanda) Supponiamo che sia int X = 1; la chiamata di funzione fprintf(file,"%d", X);

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2

Lab 11 Gestione file binari

Esercizi di Preparazione alla Seconda Prova Intermedia Fondamenti di Informatica L-A (Proff. Paola Mello e Paolo Bellavista)

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

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

Lab 16 Gestione file binari"

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

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

Il compito del 11 novembre 2004

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

Esercizio 1 (15 punti)

int ninv; /* numero di inventario */

Esercizio sintesi (1) Esercizio sintesi (1)

Fondamenti di Informatica: Ingegneria Meccanica Prova scritta del 12 luglio 2008

Lab 9 Strutture e programmi su più file

Esercitazioni Fondamenti di Informatica

Esercizio 1 Soluzione

Fondamenti di Informatica T-1 Modulo 2

Gestione dei file. File di testo e binari

Relativamente agli esempi sopra riportati, al termine dell esecuzione della funzione il file di uscita dovrà contenere quanto riportato a lato.

Fondamenti di Informatica L-A

Esercizio 1 (15 punti)

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

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

Lab 16 Gestione file binari

Lab 12 Allocazione dinamica della memoria

Fondamenti di Informatica 1 - Compito A

Esercizio 1. Esercizio - 1

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

Lab 04 Istruzioni, cicli e array"

Fondamenti di Informatica A - Prof. Paola Mello (non sono inclusi esercizi su liste,

File di testo e file binari Soluzione 1 (2)

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Esercizio 1 (17 punti)

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

Esercizio 1. Esercizio 1

Lab 16 Gestione file binari"

Lab 13 Strutture e programmi su più file

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

Esercizio 1 Liste: calcolo perimetro di un poligono

Esercizio 1: Puntatori impiegati che sono manager

Fondamenti di Informatica 1 - Compito A

Un file è un astrazione di memorizzazione di dimensione potenzialmente illimitata (ma non infinita), ad accesso sequenziale.

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

Operazioni su file di caratteri

Esercizio 1: media di numeri reali (uso funzioni e struct)

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

Lab 09 Strutture e programmi su più file

Sommario FONDAMENTI DI INFORMATICA 1. Il tipo FILE. Passaggio da standard I/O. LINGUAGGIO C Gestione dei file

Lab 12 Stringhe e strutture"

Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri.

Gestione dei file in C

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

Esercizio 1 - Soluzione (array)

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

ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche. ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) P = {

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

Opinione calcolamedia( ) Opinione inverti( )

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

Lab 17 Allocazione dinamica della memoria

STRUCT - ESERCIZIO 1

Lab 13 Strutture e programmi su più file "

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

$ PROVA INTERMEDIA 20 Aprile 2017

Esame di Informatica Generale 9 CFU 19 Aprile 2011 Professori: Carulli, Fiorino, Mazzei

Esempio di costruzione di una classe: un dizionario

Ricerca binaria ricorsiva!

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

Sistemi Operativi (M. Cesati)

Lab 08 Stringhe e strutture

Fondamenti di Informatica T1. Lab 04 Array. Lab06 1

Lab 10 Passaggio per riferimento

ELEMENTI DI INFORMATICA. Linguaggio C

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Fondamenti di Informatica L-A

Scrittura formattata - printf

Lab 08 Stringhe e strutture

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 09 Gestione file di testo Lab15 1

Esercizio 1 Realizzare un programma che, aperto un file di testo di nome Prova.txt in modalità scrittura, provveda a leggere da input delle parole separate da spazi (stringhe di al più 63 caratteri) e le scriva nel file di testo. Il programma termina quando l utente inserisce la parola fine. Si abbbia cura di chiudere il file prima di terminare definitivamente il programma. Si controlli il corretto funzionamento del programma accedendo direttamente al file di testo con un editor (ad es. Notepad). Lab15 2

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { FILE * fp; char s[64]; Esercizio 1 - Soluzione if ((fp=fopen("prova.txt", "w")) == NULL) exit(1); do { scanf("%s", s); if (strcmp("fine", s)!= 0) fprintf(fp, "%s ", s); while (strcmp("fine", s)!= 0); fclose (fp); system("pause"); return (0); Lab15 3

Esercizio 2 Sia dato il file di testo "dati.txt" contenente i dati relativi agli studenti immatricolati al primo anno della Facoltà di Ingegneria In particolare, le informazioni sono memorizzate nel file "dati.txt" come segue: ognuna delle linee del file contiene i dati relativi ad un nuovo studente; in particolare: 1 Matricola: un intero che indica il numero di matricola dello studente 2 CdL: un intero che indica il corso di laurea (CdL) dello studente (es. 2145) Lab15 4

Esercizio 2 Sia dato un secondo file di testo, indirizzi.txt che contiene, invece, l indirizzo di ogni studente, e in particolare, in ogni linea, separati da uno spazio: Matricola: il numero di matricola dello studente (un intero) Nome: il nome dello studente, al più 20 caratteri senza spazi Cognome: il cognome dello studente, al più 30 caratteri senza spazi Via: una stringa di al più 30 caratteri senza spazi, che riporta la via di residenza dello studente Città: una stringa che riporta la città di residenza dello studente, al più 30 caratteri senza spazi CAP: un intero che rappresenta il codice di avviamento postale dello studente Lab15 5

Esercizio 2 Si scriva un programma in linguaggio C che: 1. A partire dai file "dati.txt" e indirizzi.txt costruisca una tabella T contenente, per ogni studente, Matricola, Nome, Cognome, Via, Città, CAP e CdL Si ricorda l esistenza della procedura di libreria void rewind (FILE *f) che riporta la testina di lettura a inizio file Lab15 6

Esercizio 2 2. A partire dalla tabella T, e dato da input un intero C che rappresenta un CdL, stampi la percentuale di studenti (rispetto al numero totale delle matricole) iscritti al corso C [Ad esempio, se il numero totale delle matricole è 1000, e quello degli studenti iscritti a C è 200, il programma stamperà 20% ] 3. Scriva su un terzo file di testo bologna.txt, nome, cognome e numero di matricola di tutti gli studenti che abitano a Bologna Lab15 7

Esercizio 2 Soluzione #define N 10 typedef struct { unsigned int matr; unsigned int CDL; dati; typedef struct { unsigned int matr; char nome[21]; char cognome[31]; char via[31]; char citta[31]; unsigned int CAP; indirizzo; typedef struct { unsigned int matr; char nome[21]; char cognome[31]; char via[31]; char citta[31]; unsigned int CAP; unsigned int CDL; elemento; typedef elemento tabella[n]; Lab15 8

Esercizio 2 Soluzione elemento riempiel(dati d, indirizzo i){ elemento e; e.matr=d.matr; e.cdl=d.cdl; strcpy(e.nome, i.nome); strcpy(e.cognome, i.cognome); strcpy(e.via, i.via); strcpy(e.citta, i.citta); e.cap=i.cap; return e; int main() { dati D[N]; indirizzo I[N]; tabella T; FILE *f1, *f2; int i, numdati=0,numindirizzi=0,dimtabella=0; Lab15 9

Esercizio 2 Soluzione /*lettura dati e indirizzi */ f1=fopen("dati.txt", "r"); f2=fopen("indirizzi.txt", "r"); if(f1==null) { printf( Errore file dati.txt\n ); exit(0); if(f2==null) { printf( Errore file indirizzi.txt\n ); exit(0); while (fscanf(f1,"%u%u", &D.matr, &D.CDL)==2) { numdati++; while(fscanf(f2, "%d %s %s %s %s %d",&i.matr, I.nome, I.cognome, I.via, I.citta, &I.CAP)==6) { numindirizzi++; fclose(f1);fclose(f2);... Lab15 10

Esercizio 2 Soluzione /*domanda 1: costruzione della tabella */ for(i=0;i<numdati;i++) { int j=ricercamatricola(d[i].matr,i,numindirizzi); if(j!=-1) T[dimTabella++]=riempiel(D[i],I[j]); int ricercamatricola(int matricola,indirizzo ind[],int numindirizzi) { int i; for(i=0;i<numindirizzi;i++) { if(ind[i].matr==matricola) { return i; printf( Matricola non presente\n ); return -1; Lab15 11

Esercizio 2 Soluzione /*domanda 2: stampa della percentuale degli iscritti a un corso dato*/ printf("inserire il corso C: "); scanf("%u", &C); totc=0; for(i=0; i<ins; i++) if(t[i].cdl==c) totc++; printf("\n Iscritti al corso %u: %f \%\n", C, (float)totc*100/ins); /*domanda 3: scrittura di "bologna.txt" */ f1=fopen("bologna.txt", "w"); for (i=0; i<ins; i++) if (strcmp("bologna", T[i].citta)==0) fprintf(f1,"%s %s %u\n",t[i].nome,t[i].cognome,t[i].matr); fclose(f1); return 0; Lab15 12

Esercizio 3 Sono dati due file di testo cineprogramma.txt e sale.txt che contengono, rispettivamente, il programma settimanale dei film in proiezione e le descrizioni delle sale in città. Più precisamente, ogni riga di cineprogramma.txt contiene, nell ordine: titolo del film (non più di 30 caratteri senza spazi), uno e un solo spazio di separazione nome della sala (non più di 20 caratteri senza spazi), uno e un solo spazio di separazione 3 orari di inizio proiezione (3 numeri interi separati da caratteri - ), terminatore di riga mentre ogni riga di sale.txt contiene, nell ordine: nome della sala (non più di 20 caratteri senza spazi), uno e un solo spazio di separazione costo del biglietto (numero reale), terminatore di riga Lab15 13

Esercizio 3 cineprogramma.txt: TheKingdom Nosadella 18-20-22 Dogville Fellini 17-20-22 OttoEMezzo Capitol 17-20-23 BreakingWaves Odeon 15-19-23 sale.txt: Capitol 6.00 Fellini 5.50 Modernissimo 6.00 Nosadella 6.50 Lab15 14

Esercizio 3 1) Si scriva una procedura load() che riceva come parametri di ingresso due puntatori a file di testo e restituisca come parametri di uscita un vettore y contenente strutture film (titolo film, costo biglietto) e il numero degli elementi N inseriti in y Per semplicità si supponga che tutte le sale contenute nel primo file siano presenti anche nel secondo, e una sola volta Si ricorda inoltre l esistenza della procedura di libreria void rewind (FILE *f) che riporta la testina di lettura a inizio file Lab15 15

Esercizio 3 2) Si scriva un programma C che, utilizzando la procedura load() precedentemente definita, inserisca in un vettore prezzi (supposto di dimensione massima DIM=100) le strutture film di cui sopra, derivanti dai file cineprogramma.txt e sale.txt Il programma deve inoltre stampare a terminale tutti gli elementi di prezzi il cui costo del biglietto è inferiore alla media di tutti i costi caricati nel vettore Lab15 16

#include <stdio.h> #include <stdlib.h> #include <string.h> #define DIM 100 typedef struct { char titolo[31]; float prezzo; film; Esercizio 3 - Soluzione void load(file * f1, FILE * f2, film * y, int * num) { char titolo[31], sala1[21], sala2[21]; int orario; float p; *num=0; while (fscanf(f1,"%s %s %d-%d-%d\n", titolo, sala1, &orario, &orario, &orario)!= EOF) { while ((fscanf(f2,"%s %f\n",sala2,&p)!= EOF)&& (strcmp(sala1,sala2))); //nessuna azione // supponiamo per semplicità che la sala sia sempre compresa in f2 strcpy(y[*num].titolo, titolo); y[*num].prezzo=p; (*num)++; Lab15 17 rewind(f2);

Esercizio 3 - Soluzione int main() { FILE *f1, *f2; int N, i; float somma,media; film prezzi[dim]; if ((f1=fopen("cineprogramma.txt", "r"))==null) { printf("non sono riuscito ad aprire file1 in lettura!"); exit(1); if ((f2=fopen("sale.txt", "r"))==null) { printf("non sono riuscito ad aprire file2 in lettura!"); exit(1); load(f1,f2,prezzi,&n); fclose(f1); fclose(f2);... Lab15 18

Esercizio 3 Soluzione... somma=0; for (i=0; i<n; i++) somma=somma+prezzi[i].prezzo; media=somma/n; for (i=0; i<n; i++) if (prezzi[i].prezzo<media) printf("il costo del biglietto per il film %s è %f\n", prezzi[i].titolo, prezzi[i].prezzo); Lab15 19

Esercizio 4 Sono dati due file di testo anagrafe.txt e fatture.txt che contengono, rispettivamente, i dati anagrafici di alcuni clienti e l elenco delle fatture Più precisamente, ogni riga di anagrafe.txt contiene, nell ordine: Codice Cliente (numero intero), uno e un solo spazio di separazione Nome del cliente (non più di 30 caratteri senza spazi), uno e un solo spazio di separazione Città (non più di 20 caratteri senza spazi), uno e un solo spazio di separazione Ogni cliente compare nel file di anagrafe una ed una sola volta Ogni riga di fatture.txt contiene, nell ordine: Codice Cliente (numero intero), uno e un solo spazio di separazione Numero della fattura (numero intero), uno e un solo spazio di separazione Importo della fattura (numero reale), uno e un solo spazio di separazione Un carattere ( p se la fattura è stata pagata, n altrimenti), terminatore di riga Lab15 20

Esercizio 4 anagrafe.txt: 1 Chesani Bologna 2 Bellavista Bologna 3 Mello Bologna fatture.txt: 1 23 54.00 p 1 24 102.00 n 3 25 27.00 p 1 26 88.00 n Lab15 21

Esercizio 4 1) Si scriva una procedura load() che riceva come parametri di ingresso due puntatori a file di testo e restituisca come parametri di uscita un vettore y contenente strutture debito (nome cliente, importo) e il numero degli elementi N inseriti in y: questo vettore deve contenere solo i dati relativi a fatture non pagate Si ricorda inoltre l esistenza della procedura di libreria void rewind (FILE *f) che riporta la testina di lettura a inizio file Lab15 22

Esercizio 4 2) Si scriva un programma C che, utilizzando la procedura load() precedentemente definita, inserisca in un vettore debitori (supposto di dimensione massima DIM=100) le strutture debito di cui sopra, derivanti dai file anagrafe.txt e fatture.txt Il programma chieda poi all utente il nome di un cliente e stampi il numero di fatture (non pagate) intestate a tale cliente e la somma totale degli importi dovuti Lab15 23

Esercizio 4 - Soluzione #include <stdio.h> #include <stdlib.h> #include <string.h> #define DIM 100 typedef struct { char nome[31]; float importo; debito; Lab15 24

Esercizio 4 - Soluzione void load(file * f1, FILE * f2, debito * y, int * num) { int codice1, codice2; char nome[31], citta[21], pagato; int num_fattura; float importo; *num=0; while(fscanf(f1,"%d %s %s\n", &codice1, nome, citta)==3){ while ( fscanf(f2,"%d %d %f %c\n", &codice2, &num_fattura,&importo, &pagato) ==4 ) == 'n') ) { rewind(f2); if ( (codice1==codice2) && (pagato strcpy(y[*num].nome, nome); y[*num].importo = importo; (*num)++; Lab15 25

Esercizio 4 - Soluzione int main() { FILE *f1, *f2; int N, i, count; float somma; char nome[31]; debito debitori[dim]; if ((f1=fopen("anagrafe.txt", "r"))==null) { printf("non sono riuscito ad aprire file1 in lettura!"); exit(1); if ((f2=fopen("fatture.txt", "r"))==null) { printf("non sono riuscito ad aprire file2 in lettura!"); exit(1); load( f1, f2, debitori, &N); fclose(f1); fclose(f2);... Lab15 26

Esercizio 4 - Soluzione... printf("inserire nome cliente: "); scanf("%s", nome); somma = 0; count = 0; for (i=0; i<n; i++) { if (! strcmp(nome, debitori[i].nome)){ /* strcmp==0 */ somma = somma + debitori[i].importo; count++; printf("%d fatture per l ammontare di: %f", count, somma); Lab15 27