Aller au contenu
Topos Uranos

Résumé

Cette leçon ouvre la quatrième unité du cours, consacrée aux structures de contrôle. Elle explique à quoi sert l’unité : enseigner à gouverner l’ordre dans lequel s’exécutent les instructions d’un programme, avec des décisions et avec des boucles, et à raisonner sur leur correction, c’est-à-dire à s’assurer que chaque cas est traité, que chaque boucle fait ce qu’elle doit et qu’elle se termine ; elle présente ses quatre leçons et le fil qui les relie ; elle rappelle ce que l’unité tient pour acquis, surtout les conditions composées de l’unité 3 ; elle formule le problème que l’unité résout, celui d’un programme qui calcule le plus grand commun diviseur avec un nombre fixe d’étapes et qui, selon les données, répond faux ou s’arrête sur une division par zéro ; elle anticipe l’invariant comme l’outil avec lequel l’unité justifiera ses boucles ; 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. Rappeler les conditions composées de l’unité 3 (les connecteurs, l’évaluation en court-circuit et la négation par les lois de De Morgan) et les revoir si nécessaire.
  3. Anticiper, sur un exemple, l’invariant comme outil de raisonnement : une relation entre les variables qu’une répétition conserve et qui, à la fin, donne le résultat.
  4. Reconnaître ce que l’on attend de savoir faire à la fin de l’unité, et le distinguer de ce qui s’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 : la négation d’une condition composée, l’évaluation en court-circuit, la trace d’une répétition de la leçon 1.1 et la limite d’un int. Les sept 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 : le plus grand commun diviseur, la notation de sommation, la terminaison d’un procédé. Personne n’est tenu de les réussir déjà, et pour certaines 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édentesQuelle est la négation de la condition 1 <= n && n <= 10 ?

  2. Question 2Des unités précédentesAvec int d{0}; et int n{5};, que se passe-t-il quand on évalue d != 0 && n / d > 2 ?

  3. Question 3Des unités précédentesLa division par soustractions successives de la leçon 1.1 commence avec q=0q = 0 et r=ar = a, et répète « tant que r≥br \geq b, soustraire bb de rr et ajouter 1 à qq ». Avec a=20a = 20 et b=5b = 5, combien de fois le corps de la répétition s’exécute-t-il ?

  4. Question 4Des unités précédentesAvec un int de 32 bits, que garantit la norme sur la valeur de 46341 * 46341 ?

  5. Question 5Un programme contient la chaîne de décisions if (score >= 50), qui écrit « Réussi » ; else if (score >= 90), qui écrit « Excellent » ; et else, qui écrit « Échoué ». Qu’écrit-il avec score égal à 95 ?

  6. Question 6Laquelle des expressions suivantes désigne la somme 1+2+⋯+n1 + 2 + \cdots + n ?

  7. Question 7Avec int total{0};, qu’écrit std::println("{}", total); après for (int i{0}; i < 5; ++i) { total += i; } ?

  8. Question 8Dans la division par soustractions successives (q=0q = 0, r=ar = a ; tant que r≥br \geq b, rr devient r−br - b et qq devient q+1q + 1), quelle relation entre les variables est vraie chaque fois qu’on évalue la condition ?

  9. Question 9Un procédé part d’un entier nn quelconque (strictement positif, nul ou strictement négatif) et répète « tant que n>0n > 0, soustraire 2 de nn ». Se termine-t-il pour tout nn ?

  10. Question 10Quel est le plus grand commun diviseur de 84 et 36 ?

  11. Question 11Pour décider si 101 est premier en essayant des diviseurs, jusqu’à quel diviseur suffit-il d’aller ?