Arrays de disitintos tipos de datos C#
Publicado por Iñigo (2 intervenciones) el 18/09/2010 12:09:15
Antes de nada saludaros a todos ya que soy nuevo en el foro :): . Mi duda es la siguiente; toy programando una aplicación que trabaje con distintos algoritmos de ordenación, y estoy planteandome la posibilidad de que pueda trabajar con datos int, double o incluso char, pero no se me ocurre el modo de hacerlo, os comento un poco por encima la estructura del programa que estoy realizando para ver si es posible añadir esta funcionalidad:
De momento mi programa consta de una clase "Ordenación", que tiene los métodos "Insertar", "Insertar aleatorio", "Mostrar", "Ordenar"... de la cual heredan una serie de clases que serán los distintos algoritmos de ordenación; "Burbuja", "QuickSort", "Inserción"...Luego tengo el main, desde el cual por medio de menús, selecciono el tipo de algoritmo a utilizar y las operaciones que se quieran realizar con ellos, todo esto instanciando objetos de tipo "Ordenación" ya que por medio del poliformismo se ejecutará en cada caso el método ordenar requerido. Pues bien, el caso es que no veo el modo de poder trabajar con arrays de distintos tipos...Si teneis alguna idea o sugerencia.. Os adjunto algo de código que tengo hecho:
/// método llamado desde otro menú del main una vez hayamos elegido ///el tipo de algoritmo con el que vamos a trabajar
/// el objeto algoritmo es de tipo Ordenación
public static void MenúModo(Ordenación algoritmo,int tamaño)
{
int modo;
int[] vector = new int[tamaño];
do
{
Console.Clear();
Console.WriteLine(".- SELECCIONA UNA OPCIÓN");
Console.WriteLine("1.- INTRODOCIR VECTOR MANUALMENTE");
Console.WriteLine("2.- GENERAR VECTOR ALEATORIO");
Console.WriteLine("3.- ORDENAR VECTOR: ORDEN ASCENDENTE");
Console.WriteLine("4.- ORDENAR VECTOR: ORDEN DESCENDENTE");
Console.WriteLine("5.- MOSTRAR VECTOR");
Console.WriteLine("6.- BORRAR VECTOR");
Console.WriteLine("7.- VOLVER AL MENÚ");
Console.Write("Elija opción(1-7): ");
modo = Convert.ToInt32(Console.ReadLine());
switch (modo)
{
case 1:
algoritmo.Insertar(vector);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
case 2:
algoritmo.InsertarAleatorio(vector);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
case 3:
Console.WriteLine("Ordenando....");
algoritmo.Ordenar(vector);
Console.WriteLine("¡Vector ordenado en orden ascendente!");
Console.WriteLine("Tiempo empleado"+algoritmo.TiempoEjecución);
Console.WriteLine("nº comparaciones:" + algoritmo.NumComparaciones);
Console.WriteLine("nº intercambios" + algoritmo.NumIntercambios);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
///Clase ancestro de clases; "Burbuja", "Selección"..., cada cual con su propio método ordenar
public class Ordenación
{
protected long tiempoEjecución;
protected int numComparaciones;
protected int numIntercambios;
public void Insertar(int[] vector)
{
for (int i = 0; i < vector.Length; i++)
{
Console.Write("Introduzca elemento["+i+"]");
try
{
int elemento = Convert.ToInt32(Console.ReadLine());
vector[i] = elemento;
}
catch (FormatException )
{
Console.WriteLine("Elemento incorrecto");
}
}
}
///Clase Burbuja
public class Burbuja: Ordenación
{
private int nComparaciones = 0;
private int nIntercambios = 0;
public override void Ordenar(int[] vector)
{
Stopwatch temporizador = new Stopwatch();
temporizador.Start();
int sup = vector.Length - 1;
int temp;
for (int i = sup; i >= 1; i--)
{
for (int j = 0; j <= i - 1; j++)
if (vector[j] > vector[j + 1])
{
temp = vector[j];
vector[j] = vector[j + 1];
vector[j + 1] = temp;
nIntercambios++;
}
nComparaciones ++;
}
temporizador.Stop();
TiempoEjecución = temporizador.ElapsedMilliseconds;
NumComparaciones = nComparaciones;
NumIntercambios = nIntercambios;
}
De momento mi programa consta de una clase "Ordenación", que tiene los métodos "Insertar", "Insertar aleatorio", "Mostrar", "Ordenar"... de la cual heredan una serie de clases que serán los distintos algoritmos de ordenación; "Burbuja", "QuickSort", "Inserción"...Luego tengo el main, desde el cual por medio de menús, selecciono el tipo de algoritmo a utilizar y las operaciones que se quieran realizar con ellos, todo esto instanciando objetos de tipo "Ordenación" ya que por medio del poliformismo se ejecutará en cada caso el método ordenar requerido. Pues bien, el caso es que no veo el modo de poder trabajar con arrays de distintos tipos...Si teneis alguna idea o sugerencia.. Os adjunto algo de código que tengo hecho:
/// método llamado desde otro menú del main una vez hayamos elegido ///el tipo de algoritmo con el que vamos a trabajar
/// el objeto algoritmo es de tipo Ordenación
public static void MenúModo(Ordenación algoritmo,int tamaño)
{
int modo;
int[] vector = new int[tamaño];
do
{
Console.Clear();
Console.WriteLine(".- SELECCIONA UNA OPCIÓN");
Console.WriteLine("1.- INTRODOCIR VECTOR MANUALMENTE");
Console.WriteLine("2.- GENERAR VECTOR ALEATORIO");
Console.WriteLine("3.- ORDENAR VECTOR: ORDEN ASCENDENTE");
Console.WriteLine("4.- ORDENAR VECTOR: ORDEN DESCENDENTE");
Console.WriteLine("5.- MOSTRAR VECTOR");
Console.WriteLine("6.- BORRAR VECTOR");
Console.WriteLine("7.- VOLVER AL MENÚ");
Console.Write("Elija opción(1-7): ");
modo = Convert.ToInt32(Console.ReadLine());
switch (modo)
{
case 1:
algoritmo.Insertar(vector);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
case 2:
algoritmo.InsertarAleatorio(vector);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
case 3:
Console.WriteLine("Ordenando....");
algoritmo.Ordenar(vector);
Console.WriteLine("¡Vector ordenado en orden ascendente!");
Console.WriteLine("Tiempo empleado"+algoritmo.TiempoEjecución);
Console.WriteLine("nº comparaciones:" + algoritmo.NumComparaciones);
Console.WriteLine("nº intercambios" + algoritmo.NumIntercambios);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
///Clase ancestro de clases; "Burbuja", "Selección"..., cada cual con su propio método ordenar
public class Ordenación
{
protected long tiempoEjecución;
protected int numComparaciones;
protected int numIntercambios;
public void Insertar(int[] vector)
{
for (int i = 0; i < vector.Length; i++)
{
Console.Write("Introduzca elemento["+i+"]");
try
{
int elemento = Convert.ToInt32(Console.ReadLine());
vector[i] = elemento;
}
catch (FormatException )
{
Console.WriteLine("Elemento incorrecto");
}
}
}
///Clase Burbuja
public class Burbuja: Ordenación
{
private int nComparaciones = 0;
private int nIntercambios = 0;
public override void Ordenar(int[] vector)
{
Stopwatch temporizador = new Stopwatch();
temporizador.Start();
int sup = vector.Length - 1;
int temp;
for (int i = sup; i >= 1; i--)
{
for (int j = 0; j <= i - 1; j++)
if (vector[j] > vector[j + 1])
{
temp = vector[j];
vector[j] = vector[j + 1];
vector[j + 1] = temp;
nIntercambios++;
}
nComparaciones ++;
}
temporizador.Stop();
TiempoEjecución = temporizador.ElapsedMilliseconds;
NumComparaciones = nComparaciones;
NumIntercambios = nIntercambios;
}
Valora esta pregunta


0