Saltar a contenido

Semana 5 - Ejercicios Prácticos Solucionados

Ejercicio 1: Calculadora de Promedio

Descripción

Crear un programa que calcule el promedio de tres notas y determine si el estudiante aprobó o no. Un estudiante aprueba si su promedio es mayor o igual a 3.0.

Solución

public class CalculadoraPromedio {
    public static void main(String[] args) {
        // Declaración de variables
        double nota1 = 3.5;
        double nota2 = 2.8;
        double nota3 = 4.0;

        // Cálculo del promedio
        double promedio = (nota1 + nota2 + nota3) / 3;

        // Mostrar el promedio con dos decimales
        System.out.printf("El promedio es: %.2f%n", promedio);

        // Determinar si aprobó
        if (promedio >= 3.0) {
            System.out.println("¡Felicitaciones! Has aprobado.");
        } else {
            System.out.println("Lo siento, no has aprobado.");
        }
    }
}

Explicación

  • Utilizamos variables de tipo double para almacenar las notas y el promedio.
  • Aplicamos operadores aritméticos para calcular el promedio: suma (+) y división (/).
  • Usamos una estructura condicional (if-else) para determinar si el estudiante aprobó.
  • El método printf se usa para formatear el promedio a dos decimales.

Ejercicio 2: Conversor de Temperatura

Descripción

Crear un programa que convierta una temperatura de Celsius a Fahrenheit y viceversa, utilizando la conversión de tipos y operadores aritméticos.

Solución

public class ConversorTemperatura {
    public static void main(String[] args) {
        // Convertir de Celsius a Fahrenheit
        String celsiusStr = "25";
        double celsius = Double.parseDouble(celsiusStr);
        double fahrenheit = (celsius * 9/5) + 32;

        System.out.println(celsius + "°C equivale a " + fahrenheit + "°F");

        // Convertir de Fahrenheit a Celsius
        double tempF = 98.6;
        double tempC = (tempF - 32) * 5/9;
        int tempCInt = (int) tempC; // Conversión explícita a entero

        System.out.println(tempF + "°F equivale a " + tempC + "°C");
        System.out.println("Temperatura en Celsius (redondeada): " + tempCInt + "°C");
    }
}

Explicación

  • Utilizamos Double.parseDouble() para convertir un String a double.
  • Aplicamos fórmulas de conversión usando operadores aritméticos.
  • Realizamos una conversión explícita (casting) de double a int.
  • Demostramos el uso de diferentes tipos de datos y sus conversiones.

Ejercicio 3: Calculadora de Descuento

Descripción

Crear un programa que calcule el precio final de un producto después de aplicar un descuento, utilizando operadores aritméticos y de asignación.

Solución

public class CalculadoraDescuento {
    public static void main(String[] args) {
        // Precio original y porcentaje de descuento
        double precioOriginal = 100000;
        int porcentajeDescuento = 15;

        // Cálculo del descuento
        double descuento = precioOriginal * (porcentajeDescuento / 100.0);
        double precioFinal = precioOriginal - descuento;

        // Mostrar resultados
        System.out.println("Precio original: $" + precioOriginal);
        System.out.println("Descuento " + porcentajeDescuento + "%: $" + descuento);
        System.out.println("Precio final: $" + precioFinal);

        // Ejemplo con operador de asignación compuesto
        double precio = precioFinal;
        precio *= 1.19; // Agregar IVA del 19%

        System.out.println("Precio final con IVA: $" + precio);
    }
}

Explicación

  • Utilizamos variables de tipo double para manejar decimales en los precios.
  • Aplicamos operadores aritméticos para calcular el descuento y el precio final.
  • Demostramos el uso del operador de asignación compuesto (*=).
  • Calculamos porcentajes y realizamos operaciones con decimales.

Ejercicio 4: Calculadora Básica

Descripción

Crear una calculadora que realice las cuatro operaciones básicas (suma, resta, multiplicación y división) con dos números.

Solución

