Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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:

  1. 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)
  2. 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.
  3. 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)
    più, eventualmente, altri parametri, e fornisce al main
    • un intero che rappresenta il vincitore (1 o 2)
    • il punteggio del vincitore
    Tale funzione/procedura dovrà invocare una funzione che calcola il punteggio di un singolo giocatore, da realizzare al punto 4
  4. 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 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.