Índice

Ejercicios Unidad 7

Descargar estos ejercicios

Antes de empezar

Para realizar estos ejercicios, deberás descargar los recursos del enlace de proyecto_funciones2. Como puedes ver, la solución está compuesta de varios proyectos. Cada uno de ellos corresponde con un ejercicio, deberás implementar todo el código, tanto de la Main como de los métodos que se piden en cada ejercicio. Cada proyecto contiene el test correspondiente, que deberás pasar para comprobar que has hecho el ejercicio correctamente. No olvides comentar los Test de los que todavía no has hecho el código.

Ejercicio 1. Proyecto calcula salario

Este ejercicio estará formado por varios métodos que definirás en el proyecto ejercicio1.

Ejercicio 1: Calculadora de Salario
Introduce el número de departamento: 4
Introduce el coste por hora: 25
Introduce las horas trabajadas: 5

--- INFORMACIÓN DEL EMPLEADO ---
Número de departamento: 4
Coste por hora: 25,00 ?
Horas trabajadas: 5
Salario semanal: 125,00 ?

Presiona cualquier tecla para salir...

Requisitos:

G cluster2 P Main L Lee P->L S Salario P->S M Muestra P->M

Ejercicio 2. Proyecto adivina número

Escribe un programa en el proyecto ejercicio2 para jugar a adivinar números. Los pasos a seguir son los siguientes:

Ejercicio 2. Proyecto adivinar el número

--- SELECCIONA EL NIVEL ---
1. Fácil (10 tentativas)
2. Medio (6 tentativas)
3. Difícil (4 tentativas)
Elige una opción (1-3): 4
Opción no válida. Inténtalo de nuevo.

--- SELECCIONA EL NIVEL ---
1. Fácil (10 tentativas)
2. Medio (6 tentativas)
3. Difícil (4 tentativas)
Elige una opción (1-3): 1

¡Adivina el número entre 0 y 100!
Tienes 10 tentativas.

Tentativa 1 de 10:
Introduce tu número: 50
El número es menor.
Te quedan 9 tentativas.

Tentativa 2 de 10:
Introduce tu número: 25
El número es menor.
Te quedan 8 tentativas.

Tentativa 3 de 10:
Introduce tu número: 17
El número es mayor.
Te quedan 7 tentativas.

Tentativa 4 de 10:
Introduce tu número: 20
El número es mayor.
Te quedan 6 tentativas.

Tentativa 5 de 10:
Introduce tu número: 22
¡Felicidades! Has adivinado el número.
¡Excelente! Has adivinado el número en 5 tentativas.

¿Quieres seguir jugando? (S/N): f
Respuesta no válida. Por favor, responde S o N.

¿Quieres seguir jugando? (S/N): n
¡Gracias por jugar!

Requisitos:

Ejercicio 3. Proyecto juego

Programa que implementará un juego con las siguientes características:

Ejercicio 3: Proyecto juego

Reglas del juego:
* Cada participante tira 3 veces un dado (valores 1-100)
* Se suman las puntuaciones según estas reglas:
  * Múltiplo de 3 o 5: +10 pts
  * Múltiplo de 4 o 6: +5 pts
  * Mayor de 80: +2 pts
  * Mayor de 50: +1 pts
  * Menor de 50: -2 pts
  * Menor de 20: -1 pts
* Gana quien obtenga mayor puntuación total

Introduce el número de participantes: 2

--- PARTICIPANTE 1 ---
Tirada 1: Dado = 78, Puntos = +16
Tirada 2: Dado = 3, Puntos = +7
Tirada 3: Dado = 66, Puntos = +16
Puntuación total del participante 1: 39

--- PARTICIPANTE 2 ---
Tirada 1: Dado = 40, Puntos = +13
Tirada 2: Dado = 13, Puntos = -3
Tirada 3: Dado = 75, Puntos = +11
Puntuación total del participante 2: 21

=== RESULTADO FINAL ===
¡El ganador es el PARTICIPANTE 1 con 39 puntos!

Presiona cualquier tecla para salir...

Requisitos:

G mm Main pj PresentaJuego mm->pj np PideNumeroParticipantes mm->np jp JuegoParticipante mm->jp 1...n jugadores mg MuestraGanador mm->mg td TiraDado jp->td 1...3 tiradas cp CalculaPuntos jp->cp 1...3 tiradas

Ejercicio 4. Proyecto Conversores

El proyecto 4 tratará de escribe un programa que lea un número en base 10 (decimal) y que posteriormente muestre un menú que nos permita convertirlo a base 2 (binario), base 8 (octal) o base 16 (hexadecimal).

Crea un método llamado PasaABinario, otro llamado PasaAOctal y otro llamado PasaAHexadecimal para realizar dichas operaciones.
Todos los métodos devolverán un string que contendrá los dígitos resultantes de la conversión.

👁️ Nota 1: No se puede usar el método Convert existente ya en C#.
👁️ Nota 2: Evita el código repetido.

Ejercicio 4. Proyecto conversores

Introduce un número decimal: 15

=== CONVERSOR DE BASES ===
1. Convertir a binario (base 2)
2. Convertir a octal (base 8)
3. Convertir a hexadecimal (base 16)
4. Salir
Selecciona una opción (1-4): 6
Opción no válida. Por favor, selecciona una opción del 1 al 4.

=== CONVERSOR DE BASES ===
1. Convertir a binario (base 2)
2. Convertir a octal (base 8)
3. Convertir a hexadecimal (base 16)
4. Salir
Selecciona una opción (1-4): 1
15 en binario es: 1111