public class CalculadoraBasica {
    public static void main(String[] args) {
        // Declaración de variables
        double num1 = 15.5;
        double num2 = 5.0;

        // Realizar operaciones
        double suma = num1 + num2;
        double resta = num1 - num2;
        double multiplicacion = num1 * num2;
        double division = num1 / num2;

        // Mostrar resultados
        System.out.printf("Suma: %.2f%n", suma);
        System.out.printf("Resta: %.2f%n", resta);
        System.out.printf("Multiplicación: %.2f%n", multiplicacion);

        // Verificar división por cero
        if (num2 != 0) {
            System.out.printf("División: %.2f%n", division);
        } else {
            System.out.println("No se puede dividir por cero");
        }
    }
}

Explicación

  • Implementamos las cuatro operaciones aritméticas básicas.
  • Utilizamos el operador de división (/) con verificación de división por cero.
  • Aplicamos formato de salida con printf para mostrar dos decimales.

Ejercicio 5: Calculadora de IMC

Descripción

Crear un programa que calcule el Índice de Masa Corporal (IMC) y clasifique el estado de salud según el resultado.

Solución

public class CalculadoraIMC {
    public static void main(String[] args) {
        // Datos de entrada
        double peso = 70.5;    // en kilogramos
        double altura = 1.75;   // en metros

        // Cálculo del IMC
        double imc = peso / (altura * altura);

        // Mostrar IMC
        System.out.printf("Su IMC es: %.1f%n", imc);

        // Clasificar estado de salud
        if (imc < 18.5) {
            System.out.println("Bajo peso");
        } else if (imc < 25) {
            System.out.println("Peso normal");
        } else if (imc < 30) {
            System.out.println("Sobrepeso");
        } else {
            System.out.println("Obesidad");
        }
    }
}

Explicación

  • Calculamos el IMC usando la fórmula peso/(altura²).
  • Utilizamos estructura if-else if para clasificar el estado de salud.
  • Aplicamos formato de salida para mostrar un decimal.

Ejercicio 6: Conversor de Moneda

Descripción

Crear un programa que convierta entre diferentes monedas (USD, EUR, COP) utilizando tasas de cambio fijas.

Solución

public class ConversorMoneda {
    public static void main(String[] args) {
        // Tasas de cambio fijas
        double usdToEur = 0.85;
        double usdToCop = 4000.0;

        // Cantidad a convertir
        double cantidadUsd = 100.0;

        // Realizar conversiones
        double cantidadEur = cantidadUsd * usdToEur;
        double cantidadCop = cantidadUsd * usdToCop;

        // Mostrar resultados
        System.out.printf("%.2f USD equivale a:%n", cantidadUsd);
        System.out.printf("EUR: %.2f%n", cantidadEur);
        System.out.printf("COP: %.0f%n", cantidadCop);
    }
}

Explicación

  • Definimos tasas de cambio como constantes.
  • Realizamos conversiones usando operadores de multiplicación.
  • Utilizamos diferentes formatos de salida según la moneda.

Ejercicio 7: Calculadora de Interés Simple

Descripción

Crear un programa que calcule el interés simple de un préstamo basado en el capital, la tasa de interés y el tiempo.

Solución

public class CalculadoraInteres {
    public static void main(String[] args) {
        // Datos del préstamo
        double capital = 1000000;    // Capital inicial
        double tasaAnual = 0.12;     // 12% anual
        int tiempo = 2;              // años

        // Cálculo del interés simple
        double interes = capital * tasaAnual * tiempo;
        double montoTotal = capital + interes;

        // Mostrar resultados
        System.out.printf("Capital inicial: $%.2f%n", capital);
        System.out.printf("Interés generado: $%.2f%n", interes);
        System.out.printf("Monto total: $%.2f%n", montoTotal);
    }
}

Explicación

  • Aplicamos la fórmula de interés simple: I = C * r * t
  • Utilizamos variables de tipo double para manejar decimales.
  • Mostramos los resultados con formato monetario.

Ejercicio 8: Conversor de Tiempo

Descripción

Crear un programa que convierta una cantidad de segundos a horas, minutos y segundos.

Solución

