From ffc6b3567cdef32903a1eb765c5d477dd125e526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=2E=20Thi=C3=A9ry?= <nthiery@users.sf.net> Date: Sun, 29 Sep 2024 23:57:31 +0200 Subject: [PATCH] =?UTF-8?q?Pr=C3=A9paration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gradebook.db | Bin 241664 -> 245760 bytes 02-exponentielle3.md | 11 +- cours.md | 237 +++++++++++++++++++++++-------------------- 3 files changed, 130 insertions(+), 118 deletions(-) diff --git a/.gradebook.db b/.gradebook.db index 097d68bead6681704d8fd315adbb67ee6ec909c6..ae41f14af364e0ac4c1c4ac96d262606b4a632b4 100644 GIT binary patch delta 2979 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 delta 2721 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 VCc2Zl0sl_+@Rv!5!?$C<^?$+}{_Ow& diff --git a/02-exponentielle3.md b/02-exponentielle3.md index bd1abeb..7ac148e 100644 --- a/02-exponentielle3.md +++ b/02-exponentielle3.md @@ -130,7 +130,7 @@ nbgrader: (a == b) ``` -+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "a03b3b94828a1e69046a2b0ffb1bd3c2", "grade": false, "grade_id": "cell-5017bdc388a2f6c4", "locked": true, "schema_version": 3, "solution": false}} ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "b176aaa4d92d7a9b9db2491886070c43", "grade": false, "grade_id": "cell-5017bdc388a2f6c4", "locked": true, "schema_version": 3, "solution": false}} ### Précision absolue @@ -139,18 +139,17 @@ nbgrader: Chaque fois que l'on veut comparer deux nombres flottants, il faut spécifier avec quelle **précision** on veut les comparer. -Le plus simple est de fixer un seuil de ***précision -absolue*** $\eta$, c'est-à -dire la différence de valeur en dessous de -laquelle on considère que deux nombres sont égaux : +Pour cela, on fixe un seuil de ***précision absolue*** $\eta>0$ et on +considère que deux nombres $x$ et $y$ sont égaux à $\eta$ près si : -$$x \simeq y \texttt{si} |x - y| < \eta .$$ +$$ |x - y| < \eta .$$ ::: :::{admonition} Exercice 2 Implantez les deux fonctions suivantes dont on vous donne la documentation : -- `abs` mais qui prend cette fois en paramètre un `double` et retourne +- `abs` qui prend cette fois en paramètre un `double` et retourne un `double` - `egal` qui prend en paramètres les nombres $x$, $y$ et $\varepsilon$. diff --git a/cours.md b/cours.md index f1e4da3..db961e6 100644 --- a/cours.md +++ b/cours.md @@ -183,8 +183,8 @@ uniquement avec ces instructions ##### Tarte tatin -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} - Ingrédients : 5 belles pommes, ingrédients pour pâte brisée et caramel - *Préparer une pâte brisée* - *Préparer un caramel* et le verser au fond du plat à tarte @@ -192,11 +192,13 @@ uniquement avec ces instructions - Faire revenir les pommes dans une poêle avec du beurre - Disposer les pommes dans le plat, et étaler la pâte au dessus - Faire cuire 45 minutes et retourner dans une assiette -::: -:::{grid-item-card} -<img src="media/tarte-tatin.jpg" height=20ex alt="une tarte tatin" /> +:::: +::::{grid-item-card} +:::{image} media/tarte-tatin.jpg +:alt: une tarte tatin ::: :::: +::::: +++ {"slideshow": {"slide_type": "slide"}} @@ -227,10 +229,8 @@ uniquement avec ces instructions #### Une impression de déjà vu? (1) -<!-- TODO IMG --> - -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} ```c++ while ( regarde() == Vide ) { @@ -258,20 +258,21 @@ while ( regarde() == Vide ) { } ouvre(); ``` -::: -:::{grid-item-card} -<img src="media/laby2c.png" style="float: right;" alt="laby niveau 2c" height="30ex"/> +:::: +::::{grid-item-card} +:::{image} media/laby2c.png +:alt: "laby niveau 2c" +:height: 30ex ::: :::: +::::: +++ {"slideshow": {"slide_type": "slide"}} #### Une impression de déjà vu? (2) -<!-- TODO IMG --> - -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} ```c++ void avance_tant_que_tu_peux() { while ( regarde() == Vide ) { @@ -291,11 +292,14 @@ droite(); avance_tant_que_tu_peux(); ouvre(); ``` -::: -:::{grid-item-card} -<img src="media/laby2c.png" alt="laby niveau 2c" height="20ex"/> +:::: +::::{grid-item-card} +:::{image} media/laby2c.png +:alt: "laby niveau 2c" +:height: 30ex ::: :::: +::::: +++ {"slideshow": {"slide_type": "slide"}} @@ -475,13 +479,11 @@ slideshow: factorielle(5) / factorielle(3) / factorielle(2) ``` -<!-- --> - +++ {"slideshow": {"slide_type": "slide"}} ### Syntaxe d'une fonction -**Syntaxe :** +:::{admonition} Syntaxe ``` c++ type nom(type1 parametre1, type2 parametre2, ...) { @@ -490,11 +492,12 @@ type nom(type1 parametre1, type2 parametre2, ...) { return expression; } ``` -- `parametre1, parametre2, ...` : les **paramètres formels** +- `parametre1, parametre2, ...` : les ***paramètres formels*** - Le type des paramètres formels est fixé -- Les variables sont appelées **variables locales** -- À la fin, la fonction **renvoie** la valeur de `expression` +- Les variables sont appelées ***variables locales*** +- À la fin, la fonction ***renvoie*** la valeur de `expression` Celle-ci doit être du type annoncé +::: +++ {"slideshow": {"slide_type": "slide"}} @@ -518,7 +521,7 @@ float max(float a, float b) { +++ {"slideshow": {"slide_type": "fragment"}} -- `max` n'est utilisée que si elle est *appelée* +- `max` n'est utilisée que si elle est ***appelée*** +++ {"slideshow": {"slide_type": "fragment"}} @@ -534,7 +537,7 @@ max(1.5, 3.0) +++ {"slideshow": {"slide_type": "fragment"}} -1. les **paramètres** `a` et `b` sont initialisés avec les valeurs `1.5` et `3.0` +1. les paramètres `a` et `b` sont initialisés avec les valeurs `1.5` et `3.0` +++ {"slideshow": {"slide_type": "fragment"}} @@ -546,7 +549,7 @@ max(1.5, 3.0) +++ {"slideshow": {"slide_type": "fragment"}} -4. le `return` spécifie la **valeur de retour** de la fonction : +4. le `return` spécifie la ***valeur de retour*** de la fonction : la valeur de l'expression `max(1.5, 3.0)` +++ {"slideshow": {"slide_type": "slide"}} @@ -557,7 +560,7 @@ max(1.5, 3.0) ### Documentation d'une fonction (syntaxe javadoc) -**Exemple :** +:::{admonition} Exemple ``` c++ /** Fonction qui calcule la factorielle @@ -566,21 +569,24 @@ max(1.5, 3.0) **/ int factorielle(int n) ... ``` +::: +++ {"slideshow": {"slide_type": "fragment"}} -**Une bonne documentation :** - +:::{admonition} Une bonne documentation : +:class: hint - Est concise et précise - Donne les *préconditions* sur les paramètres - Décrit le résultat (ce que fait la fonction) +::: +++ {"slideshow": {"slide_type": "fragment"}} -**Astuce pour être efficace :** - +:::{admonition} Astuce pour être efficace +:class: hint - *Toujours commencer par écrire la documentation* De toute façon il faut réfléchir à ce que la fonction va faire! +::: +++ {"slideshow": {"slide_type": "slide"}} @@ -619,42 +625,47 @@ CHECK( factorielle(3) == 6 ); CHECK( factorielle(4) == 24 ); ``` -+++ {"slideshow": {"slide_type": "fragment"}} - -<!-- **Note :** jusqu'en 2020-2021, ainsi que les trois premières séances de -2021-2022, ce cours utilisait le nom `ASSERT` au lieu de `CHECK`. Le -changement a eu lieu pour assurer la compatibilité avec -l'infrastructure `doctest`. Pour simplifier la transition, dans -l'environnement Jupyter de ce cours, on peut utiliser les deux -indifféremment. --> - +++ {"slideshow": {"slide_type": "slide"}} #### Tests d'une fonction -**Astuces pour être efficace :** +:::{admonition} Astuces pour être efficace +:class: hint - *Commencer par écrire les tests d'une fonction* De toute façon il faut réfléchir à ce qu'elle va faire! +::: +++ {"slideshow": {"slide_type": "fragment"}} +:::{admonition} +:class: hint - Tester les cas particuliers +::: +++ {"slideshow": {"slide_type": "fragment"}} +:::{admonition} +:class: hint - Tant que l'on est pas sûr que la fonction est correcte : - Faire des essais supplémentaires - Capitaliser ces essais sous forme de tests +::: +++ {"slideshow": {"slide_type": "fragment"}} +:::{admonition} +:class: hint - Si l'on trouve un bogue : - Ajouter un test caractérisant le bogue +::: +++ {"slideshow": {"slide_type": "fragment"}} +:::{admonition} +:class: hint - Les *effets de bord* sont durs à tester! +::: +++ {"slideshow": {"slide_type": "slide"}} @@ -748,106 +759,97 @@ factorielle(1+2) +++ {"slideshow": {"slide_type": "fragment"}} -#### Syntaxe +:::{admonition} Syntaxe ``` c++ nom(expression1, expression2, ...) ``` +::: +++ {"slideshow": {"slide_type": "fragment"}} -#### Sémantique - -+++ {"slideshow": {"slide_type": "fragment"}} - +:::{admonition} Sémantique 1. Evaluation des expressions - Leurs valeurs sont les **paramètres réels** - -+++ {"slideshow": {"slide_type": "fragment"}} - -2. Allocation de mémoire sur la **pile** pour : + Leurs valeurs sont les ***paramètres réels*** +2. Allocation de mémoire sur la ***pile*** pour : - Les variables locales - Les paramètres formels - -+++ {"slideshow": {"slide_type": "fragment"}} - 3. Affectation des paramètres réels aux paramètres formels (par copie; les types doivent correspondre!) - -+++ {"slideshow": {"slide_type": "fragment"}} - 4. Exécution des instructions - -+++ {"slideshow": {"slide_type": "fragment"}} - 5. Lorsque `return expression` est rencontré, évaluation de l'expression qui donne la **valeur de retour de la fonction** - -+++ {"slideshow": {"slide_type": "fragment"}} - 6. Désallocation des variables et paramètres sur la pile - -+++ {"slideshow": {"slide_type": "fragment"}} - 7. La valeur de l'expression `nom(...)` est donnée par la valeur de retour +::: +++ {"slideshow": {"slide_type": "slide"}} #### Évolution de la pile sur l'exemple -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} 1. État initial -::: -:::{grid-item-card} -<img src="media/pile-etat-initial.png" alt="1 case unique contenant '...'" height="20ex"/> -::: :::: +::::{grid-item-card} +:::{image} media/pile-etat-initial.png +:alt: 1 case unique contenant '...'" +:height: 20ex +:::: +::::: +++ {"slideshow": {"slide_type": "fragment"}} -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} 1. Allocation de la mémoire sur la pile -::: -:::{grid-item-card} -<img src="media/pile-allocation.png" alt="3 cases ajoutées contenant 'int n : ? (paramètre formel)' puis 'int resultat : ? (variable locale)' puis 'int k : ? (variable locale)'. Les 3 cases sont entourées d'une accolade avec marqué 'f'" height="20ex"/> +:::: +::::{grid-item-card} +:::{image} media/pile-allocation.png +:alt: "3 cases ajoutées contenant 'int n : ? (paramètre formel)' puis 'int resultat : ? (variable locale)' puis 'int k : ? (variable locale)'. Les 3 cases sont entourées d'une accolade avec marqué 'f'" +:height: 20ex ::: :::: +++ {"slideshow": {"slide_type": "fragment"}} -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} 3 : Affectation du paramètre réel au paramètre formel -::: -:::{grid-item-card} -<img src="media/pile-affectation.png" alt="le point d'interrogation après le n est remplacé par 3" height="20ex"/> -::: :::: +::::{grid-item-card} +:::{image} media/pile-affectation.png +:alt: "le point d'interrogation après le n est remplacé par 3" +:height: 20ex +:::: +::::: +++ {"slideshow": {"slide_type": "fragment"}} -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} 4 : Exécution des instructions -::: -:::{grid-item-card} -<img src="media/pile-exécution.png" alt="Le point d'intrrogation après résultat est remplacé par '6' et celui après k par '4'" height="20ex"/> -::: :::: +::::{grid-item-card} +:::{image} media/pile-exécution.png +:alt: "Le point d'intrrogation après résultat est remplacé par '6' et celui après k par '4'" +:height: 20ex +:::: +::::: +++ {"slideshow": {"slide_type": "fragment"}} -::::{grid} -:::{grid-item-card} +:::::{grid} +::::{grid-item-card} 5,6,7 : Désallocation de la mémoire sur la pile et valeur de retour -::: -:::{grid-item-card} -<img src="media/pile-retour.png" alt="les 3 cases de la pile sont supprimées. On revient à l'état de départ. La valeur 6 est écrite juste au dessus de la pile avec indiqué 'valeur de retour'" height="20ex"/> -::: :::: +::::{grid-item-card} +:::{image} media/pile-retour.png +:alt: "les 3 cases de la pile sont supprimées. On revient à l'état de départ. La valeur 6 est écrite juste au dessus de la pile avec indiqué 'valeur de retour'" +:height: 20ex +:::: +::::: +++ {"slideshow": {"slide_type": "slide"}} @@ -908,21 +910,29 @@ b - On peut les modifier. - Mais ... -#### Rappel ++++ {"slideshow": {"slide_type": "fragment"}} +:::{admonition} Rappel +:class: hint Lors d'un appel de fonction ou de procédure, la valeur du paramètre réel est **copiée** dans le paramètre formel. +::: -#### Conséquence ++++ {"slideshow": {"slide_type": "fragment"}} +:::{admonition} Conséquence - Une modification du paramètre formel n'affecte pas le paramètre réel - Si la variable est volumineuse (tableaux, chaîne de caractères, etc.), cette copie peut être coûteuse -On dit que les paramètres sont passés **par valeur**. +::: + ++++ {"slideshow": {"slide_type": "fragment"}} + +On dit que les paramètres sont passés ***par valeur***. -Au second semestre, vous verrez le passage de paramètres **par référence**. +Au second semestre, vous verrez le passage de paramètres ***par référence***. +++ {"slideshow": {"slide_type": "slide"}} @@ -933,18 +943,17 @@ Au second semestre, vous verrez le passage de paramètres **par référence**. +++ {"slideshow": {"slide_type": "slide"}} -### Fonctions particulières : procédures +### Fonctions particulières : ***procédures*** Besoin de sous-programmes qui *agissent* au lieu de *calculer* : - On veut produire un effet (affichage, musique, *etc*) - On veut modifier l'état interne d'une structure de donnée -On parle d'**effet de bord** +On parle d'***effet de bord*** +++ {"slideshow": {"slide_type": "fragment"}} -**Exemple :** - +:::{admonition} Exemple ``` c++ void avance_tant_que_tu_peux() { while ( regarde() == Vide ) { @@ -952,6 +961,7 @@ void avance_tant_que_tu_peux() { } } ``` +::: +++ {"slideshow": {"slide_type": "fragment"}} @@ -967,6 +977,7 @@ void avance_tant_que_tu_peux() { ### Fonctions particulières : fonctions récursives ♣ +:::{admonition} Exemple ``` c++ int factorielle(int n) { if ( n == 0 ) { @@ -976,23 +987,29 @@ int factorielle(int n) { } } ``` +::: -+++ ++++ {"slideshow": {"slide_type": "fragment"}} -Une ***fonction*** récursive est une fonction qui s'appelle +:::{admonition} Définition +Une ***fonction récursive*** est une fonction qui s'appelle elle-même. +::: Cela peut paraître étrange de définir un objet à partir de lui-même, mais c'est comme pour les suites définies par récurrence en mathématiques: il faut et il suffit de s'assurer d'avoir un cas de base et une étape de récurrence bien posée. -**Exercice :** ++++ {"slideshow": {"slide_type": "fragment"}} + +:::{admonition} Exercice - Exécuter pas à pas : - `factorielle(0)` - `factorielle(3)` - `factorielle(-1)` +::: +++ {"slideshow": {"slide_type": "slide"}} @@ -1023,7 +1040,3 @@ base et une étape de récurrence bien posée. - *Tests* : ce que fait la fonction (exemples) - *Code* : comment elle le fait -```{code-cell} - -``` - -- GitLab