Autor
|
Tema: Ayuda con un algoritmo (Leído 3,362 veces)
|
$Edu$
Desconectado
Mensajes: 1.842
|
La cosa es asi:
Estoy haciendo un programa para realizar torneos de futbol, el cual llego a contener 3 arrays, uno String y los otros dos Integer.
Player() Score() Ranking()
Player(0) = "Real Madrid" ' nombre equipo Score(0) = 8 ' goles total (a favor - en contra) Ranking(0) = 6 ' puntos en la tabla de su grupo
Player(1) = "Barcelona" ' nombre equipo Score(1) = 12 ' goles total (a favor - en contra) Ranking(1) = 9 ' puntos en la tabla de su grupo
............ ............
Los primeros 4 equipos ( index 0 to 3) pertenecen al grupo A, los siguientes 4 (index 4 to 7) pertenecen al grupo B y todo asi..
Necesito hacer que clasifiquen 16, por lo que supongamos que los equipos sean 28 en total, clasificarian el Primero y el Segundo de cada grupo, por lo que irian 14 (28 / 2) y entonces necesito sacar el Primer Mejor Tercero y el Segundo Mejor Tercero de TODOS.
Como lo harian? porque lo veo poco profesional hacer un switch case con el maximo de Player() para saber cuantos jugadores hay y de ahi dividir ese array en otros arrays grupoA() , grupoB(), etc. para luego sacar sacar los 2 mejores de cada grupo. Esto se puede solucionar usando un bucle al Player() sabiendo que de i = 0 to 3 es el grupo A y todo asi como dije antes, pero no logro hacerlo :/
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. Si quieres hacer un tipo desglose similar a el que te pongo (Por que la verdad no te entendi ni madres!¡.)... Se lee de abajo hacia arriba donde: * Cada numero es un usuario. * El "-" seria un "versus". * El numero de la parte superior seria el usuario ganador. 5 1-5 1-4 5-8 1-2 3-4 5-6 7-8
* Breve Critica: -> Hablas sobre profesionalidad pero no te haz tomado unos minutos para diseñar la ESTRUCTURA DE LOS DATOS, es decir creaste 3 arrays... pero bueno. * Consejo -> Sera mejor que DISEÑES las estructuras de los datos... si lo haces asi es confuso y el mantenimiento del codigo es horrendo sin mencionar que el entrelazado de datos es confuso, almenos que seas el que lo programo... pero a la larga no importa quien sea no le entendera. Private Type tUserInfo sNombre As String oTeam As cTeam ' // Referencia a la Clase(GLOBAL) que contiene los detalles del equipo al que pertenece este usuario. oStatistics As cStatistics ' // Referencia a la Clase(UNICA) que contiene las estadisticas generales de este usuario. End Type
Una vez hecho esto CON UN SOLO VECTOR/ARRAY de tUserInfo y dentro de oStatistics (Como seria obvio llevar una estadistica del usuario X como las rondas, ID (Index en el Vector/Array), partidas ganas Contra X persona etc.., score, etc)... no tendras ninguna dificultad de obtener la informacion o con quien competiria en X ronda. Dulces Lunas!¡.
|
|
« Última modificación: 23 Octubre 2011, 07:41 am por BlackZeroX (Astaroth) »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
seba123neo
|
con una base de datos, aunque sea chica te ahorras todo eso de array y demas chapuzas y aparte lo podes hacer mas complejos , sacar estadisitcas, hacer lo que quieras con una simple consulta SQL.
|
|
|
En línea
|
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Perdon BlackZeroX si no me entendiste bien, y acepto tu critica, dices que en vez de usar los 3 arrays que uso, lo hubiera hecho mas profesional usando lo que comentas. Y puede ser pero ahora por falta de profesionalidad tendria q modificar mucho codigo anterior, el proyecto es largo y este problema que tengo lo tengo en el final por lo que tendria que cambiar muchas cosas para establecer bien el diseño de datos como dices. Pero no seria lo mismo a la hora de recorrer con un bucle, revisar Player(i).Ranking que usarlos por separados? total estan al mismo nivel, es decir para Player(7) le corresponde a Ranking(7). En fin, razon tienes razon pero bueno. Lo que me dices seba123neo creo que lo hare cuando haga otra version ya que ahora lo necesito crear cuanto antes pero muchas gracias. Aca les dejo un codigo para el que quiera hacer la funcion: Option Explicit Dim Player(27) As String ' El tamaño variara en estos casos: 7 - 11 - 15 - 19 - 23 - 27 - 31 Dim Score(27) As Integer ' que son los posibles equipos que habra siempre Dim Ranking(27) As Integer ' esto tenerlo en cuenta al hacer operaciones en la funcion a realizar Private Sub Form_Load() Dim i As Integer Dim caracter As Integer Dim Octavos() As String ' aca guardaremos los clasificados caracter = 65 ' A continuacion los bucles son para llenar los arrays con contenido como los que contendra ' en mi aplicacion original For i = 0 To UBound(Player) ' cargamos los equipos Player(i) = Chr$(caracter) caracter = caracter + 1 Next For i = 0 To UBound(Score) ' ponemos un score a cada uno Randomize Time Score(i) = CInt(Rnd() * 20) Next For i = 0 To UBound(Ranking) ' ponemos puntos a cada uno Randomize Time Ranking(i) = CInt(Rnd() * 9) Next '-------------------------------------------------------------- Debug.Print String(20, "#") ' Mostramos la lista de equipos con sus puntajes y goles For i = 0 To UBound(Player) Debug.Print Player(i) & " - " & Score(i) & " - " & Ranking(i) Next Debug.Print String(20, "/") '-------------------------------------------------------------- Octavos = Clasificados(Player(), Score(), Ranking()) ' guardamos los clasificados Debug.Print "Clasificados para octavos de final: " 'For i = 0 To UBound(Octavos) ' mostrar clasificados 'Debug.Print Octavos(i) 'Next Debug.Print String(20, "#") End Sub Private Function Clasificados(Player() As String, Score() As Integer, Ranking() As Integer) As String() ' Devolvera un String() con los Primeros y Segundos de cada Grupo mas en este caso ' al ser 28 equipos.. el Primer Mejor Tercero y el Segundo Mejor tercero de TODOS Dim i As Integer Dim Todos() As String ' Dim p As Long 'Aca les dejo comentado el codigo para ordenar un array ' Dim c As Long ' de menor a mayor, con el metodo Burbujeo por si sirve ' Dim h As Long ' For p = 1 To (UBound(Ranking) - 1) ' For c = 1 To (UBound(Ranking) - 1) ' If Ranking(c) > Ranking(c + 1) Then ' h = Ranking(c) ' Ranking(c) = Ranking(c + 1) ' Ranking(c + 1) = h ' End If ' Next c ' Next p Clasificados = Todos() End Function
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!! No hice exactamente lo que pedias, mi funcion te devuelve un array con todos los primeros en el indice (0,x) todos los segundos en el indice (1,x) y los terceros ordenados en el indice (2,x) Private Function Clasificados(Player() As String, Score() As Integer, Ranking() As Integer) As Long() Dim W, X, Y, Z As Integer Dim Todos() As Long Dim AuxP(3) As Long Dim AuxI(3) As Long Dim Aux As Long ReDim Todos(2, ((UBound(Player) + 1) / 4) - 1) 'ORDENO EN TODOS DE LA SIGUIENTE MANERA 'TODOS(0,X) = JUGADORES PRIMEROS DE CADA ZONA 'TODOS(1,X) = JUGADORES SEGUNDOS DE CADA ZONA 'TODOS(2,X) = JUGADORES TERCEROS DE CADA ZONA For X = 0 To UBound(Player) Step 4 For Y = 0 To 3 AuxP(Y) = Ranking(X + Y) AuxI(Y) = X + Y Next For Y = 0 To 3 For Z = 0 To 3 If AuxP(Y) > AuxP(Z) Then Aux = AuxP(Y) AuxP(Y) = AuxP(Z) AuxP(Z) = Aux Aux = AuxI(Y) AuxI(Y) = AuxP(Z) AuxI(Z) = Aux End If Next Next For W = 0 To 2 If AuxP(W) <> AuxP(W + 1) Then Todos(W, ((X + 1) / 4) - 1) = AuxI(W) Else If Score(AuxI(W)) > Score(AuxI(W + 1)) Then Todos(W, ((X + 1) / 4) - 1) = AuxI(W) Else Todos(W, ((X + 1) / 4) - 1) = AuxI(W + 1) End If End If Next Next 'ORDENO LOS TERCEROS (POR QUE LOS OTROS NO SE NECESITAN ORDENADOS For X = 0 To 3 For Y = 0 To 3 If Ranking(Todos(2, X)) > Ranking(Todos(2, Y)) Then Aux = Todos(2, X) Todos(2, X) = Todos(2, Y) Todos(2, Y) = Aux End If Next Next For X = 0 To 2 For W = 0 To 2 If Ranking(Todos(2, W)) = Ranking(Todos(2, W + 1)) Then If Score(Todos(2, W)) < Score(Todos(2, W + 1)) Then Aux = Todos(2, W) Todos(2, W) = Todos(2, W + 1) Todos(2, W + 1) = Aux End If End If Next Next Clasificados = Todos() 'DEVUELVE: 'TODOS: 0 1 2 'X PRIMERO GRUPO X SEGUNDO GRUPO X TERCERO EN ORDEN End Function
GRACIAS POR LEER!!!
|
|
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
Pero no seria lo mismo a la hora de recorrer con un bucle, revisar Player(i).Ranking que usarlos por separados? total estan al mismo nivel, es decir para Player(7) le corresponde a Ranking(7).
Si mesclas las clases con SQL es decir mezclar mi idea con la seba123neo uff, mira que se vera mas "Bonito" y entendible, claro no tendriasn que ser estructuras si no puras clases, con una clase connect... pero bueno jeje, entre mi idea y la de seba123neo ya tengo una idea para futuro!¡. Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Si BlackZeroX, cuando haga la version 2 mejorare todo el codigo, ahora simplemente quiero que funcione Gracias! Y 7913.. sin palabras como siempre, no lo he probado pero por ayudarme siempre gracias y ya te aviso si me funciono
|
|
|
En línea
|
|
|
|
$Edu$
Desconectado
Mensajes: 1.842
|
Ya solucione, digamos que hice ordenamiento burbujeo varias veces xD
Gracias por todo!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda Algoritmo
Programación General
|
Negr0
|
8
|
5,142
|
25 Junio 2011, 11:27 am
por Negr0
|
|
|
Ayuda con algoritmo C++
Programación C/C++
|
DagothXX1
|
4
|
4,394
|
15 Noviembre 2011, 00:36 am
por rir3760
|
|
|
Ayuda con un Algoritmo
Ejercicios
|
BDalbertOD
|
3
|
3,367
|
26 Abril 2012, 16:05 pm
por $Edu$
|
|
|
Ayuda con Algoritmo C++
Programación C/C++
|
marchiali
|
3
|
1,897
|
24 Julio 2014, 00:57 am
por marchiali
|
|
|
Ayuda algoritmo
Programación C/C++
|
frikiboom1
|
1
|
1,597
|
5 Octubre 2014, 18:13 pm
por milx86
|
|