public class ConversorTiempo {
    public static void main(String[] args) {
        // Cantidad de segundos a convertir
        int segundosTotales = 3665;

        // Cálculo de conversión
        int horas = segundosTotales / 3600;
        int minutos = (segundosTotales % 3600) / 60;
        int segundos = segundosTotales % 60;

        // Mostrar resultado
        System.out.printf("%d segundos equivalen a:%n", segundosTotales);
        System.out.printf("%d horas, %d minutos y %d segundos%n", 
                         horas, minutos, segundos);
    }
}

Explicación

  • Utilizamos el operador de división (/) para obtener las horas y minutos.
  • Aplicamos el operador módulo (%) para obtener los restos.
  • Usamos variables de tipo int ya que trabajamos con números enteros.

Ejercicio 9: Calculadora de Impuestos

Descripción

Crear un programa que calcule el impuesto a pagar según el monto de la compra, con diferentes tasas según el valor.

Solución

public class CalculadoraImpuestos {
    public static void main(String[] args) {
        // Monto de la compra
        double montoCompra = 250000;
        double tasaImpuesto;

        // Determinar tasa de impuesto
        if (montoCompra <= 100000) {
            tasaImpuesto = 0.10;  // 10%
        } else if (montoCompra <= 500000) {
            tasaImpuesto = 0.15;  // 15%
        } else {
            tasaImpuesto = 0.19;  // 19%
        }

        // Calcular impuesto y total
        double impuesto = montoCompra * tasaImpuesto;
        double total = montoCompra + impuesto;

        // Mostrar resultados
        System.out.printf("Monto de compra: $%.2f%n", montoCompra);
        System.out.printf("Tasa de impuesto: %.1f%%%n", tasaImpuesto * 100);
        System.out.printf("Impuesto: $%.2f%n", impuesto);
        System.out.printf("Total a pagar: $%.2f%n", total);
    }
}

Explicación

  • Implementamos diferentes tasas de impuesto según el monto.
  • Utilizamos estructura if-else if para determinar la tasa aplicable.
  • Calculamos el impuesto y el total a pagar.

Ejercicio 10: Sistema de Calificación Ponderada

Descripción

Crear un programa que calcule la nota final de un estudiante basado en diferentes evaluaciones con distintos pesos.

Solución

public class CalificacionPonderada {
    public static void main(String[] args) {
        // Notas y pesos
        double examen1 = 4.2;     // 30%
        double examen2 = 3.8;     // 30%
        double proyecto = 4.5;     // 25%
        double tareas = 3.9;      // 15%

        // Cálculo de nota final
        double notaFinal = (examen1 * 0.30) + 
                          (examen2 * 0.30) + 
                          (proyecto * 0.25) + 
                          (tareas * 0.15);

        // Mostrar resultados
        System.out.printf("Nota Final: %.2f%n", notaFinal);

        // Determinar estado
        if (notaFinal >= 4.5) {
            System.out.println("Excelente");
        } else if (notaFinal >= 4.0) {
            System.out.println("Muy Bueno");
        } else if (notaFinal >= 3.0) {
            System.out.println("Aprobado");
        } else {
            System.out.println("Reprobado");
        }
    }
}

Explicación

  • Aplicamos pesos diferentes a cada evaluación.
  • Calculamos la nota final usando operadores aritméticos.
  • Implementamos una clasificación del rendimiento.

Ejercicio 11: Validador de Contraseña Simple

Descripción

Crear un programa que valide si una contraseña cumple con un criterio específico sin usar bucles.

Código

public class ValidadorContrasena {
    public static void main(String[] args) {
        // Contraseña a validar
        String password = "Abc12345";

        // Validar criterios usando métodos de String
        boolean tieneMinuscula = !password.equals(password.toUpperCase());
        boolean tieneMayuscula = !password.equals(password.toLowerCase());
        boolean tieneNumero = password.matches(".*\\d.*");

        // Validar todos los criterios
        boolean esValida = password.length() >= 8 &&
                          tieneMinuscula &&
                          tieneMayuscula &&
                          tieneNumero;

        System.out.println("La contraseña es válida: " + esValida);
    }
}

