Guia de Laboratorio 03

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

ESCUELA PROFESIONAL DE INGENIERIA

DE SISTEMAS

GUIA DE LABORATORIO N° 03
Escuela Profesional : Ingeniería de Sistemas Asignatura: Estructura de Datos
Ciclo y Turno : Tercero – Tarde Semestre Académico: 2022 -1
Docente: Dr. Hoower A. Puicon Zapata Fecha : 26/04/2022

Sesión 3: Ordenamiento
INTRODUCCION
Hasta ahora hemos visto cómo procesar información, y hemos mantenido el
flujo de entrada / salida de información a través de componentes visuales.
Pero muchas vecesla información necesaria, de entrada o salida, se presentará
en estructuras de datos llamadas archivos con el uso de arreglo de objetos,
almacenadas en nuestro disco duro.

I. OBJETIVOS

1. Codificar, compilar y ejecutar los ejercicios de aplicación.


2. Conocer la estructura de un programa visual en Java.
3. Se espera que el estudiante asocie los conocimientos nuevos con
la “nuevaplantilla” que se propone.

II. EQUIPOS Y MATERIALES


 Computadora personal.
 Programa NetBeans IDE 8.1 correctamente instalado.
 Notas de los ejercicios resueltos en la clase.

III. METODOLOGIA Y ACTIVIDADES


 Codificar los ejercicios desarrollados en el aula.
 Presentar avances y ejecución de cada uno de los ejercicios al
docente o jefe depráctica encargado para la calificación
correspondiente.
 Guardar la carpeta de sus archivos a sus memorias.
 Apagar el computador y dejarla en buen estado al retirarse del
laboratorio dejartodo en orden.
IV. IMPORTANTE
 Antes de comenzar a manipular el NetBeans crear siempre, una
carpeta, donde se guardarán todas las aplicaciones realizadas en el
presente laboratoriocon el nombre LABORAT-03.

V. MANEJO DEL SOFTWARE


ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

1. Ejercicio ordenamiento rápido

IMPLEMENTACIÓN
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

2. Ejercicio mezcla

BOTON AGREGAR
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

IMPLEMENTACIÓN
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

3. Ordena un array de números con Sort de Arrays.

4. Ordenar un array de números con el método de la burbuja.


ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

4. Ordenar un array de cadenas con el método Quicksort.


ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

5. Ordenar un array de números con el método que quieras y hacer una búsqueda binaria de
cualquier número.
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

6. Desarrollar una aplicación para realizar el registro de Alumnos. Los datos a almacenar son dni, nombres,
edad, promedio. Utilizar para este ejercicio ordenamiento recursivo QuickSort.

Creando la clase Alumno:

