Skip to content
Snippets Groups Projects
Forked from Info 111 Programmation Impérative / 2024-2025 / Semaine7
Up to date with the upstream repository.
user avatar
Nicolas M. Thiéry authored
44cdbebe
History
jupytext:
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.13
kernelspec:
  display_name: Python 3 (ipykernel)
  language: python
  name: python3

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "0b970144143074bbb417f2f484376df0", "grade": false, "grade_id": "cell-415f04d27b610548", "locked": true, "schema_version": 3, "solution": false, "task": false}}

Semaine 7 : tableaux à deux dimensions

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "5ffda31811ca43481d4911f590ebe571", "grade": false, "grade_id": "cell-6d952c4decd8c705", "locked": true, "schema_version": 3, "solution": false, "task": false}}

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.

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9c7f85f6d2a714621cab80206648e945", "grade": false, "grade_id": "cell-bf8b493b391072c0", "locked": true, "schema_version": 3, "solution": false, "task": false}}

Cours

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9f985d1d91f007484dc86ea908c9f178", "grade": false, "grade_id": "cell-4f505b81ce738fdd", "locked": true, "schema_version": 3, "solution": false, "task": false}}

TD : tableaux à deux dimensions

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "a19c3f9a54cc2b0f7cb7ec988963186c", "grade": false, "grade_id": "cell-666b2425eb568c70", "locked": true, "schema_version": 3, "solution": false, "task": false}}

TP

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "42a97fd52d57e8d11fc27cdeb60fef30", "grade": false, "grade_id": "cell-ebc1119e2f2dc021", "locked": true, "schema_version": 3, "solution": false, "task": false}}

:::{note}

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

:::

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "0dff23fabfa6a8ebbd563a005522ae61", "grade": false, "grade_id": "cell-606e498c0e61ce89", "locked": true, "schema_version": 3, "solution": false, "task": false}}

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

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "b81f4b39fe22e583ca53e52c7cd254fe", "grade": false, "grade_id": "cell-2c464f5229386965", "locked": true, "schema_version": 3, "solution": false, "task": false}}

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.

:::

% Pourquoi compiler avec info-111 compile? Vous pouvez tout aussi % bien, comme la semaine dernière, compiler directement avec clang++ : % % clang++ programme.cpp -o programme % % Simplement, info-111 compile rajoute automatiquement quelques autres % options pratiques pour débogguer ou pour mieux détecter les % erreurs. Regardez les messages affichés et notez ces options! Ainsi, % si vous travaillez chez vous directement sur votre ordinateur et % n’avez pas la commande info-111, vous pourrez continuer à bénéficier % de ces options.

::::

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "87d11ccfe57d12bede9520c997b7c2d9", "grade": false, "grade_id": "cell-f8fcdff1ebaa312a", "locked": true, "schema_version": 3, "solution": false, "task": false}}

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.

::::{hint} 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.

:::{figure} https://nicolas.thiery.name/Enseignement/Info111/media/screencast-espace-de-travail-compilation.gif Vidéo: organiser son espace de travail avec JupyterLab :::

::::

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "7dbc9fe0e634633b6d8edaae9e166079", "grade": false, "grade_id": "cell-cc80d644d587183f", "locked": true, "schema_version": 3, "solution": false, "task": false}}

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

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

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9a5c8fe9d8e172ac79184bf2c51ebf49", "grade": false, "grade_id": "cell-169e43a861dae536", "locked": true, "schema_version": 3, "solution": false, "task": false}}

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.

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "d68922d0c76be08a182bed9627f2e20b", "grade": false, "grade_id": "cell-b07f55288ecf5832", "locked": true, "schema_version": 3, "solution": false, "task": false}}

Correction automatique exercice 2

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "4da9549b203eb3a17999a42a87621c6e", "grade": false, "grade_id": "cell-b07f55288ecf5833", "locked": true, "schema_version": 3, "solution": false, "task": false}}

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

---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 90e470c49604a34165d79f21967fb0e4
  grade: true
  grade_id: cell-65c51ad6a89cf2f5
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
from doctest import doctest
doctest("tableaux2D-initialisation.cpp", "main")

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "ad119ca1f4faab640c33f409c231c36d", "grade": false, "grade_id": "cell-c7fc828dcd76d130", "locked": true, "schema_version": 3, "solution": false, "task": false}}

Correction automatique exercice 3

---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 0a1869575ed9ab5b1ecc54e9eabdf094
  grade: true
  grade_id: cell-eaac6f37e469f341
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("tableaux2D.cpp", "nombreDeLignesTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 0fe67fe418b1bc6e03fb1a5e7fdf8b3f
  grade: true
  grade_id: cell-5f26259389c2ac92
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("tableaux2D.cpp", "nombreDeColonnesTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: d116b89ab2ed71fe805c7af04405de1a
  grade: true
  grade_id: cell-bfc4be0b018f3c6c
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("tableaux2D.cpp", "appartientTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: d59f8beb261a59a46a0b12a37f1df31e
  grade: true
  grade_id: cell-69f000de2123961c
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("matrices.cpp", "estSymétriqueTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: ddaad1f536004f662480204a5fad47fb
  grade: true
  grade_id: cell-0bd462b50d9591db
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("matrices.cpp", "sommeTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: cc8e06bcc11b7962655eda2b18688cae
  grade: true
  grade_id: cell-0b50202ef6e1555d
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("matrices.cpp", "produitTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 071ce9848c43db6f1754a36603f6b1db
  grade: true
  grade_id: cell-0b50202ef6e1555e
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("occupation-salle.cpp", "creationPlanningTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 95d6b82e2caa565e015d22dfdcf26f4d
  grade: true
  grade_id: cell-0b50202ef6e1555f
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("occupation-salle.cpp", "tauxOccupationTest")

+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "f153005ebd8a2c3715beabdcb291236c", "grade": false, "grade_id": "cell-c7fc828dcd76d131", "locked": true, "schema_version": 3, "solution": false, "task": false}}

Correction automatique exercice 4

---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: e2b29f2c3ee8c56215df5057f30d4d84
  grade: true
  grade_id: cell-bc404447b043ea42
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("demineur.cpp", "nombreMinesTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 06fa4ed95e1f353f472d157ba549b6cf
  grade: true
  grade_id: cell-f350597024e10b1f
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("demineur.cpp", "grilleEstGagnanteTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 004c497f62e3bebca9858aaa3f3c4459
  grade: true
  grade_id: cell-0cb42bcea5080f0f
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("demineur.cpp", "minesVoisinesTest")
---
deletable: false
editable: false
nbgrader:
  cell_type: code
  checksum: 087af4bae2b174a787346f2ed449936e
  grade: true
  grade_id: cell-c0b511b85edb4deb
  locked: true
  points: 1
  schema_version: 3
  solution: false
  task: false
---
doctest("demineur.cpp", "dessinGrilleTest")