Ejercicio 12: Calculadora de Descuentos por Membresía

Descripción

Crear un programa que calcule descuentos en una tienda basados en el nivel de membresía del cliente y el monto de la compra.

Código

public class CalculadoraDescuentosMembresía {
    public static void main(String[] args) {
        // Datos de entrada
        String nivelMembresia = "GOLD";  // BASIC, SILVER, GOLD, PLATINUM
        double montoCompra = 250.0;
        boolean esFestivo = true;

        // Calcular descuento base por membresía
        double descuentoBase;
        switch (nivelMembresia) {
            case "PLATINUM": descuentoBase = 0.20; break;
            case "GOLD": descuentoBase = 0.15; break;
            case "SILVER": descuentoBase = 0.10; break;
            default: descuentoBase = 0.05;
        }

        // Ajustar descuento por monto de compra
        double descuentoAdicional = 0.0;
        if (montoCompra >= 500.0) {
            descuentoAdicional = 0.05;
        } else if (montoCompra >= 200.0) {
            descuentoAdicional = 0.02;
        }

        // Descuento especial en festivos
        double descuentoFestivo = esFestivo ? 0.05 : 0.0;

        // Calcular descuento total y precio final
        double descuentoTotal = descuentoBase + descuentoAdicional + descuentoFestivo;
        double montoDescuento = montoCompra * descuentoTotal;
        double precioFinal = montoCompra - montoDescuento;

        // Mostrar resultados
        System.out.printf("Nivel de Membresía: %s%n", nivelMembresia);
        System.out.printf("Monto de Compra: $%.2f%n", montoCompra);
        System.out.printf("Descuento Total: %.1f%%%n", descuentoTotal * 100);
        System.out.printf("Monto Descuento: $%.2f%n", montoDescuento);
        System.out.printf("Precio Final: $%.2f%n", precioFinal);
    }
}

Explicación

  • Implementamos un sistema de descuentos multinivel usando switch y condicionales.
  • Calculamos descuentos basados en membresía, monto de compra y días festivos.
  • Utilizamos el operador ternario para el descuento en festivos.
  • Aplicamos formato de salida para mostrar valores monetarios y porcentajes.

Ejercicio 13: Analizador de Texto Simple

Descripción

Crear un programa que analice características básicas de un texto sin usar bucles.

Código

public class AnalizadorTextoSimple {
    public static void main(String[] args) {
        String texto = "Hola Mundo";

        // Análisis simple usando métodos de String
        int longitud = texto.length();
        int espacios = texto.length() - texto.replace(" ", "").length();
        int vocales = texto.toLowerCase().replaceAll("[^aeiou]", "").length();
        int consonantes = texto.toLowerCase().replaceAll("[^a-z]", "").length() - vocales;

        System.out.println("Análisis de texto: '" + texto + "'");
        System.out.println("Longitud: " + longitud);
        System.out.println("Espacios: " + espacios);
        System.out.println("Vocales: " + vocales);
        System.out.println("Consonantes: " + consonantes);
    }
}

Explicación

  • Procesamos texto carácter por carácter.
  • Utilizamos métodos de Character para clasificación.
  • Mantenemos contadores para diferentes tipos de caracteres.

Ejercicio 14: Calculadora de Propinas

Descripción

Crear un programa que calcule propinas basadas en el monto de la cuenta y el nivel de satisfacción.

Solución

public class CalculadoraPropinas {
    public static void main(String[] args) {
        double montoCuenta = 84.50;
        int nivelSatisfaccion = 4; // 1-5

        // Determinar porcentaje de propina
        double porcentajePropina;
        switch (nivelSatisfaccion) {
            case 5: porcentajePropina = 0.20; break;
            case 4: porcentajePropina = 0.15; break;
            case 3: porcentajePropina = 0.10; break;
            default: porcentajePropina = 0.05;
        }

        // Calcular propina y total
        double propina = montoCuenta * porcentajePropina;
        double total = montoCuenta + propina;

        System.out.printf("Cuenta: $%.2f%n", montoCuenta);
        System.out.printf("Nivel de satisfacción: %d/5%n", 
                        nivelSatisfaccion);
        System.out.printf("Propina (%.0f%%): $%.2f%n", 
                        porcentajePropina * 100, propina);
        System.out.printf("Total: $%.2f%n", total);
    }
}

