19 dicembre 2018 - compito A
Fondamenti di Informatica e laboratorio - Compito A
Prof. Marco Gavanelli
19 dicembre 2018
1 Esercizio (punti 16)
Il gioco Ponte è un gioco a carte che si gioca con le carte francesi. Ogni carta ha
- seme: stringa che può essere "cuori", "quadri", "fiori" o "picche"
- valore: un intero che va da 1 a 13
Ci sono 4 giocatori, numerati da 0 a 3. Il giocatore 0 gioca per primo una carta, poi il giocatore 1 gioca una carta, poi il 2, infine il 3. A questo punto, si considerano le 4 carte giocate: le carte di un seme diverso da quello giocato dal giocatore 0 non vengono considerate; il giocatore che ha giocato la carta con valore più alto fra le carte dello stesso seme del giocatore 0 vince la prima presa.
Ad esempio, se le carte giocate sono:
- giocatore 0: picche 1
- giocatore 1: quadri 12
- giocatore 2: picche 4
- giocatore 3: picche 3
allora il giocatore 2 vince la presa, in quanto è quello che ha giocato la carta più alta fra quelli che hanno giocato lo stesso seme del giocatore 0 (cioè "picche").
A questo punto si comincia la seconda presa: il giocatore 0 gioca nuovamente per primo e si prosegue con le stesse regole. Ad esempio, se le carte giocate sono:
- giocatore 0: fiori 1
- giocatore 1: quadri 2
- giocatore 2: cuori 6
- giocatore 3: cuori 8
allora il giocatore 0 vince la presa, in quanto ha giocato la carta più alta fra quelle di fiori (in effetti, non ci sono altre carte giocate di fiori, quindi ovviamente la più alta è l'unica che è stata giocata).
Nel file di testo carte.txt sono riportate tutte le carte giocate, nella sequenza in cui sono state giocate. Il numero di carte giocate non è noto, ma si sa che è al massimo 52 (un mazzo di carte francesi) e che è comunque un multiplo di 4 (tutti i 4 giocatori hanno giocato lo stesso numero di carte). Nell'esempio visto sopra, il file conterrà:
picche 1 |
quadri 12 |
picche 4 |
picche 3 |
fiori 1 |
quadri 2 |
cuori 6 |
cuori 8 |
Si scriva un programma C che legge il file carte.txt e visualizza quante prese ha vinto il giocatore 0.
Si organizzi il programma come segue:
- main: nel
main
, si invochi una funzione di lettura del file carte.txt (da realizzare al punto 2), una di calcolo del risultato (da realizzare al punto 3), infine si visualizzi il risultato. - lettura carte.txt : la funzione deve leggere il file carte.txt e portarne il contenuto in un opportuno array di strutture. Si mostri a video il contenuto dell'array.
- elaborazione: la funzione di calcolo del risultato ha come parametri
- l'array letto al punto 2
main
il numero di prese vinte dal giocatore 0. Per fare questo, invoca, per ogni presa che viene giocata, una funzione (da realizzare al punto 4) che calcola quale giocatore ha vinto quella presa - l'array letto al punto 2
- vincita presa: la funzione riceve come parametri
- l'array letto al punto 2
- l'indice dell'array in cui inizia la presa (la prima presa inizierà all'indice 0, ecc)
- l'array letto al punto 2
È 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)
Nel gioco del Ponte++, il giocatore che vince la presa giocherà per primo nella presa successiva. Quindi la prima carta di ogni presa non è sempre giocata dal giocatore 0 (come nel Ponte), bensì è giocata dal giocatore che ha vinto la presa precedente. L'ordine dei giocatori rimane lo stesso: dopo il giocatore n giocherà il giocatore n+1 e dopo il giocatore 3 giocherà il giocatore 0.
Se si considera il file di esempio precedente:
picche 1 |
quadri 12 |
picche 4 |
picche 3 |
fiori 1 |
quadri 2 |
cuori 6 |
cuori 8 |
si avrebbe che la prima presa si svolge come prima (nel Ponte):
- giocatore 0: picche 1
- giocatore 1: quadri 12
- giocatore 2: picche 4
- giocatore 3: picche 3
A questo punto, ha vinto la presa il giocatore 2, quindi sarà lui a giocare per primo. Visto che nel file (di esempio riportato nella tabella) la carta successiva è l'1 di fiori, significa che è stato il giocatore 2 a giocare quella carta; l'ordine è quindi:
- giocatore 2: fiori 1
- giocatore 3: quadri 2
- giocatore 0: cuori 6
- giocatore 1: cuori 8
il che significa che è il giocatore 2 ad aver vinto la presa.
Si modifichi il programma per visualizzare il numero di prese del giocatore 0 nel Ponte++.
È 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 ilmain
e le funzioni usate solo nell'esercizio 1 - un file
facoltativo.c
che contiene ilmain
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: