Resultados 1 al 5 de 5

Tema: valor máximo en una estructura, vb.net

  1. #1

    Predeterminado valor máximo en una estructura, vb.net

    Buenas de nuevo, mi problema consiste en que no sé como ordenar un array de estructuras por un campo de la estructura, a continuación os dejo el código con el problema en rojo:

    Código:
    Const NUM As Integer = 3
        Dim tabla(NUM) As Alumno
    
    
        Structure Alumno
            Public Nombre As String
            Public Edad As Integer
            Public Peso As String
            Public Function Mostrar() As String
                Dim s As String
                s = "Nombre: " & Nombre & "Edad: " & Edad & "Peso: " & Peso
                Return s
            End Function
        End Structure
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim mas As Integer
            Dim entre As Integer
            Dim menos As Integer
            Dim suma As Integer
    
    
            For index = 1 To NUM
                Dim a As Alumno = Nothing
                a.Edad = InputBox("Introduzca la edad del alumno: " & index)
                a.Peso = InputBox("Introduzca el peso del alumno: " & index)
                If a.Edad <> Nothing And a.Peso <> Nothing Then
                    tabla(index) = a
                    If CDbl(a.Peso) < 40 Then
                        menos += 1
                        TextBox1.Text = menos
                    ElseIf CDbl(a.Peso) > 60 Then
                        mas += 1
                        TextBox3.Text = mas
                    Else
                        entre += 1
                        TextBox2.Text = entre
                    End If
                Else
                    index -= 1
                End If
                suma += a.Edad
            Next
            TextBox6.Text = suma / NUM
            TextBox4.Text = tabla.Min().Edad
            TextBox5.Text = tabla.Max().Edad
    
    
        End Sub
    Realmente no sé si se puede hacer eso, alguien sabe cómo?
    Mi PC -> P6T Deluxe V2 | I7 950 3.06Ghz | GeForce GTX 460 OC 1GB GDDR5 | DDR3 1866 6GB 3x2GB CL9 | NOX Urano 600W | NZXT Lexa S | SB 7200.12 500Gb | Iomega 500Gb |

  2. #2
    Con domicilio en Noticias3d.com Avatar de lastMonkey
    Ubicación
    Fondo de Bikini
    Mensajes
    6,935

    Predeterminado Re: valor máximo en una estructura, vb.net

    Si no se trata de un ejercicio (que te obligue a usar estrcturas) yo utilizaría objetos
    Q9550 | EP45-DQ6 | 8GB DDR2 1066 HyperX | M4 128 + r0 F3x2 | GTX 550Ti | EVGA SuperNova G2 550W | TT Armor | Thermalright Ultra 120 | [W8x / W10]

  3. #3

    Predeterminado Re: valor máximo en una estructura, vb.net

    Correcto, lastMonkey se trata de un ejercicio que me obliga a usar estructuras (lo cual lo veo inútil porque para eso están los objetos pero bueno...)

    ¿alguna idea de por qué no se puede hacer lo que yo hago?
    Mi PC -> P6T Deluxe V2 | I7 950 3.06Ghz | GeForce GTX 460 OC 1GB GDDR5 | DDR3 1866 6GB 3x2GB CL9 | NOX Urano 600W | NZXT Lexa S | SB 7200.12 500Gb | Iomega 500Gb |

  4. #4

    Predeterminado Re: valor máximo en una estructura, vb.net

    Yo tampoco soy de los que usan estructuras, al final también termino utilizando objetos, pero por lo que he leído alguna vez de forma rápida, las estructuras tienen sentido porque requieren de menos recursos y son más eficientes en cuanto a acceso.

    Supongo que buscando estructuras vs objetos se encuentra bastante, pero la idea general es esa, son más eficientes.

    Siendo un ejercicio como comentas, igual tiene que ser también un array y no una lista u otro tipo de colección, ¿no? Porque en .NET se tienen algunas colecciones que ya tienen sus funciones para ordenar y no hace falta hacer nada. Pero no son arrays, por eso te comento que si tienen que ser estrictamente un array o no. Quizás lo que requiere el ejercicio es que implementes algún algoritmo de ordenación.



    Saludos.
    Daimroc.
    Última edición por daimroc; 07/02/2012 a las 08:14

  5. #5

    Predeterminado Re: valor máximo en una estructura, vb.net

    He hecho alguna prueba con arrays, que los tenía un poco olvidados ya que últimamente utilizo listas, pero he visto que sí tiene también funciones de ordenación.

    Yo las pruebas las he hecho con .NET 4.0, pero debería de servir con la versión 3.5, ya que lo que se necesita es tener acceso a Linq, si no estoy equivocado. Mi ejemplo te lo pongo en C# porque VB hace tiempo que no lo uso, pero espero que te sirva de guía.

    Yo la estrucutura que he utilizado ha sido la siguiente:

    struct Alumno
    {
    public string Nombre;
    public int Edad;
    public string Peso;

    }

    Es una versión reducida de tu estructura, porque donde declaras funciones dentro de la estructura no sé bien cómo funciona.

    Entonces he creado un array de dos elementos:

    Alumno[] miArray = new Alumno[2];
    Alumno miAlumno = new Alumno();
    miAlumno.Nombre = "Pedro";
    miAlumno.Edad = 20;
    miAlumno.Peso = "60";
    miArray[0] = miAlumno;

    Alumno miAlumno2 = new Alumno();
    miAlumno2.Nombre = "Juan";
    miAlumno2.Edad = 30;
    miAlumno2.Peso = "70";
    miArray[1] = miAlumno2;

    Y finalmente he ordenado el array del modo siguiente:

    miArray = miArray.OrderBy(a => a.Nombre).ToArray();

    Utilizando el método OrderBy y como parámetro, un criterio de ordenación.

    Cosas a tener en cuenta. Para ordenar el array se tiene que asignar el resultado a un array de destino para que se ordene, en este caso he asignado el resultado al propio array, para que sea éste el que quede ordenado y así no creo una variable nueva. Es decir, si hago solo miArray.OrderBy(a => a.Nombre).ToArray() no quedará ordenado.

    También es necesario indicar el destino del resultado mediante To.Array(), si no te dará un error de compilación, que ya te avisaría. Otros destinos pueden ser ToList() o ToDictionary().

    Por si no conoces Linq, que es lo que he utilizado como parámetro de la función OrderBy, es lo siguiente:

    a=>a.Nombre

    a: el tipo de objeto que se quiere ordenar. Como está delante del => indica el parámetro de búsqueda.

    => indica que es una expresión de criterio, en este caso de búsqueda, pero podría ser expresión de comparación o lo que sea, dependiendo de la función utilizada.

    a.Nombre: indica el campo por el que se quiere ordenar. Como "a" ya se sabe que es de tipo alumno, lo deduce el compilador, se tiene acceso a sus propiedades, y se puede indicar cualquiera de sus campos como criterio de búsqueda. En este caso el nombre. Se podría indicar la edad y entonces ordenaría por edad.

    También existe el método OrderByDescending que se usa del mismo modo pero que lo que hace es ordenar de forma descendente.



    Un saludo.
    Daimroc.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •