[C] Progetto: Torneo di calcetto

di il
9 risposte

[C] Progetto: Torneo di calcetto

Salve ragazzi,il 4 marzo ho l'esame di programmazione I e sono un po nel pallone, devo consegnare il progetto (di cui ho scritto la traccia giù) entro il 23 febbraio, potete gentilmente guidarmi passo passo nella creazione del codice?
Si supponga di gestire un torneo di calcio tra 8 squadre.  Inizialmente vengono considerati 88 giocatori identificati dal Cognome e Nome (anche solo lettere casuali). Si suppone che ogni giocatore possa assumere qualsiasi ruolo in campo. Ad ogni giocatore viene assegnato un numero casuale nell’intervallo [0,10].  In maniera casuale vengono create 5 squadre.  Il torneo viene simulato facendo scontrare due squadre alla volta. Ogni squadra vincitrice si scontrerà con la squadra vincitrice di un’altra partita fino ad arrivare ad una singola squadra vincitrice.  Una partita viene vinta da una squadra secondo la seguente regola ? la somma dei pesi di una squadra moltiplicata per un numero casuale nell’intervallo [0, 1] è maggiore della corrispondente operazione sull’altra squadra ? il processo si ripete finché non si ottiene un vincitore Simulare ogni singolo torneo usando un approccio divide-et-impera ricorsivo. Simulare 100 volte il torneo e ritornare l’elenco completo delle squadre in ordine decrescente di vincite. Si stampino i nomi dei giocatori della squadra che ha vinto di più.
avevo pensato di iniziare da due struct separate:
typedef struct Giocatore Giocatore;
struct Giocatore {
    char nome[MAX_LEN_NOMI];
    int peso;
};

typedef struct Squadra Squadra;
struct Squadra {
    Giocatore giocatori[11];
    int somma_pesi;
    int vittorie;
};

