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

Documenti analoghi
Sommario FONDAMENTI DI INFORMATICA. File e Python. Gestione di file. LINGUAGGIO Python Gestione dei file

Esercizio n.1 FONDAMENTI DI INFORMATICA 1. Esercizio n.2. Soluzione. LINGUAGGIO C Funzioni e gestione file: esercitazione

Operazioni su file di caratteri

Definizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

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

Gestione dei file. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

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

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 17/2/2009

Gestione dei File. dischi nastri cd

I files in C. A cura del prof. Ghezzi

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Suggerimenti, note utili ed errori comuni. Fondamenti di informatica T

Librerie C. Corso di Linguaggi e Traduttori 1 AA

Scrittura formattata - printf

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

int ninv; /* numero di inventario */

I file possono essere manipolati (aperti, letti, scritti ) all interno di programmi C. dischi nastri cd

File e puntatori a file

Esercizio 1 (15 punti)

Matrici, stringhe e I/O da file

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Input/output in C e in C++

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Esercizio 1 (15 punti)

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Esercizi di programmazione in linguaggio C English Dictionary

Esercizio 1 Liste: calcolo perimetro di un poligono

Fondamenti di Informatica

Fondamenti di Informatica 2

File binari e file di testo

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Fondamenti di Informatica L-A

Introduzione. L elaborazione dei files in C. Elaborazione dei files (1) Elaborazione dei files (2) D.D. cap. 11+ pp K.P. pp.

FILE: tipo operazione Istruì. prototipo esempi lettura di un carattere fgetc Int fgetc(file *flusso) Vedi sotto

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale

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

Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin

Introduzione Il costrutto if...else Il costrutto while Altri costrutti

Gestione dei file. File di testo e binari

Introduzione al C. Unità 9 File. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

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

Esercizi. I File ed il C

Gestione dei File in C

Laboratorio di Algoritmi e Strutture Dati

Esercizio 1. Esercizio 1 - Soluzione

puntatori Lab. Calc. AA 2007/08 1

I File. Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa.

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

Lezione 8 Struct e qsort

