Esercizio 1
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei numeri interi positivi e registrarli nei file numeri.txt separati da spazio.
Il ciclo dovrà interrompersi se l'utente inserisce un numero <= 0.
Il file deve essere aperto in modalità di aggiornamento.
────══════♦☆♦══════────
Esercizio 2
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei numeri interi positivi e registrarli nei file pari.txt e dispari.txt coerentemente con la parità.
I numeri devono essere separati da spazio.
Il ciclo dovrà interrompersi se l'utente inserisce un numero <= 0.
Il file deve essere aperto in modalità di scrittura.
────══════♦☆♦══════────
Esercizio 3
Prerequisiti: fopen(), fclose(), fprintf()
Acquisire il voto conseguito nelle discipline ITA, MAT, FIS, INF e determinare se lo studente dovrà essere promosso (tutte sufficienze), bocciato (tutte insufficienze) o rimandato (altri casi).
Calcolare la media e registrare nel file voti.txt i voti ottenuti, la media e l'esito finale.
Il file deve essere aperto in aggiornamento.
Esempio di resecuzione:
Sequenza di input acquisita:
6 7 5 6
Registrazione nel file voti.txt
ITA 6 MAT 7 FISICA 5 INF 6 MEDIA 6.00 rimandato
────══════♦☆♦══════────
Esercizio 4
Prerequisiti: fopen(), fclose(), fprintf()
Acquisire l'altezza di 4 persone e calcolarne la media.
Stabilire se vi sono persone basse (altezza inferiore a 1.50 mt) o alte (altezza maggiore di 1.80 mt.)
Registrare nel file altezza.txt (aperto in aggiornamento) le altezze rilevate, la media e l'indicazione sulle persone alte e/o basse.
Lasciare un rigo vuoto alla fine degli inserimenti.
Ad esempio nel file potremmo trovare:
1.65
1.75
1.85
1.55
media 1.70
ci sono persone alte
1.45
1.75
1.85
1.55
media 1.70
ci sono persone basse e persone alte
────══════♦☆♦══════────
Esercizio 5
Prerequisiti: fopen(), fclose(), fprintf()
Acquisire tre numeri decimali a, b, c.
Risolvere l'equazione ax^2 + bx + c = 0.
Registrare nel file equazioni.txt (aperto in aggiornamento) l'equazione e la soluzione in R (numeri reali) se esiste. Nel caso non esista la soluzione riportare la dicitura "non esiste alcuna soluzione".
Ad esempio nel file potremmo trovare:
2.00x^2 + 6.00x + 4.00 = 0 x1 = -2.00 x2 = -1.00
2.00x^2 + 0.00x + 4.00 = 0 non esiste alcuna soluzione
Nota:
La risoluzione di un'equazione di secondo grado necessita della radice quadrata. In C è necessario richiamare la libreria math.h e la funzione sqrt().
────══════♦☆♦══════────
Esercizio 6
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei numeri interi positivi e registrarli nei file numeri.txt, separati da spazio.
Il ciclo dovrà interrompersi se l'utente inserisce un numero <= 0.
Al termine inserire la somma, la media dei numeri e un rigo vuoto.
Il file deve essere aperto in modalità di aggiornamento.
────══════♦☆♦══════────
Esercizio 7
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di scrivere un testo terminando con il tasto INVIO.
Registrare nel file echo.txt il testo scritto dall'utente.
Registrare nel file anche il carattere corrispondente all'INVIO.
Il file deve essere aperto in aggiornamento.
────══════♦☆♦══════────
Esercizio 8
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei numeri interi positivi o negativi e registrarli nel file numeri.txt (aperto in aggiornamento), uno per riga.
Il ciclo termina in corrispondenza dello 0.
Accanto ad ogni numero occorre apporre, coerentemente con il numero stesso, gli attributi pari/dispari e positivo/negativo.
Esempio:
4 pari positivo
-5 dispari negativo
7 dispari positivo.
────══════♦☆♦══════────
Esercizio 9
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei caratteri da tastiera e registrarli nel file testo.txt aperto in aggiornamento.
In corrispondenza di ogni INVIO deve essere anteposta nel file la sequenza "- ".
Il programma deve terminare quando l'utente inserisce il carattere "x".
Il carattere "x" non deve essere registrato nel file.
Ad esempio nel file potremmo trovare:
Tutto bene
- quel che
- finisce bene
────══════♦☆♦══════────
Esercizio 10
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei caratteri da tastiera e li registra nel file testo.txt, aperto in aggiornamento.
Il carattere punto (".") non deve essere registrato nel file ma il successivo carattere alfabetico (dalla "a" alla "z") deve essere registrato in maiuscolo.
Il programma deve terminare quando l'utente inserisce il carattere maiuscolo "X".
Il carattere "X" che fa terminare il programma non deve essere registrato nel file.
Esempio:
Tutto bene. quel che. Finisce Bene. xxx ciao X
viene registrato nel file nel seguente modo:
Tutto bene Quel che Finisce Bene Xxx ciao
────══════♦☆♦══════────
Esercizio 11
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei caratteri da tastiera e li registra nel file testo.txt, aperto in aggiornamento.
Prima di registrate il testo nel file, effettua le seguenti alterazioni:
- converte tutti i caratteri in minuscolo
- elimina gli spazi dopo la punteggiatura (".")
- elimina le virgole (",")
- sostituisce il punto interrogativo con il punto esclamativo.
Il programma deve terminare quando l'utente inserisce il carattere minuscolo "x".
Il carattere "x" che fa terminare il programma non deve essere registrato nel file.
Il carattere maiuscolo "X", deve regolarmente essere convertito in minuscolo e registrato nel file.
────══════♦☆♦══════────
Esercizio 12
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei caratteri da tastiera e li registra nel file testo.txt, aperto in aggiornamento.
Prima di registrate il testo nel file, effettua le seguenti alterazioni:
converte tutti i caratteri di punteggiatura in pipe ("|")
elimina gli spazi ad inizio rigo
converte i caratteri maiuscoli in minuscolo e viceversa.
Il programma deve terminare quando l'utente inserisce il carattere minuscolo "x".
Il carattere "x" che fa terminare il programma non deve essere registrato nel file.
Il carattere maiuscolo "X", deve regolarmente essere convertito in minuscolo e registrato nel file.
────══════♦☆♦══════────
Esercizio 13
Prerequisiti: fopen(), fclose(), fprintf()
Chiedere all'utente di inserire ciclicamente dei caratteri da tastiera e li registra nel file testo.txt, aperto in aggiornamento.
Prima di registrate il testo nel file, effettua le seguenti alterazioni:
tutti i caratteri alfabetici minuscoli (dalla 'a' alla 'z') subito precedenti al punto devono essere convertiti in maiuscolo;
tutti i caratteri alfabetici maiuscoli (dalla 'A' alla 'Z') subito successivi al punto devono essere convertiti in minuscolo.
Eventuali lettere accentate non vanno convertite.
Il programma deve terminare quando l'utente inserisce il carattere "0".
Il carattere "0" che fa terminare il programma non deve essere registrato nel file.
Esempio di esecuzione
Sequenza di input: ciao.Come stai. Bene
Registrazione nel file testo.txt: ciaO.come stai. Bene
Suggerimento:
while (1){
c=getchar();
precedente = corrente;
corrente = c;
if (corrente == '.')
...
if precedente == '.')
...
fprintf(fd, "%c", precedente); // registrare nel file
// esclusivamente il precedente
...
}
────══════♦☆♦══════────
Esercizio 14
Prerequisiti: fopen(), fclose(), fprintf(), fscanf()
Aprire in lettura il file origine.txt e ricopiarlo nel file destinazione.txt aperto in scrittura.
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file origine.txt e posizionarlo nella cartella corrente del progetto.
Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura,
ché la diritta via era smarrita.
Ahi quanto a dir qual era è cosa dura
esta selva selvaggia e aspra e forte
che nel pensier rinova la paura!
Tant' è amara che poco è più morte;
ma per trattar del ben ch'i' vi trovai,
dirò de l'altre cose ch'i' v'ho scorte.
────══════♦☆♦══════────
Esercizio 15
Prerequisiti: fopen(), fclose(), fprintf(), fscanf()
Il file numeri.txt contiene una successione di numeri interi che vanno considerati a coppie.
Per ciascuna coppia di numeri occorre calcolare la somma e la media e registrare il tutto nel file elaborazioni.txt.
L'organizzazione dei file è descritta di seguito.
Organizzazione del file numeri.txt
Contiene una successione di numeri interi separati da uno spazio.
Il file può essere vuoto o contenere un numero pari di termini (ad esempio 8 numeri interi).
Organizzazione del file elaborazioni.txt
Il file ha un'organizzazione a righe.
La prima riga è l'intestazione:
TERMINE1 TERMINE2 SOMMA MEDIA
Le righe successive sono strutturate tutte allo stesso modo, come descritto dal seguente esempio:
10 5 15 7.50
I numeri 10 e 5 corrispondono ad una coppia di numeri letta da file numeri.txt. I numeri successivi corrispondono alla somma e alla media.
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file numeri.txt e posizionarlo nella cartella corrente del progetto.
4 5 6 7 8 9 10 11 12 13 14 15
────══════♦☆♦══════────
Esercizio 16
Prerequisiti: fopen(), fclose(), fprintf(), fscanf()
Il file matricole.txt è organizzato per righe e ogni riga contiene una successione di tre numeri separati da spazio.
In ogni terna il primo numero rappresenta la matricola di un alunno, il secondo la media dei voti dell'alunno (numero decimale) e il terzo la classe di appartenenza (da 1 a 5).
Occorre riportare nel file quinte.txt i dati relativi agli alunni della classe quinta. Il file risponde alla seguente descrizione:
Ha un'organizzazione per righe.
La prima riga è l'intestazione:
MATRICOLA MEDIA CLASSE
Le righe successive alla prima riportano i dati dei soli alunni di quinta, come nel seguente esempio:
5685 6.60 5
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file matricole.txt e posizionarlo nella cartella corrente del progetto.
5678 5.60 3
5679 6.60 5
5680 7.60 4
5681 5.65 1
5682 5.69 5
5683 7.10 5
5684 5.60 3
5685 6.60 5
5686 7.60 2
5687 5.65 1
5688 5.69 5
5689 7.10 5
────══════♦☆♦══════────
Esercizio 17
Prerequisiti: fopen(), fclose(), fprintf(), fscanf()
Il file matricole.txt è organizzato per righe e ogni riga contiene una successione di tre numeri separati da spazio.
In ogni terna il primo numero rappresenta la matricola di un alunno, il secondo la media dei voti dell'alunno (numero decimale) e il terzo la classe di appartenenza (da 1 a 5).
Occorre riportare una sintesi dei dati nel file sintesi.txt. Il file risponde alla seguente descrizione:
Ha un'organizzazione per righe.
La prima riga è l'intestazione:
CLASSE NUMERO_ALUNNI MEDIA
Le righe successive alla prima riportano per ogni classe il numero degli alunni e la media riportata da tutti gli alunni della classe (numero decimale), come nel seguente esempio:
1 7 6.25
In totale il file di sintesi è costituito da una intestazione e una riga per ogni classe (5 righe).
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file "matricole.txt" e posizionarlo nella cartella corrente del progetto.
5678 5.60 3
5679 6.60 5
5680 7.60 4
5681 5.65 1
5682 5.69 5
5683 7.10 5
5684 5.60 3
5685 6.60 5
5686 7.60 2
5687 5.65 1
5688 5.69 5
5689 7.10 5
────══════♦☆♦══════────
Esercizio 18
Prerequisiti: fopen(), fclose(), fprintf(), fscanf()
Contare le occorrenze di ciascuna lettera presente nel file testo.txt e registrare nel file analisi.txt i risultati.
Differenziare tra maiuscole e minuscole e portare un conteggio unico per tutti gli altri caratteri (spazio, punteggiatura, lettere accentate ecc.), con la denominazione "ALTRO".
Esempio di organizzazione del file analisi.txt:
a: 38
b: 1
c: 11
d: 8
...
A: 1
B: 0
C: 0
D: 0
...
ALTRO: 82
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file testo.txt e posizionarlo nella cartella corrente del progetto.
Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura,
ché la diritta via era smarrita.
Ahi quanto a dir qual era è cosa dura
esta selva selvaggia e aspra e forte
che nel pensier rinova la paura!
Tant' è amara che poco è più morte;
ma per trattar del ben ch'i' vi trovai,
dirò de l'altre cose ch'i' v'ho scorte.
────══════♦☆♦══════────
Esercizio 19
Prerequisiti: fopen(), fclose(), fscanf()
Il file "cf.txt" contiene un elenco di codici fiscali (CF), uno per riga.
Contare il numero di maschi e di femmine cui afferiscono i CF e visualizzare a video i risultati.
Suggerimento
Per risalire al genere (maschio/femmina) occorre analizzare il decimo carattere del CF: se esso corrisponde a 0, 1, 2 o 3 il genere è maschile negli altri casi è femminile.
Il codice fiscale, di lunghezza 16, può essere letto in un array nel seguente modo:
char arr[17];
ret = fscanf(fd, "%16s", arr);
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file cf.txt e posizionarlo nella cartella corrente del progetto.
NTNZZI75A01F839E
BRNVTR98A01F839L
SAIRNT98A01F839J
PPPRNT98A41E817W
VLRRNT95L41E817E
VLRRNT95E41E817J
NTNZZI78A41F839L
PNIMRN99A41F839V
────══════♦☆♦══════────
Esercizio 20
Prerequisiti: fopen(), fclose(), fscanf()
Il file dati.txt è organizzato per righe e ogni riga contiene le seguenti informazioni:
la denominazione di un articolo di massimo 20 caratteri;
un dato numerico decimale corrispondente al peso dell'articolo;
un dato numerico corrispondente all'anno di produzione dell'articolo.
I campi sono separati dalla virgola (,).
Occorre acquisire da terminale un numero corrispondente ad un anno e calcolare il peso di tutti gli articoli che afferiscono ad un periodo antecedente o uguale all'anno indicato.
Il peso calcolato va stampato a video.
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file dati.txt e posizionarlo nella cartella corrente del progetto.
Pepe nero,100,2020
Salvia,150,2021
Aceto balsamico,700,2020
Aglio liofilizzato,120,2021
Basilico in foglie,99,2021
────══════♦☆♦══════────
Esercizio 21
Prerequisiti: fopen(), fclose(), fprintf(), fscanf()
Il file dati.txt è organizzato per righe e ogni riga contiene le seguenti informazioni:
un dato numerico corrispondente ad una matricola;
un codice di 3 caratteri corrispondente ad una disciplina;
un dato numerico decimale corrispondente al voto conseguito in quella disciplina.
I campi sono separati da spazio.
Occorre acquisire da terminale un matricola e visualizzare i voti relativi allo studente e la media finale.
Esecuzione
Prima di eseguire il programma ricopiare il seguente contenuto nel file dati.txt e posizionarlo nella cartella corrente del progetto.
12345 ITA 6.5
23456 MAT 7.0
12345 MAT 5.5
78901 INF 7.0
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 98. Esercizi
Paragrafo: 09. File
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. Introduttivi - 02. Quesiti strutturati - 03. Interpretazione del codice - 04. Diagrammi di flusso - 05. Array - 06. Tipi numerici - 07. Programmazione strutturata - 08. Caratteri e stringhe - 09. File - 10. Numeri casuali - 11. Riepilogativi - 12. Progettazione guidata