9 Risposte

  • Re: [C] Progetto: Torneo di calcetto

    Guidarti passo passo?

    Questo è un forum non un insegnante privato ... molti fanno questa confusione ...

    Si può dare una mano a comprendere parti di codice, indicazioni su errori o problemi legati al codice, non fare tutto il programma!
  • Re: [C] Progetto: Torneo di calcetto

    Bene,ho provato a scrivere una parte di codice ma non riesco a capire dove sbaglio:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MAX_LEN_NOMI 1
    
    void main ()
    {
    srand(time(NULL));
    typedef struct Giocatore Giocatore;
    struct Giocatore {
        char nome 1;
        int peso;
    };
    typedef struct Squadra Squadra;
    struct Squadra {
        Giocatore giocatori[11];
        int somma_pesi;
        int vittorie;
    };
    int nc_squadre,1,Giocatore;
        
    
    nc_squadre= 1 + rand()% 8 
    
    float r1 = rand_float();
    float r2 = rand_float();
    if (r1 * somme_pesi[s1] < r2 * somme_pesi[s2]) 
    {
        printf(" ha vinto la squadra 2");
    } 
    else 
    {
        printf(" ha vinto la squadra 1");
    }
    
    float r3 = rand_float();
    float r4 = rand_float();
    if (r3 * somme_pesi[s3] < r4 * somme_pesi[s4]) {
        printf( "ha vinto la squadra 4");
    } else {
        printf(" ha vinto la squadra 3");
    }
    
    float r5 = rand_float();
    float r6 = rand_float();
    if (r5 * somme_pesi[s5] < r6 * somme_pesi[s6]) 
    {
        printf(" ha vinto la squadra 6");
    }
     else 
    {
        printf(" ha vinto la squadra 5");
    }
    
    float r7 = rand_float();
    float r8 = rand_float();
    if (r7 * somme_pesi[s7] < r8 * somme_pesi[s8]) 
    {
    printf ("ha vinto la squadra 7");
    } 
    else 
    {
    printf ("ha vinto la squadra 8");
    }
    
    int squadre[8] = {0, 1, 2, 3, 4, 5, 6, 7};
    for (i = 8; i > 1; i /= 2) {
        for (j = 0; j < i; j += 2) {
            int vincitore = gioca_partita(j, j+1);
            squadre[j/2] = vincitore;
        }
    }
    
    int squadre[8] = {1, 2, 5, 7, 4, 3, 6, 0};
    for (i = 8; i > 1; i /= 2) {
        for (j = 0; j < i; j += 2) {
            int vincitore = gioca_partita(j, j+1);
            squadre[j/2] = vincitore;
        }
    }
    
    int squadre[5] = {1, 5, 2, 7}
    for (i = 8; i > 1; i /= 2) {
        for (j = 0; j < i; j += 2) {
            int vincitore = gioca_partita(j, j+1);
            squadre[j/2] = vincitore;
        }
    }
    
    int squadre[3] = {1 5}
    for (i = 8; i > 1; i /= 2) {
        for (j = 0; j < i; j += 2) {
            int vincitore = gioca_partita(j, j+1);
            squadre[j/2] = vincitore;
        }
    }
  • Re: [C] Progetto: Torneo di calcetto

    Beh, intanto questo

    char nome 1;

    che vuol dire?
  • Re: [C] Progetto: Torneo di calcetto

    Ho sbagliato, è
    char nome[MAX_LEN_NOMI];
    ovviamente senza il #define nel main
  • Re: [C] Progetto: Torneo di calcetto

    Ragazzi nessuno mi può aiutare?
    Adesso ho questo codice qui:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    /*Simulazione del torneo di calcetto*/
    
    struct _giocatore 
    {
    char cognome[6];
    char nome[6];
    int valore;
    int campo;
    
    };
    typedef struct _giocatore Giocatore;
    
    struct _squadra
    {
       int player[11];
       int valore;
       int numero;
       int numvittoriesquadra;
       
           };
           typedef struct _squadra Squadra;
    
        void visualizza_aI (Squadra *s, int n)
    {
         int i;
         for (i=7;i>=0;i--)
         printf("squadra: n =%d vittorie = %d \n", (s+i)->numero, (s+i)->numvittoriesquadra);
         }
            /*Function di ordinamento*/
            void order_ins (Squadra *s, int n)
    {
         int i,j;
         int el_da_ins;
         int oldNum;
        
         int appog;
         for (i=1;i<n;i++)
         {
             el_da_ins=(s+i)->numvittoriesquadra;
             oldNum= (s + i)->numero;
             j= i-1;
         
         while (j>=0 && el_da_ins < (s+j)->numvittoriesquadra)
         {
               (s+j+1)->numvittoriesquadra = (s+j)->numvittoriesquadra;
               (s+j+1)->numero = (s+j)->numero;
               
               j--;
               }
               (s+j+1)->numvittoriesquadra = el_da_ins;
               (s + j + 1)->numero = oldNum;
               }
    }
    
    int main()
    {
         srand(time(NULL));
        Giocatore array_giocatori[88];    
        Squadra array_squadra[8];
        char alfabeto[]={'a','b','c','d','e','f'};
        char *nomesquadra[8]={"0ZERO","1UNO","2DUE","3TRE","4QUATTRO","5CINQUE","6SEI","7SETTE"};
        int lung_alfabeto=6;
        int i,j,k,q,z,w,u,t,r,s;
         int dimensione=8;    
        int indice;
        int n=88;
        int nc,num;
        int numerocasuale=0;
        int contatore=0;
        int risultato0,risultato1;
        int valoresquadra[8];
        int numvittoriesquadra[8]={0};
        int lung_numvittorie=8;
        int vartemp=0;
        int temp=0;
      
        char stringacas[6]="abcde";
         /* assegnazione nomi (lettere casuali ai giocatori ) */
            for (i=0;i<88;i++)
        {
        array_giocatori[i].valore=rand()%11;
      for (j=0;j<6;j++)
        {
               nc= rand()%lung_alfabeto;
               stringacas[j]=alfabeto[nc];
               array_giocatori[i].nome[j] = stringacas[j];
                          }
               }
              
              
          for (q=0;q<8;q++)
          {
           
              for (u=0;u<11;u++)
              {
              num=rand()%88;
                        array_squadra[q].player[u]= num;
                        }
                        }
                         
                                           
     /* determino i valori delle squadre */        
    for (t=0;t<8;t++)
    {
        array_squadra[t].valore=0;
    }
    
    for (w=0;w<8;w++)
    {
        for (r=0;r<11;r++)
        {
        array_squadra[w].valore += array_giocatori[array_squadra[w].player[r]].valore;
    }
    }
    numerocasuale=rand()%2;
    printf("Inizio Simulazione torneo: Le 8 Squadre, formate da 11 giocatori si scontrano (eliminazione diretta) per determinare la vincitrice \n ");
    printf("\n");
    /* Inserisco gli indici delle squadre nel array squadra */
    for (i=0;i<8;i++)
    {
    array_squadra[i].numero=temp;
    temp++;
    }
    /* alogritmo per lo scontro delle squadre , le squadre vincenti si sfidano fino a determinare un solo vincitore */
    while (dimensione != 1) {
            for ( i = 0; i < dimensione; i += 2) {
                
                       
                Squadra s1 = array_squadra[i + 0];
                Squadra s2 = array_squadra[i + 1];
          
     if ((s1.valore * rand()%2 ) > (s2.valore* rand()%2))
    {
    
    numvittoriesquadra[s1.numero]+=1 ;
    
     printf("valori squadre prima di giocare %s = %d  e %s = %d \n",nomesquadra[array_squadra[i].numero],s1.valore ,nomesquadra[array_squadra[i+1].numero] , s2.valore);
     printf("ha vinto la squadra %s \n", nomesquadra[array_squadra[i].numero] );
     printf(" \n");
     array_squadra[i/2]=array_squadra[i];
    
    }
    
    else
    {
    numvittoriesquadra[s2.numero]++ ;
    printf("valori squadre prima di giocare %s = %d  e %s = %d \n",nomesquadra[array_squadra[i].numero],s1.valore ,nomesquadra[array_squadra[i+1].numero] , s2.valore);
    printf("ha vinto la squadra %s \n", nomesquadra[array_squadra[i+1].numero]);
    printf(" \n");
    array_squadra[i/2]=array_squadra[i+1];
    }
    }
    dimensione  = (dimensione / 2);
    
    }
    
    for(i = 0; i <8; i++)
     { array_squadra[i].numvittoriesquadra = numvittoriesquadra[i];}
    
    for (i=0;i<8;i++)
    {
    array_squadra[i].numero=vartemp;
    vartemp++;
    }
    printf("num vittorie squadre non ordinato \n");
    printf(" \n");
    /* chiamata alla function ordinamento (ordino le vittorie in ordine crescente) passando come paramentro un tipo strutturato 
    affinchè possa ordinare anche il nome relativo alla squadra */
    visualizza_aI(array_squadra,lung_numvittorie);
    order_ins(array_squadra,lung_numvittorie);
    printf("Squadre In ordine decrescente di vittoria \n");
    printf(" \n");
    visualizza_aI(array_squadra,lung_numvittorie);
    
       
      system("PAUSE");	
      return 0;
    }
    
    come stampo i nomi dei giocatori che hanno vinto di più?
  • Re: [C] Progetto: Torneo di calcetto

    1.Manca il pareggio
    if ((s1.valore * rand()%2 ) > (s2.valore* rand()%2))
    2."simulare 100 volte il torneo"

    Giocatori che hanno vinto di più? Intendi i giocatori della squadra vincitrice del torneo?
    Se e' così, allora la squadra vincitrice e' array_squadra[7] (ovviamente dopo aver orinato l'array)
  • Re: [C] Progetto: Torneo di calcetto

    Ok il punto 1 l'ho risolto,ma per simulare il torneo 100 volte come faccio? cioè in realtà non ho capito nemmeno in che senso
  • Re: [C] Progetto: Torneo di calcetto

    Io ho capito di ripetere lo svolgimento del torneo n volte

    Un modo è:
    Nella struttura della squadra inserisci un campo (int o short) che è inizializzato a 0.
    Con un ciclo for () ripeti lo svolgimento del torneo n volte e a ogni torneo aumenti di 1 questo campo della squadra vincitrice.

    Se vuoi potresti anche provare a organizzare il programma in funzioni esterne al main (), così è più leggibile ed è facile trovare i bug.
  • Re: [C] Progetto: Torneo di calcetto

    ale99 ha scritto:


    Io ho capito di ripetere lo svolgimento del torneo n volte

    Un modo è:
    Nella struttura della squadra inserisci un campo (int o short) che è inizializzato a 0.
    Con un ciclo for () ripeti lo svolgimento del torneo n volte e a ogni torneo aumenti di 1 questo campo della squadra vincitrice.

    Se vuoi potresti anche provare a organizzare il programma in funzioni esterne al main (), così è più leggibile ed è facile trovare i bug.
    Non riesco a capire quale parte del codice modificare, ho provato in varie parti ma mi da sempre errore, chi mi da una mano?
Devi accedere o registrarti per scrivere nel forum
9 risposte