Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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:

 

  1. 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)
  2. 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.
  3. La procedura di elaborazione prenderà come parametri
    • l'array letto al punto 2,
    • la somma totale a disposizione
    (più eventualmente altri parametri) e dovrà fornire al main un array che contiene, per ogni ricercatore, il nome e la retribuzione.
  4. 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 il main e le funzioni usate solo nell'esercizio base
  • un file facoltativo.c che contiene il main e le funzioni usate solo nell'esercizio facoltativo

più tutti i file header ritenuti necessari.

/p