Sono file di caratteri, organizzati in linee. Ogni linea e` terminata da una marca di fine linea (newline, cara ttere '\n').

Classificazione Tipi semplici predefiniti Definizione di nuovi tipi Tipi strutturati

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

Introduzione al Linguaggio C

Linguaggio C Gestione File

Linguaggio C: i file

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

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

Fondamenti di Informatica T. Linguaggio C: File

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Esercizio 1: funzione con valore di ritorno di tipo puntatore

Struttura dati FILE. Concetto di FILE

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

La gestione dei file in C

C: panoramica. Violetta Lonati

Esercizi File Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

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

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Input robusto. I/O Avanzato e File. Lettura da file. Input robusto. Esempio. Errori di formato

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Sommario. Manipolazione sequenziale di file in C Funzioni di base per I/O di file

Laboratorio di Informatica Ingegneria Clinica Lezione 30/11/2011

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Gestione dei File C. Generalità

Introduzione al C. Stream e disk file

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

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

Stringhe e allocazione dinamica della memoria

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie

Lab 10 Gestione file di testo

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Esercizio 1: Puntatori impiegati che sono manager

Stringhe. Concetti chiave

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Esercizi. La funzione swapint() primo tentativo

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Struttura dati FILE. Motivazioni: memorie a confronto

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Linguaggio C Informatica Grafica

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

GESTIONE DEI FILE persistenza archiviare file astrazione fornita dal sistema operativo dimensione potenzialmente illimitata ad accesso sequenziale

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Variabili e Istruzioni

Lezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe

Linguaggio C - Array. Array: tipo nome_array[num_elementi]

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Transcript:

Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011 Sommario Scrivere e leggere da qualunque I/O Il tipo FILE Funzioni fscanf e fprintf EOF Funzioni sscanf e sprintf Docente: Gian Luca Marcialis LINGUAGGIO C Gestione dei file Passaggio da standard I/O Il tipo FILE Lo stato della macchina virtuale C dopo la lettura di due valori numerici dalla tastiera CPU 12 28 Bus di sistema &a &b &somma Locazioni libere 12 28 Standard Input Standard Output E un particolare tipo, che serve ad identificare appunto I/O diverso da standard I/O Una variabile di tipo FILE identifica univocamente una lavagna ( stream ) nella quale si possono scrivere informazioni o cercarne ( leggerne ), se presenti Le funzioni per gestire i file sono presenti nella libreria <stdio.h> Per definire una variabile di tipo FILE: FILE *fp;

Funzioni per gestire i file Scrittura/lettura su file fp = fopen(char* NomeFile, char* Modalità) Apre lo stream identificato da fp (assegnandogli un valore) NomeFile è una stringa con il nome del file. Es. NomeFile= pippo.txt Modalità è una stringa di uno o due caratteri: w se il file è aperto in scrittura r se è aperto in lettura a se è aperto in modalità append, ovvero si vogliono aggiungere ai contenuti presenti nuovi contenuti scritti in fondo al file L uscita di fopen() è una costante di valore NULL se il file aperto in lettura/append non esiste oppure c è un errore nel nome del file. int fclose(file *fp) E la funzione che chiude il file dopo che su esso sono state compiute le operazioni desiderate, restituendo un valore diverso da 0 se l operazione è andata a buon fine Un file va sempre chiuso al termine del suo utilizzo fprintf(file *fp, char *StringaDaScrivere, parametri) E l analogo di printf per i file, si usa esattamente nella stessa maniera Es. fprintf(fp, L area del cerchio è pari a %f.\n,area); Scrive la stringa tra virgolette sul file aperto identificato da fp fscanf(file *fp, char* EspressioneDaLeggere, parametri) Analogo di scanf per i file Es. fscanf(fp, %d %d,&a,&b); Si aspetta di legge due valori interi da file e li memorizza nelle variabili a e b Esercizio Scrivere una funzione C scrivivettore, che, ricevendo in ingresso una stringa NomeFile e un vettore di N interi v, scriva il contenuto su un file di nome indicato da NomeFile, andando a capo per ogni valore scritto La funzione deve restituire il valore 1 se l operazione è andata a buon fine, 0 altrimenti Soluzione int scrivivettore(char* NomeFile, int* vettore, int N) FILE *fp; int i; fp=fopen(nomefile, w ); if (fp==null) return 0; for (i=0; i<n; i++) fprintf(fp, %d\n,v[i]); fclose(fp); return 1;

Gestione degli errori nei file Esercizio int feof(file *fp) Controlla nella struttura di descrizione dello stato del file cui fa riferimento fp se è stata raggiunta la fine del file nella precedente operazione di lettura o scrittura Restituisce 0 se la condizione di fine file non è stata raggiunta, un valore diverso da 0 in caso contrario Scrivere un programma che legge da file una sequenza di interi, separati da spazi o a capo, e la memorizza in un vettore. Il nome del file viene fornito da tastiera. Il vettore può avere al massimo 50 valori, ma il file presenta un numero di interi non definito. Si stampi a video eventualmente un avviso se la lunghezza massima del vettore è stata raggiunta interrompendo l acquisizione di valori Si stampi a video infine il vettore acquisito. Soluzione /*Programma che legge max 50 interi da file e li memorizza in un vettore*/ #include <stdio.h> int main() int i, j, vettore[50]; char nomefile[100]; FILE *fp; printf( Inserire il nome del file:\n ); scanf( %s,nomefile); fp=fopen(nomefile, r ); i=0; while((!feof(fp))&&(i<50)) /*finché il file non è finito e i<50*/ fscanf(fp, %d,&vettore[i]); i=i+1; /* oppure i++; */ if(i==50) printf( \nmax numero di valori acquisibile raggiunto.\n ); fclose(fp); for(j=0; j<i; j++) printf( \nv[%d] = %d,vettore[j]); Scrittura e lettura su stringhe sprintf(char* StringaDiScrittura, char *StringaDaScrivere, parametri); Analoga a printf e fprintf, solo che scrive nella stringa indicata da StringaDiScrittura, finché c è spazio Es. sprintf(frase, Il perimetro del rettangolo è %f.\n,perimetro); Scrive nella stringa frase l espressione tra virgolette sscanf(char* StringaDiLettura, char* EspressioneDaLeggere, parametri); Ulteriori funzioni per manipolare stringhe sono presenti nella libreria <string.h> return 0;

Alcune funzioni utili di <string.h> char* strcpy(s,ct) Copia la stringa ct nella stringa s, incluso \0 ; restituisce s char* strcat(s,ct) Concatena la stringa ct alla fine della stringa s; restituisce s int strcmp(cs,ct) Confronta la stringa cs con la stringa ct; restituisce <0 se cs<ct, 0 se cs==ct, >0 se cs>ct size_t strlen(cs) Restituisce la lunghezza di cs Esercizio Scrivere un programma che legge un file di testo geometri.txt così formattato: <Forma Geometrica> v1 [v2 v3] Dove <Forma Geometrica> = Triangolo Quadrato Rettangolo v1 [v2 v3] sono al massimo tre valori reali Per ogni riga di ingresso, il programma calcola e scrive, nel file di uscita risultati.txt, ed in modalità append, la forma della figura e il suo perimetro Si sviluppi la soluzione in forma modulare Attraverso procedure e funzioni Esempio di file geometri.txt Triangolo 34.2 45.1 90.4 Rettangolo 40.1 20.9 Rettangolo 12.1 55.5 Quadrato 45.0 Vincoli per scrivere la soluzione Si definisca una struttura dati Forma_Geometrica, caratterizzata da: un vettore di caratteri nome_forma indicanti il tipo ( Triangolo ; Quadrato ; Rettangolo ); un vettore di float lati di max 3 posizioni con i valori dei lati un valore float perimetro; un intero numero_lati tale che: Se 1 la forma è Quadrato Se 2 la forma è Rettangolo Se 3 la forma è Triangolo Altrimenti la forma non è definita, e contenga il valore 0; Si scriva inoltre: una funzione che calcoli il perimetro per ognuna delle tre forme: essa riceve in ingresso il vettore dei lati ed il numero di lati, e restituisce un valore reale pari al perimetro una funzione che legga il tipo di forma da file, calcoli il numero opportuno di lati restituisca una variabile di tipo Forma_Geometrica aggiornata una funzione che, ricevendo in ingresso una variabile di tipo Forma_Geometrica, scriva la forma e stampi il perimetro nel file su file in modalità append

Definizione della struttura dati richiesta typedef struct char nome_forma[50]; float lati[3]; float perimetro; int numero_lati; Forma_Geometrica; Implementazioni delle funzioni richieste: perimetro della forma float perimetro_forma(float *lati, int num_lati) switch(num_lati) case 1: return 4*lati[0]; case 2: return 2*(lati[0]+lati[1]); case 3: return lati[0]+lati[1]+lati[2]; return 0.0; Aggiornamento della forma Forma_Geometrica leggi_forma(file *fp) int i; Forma_Geometrica forma; fscanf(fp, %s,&(forma.nome_forma[0])); if(!strcmp(forma.nome_forma, TRIANGOLO ) forma.numero_lati=3; if(!strcmp(forma.nome_forma, RETTANGOLO ) forma.numero_lati=2; if(!strcmp(forma.nome_forma, QUADRATO ) forma.numero_lati=1; forma.numero_lati=0; printf( \nforma non definita\n ); for(i=0; i<forma.numero_lati; i++) fscanf(fp, %d,&(forma.lati[i])); Stampa della forma col perimetro void stampa_forma(forma_geometrica forma) FILE *out; out=fopen( risultati.txt, a ); if(out==null) return; fprintf(out, %s %f\n,forma.nome_forma,forma.perimetro); fclose(out); return forma;

Soluzione: vista top-down /*Programma per la stampa del perimetro di una forma geometrica su file*/ #include <stdio.h> #include <stdlib.h> #include <string.h> int main() FILE *in; Forma_Geometrica forma; /*Apri il file geometri.txt */ while (!feof(in)) /* Finché il file non è finito*/ /*Leggi la forma geometrica*/ /*Se la forma è definita: Calcola il perimetro della forma letta Stampa il perimetro della forma su file risultati.txt Altrimenti Esci dal ciclo*/ /*Chiudi il file geometri.txt*/ /*Apri il file geometri.txt*/ in=fopen( geometri.txt, r ); if(in==null) return 0; /*Chiudi il file geometri.txt*/ fclose(in); return 0; Ritorniamo al main /*Programma per la stampa del perimetro di una forma geometrica su file*/ #include <stdio.h> #include <stdlib.h> #include <string.h> int main() FILE *in; Forma_Geometrica forma; in=fopen( geometri.txt, r ); if(in==null) return 0; while (!feof(in)) /* Finché il file non è finito*/ forma=leggi_forma(in); if(forma.num_lati!=0) forma.perimetro=perimetro_forma(forma.lati,forma.numero_lati); stampa_forma(forma); break; fclose(in); return 0; Per saperne di più Ceri, Mandriola, Sbattella, Informatica arte e mestiere, Capp.3-4, McGraw-Hill Kernighan, Ritchie, Il linguaggio C, Cap. 1, Pearson- Prentice Hall