{Esame di informatica - 24/7/2019
L’esercizio consiste nello scrivere alcune funzioni.
Parte del software è già presente, ma deve essere completato.
Le funzioni chiamate dalla main, che non deve essere modificata, sono presenti ma senza contenuto e vanno quindi completate. Si tenga conto che un mazzo di carte da gioco (considerato in questo esercizio) è composto da 52 carte, 13 per ciascun seme e quindi la 1, la 14,la 27 e la 40 sono gli assi, …..fino alla 13, la 26, la 39 e la 52 che sono i re ed inoltre i semi sono ordinati: cuori quadri fiori e picche..
1 – completa la funzione
Questa funzione deve restituire un numero casuale tra 1 e 52 utilizzando la funzione rand (si veda l’help)
2 – completa la funzione
Questa funzione riceve una carta da 1 a 13 e deve scriverne a schermo il “valore” secondo questo schema.
1 -> Asso
2 -> 2
3 -> 3 ……
10 -> 10
11 -> Fante
12 -> Donna
13 -> Re.
Nell’esempio la funzione viene chiamata 5 volte dalla main.
3 – completa la funzione
Questa funzione riceve una carta da 1 a 52 e deve scriverne a schermo il “seme”.
Le carte sono numerate dalla più piccola alla più grande, secondo i semi CUORI, QUADRI, FIORI, PICCHE
Quindi hanno ad esempio i seguenti valori:
1 -> di cuori
2 -> di cuori ...
13 -> di cuori …
14 -> di quadri
38 -> di fiori
52 -> di picche.
Nell’esempio la funzione viene chiamata 5 volte dalla main.
4 – completa la funzione
Questa funzione riceve una carta da 1 a 52 e deve chiamare opportunamente le funzioni 2 e 3 in modo che esse scrivano a schermo il nome completo della carta.
Nell’esempio che segue la funzione viene chiamata 4 volte dalla main.
Per svolgere bene l’esame lo studente deve esaminare la main già scritta e capire come essa interagisce con le funzioni che chiama, in particolare per quanto riguarda il passaggio dei parametri. }
FILE MAIN
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void valore_carta(int carta);
int estrai_carta();
//int coppia();
void seme_carta(int carta);
void nome_carta(int carta);
int main()
{
int operazione;
//srand (time(NULL));
int valore0;
do
{
printf("\n");
printf("\n");
printf("Esame del 24/7/2019\n");
printf("Scegli cosa vuoi fare:\n");
printf("\t1 - Estrai una carta dal mazzo\n");
printf("\t2 - Ricevi una carta e scrivine il valore\n");
printf("\t3 - Ricevi una carta e scrivine il seme\n");
printf("\t4 - Ricevi una carta e scrivine il nome (valore e seme)\n");
printf("\t5 - Estrai più carte e ritorna quante carte hai estratto prima di trovare una coppia\n");
printf("\t0 - Esci dal programma...\n\n");
printf("\n");
printf("Quale operazione desideri effettuare?\n");
scanf("%d", &operazione);
getc(stdin);
printf("\n");
switch(operazione)
{
case 1:
valore0 = estrai_carta();
printf("Hai estratto la carta %d\n", valore0);
break;
case 2:
valore_carta(1); printf(" - ");
valore_carta(2); printf(" - ");
valore_carta(11); printf(" - ");
valore_carta(12); printf(" - ");
valore_carta(13); printf(" - ");
break;
case 3:
seme_carta(1); printf(" "); //
seme_carta(13); printf(" ");
seme_carta(14); printf(" ");
seme_carta(27); printf(" ");
seme_carta(40); printf(" ");
break;
case 4:
nome_carta(1); printf(" - ");
nome_carta(14); printf(" - ");
nome_carta(27); printf(" - ");
nome_carta(40); printf(" - ");
break;
case 0:
break;
default:
printf("Operazione non valida\n");
}
}
while(operazione != 0);
return 0;
}
/* 1 - Questa funzione deve restituire un valore casuale tra 1 e 52
*/
int estrai_carta()
{
}
/* 2 - Questa funzione deve scrivere a schermo il valore della carta in questo modo:
1 -> Asso - 2 -> 2 - 3 -> 3....10 -> 10 -> 10 - 11 -> Fante - 12 -> Donna - 13 -> Re
*/
void valore_carta(int carta) /*la funzione riceve un numero da 1 a 13 e scrive i valori da Asso a Re.
Si può utilizzare l'istruzione switch */
{
}
/* 3 - Questa funzione riceve le carte da 1 a 52 e deve scriverne il seme.
Le carte sono numerate dalla più piccola alla più grande,
secondo i semi CUORI, QUADRI, FIORI, PICCHE quindi le carte da 1 a 13
sono di cuori, da 14 a 26 sono di quadri ecc.
Quindi hanno i seguenti valori:
1 -> 1 cuori
2 -> 2 cuori
...
10 -> 10 cuori
11 -> Fante cuori
12 -> Donna cuori
13 -> Re cuori
14 -> Asso di quadri
15 -> 2 quadri
16 -> 3 quadri
...
...
52 -> Re di picche
SUGGERIMENTO:
per ottenere il valore della carta si può usare l'operatore Modulo e considerare il resto)
*/
void seme_carta(int carta) /*riceve una carta (da 1 a 52)
SUGGERIMENTO:
per ottenere il seme si può usare opportunamente il risultato di una divisione e considerare
la parte intera: se è 0 allora il seme è cuori, se è 1 è quadri, ecc.*/
{
}
void nome_carta(int carta) /*la funzione riceve il numero della carta (da 1 a 52),
questa funzione deve chiamare le due precedenti in
modo che esse scrivano il nome completo della carta*/
{
}
e io ho fatto csoi però con degli errori
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void valore_carta(int carta);
int estrai_carta();
//int coppia();
void seme_carta(int carta);
void nome_carta(int carta);
int main()
{
int operazione;
//srand (time(NULL));
int valore0;
do
{
printf("\n");
printf("\n");
printf("Esame del 24/7/2019\n");
printf("Scegli cosa vuoi fare:\n");
printf("\t1 - Estrai una carta dal mazzo\n");
printf("\t2 - Ricevi una carta e scrivine il valore\n");
printf("\t3 - Ricevi una carta e scrivine il seme\n");
printf("\t4 - Ricevi una carta e scrivine il nome (valore e seme)\n");
printf("\t5 - Estrai più carte e ritorna quante carte hai estratto prima di trovare una coppia\n");
printf("\t0 - Esci dal programma...\n\n");
printf("\n");
printf("Quale operazione desideri effettuare?\n");
scanf("%d", &operazione);
getc(stdin);
printf("\n");
switch(operazione)
{
case 1:
valore0 = estrai_carta();
printf("Hai estratto la carta %d\n", valore0);
break;
case 2:
valore_carta(1); printf(" - ");
valore_carta(2); printf(" - ");
valore_carta(11); printf(" - ");
valore_carta(12); printf(" - ");
valore_carta(13); printf(" - ");
break;
case 3:
seme_carta(1); printf(" "); //
seme_carta(13); printf(" ");
seme_carta(14); printf(" ");
seme_carta(27); printf(" ");
seme_carta(40); printf(" ");
break;
case 4:
nome_carta(1); printf(" - ");
nome_carta(14); printf(" - ");
nome_carta(27); printf(" - ");
nome_carta(40); printf(" - ");
break;
case 0:
break;
default:
printf("Operazione non valida\n");
}
}
while(operazione != 0);
return 0;
}
/* 1 - Questa funzione deve restituire un valore casuale tra 1 e 52
*/
int estrai_carta()
{
}
/* 2 - Questa funzione deve scrivere a schermo il valore della carta in questo modo:
1 -> Asso - 2 -> 2 - 3 -> 3....10 -> 10 -> 10 - 11 -> Fante - 12 -> Donna - 13 -> Re
*/
void valore_carta(int carta) /*la funzione riceve un numero da 1 a 13 e scrive i valori da Asso a Re.
Si può utilizzare l'istruzione switch */
{
}
/* 3 - Questa funzione riceve le carte da 1 a 52 e deve scriverne il seme.
Le carte sono numerate dalla più piccola alla più grande,
secondo i semi CUORI, QUADRI, FIORI, PICCHE quindi le carte da 1 a 13
sono di cuori, da 14 a 26 sono di quadri ecc.
Quindi hanno i seguenti valori:
1 -> 1 cuori
2 -> 2 cuori
...
10 -> 10 cuori
11 -> Fante cuori
12 -> Donna cuori
13 -> Re cuori
14 -> Asso di quadri
15 -> 2 quadri
16 -> 3 quadri
...
...
52 -> Re di picche
SUGGERIMENTO:
per ottenere il valore della carta si può usare l'operatore Modulo e considerare il resto)
*/
void seme_carta(int carta) /*riceve una carta (da 1 a 52)
SUGGERIMENTO:
per ottenere il seme si può usare opportunamente il risultato di una divisione e considerare
la parte intera: se è 0 allora il seme è cuori, se è 1 è quadri, ecc.*/
{
}
void nome_carta(int carta) /*la funzione riceve il numero della carta (da 1 a 52),
questa funzione deve chiamare le due precedenti in
modo che esse scrivano il nome completo della carta*/
{
}