Salta ai contenuti. | Salta alla navigazione

Strumenti personali

22 December 2016 - AM

English version

Fondamenti di Informatica

Prof. Marco Gavanelli

22 December 2016 (AM)

1  Exercise (points 16)

BlackJack is a game that is played with 52 cards; each card has

  • an integer number from 1 to 13
  • a suite: string, that can be "cuori" (hearts), "quadri" (diamonds), "fiori" (clubs) or "picche" (spades).

Each card is worth a score:

  • 1 (also called "ace") can count as 1 point or 11 points, according to the player's choice
  • cards from 2 to 10 have their natural value (a 2 is worth 2 points, a 3 is worth 3 points, ... a 10 is worth 10 points)
  • cards from 11 to 13 are worth 10 points each.

Each player asks how many cards as he wants.

If his total score is 22 or more, he "busted" and he loses the game.

The player with the highest score wins; thus the maximum possible score is 21.

Two files are given; one binary file banco.bin contains the cards of player 1, while the binary file giocatore.bin contains the cards of player 2.

Write a C program that computes which player wins the game, considering that in case the two players have the same score, player 1 wins.

For example, if the file banco.bin contains:

1 picche
8 quadri

and the file giocatore.bin contains:

13 fiori
7 quadri
1 cuori

the program should print

player 1 wins with 19 points

Organize the program as follows:

  1. in the main function,
    • invoke twice a function (or procedure) that reads a file (to be developed in point 2): the first time the function reads file banco.bin , the second it reads file giocatore.bin ;
    • invoke a procedure/function (to be developed in point 3) that uses the arrays read in point 2 and computes which player wins and with which score
    • finally, print the winning player and the score computed at point 3
  2. write a procedure of function that reads a file into an array of structures; this function should also print the content of the array on the screen.
  3. write a procedure or function that takes as parameters
    • the two arrays that have been read (by invoking in the main program twice the function developed on point 2)
    plus, possibly, other parameters, and provides to the main
    • an integer that represents the winning player (either 1 or 2)
    • the score of the winner
    Such function should invoke a function that computes the score of a single plaer, to be developed in point 4
  4. write a function that, given an array of cards (plus, possibly, other parameters), provides the total score of a player.
    In case there are some aces, the function should count it in the best way for the player (either as 1 or as 11 points). Remember that it is most convenient to get as close as possible to 21, without ever exceeding 21.
    Note that if there are two or more aces, it does not make sense to have two aces count as 11, because the player would score more than 22. This means that at most one ace counts as 11. Moreover, an ace can count as 11 only if the total of the other cards is lower than or equal to 10.

It is strictly necessary to organize the program into procedures and functions; it is highly advisable to add further functions beside those strictly necessary required in the text.

2  Exercise (points 4)

Consider now the game of simplified Poker.

In simplified Poker each player has 5 cards; the player that has more cards holding the same number wins.

In case of parity, player 1 wins.

For example, if player 1 has the following cards:

2 picche
3 fiori
2 fiori
3 cuori
3 quadri

and the second has:

4 fiori
12 cuori
12 quadri
12 picche
12 fiori

then player 2 wins, since player 1 has three cards with the same number (3 fiori, 3 cuori, 3 quadri), while the second has four (12 cuori, 12 quadri, 12 picche e 12 fiori).

Modify the program so that it provides the winner of simplified Poker (instead of BlackJack).

The cards of the first player are in binary file dice1.bin, while those of the second are in file dice2.bin.