Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (1)
No preview for this file type
......@@ -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>
......
Noel
42
......@@ -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».
......@@ -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.
:::
......@@ -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.
......@@ -46,7 +46,7 @@ des données, successivement *l’une après l’autre*.
:::{admonition} Syntaxe
```
flux << expression
flux << expression;
```
:::
......
......@@ -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
......@@ -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
}
......@@ -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.
......@@ -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