Problema col C
[Esercizio 1 - punti 8]
21 `e un gioco di carte per due giocatori che utilizza un mazzo di carte il cui valore varia da 1 a 10.
Il valore di una mano e' la somma dei valori delle carte e l’obiettivo `e avvicinarsi il pi`u possibile al
valore 21 senza superarlo. In ogni momento un giocatore pu`o chiedere una nuova carta o fermarsi.
Se un giocatore supera il valore 21 ottiene 0 punti, altrimenti ottiene un punteggio pari al valore
della sua mano (che sar`a quindi 21). Vince la partita il giocatore con il punteggio pi`u alto; in
caso di punteggi uguali non vince nessuno. Dato un intero x, con 0 < x <20, la strategia di tipo
x consiste nel chiedere una nuova carta fino a quando il valore della mano `e x. Si scriva una
procedure int StrategiaMigliore(int x1, int x2, int N) che, dati due interi distinti x1, x2
tali che 0 < x1, x2 20, simuli N partite di 21, e restituisca 1 se la strategia di tipo x1 `e risultata
migliore (cio`e, se ha vinto pi´u partite), 2 se la strategia di tipo x2 `e risultata migliore, e 0 nel caso
nessuna delle due strategie ha prevalso sull’altra. Si assuma di avere a disposizione una procedura
int EstraiCarta() che estrae una carta dal mazzo e ne restituisce il valore (compreso fra 1 e 10).
Io ho fatto tutto il programma
#include
#include
#include
int main() {
srand(time(NULL));
int a, x, y, n, i, somma1, vittorie1, somma2, vittorie2;
int estraicarta(int a)
{
a=rand()%10+1;
return a;
}
printf("scrivi x1");
scanf("%d", &x);
printf("scrivi x2");
scanf("%d", &y);
printf("quanti lanci di test vuoi fare?");
scanf("%d", &n);
int strategiamigliore( int x1,int x2,int n);
int strategiamigliore(int x, int y, int n) {
for(i=1;1<=n;i++) {
do {
somma1=0;
estraicarta();
somma1=somma1+estraicarta();
}
while (somma1
do {
somma2=0;
estraicarta();
somma2=somma2+estraicarta();
}
while (somma2
if (somma1>somma2) vittorie1 ++;
if (somma1
}
if (vittorie1>vittorie2) return 1;
if (vittorie1
if (vittorie1=vittorie2) return 0;
}
scanf("%d", &a);
return 0;
}
ma mi dice errore perchè devo mettere il punto e virgola nelle dichiarazioni delle funzioni mentre là non ci vogliono. Infatti anche se faccio così il programma mi parte ma non mi fa niente. Potreste aiutarmi?
21 `e un gioco di carte per due giocatori che utilizza un mazzo di carte il cui valore varia da 1 a 10.
Il valore di una mano e' la somma dei valori delle carte e l’obiettivo `e avvicinarsi il pi`u possibile al
valore 21 senza superarlo. In ogni momento un giocatore pu`o chiedere una nuova carta o fermarsi.
Se un giocatore supera il valore 21 ottiene 0 punti, altrimenti ottiene un punteggio pari al valore
della sua mano (che sar`a quindi 21). Vince la partita il giocatore con il punteggio pi`u alto; in
caso di punteggi uguali non vince nessuno. Dato un intero x, con 0 < x <20, la strategia di tipo
x consiste nel chiedere una nuova carta fino a quando il valore della mano `e x. Si scriva una
procedure int StrategiaMigliore(int x1, int x2, int N) che, dati due interi distinti x1, x2
tali che 0 < x1, x2 20, simuli N partite di 21, e restituisca 1 se la strategia di tipo x1 `e risultata
migliore (cio`e, se ha vinto pi´u partite), 2 se la strategia di tipo x2 `e risultata migliore, e 0 nel caso
nessuna delle due strategie ha prevalso sull’altra. Si assuma di avere a disposizione una procedura
int EstraiCarta() che estrae una carta dal mazzo e ne restituisce il valore (compreso fra 1 e 10).
Io ho fatto tutto il programma
#include
#include
#include
int main() {
srand(time(NULL));
int a, x, y, n, i, somma1, vittorie1, somma2, vittorie2;
int estraicarta(int a)
{
a=rand()%10+1;
return a;
}
printf("scrivi x1");
scanf("%d", &x);
printf("scrivi x2");
scanf("%d", &y);
printf("quanti lanci di test vuoi fare?");
scanf("%d", &n);
int strategiamigliore( int x1,int x2,int n);
int strategiamigliore(int x, int y, int n) {
for(i=1;1<=n;i++) {
do {
somma1=0;
estraicarta();
somma1=somma1+estraicarta();
}
while (somma1
somma2=0;
estraicarta();
somma2=somma2+estraicarta();
}
while (somma2
if (somma1
if (vittorie1>vittorie2) return 1;
if (vittorie1
}
scanf("%d", &a);
return 0;
}
ma mi dice errore perchè devo mettere il punto e virgola nelle dichiarazioni delle funzioni mentre là non ci vogliono. Infatti anche se faccio così il programma mi parte ma non mi fa niente. Potreste aiutarmi?
Risposte
Non ho letto tutto il tuo preambolo sul gioco e ho guardato direttamente il tuo codice C che risulta scarsamente leggibile.
Alcuni consigli:
- togli dalla funzione main tutte le definizioni e le dichiarazioni di funzioni;
- dopo le direttive include riporta le dichiarazioni di tutte le funzioni definitie nel file;
- dopo riporta le definizioni di tutte le variabili globali utilizzate nel file;
- scrivi la definizione della funzione main;
- scrivi le definizioni di tutte le altre funzioni che ti servono.
A questo punto ricompila e prova il programma. Eventualmente riposta il codice (c'è un'apposito tag)
Se ci sono ancora problemi ne riparliamo...
Alcuni consigli:
- togli dalla funzione main tutte le definizioni e le dichiarazioni di funzioni;
- dopo le direttive include riporta le dichiarazioni di tutte le funzioni definitie nel file;
- dopo riporta le definizioni di tutte le variabili globali utilizzate nel file;
- scrivi la definizione della funzione main;
- scrivi le definizioni di tutte le altre funzioni che ti servono.
A questo punto ricompila e prova il programma. Eventualmente riposta il codice (c'è un'apposito tag)
Quanto scritto qui dentro è codice C
Se ci sono ancora problemi ne riparliamo...

Oltre agli errori già individuati da Cozza Taddeo, ce ne sono altri. I più evidenti:
1. condizione di uscita dal for
2. vittorie1 e vittorie2 non inizializzate
3. attivazione errata della procedura strategiamigliore
4. penultimo if errato
ecc.
Posto sotto spoiler una versione corretta, ma esorto fransis2 a non sbirciare subito!
1. condizione di uscita dal for
2. vittorie1 e vittorie2 non inizializzate
3. attivazione errata della procedura strategiamigliore
4. penultimo if errato
ecc.
Posto sotto spoiler una versione corretta, ma esorto fransis2 a non sbirciare subito!
