Parcours
/
C++
C++
/
Exercices
/
Tarifs d'un freelance
Tarifs d'un freelance

Tarifs d'un freelance

Exercice d'apprentissage

Introduction

Les types numériques intégrés de C++ se divisent en deux catégories : les nombres entiers et les nombres à virgule flottante. Les nombres entiers sont des nombres sans partie décimale, comme 0, 691 ou -2. Les nombres à virgule flottante sont des nombres qui comportent une virgule décimale, comme 6.02214076, 0.1 ou -1.616.

Nombres entiers

L'exemple suivant montre la déclaration et l'initialisation de quatre variables différentes

int m_morales{9241};              // base 10: 0-9
int a_apaec{0x24CD};              // base 16: 0-9 and A-F
int m_gargan{0b10010000011001};   // base  2: 0-1
int b_reilly{022031};             // base  8: 0-7
                                  // Leading with a 0 not the letter o.

Pour affecter une valeur à une variable int, on peut le faire directement avec un littéral. Un littéral est un nombre écrit « en dur », c'est-à-dire une valeur fixe écrite directement dans le code, comme 9241. Il existe différents littéraux entiers pour plusieurs bases de représentation. Les littéraux entiers décimaux sont les plus courants et utilisent les chiffres 0 à 9. En ajoutant un préfixe spécial, comme 0x, on peut utiliser d'autres bases. L'exemple ci-dessus montre le nombre 9241 dans ses quatre représentations et préfixes. Toutes les variables sont initialisées à la même valeur.

Pour plus de détails sur les différents systèmes de représentation, jette un œil à un petit tutoriel.

Tu peux utiliser une apostrophe pour séparer les chiffres et rendre le nombre plus lisible. 9'241 est identique à 0b0100'100'0001'1001 ou 92'4'1.

Nombres à virgule flottante

Les littéraux à virgule flottante se présentent sous deux formes. En plus de la forme intuitive 0.0024, on peut utiliser sa notation scientifique 2.4e-3. Le type à virgule flottante le plus courant est double.

Arithmétique

C++ prend en charge +, -, *, /, ( et ) et % pour former des expressions. Le résultat de l'opération entre deux entiers est aussi un entier. 5 / 2 renvoie 2. Quand l'un des types impliqués est un type à virgule flottante, le résultat est lui aussi un nombre à virgule flottante. 5.0 / 2 et 5 / 2.0 renvoient 2.5. % est l'opérateur modulo et renvoie le reste d'une division entière : 5%3 vaut 2.

L'opérateur d'affectation

L'opérateur d'affectation permet d'affecter un littéral à une variable. L'affectation se fait toujours de droite à gauche, et jamais dans l'autre sens.

int length = 5;
int width = 2;
length = width;

Ici, la valeur entière 5 est affectée à la variable length. Ensuite, la valeur entière 2 est affectée à la variable width. Enfin, la valeur de width est copiée dans la variable length et l'ancienne valeur 5 est perdue. Note aussi qu'on n'affecte la valeur de width à length qu'au moment de l'opération d'affectation. Par conséquent, si la valeur de width change plus tard, cela n'affectera pas la valeur prise par length.

L'opérateur d'affectation peut être combiné avec les autres opérateurs (arithmétiques et binaires) : on parle alors d'opérateurs compound assignment, à savoir +=, -=, *=, /=, %=. Ces opérateurs modifient la valeur actuelle d'une variable en lui appliquant une opération.

// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6

Les variables people et eggs sont initialisées à 0. Ensuite, on ajoute la valeur entière 2 à la valeur existante 0 de la variable people et on réaffecte le résultat à people. people vaut maintenant 2. Plus tard, on ajoute 3 œufs par personne, ce qui donne 6 œufs au total. On ajoute maintenant ce 6 à la valeur existante 0 de la variable eggs et on réaffecte le résultat à eggs. eggs vaut 6 maintenant. L'expression équivalente serait people = people + 2 et eggs = eggs + (3 * people).

Instructions

Dans cet exercice, tu vas écrire du code pour aider un freelance à communiquer avec un chef de projet. Ta tâche consiste à fournir quelques utilitaires pour calculer rapidement des tarifs journaliers et mensuels, éventuellement avec une remise donnée.

On établit d'abord quelques règles entre le freelance et le chef de projet :

  • Le tarif journalier correspond à 8 fois le tarif horaire.
  • Un mois compte 22 jours facturables.

Il arrive que le freelance propose d'appliquer une remise sur son tarif journalier (par exemple pour ses clients les plus fidèles ou pour des clients à but non lucratif).

Les remises sont modélisées sous forme de nombres décimaux représentant des pourcentages, par exemple 25.0 (25 %).

1. Calculer le tarif journalier à partir d'un tarif horaire

Implémente une fonction appelée daily_rate qui calcule le tarif journalier à partir d'un tarif horaire passé en paramètre. Le contrat définit qu'une journée compte 8 heures facturables.

daily_rate(60)
// => 480.0

Le tarif journalier renvoyé doit être de type double.

2. Calculer un prix après remise

Implémente une fonction apply_discount pour calculer le prix après remise. Elle doit accepter deux paramètres : le prix d'origine et le taux de remise en pourcentage.

apply_discount(150, 10)
// => 135.0

La valeur renvoyée doit toujours être de type double, sans aucun arrondi.

3. Calculer le tarif mensuel à partir d'un tarif horaire et d'une remise

Implémente une fonction monthly_rate pour calculer le tarif mensuel après remise. Elle prend deux paramètres : un tarif horaire et la remise en pourcentage.

monthly_rate(77, 10.5)
// => 12130

Le tarif mensuel renvoyé doit être arrondi vers le haut (arrondi au plafond) à l'entier le plus proche.

4. Calculer le nombre de jours travaillés complets à partir d'un budget, d'un tarif horaire et d'une remise

Implémente une fonction days_in_budget qui prend un budget, un tarif horaire et une remise, et calcule combien de journées de travail complètes cela permet de couvrir.

days_in_budget(20'000, 80, 11.0)
// => 35

Le nombre de jours renvoyé doit être arrondi vers le bas (arrondi au plancher) à l'entier inférieur.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C++ Exercism

Prêt à commencer Tarifs d'un freelance ?

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