Para segunda evaluación.................... Ejercicios de matrices

  1.- Crear una matriz de 3×3 con los números del 1 al 9. Mostrar por pantalla, tal como aparece en la matriz.

public class Ejercicio_1 {
 
    public static void main(String[] args) {
         
        int matriz[][]=new int[3][3];
         
        //i = filas y j = columnas
        for(int i=0;i<matriz.length;i++){
            for(int j=0;j<matriz[0].length;j++){
                matriz[i][j]=(i*matriz.length)+(j+1);
                System.out.print(matriz[i][j]+" ");
                 
            }
            System.out.println("");
        }
         
    }
     
}


2.- Crear una matriz de 5 filas y n columnas (se pide al usuario). Rellenarlo con números aleatorios entre 0 y 10.
import java.util.Scanner;
 
public class Ejercicio_2 {
 
    
    public static void main(String[] args) {
         
        Scanner sn=new Scanner(System.in);
         
        System.out.println("Escriba un numero de columnas");
        int columnas=sn.nextInt();
         
        int matriz[][]=new int[5][columnas];
         
        for(int i=0;i<matriz.length;i++){
            for(int j=0;j<matriz[0].length;j++){
                matriz[i][j]=generaNumAleatorio(0,9);
                System.out.print(matriz[i][j]+" ");
            }
            System.out.println("");
             
        }
         
    }
     
    public static int generaNumAleatorio(int minimo,int maximo){
         
        return (int)Math.floor(Math.random()*(minimo-(maximo+1))+(maximo+1));
         
    }
     
}


3.-  Crear dos matrices de nxn y sumar sus valores, los resultados se deben almacenar en otra matriz.
Los valores y la longitud, seran insertados por el usuario. Mostrar las matrices originales y el resultado.

import java.util.Scanner;
 
public class Ejercicio_3 {
 
    public static void main(String[] args) {
         
        Scanner sn=new Scanner(System.in);
         
        System.out.println("Escribe un tamaño");
        int tamanio=sn.nextInt();
         
        int matriz1[][]=new int[tamanio][tamanio];
        int matriz2[][]=new int[tamanio][tamanio];
         
        int resultado[][]=new int[tamanio][tamanio];
         
        for(int i=0;i<matriz1.length;i++){
            for(int j=0;j<matriz1[0].length;j++){
                 
                System.out.println("Escriba el valor para la fila "+i+" y columna "+j+" de la matriz 1");
                matriz1[i][j]=sn.nextInt();
                System.out.println("Escriba el valor para la fila "+i+" y columna "+j+" de la matriz 2");
                matriz2[i][j]=sn.nextInt();
                 
                resultado[i][j]=matriz1[i][j]+matriz2[i][j];
            }
        }
         
        System.out.println("Matriz 1");
        muestraMatriz(matriz1);
         
        System.out.println("Matriz 2");
        muestraMatriz(matriz2);
         
        System.out.println("Matriz resultante");
        muestraMatriz(resultado);
                 
    }
     
    public static void muestraMatriz(int[][] matriz){
     
        for(int i=0;i<matriz.length;i++){
            for(int j=0;j<matriz[0].length;j++){
                System.out.print(matriz[i][j]+" ");
            }
            System.out.println("");
        }
         
    }
     
}


4.- Nos piden que implementemos el software para una máquina expendedora de golosinas.

Cada golosina tiene un nombre y un precio para ahorrar tiempo, os paso los datos que tendrá a continuación (copiar y pegar):

String[][] nombresGolosinas = {
 
            {"KitKat", "Chicles de fresa", "Lacasitos", "Palotes"},
 
            {"Kinder Bueno", "Bolsa variada Haribo", "Chetoos", "Twix"},
 
            {"Kinder Bueno", "M&M'S", "Papa Delta", "Chicles de menta"},
 
            {"Lacasitos", "Crunch", "Milkybar", "KitKat"}
 
 };
 
 
 
double[][] precio = {
 
  {1.1, 0.8, 1.5, 0.9},
 
  {1.8, 1, 1.2, 1},
 
  {1.8, 1.3, 1.2, 0.8},
 
  {1.5, 1.1, 1.1, 1.1}
 
};


También tendrán una cantidad inicial, que en principio será de 5.

Tendremos un pequeño menú con las siguientes opciones:

  • Pedir golosina: pedirá la posición de la golosina que quiera. Esta máquina tiene golosinas en cada posición, identificados por su fila y columna, que será lo que introduzca el usuario al pedir una golosina, por ejemplo si el usuario teclea 20 significa que está pidiendo la golosina que está en la fila 2 columna 0. Cuando no haya más golosinas se le indicará al usuario. Solo puede pedir una golosina y supondremos que el usuario siempre tiene dinero al elegir. Recuerda de disminuir la cantidad la pedir.
  • Mostrar golosinas: mostrara todas las golosinas disponibles. Mostrará el código que debe introducir el usuario, el nombre y el precio. La cantidad no se mostrará.
  • Rellenar golosinas: esta es una función exclusiva de un técnico por lo que nos pedirá una contraseña, si el usuario escribe “MaquinaExpendedora2017” le pedirá la posición de la golosina y la cantidad.
  • Apagar maquina: sale del programa, antes de salir mostrara las ventas totales durante la ejecución del programa.

