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

    ASP e algoritmo di Berger

    Ciao a tutti, sto cercando di gestire la creazione di un calendario calcistico in modo automatizzato date N squadre e 38 giornate. Cercando su internet ho visto che la mia soluzione ha un nome: algoritmo di Berger. Il problema è che non ho trovato alcun esempio in ASP ma solo JAVA, qualcuno di voi si è gia cimentato oppure riesce a darmi una mano a trasportare in ASP il seguente codice?

    codice:
    public void AlgoritmoDiBerger(String[] squadre){
     
        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.console().printf("%d^ Giornata\n",i+1);
     
            /* alterna le partite in casa e fuori */
            if (i % 2) {
                for (int j = 0; j < numero_squadre /2 ; j++)
                     System.out.console().printf("%d  %s - %s\n", j+1, trasferta[j], casa[j]); 
            }
            else {
                for (int j = 0; j < numero_squadre /2 ; j++) 
                     System.out.console().printf("%d  %s - %s\n", j+1, casa[j], trasferta[j]); 
            }
     
            // Ruota in gli elementi delle liste, tenendo fisso il primo elemento
            // Salva l'elemento fisso
            String pivot = casa [0];
     
            /* sposta in avanti gli elementi di "trasferta" inserendo 
               all'inizio l'elemento casa[1] e salva l'elemento uscente in "riporto" */
            String riporto = shiftRight(trasferta, casa [1]); 
     
            /* sposta a sinistra gli elementi di "casa" inserendo all'ultimo 
               posto l'elemento "riporto" */
            shiftLeft(casa, riporto);
     
            // ripristina l'elemento fisso
            casa[0] = pivot ;
        } 
    }
    speranzoso, vi ringrazio anticipatamente

  2. #2
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,752

    Re: ASP e algoritmo di Berger

    Originariamente inviato da Naril
    Ciao a tutti, sto cercando di gestire la creazione di un calendario calcistico in modo automatizzato date N squadre e 38 giornate. Cercando su internet ho visto che la mia soluzione ha un nome: algoritmo di Berger. Il problema è che non ho trovato alcun esempio in ASP ma solo JAVA, qualcuno di voi si è gia cimentato oppure riesce a darmi una mano a trasportare in ASP il seguente codice?

    codice:
    public void AlgoritmoDiBerger(String[] squadre){
     
        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.console().printf("%d^ Giornata\n",i+1);
     
            /* alterna le partite in casa e fuori */
            if (i % 2) {
                for (int j = 0; j < numero_squadre /2 ; j++)
                     System.out.console().printf("%d  %s - %s\n", j+1, trasferta[j], casa[j]); 
            }
            else {
                for (int j = 0; j < numero_squadre /2 ; j++) 
                     System.out.console().printf("%d  %s - %s\n", j+1, casa[j], trasferta[j]); 
            }
     
            // Ruota in gli elementi delle liste, tenendo fisso il primo elemento
            // Salva l'elemento fisso
            String pivot = casa [0];
     
            /* sposta in avanti gli elementi di "trasferta" inserendo 
               all'inizio l'elemento casa[1] e salva l'elemento uscente in "riporto" */
            String riporto = shiftRight(trasferta, casa [1]); 
     
            /* sposta a sinistra gli elementi di "casa" inserendo all'ultimo 
               posto l'elemento "riporto" */
            shiftLeft(casa, riporto);
     
            // ripristina l'elemento fisso
            casa[0] = pivot ;
        } 
    }
    speranzoso, vi ringrazio anticipatamente
    deve esserci anche la dichiarazione delle funzioni ShiftLeft e ShiftRight
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  3. #3
    Hai ragione -.-
    ho trovato questo codice che mi sembra molto più completo, ma credo sia in PHP??
    sto cercando di tradurlo in ASP ma continuo ad avere errori su UBound, poi tutti questi array a 3 non sono molto pratico helpme!

    codice:
    dim $lista_squadre[6] = ["a","b","c","d","e","f"]
    dim $campionato = Berger($lista_squadre)
    for $i = 0 to UBound($campionato)-1
           ConsoleWrite($i+1 & "^ Giornata" & @CRLF)
           for $j = 0 to UBound($campionato,2)-1
                   ConsoleWrite($j+1 & " partita: " & $campionato[$i][$j][0] & " vs " & $campionato[$i][$j][1] & @CRLF)
           Next
    Next
    func Berger($squadre)
       local $n_squadre = UBound($squadre), $giornate = $n_squadre - 1
    
           local $casa[$n_squadre/2], $trasferta[$n_squadre/2]
           dim $RET[$giornate*2][$n_squadre/2][2]
    
       for $i = 0 to $n_squadre/2-1
           $casa[$i] = $squadre[$i]
           $trasferta[$i] = $squadre[$n_squadre-1-$i]
       next
    
       for $i = 0 to $giornate-1
           ;/* stampa le partite di questa giornata */
           ;ConsoleWrite($i+1&"^ Giornata"&@CRLF)
    
           ;/* alterna le partite in casa e fuori */
           if mod($i,2)==0 then
               for $j = 0 to $n_squadre/2-1
                   ;ConsoleWrite($j+1 & " " & $trasferta[$j] & " - " & $casa[$j] & @CRLF)
                                   $RET[$i][$j][0] = $trasferta[$j]
                                   $RET[$i][$j][1] = $casa[$j]
                           Next
                   else
               for $j = 0 to $n_squadre/2-1
                   ;ConsoleWrite($j+1 & " " & $casa[$j] & " - " & $trasferta[$j] & @CRLF)
                                   $RET[$i][$j][0] = $casa[$j]
                                   $RET[$i][$j][1] = $trasferta[$j]
                           Next
           EndIf
    
           ;// Ruota in gli elementi delle liste, tenendo fisso il primo elemento
           ;// Salva l'elemento fisso
           $pivot = $casa[0];
    
           ;/* sposta in avanti gli elementi di "trasferta" inserendo
              ;all'inizio l'elemento casa[1] e salva l'elemento uscente in "riporto" */
           ;String riporto = shiftRight(trasferta, casa [1]);
                   $riporto = $trasferta[UBound($trasferta)-1]
                   for $k = UBound($trasferta)-1 to 1 step -1
                           $trasferta[$k] = $trasferta[$k-1]
                   Next
                   $trasferta[0] = $casa[1]
           ;/* sposta a sinistra gli elementi di "casa" inserendo all'ultimo
              ;posto l'elemento "riporto" */
           ;shiftLeft(casa, riporto);
                   for $k = 0 to UBound($casa)-2
                           $casa[$k] = $casa[$k+1]
                   Next
                   $casa[UBound($casa)-1] = $riporto
           ;// ripristina l'elemento fisso
           $casa[0] = $pivot ;
       Next
           for $i = $giornate to $giornate*2-1
                   for $j = 0 to $n_squadre/2-1
                           $RET[$i][$j][0] = $RET[$i-$giornate][$j][1]
                           $RET[$i][$j][1] = $RET[$i-$giornate][$j][0]
                   Next
           Next
           return $RET
    EndFunc
    Questo è quello che sto facendo io...
    codice:
    dim lista_squadre(8), casa(200), trasferta(200)
    
    lista_squadre(1) = "A"
    lista_squadre(2) = "B"
    lista_squadre(3) = "C"
    lista_squadre(4) = "D"
    lista_squadre(5) = "E"
    lista_squadre(6) = "F"
    lista_squadre(7) = "G"
    lista_squadre(8) = "H"
    
    campionato = Berger(lista_squadre)
    
    FOR i = 0 TO UBound(campionato)-1
    	response.write i+1&"^ giornata
    "
    	FOR j = 0 to UBound(campionato,2)-1
    		response.wrrite j+1&" partita: "&campionato(i)(j)(0) &" vs "& campionato(i)(j)(1) &"
    "
    	NEXT
    NEXT
    
    FUNCTION Berger(squadre)
    	n_squadre = UBound(squadre)
    	giornate = n_squadre - 1
    
    	FOR i = 0 TO n_squadre/2-1
    		casa(i) = squadre(i)
    		trasferta(i) = squadre(n_squadre-1-i)
    	next
    
    END FUNCTION

  4. #4
    Uffaaaaaa!!! La mia ricerca continua ma di ASP non riesco a trovare nulla!!
    Ho trovato però questa pagina in PHP che funziona alla grande, ora provo a cimentarmi con questo codice (anche se è in francese!) nel frattempo se c'è qualcuno che conosce il PHP e l'ASP (e francese ) e ha voglia di darmi una mano grazie!!

    codice:
    <?php
    //*********************************************************************************************
    // Tables de Berger pour le volley
    //
    //*********************************************************************************************
    //
    // Sources : http://www.barrychessclub.org.uk/berger2001.htm (1)
    // Ligue de Poitou-Charentes de Volley-Ball (2)
    //
    // (1) : constitution des journees (methode)
    // (2) : melange des journees pour obtenir le championnat (deduction pour 6, 8, 10 equipes)
    //
    //*********************************************************************************************
    // Version : 0.1
    //
    //*********************************************************************************************
    //
    // Principe :
    // - pour n equipes (n pair)
    // - constituer un tableau T1 de 2 colonnes et n/2 lignes
    // - remplir le tableau en commencant en haut a gauche dans le sens anti-horaire
    // 1 n
    // 2 n-1
    // 3 n-2
    // ...
    // n/2 n/2 +1
    // - a partir de T1, on cree T2 en gardant n fixe en haut a droite
    // et en faisant tourner les autres d'un cran dans le sens horaire
    // 2 n
    // 3 1
    // 4 n-1
    // ...
    // n/2 +1 n/2 +2
    // - on repete l'operation pour avoir n-1 tableaux
    // - la correspondance entre les tableaux Ti et les journees de championnat Ji
    // est alors :
    // J1 -> T1
    // J2 -> Tn/2
    // J3 -> Tn-1
    // J4 -> Tn/2-1
    // J5 -> Tn-2
    // J6 -> Tn/2-2
    // ...
    // Jn-2 -> T2
    // Jn-1 -> Tn/2+1
    // - pour les journees paires, pour le 1er match de la journee, on inverse
    // Domicile et Exterieur (donc pour l'equipe n). Sinon, elle ferait tous ses matchs aller
    // a l'exterieur...
    //
    //*********************************************************************************************
    //
    // Historique :
    // v.0.1 mars 2003 Creation
    //
    //*********************************************************************************************
    //-----------------------------------
    // Page pour test
    echo "<html><title>Tables de Berger</title><body>\n";
    // Saisie du nombre d'equipes
    // Par defaut = 0
    if ( ! isset($HTTP_POST_VARS['nb'])) $nb=0;
    echo "<form name='form' action='' method='post'>\n",
    "Nombre d'équipes du championnat :
    \n",
    "<select name='nombre' onchange='form.nb.value=form.nombre[form.nombre.selectedIndex].value'>\n",
    "<option value='0'>----\n",
    "<option value='6'>5-6\n",
    "<option value='8'>7-8\n",
    "<option value='10'>9-10\n",
    "<option value='12'>11-12\n",
    "<option value='14'>13-14\n",
    "<option value='16'>15-16\n",
    "<option value='18'>17-18\n",
    "<option value='20'>19-20\n",
    "<option value='22'>21-22\n",
    "<option value='24'>23-24\n",
    "</select>\n",
    "<input type='hidden' name='nb' value=$nb>\n",
    "<input type='submit' name='submit' value='afficher'>\n",
    "</form>\n",
    "
    
    sourceici
    \n",
    "
    
    Fichier Excel pour comprendreici
    \n";
    if ( $nb > 0 )
    {
    echo "<hr noshade>\n";
    echo "Nombre d'équipes : ".$nb."
    \n";
    echo "Matchs aller uniquement
    \n";
    echo berger_affiche ( berger_calcule ($nb) );
    }
    echo "</body></html>\n";
    // Fin de la page
    //-----------------------------------
    //------------------------------------
    // Fonction berger_calcule
    //
    // Parametres : nb_equipe = nombre d'equipes
    // Retour : tableau des journees a 3 dimensions
    // pour une journee j, le match m donne
    // $tableau[$j]["D"][$m] recoit $tableau[$j]["E"][$m]
    //
    // Calcule les journees
    //
    function berger_calcule ($nb_equipe)
    {
    // Si le nombre d'equipes est impair
    // on passe au nombre pair juste apres
    if ( ($nb_equipe % 2) == 1 ) $nb_equipe++;
    // Moitie des equipes
    $moitie=$nb_equipe/2;
    // Tableau de sortie a deux dimensions : journee, matchs
    $tableau=array();
    for ($j=1; $j<=$nb_equipe-1; $j++)
    {
    $tableau[$j]=array();
    $tableau[$j]["D"]=array(); // Domicile
    $tableau[$j]["E"]=array(); // Exterieur
    // Traitement particulier de la premiere ligne
    $tableau[$j]["D"][1]=$j;
    $tableau[$j]["E"][1]=$nb_equipe;
    for ($m=2; $m<=$moitie; $m++)
    {
    $dom=$j+$m-1;
    if ( $dom >= $nb_equipe ) $dom++;
    $ext=$nb_equipe+$j-$m;
    if ( $ext >= $nb_equipe ) $ext++;
    $tableau[$j]["D"][$m]= ( $dom % $nb_equipe );
    $tableau[$j]["E"][$m]= ( $ext % $nb_equipe );
    }
    }
    // On cree journee a partir de tableau
    // en "melangeant" les colonnes (tableau[journee])
    $journee=array();
    for ($j=1; $j<=$nb_equipe-1; $j++)
    {
    $journee[$j]=array();
    $journee[$j]["D"]=array();
    $journee[$j]["E"]=array();
    }
    // 1ere journee
    $journee[1]=$tableau[1];
    $journee[2]=$tableau[$nb_equipe-1];
    // autres journees
    for ($j=2; $j<=$nb_equipe-1; $j++)
    {
    if ( ($j % 2) == 0)
    {
    // Cas $j pair
    $indice = ($nb_equipe / 2) - ( ($j -2)/2 );
    }
    else
    {
    // Cas $j impair
    $indice = $nb_equipe - ( ($j-1) / 2 );
    }
    $journee[$j]=$tableau[$indice];
    }
    // On balaye les journees paires
    // pour alterner Domicile-Exterieur pour l'equipe $nb_equipe
    // donc uniquement pour le 1er match de chaque journee
    for ($j=1; $j<=$nb_equipe-1; $j++)
    {
    // Journee paire
    if ( ($j % 2) == 0 )
    {
    // On recupere les valeurs
    $dom=$journee[$j]["D"][1];
    $ext=$journee[$j]["E"][1];
    // On inverse
    $journee[$j]["D"][1]=$ext;
    $journee[$j]["E"][1]=$dom;
    }
    }
    return $journee;
    }
    //
    //------------------------------------
    //------------------------------------
    // Fonction berger_affiche
    //
    // Parametres : tableau des journees a 3 dimensions
    // pour une journee j, le match m donne
    // $tableau[$j]["D"][$m] recoit $tableau[$j]["E"][$m]
    // Retour : chaine d'affichage des journees (table)
    //
    // Genere la table d'affichage des journess
    //
    function berger_affiche ($journee)
    {
    // Nombre de journees
    $nb_jour=sizeof($journee);
    // Largeur des colonnes
    $width=round(100/$nb_jour);
    // Nombre de matches ( (nombre de journees +1) / 2)
    $nb_match=($nb_jour+1)/2;
    // Initialisation de la table
    $sortie="<table width='100%' border='1'>\n";
    // Ligne d'entete
    $sortie .= " <tr>\n";
    for ($j=1; $j<=$nb_jour; $j++)
    {
    $sortie .= " <td align='center' width='".$width."%'>J ".$j."</td>\n";
    }
    $sortie .= " </tr>\n";
    // Affichage des matches
    for ($m=1; $m<=$nb_match; $m++)
    {
    $sortie .= " <TR>\n";
    for ($j=1; $j<=$nb_jour; $j++)
    {
    $sortie .= " <td align='center' width='".$width."%'>".$journee[$j]["D"][$m]."-".$journee[$j]["E"][$m]."</td>\n";
    }
    $sortie .= " </tr>\n";
    }
    // Fermeture de la table
    $sortie .= "</table>\n";
    return $sortie;
    }
    //
    //------------------------------------
    ?>

  5. #5
    Ho provato a portare il codice in ASP, però ho questto errore:

    Microsoft VBScript runtime error '800a0009'
    Subscript out of range: 'j'
    /public/forum_test/fanta_algoritmo_02.asp, line 14

    cosa posso controllare?

    codice:
    <html><title>Tabella di Berger</title>
    <body>
    <%
    nb_equipe = 8
    nb = nb_equipe
    response.write berger_affiche ( berger_calcule (nb) )
    
    
    function berger_calcule (nb_equipe)
    	moitie=nb_equipe/2
    	tableau=array()
    	
    	for j=1 to nb_equipe-1
    		tableau(j)=array() '<<<<<<<<<<<<<<<<<< RIGA 14'
    		tableau(j)("D")=array() 'Casa'
    		tableau(j)("E")=array() 'Trasferta'
    		
    		tableau(j)("D")(1)=j
    		tableau(j)("E")(1)=nb_equipe
    		
    		for m=2 to moitie
    			dom=j+m-1
    			if (dom > nb_equipe) or (dom = nb_equipe) then
    				dom = dom +1
    			end if
    			ext=nb_equipe+j-m
    			if (ext > nb_equipe) or (ext = nb_equipe) then
    				ext = ext +1
    			end if
    			tableau(j)("D")(m) = ( dom MOD nb_equipe )
    			tableau(j)("E")(m) = ( ext MOD nb_equipe )
    		next
    	next
    	
    	journee=array()
    	for j=1 to nb_equipe-1
    		journee(j)=array()
    		journee(j)("D")=array()
    		journee(j)("E")=array()
    	next
    	journee(1)=tableau(1)
    	journee(2)=tableau(nb_equipe-1)
    	
    	for j=2 to nb_equipe-1
    		if (j MOD 2) = 0 then
    			indice = (nb_equipe / 2) - ( (j -2)/2 )
    		else
    			indice = nb_equipe - ( (j-1) / 2 )
    		end if
    		journee(j)=tableau(indice)
    	next
    	
    	for j=1 to nb_equipe-1
    		if (j MOD 2) = 0 then
    			dom=journee(j)("D")(1)
    			ext=journee(j)("E")(1)
    			journee(j)("D")(1)=ext
    			journee(j)("E")(1)=dom
    		end if
    	next
    response.write journee
    end function
    
    function berger_affiche (journee)
    	nb_jour=sizeof(journee)
    	width=round(100/nb_jour)
    	nb_match=(nb_jour+1)/2
    	sortie ="<table width='100%' border='1'>\n"
    	sortie = sortie &" <tr>\n"
    
    	for j=1 to nb_jour
    		sortie = sortie &" <td align='center' width='"&width&"%'>J "&j&"</td>\n"
    	next
    	
    	for m=1 to nb_match
    		sortie = sortie &" <TR>\n"
    		for j=1 to nb_jour
    			sortie = sortie &" <td align='center' width='"&width&"%'>"&journee(j)("D")(m)&"-"&journee(j)("E")(m)&"</td>\n"
    		next
    		sortie = sortie &" </TR>\n"
    	next
    	
    	sortie = sortie &"</table>\n"
    	response.write sortie
    end function
    %>
    </body>

  6. #6
    Ci sono riuscito!!!
    o meglio... grazie al codice in PHP e una studiatina degli array bidimensionali son riuscire a tirare fuori qualcosa in ASP!!!

    A volte il forum è bello anche per intestardirsi da soli, posto il codice nel caso in futuro qualche testone come me si cimenti nell'impresa

    codice:
    <%
    'imposto il numero di squadre da gestire'
    numero_squadre = 8
    
    'dichiaro gli array utilizzati'
    dim squadre(), casa(), trasferta()
    
    'preparo array con la lista delle squadre'
    redim squadre(numero_squadre)
    for i=0 to numero_squadre -1
    	squadre(i) = i + 1
    next
    
    call berger(squadre)
    
    'funzione Algoritmo di Berger'
    function Berger(squadre)
       n_squadre = UBound(squadre)
       giornate = n_squadre - 1
    
           redim casa(n_squadre/2)
    	   redim trasferta(n_squadre/2)
    
       for i = 0 to n_squadre/2-1
           casa(i) = squadre(i)
           trasferta(i) = squadre(n_squadre-1-i)
       next
    
       for i = 0 to giornate-1
           ' stampa le partite di questa giornata'
           response.write i+1&"^ Giornata"&"
    "
    
           ' alterna le partite in casa e fuori'
           if i mod 2 <> 0 then
               for j = 0 to n_squadre/2-1
                   response.write j+1 & " >>> " & trasferta(j) & " - " & casa(j) & "
    "
               next
           else
               for j = 0 to n_squadre/2-1
                   response.write j+1 & " >>> " & casa(j) & " - " & trasferta(j) & "
    "
               Next
           end if
    
           ' Ruota in gli elementi delle liste, tenendo fisso il primo elemento'
           ' Salva l'elemento fisso'
           pivot = casa(0)
    
           ' sposta in avanti gli elementi di "trasferta"'
    	   ' inserendo inizio l'elemento casa(1) e salva l'elemento uscente in "riporto"'
                   riporto = trasferta(UBound(trasferta)-1)
                   for k = UBound(trasferta)-1 to 1 step -1
                           trasferta(k) = trasferta(k-1)
                   Next
                   trasferta(0) = casa(1)
           ' sposta a sinistra gli elementi di "casa"'
    	   ' inserendo all'ultimo posto l'elemento "riporto"'
                   for k = 0 to UBound(casa)-2
                           casa(k) = casa(k+1)
                   Next
                   casa(UBound(casa)-1) = riporto
           ' ripristina l'elemento fisso'
           casa(0) = pivot
       Next
    End Function
    %>

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.