elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  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 3,179 veces)
$Edu$


Desconectado Desconectado

Mensajes: 1.842



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

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 Desconectado

Mensajes: 3.158


I'Love...!¡.


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

.
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
  1.  
  2. Private Type tUserInfo
  3.    sNombre     As String
  4.    oTeam       As cTeam        '   //  Referencia a la Clase(GLOBAL) que contiene los detalles del equipo al que pertenece este usuario.
  5.    oStatistics As cStatistics  '   //  Referencia a la Clase(UNICA) que contiene las estadisticas generales de este usuario.
  6. End Type
  7.  
  8.  

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
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



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

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 Desconectado

Mensajes: 1.842



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

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
  1. Option Explicit
  2.  
  3. Dim Player(27) As String ' El tamaño variara en estos casos: 7 - 11 - 15 - 19 - 23 - 27 - 31
  4. Dim Score(27) As Integer ' que son los posibles equipos que habra siempre
  5. Dim Ranking(27) As Integer ' esto tenerlo en cuenta al hacer operaciones en la funcion a realizar
  6.  
  7.  
  8. Private Sub Form_Load()
  9.  
  10. Dim i As Integer
  11. Dim caracter As Integer
  12. Dim Octavos() As String ' aca guardaremos los clasificados
  13.  
  14. caracter = 65
  15.  
  16. ' A continuacion los bucles son para llenar los arrays con contenido como los que contendra
  17. ' en mi aplicacion original
  18.  
  19. For i = 0 To UBound(Player) ' cargamos los equipos
  20.    Player(i) = Chr$(caracter)
  21.    caracter = caracter + 1
  22. Next
  23.  
  24. For i = 0 To UBound(Score) ' ponemos un score a cada uno
  25.    Randomize Time
  26.    Score(i) = CInt(Rnd() * 20)
  27. Next
  28.  
  29. For i = 0 To UBound(Ranking) ' ponemos puntos a cada uno
  30.    Randomize Time
  31.    Ranking(i) = CInt(Rnd() * 9)
  32. Next
  33.  
  34. '--------------------------------------------------------------
  35. Debug.Print String(20, "#") ' Mostramos la lista de equipos con sus puntajes y goles
  36.    For i = 0 To UBound(Player)
  37.        Debug.Print Player(i) & " - " & Score(i) & " - " & Ranking(i)
  38.    Next
  39. Debug.Print String(20, "/")
  40. '--------------------------------------------------------------
  41.  
  42. Octavos = Clasificados(Player(), Score(), Ranking()) ' guardamos los clasificados
  43.  
  44. Debug.Print "Clasificados para octavos de final: "
  45.  
  46. 'For i = 0 To UBound(Octavos) ' mostrar clasificados
  47. 'Debug.Print Octavos(i)
  48. 'Next
  49.  
  50. Debug.Print String(20, "#")
  51.  
  52. End Sub
  53.  
  54. Private Function Clasificados(Player() As String, Score() As Integer, Ranking() As Integer) As String()
  55. ' Devolvera un String() con los Primeros y Segundos de cada Grupo mas en este caso
  56. ' al ser 28 equipos.. el Primer Mejor Tercero y el Segundo Mejor tercero de TODOS
  57. Dim i As Integer
  58. Dim Todos() As String
  59.  
  60.  ' Dim p As Long    'Aca les dejo comentado el codigo para ordenar un array
  61.   ' Dim c As Long   ' de menor a mayor, con el metodo Burbujeo por si sirve
  62.   ' Dim h As Long
  63.  
  64.   ' For p = 1 To (UBound(Ranking) - 1)
  65.   '     For c = 1 To (UBound(Ranking) - 1)
  66.    '        If Ranking(c) > Ranking(c + 1) Then
  67.    '            h = Ranking(c)
  68.    '            Ranking(c) = Ranking(c + 1)
  69.     '           Ranking(c + 1) = h
  70.     '       End If
  71.     '   Next c
  72.   ' Next p
  73.  
  74. Clasificados = Todos()
  75.  
  76. End Function
  77.  
  78.  
  79.  
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


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

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
  1. Private Function Clasificados(Player() As String, Score() As Integer, Ranking() As Integer) As Long()
  2. Dim W, X, Y, Z As Integer
  3. Dim Todos() As Long
  4. Dim AuxP(3) As Long
  5. Dim AuxI(3) As Long
  6. Dim Aux As Long
  7. ReDim Todos(2, ((UBound(Player) + 1) / 4) - 1)
  8.  
  9. 'ORDENO EN TODOS DE LA SIGUIENTE MANERA
  10. 'TODOS(0,X) = JUGADORES PRIMEROS DE CADA ZONA
  11. 'TODOS(1,X) = JUGADORES SEGUNDOS DE CADA ZONA
  12. 'TODOS(2,X) = JUGADORES TERCEROS DE CADA ZONA
  13.  
  14. For X = 0 To UBound(Player) Step 4
  15.    For Y = 0 To 3
  16.        AuxP(Y) = Ranking(X + Y)
  17.        AuxI(Y) = X + Y
  18.    Next
  19.    For Y = 0 To 3
  20.        For Z = 0 To 3
  21.            If AuxP(Y) > AuxP(Z) Then
  22.                Aux = AuxP(Y)
  23.                AuxP(Y) = AuxP(Z)
  24.                AuxP(Z) = Aux
  25.                Aux = AuxI(Y)
  26.                AuxI(Y) = AuxP(Z)
  27.                AuxI(Z) = Aux
  28.            End If
  29.        Next
  30.    Next
  31.    For W = 0 To 2
  32.        If AuxP(W) <> AuxP(W + 1) Then
  33.            Todos(W, ((X + 1) / 4) - 1) = AuxI(W)
  34.        Else
  35.            If Score(AuxI(W)) > Score(AuxI(W + 1)) Then
  36.                Todos(W, ((X + 1) / 4) - 1) = AuxI(W)
  37.            Else
  38.                Todos(W, ((X + 1) / 4) - 1) = AuxI(W + 1)
  39.            End If
  40.        End If
  41.    Next
  42. Next
  43.  
  44. 'ORDENO LOS TERCEROS (POR QUE LOS OTROS NO SE NECESITAN ORDENADOS
  45. For X = 0 To 3
  46.    For Y = 0 To 3
  47.        If Ranking(Todos(2, X)) > Ranking(Todos(2, Y)) Then
  48.                Aux = Todos(2, X)
  49.                Todos(2, X) = Todos(2, Y)
  50.                Todos(2, Y) = Aux
  51.        End If
  52.    Next
  53. Next
  54. For X = 0 To 2
  55.    For W = 0 To 2
  56.        If Ranking(Todos(2, W)) = Ranking(Todos(2, W + 1)) Then
  57.            If Score(Todos(2, W)) < Score(Todos(2, W + 1)) Then
  58.                Aux = Todos(2, W)
  59.                Todos(2, W) = Todos(2, W + 1)
  60.                Todos(2, W + 1) = Aux
  61.            End If
  62.        End If
  63.    Next
  64. Next
  65. Clasificados = Todos()
  66. 'DEVUELVE:
  67. 'TODOS: 0                          1                          2
  68. 'X    PRIMERO GRUPO X      SEGUNDO GRUPO X            TERCERO EN ORDEN
  69.  
  70.  
  71. 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 Desconectado

Mensajes: 3.158


I'Love...!¡.


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


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 Desconectado

Mensajes: 1.842



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

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

$Edu$


Desconectado Desconectado

Mensajes: 1.842



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

Ya solucione, digamos que hice ordenamiento burbujeo varias veces xD

Gracias por todo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda Algoritmo
Programación General
Negr0 8 4,726 Último mensaje 25 Junio 2011, 11:27 am
por Negr0
Ayuda con algoritmo C++
Programación C/C++
DagothXX1 4 4,148 Último mensaje 15 Noviembre 2011, 00:36 am
por rir3760
Ayuda con un Algoritmo
Ejercicios
BDalbertOD 3 3,172 Último mensaje 26 Abril 2012, 16:05 pm
por $Edu$
Ayuda con Algoritmo C++
Programación C/C++
marchiali 3 1,709 Último mensaje 24 Julio 2014, 00:57 am
por marchiali
Ayuda algoritmo
Programación C/C++
frikiboom1 1 1,421 Último mensaje 5 Octubre 2014, 18:13 pm
por milx86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines