20 - Vectores (ordenamiento con vectores paralelos) |
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.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PruebaVector16 { class PruebaVector16 { private string[] nombres; private int[] notas; public void Cargar() { nombres=new string[5]; notas=new int[5]; Console.WriteLine("Carga de nombres y notas"); for(int f=0;f < nombres.Length;f++) { Console.Write("Ingese el nombre del alumno:"); nombres[f]=Console.ReadLine(); Console.Write("Ingrese la nota del alumno:"); string linea; linea = Console.ReadLine(); notas[f]=int.Parse(linea); } } public void Ordenar() { for (int k = 0; k < notas.Length; k++) { for (int f = 0; f < notas.Length - 1 - k; f++) { if (notas[f] < notas[f + 1]) { int auxnota; auxnota = notas[f]; notas[f] = notas[f + 1]; notas[f + 1] = auxnota; string auxnombre; auxnombre = nombres[f]; nombres[f] = nombres[f + 1]; nombres[f + 1] = auxnombre; } } } } public void Imprimir() { Console.WriteLine("Nombres de alumnos y notas de mayor a menor"); for(int f=0;f < notas.Length;f++) { Console.WriteLine(nombres[f] + " - " + notas[f]); } Console.ReadLine(); } static void Main(string[] args) { PruebaVector16 pv = new PruebaVector16(); pv.Cargar(); pv.Ordenar(); pv.Imprimir(); } } }
Definimos los dos vectores:
private string[] nombres; private int[] notas;
Creamos los dos vectores paralelos con cinco elementos cada uno:
nombres=new string[5]; notas=new int[5];
En el proceso de ordenamiento dentro de los dos for verificamos si debemos intercambiar los elementos del vector notas:
for (int k = 0; k < notas.Length; k++) { for (int f = 0; f < notas.Length - 1 - k; f++) { if (notas[f] < notas[f + 1]) {
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:
int auxnota; auxnota = notas[f]; notas[f] = notas[f + 1]; notas[f + 1] = auxnota;
y simultánemamente procedemos a intercambiar los elementos del vector paralelo (con esto logramos que los dos vectores continuen siendo vectores paralelos):
string auxnombre; 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 (int y string)
Si deseamos ordenar alfabéticamente la condición dependerá del vector nombres.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PruebaVector17 { class PruebaVector17 { private string[] paises; private int[] habitantes; public void Cargar() { paises=new string[5]; habitantes=new int[5]; Console.WriteLine("Carga de paises y habitantes"); for(int f=0;f < paises.Length;f++) { Console.Write("Ingese el nombre del pais:"); paises[f]=Console.ReadLine(); Console.Write("Ingrese la cantidad de habitantes:"); string linea; linea = Console.ReadLine(); habitantes[f]=int.Parse(linea); } } public void OrdenarPorNombres() { for (int k = 0; k < paises.Length; k++) { for (int f = 0; f < paises.Length - 1 - k; f++) { if (paises[f].CompareTo(paises[f + 1]) > 0) { string auxpais; auxpais = paises[f]; paises[f] = paises[f + 1]; paises[f + 1] = auxpais; int auxhabitante; auxhabitante = habitantes[f]; habitantes[f] = habitantes[f + 1]; habitantes[f + 1] = auxhabitante; } } } } public void OrdenarPorHabitantes() { for (int k = 0; k < paises.Length; k++) { for (int f = 0; f < paises.Length - 1 - k; f++) { if (habitantes[f] < habitantes[f + 1]) { string auxpais; auxpais = paises[f]; paises[f] = paises[f + 1]; paises[f + 1] = auxpais; int auxhabitante; auxhabitante = habitantes[f]; habitantes[f] = habitantes[f + 1]; habitantes[f + 1] = auxhabitante; } } } } public void Imprimir() { for(int f=0;f < paises.Length;f++) { Console.WriteLine(paises[f] + " - " + habitantes[f]); } } static void Main(string[] args) { PruebaVector17 pv = 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(); } } }