{
"cells": [
{
"cell_type": "markdown",
"id": "596060ef",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "36973f7f5dc90f248eab5d7efe0027ac",
"grade": false,
"grade_id": "cell-405b64781fe13bde",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"# Semaine 6: Modèle de mémoire, collections, consolidation"
]
},
{
"cell_type": "markdown",
"id": "3f115cfd",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "e2dbbc0eea5346755c03794af63e93e5",
"grade": false,
"grade_id": "cell-249063faf999e9b3",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"Les semaines précédentes nous avons successivement empilé de nombreux\n",
"éléments de la programmation impérative: variables,\n",
"conditionnelles, boucles, fonctions, tableaux. Cette\n",
"semaine est consacrée à la consolidation de ces éléments,\n",
"en vue du partiel début novembre.\n",
"\n",
"En cours, nous commencerons par un exemple jouet de **piratage par\n",
"débordement**. Cela motivera l'introduction d'un **modèle de mémoire**\n",
"raffiné (**pile** + **tas**) pour mieux comprendre l'allocation des\n",
"tableaux. Nous généraliserons ensuite les tableaux avec la notion de\n",
"collections et introduirons la boucle **for each**.\n",
"\n",
"En TD et TP, nous combinerons tout ce que nous avons vu jusqu'ici pour\n",
"implanter le **jeu de Yams**."
]
},
{
"cell_type": "markdown",
"id": "ae65d979",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "8622671ea569503773fe84e1de25d096",
"grade": false,
"grade_id": "cell-b74ea1a2236a0f8c",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"## [Cours](cours.md)"
]
},
{
"cell_type": "markdown",
"id": "6b1a5689",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "c687c1874282b78bc008facab55ab325",
"grade": false,
"grade_id": "cell-b74ea1a2236a0f8d",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"## TD: Premiers pas vers le jeu de Yam's"
]
},
{
"cell_type": "markdown",
"id": "87715192",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "c1364e564beb16751fce76e036707359",
"grade": false,
"grade_id": "cell-2cb5de2667417f2e",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"## TP: Implantation du jeu de Yam's\n",
"\n",
"**Préalable:**\n",
"Téléchargez le sujet de TP selon la\n",
" [procédure usuelle](http://nicolas.thiery.name/Enseignement/Info111/devoirs.html)."
]
},
{
"cell_type": "markdown",
"id": "d0705776",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "54d52a917d6d2a441e77f904d91a4b32",
"grade": false,
"grade_id": "cell-47ce0b02cfcdb434",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"**Exercice:** Yam's simplifié\n",
"\n",
"Nous allons travailler en parallèle dans une feuille de travail Jupyter\n",
"`yams.md` et dans\n",
"un fichier source `yams.cpp` afin, à la fin du TP, d'obtenir un\n",
"exécutable autonome permettant de jouer une partie de Yam's simplifiée.\n",
"\n",
"Après avoir lancé Jupyter, ouvrez la feuille `yams.md`. Lorsqu'il vous est demandé de compiler du\n",
"code à la main la première fois, **ouvrez un nouveau terminal pour cela**, faites\n",
"attention à ne pas quitter Jupyter!"
]
},
{
"cell_type": "markdown",
"id": "719cd549",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "e0fdffb4092cadcfa27a8512697b3601",
"grade": false,
"grade_id": "cell-47ce0b02cfcdb435",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"**Exercice:** Interlude: boucles imbriquées\n",
"\n",
"Ouvrir la feuille `laby-imbriquee.md` et suivre ses instructions."
]
},
{
"cell_type": "markdown",
"id": "3eebcb20",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "1f7b0cba552d076d09bd4df334635a2b",
"grade": false,
"grade_id": "cell-1272d7485b5484ce",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"**Exercice ♣:** Yam's complet\n",
"\n",
"Le programme que vous obtenez à la fin de l'exercice 1 est encore loin\n",
"de représenter le jeu de Yams réel.\n",
"\n",
"Dans cet exercice nous vous proposons plusieurs extensions (dont\n",
"certaines déjà évoquées dans le sujet de TD) qui vous permettront\n",
"de vous en approcher.\n",
"\n",
"Vous pouvez utiliser Jupyter pour prototyper vos fonctions, mais vous\n",
"devez au final implémenter ces extensions dans votre programme compilé\n",
"(fichier [yams.cpp](yams.cpp)).\n",
"\n",
"- Dans le vrai jeu de Yam's, le joueur peut relancer jusqu'à trois\n",
" fois un ou plusieurs dés avant de choisir une figure.\n",
"\n",
" 1. Ajouter une fonction\n",
" `vector relance(int nde, vector des)` qui \"relance\" le\n",
" dé choisi en premier argument et le remplace donc par un nouveau\n",
" nombre aléatoire entre 1 et 6.\n",
"\n",
" 2. Dans la boucle de jeu, ajouter les instructions nécessaires pour\n",
" que le joueur puisse choisir jusqu'à trois dés à relancer et les\n",
" relancer.\n",
"\n",
"- La partie de Yams se termine lorsqu'un joueur a marqué des points\n",
" pour toutes les figures possibles.\n",
"\n",
" 1. Ajouter dans le `main` un tableau de score contenant une case\n",
" pour chaque figure.\n",
"\n",
" 2. Lorsque le joueur choisit une figure, les points qu'il gagne\n",
" doivent être stockés dans la partie correspondante du tableau.\n",
" Une fois une case du tableau remplie, elle ne peut plus être\n",
" modifiée.\n",
"\n",
" 3. La partie se termine lorsque toutes les cases du tableau sont\n",
" remplies. Le score du joueur correspond à la somme des cases du\n",
" tableau.\n",
"\n",
"- C'est un peu triste de jouer tout seul! Modifiez la boucle\n",
" principale pour alterner les tours entre 2 joueurs dont les scores\n",
" seront stockés dans deux tableaux de score distincts. La partie\n",
" s'arrête lorsqu'un joueur a fini de remplir son tableau de score. On\n",
" compare alors le score de chaque joueur pour désigner le gagnant.\n",
"\n",
"- Si vous êtes très motivés vous pouvez transformer une dernière fois\n",
" votre programme afin de rendre possible des parties entre un nombre\n",
" quelconque de joueurs. Pour cela vous aurez besoin d'utiliser un\n",
" tableau de tableaux de scores. Ce tableau contiendra un tableau de\n",
" score pour chaque joueur présent dans la partie."
]
}
],
"metadata": {
"jupytext": {
"text_representation": {
"extension": ".md",
"format_name": "myst",
"format_version": 0.13,
"jupytext_version": "1.10.3"
}
},
"kernelspec": {
"display_name": "C++17",
"language": "C++17",
"name": "xcpp17"
},
"source_map": [
14,
18,
35,
39,
43,
51,
64,
70
]
},
"nbformat": 4,
"nbformat_minor": 5
}