Ciao a tutti colleghi, avrei bisogno del vostro aiuto per una function di questo progetto che sto scrivendo. Vorrei simulare un torneo fra 8 squadre. La squadra vincente si stabilisce sommando i pesi dei giocatori di una squadra, moltiplicando il risultato per un numero random fra 0 e 1 e confrontando l'operazione con la squadra avversaria. La squadra con il numero maggiore vince. Mi servirebbe una mano solo per questo algoritmo che ho già provato a scrivere:
int squadra_vincente(Giocatore x[100][100], int squad_1, int squad_2)
{
int pesi_1[20];
int pesi_2[20];
int somma_1=0;
int somma_2=0;
int num_rand;
srand((int)time(NULL));
num_rand=rand()%2;
for(j=0;j<11;j++)
{
pesi_1[j]=x[squad_1][j].peso;///Riempio gli array dei pesi dei giocatori.
pesi_2[j]=x[squad_2][j].peso;
somma_1 += pesi_1[j];///Sommo tutti i pesi dei giocatori delle 2 squadre.
somma_2 += pesi_2[j];
///printf("Peso giocatore numero %d della squadra %d = %d\nPeso giocatore numero %d della squadra %d = %d\n",j+1,squad_1,pesi_1[j],j+1,squad_2,pesi_2[j]);
}
printf("Somma pesi squadra %d = %d\nSomma pesi squadra %d = %d\n\n",squad_1,somma_1,squad_2,somma_2);
if(somma_1*num_rand<somma_2*num_rand)
{
///printf("La squadra %d ha passato il turno.\nLa squadra %d e' stata eliminata.",squad_2,squad_1);
return squad_2;
}else
{
///printf("La squadra %d ha passato il turno.\nLa squadra %d e' stata eliminata.\n\n\n\n",squad_1,squad_2);
return squad_1;
}
}
I parametri squad_1 e squad_2 servono a farmi ritornare il "numero" della squadra che vince da usare nella function torneo.
Questa è la struct giocatore:
struct giocatore {
char nome[30];
char cognome[30];
char ruolo_[30];
int peso;
int n_maglia;
};typedef struct giocatore Giocatore;
Il problema sorge quando chiamo squadra_vincente nella function torneo:
void torneo(Giocatore x[100][100]) ///Function per simulare il torneo.
{
srand((int)time(NULL));
int random_squadra, y=0;
int prima_vittoria=0,seconda_vittoria=0,terza_vittoria=0,quarta_vittoria=0;
int numeri_casuali[8]={0,1,2,3,4,5,6,7};
random_squadra=rand()%11;
printf("\n\n\nSE DESIDERI INIZIARE IL TORNEO PREMI 1.\tSE DESIDERI USCIRE PREMI 0\n\n");
scanf("%d",&y);
for(i=0;i<7;i++)
{
do
{
j=rand()%8;
}while(i==j);
scambia(&numeri_casuali[i], &numeri_casuali[j]);
}
if(y==1)
{
printf("\t\t\tQUARTI DI FINALE\n\n");
printf("\t\t\tSquadra %d vs Squadra %d\n\t\t\tSquadra %d vs Squadra %d\n\t\t\tSquadra %d vs Squadra %d\n\t\t\tSquadra %d vs Squadra %d\n",numeri_casuali[0]+1,numeri_casuali[1]+1,numeri_casuali[2]+1,numeri_casuali[3]+1,numeri_casuali[4]+1,numeri_casuali[5]+1,numeri_casuali[6]+1,numeri_casuali[7]+1);
printf("Prima partita = Squadra %d vs Squadra %d\n",numeri_casuali[0]+1,numeri_casuali[1]+1);
printf("Seconda partita = Squadra %d vs Squadra %d\n",numeri_casuali[2]+1,numeri_casuali[3]+1);
printf("Terza partita = Squadra %d vs Squadra %d\n",numeri_casuali[4]+1,numeri_casuali[5]+1);
printf("Quarta partita = Squadra %d vs Squadra %d\n",numeri_casuali[6]+1,numeri_casuali[7]+1);
prima_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[0],numeri_casuali[1]);
seconda_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[2],numeri_casuali[3]);
terza_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[4],numeri_casuali[5]);
quarta_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[6],numeri_casuali[7]);
}else
{
exit(0);
}
y=0;
I due errori sono: -expected expression before 'Giocatore' -too few arguments to funtion 'squadra_vincente' entrambi dove stanno prima_vittoria ecc.
Grazie mille per la vostra attenzione e buona programmazione a tutti!
Vi posto qui tutto il codice:
struct giocatore {
char nome[30];
char cognome[30];
char ruolo_[30];
int peso;
int n_maglia;
};typedef struct giocatore Giocatore;
int i,j; ///Globali
char ruoli [30][30]={"Portiere","Difensore","Terzino","Centrocampista","Attaccante","Ala destra","Ala sinistra","Regista","Centrocampista offensivo"};
char cognomi [30][30]={"Ciaramella","Giunta","Lanza","Ronaldo","Pele'","Maradona","Di Lorenzo","Barone","Gullit","Messi","Ricciardi","Hamilton","Vettel",};
char nomi[30][30]={"30_in_prog","Mose'","Jesus","Hulk","Thor","Davide","Matteo","Dario","Simone","Luigi","Adriano","Giulio","Angelo","Agostino","Michele","Gigi","Alfonso"};
///Prototipi
void peso_giocatori(Giocatore x[][100]);
void nome_cognome(Giocatore x[][100]);
void stampa_squadre(Giocatore x[][100]);
void n_maglia(Giocatore x[][100]);
void ruolo_giocatore(Giocatore x[][100]);
void inizializza_3_squadre(Giocatore x[][100]);
void torneo(Giocatore x[][100]);
int squadra_vincente(Giocatore x[][100],int,int);
void scambia(int *,int *);
/// Funzioni
void scambia (int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void peso_giocatori(Giocatore x[100][100])
{
for(i=0;i<5;i++)
{
for(j=0;j<11;j++)
x[i][j].peso = 40+rand()%60;
}
}
void nome_cognome(Giocatore x[100][100])
{
int random_nome,random_cognome;
srand((int)time(NULL));
for(i=0;i<5;i++)
{
for(j=0;j<11;j++)
{
random_nome=rand()%17;
random_cognome=rand()%13;
strcpy(x[i][j].nome,nomi[random_nome]); ///aggiungere cognomi
strcpy(x[i][j].cognome,cognomi[random_cognome]);
}
}
}
void stampa_squadre(Giocatore x[100][100])
{
int scelta;
do
{
printf("SCEGLIERE IL NUMERO DELLA SQUADRA CHE TI VERRA' ASSEGNATA: (8 squadre)\n");
scanf("%d",&scelta);
switch (scelta)
{
case 1: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
case 2: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
case 3: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
case 4: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
case 5: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
case 6: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
case 7: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
case 8: for(j=0;j<11;j++)
{
printf("NOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].nome);
printf("COGNOME GIOCATORE %d = %s\n",j+1,x[scelta-1][j].cognome);
printf("PESO GIOCATORE %d = %d\n",j+1,x[scelta-1][j].peso);
printf("NUMERO MAGLIA = %d\n",x[scelta-1][j].n_maglia);
printf("RUOLO GIOCATORE = %s\n",x[scelta-1][j].ruolo_);
printf("--------------------------------------------\n");
}break;
default: printf("NUMERO SELEZIONATO ERRATO, RIPROVARE.\n\n");
}
}while(scelta<1||scelta>8);
}
void n_maglia(Giocatore x[100][100]) ///Function per assegnare casualmente un numero di maglia.
{
for(i=0;i<5;i++)
{
for(j=0;j<11;j++)
x[i][j].n_maglia=1+rand()%10;
}
}
void ruolo_giocatore (Giocatore x[100][100]) ///Function per assegnare casualmente un ruolo.
{
int random_ruolo;
for(i=0;i<5;i++)
{
for(j=0;j<11;j++)
{
random_ruolo=rand()%8;
strcpy(x[i][j].ruolo_,ruoli[random_ruolo]);
}
}
}
void inizializza_3_squadre(Giocatore x[100][100]) ///Inizializzo le 3 squadre non casuali.
{
strcpy(x[5][0].nome,"Samir");
strcpy(x[5][0].cognome,"Handanovic");
strcpy(x[5][0].ruolo_,"Portiere");
x[5][0].peso=80;
x[5][0].n_maglia=1;
strcpy(x[5][1].nome,"Joao");
strcpy(x[5][1].cognome,"Miranda");
strcpy(x[5][1].ruolo_,"Difensore");
x[5][1].peso=45;
x[5][1].n_maglia=25;
strcpy(x[5][2].nome,"Milan");
strcpy(x[5][2].cognome,"Skriniar");
strcpy(x[5][2].ruolo_,"Difensore");
x[5][2].peso=85;
x[5][2].n_maglia=37;
strcpy(x[5][3].nome,"Danilo");
strcpy(x[5][3].cognome,"D'Ambrosio");
strcpy(x[5][3].ruolo_,"Terzino");
x[5][3].peso=73;
x[5][3].n_maglia=33;
strcpy(x[5][4].nome,"Andrea");
strcpy(x[5][4].cognome,"Ranocchia");
strcpy(x[5][4].ruolo_,"Difensore");
x[5][4].peso=55;
x[5][4].n_maglia=13;
strcpy(x[5][5].nome,"Roberto");
strcpy(x[5][5].cognome,"Gagliardini");
strcpy(x[5][5].ruolo_,"Centrocampista");
x[5][5].peso=81;
x[5][5].n_maglia=5;
strcpy(x[5][6].nome,"Radja");
strcpy(x[5][6].cognome,"Nainggolan");
strcpy(x[5][6].ruolo_,"Centrocampista offensivo");
x[5][6].peso=80;
x[5][6].n_maglia=14;
strcpy(x[5][7].nome,"Marcelo");
strcpy(x[5][7].cognome,"Brozovic");
strcpy(x[5][7].ruolo_,"Centrocampista");
x[5][7].peso=77;
x[5][7].n_maglia=77;
strcpy(x[5][8].nome,"Matias");
strcpy(x[5][8].cognome,"Vecino");
strcpy(x[5][8].ruolo_,"Centrocampista");
x[5][8].peso=85;
x[5][8].n_maglia=11;
strcpy(x[5][9].nome,"Lautaro");
strcpy(x[5][9].cognome,"Martinez");
strcpy(x[5][9].ruolo_,"Attaccante");
x[5][9].peso=53;
x[5][9].n_maglia=10;
strcpy(x[5][10].nome,"Mauro");
strcpy(x[5][10].cognome,"Icardi");
strcpy(x[5][10].ruolo_,"Attaccante");
x[5][10].peso=82;
x[5][10].n_maglia=9;
strcpy(x[6][0].nome,"Pepe");
strcpy(x[6][0].cognome,"Reina");
strcpy(x[6][0].ruolo_,"Portiere");
x[6][0].peso=40;
x[6][0].n_maglia=25;
strcpy(x[6][1].nome,"Raul");
strcpy(x[6][1].cognome,"Albiol");
strcpy(x[6][1].ruolo_,"Difensore");
x[6][1].peso=76;
x[6][1].n_maglia=33;
strcpy(x[6][2].nome,"Vlad");
strcpy(x[6][2].cognome,"Chiriches");
strcpy(x[6][2].ruolo_,"Difensore");
x[6][2].peso=65;
x[6][2].n_maglia=21;
strcpy(x[6][3].nome,"Kalidou");
strcpy(x[6][3].cognome,"Koulibaly");
strcpy(x[6][3].ruolo_,"Difensore");
x[6][3].peso=95;
x[6][3].n_maglia=26;
strcpy(x[6][4].nome,"Faozi");
strcpy(x[6][4].cognome,"Ghoulam");
strcpy(x[6][4].ruolo_,"Terzino");
x[6][4].peso=64;
x[6][4].n_maglia=31;
strcpy(x[6][5].nome,"Marek");
strcpy(x[6][5].cognome,"Hamsik");
strcpy(x[6][5].ruolo_,"Centrocampista");
x[6][5].peso=81;
x[6][5].n_maglia=17;
strcpy(x[6][6].nome,"Allan");
strcpy(x[6][6].cognome,"Allan");
strcpy(x[6][6].ruolo_,"Centrocampista offensivo");
x[6][6].peso=46;
x[6][6].n_maglia=5;
strcpy(x[6][7].nome,"Piotr");
strcpy(x[6][7].cognome,"Zielinsky");
strcpy(x[6][7].ruolo_,"Centrocampista");
x[6][7].peso=69;
x[6][7].n_maglia=20;
strcpy(x[6][8].nome,"Marko");
strcpy(x[6][8].cognome,"Rog");
strcpy(x[6][8].ruolo_,"Centrocampista");
x[6][8].peso=65;
x[6][8].n_maglia=30;
strcpy(x[6][9].nome,"Lorenzo");
strcpy(x[6][9].cognome,"Insigne");
strcpy(x[6][9].ruolo_,"Ala");
x[6][9].peso=66;
x[6][9].n_maglia=24;
strcpy(x[6][10].nome,"Dries");
strcpy(x[6][10].cognome,"Mertens");
strcpy(x[6][10].ruolo_,"Attaccante");
x[6][10].peso=59;
x[6][10].n_maglia=14;
strcpy(x[7][0].nome,"Gianluigi");
strcpy(x[7][0].cognome,"Buffon");
strcpy(x[7][0].ruolo_,"Portiere");
x[7][0].peso=73;
x[7][0].n_maglia=1;
strcpy(x[7][1].nome,"Giorgio");
strcpy(x[7][1].cognome,"Chiellini");
strcpy(x[7][1].ruolo_,"Difensore");
x[7][1].peso=58;
x[7][1].n_maglia=3;
strcpy(x[7][2].nome,"Medhi");
strcpy(x[7][2].cognome,"Benatia");
strcpy(x[7][2].ruolo_,"Difensore");
x[7][2].peso=82;
x[7][2].n_maglia=4;
strcpy(x[7][3].nome,"Lobo Silva");
strcpy(x[7][3].cognome,"Alex Sandro");
strcpy(x[7][3].ruolo_,"Terzino");
x[7][3].peso=43;
x[7][3].n_maglia=33;
strcpy(x[7][4].nome,"Stephan");
strcpy(x[7][4].cognome,"Lichsteiner");
strcpy(x[7][4].ruolo_,"Terzino");
x[7][4].peso=70;
x[7][4].n_maglia=26;
strcpy(x[7][5].nome,"Miralem");
strcpy(x[7][5].cognome,"Pjanic");
strcpy(x[7][5].ruolo_,"Centrocampista");
x[7][5].peso=48;
x[7][5].n_maglia=5;
strcpy(x[7][6].nome,"Sami");
strcpy(x[7][6].cognome,"Khedira");
strcpy(x[7][6].ruolo_,"Centrocampista");
x[7][6].peso=79;
x[7][6].n_maglia=6;
strcpy(x[7][7].nome,"Claudio");
strcpy(x[7][7].cognome,"Marchisio");
strcpy(x[7][7].ruolo_,"Centrocampista");
x[7][7].peso=53;
x[7][7].n_maglia=8;
strcpy(x[7][8].nome,"Blaise");
strcpy(x[7][8].cognome,"Matuidi");
strcpy(x[7][8].ruolo_,"Centrocampista");
x[7][8].peso=80;
x[7][8].n_maglia=14;
strcpy(x[7][9].nome,"Gonzalo");
strcpy(x[7][9].cognome,"Higuain");
strcpy(x[7][9].ruolo_,"Attaccante");
x[7][9].peso=90;
x[7][9].n_maglia=9;
strcpy(x[7][10].nome,"Paulo");
strcpy(x[7][10].cognome,"Dybala");
strcpy(x[7][10].ruolo_,"Attaccante");
x[7][10].peso=60;
x[7][10].n_maglia=10;
}
int squadra_vincente(Giocatore x[100][100], int squad_1, int squad_2)
{
int pesi_1[20];
int pesi_2[20];
int somma_1=0;
int somma_2=0;
int num_rand;
srand((int)time(NULL));
num_rand=rand()%2;
for(j=0;j<11;j++)
{
pesi_1[j]=x[squad_1][j].peso;///Riempio gli array dei pesi dei giocatori.
pesi_2[j]=x[squad_2][j].peso;
somma_1 += pesi_1[j];///Sommo tutti i pesi dei giocatori delle 2 squadre.
somma_2 += pesi_2[j];
///printf("Peso giocatore numero %d della squadra %d = %d\nPeso giocatore numero %d della squadra %d = %d\n",j+1,squad_1,pesi_1[j],j+1,squad_2,pesi_2[j]);
}
printf("Somma pesi squadra %d = %d\nSomma pesi squadra %d = %d\n\n",squad_1,somma_1,squad_2,somma_2);
if(somma_1*num_rand<somma_2*num_rand)
{
///printf("La squadra %d ha passato il turno.\nLa squadra %d e' stata eliminata.",squad_2,squad_1);
return squad_2;
}else
{
///printf("La squadra %d ha passato il turno.\nLa squadra %d e' stata eliminata.\n\n\n\n",squad_1,squad_2);
return squad_1;
}
}
void torneo(Giocatore x[100][100]) ///Function per simulare il torneo.
{
srand((int)time(NULL));
int random_squadra, y=0;
int prima_vittoria=0,seconda_vittoria=0,terza_vittoria=0,quarta_vittoria=0;
int numeri_casuali[8]={0,1,2,3,4,5,6,7};
random_squadra=rand()%11;
printf("\n\n\nSE DESIDERI INIZIARE IL TORNEO PREMI 1.\tSE DESIDERI USCIRE PREMI 0\n\n");
scanf("%d",&y);
for(i=0;i<7;i++)
{
do
{
j=rand()%8;
}while(i==j);
scambia(&numeri_casuali[i], &numeri_casuali[j]);
}
if(y==1)
{
printf("\t\t\tQUARTI DI FINALE\n\n");
printf("\t\t\tSquadra %d vs Squadra %d\n\t\t\tSquadra %d vs Squadra %d\n\t\t\tSquadra %d vs Squadra %d\n\t\t\tSquadra %d vs Squadra %d\n",numeri_casuali[0]+1,numeri_casuali[1]+1,numeri_casuali[2]+1,numeri_casuali[3]+1,numeri_casuali[4]+1,numeri_casuali[5]+1,numeri_casuali[6]+1,numeri_casuali[7]+1);
printf("Prima partita = Squadra %d vs Squadra %d\n",numeri_casuali[0]+1,numeri_casuali[1]+1);
printf("Seconda partita = Squadra %d vs Squadra %d\n",numeri_casuali[2]+1,numeri_casuali[3]+1);
printf("Terza partita = Squadra %d vs Squadra %d\n",numeri_casuali[4]+1,numeri_casuali[5]+1);
printf("Quarta partita = Squadra %d vs Squadra %d\n",numeri_casuali[6]+1,numeri_casuali[7]+1);
prima_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[0],numeri_casuali[1]);
seconda_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[2],numeri_casuali[3]);
terza_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[4],numeri_casuali[5]);
quarta_vittoria=squadra_vincente(Giocatore x[100][100],numeri_casuali[6],numeri_casuali[7]);
}else
{
exit(0);
}
y=0;