Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Creare un calendario con 20 squadre (string random) in c++

    Salve a tutti io non riesco a fare l'esercizio che mi ha dato la professoressa di laborario...
    Dovrei utilizzare le funzioni void e struct

    Realizzare un programma per gestire il campionato di calcio di Serie A. -Inserire squadre
    -Calendario andata/ritorno
    -Inserire i risulato di ciascuna partita
    -Aggiornamento della classifica in automatico (nella classifica ci devono essere i punti, le partite vinte, le partite perse
    le partite pareggiate, gol fatti e gol subiti)

    CODICE FATTO DA ME
    #include <iostream>
    #include <string>
    using namespace std;
    struct squadre
    {
    string squadra;
    };
    struct classifica
    {
    int gf;
    int gs;
    int v;
    int p;
    int s;
    };
    struct reti
    {
    int gol;
    };
    void inserimento(squadre a[], clas b[])
    {
    cout<<"20 squadre"<<endl;
    for(int i=0;i<20;i++)
    {
    cout<<i+1<<"\370 squadra: ";
    cin>>a[i].squadra;
    b[i].gf=0;


    }
    }
    void CLASSIFICA(squadre a[])
    {
    for(int i=0;i<20;i++)
    {

    int main()
    {
    int scelta;
    squadre squ[20];
    classifica clas[1000];
    inserimento(squ, clas);
    system("CLS");
    cout<<"1--> Guarda la classifica"<<endl;
    cout<<"2--> Aggiornamento delle partite"<<endl;


    /*cout<<"Scegli una scelta: ";
    cin>>scelta;
    switch(scelta);
    {
    case 1:

    break;

    case 2:

    break;

    case 3:

    break;
    }
    */

    system("PAUSE");
    return 0;
    }

    Ho lasciato il codice perché non so come posso continuare... non riesco a come generare le string random perché per esempio.. nella prima giornata
    Roma-Lazio
    Milan-Juve

    seconda giornata
    Lazio-Juve
    Roma-Milan

    senza che gli accoppiamenti siano ripetitivi tipo...

    seconda giornata

    Juve-Milan
    Lazio-Roma

    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Quello che ti consiglio di leggere, indipendentemente dal tuo algoritmo che non ho controllato, affinchè tu ne possa creare uno degno di nota è l'algoritmo di Berger.
    E' usato per generare proprio calendari di partite senza però tener conto dell'alternanza di una partita in casa e di una fuori casa. Per te potrebbe essere una buona base da cui partire e sviluppare il tuo algoritmo.

    PS per implementare un codice nella discussione utilizza il tag [ CODE ]

  3. #3
    Quote Originariamente inviata da Eduadie Visualizza il messaggio
    Quello che ti consiglio di leggere, indipendentemente dal tuo algoritmo che non ho controllato, affinchè tu ne possa creare uno degno di nota è l'algoritmo di Berger.
    E' usato per generare proprio calendari di partite senza però tener conto dell'alternanza di una partita in casa e di una fuori casa. Per te potrebbe essere una buona base da cui partire e sviluppare il tuo algoritmo.

    PS per implementare un codice nella discussione utilizza il tag [ CODE ]
    Grazie per l'implemento del codice nella discussione..
    Volevo dirti che Berger è fatto apposta solo per JAVA perché io utilizzo C++ ... grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    C'è l'esempio di implementazione con Java, sta a te implementarlo in C++ ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Tra parentesi, su wikipedia fanno sempre le cose a metà, o anche meno.
    Il cosiddetto "algoritmo di Berger" in realtà era solo una serie di tabelle precompilate, per vari numeri di giocatori. Peraltro, anche se ne porta il nome, il metodo non è neppure stato inventato da tale Johann Nepomuk Berger, "noto" scacchista austriaco ottcentesco, ma da Richard Schurig, altro illustrissimo sconosciuto che comunque ha pubblicato tali tabelle nel 1886 sul Deutsche Schachzeitung. Berger le ha semplicemente riproposte qualche anno più tardi, nel 1892/93, nel suo Schachjahrbucher. Così riporta la vera e propria Bibbia della storia scacchistica: "The Oxford Companion to Chess", Oxford University Press, ISBN 0-19-866164-9.

    In ogni caso, si tratta di un metodo concepito in un'epoca anni luce lontana dall'invenzione di linguaggi come Java e C++, quindi è semplicemente una bestemmia affermare che sia "fatto apposta" per questo o per quello...
    Si tratta di un algoritmo semplicissimo e universale, basato su un criterio cardine della matematica discreta, che possiamo facilmente fare risalire a Gauss: il folding di un elenco, ovvero l'accostamento dei due estremi di un intervallo, in modo realizzare una "coda circolare" da un ordine lineare.

    codice:
      1  2  3 ... 50
    100 99 98 ... 51
    L'ovvia interpretazione della lista così "ripiegata" è che 1 "incontra" 100, 2 "incontra" 99, eccetera.
    Tra l'altro le descrizioni algoritmiche normalmente in circolazione fanno riferimento, per ben che vada, ad un singolo criterio fisso adottato nella compilazione delle tabelle: in realtà esistono delle facilissime generalizzazioni matematiche che possono rendere meno predicibile, e quindi più stocastico, il risultante schema di torneo. Tenendo infatti fissa una qualsiasi delle posizioni, si fanno ad ogni iterazione ruotare tutte le altre, a destra o a sinistra, di un numero di posizioni qualsiasi, purché sia relativamente primo al numero totale di elementi. Quindi lo shift a destra/sinistra di una singola posizione, usato in origine dagli scacchisti ottocenteschi, non è che un caso particolare dell'algoritmo generalizzato.
    Last, but not least, nessun obbligo è dato sull'ordine iniziale, e quindi è possibile partire da una permutazione pseudocasuale (vedi shuffle Knuth-Fisher-Yates, o meglio ancora il recente Myrvold-Ruskey) della lista dei partecipanti, applicando poi l'algoritmo per la generazione del calendario.

    Sfortunatamente non ho tempo di dilungarmi ulteriormente, ma qui vi sono già sufficienti elementi per costruire la migliore implementazione possibile di un simile algoritmo, in un qualsivoglia linguaggio.
    Ultima modifica di M.A.W. 1968; 07-11-2014 a 23:25
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  6. #6
    C'è ragazzi... mi state aiutando molto ma putroppo io non riesco a capire solo perché questo esercizio è troppo complesso

    cioè... mi potete dire passo e passo almeno posso capire meglio, grazie. Siete gentili

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    4
    Anche se la domanda è vecchia ecco un esempio in Java che usa l'algoritmo di Berger:

    codice:
    public void AlgoritmoDiBerger(ArrayList<String> ) {
    
            String[] squadre = mTeams.toArray(new String[mTeams.size()]);
            int numero_squadre = squadre.length;
            int giornate = numero_squadre - 1;
    
            /* crea gli array per le due liste in casa e fuori */
            String[] casa = new String[numero_squadre / 2];
            String[] trasferta = new String[numero_squadre / 2];
    
            for (int i = 0; i < numero_squadre / 2; i++) {
                casa[i] = squadre[i];
                trasferta[i] = squadre[numero_squadre - 1 - i];
            }
    
            for (int i = 0; i < giornate; i++) {
                /* stampa le partite di questa giornata */
                System.out.printf("%d^ Giornata\n", i + 1);
    
                /* alterna le partite in casa e fuori */
                if (i % 2 == 0) {
                    for (int j = 0; j < numero_squadre / 2; j++) {
                        System.out.printf("%d  %s - %s\n", j + 1, trasferta[j],
                                casa[j]);
                                            
                    }
                } else {
                    for (int j = 0; j < numero_squadre / 2; j++) {
                        System.out.printf("%d  %s - %s\n", j + 1, casa[j],
                                trasferta[j]);
                        
                    }
    
                }
    
                
                String pivot = casa[0];
    
                String riporto = trasferta[trasferta.length - 1];
    
                trasferta = shiftRight(trasferta, casa[1]);
    
                casa = shiftLeft(casa, riporto);
    
                casa[0] = pivot;
            }
        }
    
        private String[] shiftLeft(String[] data, String add) {
            String[] temp = new String[data.length];
            for (int i = 0; i < data.length-1; i++) {
                temp[i] = data[i + 1];
            }
            temp[data.length - 1] = add;
            return temp;
        }
    
        private String[] shiftRight(String[] data, String add) {
            String[] temp = new String[data.length];
            for (int i = 1; i < data.length; i++) {
                temp[i] = data[i - 1];
            }
            temp[0] = add;
            return temp;
        }
    Per le giornate di ritono mi sembra abbastanza ovvio...
    Non si deve far altro che invertire le 2 squadre ed il numero della giornata sarà (giornate + i + 1)

    Spero torni utile :-)

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.