El programa debe ser modularizado, es decir, todas las funciones que veas que sean necesarias debes crearlas, así como todas aquellas acciones que veas que se repitan. Piensa que funciones pueden ser.

Las funciones deben ser lo más genéricas posibles.

No se deben utilizar POO para este ejercicio.

import java.util.InputMismatchException;
import java.util.Scanner;
 
public class Ejercicio_matrices_DDR_08 {
 
    //Creamos un scanner estatico para
    static Scanner sn = new Scanner(System.in);
 
    public static void main(String[] args) {
 
        //Llamo al método menu
        menu();
 
    }
 
    /**
     * Muestra el menu, solicita la opcion y las ejecuta
     */
    public static void menu() {
 
        //Nombre de las golosinas
        String[][] nombresGolosinas = {
            {"KitKat", "Chicles de fresa", "Lacasitos", "Palotes"},
            {"Kinder Bueno", "Bolsa variada Haribo", "Chetoos", "Twix"},
            {"Kinder Bueno", "M&M'S", "Papa Delta", "Chicles de menta"},
            {"Lacasitos", "Crunch", "Milkybar", "KitKat"}
        };
 
        //Precio de las golosinas
        double[][] precio = {
            {1.1, 0.8, 1.5, 0.9},
            {1.8, 1, 1.2, 1},
            {1.8, 1.3, 1.2, 0.8},
            {1.5, 1.1, 1.1, 1.1}
        };
 
        int cantidad[][] = new int[4][4];
 
        //Relleno la matriz con 5
        rellenarMatriz(cantidad, 5);
 
        //Indica si salimos o no
        boolean salir = false;
        int opcion, fila, columna, cantidadNueva;
        String pos, password;
        double ventaTotales = 0;
 
        //Bucle para pedir las opciones hasta que elijamos salir
        while (!salir) {
 
            //opciones
            System.out.println("1. Pedir golosina");
            System.out.println("2. Mostrar golosinas");
            System.out.println("3. Rellenar golosinas");
            System.out.println("4. Apagar maquina");
 
            try {
 
                //Pide una opcion
                System.out.println("Introduce un numero: ");
                opcion = sn.nextInt();
 
                //Realiza una de las opciones
                switch (opcion) {
                    case 1:
 
                        //Pido la posicion
                        pos = pedirCadena("Introduce la posicion que quieras");
 
                        //Valido la posicion
                        if (validarPos(nombresGolosinas, pos)) {
                             
                            //Extraigo la fila y columna
                            fila = extraerNumero(pos, 0);
                            columna = extraerNumero(pos, 1);
 
                            //Indico si hay valores en la matriz
                            if (hayValorPosicion(cantidad, fila, columna)) {
                                //Muestro la golosina
                                System.out.println("Aqui tiene su golosiona: " + nombresGolosinas[fila][columna] + ". Gracias por su compra");
 
                                //Reduzco la cantidad en 1
                                reducirPosicion(cantidad, fila, columna, 1);
 
                                //aumento la cantidad
                                ventaTotales += precio[fila][columna];
 
                            } else {
                                System.out.println("No hay mas golosinas de este tipo, espere al técnico para que la rellene");
                            }
 
                        } else {
                            System.out.println("La posicion introducida no es valida");
                        }
 
                        break;
                    case 2:
 
                        //muestro las golosinas
                        mostrarGolosionas(nombresGolosinas, precio);
 
                        break;
                    case 3:
 
                        //pido el password
                        password = pedirCadena("Introduce la contraseña");
 
                        //Compruebo si es correcta la contraseña
                        if (cadenaIguales(password, "MaquinaExpendedora2017")) {
 
                            //Pido la posicion
                            pos = pedirCadena("Introduce la posicion que quieras");
                             
                            //Extraigo los numeros
                            fila = extraerNumero(pos, 0);
                            columna = extraerNumero(pos, 1);
 
                            //Validamos la posicion dada
                            if (validarPos(nombresGolosinas, pos)) {
                                //Introducimos la cantidad
                                cantidadNueva = pedirInteger("Introduce la cantidad");
 
                                //Aumentamos la cantidad en el valor dado
                                aumentarPosicion(cantidad, fila, columna, cantidadNueva);
 
                                System.out.println("Se ha incrementado la cantidad");
 
                            }else{
                                 System.out.println("La posicion introducida no es valida");
                            }
 
                        }else{
                            System.out.println("La contraseña incorrecta");
                        }
 
                        break;
                    case 4:
                         
                        //Muestro las ventas
                        System.out.println("Las ventas han sido de "+ventaTotales);
                         
                        salir = true;
                        break;
                    default:
                        System.out.println("Las opciones son entre 1 y 7");
                }
 
                //controla la excepcionn en caso de que se introduzca un valor no correcto
            } catch (InputMismatchException e) {
                System.out.println("Debes escribir un numero");
                sn.next();
            }
 
        }
 
        System.out.println("Fin del menu");
 
    }
 
    /**
     * Rellena la matriz con un numero
     * @param matriz
     * @param num
     */
    public static void rellenarMatriz(int[][] matriz, int num) {
 
        for (int i = 0; i < matriz.length; i++) {
            for (int j = 0; j < matriz.length; j++) {
                matriz[i][j] = num;
            }
        }
 
    }
 
    /**
     * Pide una cadena
     * @param mensaje
     * @return
     */
    public static String pedirCadena(String mensaje) {
 
        System.out.println(mensaje);
        String cadena = sn.next();
 
        return cadena;
 
    }
 
    /**
     * Pide un integer
     * @param mensaje
     * @return
     */
    public static int pedirInteger(String mensaje) {
 
        System.out.println(mensaje);
        int numero = sn.nextInt();
 
        return numero;
 
    }
 
    /**
     * Valida si una posicion es correcta
     * @param matriz
     * @param pos
     * @return
     */
    public static boolean validarPos(String[][] matriz, String pos) {
 
        if (pos.length() != 2) {
            return false;
        }
 
        if (!(esNumero(pos.substring(0, 1)) && esNumero(pos.substring(1, 2)))) {
            return false;
        }
 
        int fila = extraerNumero(pos, 0);
        int columna = extraerNumero(pos, 1);
 
        if (!((fila >= 0 && fila < matriz.length) && (columna >= 0 && columna < matriz[0].length))) {
            return false;
        }
 
        return true;
 
    }
 
    /**
     * Indico si un String es un numero
     * @param num
     * @return
     */
    public static boolean esNumero(String num) {
 
        try {
            Integer.parseInt(num);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
 
    }
 
    /**
     * Extraigo el numero, -1 si ha habido un error
     * @param numero
     * @param pos
     * @return
     */
    public static int extraerNumero(String numero, int pos) {
 
        int num = -1;
        if (esNumero(numero)) {
            num = Integer.parseInt(numero.substring(pos, pos + 1));
        }
 
        return num;
 
    }
 
    /**
     * Reduce la cantidad de una posicion en concreto
     * @param matriz
     * @param fila
     * @param columna
     * @param cantidad
     */
    public static void reducirPosicion(int[][] matriz, int fila, int columna, int cantidad) {
        matriz[fila][columna] -= cantidad;
    }
 
    /**
     * Indica si en una posicion hay un valor mayor que 0
     * @param matriz
     * @param fila
     * @param columna
     * @return
     */
    public static boolean hayValorPosicion(int[][] matriz, int fila, int columna) {
        if (matriz[fila][columna] > 0) {
            return true;
        }
 
        return false;
    }
 
    /**
     * Muestra las golosinas
     * @param nombres
     * @param precios
     */
    public static void mostrarGolosionas(String[][] nombres, double[][] precios) {
 
        for (int i = 0; i < nombres.length; i++) {
            for (int j = 0; j < nombres[i].length; j++) {
 
                System.out.println(i + "" + j + " " + nombres[i][j] + " " + precios[i][j]);
 
            }
        }
 
    }
 
    /**
     * Indica si dos cadenas son iguales
     * @param cadena1
     * @param cadena2
     * @return
     */
    public static boolean cadenaIguales(String cadena1, String cadena2) {
 
        if (cadena1.equals(cadena2)) {
            return true;
        } else {
            return false;
        }
 
    }
 
    /**
     * Aumenta la cantidad de una posicion
     * @param matriz
     * @param fila
     * @param columna
     * @param cantidad
     */
    public static void aumentarPosicion(int[][] matriz, int fila, int columna, int cantidad) {
        matriz[fila][columna] += cantidad;
    }
 
}


5.- Queremos realizar una encuesta a 10 personas, en esta encuesta indicaremos el sexo (1=masculino, 2=femenino), si trabaja (1=si trabaja, 2= no trabaja) y su sueldo (si tiene un trabajo, sino sera un cero) estará entre 600 y 2000 (valor entero). Los valores pueden ser generados aleatoriamente. Calcula y muestra lo siguiente:
  • Porcentaje de hombres (tengan o no trabajo).
  • Porcentaje de mujeres (tengan o no trabajo).
  • Porcentaje de hombres que trabajan.
  • Porcentaje de mujeres que trabajan.
  • El sueldo promedio de las hombres que trabajan.
  • EL sueldo promedio de las mujeres que trabajan.

Usa todos los métodos que veas necesarios, piensa que es aquello que se repite o que puede ser mejor tenerlo por separado.

public class EncuestaApp {
 
    public static void main(String[] args) {
 
        final int ENCUESTADOS=10;
 
        //Creamos la tabla de la Encuesta, no importa si es de 3x20 o 20x3
        int lista[][]=new int [3][ENCUESTADOS];
 
        //Rellenamos la tabla
        rellenoSexo(lista);
        rellenoTrabajo(lista);
        rellenoSueldo(lista);
 
        //Mostramos la tabla, es opcional mostrarla
        imprimirArray(lista);
 
        //Mostramos los datos
        System.out.println("Hay un "+porcHombresMujeres(lista, 1)+" % de hombres");
        System.out.println("Hay un "+porcHombresMujeres(lista, 2)+" % de mujeres");
 
        System.out.println("Hay un "+porcHombresMujeresTrabajo(lista, 1, 1)+" % de hombres que trabajan");
        System.out.println("Hay un "+porcHombresMujeresTrabajo(lista, 2, 1)+" % de mujeres que trabajan");
 
        System.out.println("Hay un "+porcHombresMujeresTrabajo(lista, 1, 2)+" % de hombres que no tiene trabajo");
        System.out.println("Hay un "+porcHombresMujeresTrabajo(lista, 2, 2)+" % de mujeres que no tiene trabajo");
 
        System.out.println("El sueldo medio es de "+promedioSueldo(lista, 1, 1));
        System.out.println("El sueldo medio es de "+promedioSueldo(lista, 2, 1));
 
    }
    public static void rellenoSexo (int lista[][]){
        for (int i=0;i&lt;lista[0].length;i++){
            int numero=(int)Math.floor(Math.random()*2+1);
            lista[0][i]=numero;
        }
    }
    public static void rellenoTrabajo (int lista[][]){
        for (int i=0;i&lt;lista[1].length;i++){
            int numero=(int)Math.floor(Math.random()*2+1);
            lista[1][i]=numero;
        }
    }
    public static void rellenoSueldo (int lista[][]){
        for (int i=0;i&lt;lista[1].length;i++){
            for (int j=0;j&lt;lista[2].length;j++){
                if (lista[1][j]==2){
                    lista[2][j]=0;
                }else{
                    int numero=(int)Math.floor(Math.random()*1000+500);
                    lista[2][j]=numero;
                }
            }
 
        }
    }
 
    public static void imprimirArray (int lista[][]){
        //Esto solo es cuestion de estetica
        String datoEncuesta[]={"Sexo", "Trabajo", "Sueldo"};
        for (int i=0;i&lt;lista.length;i++){
            System.out.println(datoEncuesta[i]);
            for (int j=0;j&lt;lista[i].length;j++){
                System.out.println("En la fila " +i+" y columna " +j+ " tiene " +lista[i][j]);
            }
 
        }
    }
    public static double porcHombresMujeres (int lista[][], int sexo){
        int contador=0;
        for(int i=0;i&lt;lista[0].length;i++){
            if (lista[0][i]==sexo){
                contador+=1;
            }
        }
        double porcentaje=(contador*100)/lista[0].length;
        return porcentaje;
    }
    public static double porcHombresMujeresTrabajo (int lista[][], int sexo, int trabajo){
        int contador=0;
        double porcentaje_sexo=0;
        double porcentaje=0;
        for(int i=0;i&lt;lista[0].length;i++){
                if (lista[0][i]==sexo &amp;&amp; lista[1][i]==trabajo){
                    contador+=1;
                }
        }
        if(sexo==1){
            porcentaje_sexo=porcHombresMujeres(lista, 1);
            porcentaje=(contador*100)/(porcentaje_sexo/10);
        }else{
            porcentaje_sexo=porcHombresMujeres(lista, 2);
            porcentaje=(contador*100)/(porcentaje_sexo/10);
        }
 
        return porcentaje;
    }
    public static double promedioSueldo(int lista[][], int sexo, int trabajo){
        int contador=0;
        double suma=0;
        double promedio=0;
        for(int i=0;i&lt;lista[0].length;i++){
                if (lista[0][i]==sexo &amp;&amp; lista[1][i]==trabajo &amp;&amp; lista[2][i]!=0){
                    suma+=lista[2][i];
                    contador+=1;
                }
        }
        promedio=suma/contador;
        return promedio;
    }
 
}

Comentarios

Entradas populares de este blog

Proyecto número dos