Ver Mensaje Individual
  #14  
Antiguo 28-02-2009
fidel fidel is offline
Miembro
 
Registrado: mar 2005
Posts: 381
Reputación: 20
fidel Va por buen camino
Tengo hecho hace tiempo para mí algo parecido, es para torneos internos en las horas de recreo del instituto, lo que pasa es que mis condiciones son algo diferentes de lo que tu necesitas. Yo tengo varias categorías (grupos), y solo juega un equipo de cada categoría por día, siempre que el nº de campos lo permita, si no hay que ir turnandose y descansando algun grupo algún día.

Alguna idea
-----------

- Supongo que tienes un solo grupo de equipos (también se puede hacer con más)
- Primero se hacen los cruces a una vuelta.
- Si se necesitan una segunda vuelta simplemente se copian los mismos partidos invirtiendo el orden de los equipos.
- Luego se distribuye en cada fecha el máximo nº de partidos posibles con arreglo a los horarios y campos disponibles.

Ejemplo con 4 equipos (es válido para cualquier nº de equipos)
Para hacer los cruces de la primera vuelta, es muy simple, 1-2, 1-3, 1-4, 2-3, 2-4, 3-4, pero esto hace que un equipo juegue todos los partidos seguidos y luego este ocioso, o esta ocioso y luego tiene todos seguidos.

Para hacer los cruces de forma que cada equipo juegue de una manera espaciada durante todo el torneo podemos hacerloa así:

- Supongamos que tienes una tabla EQUIPOS con 4 registros, cada registro tiene un solo campo con el nombre de cada equipo: A, B, C, D
- Creas dos tablas auxiliares AUXEQUIPOS, AUXPARTIDOS
- En la tabla AUXEQUIPOS añades todos los registros de la tabla equipos repetidos tantas veces menos una como equipos hay, en este caso repetidos 3 veces (los 4 equipos repetidos 3 veces) y tendrás en AUXEQUIPOS 12 registros que serán:

A
B
C
D
A
B
C
D
A
B
C
D

Ahora hacemos los partidos:

- Coges en una variable el primer equipo de AUXEQUIPOS que es A como equipo local y lo borras de la tabla.
- Coges en una variable el primer equipo de la tabla (ahora será B) como equipo visitente y guardas en una variable el partido A-B , miras en la tabla AUXPARTIDOS (con locate) si este partido ya existe

... si no existe añades un registro y lo pones como partido y borras el equipo visitante (B en este caso), de AUXEQUIPOS.

... si existe avanzas un registro en AUXEQUIPOS y coges el equipo como visitante y haces el partido y vuelves a mirar si este partido ya existe

Con esto ya tenemos el primer partido y habrán desaparecido los dos equipos que intervienen de la tabla AUXEQUIPOS.

- se sigue haciendo lo mismo para los demás partidos, hasta que la tabla AUXEQUIPOS esté vacia, y en AUXPARTIDOS tendremos todos distribuidos racionalmente:

A-B
C-D
A-C
B-D
A-D
B-C

El equipo a juagará el 1º, 3º y 5º partido, el B el 1º, 4º y 6º, etc.

Si necesitas una segunda vuelta, simplemente añade otros seis registros con los mismos partidos pero invertidos los equipos

A-B
C-D
A-C
B-D
A-D
B-C
B-A
D-C
C-A
D-B
D-A
C-B

Ahora tendrás que asignar fechas a estos partidos que hay que jugar, no es dificil, hazlo en un papel y sigue esos pasos pero programando.

Esto es valido para cuando juegan siempre en campos neutrales. Si es a doble vuelta y cada equipo tiene su campo propio, en el que juega cuando es local, habría que mejorar este sistema.

Quizás sea un poco complicado de entender, pero funciona. Cualquier aclaración sigues preguntando.

Última edición por fidel fecha: 28-02-2009 a las 18:56:51.
Responder Con Cita