---
jupytext:
text_representation:
extension: .md
format_name: myst
format_version: 0.13
kernelspec:
display_name: Python 3 (ipykernel)
language: python
name: python3
---
+++ {"nbgrader": {"grade": false, "grade_id": "cell-415f04d27b610548", "locked": true, "schema_version": 3, "solution": false, "task": false}}
# Semaine 7 : tableaux à deux dimensions
+++ {"nbgrader": {"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.
+++ {"nbgrader": {"grade": false, "grade_id": "cell-bf8b493b391072c0", "locked": true, "schema_version": 3, "solution": false, "task": false}}
## [Cours](cours.md)
- Cours : [tableaux 2D](cours-tableaux2D.md)
- Cours : [exceptions](cours-exceptions.md)
+++ {"nbgrader": {"grade": false, "grade_id": "cell-4f505b81ce738fdd", "locked": true, "schema_version": 3, "solution": false, "task": false}}
## [TD : tableaux à deux dimensions](TD.md)
+++ {"nbgrader": {"grade": false, "grade_id": "cell-666b2425eb568c70", "locked": true, "schema_version": 3, "solution": false, "task": false}}
## TP
+++ {"nbgrader": {"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.
:::
+++ {"nbgrader": {"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
- [tableaux2D-prise-en-main](tableaux2D-prise-en-main.md).
+++ {"nbgrader": {"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 :
```c++
// 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.
::::
+++ {"nbgrader": {"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](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
:::
::::
+++ {"nbgrader": {"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:
- [tableaux2D.cpp](tableaux2D.cpp);
- [matrices.cpp](matrices.cpp);
- [occupation-salle.cpp](occupation-salle.cpp).
+++ {"nbgrader": {"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](demineur.cpp) pour implanter le jeu du
démineur du [TD](TD.md).
![](media/demineur.png)
+++ {"nbgrader": {"grade": false, "grade_id": "cell-b07f55288ecf5832", "locked": true, "schema_version": 3, "solution": false, "task": false}}
#### Correction automatique exercice 2
+++ {"nbgrader": {"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 :
```{code-cell}
---
nbgrader:
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")
```
+++ {"nbgrader": {"grade": false, "grade_id": "cell-c7fc828dcd76d130", "locked": true, "schema_version": 3, "solution": false, "task": false}}
#### Correction automatique exercice 3
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-eaac6f37e469f341
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("tableaux2D.cpp", "nombreDeLignesTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-5f26259389c2ac92
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("tableaux2D.cpp", "nombreDeColonnesTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-bfc4be0b018f3c6c
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("tableaux2D.cpp", "appartientTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-69f000de2123961c
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("matrices.cpp", "estSymétriqueTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-0bd462b50d9591db
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("matrices.cpp", "sommeTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-0b50202ef6e1555d
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("matrices.cpp", "produitTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-0b50202ef6e1555e
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("occupation-salle.cpp", "creationPlanningTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-0b50202ef6e1555f
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("occupation-salle.cpp", "tauxOccupationTest")
```
+++ {"nbgrader": {"grade": false, "grade_id": "cell-c7fc828dcd76d131", "locked": true, "schema_version": 3, "solution": false, "task": false}}
#### Correction automatique exercice 4
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-bc404447b043ea42
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("demineur.cpp", "nombreMinesTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-f350597024e10b1f
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("demineur.cpp", "grilleEstGagnanteTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-0cb42bcea5080f0f
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("demineur.cpp", "minesVoisinesTest")
```
```{code-cell}
---
nbgrader:
grade: true
grade_id: cell-c0b511b85edb4deb
locked: true
points: 1
schema_version: 3
solution: false
task: false
---
doctest("demineur.cpp", "dessinGrilleTest")
```