13 Mar 07
Fondamenti di Informatica 1 - Compito A
Prof. Marco Gavanelli
13 Marzo 2007
Esercizio (16 punti)
Un programma in linguaggio C deve verificare se una cartina politica è colorata correttamente. Una cartina è colorata correttamente se due stati confinanti hanno colore diverso. A disposizione ci sono 4 colori, indicati con i numeri da 1 a 4.
I confini fra gli stati sono indicati in un file binario confini.bin che contiene le seguenti informazioni
- nomestato1 (stringa di 20 caratteri, incluso il terminatore)
- nomestato2 (stringa di 20 caratteri, incluso il terminatore).
La colorazione è invece indicata in un file binario nazioni.bin che contiene
- nomestato (stringa di 20 caratteri, incluso il terminatore)
- colore (int)
Il programma deve visualizzare quanti conflitti ci sono, cioè quante coppie di stati confinanti hanno lo stesso colore. Si usi il seguente algoritmo:
- Leggere il file confini.bin, portarlo in un array e stampare il suo contenuto.
- Leggere il file nazioni.bin e portarne il contenuto in un array. Visualizzare tramite una procedura l'array.
- Si scriva un funzione (che verrà invocata al punto 4) che, presi in ingresso come parametri:
- l'array creato al punto 2
- il nome di una nazione
- Si scriva una funzione che, presi in ingresso (come parametri) i due array (ed eventualmente altri parametri), restituisce il numero di conflitti. Per fare questo,
- Infine, si stampi il numero di conflitti.
Facoltativo (Punti 3)
Si cerchi di ridurre il numero di conflitti, eseguendo 1000 volte il seguente ciclo:
- si seleziona una coppia di valori che è in conflitto
- si assegni ad una delle due variabili (a scelta dello studente) un numero a caso compreso fra 1 e 4. Si usi la formula
C = rand()*4/RAND_MAX+1
( rand()
e RAND_MAX
sono definiti in stdlib.h
, si veda l'help di Visual Studio).
Infine, si mostri il numero di conflitti minimo trovato nelle 1000 iterazioni.