22 dicembre 2016 - AM
Fondamenti di Informatica - Compito B
Prof. Marco Gavanelli
22 dicembre 2016 - AM
1 Esercizio (punti 16)
Il BlackJack è un gioco in cui si usa un mazzo di 52 carte; ogni carta è rappresentata da
- un numero intero da 1 a 13
- un seme, stringa, che può essere "cuori", "quadri", "fiori" o "picche".
Nel BlackJack, ogni carta ha un punteggio:
le carte dall'11 al 13 valgono 10 punti ciascuna. |
le carte da 2 a 10 hanno un valore pari al numero riportato sulla carta (il 2 vale 2 punti, il 3 vale 3 punti, ... il 10 vale 10 punti) |
l'1 (anche chiamato "asso") può valere, a scelta del giocatore, 1 punto oppure 11 punti |
Ogni giocatore si fa servire quante carte desidera.
Se il suo punteggio totale vale 22 o più, si dice che il giocatore ha "sballato" e perde la partita.
Vince il giocatore che non ha sballato e che ha ottenuto il punteggio totale più alto; il punteggio massimo è quindi 21.
In caso di parità vince sempre il giocatore 1.
Sono dati due file; un file binario banco.bin contiene le carte del giocatore 1, mentre il file binario giocatore.bin contiene le carte del giocatore 2.
Si scriva un programma C che calcola quale giocatore ha vinto.
Ad esempio, se il file banco.bin contiene:
1 | picche |
8 | quadri |
ed il file giocatore.bin contiene:
13 | fiori |
7 | quadri |
1 | cuori |
il programma dovrà stampare
vince il giocatore 1 con 19 punti
Si organizzi il programma come segue:
- nel
main
,- si invochi due volte una funzione/procedura di lettura (da sviluppare nel punto 2): la prima volta dovrà leggere il file banco.bin , la seconda dovrà leggere il file giocatore.bin ;
- si invochi una funzione/procedura (da sviluppare al punto 3) che, usando gli array letti al punto 2, calcola quale giocatore ha vinto e con quale punteggio
- infine, stampi il giocatore vincitore e il suo punteggio (calcolato al punto 3)
- Si scriva la funzione/procedura di lettura; essa legge un file, ne porta il contenuto in un opportuno array di strutture e visualizza tale array.
- Si scriva una funzione/procedura che prende come parametri
- i due array che sono stati letti (invocando nel
main
due volte la funzione al punto 2)
main
- un intero che rappresenta il vincitore (1 o 2)
- il punteggio del vincitore
- i due array che sono stati letti (invocando nel
- si scriva una funzione che, dato un array di carte (più eventualmente altri parametri), fornisce il punteggio di un giocatore. Nel caso ci siano degli assi, bisognerà far valere un asso 1 punto oppure 11 punti a seconda di qual è il punteggio più conveniente. Ricordiamo che è piu` conveniente arrivare al più vicino possibile a 21 punti, senza mai superare il 21. Si noti che, se ci sono due (o più assi), non ha senso far valere due assi 11 punti, perché si supera già il 21, per cui al più 1 asso potrà valere 11. Inoltre, un asso può valere 11 solo se il totale (senza l'asso) è minore o uguale a 10.
È indispensabile organizzare opportunamente il programma in procedure e funzioni; è quindi altamente consigliabile aggiungere altre funzione/procedura oltre a quelle indicate esplicitamente nel testo.
2 Esercizio (punti 4)
Si consideri ora un altro gioco: il Poker Semplificato.
Nel Poker Semplificato, ogni giocatore ha 5 carte; vince il giocatore che ha più carte con lo stesso numero.
In caso di parità, di nuovo vince il giocatore 1.
Ad esempio, se il primo giocatore ha queste carte:
2 | picche |
3 | fiori |
2 | fiori |
3 | cuori |
3 | quadri |
ed il secondo ha
4 | fiori |
12 | cuori |
12 | quadri |
12 | picche |
12 | fiori |
allora vince il giocatore 2, in quanto il giocatore 1 ha tre carte con lo stesso numero (3 fiori, 3 cuori, 3 quadri), mentre il secondo ne ha quattro (12 cuori, 12 quadri, 12 picche e 12 fiori).
Si modifichi il programma in modo che fornisca il vincitore del Poker Semplificato. Le carte del primo gicatore sono riportate nel file binario dice1.bin , mentre quelle del secondo sono nel file dice2.bin .
È indispensabile organizzare il programma in opportune procedure e/o funzioni.
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: