Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [vb6] - generazione accoppiamenti squadre

    ragazzi mi sto imbattendo nella generazione automatica di un calendario di calcio
    mi spiego meglio:

    date tot squadre devo generare i possibili incontri e suddivederli per giornata tenendo conto che
    - una squadra non può giocare due o più volte nella stessa giornata
    - se il numero di squadre è dispari devo considerare che ogni giornata una squadra deve riposare

    esempio:
    ho 5 squadre ( 1 , 2 , 3 , 4 , 5 )

    1° giornata
    1 vs 2
    3 vs 4
    5 riposa

    2° giornata
    1 vs 3
    2 vs 5
    4 riposa

    3° giornata
    1 vs 5
    2 vs 4
    3 riposa

    4° giornata
    1 vs 4
    3 vs 5
    2 riposa

    5° giornata
    2 vs 3
    4 vs 5
    1 riposa

    ---
    avete qualche idea?

  2. #2
    Intanto ti costruisci le 2 tabelle con squadre e calendario.

    [Squadre]
    id contatore
    Nome string

    [Calendario]
    Data date
    idSquadra1 numerico
    idSquadra2 numerico


    Poi per generare il calendario devi fare un ciclo dove per ogni giornata:
    - Selezioni una squadra a caso
    - Selezioni la seconda squadra tra quelle con qui non ha ancora giocato (fai la verifica sulla tabella calendario)
    - Se alla fine del giro avanza una squadra questa riposerà.

  3. #3
    Originariamente inviato da DeBe99
    Intanto ti costruisci le 2 tabelle con squadre e calendario.

    [Squadre]
    id contatore
    Nome string

    [Calendario]
    Data date
    idSquadra1 numerico
    idSquadra2 numerico


    Poi per generare il calendario devi fare un ciclo dove per ogni giornata:
    - Selezioni una squadra a caso
    - Selezioni la seconda squadra tra quelle con qui non ha ancora giocato (fai la verifica sulla tabella calendario)
    - Se alla fine del giro avanza una squadra questa riposerà.

    in che senso
    - Selezioni la seconda squadra tra quelle con qui non ha ancora giocato (fai la verifica sulla tabella calendario)

  4. #4
    Nel senso che la seconda squadra dovrai selezionarla tra tutte le squadre con cui deve anchora giocare. Prendendo come esempio il tuo calendario, nella 3° giornata '1' può giocare con '4' o con '5', in quanto con le altre squadre ha già giocato.

    EX:
    IDSQ è l'id della prima squadra (estratto a caso), la seconda suqadra la estrai a caso da una query del genere

    SELECT id from Squadre WHERE id not in (SELECT idSquadra1 FROM Calendario WHERE idSquadra2=IDSQ UNION SELECT idSquadra2 FROM Calendario WHERE idSquadra1=IDSQ)

    ...

  5. #5
    ma io in che senso devo andare?
    scelgo una squadra e poi per quella squadra faccio gli abbinamenti per ogni giornata
    oppure prima devo completare tutta una giornata e poi passare alle altre?

    e poi nella tabella calendario devo anche avere il campo giornata?

  6. #6
    up

  7. #7
    ma io in che senso devo andare?
    scelgo una squadra e poi per quella squadra faccio gli abbinamenti per ogni giornata
    oppure prima devo completare tutta una giornata e poi passare alle altre?
    Io farei gli accoppiamenti per giornata (quindi completi tutta la giornata e poi passi alla successiva).

    e poi nella tabella calendario devo anche avere il campo giornata?
    La giornata la identificavo con la data, però forse è meglio aggiungere il campo giornata, in quanto una stessa giornata può essere distribuita su più data (vedi anticipi e posticipi)


  8. #8
    allora
    codice:
    Call apri_connessione
    Call apri_rsSQUADRE(56)
    rsSQUADRE.MoveFirst
    num_squadre = rsSQUADRE.RecordCount
    ReDim lista_squadre(num_squadre)
    ReDim tmp_array(num_squadre)
    ind = 1
    Do Until rsSQUADRE.EOF
        lista_squadre(ind) = rsSQUADRE("id_squadra")
        ind = ind + 1
        rsSQUADRE.MoveNext
    Loop
    num_giornate = num_squadre - 1
    Conn_Calcetto.Execute "DELETE FROM CALENDARIO_APP"
    Randomize
        For count = 1 To num_giornate
            For count1 = 1 To UBound(lista_squadre) 'Assegno l'arrey ad un arrey temporaneo
                tmp_array(count1) = lista_squadre(count1)
            Next count1
            Do
                Do
                    num_squadra1 = Int((num_squadre * Rnd) + 1)
                    squadra1 = tmp_array(num_squadra1)
                    If (squadra1 <> "") Then
                        tmp_array(num_squadra1) = ""
                        Exit Do
                    End If
                    
                Loop
                
                Do
                    Do
                        num_squadra2 = Int((num_squadre * Rnd) + 1)
                        squadra2 = tmp_array(num_squadra2)
                        If (squadra2 <> "") Then
                            Exit Do
                        End If
                    Loop
                    Call apri_rsCALEN_APP2(squadra1, squadra2) ' controllo se esiste l'incontro squadra1 vs squadra2 e viceversa
                    If rsCALEN_APP2.EOF Or rsCALEN_APP2.BOF Then
                        Conn_Calcetto.Execute _
                            "INSERT INTO CAlendariO_APP( " & _
                            "GIORNATA, SQ_CASA, SQ_FUORI ) " & _
                            "VALUES( " & count & " , " & _
                            Int(squadra1) & " , " & Int(squadra2) & " ) ", dbFailOnError
                        incontro_creato = True
                    Else
                        incontro_creato = False
                    End If
                    Call chiudi_rsCALEN_APP2
                    If (squadra2 <> "") And (incontro_creato = True) Then
                        tmp_array(num_squadra2) = ""
                        Exit Do
                    End If
                Loop
                continue = False
                For count1 = 1 To UBound(tmp_array) 'Controllo che nell'array esistano ancora squadre
                    If tmp_array(count1) <> "" Then continue = True
                Next count1
                If continue = False Then Exit Do
            Loop
    
        Next count
    Call chiudi_connessione
    sembra funzionare
    però a volte va in loop, penso che sia dovuto alla funzione random
    mi puoi dare una mano a capire cosa può essere?

  9. #9
    secondo me dipende da questo pezzo di codice
    codice:
    ...
    If (squadra1 <> "") Then
       tmp_array(num_squadra1) = ""
       Exit Do
    End If
    ...
    Dove in pratica continui il ciclo finchè non trovi una squadra con il nome valorizzato( che quindi deve ancora giocare), con il problema che se c'è solo 1 squadra disponibile devi aspettare di estrarla casualmente.

    Nel caso in qui trovi stringa vuota(squadra che ha già giocato) potresti cercare la prima squadra disponibile nell'array, in modo da limitare il numero di giri necessari per trovare una squadra valida.

    codice:
    ...
    while tmp_array(num_squadra1)=""
       if num_squadra1=ubound(tmp_array) then 
          num_squadra1=0 'se sono alla fine dell'array ritorno all'inizio
       else
          num_suqdra1=num_squadra1+1 'scorro array
       end if
    wend
    squadra1=tmp_array(num_squadra1)
    tmp_array(num_squadra1) = ""
    Exit Do
    ...
    Ovviamente stessa cosa per la squadra2.


  10. #10
    sempre dopo avere estratto il numero random giusto?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.