Ciao, non ho capito come gestisci l'input, dove salvi i dati. Comunque io ti faccio vedere un codice che ho fatto adesso:
**********************************************
#include <stdio.h>
#include <string.h>
#include <windows.h>
/* questa è una strttura dove saranno salvati i dati del candidato dall'input dell'utente */
struct Candidato
{
int tempo; //conterrà il tempo
char nome[120]; //conterrà il nome del candidato
};
int GetVincitore(struct Candidato*, int nblocco);
int main()
{
struct Candidato cnd[9]; //creo un vettori di Candidato ci saranno 9 candidati per 3 gare quindi.
char ris[2]={'Y'}; //serve per sapere se aggiungere candidati per una gara
char buffer[100]; //conterrà le stringhe per l'output
int r=0;
int i=0;//conta il numero di candidati ed è l'indice del vettore cnd
int y=0; //conta i candidati per gara
int cmpt=0;//conterrà il numero di manche
/* l'output del programma */
while ((strcmp(ris,"Y")==0) || (strcmp(ris,"y")==0))
{
while (y<3) //dopo 3 candidati fine della manche
{
printf("%s\n","Inserisci il nome del candidato:");
scanf("%s",cnd.nome); //salva il nome del candidato nel vettore iesimo della struttura cnd
printf("%s\n","Inserisci il tempo:");
scanf("%d",&cnd.tempo); //salva il tempo nel vettore iesimo della struttura cnd
i++;
y++;
}
y=0;
printf("%s","Inserire un nuovo candidato?[Y/N]");//se inserire nuova manche
scanf("%s",ris);
}
cmpt = i/3; //numero di competizioni avrei potuto anche inserire una variabile che si incrementasse per ogni volta che inserivamo una nuova manche(competizione)
sprintf(buffer,"%s%d\n","Le competizioni sono ",cmpt);
printf("%s\n",buffer);
for (int cnt=1;cnt<=cmpt;cnt++)//adesso faccio un ciclo e ottengo il vincitore di ogni manche(competizione)
{
r = GetVincitore(cnd,cnt);
sprintf(buffer,"%s%d%s%s\n","Il vincitore del gruppo ",cnt, " e' ",cnd[r-1].nome); //lo stampo su schermo
printf("%s",buffer);
}
system("pause");
return 1;
}
/* questa funzione estrae il vincitore dalla manche */
int GetVincitore(struct Candidato* cnd,int nblocco)
{
//nblocco è il numero della manche(competizione)
//cnd è il puntatore che punta al primo elemento dell'array creato prima che contiene tutti i dati dei concorrenti
int i;
struct Candidato* p;
/* confronto il primo elemento con il secondo se questo(il primo) è maggiore del secondo verifica se è maggiore anche dell'ultimo e ritorna questo altrimenti verifica il secndo con l'ultimo se il secondo è + piccolo ritorna il secondo altrimenti ritorna il terzo.
Avendo la struttura cosi:
0: gara1 dove 0 è l'indice del vettore della struttura ecc...
1: gara2
2: gara3
----- manche 2
3: gara1
4: gara2
5: gara3
---ecc..
per sapere dal blocco quali elementi confrontare faccio (nblocco-1)*3. Se ad esempio voglio il vincitore del blocco 1 quindi nblocco=1 viene nblocco-1=0*3=0 quindi indice 0 inizio dall'elemento dell'array con indice 0(l'inizio) se voglio il blocco 2 invece (nblocco=2) nblocco-1=1*3=3 quindi elemento terzo dell'array(inizia il confronto dall'elemento 3. Se voglio il vincitore del blocco 3 nblocco=3 viene nblocco-1=2*3=6 quindi parlo dall'elemento con indice 6 ecc...*/
for(i=(nblocco-1)*3;i<((nblocco-1)*3)+3;cnd++)
{
i++;
p=cnd;/*faccio puntare p al successivo di cnd*/
p++;
for(int j=i;i<((nblocco-1)*3)+3;j++,p++)
{
if(cnd->tempo >p->tempo)
break;
if (j+1==((nblocco-1)*3)+3) return i;
}
}
return i;
}
**********************************************
La funzione + importante è appunto GetVincitore
Non è difficile se vuoi te lo spiego meglio...