Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package taller.pkg1.ciclos.arrays.y.matrices;
- import java.time.temporal.ChronoUnit;
- import java.util.Arrays;
- import java.util.Random;
- import java.util.Timer;
- import javax.swing.JOptionPane;
- /**
- *
- * @author juanf
- */
- public class Taller1CiclosArraysYMatrices {
- private String[][] camionesBascula;
- private String[][] listaViajes;
- private char[][] letras;
- private int[] arreglo10;
- private int[] arreglo50;
- private int[] arreglo100;
- private int[] arreglo500;
- private int[] arreglo1000;
- public void inicializarMatrizBascula(){
- camionesBascula = new String[50][6];
- listaViajes = new String[50][6];
- }
- public void inicializarArreglosOrdenamiento(){
- arreglo10 = new int[10000];
- arreglo50 = new int[50000];
- arreglo100 = new int[100000];
- arreglo500 = new int[500000];
- arreglo1000 = new int[1000000];
- Random generador = new Random();
- for (int i = 0; i < arreglo10.length; i++) {
- int numeroRandom = generador.nextInt();
- arreglo10[i] = numeroRandom;
- }
- for (int i = 0; i < arreglo50.length; i++) {
- int numeroRandom = generador.nextInt();
- arreglo50[i] = numeroRandom;
- }
- for (int i = 0; i < arreglo100.length; i++) {
- int numeroRandom = generador.nextInt();
- arreglo100[i] = numeroRandom;
- }
- for (int i = 0; i < arreglo500.length; i++) {
- int numeroRandom = generador.nextInt();
- arreglo500[i] = numeroRandom;
- }
- for (int i = 0; i < arreglo1000.length; i++) {
- int numeroRandom = generador.nextInt();
- arreglo1000[i] = numeroRandom;
- }
- }
- public void ingresarPesaje(String placaVehiculo, String peso, String destino, String dia, String mes, String anio){
- for (int i = 0; i < camionesBascula.length; i++) {
- if (camionesBascula[i][0] == null){
- camionesBascula[i][0] = placaVehiculo;
- camionesBascula[i][1] = peso;
- camionesBascula[i][2] = destino;
- camionesBascula[i][3] = dia;
- camionesBascula[i][4] = mes;
- camionesBascula[i][5] = anio;
- break;
- }
- }
- if (camionesBascula[49][0] != null){
- JOptionPane.showMessageDialog(null, "La matriz está llena. No se pueden almacenar más datos.", "Base de datos llena", JOptionPane.ERROR_MESSAGE);
- }
- }
- public String mostrarCantidadViajesYPeso(){
- String resultado = "";
- int contadorViajes = 0;
- double contadorPeso = 0;
- for (int i = 0; i < camionesBascula.length; i++) {
- if (camionesBascula[i][0] != null){
- contadorViajes++;
- contadorPeso += Double.parseDouble(camionesBascula[i][1]);
- }else{
- break;
- }
- }
- resultado += "La cantidad de viajes total es: " + contadorViajes +"\n El peso total de los viajes es: " + contadorPeso;
- return resultado;
- }
- public void mostrarCantidadViajesYPesoPorDestino(){
- int contadorBuenaventura = 0;
- double promedioBuenaventura = 0.0;
- int contadorBogota = 0;
- double promedioBogota = 0.0;
- int contadorBarranquilla = 0;
- double promedioBarranquilla = 0.0;
- for (int i = 0; i < camionesBascula.length; i++) {
- if (camionesBascula[i][0] != null){
- if( camionesBascula[i][2].equals("1")){
- contadorBuenaventura++;
- promedioBuenaventura += Double.parseDouble(camionesBascula[i][1]);
- }else if( camionesBascula[i][2].equals("2")){
- contadorBogota++;
- promedioBogota += Double.parseDouble(camionesBascula[i][1]);
- }else if( camionesBascula[i][2].equals("3")){
- contadorBarranquilla++;
- promedioBarranquilla += Double.parseDouble(camionesBascula[i][1]);
- }
- }
- }
- JOptionPane.showMessageDialog(null, "Total de viajes a Buenaventura: " + contadorBuenaventura +
- "\n Promedio de peso de viajes a Buenaventura: " + (promedioBuenaventura/contadorBuenaventura) +
- "\n Total de viajes a Bogotá: " + contadorBogota +
- "\n Promedio de peso de viajes a Bogotá: " + (promedioBogota/contadorBogota) +
- "\n Total de viajes a Barranquilla: " + contadorBarranquilla +
- "\n Promedio de peso de viajes a Barranquilla: " + (promedioBarranquilla/contadorBarranquilla)
- );
- }
- public String[][] ingresarViajeConsulta(String placaDestino, String peso,String destino, String dia, String mes, String anio){
- for (int i = 0; i < listaViajes.length; i++) {
- if ( listaViajes[i][0] == null){
- listaViajes[i][0] = placaDestino;
- listaViajes[i][1] = peso;
- listaViajes[i][2] = destino;
- listaViajes[i][3] = dia;
- listaViajes[i][4] = mes;
- listaViajes[i][5] = anio;
- break;
- }
- }
- return listaViajes;
- }
- public String calcularDestino(String destino){
- String destinoString = "";
- if (destino.equals("1")){
- destinoString = "Buenaventura.";
- }else if (destino.equals("2")){
- destinoString = "Bogotá.";
- }else if (destino.equals("3") ){
- destinoString = "Barranquilla.";
- }else {
- destinoString = "No válido.";
- }
- return destinoString;
- }
- public String imprimirMatrizViajes(String[][] matrizViajes){
- String texto ="";
- for (int i = 0; i < matrizViajes.length; i++) {
- if(matrizViajes[i][0] != null){
- texto += "Placa del vehículo: " + matrizViajes[i][0] +
- "\n Peso del vehículo: " + matrizViajes[i][1] +
- "\n Destino del vehículo:" + calcularDestino(matrizViajes[i][2]) +
- "\n Fecha del viaje del vehículo: " + matrizViajes[i][3] + "/" + matrizViajes[i][4] + "/" + matrizViajes[i][5] +
- "\n _____________________________________________________\n";
- }else{
- break;
- }
- }
- return texto;
- }
- public void consultarViajesPorFechaYDestino(String diaConsulta, String mesConsulta, String anioConsulta, String destinoConsulta){
- int contadorConsulta = 0;
- if( camionesBascula[0][0] != null){
- for (int i = 0; i < camionesBascula.length; i++) {
- if ( diaConsulta.equals(camionesBascula[i][3]) &&
- mesConsulta.equals(camionesBascula[i][4]) &&
- anioConsulta.equals(camionesBascula[i][5]) &&
- destinoConsulta.equals(camionesBascula[i][2])){
- ingresarViajeConsulta(camionesBascula[i][0], camionesBascula[i][1], camionesBascula[i][2], camionesBascula[i][3], camionesBascula[i][4], camionesBascula[i][5]);
- }
- }
- }else{
- JOptionPane.showMessageDialog(null, "No hay viajes registrados en la base de datos.", "Viajes no encontrados", JOptionPane.ERROR_MESSAGE);
- }
- if (listaViajes[0] != null){
- JOptionPane.showMessageDialog(null, imprimirMatrizViajes(listaViajes));
- }else{
- JOptionPane.showMessageDialog(null, "No hay viajes que coincidan con los términos ingresados.", "Viajes no encontrados", JOptionPane.ERROR_MESSAGE);
- }
- limpiarArreglo();
- }
- public void inicializarMatrizAbecedario (int i , int j){
- if ( i*j != 28){
- JOptionPane.showMessageDialog(null, "Dimensión incorrecta. Por favor asegurese de que la combinación de filas*columnas sea igual a 28", "Error de dimensión de matriz", JOptionPane.ERROR_MESSAGE);
- }else{
- letras = new char[i][j];
- }
- }
- public void llenarMatrizAbecedarioMinusculas(){
- Random generador = new Random();
- for(int i = 0; i < letras.length; i++){
- for (int j = 0; j < letras[i].length; j++) {
- int numeroRandom = (generador.nextInt(26) +98);
- if (numeroRandom == 122){
- letras[i][j] = 'ñ';
- }else if (numeroRandom == 123){
- letras[i][j] = ' ';
- }else if(numeroRandom == 124){
- break;
- }else{
- letras[i][j] = (char)numeroRandom;
- }
- }
- }
- }
- public void llenarMatrizAbecedarioMayusculas(){
- Random generador = new Random();
- for(int i = 0; i < letras.length; i++){
- for (int j = 0; j < letras[i].length; j++) {
- int numeroRandom = (generador.nextInt(26) + 67);
- if (numeroRandom == 91){
- letras[i][j] = 'Ñ';
- }else if (numeroRandom == 92){
- letras[i][j] = ' ';
- }else{
- letras[i][j] = (char)numeroRandom;
- }
- }
- }
- }
- public String imprimirMatrizLetras(){
- String matriz = "";
- for (int i = 0; i < letras.length; i++){
- matriz += Arrays.toString(letras[i]);
- }
- return matriz;
- }
- public String insertionSort (int[] arreglo){
- String conclusion = "";
- int arregloTemporal[] = new int[arreglo.length];
- arregloTemporal = arreglo.clone();
- long tiempoInicial = System.currentTimeMillis();
- long contadorComparaciones = 0;
- long contadorAsignaciones = 0;
- long cantidadIntercambios = 0;
- contadorAsignaciones++;
- contadorComparaciones++;
- for (int i = 1; i < arregloTemporal.length; ++i) {
- int llave = arregloTemporal[i];
- int j = i - 1;
- contadorAsignaciones += 2;
- contadorComparaciones++;
- while (j >= 0 && arregloTemporal[j] > llave) {
- arregloTemporal[j + 1] = arregloTemporal[j];
- j = j - 1;
- cantidadIntercambios++;
- contadorAsignaciones+=3;
- }
- arregloTemporal[j + 1] = llave;
- contadorAsignaciones+= 2;
- }
- contadorAsignaciones++;
- long tiempoFinal = System.currentTimeMillis();
- long tiempoEjecucion = tiempoFinal - tiempoInicial;
- conclusion += "El arreglo ha sido ordenado satisfactoriamente con el método de Inserción. \n"
- + "El algoritmo tardó " + tiempoEjecucion + " milisegundos en ejecutarse.\n"
- + "Realizó: \n" + contadorComparaciones + " comparaciones.\n"
- + contadorAsignaciones + " asignaciones. \n"
- + cantidadIntercambios + " intercambios. \n";
- return conclusion;
- }
- public String quicksort(int[] arreglo, int izquierda, int derecha) {
- String conclusion = "";
- int arregloTemporal[] = new int[arreglo.length];
- arregloTemporal = arreglo.clone();
- long tiempoInicial = System.currentTimeMillis();
- long contadorComparaciones = 0;
- long contadorAsignaciones = 0;
- long cantidadIntercambios = 0;
- int pivote=arregloTemporal[izquierda];
- contadorAsignaciones++;
- int i=izquierda;
- int j=derecha;
- contadorAsignaciones += 2;
- int aux;
- while(i < j){
- contadorComparaciones++;
- while(arregloTemporal[i] <= pivote && i < j) {
- i++;
- contadorComparaciones++;
- }
- while(arregloTemporal[j] > pivote) {
- j--;
- contadorComparaciones++;
- }
- if (i < j) {
- contadorComparaciones++;
- contadorAsignaciones += 2;
- aux= arreglo[i];
- arregloTemporal[i]=arregloTemporal[j];
- arregloTemporal[j]=aux;
- cantidadIntercambios += 1;
- }
- }
- long tiempoFinal = System.currentTimeMillis();
- long tiempoDeEjecucion = tiempoFinal - tiempoInicial;
- conclusion += "El arreglo ha sido ordenado satisfactoriamente con el método de Quick Sort. \n"
- + "El algoritmo tardó " + tiempoDeEjecucion + " milisegundos en ejecutarse.\n"
- + "Realizó: \n" + contadorComparaciones + " comparaciones.\n"
- + contadorAsignaciones + " asignaciones. \n"
- + cantidadIntercambios + " intercambios. \n";
- return conclusion;
- }
- public String selectionSort(int arreglo[]) {
- String conclusion = "";
- int arregloTemporal[] = new int[arreglo.length];
- arregloTemporal = arreglo.clone();
- long tiempoInicial = System.currentTimeMillis();
- long contadorComparaciones = 0;
- long contadorAsignaciones = 0;
- long cantidadIntercambios = 0;
- int n = arregloTemporal.length;
- contadorAsignaciones++;
- for (int i = 0; i < n-1; i++) {
- contadorComparaciones++;
- int minimo = i;
- contadorAsignaciones++;
- for (int j = i+1; j < n; j++) {
- contadorComparaciones++;
- if (arregloTemporal[j] < arregloTemporal[minimo]){
- contadorComparaciones++;
- minimo = j;
- contadorAsignaciones++;
- }
- }
- int temporal = arregloTemporal[minimo];
- contadorAsignaciones++;
- arregloTemporal[minimo] = arregloTemporal[i];
- cantidadIntercambios++;
- arregloTemporal[i] = temporal;
- contadorAsignaciones++;
- }
- long tiempoFinal = System.currentTimeMillis();
- long tiempoEjecucion = tiempoFinal - tiempoInicial;
- conclusion += "El arreglo ha sido ordenado satisfactoriamente con el método de Selección. \n"
- + "El algoritmo tardó " + tiempoEjecucion + " milisegundos en ejecutarse.\n"
- + "Realizó: \n" + contadorComparaciones + " comparaciones.\n"
- + contadorAsignaciones + " asignaciones. \n"
- + cantidadIntercambios + " intercambios. \n";
- return conclusion;
- }
- public void menu(){
- inicializarMatrizBascula();
- int opcion;
- do{
- String menu = JOptionPane.showInputDialog("Bienvenido al taller No.1 Por favor seleccione una opción."
- + "\n1. Aplicación de registro de báscula." +
- "\n2. Matriz NxM con letras aleatorias." +
- "\n3. Pruebas de ordenamiento y desempeño en arreglos." +
- "\n0. Cerrar la aplicación."
- );
- menu = menu.trim();
- opcion = Integer.parseInt(menu);
- switch(opcion){
- case 1:
- char opcionSubMenu;
- do{
- String subMenu = JOptionPane.showInputDialog("Bienvenido al registro de báscula. Por favor seleccione una opción" +
- "\na. Ingresar datos de un pesaje." +
- "\nb. Mostrar la cantidad de viajes realizados en total y el peso." +
- "\nc. Mostrar la cantidad a los 3 destinos y el peso promedio de los 3 destinos." +
- "\nd. Consultar los viajes por fecha y destino." +
- "\ne. Salir del submenú de báscula.");
- subMenu = subMenu.trim();
- opcionSubMenu = subMenu.charAt(0);
- switch(opcionSubMenu){
- case 'a':
- String placaVehiculo = JOptionPane.showInputDialog("Ingrese la placa del vehículo.");
- String peso = JOptionPane.showInputDialog("Ingrese el peso del vehículo.");
- String destino = JOptionPane.showInputDialog("Ingrese el destino del vehículo( 1 para Buenaventura, 2 para Bogotá y 3 para Barranquilla).");
- String dia = JOptionPane.showInputDialog("Ingrese el día del viaje.");
- String mes = JOptionPane.showInputDialog("Ingrese el més en el cual se realiza el viaje(como número).");
- String anio = JOptionPane.showInputDialog("Ingrese el año en el cual se realiza el viaje.");
- ingresarPesaje(placaVehiculo, peso, destino, dia, mes, anio);
- break;
- case 'b':
- JOptionPane.showMessageDialog(null, mostrarCantidadViajesYPeso());
- break;
- case 'c': mostrarCantidadViajesYPesoPorDestino() ; break;
- case 'd':
- String diaConsulta = JOptionPane.showInputDialog("Ingrese el día del cual quiere consultar los viajes");
- String mesConsulta = JOptionPane.showInputDialog("Ingrese el mes (en número) del cual quiere consultar los viajes");
- String anioConsulta = JOptionPane.showInputDialog("Ingrese el año del cual quiere consultar los viajes");
- String destinoConsulta = JOptionPane.showInputDialog("Ingrese el destino (en número) del cual quiere consultar los viajes");
- consultarViajesPorFechaYDestino(diaConsulta, mesConsulta, anioConsulta, destinoConsulta);
- break;
- case 'e':
- JOptionPane.showMessageDialog(null, "Está saliendo del submenú de báscula. Gracias por utilizar nuestros servicios.");
- break;
- default: JOptionPane.showMessageDialog(null, "Opción incorrecta. Por favor intente de nuevo.", "Opción Incorrecta", JOptionPane.ERROR_MESSAGE);
- }
- }while ( opcionSubMenu != 'e');
- break;
- case 2:
- int i = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el número de filas."));
- int j = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el número de columnas."));
- inicializarMatrizAbecedario(i, j);
- char opcionSubMenuLetras = JOptionPane.showInputDialog("¿Desea llenar la matriz con letras mayúsculas o minúsculas?" +
- "\n a. Minúsculas. " +
- "\n b. Mayúsculas.").charAt(0);
- switch(opcionSubMenuLetras){
- case 'a':
- llenarMatrizAbecedarioMinusculas();
- JOptionPane.showMessageDialog(null, imprimirMatrizLetras());
- break;
- case 'b':
- llenarMatrizAbecedarioMayusculas();
- JOptionPane.showMessageDialog(null, imprimirMatrizLetras());
- break;
- default: JOptionPane.showConfirmDialog(null, "Opción Incorrecta. Por favor intente de nuevo.", "Opción Incorrecta", JOptionPane.ERROR_MESSAGE);
- }
- break;
- case 3:
- inicializarArreglosOrdenamiento();
- char ordenamiento = ' ';
- do{
- String subMenuOrdenamiento = JOptionPane.showInputDialog("Bienvenido al submenú de ordenamiento. Aquí haremos pruebas de rendimiento sobre arreglos de distinos tamaños con 3 métodos diferentes de ordenamiento (Inserción, Selección y Quick Sort).\n"
- + "Por favor que tamaño de arreglo desea probar bajo los 3 métodos anteriormente seleccionados:\n"
- + "a. Arreglo de 10.000 posiciones.\n"
- + "b. Arreglo de 50.000 posiciones. \n"
- + "c. Arreglo de 100.000 posiciones. \n"
- + "d. Arreglo de 500.000 posiciones. \n"
- + "e. Arreglo de 1'000.000 posiciones. \n"
- + "f. Salir del submenú de ordenamiento." );
- subMenuOrdenamiento = subMenuOrdenamiento.trim();
- ordenamiento = subMenuOrdenamiento.charAt(0);
- switch(ordenamiento){
- case 'a': JOptionPane.showMessageDialog(null, insertionSort(arreglo10) +
- selectionSort(arreglo10) +
- quicksort(arreglo10, 0, arreglo10.length - 1));
- break;
- case 'b':
- JOptionPane.showMessageDialog(null, insertionSort(arreglo50) +
- selectionSort(arreglo50) +
- quicksort(arreglo50, 0, arreglo50.length - 1));
- break;
- case 'c':
- JOptionPane.showMessageDialog(null, insertionSort(arreglo100) +
- selectionSort(arreglo100) +
- quicksort(arreglo100, 0, arreglo100.length - 1));
- break;
- case 'd':
- JOptionPane.showMessageDialog(null, insertionSort(arreglo500) +
- selectionSort(arreglo500) +
- quicksort(arreglo500, 0, arreglo500.length - 1));
- break;
- case 'e':
- JOptionPane.showMessageDialog(null, insertionSort(arreglo1000) +
- selectionSort(arreglo1000) +
- quicksort(arreglo1000, 0, arreglo1000.length - 1));
- break;
- case 'f':
- JOptionPane.showMessageDialog(null, "Está saliendo del submenú de ordenamiento. Gracias por utilizar nuestros servicios.");
- break;
- default: JOptionPane.showConfirmDialog(null, "Opción Incorrecta. Por favor intente de nuevo.", "Opción Incorrecta", JOptionPane.ERROR_MESSAGE);
- }
- }while (ordenamiento != 'f');
- break;
- case 0: JOptionPane.showMessageDialog(null, "Gracias por utilizar nuestra aplicación!");
- break;
- default: JOptionPane.showMessageDialog(null, "Opción incorrecta. Por favor intente de nuevo.");
- }
- }while (opcion != 0);
- }
- public static void main(String[] args) {
- Taller1CiclosArraysYMatrices taller = new Taller1CiclosArraysYMatrices();
- taller.menu();
- }
- private void limpiarArreglo() {
- for (int i = 0; i < listaViajes.length; i++) {
- listaViajes[i] = null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement