Lasaña

Lasaña

Ejercicio de aprendizaje

Introducción

Conceptos básicos

Para poner en marcha el viaje con C++, empezamos con variables, llamadas a funciones y comentarios.

Comentarios

Hay dos tipos de comentarios: de una sola línea y de varias líneas. Todo lo que aparece después de // en la misma línea lo ignora el compilador. Los comentarios de varias líneas también se conocen como comentarios al estilo C. Van rodeados de /* y */. Todo lo que aparezca entre ellos también se ignorará.

Variables

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

int years;

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

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

C++ sí permite usar variables sin inicializar. Hasta que la variable se establece de forma deliberada, su valor es indefinido y puede contener cualquier cosa. Para evitar errores de uso antes de la asignación y comportamientos indefinidos, es recomendable inicializar siempre. Un comportamiento indefinido puede hacer que tu programa se bloquee en el peor momento posible, cuando antes funcionaba sin problemas. Nunca se 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.

Actualizar variables

Puedes reasignar variables, siempre que mantengan 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 devuelto y una lista de parámetros (que puede estar vacía). Un ejemplo de una función llamada always_fortyseven que siempre devolvería 47 sería así:

int always_fortyseven() {
    return 47;
}

Aquí tienes 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 instrucción como en otros lenguajes. La palabra clave return es obligatoria para que el código compile.

Espacio en blanco

El espacio en blanco se usa para dar formato al código fuente e incluye espacios, tabulaciones y saltos de línea. Como el compilador ignora el espacio en blanco innecesario, puedes usarlo para estructurar tu código. Un uso inteligente del espacio 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 impone.

// 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 ¡aún no ha preparado la cena de su aniversario!

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

Tienes cuatro tareas, todas relacionadas con el tiempo que se tarda en 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 que la lasaña lleva en el horno y devuelve cuántos minutos le quedan aún por estar 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 el número de capas que has añadido a la lasaña y devuelve cuántos minutos has tardado en prepararla, suponiendo que cada capa te lleva 2 minutos.

preparationTime(2);
// => 4

4. Calcula el tiempo transcurrido en minutos

Define la función elapsedTime(int numberOfLayers, int actualMinutesInOven), que recibe dos argumentos: el primero es el número de capas que has añadido a la lasaña, y el segundo es el número de minutos que la lasaña lleva 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 lleva en el horno en ese momento.

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

¿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.