Aller au contenu
Topos Uranos

Résumé

Cette leçon ouvre la deuxième unité du cours, consacrée aux données et à leurs types. Elle explique à quoi sert l’unité : enseigner que toute donnée d’un programme vit en mémoire avec un type qui fixe les valeurs qu’elle peut prendre, la place qu’elle occupe et les opérations qu’elle admet, et que ces limites ont des conséquences observables ; elle présente ses quatre leçons et le fil qui les relie, de la variable comme case dotée d’un nom et d’une valeur jusqu’aux conversions entre types et aux constantes ; elle rappelle ce que l’unité tient pour acquis de la première, à savoir écrire, compiler et exécuter un programme qui lit et écrit ; elle formule le problème que l’unité résout, celui d’un programme correct en apparence dont les calculs ne coïncident pas avec ceux des mathématiques, à commencer par la somme 0.1+0.20.1 + 0.2, qui sur un ordinateur ne donne pas exactement 0.30.3 ; et elle montre où elle mène, dans les unités suivantes et dans le cours Programmation en C++ II.

Objectifs d’apprentissage

  1. Décrire la séquence des contenus de l’unité et expliquer ce que chaque leçon apporte à la suivante.
  2. Se rappeler le nécessaire de l’unité 1 (le cycle compiler et exécuter, la sortie formatée, la lecture avec std::cin et la lecture des messages du compilateur) et le réviser si besoin.
  3. Expliquer, sur un exemple, pourquoi un nombre d’un programme n’est pas un nombre des mathématiques, et anticiper pourquoi 0.1+0.20.1 + 0.2 ne vaut pas exactement 0.30.3 sur un ordinateur.
  4. Reconnaître ce que l’on attend de savoir faire à la fin de l’unité, et le distinguer de ce que l’on apprendra dans les unités suivantes.

Évaluation d’entrée

Avant de parcourir l’unité, il convient de mesurer le point de départ. Cette évaluation est une autoévaluation : elle n’est pas notée, et son seul but est d’orienter l’étude. Les quatre premières questions vérifient ce que l’unité tient pour acquis de la première : le suivi d’une procédure étape par étape, l’écriture d’un nombre avec deux décimales, l’arrondi et la lecture d’un message d’erreur. Les six suivantes touchent, dans l’ordre des leçons, aux idées centrales de l’unité. Personne n’est tenu de les réussir déjà, et pour l’une d’elles « je ne le sais pas encore » est une réponse honnête : chaque réponse, juste ou non, explique le point et nomme la leçon qui le traite. Les mêmes compétences sont mesurées de nouveau à la fin, dans la leçon de synthèse.

Évaluation d’entrée

Avant de commencer l’unité, mesurez votre point de départ. C’est une autoévaluation brève : elle n’est pas notée et son résultat n’est conservé que dans votre navigateur.

  1. Question 1Des unités précédentesUne procédure dit : « 1. rr prend la valeur 17. 2. rr prend la valeur r−5r - 5. 3. rr prend la valeur r−5r - 5 ». Que vaut rr à la fin ?

  2. Question 2Des unités précédentesQu’écrit l’instruction std::println("{:.2f}", 2.0 / 3); ?

  3. Question 3Des unités précédentesOn veut écrire 12.34612.346 avec deux décimales, en arrondissant. Qu’obtient-on ?

  4. Question 4Des unités précédentesUn programme contient à la ligne 5 const int pages{12} et à la ligne 6 std::println("{}", pages);. Le compilateur écrit 6:5: error: expected ',' or ';' before 'std'. Où est le défaut ?

  5. Question 5Un programme déclare int a{2}; et int b{7};, puis exécute a = b; et b = 10;. Que vaut a à la fin ?

  6. Question 6Comment s’écrit le nombre 13 en base 2 ?

  7. Question 7Un int de 4 octets contient 2 147 483 6472\,147\,483\,647, sa valeur maximale, et le programme lui ajoute 1. Que peut-on affirmer ?

  8. Question 8Le nombre 1/31/3 a-t-il un développement décimal fini ?

  9. Question 9Qu’écrit std::println("{}", 0.1 + 0.2); ?

  10. Question 10Un programme déclare const double ratio{7 / 2}; et écrit ratio. Qu’est-ce qui s’affiche ?