23 gennaio 2012
Fondamenti di Informatica Modulo A
Prof. Marco Gavanelli
23 gennaio 2012
Esercizio (punti 12)
Alcuni ricercatori tengono dei corsi universitari. Visto che non rientra fra i loro doveri istituzionali effettuare insegnamento, la legge stabilisce che le università devono pagarli.
In una università, viene stanziata una quota per pagare i ricercatori e viene stabilito che questa quota andrà ripartita in base ai crediti erogati da ciascun ricercatore.
Si ha un file binario corsi.bin che contiene le informazioni sui corsi (al più 100) tenuti da ricercatori. Per ogni corso, si hanno le seguenti informazioni:
- nome del corso: stringa contenente al più 20 caratteri, compreso il terminatore;
- docente: nome del ricercatore; stringa contenente al più 20 caratteri, compreso il terminatore;
- numero dei crediti del corso: intero
Supponendo che ogni ricercatore tenga al più un corso, si scriva un programma che calcola la retribuzione di ciascun ricercatore.
Ad esempio, se il file corsi.bin contiene le seguenti informazioni:
Rossi | Analisi | 6 |
Verdi | Informatica | 10 |
Bianchi | Inglese | 4 |
e il totale di soldi a disposizione è 4000 euro, il programma dovrà stampare:
Rossi 1200
Verdi 2000
Bianchi 800
Si utilizzi il seguente algoritmo:
- nel
main
, si invochi una procedura o funzione di lettura (punto 2) poi si legga da tastiera la somma totale a disposizione, si invochi una procedura o funzione di elaborazione (punto 3), infine si stampi il risultato con una procedura di stampa (punto 4) - nella procedura o funzione di lettura, si legga il file corsi.bin e se ne porti il contenuto in un opportuno array di strutture. Si mostri a video l'array letto.
- La procedura di elaborazione prenderà come parametri
- l'array letto al punto 2,
- la somma totale a disposizione
main
un array che contiene, per ogni ricercatore, il nome e la retribuzione. - Nella procedura di stampa, si mostri a video l'array con le retribuzioni, generato nella procedura di elaborazione al punto 3.
Facoltativo (punti 8)
Si supponga ora che ci possano essere dei ricercatori che tengono due o più corsi, per cui nel file ci possono essere due o più corsi riferiti allo stesso ricercatore (si usi, a tale scopo, il file corsi2.bin ). Si modifichi il programma in modo che produca un array in cui ogni ricercatore compare una volta sola e associato al suo nome compaia la somma totale che percepirà.
Ad esempio, se il file corsi2.bin contiene
Rossi | Analisi | 6 |
Verdi | Informatica | 5 |
Rossi | Calcolo | 3 |
Bianchi | Inglese | 3 |
Verdi | Database | 3 |
e il totale di soldi a disposizione è 2000 euro, il programma dovrà stampare:
Rossi 900
Verdi 800
Bianchi 300
Si noti che la retribuzione potrebbe non essere intera.
Si consegnino i file:
- un file
funzioni.c
che contiene le funzioni comuni - un file
main.c
che contiene ilmain
e le funzioni usate solo nell'esercizio base - un file
facoltativo.c
che contiene ilmain
e le funzioni usate solo nell'esercizio facoltativo
più tutti i file header ritenuti necessari.
/p