V2#

Punto 1: Aplicación de los 4 Pilares de la Programación Orientada a Objetos (POO) [30 pts]#

Crea una clase llamada «Empleado» que represente a un empleado de una empresa. La clase debe implementar los cuatro pilares de la programación orientada a objetos: abstracción, encapsulamiento, herencia, y polimorfismo. Debes cumplir los siguientes requisitos:

  • Crea una interfaz llamada Persona que tenga los atributos nombre, edad, y los métodos abstractos trabajar() y mostrarInformacion().

  • La clase Empleado debe heredar de Persona y agregar los atributos salario y puesto.

  • Implementa los métodos necesarios para aplicar encapsulamiento, asegurando que los atributos sean privados y se puedan acceder o modificar a través de métodos getters y setters.

  • Crea una subclase de Empleado llamada EmpleadoPorHora que sobrescriba el método trabajar() y calcule el salario basado en horas trabajadas. Este método debe pedir las horas y estas deben pasarse por su argumento.

  • Implementa polimorfismo mostrando un caso donde un objeto de tipo EmpleadoPorHora pueda ser tratado como una Persona, es decir, verifica que el método trabajar() funciona de diferente modo.

Requisitos adicionales:

  • Agrega un constructor en cada clase.

  • Instancia objetos en el método main() y muestra ejemplos de polimorfismo.

Ejemplo de salida esperada:

Empleado: Carlos, Edad: 30, Salario: 3000. Puesto: Desarrollador.
Empleado por hora: Ana, Edad: 25, Salario: 1200 por 40 horas trabajadas.
interface Persona{
  String nombre = "Sebas";
  int edad = 27;

  public abstract void trabajar();
  public abstract void mostrarInformacion();
}

class Empleado implements Persona{
  private double salario;
  private String puesto;

  public Empleado(String puesto, double salario){
    this.puesto = puesto;
    this.salario = salario;
  }

  public void setSalario(double salario){
    this.salario = salario;
  }
  public double getSalario(){
    return salario;
  }

  public void setPuesto(String puesto){
    this.puesto = puesto;
  }
  public String getPuesto(){
    return puesto;
  }

  @Override
  public void trabajar(){
    System.out.println("Trabajando");
  };

  @Override
  public void mostrarInformacion(){
    System.out.println("Empleado: %s, Edad: %d, Salario: %.1f Puesto: %s.%n".formatted(nombre, edad, getSalario(), getPuesto()));
  };

}

class EmpleadoPorHora extends Empleado{

  public EmpleadoPorHora(String puesto, double salario){
    super(puesto, salario);
  } 

  public void trabajar(int horas){
    double precio_hora = 50000;
    System.out.println("El precio de %d horas trbajadas es %.1f. La hora cuesta %.1f".formatted(horas, precio_hora*horas, precio_hora));
  };
}
public static void main(String[] args){
  Empleado sebas = new Empleado("Profesor", 10000000);
  sebas.trabajar();
  sebas.mostrarInformacion();
  System.out.println("");
  // las varibles de la interfaz que son finales no se pueden modificar

  EmpleadoPorHora sebas_horas = new EmpleadoPorHora("Profesor", 20000000);
  sebas_horas.mostrarInformacion();
  sebas_horas.trabajar();
  sebas_horas.trabajar(15);
  // un mismo metodo puede hacer cosas diferentes
}
main(null);
Trabajando
Empleado: Sebas, Edad: 27, Salario: 10000000.0 Puesto: Profesor.

Empleado: Sebas, Edad: 27, Salario: 20000000.0 Puesto: Profesor.
Trabajando
El precio de 15 horas trbajadas es 750000.0. La hora cuesta 50000.0

Punto 2: Manipulación de Cadenas [30 pts]#

Escribe un programa en Java que permita a un usuario ingresar una frase y, a partir de ella, realice las siguientes operaciones:

  1. Invertir la frase: Implementa un método que invierta la cadena de entrada.

  2. Validar si la frase es un palíndromo: Crea un método que determine si la frase (ignorando espacios y mayúsculas/minúsculas) es un palíndromo.

El programa debe interactuar con el usuario y mostrar los resultados para cada una de las operaciones. Usa la clase String y sus métodos asociados para manipular las cadenas.

Ejemplo de entrada:

Ingresa una frase: Anilina ama a anilina

Ejemplo de salida esperada:

Frase invertida: anilina a ama anilina
Es un palíndromo: Sí
public String Invertir(String frase){
  String frase_invertida = "";
  for(int i = frase.length()-1; i >= 0; i--){
    frase_invertida += frase.charAt(i);
  }
  return frase_invertida;
}

public String RemoverEspacios(String cadena){
  String cadena_sin_espacios = "";
  for(int i=0; i<cadena.length(); i++){
    if(cadena.charAt(i) != ' '){
      cadena_sin_espacios += cadena.charAt(i);
    }
  }
  return cadena_sin_espacios;
}

