elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:06  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  Ayuda con un algoritmo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con un algoritmo  (Leído 540 veces)
$Edu$


Conectado Conectado

Mensajes: 1.415



Ver Perfil
Ayuda con un algoritmo
« en: 23 Octubre 2011, 03:50 »

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

Estado en el MSN:
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Ayuda con un algoritmo
« Respuesta #1 en: 23 Octubre 2011, 07:38 »

.
Si quieres hacer un tipo desglose similar a el que te pongo (Por que la verdad no te entendi ni madres!¡.)...

Código:

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.

Código
 
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 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.214



Ver Perfil WWW
Re: Ayuda con un algoritmo
« Respuesta #2 en: 23 Octubre 2011, 07:39 »

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

Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo.
Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
$Edu$


Conectado Conectado

Mensajes: 1.415



Ver Perfil
Re: Ayuda con un algoritmo
« Respuesta #3 en: 23 Octubre 2011, 14:17 »

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:

Código
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

Estado en el MSN:
79137913


Desconectado Desconectado

Mensajes: 780


4 Esquinas


Ver Perfil WWW
Re: Ayuda con un algoritmo
« Respuesta #4 en: 24 Octubre 2011, 18:43 »

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)
Código
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*                                                          Resumenes Cs.Economicas
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Ayuda con un algoritmo
« Respuesta #5 en: 24 Octubre 2011, 20:00 »


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

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
$Edu$


Conectado Conectado

Mensajes: 1.415



Ver Perfil
Re: Ayuda con un algoritmo
« Respuesta #6 en: 24 Octubre 2011, 21:29 »

Si BlackZeroX, cuando haga la version 2 mejorare todo el codigo, ahora simplemente quiero que funcione :P 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

Estado en el MSN:
$Edu$


Conectado Conectado

Mensajes: 1.415



Ver Perfil
Re: Ayuda con un algoritmo
« Respuesta #7 en: 25 Octubre 2011, 01:51 »

Ya solucione, digamos que hice ordenamiento burbujeo varias veces xD

Gracias por todo!
En línea

Estado en el MSN:
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con un algoritmo
Programación General
adolfo187 2 432 Último mensaje 21 Marzo 2005, 15:30
por adolfo187
ayuda con algoritmo
Programación General
moyo18 2 420 Último mensaje 15 Septiembre 2006, 22:51
por SirLanceCC
Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
Desafíos - Wargames
Debci 12 3,686 Último mensaje 12 Enero 2010, 01:00
por Novlucker
dime el algoritmo que más te gusta... ejm:algoritmo del avestruz
Programación General
jhonatanAsm 0 1,291 Último mensaje 13 Mayo 2011, 01:30
por jhonatanAsm
Ayuda Algoritmo
Programación General
Negr0 8 910 Último mensaje 25 Junio 2011, 11:27
por Negr0
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines