[ Foro de C# ]
Mi duda es como hacer una busqueda binaria y secuencial. Cogí como ejemplo una práctica ya expuesta dónde por lo visto también se pide, pero es que leo tutoriales del tema y no me entero. Si alguien me puede ayudar se lo agradecería
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace Practica1MenuNotas
{
//Declaramos como pública la estructura de la tabla que vamos a hacer después.
struct dato
{
public int numero;
public string nombre;
public double nota;
}
class Program
{
//static int numero = 1;
static void Main(string[] args)
{
dato[] tabla = new dato[5];
//Dclaro primero la variable op dentro de la función Main y seguidamente hago un
//do-while en el cual llamo al menú para que se efectúe
//el bucle que repite el menú si no pulsamos 0.
//Seguidamente hago un switch que es el que recogerá las diferentes llamadas a las funciones
//cuando introduzca el número que está en el menú indicado.
/*int op = Menu();*/
//Llamo a la función opciones que va a recibir tabla.
opciones (tabla);
/*Console.ReadLine();*///NO HACE FALTA
}
//Aquí he conseguido meter el switch dentro de una función aparte.
//Lo que he hecho ha sido crear una función estática que no devuelva ningún valor.
//static void opciones y dentro de opciones lo que hacemos es meterle los parámetros a la tabla dato.
//Luego en la función principal Main llamo a la funciójn opciones.
static void opciones(dato [] tabla)
{
/*int i = 0;*/
int op;
do
{
op = Menu();
switch (op)
{
case 1:
Console.Write("<------------>\n");
Console.Write("<- 1. ALTAS ->\n");
Console.Write("<------------>\n");
Altas(tabla);//Llamo a la función de altas.
/*Console.ReadLine();*/
break;
case 2:
Console.Write("<------------>\n");
Console.Write("<- 2. BAJAS ->\n");
Console.Write("<------------>\n");
bajas(tabla);//Llamo a la función de bajas.
/*Console.ReadLine();*/
break;
case 3:
Console.Write("<--------------------->\n");
Console.Write("<- 3. MODIFICACIONES ->\n");
Console.Write("<--------------------->\n");
modificaciones(tabla);//Llamo a la función de modificaciones.
/*Console.ReadLine();*/
break;
case 4:
Console.Write("<---------------->\n");
Console.Write("<- 4. CONSULTAS ->\n");
Console.Write("<---------------->\n");
consultas(tabla);
/*Console.ReadLine();*/
break;
case 5:
Console.Write("<-------------->\n");
Console.Write("<- 5. ORDENAR ->\n");
Console.Write("<-------------->\n");
Console.ReadLine();
break;
case 6:
Console.Write("<-------------------------->\n");
Console.Write("<- 6. BÚSQUEDA SECUENCIAL ->\n");
Console.Write("<-------------------------->\n");
Console.ReadLine();
break;
case 7:
Console.Write("<----------------------->\n");
Console.Write("<- 7. BÚSQUEDA BINARIA ->\n");
Console.Write("<----------------------->\n");
Console.ReadLine();
break;
case 8:
Console.Write("<-------------->\n");
Console.Write("<- 8. MEZCLAR ->\n");
Console.Write("<-------------->\n");
Console.ReadLine();
break;
}
} while (op != 0);
}
//FUNCIÓN Menu.
static int Menu()
{
//int op = 0;
//Limpiamos Pantalla.
Console.Clear();
//Aquí el menú.
Console.WriteLine("<-----------Menú de opciones----------->");
//Thread.Sleep(300);
Console.WriteLine(" | 1- Altas |");
//Thread.Sleep(320);
Console.WriteLine(" | 2- Bajas |");
//Thread.Sleep(325);
Console.WriteLine(" | 3- Modificaciones |");
//Thread.Sleep(330);
Console.WriteLine(" | 4- Consultas |");
//Thread.Sleep(335);
Console.WriteLine(" | 5- Ordenar |");
//Thread.Sleep(340);
Console.WriteLine(" | 6- Búsqueda secuencial |");
//Thread.Sleep(345);
Console.WriteLine(" | 7- Búsqueda Binaria |");
//Thread.Sleep(350);
Console.WriteLine(" | 8- Mezclar |");
//Thread.Sleep(355);
Console.WriteLine(" | 0- Salir |");
//Thread.Sleep(360);
Console.WriteLine("<-------------------------------------->");
//Thread.Sleep(365);
Console.Write("--->Seleccione una opción del menú: ");
int op = Convert.ToInt32(Console.ReadLine());
return (op);
}//FIN FUNCIÓN MENU
//Función que revisa si el id ingresado está o no repetido.
static int comprobacion(dato[] tabla, int comprueba)
{
int i;
for (i = 0; i < tabla.Length; i++)
{
if (tabla[i].numero == comprueba)
{
return i;
}
}
return -1;
}
// 1) INICIO FUNCION ALTAS
static void Altas(dato[] tabla)
{
int comprueba,check,c=1;
Console.Clear();
for (int i = 0; i < tabla.Length;i++)
if (tabla[i].numero == 0)
{
Console.Write("Inserte el Id. del alumno: ");
comprueba = Convert.ToInt32(Console.ReadLine());
check = comprobacion(tabla, comprueba);
if (check == -1)
{
while (c != 0)
{
tabla[i].numero = comprueba;
c = 0;
}
}
else
{
Console.Write("....¡ERROR!.... No es posible ingresar el mismo id. para varios alumnos.\n pulse una tecla para continuar\n");
Console.Read();
break;
}
Console.Write("\n Introduzca nombre: ");
tabla[i].nombre = Console.ReadLine();
Console.Write("\n Introduzca nota: ");
tabla[i].nota = Convert.ToDouble(Console.ReadLine());
}
else
{
Console.Write("\nSe ha alcanzado el número máximo de datos. \n\n TABLA LLENA.... Saliendo al menú...");
Console.ReadLine();
break;
}
/*Console.Write("Inserte el Id. del alumno: ");
comprueba = Convert.ToInt32(Console.ReadLine());
i = comprobacion(tabla, comprueba);
if (i == -1)
{
for (i = 0; i < tabla.Length && c != 0; i++)
{
if (tabla[i].numero == 0)
{
tabla[i].numero = comprueba;
c = 0;
}
}
}
else
{
Console.Write("....¡ERROR!.... No es posible ingresar el mismo id. para varios alumnos.\n pulse una tecla para continuar");
Console.ReadLine();
}
for (i = 0; i < tabla.Length; i++)
{
}
Console.Write("Escriba el nombre del alumno: ");*/
//Lo de arriba lo dejo comentado de forma provisional.... Lo de abajo lo mismo...
/*for (int i = 0; i < tabla.Length; i++)
{
if (tabla[i].numero == 0)
{
/*string confirmacion;*/
// Console.Write("Introduzca el Id. del alumno: ");
//tabla[i].numero = Convert.ToInt32(Console.ReadLine());
/*Console.Write("\n {0}", i);*/
/* Console.Write("\n Introduzca nombre: ");
tabla[i].nombre = Console.ReadLine();
Console.Write("\n Introduzca nota: ");
tabla[i].nota = Convert.ToDouble(Console.ReadLine());
numero++;
/*if (numero <= tabla.Length)
{
Console.Write("\n¿Desea continuar?(s,n)");
confirmacion = Console.ReadLine();
if (confirmacion == "n")
{
break;
}
}*/
/* }
else
{
Console.Write("\nSe ha alcanzado el número máximo de datos. \n\n TABLA LLENA.... Saliendo al menú...");
Console.ReadLine();
break;
}
}
/*return (j);*/
}//FIN FUNCION ALTAS
// 2) INICIO FUNCION BAJAS
static void bajas(dato[] tabla)
{
Console.Write("Introduzca el id del alumno que quiere eliminar de la tabla:");
int n = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < tabla.Length; i++)
{
if (n == tabla[i].numero)
{
tabla[i].numero = 0;
}
}
}//FIN FUNCION BAJAS
// 3) INICIO FUNCIÓN MODIFICACIONES
static void modificaciones(dato[] tabla)
{
Console.Write("Introduzca el id del alumno que desea modificar:");
int modif = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < tabla.Length; i++)
{
if (modif == tabla[i].numero)
{
Console.Write("Introduzca el nuevo nombre:");
tabla[i].nombre = Console.ReadLine();
Console.Write(".");
Thread.Sleep(300);
Console.Write(".");
Thread.Sleep(350);
Console.Write(".");
Thread.Sleep(360);
Console.Write(".");
Thread.Sleep(365);
Console.Write(".");
Thread.Sleep(370);
Console.Write(" ¡Acción Realizada Correctamente!");
Console.Write("\n\n Presione una tecla para continuar y modificar la nota...");
Console.ReadLine();
Console.Write("Introduzca la nueva nota:");
tabla[i].nota = Convert.ToDouble(Console.ReadLine());
Console.Write(".");
Thread.Sleep(300);
Console.Write(".");
Thread.Sleep(350);
Console.Write(".");
Thread.Sleep(360);
Console.Write(".");
Thread.Sleep(365);
Console.Write(".");
Thread.Sleep(370);
Console.Write(" ¡La nota ha sido cambada correctamente!");
Console.Write("\n Acaba de cambiar los datos del alumno que ha seleccionado.\n Pulse una tecla para volver al menú");
}
}
}
// 4) INICIO FUNCION CONSULTAS
static void consultas(dato[] tabla)
{
for (int i = 0; i < tabla.Length; i++)
{
if (tabla[i].numero != 0)
{
Console.Write("Id. | Nombre | Nota\n");
Console.Write("----------------------------\n");
Console.Write(tabla[i].numero + " || " + tabla[i].nombre + " || " + tabla[i].nota + "\n"); // muestra la tabla.
Thread.Sleep(500);
Console.ReadLine();
}
}
}//FIN FUNCION CONSULTAS
}
}
Vamos por partes. Aquí tienes la idea de cómo hacer la búsqueda secuencial y un ejemplo:
http://www.aprendeaprogramar.com/mod/resource/view.php?id=725
Confírmame si entiendes eso y seguimos.
Oks. Eso lo entiendo.
La búsqueda binaria es un poco más difícil, pero no mucho. Mira el final de este apartado:
http://www.aprendeaprogramar.com/mod/resource/view.php?id=732
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)