• Lunes 9 de Diciembre de 2024, 07:51

Autor Tema:  ¿cómo Generar Un Calendario Deportivo?  (Leído 5958 veces)

Valten

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
¿cómo Generar Un Calendario Deportivo?
« en: Sábado 5 de Mayo de 2007, 11:17 »
0
Buenos días, no he encontrado nada sobre el tema, y sé que no se hace los deberes a la gente (cosa que me parece genial por otra parte).

Por eso lo que pido es nada más alguna pista para resolver un problemilla que me trae de cabeza. Me explico:

Tengo una liga con dieciséis equipos cuyos nombres almaceno en un vector de strings.

Como en esta liga no hay ida y vuelta, sólo necesito generar quince jornadas con ocho partidos cada una. Después he de leer los resultados, calcular la clasificación atendiendo a una serie de condiciones y presentarlo en pantalla. Todo esto no es problema, pero lo de generar el calendario y colocar cada jornada sin que el mismo equipo juegue dos veces me mata.

Tengo pensado utilizar una matriz bidimensional con 15 columnas y 8 filas en la que cada casilla sea una estructura con los dos equipos que juegan ese partido y el resultado del mismo, pero ¿Cómo relleno los equipos de forma eficaz, sencilla, o de cualquier forma?

Está claro, creo, que tengo que generar combinaciones de equipos y generar los partidos no me parece difícil con dos bucles anidados, algo así:

Código: Text
  1. for (local=1;local<15;local++)
  2.    for (visitante=local+1;visitante<16;visitante++)
  3.  
  4.  

Con esto, local y visitante me dan las combinaciones correspondientes a los 120 partidos de la temporada, pero ¿cómo los reparto en las distintas jornadas?

Agradecería cualquier ayuda o pista sobre cómo hacerlo porque me está matando. Todo lo demás lo tengo ya encarrilado en la cabeza, pero con el calendario no puedo. Si hubiera estado en Pascal, probablemente utilizando recursividad y conjuntos podría hacer algo, pero en C no sé qué hacer.

Estoy utilizando el Dev-C++ en caso de que pudiera influir. Muchas gracias por cualquier pista que me podáis dar. Entiendo que es un problema habitual, pero no recuerdo haberme enfrentado con él nunca y me tiene despistado.

Gracias otra vez. Un saludo desde Santander (España)
[size=109]Un saludo desde Santander (España)[/b][/size]

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: ¿cómo Generar Un Calendario Deportivo?
« Respuesta #1 en: Sábado 5 de Mayo de 2007, 16:04 »
0
Citar
Si hubiera estado en Pascal, probablemente utilizando recursividad y conjuntos podría hacer algo, pero en C no sé qué hacer.
No tiene nada que ver, en los dos podes usar recursividad, ademas que problema con la recursividad en C ??
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Valten

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: ¿cómo Generar Un Calendario Deportivo?
« Respuesta #2 en: Domingo 6 de Mayo de 2007, 09:45 »
0
Cita de: "lencho"
No tiene nada que ver, en los dos podes usar recursividad, ademas que problema con la recursividad en C ??
Buenos días lencho, gracias por responder. Perdona pero quizá me he expresado mal. Sé que en C puedo utilizar la recursividad, eso no es problema. Pero ¿conjuntos? eso no lo tiene el amigo C ¿o sí? Para mí es una estructura que me acostumbré a usar en Pascal y que, en muchos casos, echo de menos cuando estoy en otros lenguajes. Ojo que no pretendo sonar pedante. No es que sepa mil. Conozco un poquillo de 3 ó 4.

De todos modos, me conectaba esta mañana para comentar que una solución al tema lleva dos palabras mágicas: Round Robin. El bendito territorio de las rotaciones de equipos. Es una patochada muy sencilla de implementar y que, no sé si será lo más eficiente del "mercado", pero que desde luego a mi me resulta práctico. Phew!  :kicking:
[size=109]Un saludo desde Santander (España)[/b][/size]

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: ¿cómo Generar Un Calendario Deportivo?
« Respuesta #3 en: Miércoles 11 de Julio de 2007, 17:16 »
0
Para que un equipo no se enfrente a sí mismo sólo tienes que ver que posición tiene, por tanto si uno ocupa la posición pongamos 7, entonces en el segundo bucle hay que decirle que cuando sea 7 se lo salte y contnue con el siguiente...

un ejemplo: con una matriz para 9 elementos

  123456789  
1*23456789
21*3456789
312*456789
4123*56789
51234*6789
612345*789
7123456*89
81234567*9
912345678*

Como puedes ver el bucle 'a' (horizontales) va tomando elementos, el bucle 'b' (verticales) lo primero que hace es comprobar si b=a luego avanza hasta el sigieunte elemento del bucle b, lo cual sucede cuando coinciden 1,1 2,2 3,3 4,4 5,5 6,6 7,7 8,8 y 9,9 que es cuando en teoría uno jugaría consigo mismo.... pero si observas un periódico deportivo ya verías las tablas con dichos elementos tachados... lo que te debía de haber servido de pista.
«Ma non troppo»
----> ModoVacaciones = False<----