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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ayuda con ordenamiento de vector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ordenamiento de vector  (Leído 2,084 veces)
josezamp

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda con ordenamiento de vector
« en: 30 Octubre 2014, 13:33 pm »

Hola gente! Estoy desarrollando un código que tiene el siguiente enunciado:

a) Sumar los elementos de un vector.
b) Devolver si un número ingresado es positivo, negativo o cero.
c) Ordenar los elementos de una matriz en forma ascendente.
Utilizar procedimientos y funciones para realizar los incisos a, b y c. Todos los resultados deben imprimirse en el programa principal.


Por lo que mi código va quedando de la siguiente manera:
Código
  1. Module Module1
  2.  
  3.    Sub Main()
  4.        Dim vector(5, 2) As String ' declaro la matriz
  5.        Dim suma As Integer
  6.        Call valores(vector, suma)
  7.        For i = 1 To 5
  8.            Console.WriteLine("Valor ingresado en el vector {0} = {1} y es {2}", i, vector(i, 1), vector(i, 2))
  9.        Next
  10.        Console.WriteLine("Suma de los valores ingresados: {0}", suma)
  11.        Console.ReadLine()
  12.    End Sub
  13.    Sub valores(ByRef vector, ByRef suma)
  14.        suma = 0
  15.        For i = 1 To 5
  16.            Console.Write("Escriba el valor para el vector {0}º: ", i)
  17.            vector(i, 1) = Console.ReadLine ' ingreso los valores para la matriz
  18.            Select Case vector(i, 1)
  19.                Case Is < 0
  20.                    vector(i, 2) = "menor que cero"
  21.                Case Is > 0
  22.                    vector(i, 2) = "mayor que cero"
  23.                Case Is = 0
  24.                    vector(i, 2) = "igual a cero"
  25.            End Select
  26.        Next
  27.        For i = 1 To 5
  28.            suma = suma + vector(i, 1) ' sumo los elementos del vector
  29.        Next
  30.  
  31.    End Sub
  32.  
  33. End Module
  34.  
Pero no sé qué método utilizar para que el programa ordene la matriz en forma ascendente ¿Algún consejo?
Desde ya, gracias  :)


« Última modificación: 30 Octubre 2014, 14:08 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Ayuda con ordenamiento de vector
« Respuesta #1 en: 30 Octubre 2014, 16:09 pm »

¿Es explicitamente necesario usar un array 2D para el ejercicio?, lo comento porque personalmente no apoyo el uso de los array multi-dimensionales en VB.Net ya que realmente un array multi-dimensional no está soportado por la infraestructura de VB.NET (sin ir más lejos ni siquiera los soporta los métodos de la Class Array), en su defecto deberías usar un Array que contenga como elementos otros arrays uni-dimensionales, es decir, un 'Jagged Array' (dim arr()() as Integer) y el ordenamiento sería mucho más sencillo, pero en este caso específico deberías olvidarte de eso ya que lo mejor que deberías hacer es crear tu propio objeto para añadir los datos y usarlo en un array uni-dimensional.

Además, implementar la interface IComparer para comparar/ordenar con ese array 2D que tienes con dos datatypes diferentes (integer, string) resulta algo tedioso engorroso.

Y aparte, los índices en .NET empiezan por 0, no por 1, estás dejando elementos vacios y si te acostumbras a eso provocarás errores en tiempo de ejecución al intentar acceder a esos elementos vacios en el futuro.

Podría haberte escrito un ejemplo utilizando Arrays multi-dimensionales o Array de arrays (Jagged Array) pero ya que me pongo a escribir he preferido hacerlo utilizando el modo que considero más óptimo y esperando que no te sea completamente necesario la utilización de Array 2D, espero que te sirva.

Puedes adaptar el código a tus necesidades:

Código
  1. Public NotInheritable Class MyData : Implements IComparable(Of MyData)
  2.  
  3.    ''' <summary>
  4.    ''' </summary>
  5.    Public Property Index As Integer
  6.  
  7.    ''' <summary>
  8.    ''' </summary>
  9.    Public Property Value As Integer
  10.  
  11.    ''' <summary>
  12.    ''' </summary>
  13.    Public Property Condition As String
  14.  
  15.    ''' <summary>
  16.    ''' MSDN Documentation: http://msdn.microsoft.com/en-us/library/system.icomparable.compareto%28v=vs.110%29.aspx
  17.    ''' Compares the current instance with another object of the same type
  18.    ''' and returns an integer that indicates whether the current instance precedes,
  19.    ''' follows, or occurs in the same position in the sort order as the other object.
  20.    ''' </summary>
  21.    ''' <param name="obj">An object to compare with this instance.</param>
  22.    ''' <returns> A value that indicates the relative order of the objects being compared.</returns>
  23.    Public Overloads Function CompareTo(ByVal obj As MyData) As Integer _
  24.    Implements IComparable(Of MyData).CompareTo
  25.  
  26.        Return Value.CompareTo(obj.Value)
  27.  
  28.    End Function
  29.  
  30. End Class

Código
  1. Module Module1
  2.  
  3.    ''' <summary>
  4.    ''' Defines the entry point of the application.
  5.    ''' </summary>
  6.    Friend Sub Main()
  7.  
  8.        Dim data() As MyData = AddData(4)
  9.  
  10.        ' Unsorted
  11.        PrintData(data)
  12.        Console.ReadKey()
  13.  
  14.        ' Sorted
  15.        Array.Sort(data)
  16.        PrintData(data)
  17.        Console.ReadKey()
  18.  
  19.    End Sub
  20.  
  21.    ''' <summary>
  22.    ''' Adds the data.
  23.    ''' </summary>
  24.    ''' <param name="count">The item count to create.</param>
  25.    Public Function AddData(ByVal count As Integer) As MyData()
  26.  
  27.        If count <= 0 Then
  28.            Throw New ArgumentException("Parameter value can't be zero or negative", "count")
  29.            Return Nothing
  30.        End If
  31.  
  32.        Dim data(count) As MyData
  33.        Dim value As Integer
  34.        Dim condition As String
  35.  
  36.        For index As Integer = 0 To count
  37.  
  38.            Console.Write(String.Format("Escriba el valor para el vector {0}º: ",
  39.                                        CStr(index)))
  40.  
  41.            Try
  42.                value = Console.ReadLine
  43.  
  44.            Catch ex As Exception
  45.                Throw
  46.  
  47.            End Try
  48.  
  49.            Select Case value
  50.  
  51.                Case Is < 0
  52.                    condition = "menor que cero"
  53.  
  54.                Case Is > 0
  55.                    condition = "mayor que cero"
  56.  
  57.                Case Else ' Is = 0
  58.                    condition = "igual a cero"
  59.  
  60.            End Select
  61.  
  62.            data(index) = New MyData With
  63.                              {
  64.                                .Index = index,
  65.                                .Value = value,
  66.                                .Condition = condition
  67.                              }
  68.  
  69.        Next index
  70.  
  71.        Return data
  72.  
  73.    End Function
  74.  
  75.    ''' <summary>
  76.    ''' Prints the data.
  77.    ''' </summary>
  78.    ''' <param name="data">The data.</param>
  79.    Private Sub PrintData(ByVal data() As MyData)
  80.  
  81.        Dim sum As Integer =
  82.            (From item As MyData In data
  83.             Select item.Value).Sum
  84.  
  85.        For Each item As MyData In data
  86.  
  87.            Console.WriteLine(String.Format("Valor ingresado en el vector {0} = {1} y es {2}",
  88.                                            CStr(item.Index), CStr(item.Value), item.Condition))
  89.  
  90.        Next item
  91.  
  92.        Console.WriteLine(String.Format("Suma de los valores ingresados: {0}",
  93.                                        CStr(sum)))
  94.  
  95.    End Sub
  96.  
  97. End Module





EDITO:
He escrito este ejemplo para demostrarte como lo podrías hacer con un Array 2D, está un poco hardcodeado... no es de uso genérico, y no te recomiendo usar este método ya que un Array 2D no es el "Contenedor" más apropiado para tus intenciones, siempre hay que buscar el Type/Contenedor más adecuado para cada situación...

Código
  1. Class CustomArrayComparer : Implements IComparer
  2.  
  3.    ' Maintain a reference to the 2D array being sorted.
  4.    Private sortedArray(,) As String
  5.  
  6.    Public Sub New(ByVal array(,))
  7.        sortedArray = array
  8.    End Sub
  9.  
  10.    ''' <summary>
  11.    ''' Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
  12.    ''' </summary>
  13.    ''' <param name="x">The first object to compare.</param>
  14.    ''' <param name="y">The second object to compare.</param>
  15.    ''' <returns>
  16.    ''' A signed integer that indicates the relative values of <paramref name="x"/> and <paramref name="y"/>,
  17.    ''' </returns>
  18.    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
  19.    Implements IComparer.Compare
  20.  
  21.        ' x and y are integer row numbers into the sortArray
  22.        Dim i1 As Integer = DirectCast(x, Integer)
  23.        Dim i2 As Integer = DirectCast(y, Integer)
  24.  
  25.        ' compare the items in the sortArray
  26.        Return sortedArray(i1, 0).CompareTo(sortedArray(i2, 0))
  27.  
  28.    End Function
  29.  
  30. End Class

Código
  1. Module Module1
  2.  
  3.    ''' <summary>
  4.    ''' Defines the entry point of the application.
  5.    ''' </summary>
  6.    Friend Sub Main()
  7.  
  8.        Dim data(,) As String = AddData(Of String)(4, 1)
  9.  
  10.        ' Unsorted
  11.        PrintData(data) : Console.ReadKey()
  12.  
  13.        ' Sorted
  14.        PrintDataSorted(data) : Console.ReadKey()
  15.  
  16.    End Sub
  17.  
  18.    ''' <summary>
  19.    ''' Adds the data.
  20.    ''' </summary>
  21.    Public Function AddData(Of T)(ByVal d1Size As Integer,
  22.                                  ByVal d2Size As Integer) As T(,)
  23.  
  24.        If d1Size <= 0 Then
  25.            Throw New ArgumentException("Parameter value can't be zero or negative", "d1Size")
  26.            Return Nothing
  27.  
  28.        ElseIf d2Size <= 0 Then
  29.            Throw New ArgumentException("Parameter value can't be zero or negative", "d2Size")
  30.            Return Nothing
  31.  
  32.        End If
  33.  
  34.        Dim data(d1Size, d2Size) As T ' As String
  35.        Dim value As Integer
  36.        Dim condition As T
  37.  
  38.        For index As Integer = 0 To d1Size
  39.  
  40.            Console.Write(String.Format("Escriba el valor para el vector {0}º: ",
  41.                                        CStr(index)))
  42.  
  43.            Try
  44.                value = CInt(Console.ReadLine)
  45.  
  46.            Catch ex As Exception
  47.                Throw
  48.  
  49.            End Try
  50.  
  51.            Select Case value
  52.  
  53.                Case Is < 0
  54.                    condition = CType(CObj("menor que cero"), T)
  55.  
  56.                Case Is > 0
  57.                    condition = CType(CObj("mayor que cero"), T)
  58.  
  59.                Case Else ' Is = 0
  60.                    condition =CType(CObj("igual a cero"), T)
  61.  
  62.            End Select
  63.  
  64.            data(index, 0) = CType(CObj(value), T)
  65.            data(index, 1) = CType(CObj(condition), T)
  66.  
  67.        Next index
  68.  
  69.        Return data
  70.  
  71.    End Function
  72.  
  73.    ''' <summary>
  74.    ''' Prints the data.
  75.    ''' </summary>
  76.    Private Sub PrintData(Of T)(ByVal data As T(,))
  77.  
  78.        Dim sum As Integer
  79.  
  80.        For index As Integer = 0 To (data.GetLength(0) - 1)
  81.  
  82.            Dim value As Integer = Convert.ToInt32(data(index, 0))
  83.            Dim condition As String = Convert.ToString(data(index, 1))
  84.            sum += value
  85.  
  86.            Console.WriteLine(String.Format("Valor ingresado en el vector {0} = {1} y es {2}",
  87.                                            CStr(index), CStr(value), condition))
  88.  
  89.        Next index
  90.  
  91.        Console.WriteLine(String.Format("Suma de los valores ingresados: {0}",
  92.                                        CStr(sum)))
  93.  
  94.    End Sub
  95.  
  96.    ''' <summary>
  97.    ''' Prints the data sorted.
  98.    ''' </summary>
  99.    Private Sub PrintDataSorted(Of T)(ByVal data As T(,))
  100.  
  101.        Dim sum As Integer
  102.  
  103.        Dim taggedArray() As Integer =
  104.            (From value As Integer
  105.             In Enumerable.Range(0, data.GetLength(0))
  106.             Select value).ToArray
  107.  
  108.        ' Initialize the comparer and sort
  109.        Dim myComparer As New CustomArrayComparer(data)
  110.        Array.Sort(taggedArray, myComparer)
  111.  
  112.        For index As Integer = 0 To (taggedArray.Length - 1)
  113.  
  114.            Dim value As Integer = Convert.ToInt32(data(taggedArray(index), 0))
  115.            Dim condition As String = Convert.ToString(data(taggedArray(index), 1))
  116.            sum += value
  117.  
  118.            Console.WriteLine(String.Format("Valor ingresado en el vector {0} = {1} y es {2}",
  119.                                            CStr(index), CStr(value), condition))
  120.  
  121.        Next index
  122.  
  123.        Console.WriteLine(String.Format("Suma de los valores ingresados: {0}",
  124.                                        CStr(sum)))
  125.  
  126.    End Sub
  127.  
  128. End Module

Saludos


« Última modificación: 30 Octubre 2014, 17:42 pm por Eleкtro » En línea



Senior++


Desconectado Desconectado

Mensajes: 957

Ama y haz lo que te de la gana


Ver Perfil
Re: Ayuda con ordenamiento de vector
« Respuesta #2 en: 31 Octubre 2014, 12:05 pm »

El ejercicio C, lo puedes hacer con el método burbuja, es decir funciona de la siguiente manera...

Arreglo:
Posicion 0 --> 20
Posicion 1 ---> 30
posicion 3 ---> 15

Si posicion 0 es mas CHICO que posicion 0+1
 {
creas una variable auxiliar que sea igual a posicion 0
posicion 0 = posicion 0 + 1
posicion 0+1 = auxiliar

}

Tampoco te aconsejo que tengas valores fijos en los vectores, es decir que sean random o ingresados por el usuario, es decir puedes utilizar:

Console.writeline("Ingresa un numero");
int numeroIngresado = int.parse(Console.readLine()); // Analiza lo que esta dentro del paréntesis y lo convierte a entero

El valor que te genere lo guardas en un arreglo de tipo entero de X dimensiones
En línea

Vendo cuenta de LEAGUE OF LEGENDS lvl 30, EU west, muy barata
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Ordenamiento en Java
Java
ErnestS3 1 3,884 Último mensaje 25 Noviembre 2010, 01:51 am
por ErnestS3
Ayuda con Programa en c/c++ para Ordenamiento.
Programación C/C++
BKsiragon 1 2,271 Último mensaje 15 Enero 2013, 01:08 am
por durasno
Ayuda! Validacion de Datos en Ordenamiento.
Programación C/C++
BKsiragon 9 3,512 Último mensaje 2 Febrero 2013, 21:30 pm
por leosansan
Ayuda C - Archivos - Ordenamiento
Programación C/C++
juanjuanjuanjuan 4 2,314 Último mensaje 12 Febrero 2014, 04:14 am
por juanjuanjuanjuan
Ayuda con ordenamiento de nombres y numeros
Java
Tada 3 1,970 Último mensaje 2 Abril 2016, 23:44 pm
por LaiaxanIV
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines