Info 111 - Programmation impérative, Semaine 8: fichiers

Vous trouverez ici le matériel pédagogique pour la Semaine 8 qui porte sur les fichiers et flux de données. Vous pouver le télécharger et travailler dessus selon la procédure usuelle. Cette deuxième solution est plus riche, puisque vous pouvez essayer et expérimenter avec les exemples et faire les exercices proposés.

Vous pouvez aussi consulter l'ancien poly de cours qui vous a été distribué en papier.

Planning

En amphi virtuel lundi matin, nous ferons une séance de questions-réponses sur le projet, le cours et, si le temps le permets, les exercices de TD et de TP (salles virtuelles, Foire-Aux-Questions).

En TD, nous continuerons les exercices de la feuille de TD.

En TP, nous continuerons les exercices de TP ci-dessous.

Consignes

  • Avant le TD: avoir lu le sujet de TD et commencé les exercices
  • Avant le TP: avoir lu le sujet de TP
    LDD IM et MNSI: avoir fait les exercices de TD

Plus vous faites d'exercices en amont des TDs et TPs, plus vous êtes efficaces: cela vous permet en effet de bénéficier de l'aide de vos enseignants lorsque vous en avez le plus besoin.

TP

Préalable:

  • Téléchargez le sujet de TP selon la procédure usuelle.
  • Ouvrir 00index.html avec Jupyter pour lire le sujet.

Mis à part le premier exercice qui sera fait avec Jupyter, tout le reste du TP sera programmé avec de la compilation dans un terminal.

Exercice: écrire dans un fichier - 20 minutes

  1. Consulter le fichier fichier-ecriture.cpp.
  1. Ouvrir ce fichier avec un éditeur de texte (par exemple jedit ou l'éditeur de texte intégré à jupyter) et essayer de deviner ce que fait ce programme.
  1. Exécuter ce programme.
    Rappel: pour exécuter un programme, il faut d’abord avoir compilé le fichier .cpp avec la commande info-111 g++ puis lancer l’exécutable créé par la compilation, comme cela a été vu dans les TP précédents.
  1. Trouver le fichier .txt qui a été créé à l’exécution et l’ouvrir avec un éditeur de texte. Que contient-il?
  1. Copier le contenu de fichier-ecriture.cpp dans fichier-ecriture-v2.cpp, et adaptez le pour qu’à l’exécution il écrive un fichier nommé essai.txt contenant le texte «17 fois 23 vaut» suivi de la valeur de ce nombre.
  1. Exécuter ce programme puis ouvrir le fichier essai.txt afin de vérifier son contenu.
  1. Lire et essayer à nouveau les exemples du cours «lecture depuis le clavier».
  1. En vous en inspirant, complétez le programme cin.cpp pour que, à l’exécution, il demande à l’utilisateur d’entrer deux entiers, puis qu’il écrive un fichier nommé multiplication.txt contenant un texte similaire au fichier essai.txt de la question précédente, avec 17 et 23 remplacés respectivement par les deux entiers choisis par l’utilisateur.

    Note: Pour faire des affichages à l’écran et pour faire saisir des données depuis le clavier, il faut inclure la bibliothèque iostream en écrivant #include <iostream>. Pour lire et écrire dans un fichier de texte, il faut inclure la bibliothèque fstream en écrivant #include <fstream>

  1. Exécuter le programme puis ouvrir le fichier multiplication.txt pour vérifier son contenu.

Exercice: petit damier - 20 minutes

  1. Le fichier smiley.pbm contient l’image en noir et blanc du TD. Ouvrir ce fichier d’abord avec un éditeur de texte, puis avec un logiciel de vision d’images:

    • Sous Windows, vous pouvez utiliser l’application irfanview.
    • Sous Linux, vous pouvez utiliser l’application xviewer: utilisez «Control +» et «Control -» pour zoomer / dezoomer. Vous remarquerez que l’image est lissée / floutée. Allez dans le menu «Edit -> Preferences» et décochez «Smooth images when zoomed in» pour mieux voir les pixels.
    • Sur JupyterHub, c'est un peu plus compliqué: dans un terminal, convertissez votre image en png avec:

      convert smiley.pbm smiley.png
      
      

      puis ouvrez l'image avec le navigateur de fichiers de Jupyter.

  1. Utiliser un éditeur de texte pour écrire à la main un fichier damier.pbm contenant une image au format PBM (Portable Bit Map) de taille 10x10 représentant un damier:

    image

  1. Visualiser le résultat avec un logiciel de vision d’images

Exercice: grand damier

Compléter le programme C++ damier.cpp qui lorsqu’on l’exécute, écrit un fichier image damier-automatique.pbm comme le précédent, mais cette fois pour un damier 100x100.

Indication: Vous pouvez vous inspirer de fichier-ecriture.cpp. Commencer par un programme pour un damier 10x10 avant de passer à 100x100. Si le fichier produit ne donne pas l’image attendue, ouvrez-le avec un éditeur de texte pour mieux comprendre ce qu’il se passe et aider au débogage. Vous pouvez aussi, si cela vous aide, faire dans un premier temps des affichages à l’écran avec cout, puis écrire dans le fichier dans un 2ème temps.

Exercice: dégradé de gris

Pour créer une image avec des nuances de gris, il faut enregistrer un fichier de texte au format PGM (Portable Gray Map). Ce fichier doit contenir des nombres entre 0 et une valeur maximale (au choix) qui représenteront les différentes nuances de gris.

  1. Écrire à la main, dans un éditeur de texte, un fichier de texte représentant une image de 10 pixels par 10 pixels, contenant différentes nuances de gris de votre choix. Ouvrir ce fichier de texte avec un logiciel de visualisation d’images pour voir le résultat.
  1. Implanter un programme degrade.cpp qui écrit un fichier contenant une image degrade.pgm de taille 255 par 255, avec un dégradé de gris comme celui-ci:

    image

  1. Répéter, avec une image de taille 100x100 puis 1000x1000.

Exercice: inversion d’image

Implanter un programme videoInverse.cpp qui lit un fichier contenant une image au format PGM (par exemple le fichier image.pgm fourni), et écrit un fichier contenant la même image en vidéo inverse (clair remplacé par sombre et réciproquement).

Indication: Implanter une fonction

    /** Image en vidéo inverse
     * @param image1: le nom du fichier contenant l'image à lire
     * @param image2: le nom du fichier pour l'image à écrire
     **/
    void videoInverse(string image1, string image2);

Exercice $\clubsuit$: Dégradé circulaire de rouge

  1. Implanter un programme degrade-circulaire.cpp qui écrit un fichier contenant une image degrade-circulaire.ppm au format PPM de taille 255 par 255, avec un dégradé circulaire de rouge:

    image

  1. Répéter, avec une image de taille 100x100 puis 1000x1000.