Cuando se tienen vectores paralelos y se ordena uno de ellos hay que tener la precaución de intercambiar los elementos de los vectores paralelos.
Confeccionar un programa que permita cargar los nombres de 5 alumnos y sus notas respectivas. Luego ordenar las notas de mayor a menor. Imprimir las notas y los nombres de los alumnos.
Module Module1 Public Class PruebaVector16 Private nombres(4) As String Private notas(4) As Integer Public Sub Cargar() Console.WriteLine("Carga de nombres y notas") Dim f As Integer For f = 0 To nombres.GetUpperBound(0) Console.Write("Ingese el nombre del alumno:") nombres(f) = Console.ReadLine() Console.Write("Ingrese la nota del alumno:") notas(f) = Console.ReadLine() Next End Sub Public Sub Ordenar() Dim f, k As Integer For k = 0 To notas.GetUpperBound(0) - 1 For f = 0 To notas.GetUpperBound(0) - 1 - k If notas(f) < notas(f + 1) Then Dim auxnota As Integer auxnota = notas(f) notas(f) = notas(f + 1) notas(f + 1) = auxnota Dim auxnombre As String auxnombre = nombres(f) nombres(f) = nombres(f + 1) nombres(f + 1) = auxnombre End If Next Next End Sub Public Sub Imprimir() Console.WriteLine("Nombres de alumnos y notas de mayor a menor") Dim f As Integer For f = 0 To notas.GetUpperBound(0) Console.WriteLine(nombres(f) & " - " & notas(f)) Next Console.ReadKey() End Sub End Class Sub Main() Dim pv As New PruebaVector16() pv.Cargar() pv.Ordenar() pv.Imprimir() End Sub End Module
Definimos los dos vectores de 5 elementos cada uno (comienzan a numerarse a partir de cero las componentes):
Private nombres(4) As String Private notas(4) As Integer
En el proceso de ordenamiento dentro de los dos for verificamos si debemos intercambiar los elementos del vector notas:
Dim f, k As Integer For k = 0 To notas.GetUpperBound(0) - 1 For f = 0 To notas.GetUpperBound(0) - 1 - k If notas(f) < notas(f + 1) Then
En el caso que la nota de la posición 'f' sea menor a de la posición siguiente 'f+1' procedemos a intercambiar las notas:
Dim auxnota As Integer auxnota = notas(f) notas(f) = notas(f + 1) notas(f + 1) = auxnota
y simultáneamente procedemos a intercambiar los elementos del vector paralelo (con esto logramos que los dos vectores continúen siendo vectores paralelos):
Dim auxnombre As String auxnombre = nombres(f) nombres(f) = nombres(f + 1) nombres(f + 1) = auxnombre
Como vemos utilizamos dos auxiliares distintos porque los elementos de los dos vectores son de distinto tipo (Integer y String)
Module Module1 Public Class PruebaVector17 Private paises(4) As String Private habitantes(4) As Integer Public Sub Cargar() Dim f As Integer Console.WriteLine("Carga de paises y habitantes") For f = 0 To paises.GetUpperBound(0) Console.Write("Ingese el nombre del pais:") paises(f) = Console.ReadLine() Console.Write("Ingrese la cantidad de habitantes:") habitantes(f) = Console.ReadLine() Next End Sub Public Sub OrdenarPorNombres() Dim f, k As Integer For k = 0 To paises.GetUpperBound(0) - 1 For f = 0 To paises.GetUpperBound(0) - 1 - k If paises(f) > paises(f + 1) Then Dim auxpais As String auxpais = paises(f) paises(f) = paises(f + 1) paises(f + 1) = auxpais Dim auxhabitante As Integer auxhabitante = habitantes(f) habitantes(f) = habitantes(f + 1) habitantes(f + 1) = auxhabitante End If Next Next End Sub Public Sub OrdenarPorHabitantes() Dim f, k As Integer For k = 0 To paises.GetUpperBound(0) - 1 For f = 0 To paises.GetUpperBound(0) - 1 - k If habitantes(f) < habitantes(f + 1) Then Dim auxpais As String auxpais = paises(f) paises(f) = paises(f + 1) paises(f + 1) = auxpais Dim auxhabitante As Integer auxhabitante = habitantes(f) habitantes(f) = habitantes(f + 1) habitantes(f + 1) = auxhabitante End If Next Next End Sub Public Sub Imprimir() Dim f As Integer For f = 0 To paises.GetUpperBound(0) Console.WriteLine(paises(f) & " - " & habitantes(f)) Next End Sub End Class Sub Main() Dim pv As New PruebaVector17() pv.Cargar() pv.OrdenarPorNombres() Console.WriteLine("Ordenados alfabéticamente") pv.Imprimir() pv.OrdenarPorHabitantes() Console.WriteLine("Ordenados por cantidad de habitnates") pv.Imprimir() Console.ReadKey() End Sub End Module