Sequenza Selezione Iterazione Funzioni Ricorsione Operat. su interi Stringhe Vettori Array
Tabelle File Liste Alberi Esami Maturità Preparazione esami Database Macchina di Turing Automi
Algebra Geometria Giochi            

Esercizi sui File

 

1

Si deve organizzare un file che, per ogni elemento, contenga informazioni del tipo:

identificatore elemento - proprietà
 

Nel file si vogliono elementi in ordine crescente sul campo "identificatore", inoltre si vuole un'organizzazione che permetta di trovare velocemente tutti gli identificatori degli elementi che hanno lo stesso valore nel campo proprietà.

Dare un'ipotesi di struttura per gli elementi del file che permetta di evadere le richieste.

Scrivere una procedura che, ricevendo come parametro un valore per il campo "Proprietà" produca un elenco di tutti gli "identificatori" degli elementi che hanno quel valore come proprietà".

(Fare tutte le ipotesi aggiuntive che si ritengono necessarie).

Scrivere la parte di programma per creare la prima delle liste che concatenano gli elementi con lo stesso valore nel campo proprietà. Procedimento consigliato: il valore del campo proprietà su cui fare il concatenamento è quello del primo elemento del file. Per concatenare gli elementi, conservare la posizione dell'elemento in cui va inserito il puntatore, scorrere sequenzialmente il file fino al prossimo elemento da concatenare (se c'è), quando si trova, inserire la sua posizione, ottenuta contando le letture, nel campo puntatore dell'elemento conservato prima e quindi proseguire per tutto il file.

 

2

Una compagnia di assicurazioni tiene in un file i dati relativi ai clienti (nome, cognome, indirizzo, targa auto assicurata); in un altro file i dati relativi ai contratti di assicurazione (numero polizza, targa auto assicurata, ammontare della rata annuale, dati di scadenza, un campo per indicare se la rata è stata pagata oppure no).

Scrivere un programma che permetta di:

  1. inviare, quotidianamente, una lettera di invito al pagamento ai clienti la cui rata sia in scadenza "oggi";

  2. comunicare ai clienti che chiedono informazioni sulla cifra da pagare, ma che non ricordano né targa né numero di polizza, la cifra richiesta e, qualora il cliente, ricevuta l'informazione paghi, aggiornare il campo rata pagata o no.
     

3

Un file di nome ACQUARIO, contiene le temperature dell'acqua, rilevate ogni ora, durante un giorno, in un acquario. Si vuole sapere qual è la temperatura più bassa che è stata registrata, quante volte ed in quali ore del giorno è stata registrata.

4

Una mostra di scultura è aperta dall'1 al 20 di aprile. Il numero di visitatori di ogni giorno è registrato in un file di nome MOSTRA.

Si vuole sapere quanto è stato il massimo numero di visitatori in un giorno, quante volte ed in quali giorni del mese è stato registrato tale numero.
 

5

In un ospedale viene registrato, per ogni giorno dell'anno (da 1 a 365), il numero di nascite avvenute in quel giorno. Questi numeri sono memorizzati in un file di nome NATI.

Si vuole sapere, a fine anno, quanto è stato il maggior numero di nascite in un giorno, quante volte ed in quali giorni è stato registrato tale numero.
 

6

Durante un esperimento di laboratorio viene rilevata, ogni secondo, per 100 secondi, la velocità di un oggetto in movimento. I valori rilevati sono memorizzati in un file di nome MOTO.

Si vuole sapere quanto è la minima velocità registrata, quante volte ed in quali secondi è stata registrata.
 

7

Un ente pubblico finanzia dei progetti di ricerca, e vuole registrare le informazioni necessarie per poter sapere, dato il nome di un progetto, il denaro stanziato per tale progetto, inoltre vuole poter avere l'elenco dei progetti per cui è stata stanziata una somma in denaro inferiore o superiore ad un valore assegnato.

  1. scrivere un programma per creare il file (o i file) con i nomi dei progetti ed il denaro stanziato per ognuno;

  2. scrivere un programma che dato il nome di un progetto visualizzi il valore dello stanziamento;

  3. scrivere un programma che dato un valore di stanziamento scriva l'elenco dei progetti con uno stanziamento minore o uguale al valore dato;

  4. scrivere un programma che dato un valore di stanziamento scriva l'elen-co dei progetti con uno stanziamento superiore al valore dato;

  5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere la risposta corrispondente.
     

8

Una pizzeria vuole organizzare in modo automatico la raccolta delle ordinazioni ai tavoli e lo smaltimento delle richieste nelle cucine. Ogni tavolo è fornito di un piccolo terminale attraverso il quale può fare le proprie ordinazioni. Sul video com-pare l'elenco dei diversi tipi di pizza e delle diverse bevande. Dal tavolo viene trasmessa l'ordinazione attraverso la tastiera con l'indicazione di tipo e quantità di pizze e bevande. La cucina riceve ordinazioni in sequenza e prepara quanto richiesto. Ogni volta che un'ordinazione è esaudita deve essere eliminata dalle richieste delle cucina.

  1. Dire come possono essere organizzate le informazioni per quanto concerne la singola ordinazione fatta dal tavolo e l'insieme delle ordinazioni ricevute in cucina.

  2. Descrivere un possibile procedimento di eliminazione di un'ordinazione già esaudita e scrivere la procedura corrispondente, specificando le eventuali condizioni a "monte" di tale procedura.

9

Una associazione sportiva dispone di molte palestre, in ognuna di queste sono organizzati più corsi di attività sportive diverse. E' possibile iscriversi a più corsi in più palestre.

Si vogliono organizzare archivi relativi alle palestre, ai corsi ed agli iscritti.

Descrivere una possibile organizzazione di tali archivi, che renda agevoli le seguenti ricerche:

  1. elenco degli iscritti ad ogni palestra;

  2. elenco dei corsi attivati in ogni palestra;

  3. elenco degli iscritti ad ogni corso.

Individuare altre eventuali ricerche possibili sulla organizzazione proposta.

 

10

Un giovane intraprendente organizza una "società di facili guadagni" nel modo seguente:

Spedisce a due conoscenti una lettera chiedendo ad ognuno di inviargli una certa quantità di denaro subito, ed una percentuale fissa per ogni quantità di denaro che essi riceveranno in seguito; chiede inoltre che ognuno dei due spedisca una richiesta analoga ad altre due persone.

Si domanda:

  1. come può essere rappresentata questa organizzazione per poter:

  • avere un elenco delle persone "associate";

  • rintracciare eventuali punti di arresto nell'organizzazione;

  • calcolare la quantità di denaro incassata da un "associato";
     

  1. quali informazioni vanno inserite in tale rappresentazione per rispondere alle tre richieste a, b, c;

  2. la descrizione del procedimento per inserire un nuovo "associato" nella rappresentazione;

  3. la codifica di una procedura per l'inserimento relativo al punto 3.
     

11

Si vuole creare un sistema informativo per una catena alberghiera. Nella catena esistono alberghi di prima, seconda e terza categoria, in località turistiche di mare, montagna o lago.

Ogni albergo dispone di stanze a uno, due o tre letti, con o senza bagno. Si chiede di definire l'organizzazione dei dati per rispondere a richieste di prenotazione o di disponibilità; si chiede inoltre di descrivere sinteticamente una procedura di ricerca per una delle due richieste previste.
 

12

Si vuole usare una tabella hash per ottenere, da un numero telefonico, il nome e l'indirizzo dell'abbonato corrispondente. Si supponga di dover affrontare il problema per un comune di circa 300 abbonati.

  1. Dire quale può essere una formula per la codifica delle chiavi (numeri telefonici), e, senza entrare nei dettagli della programmazione, scrivere l'intestazione della procedura che effettui tale codifica.

  2. Scrivere quindi una procedura per la ricerca in tabella di un abbonato, che utilizzi la formula sopra esposta.

13

Si vogliono memorizzare in una tabella di tipo hash i numeri di targa degli autotreni della provincia di Livorno, ed i numeri di telaio dei veicoli corrispondenti. Si supponga che il numero degli autotreni sia circa 200.

  1. Dire quale può essere la formula per la codifica delle chiavi (numeri di targa), e, senza entrare nei dettagli della programmazione, scrivere l'intestazione della procedura che effettui tale codifica.

  2. Scrivere quindi una procedura per l'inserimento in tabella di un nuovo veicolo che utilizzi la formula sopra indicata.

14

In un archivio vanno memorizzate le seguenti informazioni:

  • DATA (giorno, mese, anno)

  • ORA (ore, minuti)

  • TEMPERATURA ATMOSFERICA (gradi centigradi)
     

relative ad una serie di rilevazioni.

Poiché‚ i dati vengono inseriti da tastiera, si richiede di controllare la correttezza prima della registrazione.

Fare un'analisi delle procedure di acquisizione e controllo dei dati nei tre casi e svilupparne una in modo completo.

 

15

Un provveditorato agli studi vuole avere una registrazione di tutte le scuole della provincia e del numero di alunni di ogni scuola, in modo da poter ottenere, dato il nome di una scuola, il numero dei suoi alunni, oppure l'elenco delle scuole con un numero di alunni inferiore o superiore ad un valore assegnato.

  1. scrivere un programma per creare il file (o i file) con i nomi delle scuole ed il numero di alunni corrispondenti;

  2. scrivere un programma che dato il nome di una scuola visualizzi il numero dei suoi alunni;

  3. scrivere un programma che dato il numero di alunni, scriva l'elenco delle scuole con un numero di alunni inferiore al valore dato;

  4. scrivere un programma che dato il numero di alunni, scriva l'elenco delle scuole con un numero di alunni maggiore o uguale al valore dato;

  5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere il risultato corrispondente.

16

Si vogliono avere registrate le seguenti informazioni sugli alberghi di una località balneare: nome dell'albergo, numero di posti disponibili. Questo per poter ricercare, da un albergo, il numero di posti disponibili, oppure per avere un elenco degli alberghi con ricettività maggiore o minore di un valore dato.

  1. scrivere un programma per creare il file (o i file) con i nomi degli alberghi ed il corrispondente numero di posti disponibili;

  2. scrivere un programma che dato il nome di un albergo visualizzi il numero di posti disponibili nell'albergo;

  3. scrivere un programma che, dato il numero di posti, scriva l'elenco degli alberghi con un numero di posti maggiore del numero dato;

  4. scrivere un programma che, dato il numero di posti, scriva l'elenco degli alberghi con numero di posti minore o uguale al numero dato;

  5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere il risultato corrispondente.

17

Si vuole avere la registrazione dei comuni di una regione e del numero di abitanti di ogni comune, in modo da poter sapere, dato un comune, quanti abitanti ha, oppure quali comuni hanno un numero di abitanti maggiore o minore di un valore assegnato.

  1. scrivere un programma per creare il file (o i file) con i nomi dei comuni ed il corrispondente numero di abitanti;

  2. scrivere un programma che, dato il nome di un comune visualizzi il numero di abitanti di quel comune;

  3. scrivere un programma che, dato un valore numerico scriva l'elenco dei comuni con numero di abitanti maggiore o uguale al valore dato;

  4. scrivere un programma che, dato un valore numerico scriva l'elenco dei comuni con numero di abitanti minore del valore dato;

  5. scrivere un programma unico che permetta di scegliere una delle richieste del punto 2 ed avere la risposta corrispondente.

18

Una biblioteca gestisce i prestiti in modo automatico.

Per ogni libro in prestito vengono registrati: il codice del libro (10 caratteri), il numero di tessera di chi chiede il libro (8 caratteri), la data del prestito.

Il bibliotecario registra i prestiti e le restituzioni dei libri utilizzando un programma che viene mandato in esecuzione all'apertura della biblioteca e resta in esecuzione fino alla chiusura della biblioteca.

Descrivere l'organizzazione dei dati e realizzare il programma.

 

19

Un'azienda ha alle dipendenze poco meno di cento addetti. Nel suo centro di calcolo è presente un archivio su disco che per un ben determinato mese contiene gli istanti di entrata e di uscita dei propri dipendenti. Il file è stato ottenuto attraverso il rilevamento automatico di presenze che prevede che il dipendente al momento dell'entrata si "annunci" facendo passare la sua "targhetta" nell'apposito rilevatore, e faccia altrettanto all'uscita. Ma questo a noi non interessa. Il record del file mensile contiene: la matricola del dipendente, l'anno, il mese, il giorno di entrata, l'ora di entrata, il minuto di entrata, il giorno di uscita, l'ora di uscita, il minuto di uscita.

Esistono periodo lavorativi che sono a cavallo di due giorni: esempio il dipendente che entra alle ore 22 di stasera ed esce alle ore 6 di domani.

Per ogni lavoratore vi sono più record inerenti a tutti i periodi lavorati nel mese e sono fisicamente e logicamente contigui nel file: sono i record che hanno la stessa matricola. E' garantito che l'archivio contenga dati validi nel senso che essi si riferiscono ad un ben preciso mese di un anno esistente che è uguale per tutti i record. Ancora, è garantito che l'istante di entrata preceda quello di uscita.

Lo studente deve elaborare questo archivio al fine di stabilire quante ore e quanti minuti ciascun dipendente ha lavorato nel mese.

Successivamente arrotondare i minuti alla mezza ora con le seguenti regole:

  • da 00 a 14 minuti arrotondare a zero;

  • da 15 a 29 minuti arrotondare alla mezza ora;

  • da 30 a 44 minuti arrotondare alla mezza ora;

  • da 45 a 59 minuti arrotondare a una ora.

Le ore si considerino da 00 a 23.

Esiste un secondo archivio anagrafico che contiene tra l'altro le generalità di ciascun dipendente. La chiave di questo archivio è la matricola. Esso contiene anche altri tre campi: anno, mese ed ore lavorate (di tipo float: esempio 120.5 significa 120 ore e 30 minuti).

Lo studente, sulla base delle ore che scaturiscono dalla prima elaborazione, deve aggiornare il secondo archivio nei tre campi appena citati.

Infine, lo studente deve produrre una stampa su carta dell'anagrafico evidenziando il cognome, il nome, la matricola e le ore.

Lo studente deve, altresì, fare ipotesi aggiuntive che non sono state previste da questo testo, ma che sono necessarie per rendere la soluzione più valida e rispondente ai quesiti proposti.

In particolare deve:

  • produrre i tracciati record con i tipi dei campi;

  • descrizione generale sul modo di procedere;

  • spiegare l'organizzazione generale e il tipo di accesso al file;

  • algoritmo in grandi linee in NLS;

  • codifica in un linguaggio di programmazione a scelta.

20

In un settore di un ufficio, gli impiegati sono sistemati in stanze occupate da una o più persone, con un telefono per stanza. Una rubrica di numeri di telefono, interni al settore, è disponibile su un file, ciascun record del quale contiene il nome di un impiegato (di 16 caratteri) ed il suo numero di telefono. Il file è in ordine alfabetico in base al nome degli impiegati. Scrivere un programma che legge la rubrica, e stampa un elenco degli impiegati di ogni stanza (con il relativo numero di telefono). Gli elenchi vanno stampati in ordine crescente di numero telefonico, ed i nomi degli impiegati di ogni stanza in ordine alfabetico.

21

Una società di vendita per corrispondenza memorizza in un file su disco gli ordini giunti in sede.

Dopo aver strutturato opportunamente il tipo base del file, realizzare un algoritmo che ordini in un altro file le richieste per località di destinazione, in modo tale, cioè, che gli ordini provenienti da una stessa città risultino consecutivi nel file destinazione.

 

22

Solo per gioco, si consideri che le 9 materie del corso di informatica siano solamente "orali". Sono abolite le prove scritte, pratiche e grafiche. Le materie sono codificate con i primi numeri naturali, cioè: 01 = italiano, 02 = storia, ecc.. (si può partire anche da 00).

Si consideri un primo file "movimenti" di tipo sequenziale che contiene le seguenti informazioni: codice studente, data del voto o dell'assenza, codice materia, tipo di movimento, quantità, flag. Sui primi campi non vi sono dubbi. Il tipo di movimento può essere 'A' oppure 'V' col significato di assenza o di voto. La quantità rappresenta il voto oppure le ore di assenza. Il flag ha valore '0' od '1' per significare rispettivamente se il record deve essere ancora trasferito o se è già stato trasferito.

Alla fine di ogni quadrimestre il file movimenti viene elaborato al fine di aggiornare un secondo file anagrafico che contiene i voti e le assenze di ciascun studente, in particolare: il codice studente, il cognome e il nome, un vettore di 9 campi per i voti, un vettore di 9 campi per le assenze. Tutti i campi partono da zero, e si considerano già inizializzati. I voti vengono accumulati e contati, nel senso che se uno studente prende in date diverse, sei, sette, sei in una stessa materia, avrà 19 nel campo voti e 3 nel conteggio voti per quella materia.

Il file anagrafico di tipo hash, una volta aggiornato sulla base dell'archivio movimenti, rappresenta il "tabellone" quadrimestrale da esporre nell'atrio.

Si limiti l'archivio alla sola informatica e si supponga che i "movimenti" si riferiscano ad un solo quadrimestre. Si elabori l'archivio movimenti e si produca la stampa del tabellone. Una intestazione, ed una riga per studente con i voti interi arrotondati con la regola dello 0.75 e con le ore di assenza disciplina per disciplina.

Si aggiungano tutte le ipotesi che si ritengono necessarie, ancorché limitative.

I voti di partenza possono essere interi o float, quelli di arrivo interi.
 

23

Una casa editrice pubblica una rivista con le seguenti caratteristiche:

  1. è inviata solo agli abbonati;

  2. la cadenza è mensile;

  3. l'abbonamento è valido per 12 oppure 6 mesi;

  4. la decorrenza dell'abbonamento avviene dal mese di pagamento.

Attualmente la gestione degli abbonamenti è manuale ed è effettuata per mezzo di cartoncini che recano scritti i seguenti elementi:

  1. cognome e nome dell'abbonato;

  2. indirizzo dell'abbonato;

  3. comune e relativo CAP;

  4. mese di scadenza dell'abbonamento.

Al momento dell'invio della rivista viene consultato lo schedario che contiene questi cartoncini; per coloro che sono in regola con l'abbonamento viene scritta una fascetta con sopra l'indirizzo, vengono eliminati i cartoncini relativi ad abbonamenti scaduti e vengono inseriti quelli relativi a nuovi abbonamenti.

Progettare una procedura che automatizzi il procedimento sopra descritto; tale progetto deve prevedere sia la fase di inizializzazione che quella di mantenimento. Si richiedono inoltre le specifiche dei vari programmi che compongono la procedura (dati di input, output, trattamento subito dagli stessi dati, relativi tracciati), le interrelazioni tra gli stessi e lo sviluppo particolareggiato, sia a livello di diagrammi che di minutazione, di uno dei programmi che compongono la procedura.

 

24

In un file di nome PARTECIPANTI e di tipo base PARTECIPANTE:

TYPE

STRINGA30 : string[30];

PARTECIPANTE = RECORD

N0, C0 : stringa30;

PUNTI : integer;

NUMERO : integer;

END;
 

sono stati raccolti i nomi e cognomi e il numero di iscrizione dei partecipanti ad una gara di tiro al piattello, con tutti i campi PUNTI messi al valore zero.

A fine gara, si vuole costruire un file CLASSIFICA nel quale i record dei partecipanti devono comparire in ordine di punteggio, e con il campo PUNTI opportunamente riempito.

Alla fine della costruzione della classifica si vogliono ottenere, a menù, le seguenti informazioni:

  1. stampa della classifica;

  2. dato un partecipante, stampa del punteggio, del posto che occupa in classifica e dello "stacco" di punteggio dal 1º classificato.