Salta ai contenuti. | Salta alla navigazione

Strumenti personali

15 gennaio 2020

Fondamenti di Informatica e Laboratorio modulo A - Compito A

Prof. Marco Gavanelli

15 gennaio 2020

 

1  Esercizio (punti 16)

Un progettista deve sviluppare una scheda hardware e deve decidere che tipo di memoria RAM utilizzare. Le memorie disponibili sul mercato sono riportate in un file di testo  memory.txt e sono al massimo 100. Per ciascuna memoria nel file sono riportati:

  • stringa contenente al più 20 caratteri, senza spazi: costruttore
  • intero: tempo di accesso in ns
  • intero: costo in dollari

Nel progetto precedente, era prevista una memoria con tempo di accesso 47 ns e costo 46 $. Il progettista vuole avere l'elenco di tutte le memorie che sono migliori di quella attualmente in uso, cioè

  • il cui tempo di accesso è al più 47 ns
  • il cui costo è al più 46 $

inoltre vuole escludere le memorie che abbiano esattamente le stesse caratteristiche della memoria attuale: se trova una memoria che ha tempo di accesso uguale a 47 ns e costo 46 $ preferisce mantenere la memoria attualmente in uso.

Si scriva un programma C che visualizza tale elenco, organizzando il programma come segue:

  1. main: nel main, si invochi una funzione di lettura del file memory.txt (da realizzare al punto 2), una di calcolo del risultato (da realizzare al punto 3), infine si visualizzi il risultato tramite una procedura di stampa (da realizzare al punto 5)
  2. lettura memory.txt: la funzione deve leggere il file memory.txt e portarne il contenuto in un opportuno array di strutture. Si mostri a video il contenuto dell'array, utilizzando la funzione di stampa (da realizzare al punto 5).
  3. elaborazione: la funzione di calcolo delle memorie migliori ha come parametri
    • l'array letto al punto 2
    più, eventualmente, altri parametri e fornisce al main un array di memorie. Per fare questo, invoca, per ogni memoria dell'array letto al punto 2, una funzione (da sviluppare al punto 4) che verifica se la memoria in questione è migliore di quella attualmente in uso (che ha costo 46 $ e tempo di accesso 47 ns; il campo costruttore può essere stabilito ad una stringa qualsiasi scelta dallo studente)
  4. domina: la funzione riceve come parametri due strutture di tipo memoria e fornisce
    • 1 se la prima memoria è migliore della seconda (ossia se il suo tempo di accesso è minore o uguale a quello della seconda, il suo costo è minore o uguale a quello della seconda e almeno per uno dei due campi vale anche il minore stretto)
    • 0 altrimenti
  5. stampa: la funzione riceve come parametro un array di memorie (più, eventualmente, altri parametri) e lo visualizza sullo schermo.

È indispensabile organizzare opportunamente il programma in procedure e funzioni; è quindi altamente consigliabile aggiungere altre procedure/funzioni oltre a quelle indicate esplicitamente nel testo.

2  Esercizio (punti 4)

Per un altro progetto, il progettista deve scegliere una memoria RAM e deve ancora decidere se fare una scheda veloce ma costosa oppure economica ma lenta. Vorrebbe quindi sapere quali sono le memorie da tenere in considerazione. Chiaramente, non ha senso considerare una memoria se ce n'è un'altra che è migliore sia come costo sia come tempo di accesso. Più in dettaglio: una memoria M è dominata da una memoria N se

  • il tempo di accesso di N è minore o uguale del tempo di accesso di M
  • il costo di N è minore o uguale del tempo di accesso di M
  • per almeno uno dei due criteri vale il minore stretto (cioè o il tempo di accesso di N è minore del tempo di accesso di M, oppure il costo di N è minore del costo di M)

si noti che è la stessa condizione della funzione sviluppata al punto 4, quindi si può riutilizzare quella funzione.

Si crei un array delle memorie che non sono dominate e, nel main, si invochi la funzione di stampa (passo 5) per mostrarlo a video.

 

 

È indispensabile organizzare il programma in opportune procedure e/o funzioni, in particolare aggingendo un numero significativo di funzioni rispetto all'esercizio 1.



Qualora si svolga solo l'esercizio 1, si può svolgere tutto l'esercizio su un unico file.

Qualora si svolga anche l'esercizio 2, si consegnino i file:

  • un file COGNOME.c (dove COGNOME va sostituito col cognome dello studente) che contiene il main e le funzioni usate solo nell'esercizio 1
  • un file facoltativo.c che contiene il main e le funzioni usate solo nell'esercizio 2
  • un file funzioni.c che contiene le funzioni comuni

più tutti i file header ritenuti necessari.

Nella correzione, il docente creerà due progetti:

  • in uno, inserirà i file COGNOME.c e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 1.
  • nell'altro, inserirà i file facoltativo.c e funzioni.c . L'eseguibile che viene creato dovrà risolvere l'esercizio 2.