Lasaña

Lasaña

Ejercicio de aprendizaje

Introducción

Conceptos básicos

Para dar inicio al recorrido por C++, empezamos con variables, llamadas a funciones y comentarios.

Comentarios

Los comentarios son de dos tipos: de una sola línea y de varias líneas. Todo lo que viene después de // en la misma línea es ignorado por el compilador. Los comentarios de varias líneas también se conocen como comentarios de estilo C. Van encerrados entre /* y */. Todo lo que esté entre ellos también será ignorado.

Variables

C++ es un lenguaje tipado. Todos los tipos deben conocerse en tiempo de compilación y, por lo general, hay que indicarlos de forma explícita. El tipo de una variable no puede cambiar. Una variable entera con el nombre years se puede declarar así:

int years;

Es buena práctica inicializar las variables al declararlas. C++ ofrece distintos mecanismos para hacerlo. La versión con las llaves está más en línea con el C++ moderno, pero la versión con el signo igual también es muy común.

int tomatoes{80};
int potatoes = 40;
Caution

C++ sí permite usar variables sin inicializar. Hasta que la variable se establece de forma deliberada, está indefinida y podría contener cualquier cosa. Para evitar errores por usar una variable antes de asignarla y el comportamiento indefinido, es recomendable inicializar siempre. El comportamiento indefinido puede hacer que tu programa falle en el peor momento posible, aunque antes estuviera funcionando bien. No se puede insistir lo suficiente: evita el comportamiento indefinido a toda costa.

Operaciones aritméticas

Los operadores aritméticos como *, + o - pueden formar parte de una expresión como 3 * 2 o tomatoes + potatoes.

Actualización de variables

Puedes reasignar variables, siempre que conserven su tipo:

tomatoes = tomatoes - 5; // tomatoes is now 75
potatoes = (32 * 2) + 11; // potatoes is now 75 as well

Funciones

Las funciones tienen un nombre, un tipo de retorno y una lista de parámetros (posiblemente vacía). Un ejemplo de una función llamada always_fortyseven que siempre devolviera 47 se vería así:

int always_fortyseven() {
    return 47;
}

Aquí está vip_fee, que tiene un parámetro:

int vip_fee(int standard_fee) {
    /*
    vip_fee calculates the vip fee based on the standard_fee.
    */
    int vip_multi{3};
    return standard_fee * vip_multi;
}

O total_fee, una función con tres parámetros y una llamada a otra función.

int total_fee(int vips, int adults, int kids) {
    /*
    total_fee calculates the total price for a group of VIP and adult guests with kids.
    Kids get a flat discount on the standard fee.
    VIP guest fees are calculated by calling vip_fee.
    */
    int standard_fee{30};
    int kids_discount{15};

    int kids_total_fee = kids * (standard_fee - kids_discount);
    int vips_total_fee = vips * vip_fee(standard_fee);
    int adult_total_fee = adults * standard_fee;

    return vips_total_fee + adult_total_fee + kids_total_fee;
}

Las funciones en C++ no devuelven el valor de la última sentencia como en algunos otros lenguajes. La palabra clave return es obligatoria para que el código compile.

Espacios en blanco

Los espacios en blanco se usan para dar formato al código fuente e incluyen espacios, tabulaciones o saltos de línea. Como el compilador ignora los espacios en blanco innecesarios, puedes usarlos para estructurar tu código. Un uso inteligente de los espacios en blanco puede mejorar la legibilidad de tu código. Existen distintos estándares de formato, pero todos son convencionales y el compilador no los exige.

// Formatting makes it easier to find bugs

int eggs_yolks =  3;
int      yeast = 15;

int flour=500;int sugar=200;// compact, but difficult to read

Instrucciones

¡La novia de Lucian está de camino a casa y él todavía no ha preparado la cena de su aniversario!

En este ejercicio, vas a escribir algo de código para ayudar a Lucian a preparar una lasaña exquisita de su libro de cocina favorito.

Tienes cuatro tareas, todas relacionadas con el tiempo dedicado a cocinar la lasaña.

1. Define el tiempo esperado en el horno en minutos

Define la función ovenTime() que no recibe ningún argumento y devuelve cuántos minutos debe estar la lasaña en el horno. Según el libro de cocina, el tiempo esperado en el horno es de 40 minutos:

ovenTime();
// => 40

2. Calcula el tiempo restante en el horno en minutos

Define la función remainingOvenTime(int actualMinutesInOven) que recibe como argumento los minutos reales que la lasaña ha estado en el horno y devuelve cuántos minutos aún debe permanecer la lasaña en el horno, según el tiempo esperado en minutos de la tarea anterior.

remainingOvenTime(30);
// => 10

3. Calcula el tiempo de preparación en minutos

Define la función preparationTime(int numberOfLayers) que recibe como argumento la cantidad de capas que agregaste a la lasaña y devuelve cuántos minutos dedicaste a preparar la lasaña, asumiendo que cada capa te toma 2 minutos de preparación.

preparationTime(2);
// => 4

4. Calcula el tiempo transcurrido en minutos

Define la función elapsedTime(int numberOfLayers, int actualMinutesInOven) que recibe dos argumentos: el primer argumento es la cantidad de capas que agregaste a la lasaña, y el segundo argumento es la cantidad de minutos que la lasaña ha estado en el horno. La función debe devolver cuántos minutos has dedicado a cocinar la lasaña, que es la suma del tiempo de preparación en minutos y el tiempo en minutos que la lasaña ha pasado en el horno hasta ese momento.

elapsedTime(3, 20);
// => 26
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
C++ Exercism

¿Todo listo para empezar Lasaña?

Regístrate en Exercism para aprender y dominar C++ con 19 conceptos100 ejercicios y mentoría humana real, todo gratis.