public class Alumno {


String dni,nom;
int edad;
double prom;
public Alumno() {
}
public Alumno(String dni, String nom, int edad, double prom) {
this.dni = dni;
this.nom = nom;
this.edad = edad;
this.prom = prom;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS
public double getProm() {
return prom;
}
public void setProm(double prom) {
this.prom = prom;
}
}

Creando la clase QuickSort


public class Quick {
public void ordenarQ(Alumno[] array) {
array= quicksort1(array);
}

public Alumno[] quicksort1(Alumno numeros[]) {


return quicksort2(numeros, 0, numeros.length-1); //se entrega el arreglo, posicion izquierda y
derecha del arreglo
}

public Alumno[] quicksort2(Alumno numeros[], int izq, int der) { //recepciona


if (izq >= der) { //verifica que no haya cruce entre posiciones
return numeros;
}
int i = izq, d = der;
if (izq != der) { //realice los cambios
int pivote;
Alumno aux;
pivote = izq; //se asigna la izquierda al pivote
while (izq != der) {
while (numeros[der].getEdad() >= numeros[pivote].getEdad() && izq < der) {
der--;
}
while (numeros[izq].getEdad()< numeros[pivote].getEdad() && izq < der) {
izq++;
}
if (der != izq) {
aux = numeros[der];
numeros[der] = numeros[izq];
numeros[izq] = aux;
}
}
if (izq == der) {
quicksort2(numeros, i, izq - 1);
quicksort2(numeros, izq + 1, d);
}
} else {
return numeros;
}
return numeros;
}
}

Ingresando elementos a un arreglo de Alumnos para realizar el ordenamiento:


package Vista;

import Control.Merge;
import Control.Quick;
import Modelo.Alumno;
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

public class Consola {

public static void main(String[] args) {


Alumno[] array = new Alumno[3];

array[0] = new Alumno("41742587","Juan Perez",21,14);


array[1] = new Alumno("10587458","Diego Livano",27,11);
array[2] = new Alumno("52962858","Vania Salcedo",17,12);

System.out.println("ANTES DEL ORDENAMIENTO");


String cad="";
for(Alumno a:array) //recorre 1 hasta el N
{
cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";
}
System.out.println(cad);

Quick objQ = new Quick();


objQ.ordenarQ(array);

System.out.println("DESPUES DEL ORDENAMIENTO");


cad="";
for(Alumno a:array) //recorre 1 hasta el N
{
cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";
}
System.out.println(cad);
}

Como resultado tenemos:

Ahora realizaremos el mismo ejercicio con ordenamiento recursivo MergeSort:


Implementamos la clase Alumno:
package Modelo;

public class Alumno {


String dni,nom;
int edad;
double prom;

public Alumno() {
}

public Alumno(String dni, String nom, int edad, double prom) {


this.dni = dni;
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS
this.nom = nom;
this.edad = edad;
this.prom = prom;
}

public String getDni() {


return dni;
}

public void setDni(String dni) {


this.dni = dni;
}

public String getNom() {


return nom;
}

public void setNom(String nom) {


this.nom = nom;
}

public int getEdad() {


return edad;
}

public void setEdad(int edad) {


this.edad = edad;
}

public double getProm() {


return prom;
}

public void setProm(double prom) {


this.prom = prom;
}

Luego implementamos la clase Mergesort


package Control;

import Modelo.Alumno;

public class Merge {


public void ordenarM(Alumno[] array) {
array = mergesort(array,0, array.length - 1);
}

public Alumno[] mergesort(Alumno vector[], int izq, int der) {


int mitad;
if (der > izq) {
mitad = (der + izq) / 2;
mergesort(vector, izq, mitad);
mergesort(vector, mitad + 1, der);
merge(vector, izq, mitad + 1, der);
}
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS
return vector;
}

private void merge(Alumno vector[], int izq, int mitad, int der) {
Alumno[] aux = new Alumno[vector.length];//Vector auxiliar
int contador = 0;
int i = izq;//Indice de la parte izquierda
int j = mitad;//Indice de la parte derecha
int k = izq;//Indice del vector resultante

while ((i <= mitad - 1) && (j <= der)) {


//Mientras que i esta en la parte izq y j en la dcha
if (vector[i].getEdad() <= vector[j].getEdad()) {
aux[k++] = vector[i++];
} else {
aux[k++] = vector[j++];
}

}
//Copia los elementos que estaban en la posicion correcta:
while (i <= mitad - 1) {
aux[k++] = vector[i++];
}

while (j <= der) {


aux[k++] = vector[j++];
}

//Copia los elementos en el vector original


for (i = izq; i <= der; i++) {
vector[i] = aux[i];
}

}
}
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

Por ultimo implementamos en modo consola el algoritmo recursivo MergeSort:


package Vista;

import Control.Merge;
import Control.Quick;
import Modelo.Alumno;

public class Consola {

public static void main(String[] args) {


Alumno[] array = new Alumno[3];

array[0] = new Alumno("41742587","Juan Perez",21,14);


array[1] = new Alumno("10587458","Diego Livano",27,11);
array[2] = new Alumno("52962858","Vania Salcedo",17,12);

System.out.println("ANTES DEL ORDENAMIENTO");


String cad="";
for(Alumno a:array) //recorre 1 hasta el N
{
cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";
}
System.out.println(cad);

Merge objM = new Merge();


objM.ordenarM(array);

System.out.println("DESPUES DEL ORDENAMIENTO");


cad="";
for(Alumno a:array) //recorre 1 hasta el N
{
cad = cad + "["+a.getNom()+"]"+"["+a.getEdad()+"]";
}
System.out.println(cad);
}

Como resultado tenemos lo siguiente:


ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

EJERCICIOS PROPUESTOS

1. La empresa seguros S.A.C desea implementar una aplicación que permita el manejo de su data, con
los siguientes requerimientos:
Elabore un programa que ordene mediante QuickSort por código de los trabajadores que incluyen
código, nombre, apellido, sexo, edad, estado civil, área (Contabilidad o Finanzas), fecha de ingreso
(Formato SimpleDateFormat) y muestre una estadística que indique:
 Número de vocales totales, consonantes, dígitos, espacios en blanco y otros símbolos, con
su respectivo porcentaje.
 Número de trabajadores por sexo, número de trabajadores por área, número de trabajadores
por estado civil, número de trabajadores mayores y menores de edad.
2. Desarrollar una aplicación para realizar el registro de nuevos productos. Los datos a almacenar son
código, descripción, stock, stock mínimo y precio. Utilizar para este ejercicio ordenamiento
recursivo MergeSort.
3. Desarrollar una aplicación para realizar el registro de clientes. Los datos a almacenar son código,
nombres, dni, genero, correo y celular. Utilizar para este ejercicio ordenamiento recursivo
QuickSort.
4. Crear un método recursivo que muestre los primeros 20 números pares y ordenarlos usando el
algoritmo de ordenamiento rápido
5. Crear un método recursivo que ingrese datos a un vector y ordenarlos usando el algoritmo de
ordenamiento rápido y mezcla
6. Crear un método recursivo que liste los elementos ingresados a un vector y ordenarlos usando el
algoritmo de ordenamiento por mezcla
7. Implementar una aplicación que registre 10 números y que muestre posteriormente los números
impares Ordenados En Forma Ascendente. Utilice Métodos De Ordenamiento.
8. Ingrese Nombres De Equipos de Futbol Con Su Respectivo Puntaje Visualizarlo Ordenados Por el
Puntaje, Utilizando Métodos rápido Y Burbuja.
9. Escriba un método recursivo que realice una búsqueda secuencial. El método debe devolver la
posición del elemento en la lista ó -1 si el número no se encuentra en la lista.
10. Construya un programa que invoque a dicho método para realizar una búsqueda de un número
entero leído por teclado en una lista de 10 números inicializada en el método main. El programa
debe imprimir si ha encontrado el número y su posición en la lista. 2. Escriba un método recursivo
que realice una ordenación por selección de menor a mayor. Construya un programa que invoque a
dicho método para realizar una ordenación de una lista de 10 números inicializada en el método
main. El programa debe imprimir tanto la lista sin ordenar como la ordenada.
11. Qué imprime el siguiente programa?
ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

12. ¿Qué imprime el siguiente programa?

13. ¿Cuál es el resultado del siguiente programa?


ESCUELA PROFESIONAL DE INGENIERIA
DE SISTEMAS

VI. RESULTADOS
- El estudiante desarrolla los ejercicios propuestos utilizando el IDE Netbeans 8.2.

VII. RÚBRICA DE LA EVALUACIÓN

Inicio (M) Proceso (R) Logro previsto (R+) Logro satisfactorio (B)
0-10 11-13 14-17 18-20
Desarrollo Desarrollo Desarrollo Desarrollo
correctamente del correctamente del correctamente del correctamente del
laboratorio hasta un laboratorio hasta un laboratorio hasta un laboratorio hasta un
50 % 60 % 80 % 100%

También podría gustarte