Salta ai contenuti. | Salta alla navigazione

Strumenti personali

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:

 

  1. 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.

     

  2. 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.

     

  3. elaborazione: la funzione di calcolo del risultato ha come parametri
    • l'array letto al punto 2

       

    più, eventualmente, altri parametri e fornisce al 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

     

  4. 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)

       

    e fornisce il giocatore che ha vinto la presa.

     

È 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 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.