Semaine 7 : tableaux à deux dimensions#

Cette semaine conclue la séquence sur les collections en illustrant comment, avec ce que nous avons déjà vu, il est possible de modéliser des tableaux à deux dimensions (et plus!). Nous utiliserons intensivement ces tableaux dans le projet, pour modéliser des images, des tableaux de données, des plateaux de jeux, etc.

Nous verrons aussi comment gérer les erreurs et autres situations exceptionnelles grâce aux exceptions. Cela expliquera l’une des incantations magiques que nous avons utilisé jusqu’ici et nous servira la semaine prochaine lorsque nous irons à la découverte des fichiers.

Cours#

TD : tableaux à deux dimensions#

TP#

Notes aux enseignants

Pousser les élèves à être efficaces sur la feuille Jupyter (censée être très courte) afin qu’ils aient le temps de bien manipuler la compilation (ils en auront besoin pour les projets). Ne pas hésiter à leur rappeler que le projet sera presque entièrement sous forme compilée.

Le TD et le TP ont exactement le même contenu (hors exo 1). Insister pour que les étudiants refassent les exercices par eux-mêmes plutôt que de regarder la correction du TD. Cela leur permet de vérifier qu’ils ont bien compris, et de pouvoir poser des questions s’ils se rendent compte qu’ils ont du mal à le faire seul.

Il y aura probablement encore des erreurs de débutants liés à la compilation comme :

  • l’étudiant n’est pas placé dans le bon répertoire

  • il fait des modifications sans recompiler (ou sans enregistrer) et ne comprend pas pourquoi elles ne sont pas prises en compte

  • il a enregistré son fichier à deux endroits différents et celui qu’il compile n’est pas celui qu’il édite

  • des erreurs dans la commande de compilation

Et aussi des erreurs dans les boucles, mauvaise allocation des tableaux ou sous-tableaux ou erreurs d’indice entraînant des segmentation fault, accolades mal fermées, oubli de return…

En profiter pour apprendre aux élèves comment lire et comprendre les messages d’erreurs (certains auront peut-être besoin de traduction au début) afin de les autonomiser.

Enfin les inciter à bien tester leurs programmes au fur et à mesure (dès qu’une fonction est écrite, et pas seulement après avoir tout écrit…).

Note

Nous utiliserons une feuille Jupyter pour le premier exercice. Tout le reste du TP sera programmé avec de la compilation dans un terminal.

Exercice 1 : déclaration, allocation, initialisation et affichage de tableaux 2D#

Consignes pour les exercices suivants#

Attention

À lire très attentivement!

Pour chaque exercice, un fichier contenant un squelette de programme sera fourni dans le sujet. Vous l’ouvrirez avec votre éditeur de texte favori (par exemple celui de JupyterLab) et vous le compléterez en remplaçant à chaque fois les deux lignes de la forme :

    // Remplacer cette ligne et la suivante par le code adéquat
    throw runtime_error("Fonction nombreMines non implanté ligne 33");

par votre code. Comme on a vu dans le cours, throw signale une erreur : ici le fait que la fonction nombreMines n’est pas encore implantée; veillez à ce que ces deux lignes soient bien supprimés!.

Une fois le programme complété, il faudra le compiler. Vous ouvrirez un terminal et irez dans le répertoire contenant le fichier :

cd ~/ProgImperative/Semaine7

puis vous lancerez la commande ci-dessous, dans lequel vous aurez remplacé programme.cpp et programme en fonction du nom du programme à compiler :

clang++ programme.cpp -o programme

Pour vous exécuterez le programme compilé en tapant :

./programme

Attention

Il est recommandé de compiler et d’exécuter vos fichiers à chaque fois que vous avez écrit une fonction, afin de détecter les éventuelles erreurs au fur et à mesure.

Exercice 2 : déclaration, allocation et initialisation de tableau 2D#

Éditez le fichier tableaux2D-initialisation.cpp pour le compléter, puis compilez et exécutez-le pour le tester.

Indication

Astuce

Pensez à organiser votre espace de travail et à ajuster la taille des caractères (avec Ctrl-+ et Ctrl--) pour avoir une vue confortable simultanée de tous les éléments requis : consignes, code, terminal.

https://nicolas.thiery.name/Enseignement/Info111/media/screencast-espace-de-travail-compilation.gif

Fig. 1 Vidéo: organiser son espace de travail avec JupyterLab#

Exercice 3 : opérations sur les tableaux à deux dimensions#

Faites la même chose (éditer, compléter, compiler, exécuter, tester) avec les fichiers :

Exercice 4 : le jeu du démineur ♣#

Faites la même chose (éditer, compléter, compiler, exécuter, tester) avec le fichier demineur.cpp pour implanter le jeu du démineur du TD.

Correction automatique exercice 2#

La cellule suivante est utilisée par la correction automatique pour lancer les tests directement depuis cette feuille :

from cppdoctest import doctest
doctest("tableaux2D-initialisation.cpp", "main")

Correction automatique exercice 3#

doctest("tableaux2D.cpp", "nombreDeLignesTest")
doctest("tableaux2D.cpp", "nombreDeColonnesTest")
doctest("tableaux2D.cpp", "appartientTest")
doctest("matrices.cpp", "estSymétriqueTest")
doctest("matrices.cpp", "sommeTest")
doctest("matrices.cpp", "produitTest")
doctest("occupation-salle.cpp", "creationPlanningTest")
doctest("occupation-salle.cpp", "tauxOccupationTest")

Correction automatique exercice 4#

doctest("demineur.cpp", "nombreMinesTest")
doctest("demineur.cpp", "grilleEstGagnanteTest")
doctest("demineur.cpp", "minesVoisinesTest")
doctest("demineur.cpp", "dessinGrilleTest")