From e88fbf61f0b1fb57419285631a4f93d9f0223a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20M=2E=20Thi=C3=A9ry?= <nthiery@users.sf.net> Date: Mon, 4 Nov 2024 23:02:32 +0100 Subject: [PATCH] Errata --- .gradebook.db | Bin 176128 -> 180224 bytes 00-jupyter-indentation.md | 8 ++-- bla.txt | 3 -- cours-etat-fichier.md | 1 - cours-fichiers.md | 1 - cours-flux-chaines-de-caracteres.md | 3 +- cours-flux.md | 2 +- cours.md | 12 +++++- fichier-ecriture.cpp | 8 ++-- index.md | 63 ++++++++++++++++++---------- open_ppm.py | 9 ++-- 11 files changed, 68 insertions(+), 42 deletions(-) delete mode 100644 bla.txt diff --git a/.gradebook.db b/.gradebook.db index 095710177373085e56bbaffc2cac368d729f0c51..1ea2024a3c167792dba03764dcabc2535c3ca34e 100644 GIT binary patch delta 2389 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 Hlb!zphY75% delta 1589 zcmYk5Yitx%6vyY@nVsF)dE8wn6fC7f0gK%(?96n#yHZ;;G+<;!gb)EyW_M<6r45w^ zUl8a(5fDl#E4|c5mx2@_P+e*nz6e3%<C8!{k;tR!2Q?uOHHZ;Qyt5^SWHP^*d;a%- z=A3(`wUuuj^6x707!*Z?I^|km<W_vJA%LFZ2c?PP8sR5tkS`Y&<?K;>rhI$5*UKgg zllBaJz6QtxSGTjkE3nB)Nn6a!%gO_M`y2>BW?@HvA@TD`mnbwD%|%UUw{%y!gdB7^ zXP=RnDRdHKe!L-PhI^)Zy!p4~JLJrq>{K9RnzE~y$#jy-Ea{N_{=AJzq0a~W`%0wF zUDe()CYS_^W@pYnFK2f2hk!S8vVSQn)G<k7+S5KO^UQ}$o`;zPahTp;wLc&qmzlr; zW+)P1&~;)*h0q=J7y2Dt9|#71Knu#pleLG&lG`+a+{#!t=LG&1C43`Y62C)^V2F>A z�|(Qa{v@Hc-;>X2TPJ{EJr18B0a4b2tr2>oI)Y7$>SmnAu85Ayg{2wctAiG!!0 z494PfAut7u!M7_23h;z5!D##_foGK40Q_7Rkp=N~HxR%dxj^_^7ZU!*g@{Y06Sa_6 zU+X1m9ygE`;Kw^%aCpFt`||OcLnQ9S!)}1Zb7l~DaH9(bce<eQ2?7svJB_c+0P?Jn zvdbv`CjTX$<zM0F^JVCQ6hw!_pT$9Oi?~D#3B$r!p;u@@uM2fTAxa`y`cwKs>XsU% z+MNB1pUodmRc7eMB>dz|Z~-$jK`AM|uo{F(@pS}ZL6|8{g0$J#7*^tVK{c2}8qw<t zM&YwAf_T_P0EZqSKzNA@32z|~#rrlZ`OTtm-%@16kH^6pP(d0~<ATF0UHI@`0>N9s z6x~Z79Z|Emq?W`zc%BOezvhC*eFOpw5j8jRv3YgZF31cpfqzTfsdAWRFnn_~nHQD~ zQ)n62?eln-u~*n|&K}Rwc9_L0`r$FS&V%JvxSn`tTj60qJCEBi0|0ccY=oyhv|UP$ zzXSFm7TlqHSA0=6z>K3efZR*J0(uh=oQ3<~CP0q+VlUiFs%qX3<1j2cNA|-f0C~W- z55VbiLQh!{Gi4~6Vrr_DsxnfR8dtP<G_EFeHJ$%u>9$f1*S`->y4y+*!fuzJ9E9z1 zBoWaSGoIEXl~q=x(l89A(o|Dc%8F`MIvyL@Zcp{$_CDCh$zCp5RLs4-+^IeUXVJXb zBAc(8P0fvF3vN3CRp-nR_$)0aG&Qa2DZ_~BmY!1M<WeKLu9*o<iAJM(-qr2tI6qiV ziHrHoe%be)_Yd#Wo==%_dL3Awvs1voY3*1pSzOG$5p>Wg*a~Ql<8a4msK|<LrnOi! z7Ez3tsptt+RV+<WQZchK6^WVms<uO8@K7f_1`3>=yCDYt(RsVJXflcAFp!=3Z$S%? z0X(q>X2}39?t+JTDlj4{BBBl=!sQq)BGZ&T1*hOX3@4K3uQ1#oN2|<O#L^R1#Hy@} zX_2%QQ&pEyOE<}}jI?fJ3OR4?g$4kUbF&+M4TQ~QVm`yx29n{fo8h;2;5j_62evVO z&M@)C9vFe#VmvVmA1tVlTN-3CiMssqsx>XL-e8y&cy<=n`WnkVJDgtKuo|~#p(a<V zX(eV<DG}Xmu%?k&uoOi#;|VQpn!5IX%l$M}Pw_*(@2UDud#O|344ZvUn+~UWyILXR dr<tP^zmhx79L?E1jPveRc$#%qu7!J;{{Szdwu1lw diff --git a/00-jupyter-indentation.md b/00-jupyter-indentation.md index d1d5480..9aec54e 100644 --- a/00-jupyter-indentation.md +++ b/00-jupyter-indentation.md @@ -59,13 +59,13 @@ Exécutez les deux cellules suivantes : ```{code-cell} Maliste=["I","love","Python"] -for ligne in Maliste : +for ligne in Maliste: print(ligne) ``` ```{code-cell} Maliste=["I","love","Python"] -for ligne in Maliste : +for ligne in Maliste: print(ligne) ``` @@ -88,7 +88,7 @@ for ligne in range (0, len(Maliste)): print("Maliste contient ", a, " : ", Maliste[a]) ``` -+++ {"deletable": false, "editable": false, "tags": []} ++++ {"deletable": false, "editable": false} ## Exercice @@ -98,7 +98,7 @@ de sa souris](../Semaine6/00-jupyter-jeter-sa-souris.md)). :::{admonition} Raccourcis clavier -* Utilisez <kbd>Tab</kbd> pour indenter . +* Utilisez <kbd>Tab</kbd> pour indenter. * Pour désindenter utilisez <kbd>Maj</kbd>+<kbd>Tab</kbd>. * Pour indenter ou désindenter plusieurs lignes d'un coup, sélectionnez les avec <kbd>Maj</kbd>+<kbd>↑</kbd> ou <kbd>↓</kbd> diff --git a/bla.txt b/bla.txt deleted file mode 100644 index 13462d9..0000000 --- a/bla.txt +++ /dev/null @@ -1,3 +0,0 @@ - Noel - - 42 diff --git a/cours-etat-fichier.md b/cours-etat-fichier.md index 2b61684..de8908c 100644 --- a/cours-etat-fichier.md +++ b/cours-etat-fichier.md @@ -374,4 +374,3 @@ tel échec au moyen d'une exception**. La notion d'état d'un flux s'utilise naturellement avec l'idiome «lire depuis un flux tant que la lecture se passe bien». - diff --git a/cours-fichiers.md b/cours-fichiers.md index 25702dc..a6de345 100644 --- a/cours-fichiers.md +++ b/cours-fichiers.md @@ -225,4 +225,3 @@ lire ou n'en modifier qu'une fraction -- on parler d'accès aléatoire (*random access*) -- mais nous n'en aurons pas besoin ce semestre. ::: - diff --git a/cours-flux-chaines-de-caracteres.md b/cours-flux-chaines-de-caracteres.md index dd2c1a2..db8d33e 100644 --- a/cours-flux-chaines-de-caracteres.md +++ b/cours-flux-chaines-de-caracteres.md @@ -157,7 +157,7 @@ séparateur, et que l'on peut enchaîner ces lectures : slideshow: slide_type: fragment --- -string s = "truc 33 bidule 2.5 reste" +string s = "truc 33 bidule 2.5 reste" ``` ```{code-cell} @@ -470,4 +470,3 @@ Dans cette feuille: - Enfin nous avons noté que, grâce au concept de flux, on peut utiliser la même syntaxe que pour lire et écrire dans un fichier ou pour interagir avec l'utilisateur. - diff --git a/cours-flux.md b/cours-flux.md index 5910aea..bdf666c 100644 --- a/cours-flux.md +++ b/cours-flux.md @@ -46,7 +46,7 @@ des données, successivement *l’une après l’autre*. :::{admonition} Syntaxe ``` -flux << expression +flux << expression; ``` ::: diff --git a/cours.md b/cours.md index 75eab07..ca415f8 100644 --- a/cours.md +++ b/cours.md @@ -33,6 +33,17 @@ rise: ## Prélude ++++ {"slideshow": {"slide_type": "fragment"}, "tags": ["instructor-disabled"]} + +### Comment vous sentez-vous en ce début de cours? + +| | | +|-------------------------------------------------------------------|---------| +| <div style="width: 4ex; height: 4ex; background: green;" ></div> | Curieux | +| <div style="width: 4ex; height: 4ex; background: magenta;"></div> | Grognon | +| <div style="width: 4ex; height: 4ex; background: yellow;" ></div> | Inquiet | +| <div style="width: 4ex; height: 4ex; background: blue;" ></div> | Épuisé | + +++ {"slideshow": {"slide_type": "slide"}} ### Annonces @@ -217,4 +228,3 @@ Reste à définir la notion de fichier et à voir comment les manipuler en C++. - Examen mi semestre : sujet et solution sur la page web - Projet: première séance dans deux semaines; avancez d'ici là ! - Bureau d'Intervention Pédagogique: maths, physique ET informatique - diff --git a/fichier-ecriture.cpp b/fichier-ecriture.cpp index 284ab8f..78be51e 100644 --- a/fichier-ecriture.cpp +++ b/fichier-ecriture.cpp @@ -2,9 +2,9 @@ using namespace std; int main() { - ofstream fichier; // Déclaration - fichier.open("bla.txt"); // Ouverture - fichier << "Noel " << 42 << endl; // Écriture - fichier.close(); // Fermeture + ofstream flux; // Déclaration + flux.open("pi.txt"); // Ouverture + flux << "Pi vaut à peu près " << 3.14 << endl; // Écriture + flux.close(); // Fermeture } diff --git a/index.md b/index.md index 1200c6a..55aa183 100644 --- a/index.md +++ b/index.md @@ -31,6 +31,14 @@ kernelspec: ## TP ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "6ff5819dcd18e689494acb0ba1af242e", "grade": false, "grade_id": "cell-49", "locked": true, "schema_version": 3, "solution": false, "task": false}} + +### Exercice 0 : Jupyter : l'indentation + +À faire chez vous! + +- [Jupyter : l'indentation](00-jupyter-indentation.md) + +++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9dd26fe469908352fac43de3f823d14a", "grade": false, "grade_id": "cell-50", "locked": true, "schema_version": 3, "solution": false, "task": false}} ### Exercice 1 : écrire dans un fichier - 20 minutes @@ -55,7 +63,7 @@ kernelspec: :::: -+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "932c2abdd5afab28b2820aa3e931555a", "grade": false, "grade_id": "cell-60", "locked": true, "schema_version": 3, "solution": false, "task": false}} ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "8124382c9ab91f1d2004315ed95e82c1", "grade": false, "grade_id": "cell-60", "locked": true, "schema_version": 3, "solution": false, "task": false}} 1. Consultez le fichier [fichier-ecriture.cpp](fichier-ecriture.cpp). @@ -76,8 +84,8 @@ kernelspec: 6. Exécutez ce programme puis ouvrez le fichier `essai.txt` afin de vérifier son contenu. -7. Lisez et essayez à nouveau dans le cours les exemples de [lecture - depuis le clavier](cours-flux.md). +7. Lisez et essayez à nouveau dans le cours l'exemple de [lecture + depuis le clavier](cours-flux.md) avec `cin`. 8. En vous en inspirant, complétez le programme [cin.cpp](cin.cpp) pour que, à l’exécution, il demande à l’utilisateur d’entrer deux @@ -103,16 +111,16 @@ kernelspec: ### Exercice 2 : ouvrir le smiley - 5 minutes -+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "090a1e8ca046f04ddd14e2bfbf53fc87", "grade": false, "grade_id": "cell-80", "locked": true, "schema_version": 3, "solution": false, "task": false}} ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "5f1d313afad6f51ebf42d10eb2ea7a42", "grade": false, "grade_id": "cell-80", "locked": true, "schema_version": 3, "solution": false, "task": false}} Le fichier [media/smiley.pbm](media/smiley.pbm) (dans le répertoire `media` donc!) contient l’image en noir et blanc du TD. -- Ouvrez ce fichier d’abord avec un éditeur de texte. Depuis le +1. Ouvrez ce fichier d’abord avec un éditeur de texte. Depuis le navigateur de fichiers de JupyterLab: clic droit -> Ouvrir avec -> Éditeur. -- Ouvrez ce même fichier avec un logiciel de vision d’images. Pour +2. Ouvrez ce même fichier avec un logiciel de vision d’images. Pour cela, depuis Jupyter, vous pouvez utiliser la cellule ci-dessous : ```{code-cell} @@ -143,9 +151,9 @@ Alternativement : ### Exercice 3 : petit damier - 15 minutes -+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9abf0ebd131e32fb6dbf281385829a2c", "grade": false, "grade_id": "cell-90", "locked": true, "schema_version": 3, "solution": false, "task": false}} ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "7a193c543e70cced08244a1a71520334", "grade": false, "grade_id": "cell-90", "locked": true, "schema_version": 3, "solution": false, "task": false}} -- Utilisez un éditeur de texte pour écrire à la main un **fichier +1. Utilisez un éditeur de texte pour écrire à la main un **fichier texte** `damier.pbm` contenant une image au format PBM ([*Portable Bit Map*](http://fr.wikipedia.org/wiki/Portable_bitmap)) de taille 10×10 représentant un damier : @@ -155,7 +163,7 @@ Alternativement : :alt: un damier ::: -- Visualisez le résultat, par exemple avec : +2. Visualisez le résultat, par exemple avec : ```{code-cell} from open_ppm import open_ppm @@ -174,10 +182,10 @@ im.resize((256*im.width // im.height, 256)) - Vérifiez l'entête de l'image: - la première ligne contient `P1` (format PBM), `P2` (format PGM) ou `P3` (format PPM); - - la deuxième ligne (sans compter les lignes de commentaires + - la deuxième ligne (sans compter les lignes de commentaires commençant par `#`) contient deux entiers: le nombre $c$ de colonnes et le nombre $l$ de lignes; - - pour les fichiers `pbm` ou `ppm`: la troisième ligne contient un + - pour les fichiers `pbm` ou `ppm`: la troisième ligne contient un entier $m$. - Vérifiez que le reste du fichier consiste d'entiers séparés par des espaces ou des sauts de ligne: @@ -218,18 +226,28 @@ im = open_ppm("damier-automatique.pbm") im.resize((512*im.width // im.height, 512)) ``` -+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "42c17d610a555a3332ff112e8938eea3", "grade": false, "grade_id": "cell-120", "locked": true, "schema_version": 3, "solution": false, "task": false}} ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "8b8ba5a75745c14276324532d144a1fe", "grade": false, "grade_id": "cell-120", "locked": true, "schema_version": 3, "solution": false, "task": false}} :::{hint} Indications - Vous pouvez vous inspirer de [fichier-ecriture.cpp](fichier-ecriture.cpp). - Commencez par un programme pour un damier 10×10 avant de passer à 100×100. +- L'exécution de votre programme devrait être instantanée ou + presque. Si ce n'est pas le cas, interrompez le avec + <kbd>Ctrl</kbd>-<kbd>C</kbd>. +- Vérifiez la taille du fichier produit en tapant la commande suivante dans + le terminal : + ``` + ls -lh *.pbm + ``` + Il devrait faire dans les 20 kilo octets (20K). Veillez à le + supprimer s'il fait nettement plus que cela. - Si le fichier produit ne donne pas l’image attendue, ou si vous - n'arrivez pas à le visualiser: reportez vous aux [indications - de l'exercice précédent](#indications_images). -- Vous pouvez aussi dans un premier temps, si cela vous aide, - afficher le texte produit à l’écran avec `cout`; puis l'écrire + n'arrivez pas à le visualiser: reportez vous aux [indications de + l'exercice précédent](#indications_images). +- Si cela vous aide, vous pouvez aussi dans un premier temps + afficher le texte produit à l’écran avec `cout`; puis écrivez le dans le fichier dans un deuxième temps. ::: @@ -276,11 +294,11 @@ Tests automatiques : assert im.size == (10, 10), "l'image produite n'est pas de taille 10×10" ``` -+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "56e70fa9f0f44730cf722730c5fae9ab", "grade": false, "grade_id": "cell-150", "locked": true, "schema_version": 3, "solution": false, "task": false}} ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "65f16b8b10337cf30c2a8273bd57ff79", "grade": false, "grade_id": "cell-150", "locked": true, "schema_version": 3, "solution": false, "task": false}} 2. Implantez un programme [degrade.cpp](degrade.cpp) qui écrit un - fichier contenant une image `degrade.pgm` de taille 128x128, avec - un dégradé de gris comme celui-ci : + fichier contenant une image `degrade.pgm` de taille 128x128, avec + un dégradé de gris comme celui-ci : :::{image} media/degrade.png :width: 20% @@ -288,7 +306,8 @@ assert im.size == (10, 10), "l'image produite n'est pas de taille 10×10" ::: ```{code-cell} -open_ppm("degrade.pgm").resize((256*im.width // im.height, 256)) +im = open_ppm("degrade.pgm") +im.resize((256*im.width // im.height, 256)) ``` Tests automatiques : @@ -330,7 +349,7 @@ réciproquement). ### Exercice 7 : dégradé circulaire de rouge ♣ -+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "1aec375701d7e1a9221f311b7e4b07ec", "grade": false, "grade_id": "cell-210", "locked": true, "schema_version": 3, "solution": false, "task": false}} ++++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "a4badd45d2e8d7c755437d2bcc49f9bc", "grade": false, "grade_id": "cell-210", "locked": true, "schema_version": 3, "solution": false, "task": false}} 1. Implantez un programme [degrade-circulaire.cpp](degrade-circulaire.cpp) qui écrit un fichier contenant une image `degrade-circulaire.ppm` @@ -342,5 +361,5 @@ réciproquement). :alt: un dégradé circulaire ::: - 2. Répétez, avec une image de taille 100×100. +2. Répétez, avec une image de taille 100×100. diff --git a/open_ppm.py b/open_ppm.py index 3a7e93c..6fe59bc 100644 --- a/open_ppm.py +++ b/open_ppm.py @@ -2,7 +2,10 @@ import os.path from PIL import Image def open_ppm(file): png = file[:-4]+".png" - os.system(f"convert {file} {png}") - image = Image.open(png) - os.unlink(png) + if os.path.isfile(png): + image = Image.open(png) + else: + os.system(f"convert {file} {png}") + image = Image.open(png) + os.unlink(png) return image -- GitLab