[C] Esercizi sui file in c ( Informatica )



Esercizio 2 – File e liste dinamiche (14 punti)

Una compagnia di assicurazioni memorizza i dati sulle polizze RC-auto e sugli incidenti dei propri clienti in due file distinti.

Il file con le informazioni sulle polizze memorizza:

  - nome del cliente- la targa del veicolo (stringa di 7 caratteri)

  - la classe di merito: un intero tra 0 e 10

Il file con le informazioni sugli incidenti memorizza:

  - la targa del veicolo coinvolto nell’incidente

  - la data dell’incidente (in un formato a scelta)

  - un carattere (“S” o “N”) che indica se il veicolo è stato responsabile dell’incidente (“S”) o lo ha subito (“N”).


La compagnia di assicurazione periodicamente aggiorna le classi di merito dei clienti in base alle informazioni pervenute sugli incidenti: se il veicolo è stato responsabile di un incidente, la classe di merito viene incrementata di 1 fino a un massimo di 10.


1. (7 punti) Si scriva una funzione in C che riceve come parametro il nome di un file che memorizza le informazioni sugli incidenti e, in base ai dati letti dal file, costruisce e restituisce all’ambiente chiamante una lista dinamica che per ogni veicolo (rappresentato dalla sola targa) memorizza il numero degli incidenti in cui il veicolo è stato responsabile.


2. (7 punti) Si scriva una funzione in C che riceve come parametri la lista creata al punto precedente e un file che memorizza le informazioni sulle polizze e crea un nuovo file in cui si riversano le informazioni sulle varie polizze con la classe di merito aggiornata.

Download Fonte Codice




Esercizio 5– Funzioni in C e lettura da file (10 punti)

Si supponga di avere a disposizione un file che memorizza una sequenza (di lunghezza ignota) di valori interi. 

Nel file i diversi valori sono separati da uno spazio.

Si scriva una funzione in C che riceve come parametri il nome del file (una stringa) e due valori interi, v1 e v2 (con v1 minori v2), e modifichi il file nel modo seguente:

- i valori minori di v1 devono essere memorizzati tutti all’inizio del file.

- i valori maggiori o uguali a v1 e minori di v2 devono essere memorizzati tutti al centro del file.

- i valori maggiori o uguali a v2 devono essere memorizzati alla fine del file.

L’ordine all’interno di ciascuna partizione del file deve rimanere lo stesso che nel file iniziale; cioè le partizioni non devono essere ordinate.

Per esempio, se il file iniziale contiene la sequenza:2 5 21 8 10 1 4 16 3e i valori di v1 e v2 sono rispettivamente 3 e 9, il file diventa 2 1 5 8 4 3 21 10 16

N.B.: è possibile far uso di strutture dati di appoggio per creare le tre partizioni prima di memorizzarle nel file.

Download Codice




Esercizio 9 – Funzioni in C e lettura da file (12 punti)

Il quadrato di Polibio è una tecnica di cifratura del testo inventata dal celebre storico greco. La chiave per cifrare il testo è data da una matrice, char key[5][5], che memorizza in un ordine casuale le 25 lettere dell'alfabeto (I e J usano la stessa codifica). Per ottenere la cifratura di una parola, si sostituisce ogni lettera con le relative coordinate nella matrice, giustapposte in modo da formare un numero intero di due cifre.

Sia per esempio data la matrice key sotto riportata, in cui per semplicità le lettere sono memorizzate in ordine alfabetico. In base a tale matrice, la cifratura della parola mare è: <32, 11, 42, 15>.

 1  2   3   4   5

 1  A   B   C   D   E

 2  F   G   H   I,J K

 3  L   M   N   O   P

 4  Q   R   S   T   U

 5  V   W   X   Y   Z

Infatti: M = key[3,2]; A = key[1,1]; R = key [4,2], E = key[1,5].

N.B.: Le coordinate usate nella cifratura partono da 1, mentre gli indici per scandire la matrice devono partire da 0!

Supponendo di dover cifrare un testo contenuto in un file, definire una funzione avente il seguente prototipo:

void polybius(FILE *fp, char key[][5], int *cifratura)  che, a partire da:

- il file puntato da fp, che contiene un testo lungo massimo N caratteri (spazi inclusi), con N costante nota a priori e definita nella parte dichiarativa del programma;

- la matrice quadrata key di dimensione 5 x 5 che contiene la chiave di cifratura, costruisca l’array di interi, cifratura, in modo che questo memorizzi, secondo lo schema sopra descritto, la cifratura del testo letto dal file. Gli eventuali spazi presenti nel testo sono codificati nell’array con il valore 0. Si assuma inoltre che nel testo non siano inclusi segni di punteggiatura e caratteri diversi da quelli presenti nella matrice.


Download Codice




Esercizio 13– Gestione dei File in C (8 punti)

Sia dato un file che memorizza dati sulle operazioni effettuate su un conto corrente bancario. Ciascuna operazione è memorizzata su una singola riga del file. I dati memorizzati in ogni riga sono:

 • La data nel formato gg/mm/aa;

 • L’importo dell’operazione(un numero reale positivo);

 • Il simbolo “+” o “–“ per indicare che l’operazione costituisce una entrata o una uscita. Un esempio di file secondo tale formato è il seguente:

 10/01 1500.00 +

 20/01 200.00 -

 05/02 120.10 -

 10/02 3000.00 +

 ......

Si scriva una funzione in C che, ricevuto come parametro il nome di un file, nomefile, e una soglia di credito, s, produca in output dei messaggi con le date in cui il saldo è sceso sotto la soglia s e con il valore del saldo in quelle date. Nel caso in cui, in base ai movimenti memorizzati nel file, il saldo non scenda mai sotto tale valore, la funzione deve mostrare a video semplicemente il saldo.

Download Codice




Esercizio 14. Gestione dei File e Matrici (14 punti)

 La soluzione di un cruciverba può essere memorizzata in un file organizzato nel seguente modo:

 - La prima riga contiene due numeri interi: il numero di righe e il numero di colonne del cruciverba;

 - Le righe successive corrispondono alle righe del cruciverba; le caselle nere sono codificate come asterischi.

 Di seguito si riporta un esempio di schema di cruciverba memorizzato nel file:

 SUGLI*

 ODIATI

 TIRI*N

 TRI*CD

 OE*POI

 Definire un programma in C in grado di leggere dal file lo schema del cruciverba e scrivere in un secondo file, chiamato parole.txt, l’elenco delle parole, sia orizzontali, sia verticali, che hanno bisogno di una definizione (cioè le sole parole di lunghezza >=2). Il file parole.txt dovrà memorizzare prima tutte le parole orizzontali (una per riga), quindi una riga vuota, e infine tutte le parole verticali (una per riga). Per esempio, dato lo schema del cruciverba riportato sopra, il file parole.txt dovrà memorizzare:

 SUGLI

 ODIATI

 TIRI

 TRI

 CD

 OE

 POI

 SOTTO

 UDIRE

 GIRI

 LAI

 IT

 CO

 INDI

 Si scriva un programma in C che riceve come argomento sulla linea di comando il nome del file che memorizza lo schema del cruciverba; quindi scrive nel file parole.txt l’elenco delle parole di lunghezza >= 2, così come illustrato nell’esempio precedente. Si assuma che la dimensione massima di un cruciverba sia 20 × 20.

 Il programma deve essere realizzato in modo modulare, scomponendolo almeno nelle seguenti funzioni:

 1. La funzione main con passaggio come argomento della linea di comando del nome del file con lo schema del cruciverba (3 punti);

 2. Una funzione che legge il cruciverba dal file trasferendone il contenuto in un’opportuna struttura dati (4 punti);

 3. Una o più funzioni per la ricerca delle parole nella struttura dati costruita al punto precedente e scrittura nel file parole.txt (7 punti).

Download Codice





Esercizio 18. Uso di File e Liste Dinamiche (19 punti)

 Un numero n si dice Primo Troncabile a Sinistra (PTS) se n e tutti i numeri ottenuti cancellando ripetutamente le sue cifre più a sinistra sono primi. Per esempio, 313 è un PTS; infatti, 313 è primo, 13 è primo (è stata cancellata la prima cifra a sinistra), 3 è primo (sono state cancellate le prime due cifre a sinistra).

 Si definisca un programma in C in grado di leggere dal file una sequenza di interi e memorizzare in una lista dinamica ordinata i soli elementi che sono PTS. Il file è organizzato in modo da contenere un intero per ogni riga. Il nome del file deve essere letto come argomento della linea di comando con cui si esegue il programma.

 Il programma deve essere realizzato in modo modulare, scomponendolo almeno nelle seguenti funzioni:

 1. La funzione main, con passaggio come argomento della linea di comando del nome del file contenente gli interi (3 punti);

 2. Una funzione per verificare se un intero letto dal file è PTS. Tale funzione può anche far uso di altre funzioni, per esempio quella per verificare che un numero sia primo (8 punti).

 3. Una funzione che legga dal file gli interi e memorizzi i soli PTS in una lista dinamica. L’inserimento deve avvenire in ordine, in modo che nella lista risultante gli interi siano elencati in ordine crescente (8 punti);

Download codice


Commenti