Problema con il codice
salve a tutti. Volevo fare un programma in C che mi calcolasse la probabilità di vincere una mano a poker sapendo le carte dell'avversario e le mie. Io ho scritto questo codice:
#include
#include
double calcprob(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2){
//calcola probabilità di vincere con
//una determinata configurazione delle mie carte e di quelle avversarie
int uscnum[5];
int usccol[5];
return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, 0, uscnum, usccol);
}
double calcprob_ric(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2, int uscite, int*uscnum, int* usccol){
int i, j;
if(uscite<5) {
for(i=0; i<13; i++){
uscnum[uscite]=i;
for(j=0; j<4; j++){
usccol[uscite]=j;
return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscite+1, uscnum, usccol);
}
}
}
return determinavittoria(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscnum, usccol);
}
però mi da questi errori quando li vado ad eseguire:
programmapoker.c:10: error: conflicting types for ‘calcprob_ric’
programmapoker.c:8: note: previous implicit declaration of ‘calcprob_ric’ was here
mi sa che l'errore sta nel fatto che nel modo in cui ho scritto io non riconosce uscnum e usccol come int*. Mi potreste dare una mano? grazie mille
#include
#include
double calcprob(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2){
//calcola probabilità di vincere con
//una determinata configurazione delle mie carte e di quelle avversarie
int uscnum[5];
int usccol[5];
return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, 0, uscnum, usccol);
}
double calcprob_ric(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2, int uscite, int*uscnum, int* usccol){
int i, j;
if(uscite<5) {
for(i=0; i<13; i++){
uscnum[uscite]=i;
for(j=0; j<4; j++){
usccol[uscite]=j;
return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscite+1, uscnum, usccol);
}
}
}
return determinavittoria(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscnum, usccol);
}
però mi da questi errori quando li vado ad eseguire:
programmapoker.c:10: error: conflicting types for ‘calcprob_ric’
programmapoker.c:8: note: previous implicit declaration of ‘calcprob_ric’ was here
mi sa che l'errore sta nel fatto che nel modo in cui ho scritto io non riconosce uscnum e usccol come int*. Mi potreste dare una mano? grazie mille
Risposte
Riscrivi il codice inserendolo nel tag code che così non si riesce a leggere.
allora, il codice è
e gli errori che mi dà sono questi:
così va bene?
#include <stdio.h> #include <stdlib.h> double calcprob(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2){ //calcola probabilità di vincere con //una determinata configurazione delle mie carte e di quelle avversarie int uscnum[5]; int usccol[5]; return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, 0, uscnum, usccol); } double calcprob_ric(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2, int uscite, int*uscnum, int* usccol){ int i, j; if(uscite<5) { for(i=0; i<13; i++){ uscnum[uscite]=i; for(j=0; j<4; j++){ usccol[uscite]=j; return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscite+1, uscnum, usccol); } } } return determinavittoria(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscnum, usccol); }
e gli errori che mi dà sono questi:
programmapoker.c:10: error: conflicting types for ‘calcprob_ric’ programmapoker.c:8: note: previous implicit declaration of ‘calcprob_ric’ was here
così va bene?
Aggiungi il prototipo della funzione calcprob_ric all'inizio, prima del richiamo della funzione stessa.
"Rggb":
Aggiungi il prototipo della funzione calcprob_ric all'inizio, prima del richiamo della funzione stessa.
ok: ora ho scritto:
#include <stdio.h> #include <stdlib.h> double calcprob(int, int, int, int, int, int, int, int); double calcprob_ric(int, int, int, int, int, int, int, int, int, int*, int*); double calcprob(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2){ //calcola probabilità di vincere con //una determinata configurazione delle mie carte e di quelle avversarie int uscnum[5]; int usccol[5]; return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, 0, uscnum, usccol); } double calcprob_ric(int mianum1, int miacol1, int mianum2, int miacol2, int tuanum1, int tuacol1, int tuanum2, int tuacol2, int uscite, int*uscnum, int* usccol){ int i, j; if(uscite<5) { for(i=0; i<13; i++){ uscnum[uscite]=i; for(j=0; j<4; j++){ usccol[uscite]=j; return calcprob_ric(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscite+1, uscnum, usccol); } } } return determinavittoria(mianum1, miacol1, mianum2, miacol2, tuanum1, tuacol1, tuanum2, tuacol2, uscnum, usccol); }
però mi dice che manca il main: ma in un programma del genere che contiene solo funzioni, non potrei ometterlo il main?
Se vuoi eseguire qualcosa il main ce lo devi mettere per forza. Se no lo devi compilare con una libreria statica. Dipende da quale sia lo scopo del tuo programma.
Da qualche parte devi avere un punto di ingresso (e quindi la funzione main), se non in quel segmento di codice almeno in un altro.
"apatriarca":
Se vuoi eseguire qualcosa il main ce lo devi mettere per forza. Se no lo devi compilare con una libreria statica. Dipende da quale sia lo scopo del tuo programma.
cosa vuol dire che devo aprirlo con una libreria statica?
Ho sbagliato a scrivere. Se vuoi creare una libreria, non un eseguibile, allora devi dire al compilatore di creare una libreria statica. Il modo dipende dal sistema operativo e dal compilatore usato.