You are on page 1of 6

CURSO PROGRAMACIN II

UNIVERSIDAD DE CRDOBA
IV SEMESTRE

IMPLEMENTACIN MTODOS DE BSQUEDA Y ORDENAMIENTOS

En el siguiente ejercicio se disean tres clases en Java para implementar los


mtodos de bsqueda y ordenamiento estudiados hasta el momento. Inicialmente
se implementa una clase llamada Estudiantes, con los siguientes atributos: cdigo,
nombre del estudiante y su respectiva nota.

Despus se implementa la clase DeclararVectorObjetos, en donde se declara y se


crea un vector para almacenar objetos de la clase Estudiantes. En esta clase se
implementa el mtodo de ordenamiento Shell para ordenar el vector por nombres.

Tambin se implementan los mtodos de ordenamiento por intercambio y burbuja


para ordenar el vector por nota y cdigo respectivamente. Adems se implementa
el mtodo de bsqueda binaria, cual realiza la bsqueda de la informacin del
estudiante pasando como parmetro el cdigo.

Diseo de clases de la solucin:

DeclararVectorObjetos
Estudiantes
- tamano: int
- codigo: int - vectorEstudiantes: Estudiantes[]
- nombre: String
- nota: float + DeclararVectorObjetos(): void
+ crearVector(): void
+ Estudiantes(): void + setTamano(int N): void
+ setCodigo(int cod): void + getTamano(): int
+ setNombre(String nom): void + setVectorEstudiantes(int p, Estudiantes ve)
+ setNota(float n): void + getVectorEstudiantes(int p): Estudiantes
+ getCodigo(): int + cambiar(int p1, int p2): void
+ getNombre():String + ordenarShell(): void
+ getNota():float + ordenarIntercambio(): void
+ ordenarBurbuja(): void
+ bsuquedaBinaria(int dato): int

Main

+ mostrarVector(DeclararVectorObjetos obj): void


+ llenar(Estudiantes est): void
+ menu(): int
+ main(String[] args): void
CURSO PROGRAMACIN II
UNIVERSIDAD DE CRDOBA
IV SEMESTRE

Implementacin de la clase Estudiantes:


public class Estudiantes {
int codigo;
String nombre;
float nota;
public Estudiantes(){
codigo = 0;
String nombre = "";
float nota = 0;
}
public void setCodigo(int cod){
codigo = cod;
}
public void setNombre(String nom){
nombre = nom;
}
public void setNota(float n){
nota = n;
}
public int getCodigo(){
return codigo;
}
public String getNombre(){
return nombre;
}
public float getNota(){
return nota;
}
}

Implementacin de la clase DeclararVectorObjetos:

public class DeclararVectorObjetos {


int tamano; //Se define un atributo para asignar el tamao que tendr el vector.
private Estudiantes vectorEstudiantes[]; //Se declara un vector de la clase Estudiantes.
//Mtodo constructor del vector, se asignan los valores iniciales a los atributos de la clase.
public DeclararVectorObjetos(){
tamano = 0;
vectorEstudiantes = null;
}
//Se crea el vector de la clase Estudiantes y se asigna su tamao.
public void crearVector(){
vectorEstudiantes = new Estudiantes[tamano];
}
//Mtodos modificadores y selectores para asignar y obtener el tamao del vector.
public void setTamano(int N){
tamano = N;
}
CURSO PROGRAMACIN II
UNIVERSIDAD DE CRDOBA
IV SEMESTRE

public int getTamano(){


return tamano;
}
//Mtodos modificadores y selectores para agregar informacin al vector y obtener elementos.
//Se pasan como parmetros la posicin (dato entero) y un objeto de la clase Estudiantes (ve).
public void setVectorEstudiantes(int p, Estudiantes ve){
vectorEstudiantes[p] = ve;
}
public Estudiantes getVectorEstudiantes(int p){
return vectorEstudiantes[p];
}
//Se declara el mtodo que permite cambiar los elementos de dos posiciones del vector.
public void cambiar(int p1, int p2){
Estudiantes temp; //Los datos almacenados en el vector son objetos de la clase Estudiantes.
temp = getVectorEstudiantes(p1);
setVectorEstudiantes(p1, getVectorEstudiantes(p2));
setVectorEstudiantes(p2, temp);
}
//Se realiza el ordenamiento del vector utilizando el mtodo Shell, y se ordena por nombres.
public void ordenarShell(){
int i, n, cont;
n = (getTamano()-1)/2;
while(n != 0){
cont = 1;
while(cont != 0){
cont = 0;
for(i=n; i<=getTamano()-1; i++){
if(getVectorEstudiantes(i-n).getNombre().compareTo(getVectorEstudiantes(i).getNombre()) > 0){
cambiar(i, i-n);
cont = cont + 1;
}
}
}
n = n/2;
}
}
//Se realiza el ordenamiento del vector utilizando el mtodo por Intercambio, y se ordena por
//la nota obtenida.
public void ordenarIntercambio(){
int i, j;
for (i=0; i<=getTamano()-1; i++){
for (j=i+1; j<=getTamano()-1; j++){
if (getVectorEstudiantes(i).getNota() < getVectorEstudiantes(j).getNota()){
cambiar(i, j);
}
}
}
}
//Se realiza el ordenamiento del vector utilizando el mtodo Burbuja, y se ordena por codigo.
public void ordenarBurbuja(){
int i, j;
for (i=0; i<=getTamano()-1; i++){
for (j=0; j<=(getTamano()-i)-2; j++){
if (getVectorEstudiantes(j).getCodigo() > getVectorEstudiantes(j+1).getCodigo()){
CURSO PROGRAMACIN II
UNIVERSIDAD DE CRDOBA
IV SEMESTRE

cambiar(j, j+1);
}
}
}
}
//Se realiza la bsqueda de la informacin del estudiante utilizando el mtodo de bsqueda
//Binaria, se pasa como parmetro de bsqueda el codigo del estudiante.
public int bsuquedaBinaria(int dato){
int posicion, izq, der, centro; //Estas 4 variables almacenan posiciones del vector.
ordenarBurbuja(); //Para realizar la bsqueda el vector debe estar ordenado.
izq = 0; //Primera posicin del vector
der = getTamano()-1; //Ultima posicin del vector.
posicion = -1;
while ((izq <= der) && (posicion == -1)){
centro = (izq + der) / 2;
if (dato == (getVectorEstudiantes(centro).getCodigo()) ){
posicion = centro;
}else{
if (dato < (getVectorEstudiantes(centro).getCodigo())){
der = centro-1;
}else{
izq = centro+1;
}
}
}
return posicion;
}
}

