# Esercizi sul file (superiori)

I seguenti esercizi riguardano File studiati nella Lezione 20 della Parte Prima. Essi sono divisi per paragrafi in modo tale da favorire la scelta degli esercizi specifici.

## Es Files
### Esercizi sui files di testo e binari

Esercizio n.1 Scrivi un programma che in modo sequenziale scriva su un file di testo nella prima riga la parola ciao, nella seconda il numero 34, nella terza il numero 34.12 e poi dopo averlo chiuso lo riapra per una lettura sequenziale delle informazioni contenute.
Esercizio n.2 Nobile Chimico Il nobile chimico (chimico)
Il problema Il nobile chimico Alfredo produce nel suo laboratorio due sostanze liquide potenzialmente inquinanti: l’Aminozalina e il Brinofulo. A fine giornata le deve smaltire in appositi contenitori, dislocati lungo il tragitto che parte dal laboratorio e arriva alla sua abitazione. Per limitare le possibilità d’inquinamento, Alfredo deve distribuire l’Aminozalina nel maggior numero possibile di contenitori mentre deve dividere il Brinofulo nel minor numero possibile di contenitori. Tuttavia Aminozalina e Brinofulo non possono essere assolutamente mescolati nel medesimo contenitore, altrimenti la loro miscela esplode. Ogni volta che raggiunge un contenitore per lo smaltimento dei liquidi, Alfredo deve eseguire una sola delle tre seguenti azioni:
* (i) versare Aminozalina fino al riempimento del contenitore;
* (ii) versare Brinofulo fino al riempimento del contenitore;
* (iii) non versare nulla nel contenitore.
Data la quantità A di litri di Aminozalina e la quantità B di litri di Brinofulo da smaltire, e conoscendo l’elenco degli N contenitori (con rispettiva capacità) nell’ordine secondo cui sono incontrati lungo il tragitto dal laboratorio alla sua abitazione, Alfredo deve decidere se e quale sostanza versare in ciascun contenitore.
Dati di input
Il file input.txt contiene nella prima riga gli interi A e B (rispettivamente i litri di Aminozalina e di Brinofulo da smaltire) e il numero N di contenitori disponibili. Tali valori sono separati da uno spazio. Nelle successive N righe (usando una riga per ogni contenitore) è contenuto un numero per riga: tali numeri rappresentano le capacità dei singoli contenitori elencati nell’ordine in cui vengono incontrati da Alfredo.
Dati di output
Il file output.txt deve contenere N righe, una per ogni contenitore. Ogni riga contiene due numeri separati da uno spazio, rispettivamente il numero di litri di Aminozalina e di Brinofulo smaltiti nel corrispondente contenitore. Si noti che ogni riga deve contenere uno zero nei casi (i) e (ii) descritti sopra, e due zeri nel caso (iii).
Assunzioni
* • 1 < A, B < 10000
* • 1 < N < 100
* • Le singole capacità dei contenitori sono degli interi positivi di valore inferiore a 10000.
* • Le capacità dei contenitori sono sicuramente sufficienti per smaltire tutta l’Aminozalina e il Brinofulo prodotti.
* • I dati in input garantiscono l’esistenza di una (e una sola) soluzione ottima, quindi Alfredo ha un unico modo ottimo per smaltire le sostanze.
* • La soluzione ottima prevede che tutti i contenitori utilizzati vengano riempiti completamente (non può succedere che l’Aminozalina o il Brinofulo terminino prima che i contenitori effettivamente usati per lo smaltimento siano tutti completamente riempiti).
Esempi di input/output
| File input.txt | File output.txt |
| 20 25 7 | 1 0 |
| 1 | 0 13 |
| 13 | 4 0 |
| 4 | 5 0 |
| 5 | 8 0 |
| 8 | 2 0 |
| 2 | 0 12 |
| 12 | |
esercizio n.3 Crea un file binario che registri 5 records contenenti ciascuno il nome di una città e la temperatura registrata, dopo aver chiuso il file riaprirlo e visualizzarne il contenuto
Esercizio n. 4 ci sono diverse merci ciascuna con :nome della merce,prezzo e quantità; crea un file di records e registra le informazioni di 3 merci differenti ( per salvare i records puoi o salvare i singoli records uno alla volta oppure salvare tutto l'array), chiudi il file e prova a leggere tutti i dati, chiudi il file e riaprilo posizionati per leggere solo il 2 record, poi aggiungi un nuovo record in coda e poi rileggi tutti i records
esercizio n.5
Esistono 2 file di records uno clienti.dat con struttura del record (nome,codicecliente, importototaleacquisti) e uno fatture.dat con struttura record (nfattura, codice cliente, tipo vino, importo fattura) si vuole aggiornare l'importototale acquisti dei clienti (quindi il file clieni.dat) con le spese che risultano da ciascuna fattura di acquisto, il codice del cliente corrisponde al numero del record dove sono stati registrati i suoi dati
Esercizio n.6
Creare un file di records, i dati registrati su ciascun record sono: idpersona, nome, età e numeroditelefono. Tramite un menù di scelta premendo 1 si inserisce un nuovo record, premendo 2 si visualizza un particolare record (specificando l'idpersona) e premendo 3 si può modificare il numero del telefono di una certa persona (identificata dal suo id). l'idpersona rappresenta il numero del record stesso e così si può trovare facilmente la sua posizione in byte (idpersona*sizeof persona) , la numerazione parte da zero.
Di questo esercizio vengono date due soluzioni
* la prima "ferro" che usa una persona fittizia come record zero e che cancella tutti i dati inseriti ogni volta che il programma viene lanciato
* e una seconda soluzione "acciaio" che meno didatticamente risolve il problema della creazione del file se non esiste o lo apre senza cancellarne i dati se esiste