Aller au contenu
Topos Uranos

Résumé

Cette leçon ouvre la troisième unité du cours, consacrée aux expressions et à leurs opérateurs. Elle explique à quoi sert l’unité : enseigner à construire des expressions dont la valeur se prédit avec certitude, en sachant quelle opération est effectuée d’abord, de quel type est le résultat, quels effets de bord elles ont et quelles expressions n’ont pas de signification ; elle présente ses quatre leçons et le fil qui les relie, de l’arithmétique entière et réelle jusqu’aux bits et à la bibliothèque mathématique, en passant par les conditions et par le catalogue du comportement indéfini ; elle rappelle ce que l’unité tient pour acquis de la deuxième, à savoir le type de chaque donnée, ses limites et ses conversions ; elle formule le problème que l’unité résout, celui d’un programme qui compile sans un seul avertissement et dont les réponses à six questions scolaires sont toutes fausses, quand elles ne manquent pas ; 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 suite des contenus de l’unité et expliquer ce que chaque leçon apporte à la suivante.
  2. Se rappeler le nécessaire de l’unité 2 (les types entiers et réels, leurs plages, le dépassement et les conversions) et le revoir si besoin.
  3. Anticiper, sur un exemple, que la valeur d’une expression dépend de règles d’évaluation (la priorité, le type des opérandes, l’ordre des effets) qui ne coïncident pas toujours avec celles des mathématiques scolaires.
  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 deuxième : la division entre entiers, l’écriture en base 2, la soustraction non signée et le dépassement signé. Les six suivantes touchent, dans l’ordre des leçons, aux idées centrales de l’unité, et plusieurs d’entre elles partent des mathématiques scolaires ou de la logique élémentaire. Personne n’est tenu de les réussir déjà, et pour deux d’entre 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édentesUn programme déclare const double r{7 / 2}; et écrit r. Qu’apparaît-il ?

  2. Question 2Des unités précédentesComment s’écrit le nombre 13 en base 2, sur huit bits ?

  3. Question 3Des unités précédentesQu’écrit std::println("{}", 0u - 1); avec un unsigned int de 32 bits ?

  4. Question 4Des unités précédentesUn programme exécute int count{std::numeric_limits<int>::max()}; puis count = count + 1;. Que garantit la norme sur la valeur de count ?

  5. Question 5Que valent 2+3⋅42 + 3 \cdot 4 et (2+3)⋅4(2 + 3) \cdot 4 ?

  6. Question 6D’après le théorème de la division des mathématiques, avec le reste rr soumis à 0≤r<20 \leq r < 2, quels sont le quotient qq et le reste rr de −7-7 par 22 ?

  7. Question 7Quelle est la négation de « il pleut et il fait froid » ?

  8. Question 8Qu’écrit std::println("{}", 3 < 5); ?

  9. Question 9Après int a{5}; et int b{a++ * 2};, que valent a et b ?

  10. Question 10Qu’écrit std::println("{}", 2 ^ 3); ?