Implementacin de la clase Main:

public class Main {

public static void mostrarVector(DeclararVectorObjetos obj){


String datosVector = "";
for(int i=0; i<=obj.getTamano()-1; i++){
datosVector = datosVector+String.valueOf("CODIGO:
"+obj.getVectorEstudiantes(i).getCodigo()+" NOMBRE: "+
obj.getVectorEstudiantes(i).getNombre()+" NOTA: "+
obj.getVectorEstudiantes(i).getNota()+"\n");
}
JOptionPane.showMessageDialog(null, "============ ELEMENTOS DEL VECTOR
============"+"\n"+datosVector);
}
//Mtodo para crear un objeto de la clase estudiantes y asignarle los valores a sus atributos.
public static void llenar(Estudiantes est){
int cod = Integer.parseInt(JOptionPane.showInputDialog("Digite CODIGO del Estudiante: "));
est.setCodigo(cod);
String nom = JOptionPane.showInputDialog("Digite NOMBRE del Estudiante: ");
est.setNombre(nom);
float note = Float.parseFloat(JOptionPane.showInputDialog("Digite La NOTA del Estudiante:"));
est.setNota(note);
CURSO PROGRAMACIN II
UNIVERSIDAD DE CRDOBA
IV SEMESTRE

public static int menu(){


int opcion = 0;
do{
opcion = Integer.parseInt(JOptionPane.showInputDialog("====== SELECCIONE EL
METODO DE BUSQUEDA Y ORDENAMIENTO ====== \n"+
"1. Buscar Informacin del Estudiante \n"+"2. Ordenar por Nombres \n"+"3. Ordenar por
Notas \n"+
"4. Salir \n \n"+"Seleccione una opcin del 1 al 4"));
}while(opcion <= 0 || opcion > 4);
return opcion;
}

public static void main(String[] args) {


DeclararVectorObjetos obj = new DeclararVectorObjetos();
Estudiantes est;
int numeroElementos = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite el Nmero
de Elementos del Vector:"));
//Se pasa el dato capturado en numeroElementos al mtodo modificador del tamao para
//asignar el tamao que tendr el vector.
obj.setTamano(numeroElementos);
obj.crearVector(); //Se llama al mtodo que crea el vector en tiempo de ejecucin.
for(int i=0; i<=obj.getTamano()-1; i++){
//Cada vez que se quiere agregar un elemento al vector, se crea un nuevo objeto de la
//clase Estudiantes.
est = new Estudiantes();
JOptionPane.showMessageDialog(null, "============ ELEMENTOS DEL VECTOR
============"+"\n \n"+
"Ingresar la Informacin del estudiante ---- "+(i+1));
llenar(est); //Se asignan los valores al objeto de la clase Estudiantes.
//Se llama al mtodo modificador del vector para asignar en una determinada posicin un objeto
//de la clase Estudiantes.
obj.setVectorEstudiantes(i, est);
}
mostrarVector(obj);
int datoBuscar;
int posicionDato;
int opcion;
do{
opcion = menu();
switch(opcion) {
case 1:
datoBuscar = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite el dato que
desea buscar:"));
posicionDato = obj.bsuquedaBinaria(datoBuscar);
if(posicionDato != -1){
JOptionPane.showMessageDialog(null, "Nombre:
"+obj.getVectorEstudiantes(posicionDato).getNombre()+
" Nota: "+obj.getVectorEstudiantes(posicionDato).getNota());
}else{
JOptionPane.showMessageDialog(null, "El Estudiante No se Encuentra Registrado");
}
break;
CURSO PROGRAMACIN II
UNIVERSIDAD DE CRDOBA
IV SEMESTRE

case 2:
obj.ordenarShell();
mostrarVector(obj);
break;
case 3:
obj.ordenarIntercambio();
mostrarVector(obj);
break;
case 4:
break;
}
}while(opcion != 4);

}
}

You might also like