public String EsPalindrome(String frase){
  String frase_invertida = RemoverEspacios(Invertir(frase));
  if(frase_invertida.equalsIgnoreCase(RemoverEspacios(frase))){
    return "Sí";
  }
  else{
    return "No";
  }
}
import java.util.Scanner;

System.out.print("Ingresa una frase: ");
// Scanner myObj = new Scanner(System.in);
// String frase = myObj.nextLine();  // Read user input
String frase = "Anilina ama anilina";
System.out.println(frase+"\n");

System.out.println("Frase invertida: "+Invertir(frase));
System.out.println("Es un palíndrome: "+EsPalindrome(frase));
// Anilina ama anilina
Ingresa una frase: 
Anilina ama anilina
Frase invertida: anilina ama anilinA
Es un palíndrome: Sí

Punto 3: Arreglos Bidimensionales y Búsquedas [40 pts]#

Tienes que diseñar un sistema para gestionar las calificaciones de un grupo de estudiantes. Se requiere que crees un programa en Java que permita lo siguiente:

  1. Declara un arreglo bidimensional de enteros donde las filas representen estudiantes y las columnas representen calificaciones en tres asignaturas.

    int[][] calificaciones = {
        {85, 78, 92},  // EstudianteA
        {76, 85, 83},  // EstudianteB
        {90, 88, 91},  // EstudianteC
        {70, 60, 75}   // EstudianteD
    };
    // otra forma del código
    int[] EstudianteA = {85, 78, 92}; 
    int[] EstudianteB = {76, 85, 83};
    int[] EstudianteC = {90, 88, 91};
    int[] EstudianteD = {70, 60, 75};
    
  2. Implementa un método que permita calcular el promedio de cada estudiante.

  3. Implementa un método de búsqueda que permita buscar una calificación específica y retornar la posición (fila, columna) en la que se encuentra dicha calificación. Si no se encuentra, el método debe indicarlo.

  4. Agrega un menú que permita al usuario:

    • Calcular el promedio de todos los estudiantes.

    • Buscar una calificación específica en el sistema.

Ejemplo de salida esperada:

Menú:
1. Calcular promedio por estudiante
2. Buscar calificación
Opción: 1

Promedio de Estudiante 1: 85
Promedio de Estudiante 2: 81
Promedio de Estudiante 3: 89.6
Promedio de Estudiante 4: 68.3
int[] EstudianteA = {85, 78, 92}; 
int[] EstudianteB = {76, 85, 83};
int[] EstudianteC = {90, 88, 91};
int[] EstudianteD = {70, 60, 75};

public double Promedio(int[] Estudiante){
  double promedio = 0;
  for(int i = 0; i<Estudiante.length; i++){
    promedio += Estudiante[i];
  }
  return promedio/Estudiante.length;
}

public void BuscarCalificaion(int calificacion){
  int flag = 0;
  for(int i = 0; i<EstudianteA.length; i++){
    if(EstudianteA[i] == calificacion){
      System.out.println("  Estudiante A con calificacion "+calificacion);
      flag += 1;
    }
    else if(EstudianteB[i] == calificacion){
      System.out.println("  Estudiante B con calificacion "+calificacion);
      flag += 1;
    }
    else if(EstudianteC[i] == calificacion){
      System.out.println("Estudiante C con calificacion "+calificacion);
      flag += 1;
    }
    else if(EstudianteD[i] == calificacion){
      System.out.println("  Estudiante D con calificacion "+calificacion);
      flag += 1;
    }
    
  }
  if(flag==0){
    System.out.println("  No se encontro la calificacion "+calificacion+".");
  }
}

import java.util.Scanner;
public void Menu(){
  System.out.print("""
Menú:
  1. Calcular promedio por estudiante
  2. Buscar calificación
""");
  // System.out.println("Opción: ")
  // Scanner myObj = new Scanner(System.in);
  // int opcion = myObj.nextInt();  // Read user input
  int opcion = 1;
  System.out.println("Opción: "+opcion);
  
  if(opcion==1){
    System.out.println("""
        Promedio de Estudiante A: %.2f
        Promedio de Estudiante B: %.2f
        Promedio de Estudiante C: %.2f
        Promedio de Estudiante D: %.2f
        """.formatted(Promedio(EstudianteA), Promedio(EstudianteB),
                      Promedio(EstudianteC), Promedio(EstudianteD)));
  }
  else if(opcion==2){
    System.out.print("  ¿Qué calificación quieres buscar?: ");
    //int calificacion = myObj.nextInt();  // Read user input
    int calificacion = 95;
    System.out.print(calificacion+"\n");
    BuscarCalificaion(calificacion);
  }
}
Menu()
Menú:
  1. Calcular promedio por estudiante
  2. Buscar calificación
Opción: 1
Promedio de Estudiante A: 85.00
Promedio de Estudiante B: 81.33
Promedio de Estudiante C: 89.67
Promedio de Estudiante D: 68.33