Introduce un número decimal: 15

=== CONVERSOR DE BASES ===
1. Convertir a binario (base 2)
2. Convertir a octal (base 8)
3. Convertir a hexadecimal (base 16)
4. Salir
Selecciona una opción (1-4): 2
15 en octal es: 17

Introduce un número decimal: 15

=== CONVERSOR DE BASES ===
1. Convertir a binario (base 2)
2. Convertir a octal (base 8)
3. Convertir a hexadecimal (base 16)
4. Salir
Selecciona una opción (1-4): 3
15 en hexadecimal es: F

Introduce un número decimal: 4

=== CONVERSOR DE BASES ===
1. Convertir a binario (base 2)
2. Convertir a octal (base 8)
3. Convertir a hexadecimal (base 16)
4. Salir
Selecciona una opción (1-4): 4
¡Hasta luego!
Presiona cualquier tecla para salir...

Requisitos:

De esta manera no necesito invertir porque ya la tengo en el orden correcto. La idea es, en lugar de concatenar por la derecha, concatenar por la izquierda.

Ejercicio 5. Funciones con cuerpo de expresión

Crea un conjunto de funciones matemáticas simples usando sintaxis de expresión.

Ejercicio 5: Funciones con cuerpo de expresión
Introduce un número: 5
Introduce otro número: 3

Número absoluto de -5: 5
¿5 es par? False
¿3 es primo? True
Máximo entre 5 y 3: 5
Mínimo entre 5 y 3: 3

Requisitos:

Ejercicio 6. Polimorfismo funcional. Gestión Taxi

Para practicar el concepto de polimorfismo funcional o sobrecarga, vamos a suponer que tenemos un método de utilidad que nos permite calcular el coste de la carrera de un taxi.

Ejercicio 6. Polimorfismo funcional. Gestión Taxi

Coste carrera lunes mañana -> 21,38
Coste carrera lunes noche -> 27,80
Coste carrera lunes con mi mascota Dogo -> 22,38
Coste carrera Domingo de Ramos -> 29,94
Coste carrera Domingo noche -> 27,80
Coste carrera Domingo de Ramos noche con Dogo y Minina -> 31,94

Pulse una tecla para finalizar...

Requisitos
Hay cuatro conceptos básicos que conforman el precio de la carrera. Dos de ellos fijos, que son la bajada de bandera y la carrera mínima, y dos conceptos variables en cada trayecto: los kilómetros recorridos y el tiempo de espera.
Además de los cuatro conceptos básicos, existen algunos recargos o suplementos que deben pagarse en determinadas circunstancias: por día festivo o domingo, por horario nocturno, por mascotas u otros conceptos de ocupación extra.

A partir del método CosteCarrera con parámetros opcionales que se muestra a continuación, refactoríza el código para quitar los parámetros opcionales de métodos públicos sobrecargando CosteCarrera y que se ofrezcan sobrecargas con el menor número de parámetros posibles.

📌 Nota: Modificaremos el Main para evitar llamadas donde se pasen los valores a 0 o a false en las llamadas a CosteCarrera, al realizar estos cambios deberás modificar el tipo de ocupacionExtra a uint, para que no se produzca ambigüedad en la llamada.

public static class Taxi
{
    const float BAJADA_BANDERA = 1.82F;
    const float CARRERA_MINIMA = 3.63F;
    const float COSTE_KM = 0.9F;
    const float ESPERA_POR_HORA = 18.77F;
    const short PORCENTAJE_NOCTURNO = 30;

    public static double CosteCarrera(
                    float kilometrosRecorridos, float minutosEspera,
                    bool nocturno = false, int porcentajeFestivo = 0, int ocupacionExtra = 0)
    {
        float costeCarrera = BAJADA_BANDERA + kilometrosRecorridos * COSTE_KM
                                 + minutosEspera * (ESPERA_POR_HORA / 60);
        costeCarrera = costeCarrera < CARRERA_MINIMA ? CARRERA_MINIMA : costeCarrera;
        float incrementoNocturno = nocturno ? costeCarrera * PORCENTAJE_NOCTURNO / 100f : 0;
        float incrementoFestivo = porcentajeFestivo != 0 ? costeCarrera * porcentajeFestivo / 100f : 0;
        costeCarrera += incrementoFestivo >= incrementoNocturno ? incrementoFestivo : incrementoNocturno;
        costeCarrera += ocupacionExtra;
        return costeCarrera;
    }
}
class Program
{
    static void Main()
    {
        
        Console.WriteLine("Ejercicio 6. Polimorfismo funcional. Gestión Taxi\n");
        Console.WriteLine($"Coste carrera lunes mañana -> {Taxi.CosteCarrera(20, 5):f2}");
        Console.WriteLine($"Coste carrera lunes noche -> {Taxi.CosteCarrera(20, 5, true):f2}");
        Console.WriteLine($"Coste carrera lunes con mi mascota Dogo -> " +
                          $"{Taxi.CosteCarrera(20, 5, 1u):f2}");
        Console.WriteLine($"Coste carrera Domingo de Ramos -> {Taxi.CosteCarrera(20, 5, 40):f2}");
        Console.WriteLine($"Coste carrera Domingo noche -> {Taxi.CosteCarrera(20, 5, true, 20):f2}");
        Console.WriteLine($"Coste carrera Domingo de Ramos noche con Dogo y Minina -> " +
                          $"{Taxi.CosteCarrera(20, 5, true, 40, 2u):f2}");
        Console.WriteLine("\nPulse una tecla para finalizar...");
        Console.ReadKey(true);
    }
}