Lasagnes

Lasagnes

Exercice d'apprentissage

Introduction

Les bases

Pour commencer le voyage C++, on démarre avec les variables, les appels de fonctions et les commentaires.

Les commentaires

Les commentaires existent en deux variantes : sur une seule ligne ou sur plusieurs lignes. Tout ce qui suit // sur la même ligne est ignoré par le compilateur. Les commentaires sur plusieurs lignes sont aussi appelés commentaires de style C. Ils sont encadrés par /* et */. Tout ce qui se trouve entre les deux est également ignoré.

Les variables

C++ est un langage typé. Tous les types doivent être connus à la compilation, et tu dois généralement les indiquer explicitement. Le type d'une variable ne peut pas changer. Une variable entière nommée years peut se déclarer comme ceci :

int years;

C'est une bonne pratique d'initialiser les variables au moment de leur déclaration. C++ propose plusieurs mécanismes pour cela. La version avec les accolades est plus conforme au C++ moderne, mais la version avec le signe égal est aussi très courante.

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

C++ autorise bel et bien l'utilisation de variables non initialisées. Tant que la variable n'a pas été définie volontairement, sa valeur est indéfinie et peut contenir n'importe quoi. Pour éviter les erreurs d'utilisation avant initialisation et le comportement indéfini, il est conseillé de toujours initialiser. Un comportement indéfini peut faire planter ton programme au pire moment possible, alors qu'il fonctionnait très bien jusque-là. On ne le répétera jamais assez : évite le comportement indéfini à tout prix.

Les opérations arithmétiques

Les opérateurs arithmétiques comme *, + ou - peuvent faire partie d'une expression comme 3 * 2 ou tomatoes + potatoes.

Mettre à jour les variables

Tu peux réaffecter des variables, tant qu'elles conservent leur type :

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

Les fonctions

Une fonction possède un nom, un type de retour et une liste de paramètres (éventuellement vide). Voici à quoi ressemblerait une fonction nommée always_fortyseven qui renverrait toujours 47 :

int always_fortyseven() {
    return 47;
}

Voici vip_fee, qui prend un paramètre :

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;
}

Ou encore total_fee, une fonction qui prend trois paramètres et contient un appel à une autre fonction.

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;
}

En C++, les fonctions ne renvoient pas la valeur de la dernière instruction comme dans certains autres langages. Le mot-clé return est obligatoire pour que le code compile.

Les espaces blancs

Les espaces blancs servent à formater le code source et désignent les espaces, les tabulations ou les retours à la ligne. Comme le compilateur ignore les espaces blancs inutiles, tu peux t'en servir pour structurer ton code. Un usage judicieux des espaces blancs peut améliorer la lisibilité de ton code. Il existe différentes conventions de formatage, mais elles restent toutes conventionnelles et ne sont pas imposées par le compilateur.

// 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

Instructions

La petite amie de Lucian rentre à la maison et il n'a pas encore préparé le dîner de leur anniversaire !

Dans cet exercice, tu vas écrire du code pour aider Lucian à cuisiner une lasagne exquise tirée de son livre de recettes préféré.

Il y a quatre tâches, toutes liées au temps passé à cuisiner la lasagne.

1. Définis le temps de cuisson attendu en minutes

Définis la fonction ovenTime() qui ne prend aucun argument et renvoie le nombre de minutes pendant lesquelles la lasagne doit rester au four. D'après le livre de recettes, le temps de cuisson attendu est de 40 minutes :

ovenTime();
// => 40

2. Calcule le temps de cuisson restant en minutes

Définis la fonction remainingOvenTime(int actualMinutesInOven) qui prend en argument le nombre de minutes que la lasagne a déjà passées au four et renvoie combien de minutes la lasagne doit encore rester au four, en se basant sur le temps de cuisson attendu en minutes de la tâche précédente.

remainingOvenTime(30);
// => 10

3. Calcule le temps de préparation en minutes

Définis la fonction preparationTime(int numberOfLayers) qui prend en argument le nombre de couches que tu as ajoutées à la lasagne et renvoie combien de minutes tu as passées à préparer la lasagne, en supposant que chaque couche te prend 2 minutes à préparer.

preparationTime(2);
// => 4

4. Calcule le temps écoulé en minutes

Définis la fonction elapsedTime(int numberOfLayers, int actualMinutesInOven) qui prend deux arguments : le premier argument est le nombre de couches que tu as ajoutées à la lasagne, et le second argument est le nombre de minutes que la lasagne a passées au four. La fonction doit renvoyer le nombre de minutes que tu as passées à cuisiner la lasagne, c'est-à-dire la somme du temps de préparation en minutes et du temps en minutes que la lasagne a passé au four à cet instant.

elapsedTime(3, 20);
// => 26
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C++ Exercism

Prêt à commencer Lasagnes ?

Inscris-toi sur Exercism pour apprendre et maîtriser C++ avec 19 concepts100 exercices, et un vrai mentorat humain, le tout gratuitement.