Corsi di laurea in Ingegnera Elettronica e Ingegneria Gestionale Fondamenti di Programmazione / Fondamenti di Informatica I
Prova scritta del 17 febbraio 2014
Esercizio 1 (17 punti)Torneo dei borghi. Un file contiene i partecipanti ad un tornero dei borghi. Riporta, nella prima riga, il numero di borghi e i nomi dei borghi, e nelle righe successive il numero e l’elenco dei nomi dei partecipanti che gareggiano per ciascun borgo. Il formato può essere desunto dall’esempio riportato a lato.
Si osservi che né i nomi dei borgi né i nomi dei partecipanti contengono spazi. I nomi sono unici (cioè non ci sono omonimie né all’interno di un borgo né tra i concorrenti dei diversi borghi). Il numero massimo di borghi è 15 e il numero massimo di concorrenti per borgo è 20.
Un secondo file contiene i punti conquistati da ciascun partecipante, nel formato riportato nel riquadro a destra:
L’ordine è casuale, un partecipante può comparire più volte e alcuni possono non comparire affatto.
Si scriva un programma in linguaggio C che riceva sulla riga di comando i nomi di due file siffatti e stampi a video i punteggi totali
conquistati da ciascun borgo (l’ordine può essere qualsiasi).
Nell’esempio sopra riportato il programma dovrà stampare:
piazza 41 ponte 24 rivadestra 26
Esercizio 2 (13 punti)
Life. Il gioco della vita è un gioco senza giocatori, infatti la sua evoluzione è determinata dal suo stato iniziale senza necessità di alcun input da parte di giocatori umani. Si svolge su una scacchiera quadrata di dimensione n × n (con n ≤ 100) detta mondo. Ogni cella del mondo ha (al più) 8 vicini, che sono le celle ad essa adiacenti, includendo anche quelle in senso diagonale. Le celle sui bordi hanno ovviamente meno vicini. Ogni cella può trovarsi in due stati: viva o morta. Lo stato del mondo evolve in intervalli di tempo discreti. Gli stati di tutte le celle in un dato istante sono usati per calcolare lo stato delle celle all'istante successivo. Tutte le celle del mondo vengono quindi aggiornate simultaneamente nel passaggio da un istante a quello successivo. Le transizioni di stato dipendono unicamente dal numero di vicini vivi:
• una cella morta con esattamente 3 vicini vivi nasce, diventando viva;
• una cella viva con 2 o 3 vicini vivi sopravvive; altrimenti muore (per isolamento o sovraffollamento).
Ad esempio, dato il mondo rappresentato qui sotto a sinistra (dove il valore 1 indica una cella viva e il valore 0 indica una cella morta) di dimensione n = 6, questo evolve nel mondo a destra.
Si scriva una funzione che riceve come parametro due matrici quadrate intere e la loro dimensione n (le matrici hanno la medesima dimensione). La prima matrice contiene solo i valori 0 e 1 e rappresenta una configurazione del mondo. La funzione deve scrivere nella seconda matrice l'evoluzione del mondo allo stato successivo.
SerenaZ 11 MariaS 12 PaolaV 8 LauraF 3 PaoloR 10 PaolaV 7 LuigiT 7 MarioS 5 RobertoB 24 LauraF 4 3 piazza ponte rivadestra
piazza 3 PaoloR LauraF RobertoB
ponte 4 LuigiT MarioS MariaS VincenzoC rivadestra 2 PaolaV SerenaZ
SUGGERIMENTO
Si memorizzino i nomi dei borghi e i partecipanti in un vettore di strutture i cui elementi siano definiti come segue:
struct borgo {
char nome[32];
in numero_partecipanti;
char partecipanti[20][32];
};