Aller au contenu
Topos Uranos

Résumé

Cette leçon ouvre la septième unité du cours, consacrée au texte et aux fichiers. Elle explique à quoi sert l’unité : apprendre à traiter le texte comme une donnée, avec son encodage réel, et à faire qu’un programme lise et écrive des fichiers sans se briser devant une entrée mal formée ; elle présente ses quatre leçons et le fil qui les unit ; elle rappelle ce que l’unité tient pour acquis, surtout qu’un caractère est, pour la machine, un nombre, ainsi que les vecteurs, les enregistrements et les fonctions des unités 5 et 6 ; elle formule le problème que l’unité résout, celui d’un programme d’apparence correcte qui perd des données sans prévenir, s’arrête à la première ligne inattendue et mesure mal les noms à accents ; elle annonce qu’une lettre n’occupe pas toujours un octet ; et elle montre où elle mène, dans l’unité 8 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. Rappeler la représentation des caractères par des codes numériques (leçon 2.4) et écrire un code en binaire et en hexadécimal.
  3. Anticiper, sur un exemple, qu’une lettre n’est pas toujours un octet, et que, pour cette raison, compter des octets n’est pas compter des lettres.
  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 l’unité suivante et dans Programmation en C++ II.

É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 six premières questions vérifient ce que l’unité tient pour acquis : le code d’un caractère, l’écriture d’un nombre en binaire et en hexadécimal, un masque de bits, le parcours d’un vecteur qui filtre ses éléments, ce qui se passe quand une lecture reçoit des lettres au lieu d’un nombre et la définition d’un enregistrement. Les quatre suivantes touchent, dans l’ordre des leçons, aux idées centrales de l’unité : ce que renvoie une recherche qui ne trouve rien, la taille d’un mot accentué, la ligne vide qui apparaît quand on mélange deux manières de lire et le fichier qui n’a pas pu être ouvert. Personne n’est tenu de réussir ces quatre-là dès maintenant, 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édentesQu’écrit std::println("{:d} {:d}", 'A', 'a'); ?

  2. Question 2Des unités précédentesComment s’écrit 233 en binaire et en hexadécimal ?

  3. Question 3Des unités précédentesQue vaut 0xB1 & 0xC0 ?

  4. Question 4Des unités précédentesQu’écrit std::vector<int> v{4, 7, 10, 3}; std::vector<int> w{}; for (const int x : v) { if (x % 2 == 0) { w.push_back(x); } } std::println("{}", w); ?

  5. Question 5Des unités précédentesAprès int n{-1}; std::cin >> n;, l’utilisateur tape abc. Que vaut n, et qu’arrive-t-il aux lectures suivantes ?

  6. Question 6Des unités précédentesLaquelle des définitions suivantes déclare correctement un enregistrement avec un titre et une année ?

  7. Question 7Si s est std::string s{"casa azul"};, que renvoie s.find("x") ?

  8. Question 8Qu’écrit std::println("{}", std::string{"año"}.size()); dans un programme enregistré en UTF-8, comme ceux de ce cours ?

  9. Question 9Un programme exécute int age{}; std::string name{}; std::cin >> age; std::getline(std::cin, name); et l’utilisateur tape 36, appuie sur Entrée, tape Ana et appuie sur Entrée. Que reste-t-il dans name ?

  10. Question 10Un programme exécute std::ifstream in{"data.txt"}; int x{-1}; in >> x;, mais data.txt n’existe pas dans le dossier depuis lequel il est lancé. Que se passe-t-il ?