Explicación

  • Utilizamos switch para diferentes niveles de satisfacción.
  • Calculamos porcentajes y valores monetarios.
  • Aplicamos formato de salida para mejor presentación.

Ejercicio 15: Calculadora de Calificaciones

Descripción

Crear un programa que calcule la calificación final de un estudiante basado en diferentes evaluaciones con pesos distintos y convierta la nota numérica a letra según una escala predefinida.

Código

public class CalculadoraCalificaciones {
    public static void main(String[] args) {
        // Notas y pesos de las evaluaciones
        double examenParcial = 3.8;    // 30%
        double proyectoFinal = 4.2;     // 40%
        double participacion = 4.5;      // 15%
        double tareas = 3.9;            // 15%

        // Calcular nota final ponderada
        double notaFinal = (examenParcial * 0.30) +
                          (proyectoFinal * 0.40) +
                          (participacion * 0.15) +
                          (tareas * 0.15);

        // Determinar letra según la escala
        String letraCalificacion;
        if (notaFinal >= 4.5) {
            letraCalificacion = "A+";
        } else if (notaFinal >= 4.0) {
            letraCalificacion = "A";
        } else if (notaFinal >= 3.5) {
            letraCalificacion = "B";
        } else if (notaFinal >= 3.0) {
            letraCalificacion = "C";
        } else if (notaFinal >= 2.0) {
            letraCalificacion = "D";
        } else {
            letraCalificacion = "F";
        }

        // Determinar estado (Aprobado/Reprobado)
        String estado = notaFinal >= 3.0 ? "Aprobado" : "Reprobado";

        // Mostrar resultados
        System.out.println("=== Reporte de Calificaciones ===");
        System.out.printf("Examen Parcial (30%%): %.1f%n", examenParcial);
        System.out.printf("Proyecto Final (40%%): %.1f%n", proyectoFinal);
        System.out.printf("Participación (15%%): %.1f%n", participacion);
        System.out.printf("Tareas (15%%): %.1f%n", tareas);
        System.out.printf("Nota Final: %.2f%n", notaFinal);
        System.out.println("Calificación en Letra: " + letraCalificacion);
        System.out.println("Estado: " + estado);
    }
}

Explicación

  • Calculamos una nota final ponderada usando diferentes pesos para cada evaluación.
  • Implementamos una escala de calificación por letras usando condicionales.
  • Utilizamos el operador ternario para determinar el estado de aprobación.
  • Aplicamos formato de salida para mostrar las notas con decimales apropiados.

Estos ejercicios integran los conceptos de: - Tipos de datos y variables - Operadores aritméticos y de asignación - Conversión de tipos (parsing y casting) - Estructuras de control condicional - Formato de salida - Manipulación de cadenas - Operadores lógicos - Bucles y control de flujo - Patrones y algoritmos simples

Actividad de Aprendizaje en Parejas

Descripción

Para reforzar la comprensión de los conceptos aprendidos, realizaremos una actividad de aprendizaje colaborativo en parejas.

Instrucciones

  1. El docente asignará un ejercicio específico a cada pareja de estudiantes.
  2. Cada pareja deberá:
  3. Analizar detalladamente el código del ejercicio asignado
  4. Identificar los conceptos clave utilizados
  5. Preparar una explicación clara del funcionamiento del código
  6. Estar listos para responder preguntas de sus compañeros
  7. Durante la presentación, la pareja deberá:
  8. Explicar el propósito del ejercicio
  9. Detallar la lógica del código paso a paso
  10. Destacar los conceptos de programación aplicados
  11. Demostrar la ejecución del programa

Objetivos

  • Fortalecer la comprensión de los conceptos de programación
  • Desarrollar habilidades de comunicación técnica
  • Fomentar el aprendizaje colaborativo
  • Practicar la explicación de código a otros programadores