mise à jour

This commit is contained in:
2021-10-01 11:22:41 +02:00
parent f105ace008
commit cf7eca63af
129 changed files with 5823 additions and 269 deletions

View File

@@ -1,60 +1,31 @@
## Première NSI
# Cours NSI
Bienvenue à toutes et à tous sur ce git.
## Découpage
Ici, vous trouverez les ressources, cours, TP et autres activités autour de la meilleure spécialité du bac général !
![welcolme.gif](assets/welcolme.gif)
-----------
## Mais du coup, les cours sont accessibles 24 h /24 et 365 j / an ?
Eh bien oui. Vous avez la possibilité d'accéder à toutes ces ressources de n'importe où sur le globe, pour peu que vous ayez une connexion internet.
Cela signifie *__aucune excuse__* vis à vis du manquement aux devoirs. Vous avez toujours la possibilité de lire la leçon, de revoir les exercices, ou simplement de travailler en autonomie, que cela soit sur votre téléphone, tablette, ordinateur fixe ou portable.
## Mais je ne connais pas Git moi !?
Et bien justement, ça sera l'occasion d'apprendre, après tout, nous sommes là pour ça.
Par ailleurs, tous les documents utilisés / crées dans le cadre des cours seront également postés sur *__Pronote__*, dans ce fabuleux et incroyable *__Cahier de Textes __* vous savez, le site que vous actualisez toutes les dix minutes pour avoir vos notes...
------------
<table cellspacing="0" cellpadding="0" style="border-collapse: collapse;margin:auto;" >
<body>
<tr>
<td style="text-align: center;"><a title="Représentation des données : Types et valeurs de base" href="./representation_base"><img src='./assets/binary.svg' width="128px"/><br/>Types et valeurs de base</a></td>
<td style="border: none;text-align: center;"><a title="Représentation des données : Types construits" href="./representation_construite"><img src='./assets/complex.svg' width="128px"/><br/>Types construits</a></td>
<td style="border: none;text-align: center;"><a title="Réseau et Web" href="./reseau"><img src='./assets/network.svg' width="128px"/><br/>Réseau et Web</a></td>
<td style="border: none;text-align: center;"><a title="Architectures matérielles et systèmes d'exploitation" href="./architecture_systeme"><img src='./assets/system.svg' width="128px"/><br/>Architectures matérielles et systèmes d'exploitation</a></td>
<td style="border: none;text-align: center;"><a title="Langages et programmation" href="./programmation"><img src='./assets/python.svg' width="128px"/><br/>Langages et programmation</a></td>
<td style="border: none;text-align: center;"><a title="Algorithmique" href="./algorithmique"><img src='./assets/algorithm.svg' width="128px"/><br/>Algorithmique</a></td>
</tr>
</body>
</table>
## Progression
Durant votre année de Première, nous allons étudier les chapitres suivants :
| Trimestre | Objectifs | Séquence 1 | Séquence 2 |
| --- | ----- | ------------------------ | -------------------------- |
| 1 | - Qu'est-ce que __coder__ et __programmer__ ?<br />- Qu'est-ce qu'une __donnée__ en machine ? | **Langage de programmation** :<br /> - Affectation<br /> - Structures conditionnelles<br /> - Fonctions<br /> - Boucles bornées et non bornées<br /> - Mutabilité | **Représentation des données : types et valeurs de base** : <br/> - Numération<br /> - Écriture binaire des entiers relatifs<br /> - Écriture binaire des nombres à virgules flottants<br /> - Conversion de base (binaire, hexadécimal, décimal)<br /><br />**Représentation des données : types construits** : <br /> - List<br /> - Tuple<br /> - Dictionnaire |
| 2 | - Qu'est-ce que __prouver__ ses algorithmes ?<br />- Qu'est-ce qu'un __système d'exploitation__ ?| **Algorithmique** : <br /> - Terminaison<br /> - Complexité<br /> - Recherche de minimum <br /> - Tri par sélection<br /> - Insertion dans une liste triée<br /> - Tri par insertion <br/> | **Architectures matérielles et systèmes d'exploitation** : <br /> - Modèle Von Neumann<br /> - Langage assembleur<br /> - Définition d'un OS<br /> - Linux et commandes<br /><br />**Représentation des données : types et valeurs de base** :<br /> - Encodage des caractères<br /> - Traitement des données en table (CSV)<br /> |
| 3 | - Que communique-t-on sur le __WEB__ ?<br/>- Comment __échanger__ des données de manière __sécurisée__ ?<br />- Que se pase-t-il quand on cherche __LA meilleure solution__ ?| **Algorithmique** :<br /> - Dichotomie<br /> - Algorithme Glouton<br /> - Introduction aux algorithmes dapprentissage<br /> - K plus proches voisins | **Réseau et web**<br /> - Pages Web statiques<br /> - Interactions utilisateur-client (événements en JS)<br /> - Interactions client-serveur (requêtes GET, POST)<br /> - Protocole IP et adressage<br/> - Les modèles OSI et TCP/IP<br/> - architecture et routage |
- [Représentation des données : types et valeurs de base](https://gitlab.com/Poueteuh/1ere-nsi/-/tree/main/representation_base)
- Représentation des données : types construits
- Réseau et Web
- Architectures matérielles et systèmes d'exploitation
- Langages et programmation
- Algorithmique
## Sitographie
---------
## Mais aussi ...
Au dela des chapitres qui seront abordés, nous allons aussi découvrir de nouveaux outils de travail :
- [Markdown](https://gitlab.com/Poueteuh/1ere-nsi/-/tree/main/markdown)
- Jupyter - Notebook
- Bashton
- Spyder
- Filius
- Gimp
----------
## Les Ressources supplémentaires
En plus des cours, et autres support de TP, vous trouverez parfois des liens, des vidéos, extraits sonores ou simplement des mini projets pour vous permettre d'en apprendre davantage, d'aller plus loin, ou juste d'étoffer votre culture numérique.
- [Gitlab de David Landry](https://gitlab.com/david_landry/nsi)
- [Framagit de Christophe Mieszczak](https://framagit.org/tofmzk/informatique_git/-/tree/master/premiere_nsi)
- [Site de David Roche](https://pixees.fr/informatiquelycee/n_site/nsi_prem.html)

1
assets/algorithm.svg Normal file
View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg id="Capa_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><g><path d="m322.967 182.394c-5.857-5.857-15.355-5.857-21.213 0-5.857 5.857-5.857 15.355 0 21.213l21.213 21.213c2.929 2.929 6.768 4.394 10.606 4.394s7.678-1.465 10.606-4.394l42.426-42.426c5.858-5.857 5.858-15.355 0-21.213-5.857-5.859-15.354-5.857-21.213 0l-31.818 31.819z"/><path d="m365.394 237.181-31.82 31.819-10.607-10.606c-5.857-5.857-15.355-5.857-21.213 0-5.857 5.857-5.857 15.355 0 21.213l21.213 21.213c2.929 2.929 6.768 4.394 10.606 4.394s7.678-1.465 10.606-4.394l42.426-42.426c5.858-5.857 5.858-15.355 0-21.213-5.856-5.86-15.353-5.858-21.211 0z"/><path d="m256 178h-120c-8.284 0-15 6.716-15 15s6.716 15 15 15h120c8.284 0 15-6.716 15-15s-6.716-15-15-15z"/><path d="m256 254h-120c-8.284 0-15 6.716-15 15s6.716 15 15 15h120c8.284 0 15-6.716 15-15s-6.716-15-15-15z"/><path d="m256 330h-120c-8.284 0-15 6.716-15 15s6.716 15 15 15h120c8.284 0 15-6.716 15-15s-6.716-15-15-15z"/><path d="m256 406h-120c-8.284 0-15 6.716-15 15s6.716 15 15 15h120c8.284 0 15-6.716 15-15s-6.716-15-15-15z"/><path d="m436 60h-85.305c-5.653-11.992-17.776-20-31.637-20h-13.846l5.341-21.362c1.12-4.48.113-9.229-2.729-12.869-2.844-3.641-7.205-5.769-11.824-5.769h-80c-4.619 0-8.98 2.128-11.823 5.769-2.842 3.641-3.849 8.389-2.729 12.869l5.341 21.362h-13.846c-13.86 0-25.984 8.008-31.637 20h-85.306c-8.284 0-15 6.716-15 15v422c0 8.284 6.716 15 15 15h360c8.284 0 15-6.716 15-15v-422c0-8.284-6.716-15-15-15zm-243.058 10h33.058c4.619 0 8.98-2.128 11.823-5.769 2.842-3.641 3.849-8.389 2.729-12.869l-5.341-21.362h41.577l-5.341 21.362c-1.12 4.48-.113 9.229 2.729 12.869 2.844 3.641 7.205 5.769 11.824 5.769h33.058c2.454 0 4.528 1.757 4.932 4.178l4.303 25.822h-144.586l4.304-25.822c.403-2.421 2.477-4.178 4.931-4.178zm228.058 412h-330v-392h63.96l-3.756 22.534c-.725 4.349.5 8.797 3.351 12.161s7.036 5.305 11.445 5.305h180c4.409 0 8.595-1.94 11.445-5.305s4.076-7.813 3.351-12.161l-3.756-22.534h63.96z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

82
assets/binary.svg Normal file
View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg4055"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="New document 12">
<defs
id="defs4057" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="375"
inkscape:cy="405.71429"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1313"
inkscape:window-height="744"
inkscape:window-x="53"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata4060">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:128.77966309px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Lato;-inkscape-font-specification:Lato Semi-Bold"
x="51.377365"
y="346.8248"
id="text4063"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4065"
x="51.377365"
y="346.8248"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:Monospace;-inkscape-font-specification:Monospace">01101100 </tspan><tspan
sodipodi:role="line"
x="51.377365"
y="507.79938"
id="tspan4067"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:Monospace;-inkscape-font-specification:Monospace">01101111 </tspan><tspan
sodipodi:role="line"
x="51.377365"
y="668.77399"
id="tspan4069"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:Monospace;-inkscape-font-specification:Monospace">01110110 </tspan><tspan
sodipodi:role="line"
x="51.377365"
y="829.74854"
id="tspan4071"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;font-family:Monospace;-inkscape-font-specification:Monospace">01100101</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

1
assets/complex.svg Normal file
View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><defs><style>.cls-1{fill:#2d3e50;}</style></defs><title>b</title><path class="cls-1" d="M92.41665,40.0391a14.25573,14.25573,0,0,1,10.49179.211l-10.493-28.2765L64.52109,22.32474A14.31354,14.31354,0,1,0,44.6884,29.68436L16.4238,40.17293,26.81772,68.18245a14.31354,14.31354,0,1,0,7.48,20.15716l10.32543,27.825,28.26389-10.48831a14.31354,14.31354,0,1,0,19.83412-7.36015l27.89365-10.35092-10.42454-28.092A14.31279,14.31279,0,1,1,92.41665,40.0391Z"/></svg>

After

Width:  |  Height:  |  Size: 600 B

1
assets/network.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><g id="NETWORK-2" data-name="NETWORK"><path d="M10.29,42a1,1,0,1,0,1.26-1.54A1,1,0,0,0,10.29,42Z"/><path d="M23.19,40.29H14a1,1,0,0,0,0,2h9.19a.87.87,0,0,1,.86.86V52.4H5V43.15c0-1.32,2.21-.73,3-.86a1,1,0,0,0,0-2c-2.3-.11-4.83-.09-5,2.86V54.48a2.86,2.86,0,0,0,2.85,2.85H10.6A3.33,3.33,0,0,0,10.31,59H9.64a1,1,0,0,0,0,2h9.77a1,1,0,0,0,0-2h-.67a3.44,3.44,0,0,0-.29-1.67h4.74a2.86,2.86,0,0,0,2.86-2.85V43.15A2.87,2.87,0,0,0,23.19,40.29ZM5,54.48V54.4h9a.69.69,0,0,0,0,.93H5.85A.85.85,0,0,1,5,54.48Zm10.51,2.86A1.42,1.42,0,0,1,16.74,59H12.3C12.1,57,14.2,57.32,15.51,57.34Zm7.68-2h-8.1a.69.69,0,0,0,0-.93h9A.86.86,0,0,1,23.19,55.33Z"/><path d="M58.15,40.29H40.81A2.87,2.87,0,0,0,38,43.15V54.48a2.86,2.86,0,0,0,2.86,2.85h4.74A3.44,3.44,0,0,0,45.26,59h-.67a1,1,0,0,0,0,2h9.77a1,1,0,0,0,0-2h-.67a3.33,3.33,0,0,0-.29-1.67h4.75A2.86,2.86,0,0,0,61,54.48V43.15A2.86,2.86,0,0,0,58.15,40.29Zm-17.34,2H58.15a.86.86,0,0,1,.85.86V52.4H40V43.15A.87.87,0,0,1,40.81,42.29ZM40,54.48V54.4h9a.69.69,0,0,0,0,.93h-8.1A.86.86,0,0,1,40,54.48Zm10.51,2.86A1.42,1.42,0,0,1,51.7,59H47.26C47.05,57,49.16,57.32,50.46,57.34Zm7.69-2H50a.69.69,0,0,0,0-.93h9A.86.86,0,0,1,58.15,55.33Z"/><path d="M35,48.19H29a1,1,0,0,0,0,2h6A1,1,0,0,0,35,48.19Z"/><path d="M31.25,29.85l-7,7.92a1,1,0,0,0,1.5,1.32L32,32l6.25,7.06a1,1,0,0,0,1.5-1.32l-7-7.92A1.05,1.05,0,0,0,31.25,29.85Z"/><path d="M19,16c1.09,20.21,31.09,14.89,25.22-4.41C39.42-2,18.93,1.73,19,16Zm9.18-8.53A11.74,11.74,0,0,1,32,5.05a11.76,11.76,0,0,1,6.38,6H25.63A11.55,11.55,0,0,1,28.18,7.47ZM39.1,13a11.52,11.52,0,0,1,0,6H24.9a11.73,11.73,0,0,1,0-6ZM43,16a11.2,11.2,0,0,1-.42,3H41.17a13.8,13.8,0,0,0,0-6h1.41A11.2,11.2,0,0,1,43,16Zm-7.17,8.53A11.89,11.89,0,0,1,32,27,11.74,11.74,0,0,1,25.63,21H38.38A11.85,11.85,0,0,1,35.83,24.53ZM22.84,19H21.42a10.92,10.92,0,0,1,0-6h1.42A13.8,13.8,0,0,0,22.84,19Zm.07,3.19a11.94,11.94,0,0,1-.7-1.19h1.24a13.38,13.38,0,0,0,2.72,4.32A10.81,10.81,0,0,1,22.91,22.19ZM39.56,24a10.55,10.55,0,0,1-1.73,1.34A13.41,13.41,0,0,0,40.56,21h1.23A10.67,10.67,0,0,1,39.56,24ZM41.09,9.81a11.94,11.94,0,0,1,.7,1.19H40.56a13.41,13.41,0,0,0-2.73-4.32A10.94,10.94,0,0,1,41.09,9.81Zm-18.18,0a10.81,10.81,0,0,1,3.26-3.13A13.38,13.38,0,0,0,23.45,11H22.21A10.91,10.91,0,0,1,22.91,9.81Z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

14
assets/python.svg Normal file
View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 3.8.1 (29687) - http://www.bohemiancoding.com/sketch -->
<title>python [#127]</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Dribbble-Light-Preview" transform="translate(-340.000000, -7599.000000)" fill="#000000">
<g id="icons" transform="translate(56.000000, 160.000000)">
<path d="M296.744,7457.45798 C296.262,7457.45798 295.872,7457.06594 295.872,7456.58142 C295.872,7456.0969 296.262,7455.70587 296.744,7455.70587 C297.226,7455.70587 297.616,7456.0969 297.616,7456.58142 C297.616,7457.06594 297.226,7457.45798 296.744,7457.45798 M294.072,7459 C299.15,7459 298.833,7456.78649 298.833,7456.78649 L298.827,7454.49357 L293.982,7454.49357 L293.982,7453.80499 L300.751,7453.80499 C300.751,7453.80499 304,7454.17591 304,7449.02614 C304,7443.87636 301.165,7444.0583 301.165,7444.0583 L299.472,7444.0583 L299.472,7446.44873 C299.472,7446.44873 299.563,7449.29855 296.682,7449.29855 L291.876,7449.29855 C291.876,7449.29855 289.176,7449.25533 289.176,7451.9222 L289.176,7456.33112 C289.176,7456.33112 288.766,7459 294.072,7459 M291.257,7440.54202 C291.739,7440.54202 292.128,7440.93406 292.128,7441.41858 C292.128,7441.9031 291.739,7442.29413 291.257,7442.29413 C290.775,7442.29413 290.385,7441.9031 290.385,7441.41858 C290.385,7440.93406 290.775,7440.54202 291.257,7440.54202 M293.928,7439 C288.851,7439 289.168,7441.21351 289.168,7441.21351 L289.174,7443.50643 L294.019,7443.50643 L294.019,7444.19501 L287.249,7444.19501 C287.249,7444.19501 284,7443.82409 284,7448.97386 C284,7454.12364 286.836,7453.9417 286.836,7453.9417 L288.528,7453.9417 L288.528,7451.55127 C288.528,7451.55127 288.437,7448.70145 291.319,7448.70145 L296.124,7448.70145 C296.124,7448.70145 298.824,7448.74467 298.824,7446.0778 L298.824,7441.66888 C298.824,7441.66888 299.234,7439 293.928,7439" id="python-[#127]"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

27
assets/system.svg Normal file
View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Icons" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
.st1{fill:none;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:10;}
</style>
<path class="st0" d="M23,25H9c-1.1,0-2-0.9-2-2V9c0-1.1,0.9-2,2-2h14c1.1,0,2,0.9,2,2v14C25,24.1,24.1,25,23,25z"/>
<path class="st0" d="M19,21h-6c-1.1,0-2-0.9-2-2v-6c0-1.1,0.9-2,2-2h6c1.1,0,2,0.9,2,2v6C21,20.1,20.1,21,19,21z"/>
<line class="st0" x1="14" y1="3" x2="14" y2="7"/>
<line class="st0" x1="10" y1="3" x2="10" y2="7"/>
<line class="st0" x1="22" y1="3" x2="22" y2="7"/>
<line class="st0" x1="18" y1="3" x2="18" y2="7"/>
<line class="st0" x1="14" y1="25" x2="14" y2="29"/>
<line class="st0" x1="10" y1="25" x2="10" y2="29"/>
<line class="st0" x1="22" y1="25" x2="22" y2="29"/>
<line class="st0" x1="18" y1="25" x2="18" y2="29"/>
<line class="st0" x1="25" y1="18" x2="29" y2="18"/>
<line class="st0" x1="25" y1="22" x2="29" y2="22"/>
<line class="st0" x1="25" y1="10" x2="29" y2="10"/>
<line class="st0" x1="25" y1="14" x2="29" y2="14"/>
<line class="st0" x1="3" y1="18" x2="7" y2="18"/>
<line class="st0" x1="3" y1="22" x2="7" y2="22"/>
<line class="st0" x1="3" y1="10" x2="7" y2="10"/>
<line class="st0" x1="3" y1="14" x2="7" y2="14"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

335
introduction/HISTOIRE.md Normal file
View File

@@ -0,0 +1,335 @@
---
title : Petite Histoire de l'informatique
author : M. BODDAERT
---
# Petite Histoire de l'informatique
## 1er siècle avant J.-C.
- Datée d'avant 87 av. J.-C, la machine d'__Anticythère__ est une calculatrice mécanique antique permettant de calculer des positions astronomiques. C'est le plus vieux __mécanisme à engrenages
connu.__
## 1623
- __Wilhelm Schickard__ (1592-1635) invente pour Kepler une « horloge calculante » destinée à calculer les éphémérides.
![Wilhelm Schickard, Source : Wikipedia](./assets/Wilhelm_Schickard.jpeg){ height=50% }
## 1642-1644
- __Blaise Pascal__ (1623-1662) invente une machine à calculer (« __la Pascaline__ ») capable d'additionner et de soustraire des nombres de huit chiffres.
![Machine à calculer de Blaise Pascal sans sous ni deniers, Source : David Monniaux](./assets/Pascaline.jpeg){ width=50% }
## 1673
![Gottfried Wilhelm Von Leibniz, Source : Wikipedia](./assets/Leibniz.jpeg){ height=30% }
- Gottfried Wilhelm von __Leibniz__ s'inspire de la Pascaline et invente une machine capable de multiplier et diviser sans utiliser les additions successives.
- Construite qu'en 1694, faute de trouver un artisan assez habile.
- Leibniz a aussi compris l'importance du __système binaire__ pour les mathématiques et la logique. On trouve cependant des traces du système binaire bien avant, chez les _Indiens_ et les _Chinois_.
## 1801
- Joseph Marie __Jacquard__ (1752-1834) invente des cartes pour commander le tissage de motifs sur les métiers à tisser.
- On peut considérer cette invention comme le __début de la programmation__.
![Métier Jacquard, Source : David Monniaux](./assets/Jacquard.jpeg){ height=50% }
## 1823
- __Charles Babbage__ (1791-1871) commence à construire sa __machine à différences__, inspiré par le métier à tisser de Jacquard.
- En 1823 débute la construction de cette machine qui ne sera jamais complétée.
![Charles Babbage, Source : Wikipedia](./assets/Charles_Babbage.jpeg){ height=50% }
## 1842
- __Ada Lovelace__ (1815-1852), mathématicienne, aide à concevoir les « diagrammes » pour faire fonctionner la machine analytique de Charles Babbage. Elle conçoit le premier __programme__ qui porte sur le calcul du nombre de Bernoulli.
![Ada Lovelace, Source : Wikipedia](./assets/Ada_Lovelace.jpeg){ height=50% }
## 1854
- __George Boole__ (1815-1864) publie un article sur la __logique binaire__. Les travaux de Boole, s'ils
sont théoriques, n'en trouveront pas moins des applications primordiales dans les systèmes informatiques.
![George Boole, Source : Wikipedia](./assets/George_Boole.jpeg){ height=50% }
## 1890
- __Herman Hollerith__ (1860-1929) utilise une __machine à cartes perforées__ pour le dépouillement du recensement américain.
![Machine d'Hollerith, Source : Wikipedia](./assets/Hollerith.jpeg){ width=50% }
## 1936
- Alan Mathison __Turing__ (1912-1954) publie _On Computable Numbers with an Application to the Entscheidungsproblem_, ouvrage qui définit les limites théoriques de l'ordinateur.
- Il présente le modèle des __machines de Turing__ et construit (mathématiquement) la première __machine universelle__.
- Il prouve également l'absence de méthodes algorithmiques (indécidabilité algorithmique) pour résoudre certains problèmes comme le problème de l'arrêt ou le problème de la décision.
![Alan Turing, Source : Wikipedia](./assets/Alan_Turing.jpeg){ height=50% }
## 1940
- Pour décrypter les messages de l'armée Allemande, les Anglais mettent au point sur le site de Bletchley Park les calculateurs __Robinson__ et __Colossus__ sous la direction du mathématicien Alan Turing.
![Machine Enigma, Source : Wikipedia](./assets/Enigma.jpeg){ height=50% }
- Tout ceci sera classé « Secret défense » jusqu'en 1975.
- L'histoire de cette période est retracée dans le film __The Imitation Game__ de _Morten Tyldum_ sorti en 2014.
## 1941
![Réplique du Zuse S3, Source : Wikipedia](./assets/Zuse_Z3.jpeg){ width=25% }
- Konrad Zuse (1910-1995) fait fonctionner le __premier ordinateur du monde__, le Z3 (ou Zuse 3).
- Encore largement méconnu, il est l'un des pères de l'informatique en ayant développé le premier calculateur électromécanique Z1 en 1938. Le Z3 fut détruit en 1944 par les bombardements alliés et servait à produire des calculs pour une usine aéronautique allemande.
- Il concevra aussi et réalisera entre 1942 et 1946 le premier langage de haut niveau nommé __Plankalkül__.
## 1943
- L'__ENIAC__ (Electronic Numerical Integrator And Computer) est créé. Il sera opérationnel en 1946. Son poids est de 30 tonnes pour des dimensions de 2,4 x 0,9 x 30,5 mètres occupant une surface de 67 mètres carrés.
![ENIAC, Source : Domaine Public](./assets/Eniac.jpeg){ width=25% }
- Il fut utilisé pour des calculs ayant servi à mettre au point la bombe H. Son principal inconvénient était sa programmation : l'ENIAC était en effet uniquement programmable manuellement avec des commutateurs et des câbles à enficher.
## 1944
- John __Von Neumann__ (né János Neumann, 1903-1957) a donné son nom à « l'architecture de von Neumann » utilisée dans la quasi-totalité des ordinateurs modernes.
![Architecture Von Neumann, Source : Wikipedia](./assets/Von_Neumann.png){ width=50% }
## 1947
- Un papillon de nuit coincé dans les circuits bloque le fonctionnement du calculateur Mark II. La mathématicienne __Grace Murray Hopper__ décide alors que tout ce qui arrête le bon fonctionnement d'un programme s'appellera « __bug__ » (bestiole en anglais).
![Photo du 1er Bug, Source : presse-citron.net](https://www.presse-citron.net/app/uploads/Bug.png){ width=50% }
- Il faut noter que le terme « bug » était déjà utilisé auparavant : Thomas Edison par exemple avait employé ce terme dans un courrier à propos d'une de ses inventions.
## 1951
- __Grace Murray Hopper__ (1906-1992) conçoit le __premier compilateur__, nommé A-0 System.
![Grace Murray Hopper, Source : Wikipedia](./assets/Grace_Hopper.jpeg){ width=50% }
## 1954
- Création du __FORTRAN__, par John Backus, premier __langage de programmation__ à être implémenté sur un ordinateur.
```Fortran
program hello
implicit none
write(*,*) 'Hello world!'
end program hello
```
## 1954
- IBM (société fondée en 1911) lance sur le marché le modèle 650, __premier calculateur, muni d'une mémoire à tambour__ et orienté calcul scientifique produit en grande série. Il coûtait un demi-million de dollars, occupait plusieurs mètres cubes et était doté d'une mémoire vive de 2 kilooctets.
## 1955
- Le professeur __Jacques Perret__ de la faculté des lettres de l'université de Paris, invente le mot « __ordinateur__ » le 16 avril 1955, à la demande d'IBM France.
## 1958
- En 1958, alors qu'il travaillait pour Texas Instrument, l'Américain __Jack Kilby__ (1923-2005) invente le premier circuit intégré, jetant ainsi les bases du matériel informatique moderne. Cette découverte a valu à Kilby le prix Nobel de physique en 2000.
![Texas Instruments engineers in Dallas, TX , Source : Wikipedia](./assets/Jack_Kilby.png){ width=50% }
## 1962
- Philippe Dreyfus invente le mot « __informatique__ », mot-valise né de la contraction des mots « information » et « automatique ».
## 1963
- Création de la __souris__ par Douglas Engelbart (1925-2013) du Stanford Research Institute.
![Première souris, Source : Cigref](https://www.cigref.fr/archives/histoire-cigref/wp-content/uploads/2011/06/souris-Engelbart.jpg)
## 1967
- Une équipe d'ingénieurs d'IBM dirigée par Alan Shugart (1930-2006) lance la __disquette__ (dans sa version 8 pouces) pour stocker les microprogrammes des systèmes 370 et, accessoirement, envoyer pour un faible coût des mises à jour à leurs possesseurs. Cette première disquette pouvait stocker 80'000 caractères, soit environ une journée de frappe d'une opératrice de saisie.
![Première disquette, Source : Wikipedia](./assets/Disquettes.jpeg){ height=33% }
## 1969
- Début du réseau __Arpanet__, renommé plus tard Internet. Il compte 4 nœuds.
![Carte logique d'Arpanet, Source : The Computer History Museum](./assets/Arpanet.png){ width=50% }
## 1971
- Le __microprocesseur 4004__ d'Intel date de 1971. De la taille d'un timbre, il développe des performances équivalents à celle de l'ENIAC (1946), qui occupait toute une pièce.
![Un processeur Intel C4004, Source : Wikipedia](./assets/Intel_C4004.jpeg){ width=50% }
## 1973
![Micral, Source : Wikipedia](./assets/Micral.jpeg){ width=25% }
- Commercialisation du Micral, le premier micro-ordinateur. Il a été développé de 1972 à 1973 par R2E, jeune société Française dirigée par André Truong (1936-2005), mais c'est François Gernelle (né en 1944) qui en est l'inventeur. Cet ordinateur ne possédait ni clavier ni écran et était commandé par des interrupteurs, comme l'Altaïr, deux ans plus tard.
## 1975
- L'Altaïr 8800 du constructeur américain MITS est un micro-ordinateur basé sur le micro- processeur Intel 8080A vendu en kit électronique à quelques milliers d'exemplaires pour les particuliers en 1975. Il est considéré par les Américains comme le premier micro-ordinateur.
![Altair 8800, Source : Wikipedia](./assets/Altair_8800.jpeg){ width=25% }
## 1975
- La société Microsoft est fondée en avril 1975 sous le nom original de __Micro-Soft__, par deux étudiants américains, __Bill Gates__ (photo, né en 1955) et Paul Allen (1953-2018).
![Bill Gates, Source : Wikipedia](./assets/Bill_Gates.jpeg){ height=50% }
## 1976
- Steve Jobs (1955-2011), Steve Wozniak (photo, né en 1950) et Ronald Wayne (né en 1934) fondent la société __Apple__.
![Logo originel d'Apple, Source : Wikipedia](./assets/Apple.png){ width=25% }
## 1976
- Apparition du premier supercalculateur : le __Cray I__.
![Cray-1, Source : Wikipedia](./assets/Cray_I.jpeg){ width=50% }
## 1982
- L'arrivée du PC portable __Grid Compass 1101__ : la première machine à proposer un concept d'écran « refermable ».
![Grid Compass 1101, Source : Wikipedia](./assets/Grid_Compass_1101.jpeg){ height=33% }
- Vendu la bagatelle de 8150 dollars, c'est un véritable monstre de puissance et se targue de proposer un écran de 6 pouces affichant une définition de 320 x 240 px. À l'intérieur, on y trouvait un processeur Intel 8086 cadencé à 8 MHz et 256 Ko de mémoire vive.
## 1982
- Commercialisation du CD-ROM par Philips et Sony
![CD-ROM, Source : Wikipedia](./assets/CD-ROM.png){ width=33% }
## 1989
- Tim Berners-Lee (né en 1955) invente le World Wide Web (WWW) pour que les chercheurs puissent partager les informations au sein du CERN.
![Tim Berners-Lee, Source : CERN](./assets/Tim_Berners_lee.jpeg){ width=50% }
## 1990
- le 20 Décembre, le premier site web est mis en ligne, accessible à l'adresse [info.cern.ch](info.cern.ch)
![Premier site web](./assets/web.png)
## 1991
- __Guido van Rossum__ créé le langage __Python__.
![Logo du langage Python](../assets/python.svg){ width=50% }
## 1994
- Le site de vente en ligne __Amazon__ est fondé par __Jeff Bezos__ (né en 1964).
- En 2017, la société emploie 541'900 personnes dans le monde et a établi, outre le site originel américain (ouvert en 1995), des sites spécifiques dans de nombreux pays.
![Jeff Bezos, Source : Wikipedia](./assets/Jeff_Bezos.jpeg){ height=33% }
## 1995
- Création du Premier réseau social sur Internet : __Classmates.com__, par Randy Conrads, lobjectif de ce site était de remettre en contact des anciens camarades de classe.
![Publicité pour classmates.com](./assets/classmates.jpeg){ width=50% }
## 1997
- __Deep Blue__ bat Gary Kasparov sur le score de 3,5 2,5.
- Deep Blue est un superordinateur spécialisé dans le jeu d'échecs, développé par IBM.
- C'est la première fois qu'un ordinateur bat un champion du monde d'échecs.
![Deep Blue, d'IBM, Source : Wikipedia](./assets/Deep_Blue.jpeg){ height=50% }
## 1998
- La société __Google__, Inc. est fondée le 27 septembre 1998 dans la Silicon Valley, en Californie, par Larry Page et Sergey Brin, créateurs du moteur de recherche Google.
## 1999
- Création de la norme __Bluetooth__ par le fabricant suédois Ericsson à Lund.
- Le nom « Bluetooth » est directement inspiré du surnom anglicisé du roi viking danois Harald à la dent bleue (en danois Harald Blåtand, en anglais Harald Bluetooth), connu pour avoir réussi à unifier les tribus danoises au sein d'un même royaume, introduisant du même coup le christianisme.
## 2001
- __Wikipédia__ est une encyclopédie numérique ouverte, libre, multilingue, consultable gratuitement sur internet et en évolution permanente grâce à de très nombreux contributeurs bénévoles. Son succès est considérable et sa croissance exponentielle : créée en janvier 2001 par Jimmy Wales (né en 1966), elle est devenue un des 10 sites les plus consultés au monde.
![Logo de Wikipedia](./assets/Wikipedia.png){ width=25% }
## 2004
![Mark Zuckerberg, Source : Wikipedia](./assets/Mark_Zuckerberg.jpeg){ height=33% }
- __Mark Zuckerberg__ (né en 1984) fonde « The Facebook », le 4 février 2004.
- L'inscription était alors limitée aux étudiants de l'université Harvard.
- En 2018, __Facebook__ compte plus de 2.2 milliards d'utilisateurs.
## 2005
- __Youtube__ est créé par Steve Chen, Chad Hurley et Jawed Karim, trois anciens employés de PayPal.
- Il est racheté par Google en octobre 2006 pour la somme de 1.65 milliard de dollars.
![Logo Youtube](./assets/Youtube.png){ width=50% }
## 2006
- __Twitter__ est créé le 21 mars 2006 par Jack Dorsey, Evan Williams, Biz Stone et Noah Glass, et lancé le 13 juillet de la même année. Le service est rapidement devenu populaire, jusqu'à réunir plus de 500 millions d'utilisateurs dans le monde fin février 2012. Au 5 mars 2017, Twitter compte 313 millions d'utilisateurs actifs par mois avec 500 millions de tweets envoyés par jour et est disponible en plus de 40 langues.
## 2007
- Apple entre dans le marché des téléphones portables avec la commercialisation de l'__iPhone__.
![Steve Jobs présentant le premier Iphone, Source : wikipedia](./assets/Iphone.jpeg){ height=50% }
## 2010
- Le 3 avril 2010, Steve Jobs (1955-2011), président-directeur général d'Apple, présente sa dernière nouveauté : l'__iPad 1__. La tablette d'Apple est la plus vendue au monde.
- L'écran tactile de la tablette remplace en quelque sorte la souris. Un logiciel interprète le contact et les déplacements des doigts sur l'écran. L'affichage à l'écran peut se faire en mode portrait et paysage en pivotant la tablette.
![Steve Jobs présentant le premier Ipad, Source : wikipedia](./assets/Ipad.jpeg){ height=33% }
## 2010
- __Instagram__ est fondé et lancé par l'Américain Kevin Systrom et le Brésilien Michel Mike Krieger en octobre 2010. Le 10 avril 2012, Facebook annonce l'acquisition d'Instagram pour environ un milliard de dollars américains.
- Instagram revendique plus d'un milliard d'utilisateurs à travers le monde, dont 75 % d'utilisateurs en dehors des États-Unis, selon les chiffres officiels fournis en juin 2018.
## 2011
- En Septembre 2011, Evan __Spiegel__ et Bobby __Murphy__ créént L'application Snapchat.
## 2017
- En novembre, IBM déclare avoir développé un __ordinateur quantique__ capable de gérer 50 bits quantiques, ou qubits. Les chercheurs ont pu préserver l'état quantique pendant 90 microsecondes. En dépit d'une période de temps extrêmement courte, il s'agit d'un nouveau record pour l'industrie.
![IBM Q System One, Source : lebigdata.fr](./assets/IBM_Q.jpeg){ width=50% }
## 2018
- En mars 2018, Google a marqué les esprits en présentant __Bristlecone__, un processeur quantique avec 72 qubits. Personne n'a fait mieux à ce jour.
## Tester vos connaissances
Pour tester vos connaissances en histoire de l'informatique, vous pouvez compléter la [grille de mots croisés](./MOTS_CROISES.pdf).
## Sources
[1] Rossi Serge, « Histoire de l'informatique », <http://histoire.info.online.fr/>
[2] Wikipédia, « Chronologie de l'informatique », <http://fr.wikipedia.org/wiki/Chronologie_informatique>
[3] Breton Philippe, Une histoire de l'informatique, Éditions La découverte, 1987
[4] Les Cahiers de Sciences & Vie, Qui a inventé l'ordinateur ?, HS No 36, Décembre 1996

BIN
introduction/HISTOIRE.pdf Normal file

Binary file not shown.

View File

@@ -0,0 +1,121 @@
---
title : Introduction à l'informatique
author : M. BODDAERT
---
# Introduction
## L'informatique c'est quoi ?
L'informatique est structurée par quatre concepts:
- L'__algorithme__ : méthode opérationnelle permettant de résoudre un problème.
- La __machine__ : système physique doté de fonctionnalités.
- Le __langage__ : moyen de communication entre l'informaticien et la machine.
- Les __données__ : éléments symboliques susceptibles d'être traitées par une machine.
À ces concepts s'ajoute un élément transversal : Les __interfaces__
```mermaid
flowchart LR
Donnée --> |Est utilisé|Algorithme
Algorithme --> |Est Traduit|Langage
Langage --> |Est exécuté|Machine
Machine <--> |Manipule|Donnée
Interface <--> |Commande|Machine
Utilisateur <--> |Intéragit|Interface
Interface <--> |Stocke|Donnée
```
« *L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes* » (Michael R. Fellows et Ian Parberry)
## Définition
On peut dire que l'informatique est : __La science du traitement automatisé de l'information__.
- __Science__ : donc un aspect théorique (domaine des mathématiques)
- __Traitement automatisé__ : c'est l'ordinateur (domaine des technologies)
- __Information__ (au sens de [Claude Shannon](https://fr.wikipedia.org/wiki/Claude_Shannon)) : Grandeur mesurable, observable tout ce qui est numérisable (texte,musique, voix,image, films, ADN,...)
L'informatique regroupe un grand nombre de domaines : langage et programmation, architecture et système, théorie des graphes, réseau, sécurité, base de données, intelligence artificielle, etc.
Comme toute connaissance scientifique et technique, les concepts de l'informatique ont une __histoire__ plus ancienne qu'il n'y parait et ont été forgés par des femmes et des hommes...sur des siècles !
## Une brève histoire
| Qui | Date | Événement |
| :--: | :--: | :-- |
| - | 1er siècle avant J.-C. | Machine dAnticythère, le plus vieux __mécanisme à engrenages connu__. |
| __Charles Babbage__ | 1821 | Commence à construire sa __machine à différences__, première machine mécanique programmable. |
| __Alan Turing__ | 1936 | Il présente le modèle des __machines de Turing__ et construit (mathématiquement) la première machine universelle. |
| - | 1943 | __ENIAC__, machine servant au calcul des trajectoires balistiques, est créée. Son poids est de 30 tonnes pour des dimensions de 2,4 x 0,9 x 30,5 mètres occupant une surface de 67 mètres carrés.![ENIAC](./assets/Eniac.jpeg) |
| __John Von Neumann__ | 1944 | A donné son nom à « larchitecture de __von Neumann__ » utilisée dans la quasi-totalité des ordinateurs modernes. |
| __DARPA__ | 1969| Début d'Arpanet, le prédécesseur d'Internet par le ministère de la défense américaine |
| __Intel__ | 1971| Le microprocesseur 4004 dIntel est de la taille dun timbre, il développe des performances équivalents à celle de lENIAC (1946), qui occupait toute une pièce.![Intel 4004](./assets/Intel_C4004.jpeg) |
| __Jimmy Wales__ | 2001 | Création de __Wikipédia__ |
### À Faire
- Cette histoire est très incomplète, vous allez contribuer à la développer.
- Via votre téléphone ou ordinateur, trouver les dates / protagonistes des événements suivants :
| Événement / Fait | Date | Protagoniste.s |
| :--: | :--: | :--: |
| Premier réseau social sur Internet | | |
| Sortie du 1er Iphone | | |
| Premier site web | | |
| Création du premier ordinateur | | |
| Sortie du premier micro-ordinateur | | |
| Sortie du premier ordinateur portable | | |
| Création du langage Python | | |
| Création d'Internet | | |
| Création de la souris | | |
| Création du mot Bug | | |
| Premier programme informatique | | |
| Première machine à calculer | | |
| Création du CD-ROM | | |
| Première langage de programmation | | |
| Utilisation du système binaire | | |
| Création du mot ordinateur | | |
| Création du mot informatique | | |
### Pour aller plus loin
Tester vos connaissances via cette [grille de mots croisés](./MOTS_CROISES.pdf)
## Un premier TP
### Le code ISBN d'un livre
L'__ISBN__ est un numéro international normalisé permettant l'identification d'un livre dans une édition donnée. ISBN est l'acronyme d'__I__nternational __S__tandard __B__ook __N__umber.
__L'ISBN a été conçu pour simplifier le traitement informatisé des livres__
- Les libraires peuvent passer des commandes standardisées, les distributeurs ont le même code pour traiter les commandes et les retours, les différentes opérations de gestion dans les bibliothèques et centres de documentation sont également facilitées.
- Par ailleurs, le caractère international de cette numérotation constitue, à l'étranger également, une référence unique pour tous les professionnels du livre.
__L'ISBN identifie donc de façon unique un livre quel que soit son support de publication,imprimé ou numérique.__
![ISBN du Livre Ada ou la beauté des nombres, Catherine Dufour](./assets/isbn.png)
ISBN du livre de Catherine Dufour, _Ada ou la beauté des nombres_.
#### Le TP
Ce [premier TP](./TP/isbn.md) vous conduira à étudier le format de données de l'ISBN et la méthode qui vérifie la validité d'un code ISBN.
##### Les codes à vérifier
<table>
<tr>
<td><img src="./assets/9788175257665.png"/></td>
<td><img src="./assets/9780733426094.png"/></td>
<td><img src="./assets/9783165484100.png"/></td>
<td><img src="./assets/9780747595823.png"/></td>
<td><img src="./assets/9781234567897.png"/></td>
</tr>
</table>
#### Pour les plus rapides
[Voici un second TP](./TP/vitale.md) qui vous conduira à étudier et écrire la méthode qui vérifie la validité d'une carte vitale.

View File

@@ -0,0 +1,43 @@
# Mots croisés - Histoire de l'informatique
![Grille](./assets/puzzle.png){ width=70% }
__HORIZONTAL__
4 - Inventeur de la logique binaire
6 - Nom du premier langage de programmation de haut niveau
9 - Informaticien allemand ayant fait fonctionner le premier ordinateur du monde
11 - premier langage de programmation à être implémenté sur un ordinateur
13 - Nom du premier micro-ordinateur
15 - Créateur de Facebook
16 - Concepteur de la "machine à différences"
17 - A construit la première machine universelle
18 - Ancêtre d'Internet
__VERTICAL__
1 - Firme fondée par Larry Page et Sergey Brin
2 - Lieu où a été inventé le World Wide Web
3 - Informaticienne américaine qui a conçu le premier compilateur
5 - Plus vieux mécanisme à engrenages connu
7 - Prénom de la collaboratrice de Babbage et langage de programmation
8 - A donné son nom à l'architecture utilisée dans la quasi-totalité des ordinateurs modernes
10 - Electronic Numerical Integrator And Computer
12 - Nom du premier supercalculateur
14 - Inventeur de la première calculatrice capable de multiplier

164
introduction/README.md Normal file
View File

@@ -0,0 +1,164 @@
---
title : Présentation NSI
author : M. BODDAERT
toc: true
---
# Préambule
## Règles du jeu
- __Téléphone en mode avion__ dans les sacs,
- Port du __masque obligatoire__,
- __Lève la main__ pour répondre ou poser une question.
## Mot de bienvenue
- Bienvenue en __1ère__, au __lycée Masséna__
- Tous mes voeux de __réussite__ pour cette nouvelle année
- Merci d'avoir choisi la spécialité __NSI__ (**N**umérique et **S**ciences **I**nformatiques)
# Le programme
## Définition
Cet enseignement s'appuie sur les quatre concepts de l'informatique :
- Les __données__, qui représentent sous une forme numérique unifiée des informations très diverses,
- Les __algorithmes__, qui spécifient de façon abstraite et précise des traitements à effectuer sur les données,
- Les __langages__, qui permettent de traduire les algorithmes abstraits en programmes exécutables par les machines.
- Les __machines__, et leurs systèmes d'exploitation, qui permettent d'exécuter des programmes en enchaînant un grand nombre d'instructions simples, assurent la persistance des données par leur stockage et de gérer les communications. On y inclut les objets connectés et les réseaux.
## Organisation (1 / 3)
- L'horaire hebdomadaire est de __4h__ en 1ère,
- Cet enseignement favorise les __travaux pratiques__, la réalisation de __projets__ et comme son nom l'indique une __part théorique__ y est inhérente,
## Organisation (2 / 3)
- 6 chapitres :
- Représentation des données : types et valeurs de base
- Représentation des données : types construits
- Réseau et Web
- Architectures matérielles et systèmes d'exploitation
- Langages et programmation
- Algorithmique
## Organisation (3 / 3)
- 1er trimestre : Qu'est-ce que __coder__ et __programmer__ ? Qu'est-ce qu'une __donnée__ en machine ?
- 2ème trimestre : Comment __prouver un algorithme__ ? Qu'est-ce qu'un __système d'exploitation__ ?
- 3ème trimestre : Comment communique-t-on sur le __WEB__ ? Comment échanger des données de __manière sécurisée__ ? Que se pase-t-il quand on cherche __LA meilleure solution__ à un problème ?
## Attendus (1 / 2)
Développer des compétences :
- __analyser et modéliser un problème__ en termes de flux et de traitement dinformations,
- décomposer un problème en sous-problèmes, __reconnaître des situations__ déjà analysées et réutiliser des solutions,
- __concevoir__ des solutions algorithmiques,
- __traduire__ un algorithme dans un __langage de programmation__.
## Attendus (2 / 2)
- En NSI, on attend des élèves qu'ils sachent faire __preuve d'autonomie, d'initiative et de créativité__,
- Ils doivent faire preuve d'__esprit d'équipe__,
- La __rigueur et l'organisation__ sont également très importantes
- Il faut savoir __rechercher de l'information et partager des ressources__.
## Évaluation (1 / 2)
![Évaluation au bac, Source : letudiant.fr](./assets/notes.png){ width=50% }
2 situations :
1. la spécialité NSI est __abandonnée__ en _Première_ : la note du bac est égale à la __moyenne__ des bulletins scolaires de cette année, __coefficient 8__.
2. la spécialité NSI est __gardée__ en _Terminale_ : la note du bac est égale à l'__épreuve terminale__, __coefficient 16__.
## Évaluation (2 / 2)
- __Objectifs__ : Vérifier vos acquis et identifier vos difficultés. Évaluation $\neq$ Sanction.
- __Périodicité__ : Tout au long de l'année,
- __Modalité__ : QCM, TD, exposés, projets
## Point Mickael Jordan (1 / 2)
::: columns
:::: column
- Mickael Jordan :
- Basketteur américain des années 1990,
- 6 fois champion de NBA,
- 2 fois médaille d'or olympique,
- détenteur de plusieurs records : meilleur marqueur, meilleur passeur, ...
- Un grand champion qui parle de l'échec...
::::
:::: column
![Mickael Jordan, Source : Wikipedia](https://upload.wikimedia.org/wikipedia/commons/b/b3/Jordan_Lipofsky.jpg)
::::
:::
## Point Mickael Jordan (2 / 2)
![Citation à propos de l'échec, Source : Partenaire-motivation](https://i1.wp.com/partenaire-motivation.com/wp-content/uploads/2015/03/Michael-Jordan-Citation_Se_Relever_Dun_Echec1.jpg){ width=75% }
$\Rightarrow$ ___ce n'est pas parce qu'une évaluation est ratée que les autres le seront___.
## Cours
- Les cours se trouvent sur :
- Framagit : [https://gitlab.com/Philippe-Boddaert/premiere](https://gitlab.com/Philippe-Boddaert/premiere)
- Dans le cahier de texte de l'ENT
- Il est mis à jour à chaque séance
- Il contient l'essentiel des cours, et sujets des travaux (TD, TP, Projets)
- Il ne contient pas les corrigés des exercices
## Impact pour vous
- Les cours sont __disponibles 24h/24h__ et accessible par téléphone, ordinateur, tablette
- __Prise de notes obligatoires__ pour les notions importantes et les corrigés d'exercice
## Matériel
Obligatoire :
- Un grand classeur avec intercalaires (1 pour chaque chapitre)
- Feuille petit carreaux
- Un ordinateur
Facultatif :
- Crayon 4 couleurs
- 1 clé USB : pour pouvoir récupérer votre travail
- 1 casque audio : pour écouter les vidéos proposés lors de certaines séances
## Fiche de connaissances (1 / 2)
- Sur une demi-feuille, en 5 minutes, renseigner les éléments suivants :
1. Nom, prénom
2. Classe
3. Autres spécialités choisies
4. Éléments du programme de NSI "difficiles"
5. Éléments du programme de NSI "favoris"
6. Orientation envisagée
7. Ordinateur à disposition ? Endroit calme pour travailler ?
8. Parent.s / frères / soeurs évoluant dans le domaine de l'informatique ? Si oui, à quel niveau, poste ?
## Fiche de connaissances (2 / 2)
- Pendant 1 minute, à l'__oral__, présenter les éléments :
1. Nom, prénom
2. Classe
3. Autres spécialités choisies
4. Orientation envisagée
5. 30' libre : partage d'un livre, film, série...
## Outils
- __Spyder, Pizo__ : Outil de développement Python,
- __Gimp__ : Outil de manipulation d'images,
- __Notepad++__ : Outil de traitement de texte,
- __Libreoffice__ : Suite logiciel (traitement de texte, tableur, présentation),
- __Firefox, Chrome__ : Navigateur Web

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

317
introduction/TP/isbn.md Normal file
View File

@@ -0,0 +1,317 @@
# TP - Code ISBN d'un livre
## 1 - Définition
LISBN est un numéro international normalisé permettant lidentification dun livre dans une édition donnée.
ISBN est lacronyme dInternational Standard Book Number
LISBN a été conçu pour simplifier le traitement informatisé des livres : les libraires peuvent passer des commandes standardisées, les distributeurs ont le même code pour traiter les commandes et les retours, les différentes opérations de gestion dans les bibliothèques et centres de documentation sont également facilitées. Par ailleurs, le caractère international de cette numérotation constitue, à létranger également, une référence unique pour tous les professionnels du livre.
__LISBN identifie donc de façon unique un livre quel que soit son support de publication, imprimé ou numérique.__
_Deux livres peuvent avoir le même titre, mais auront des codes ISBN différents_
<table>
<tr><td style="text-align:center;">LISBN est un numéro à 13 chiffres depuis le 1er janvier 2007
(les ouvrages antérieurs avaient un ISBN à 10 chiffres).</td><td style="text-align:center;"><img src="../assets/isbn.png"/></td>
</table>
Les parties de lISBN : __978 2 253 10137 6__
- __978__, signifie que larticle est un livre (Bookland) (979 sera aussi employé en fonction des besoins...) Dans un code barre, les 3 premiers chiffres indiquent le pays producteur, comme 978 et 979 ne sont pas utilisés, on les a attribués aux livres...
- __2__ : La deuxième partie de lISBN est le numéro identifiant le groupe national, linguistique ou géographique. Le __2__ identifie la francophonie dans son ensemble.
- __253__ : Cest un numéro qui identifie un éditeur en particulier.
- __10137__ : Cest le numéro didentification dune édition donnée dune publication produite par un éditeur en particulier.
- __6__ : La cinquième partie de lISBN est la clé de contrôle. Il sagit de la partie finale de lISBN qui est reliée aux précédents caractères de la chaîne par un algorithme mathématique et qui permet den vérifier la validité. La clé peut varier de 0 à 9.
## 2 - Le problème
étant donné un code ISBN, est-il valide?
Dans un __premier temps__, examinons comment est calculée la clé de contrôle :
<table>
<tr>
<th>Les 12 premiers chiffres de l'ISBN (n)</th>
<td style="text-align:center;">9</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">7</td>
</tr>
<tr>
<th>Pondération (p)</th>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
</tr>
<tr>
<th>n * p</th>
<td style="text-align:center;">9</td>
<td style="text-align:center;">21</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;">6</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">15</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">21</td>
</tr>
</table>
### 2.1 - À Faire
1. On additionne les résultats de la dernière ligne :
```txt
```
2. On calcule le reste de la division par 10 de la somme obtenue :
```txt
```
3. Si ce reste est 0, alors la clé de contrôle est 0, sinon la clé de contrôle est alors le résultat de 10 - reste, soit ici :
```txt
```
Donc en comparant le résultat et la clé de contrôle du code ISBN, on peut affirmer que le code ISBN est valide ou pas.
Cest un cas typique où linformatique est dune aide précieuse...
- Toute personne pourra vérifier la validité dun code ISBN, sans connaître les calculs à faire.
- On entre le code ISBN dans une zone de saisie, et un programme nous informe de la validité du code...
Dans un __second temps__, écrivons un __algorithme__ qui permet de savoir si un code ISBN est valide ou pas. Il sagit de décrire la __méthode__ pour résoudre ce problème:
### 2.2 - À Faire
1. Quelles sont les données en entrées?
```txt
```
2. La variable somme reçoit
```txt
```
3. La variable reste reçoit
```txt
```
4. Complétez la méthode qui résout le problème initial : "Étant donné un code ISBN, est-il valide? "
![Algorithme de vérification de la validité d'un code ISBN](./assets/algorithme_isbn.jpeg)
### 2.3 - Conclusion
Cette partie nous permet d'écrire un premier __algorithme__,.
Un __algorithme__ est une _suite finie d'instructions séquentielles permettant de résoudre un problème_. Il est écrit en langage naturel, doit prévoir tous les cas de figures et doit comporter une description non équivoque de la manipulation des __données__.
_Quiconque lit et exécute les instructions de l'algorithme sur les données en entrée obtient une solution au problème en sortie._
Un algorithme a :
- un __nom__,
- une / des __entrées__,
- une / des __sorties__,
- des __instructions__.
Dans ce premier algorithme, nous avons utilisés différents types d'instructions manipulant des __variables__ :
- __affectation__ :
```txt
nom de variable <- x
```
À la fin de cette instruction, la variable prend `x` comme valeur
- __structure conditionnelle__ :
```txt
Si condition alors
bloc1
Sinon
bloc2
FinSi
```
Le bloc d'instructions `bloc1` est exécuté si et seulement si la condition est vérifiée. Dans le cas contraire, c'est le bloc d'instruction `bloc2` qu'il l'est.
## 3 - Implantation en Python
Cette partie est à effectuer si les notions de base de Python sont acquises.
L'algorithme obtenu dans la partie 2 est à traduire dans un langage de programmation (Python dans notre cas).
A la lecture de l'algorithme, des questions se posent :
- Comment représenter lISBN ?
- Comment atteindre le 13ème chiffres ?
- Comment calculer la clé ?
- Comment calculer une somme ?
- Comment calculer le reste ?
### 3.1 Représentation du code ISBN:
Comme cest lutilisateur qui donne le code ISBN, lentrée sera une chaîne de caractères.
```python
>>> code = input("Entrez le code à 13 chiffres")
>>> print(type(code))
```
Produit :
```python
<class str>
```
Une chaîne de caractère étant itérable, on peut accéder à chacun des caractères via leurs indices.
Par exemple : Pour accéder au dernier caractère, puisque nous connaissons la longueur de la chaîne, on utilise linstruction code[12] (le 1er étant dindice 0, le 13ème est dindice 12)
```python
>>> code = input("Entrez le code à 13 chiffres")
>>> print(code[12])
```
Nous avons donc la variable `code` qui contient une chaîne de 13 caractères, nous savons accéder à chacun dentre eux et nous pouvons transformer chacun de ces caractères en nombre avec la fonction int().
#### À Faire
Pour sen convaincre tester ce code avec le code 9782253101376.
```python
>>> code = input("Entrez le code à 13 chiffres")
>>> print(3 * code[12])
>>> print(3 * int(code[12]))
```
Expliquer les affichage obtenus
```txt
```
### 3.2 - Les calculs
Notre code est une chaîne de 13 caractères : code = "9782123456803"
En détails :
<table>
<tr>
<th>Indice</th>
<td style="text-align:center;">0</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">4</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">6</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;">9</td>
<td style="text-align:center;">10</td>
<td style="text-align:center;">11</td>
</tr>
<tr>
<th>chiffres de l'ISBN</th>
<td style="text-align:center;">9</td>
<td style="text-align:center;">7</td>
<td style="text-align:center;">8</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">2</td>
<td style="text-align:center;">5</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">0</td>
<td style="text-align:center;">1</td>
<td style="text-align:center;">3</td>
<td style="text-align:center;">7</td>
</tr>
</table>
- Il faut faire la somme (s1) des caractères (transformés en nombre) dindices (0, 2, 4, 6, 8, 10).
- Il faut faire la somme (s2) pondérée par 3 des caractères (transformés en nombre) dindices (1, 3, 5, 7, 9, 11).
- Il faudra ajouter s1 et s2.
#### À Faire
Vérifier que le code ci-dessous effectue bien le calcul de s1 :
```python
>>> code = "9782123456803"
>>> s1 = 0 # on initialise s1 à 0
>>> for i in range(0, 11, 2):
s1 = s1 + int(code[i])
```
_Remarque: Linstruction `for i in range(0,11,2)`: signifie que la boucle démarre à lindice 0 pour aller jusquà lindice 11 non compris (soit lindice 10) et cela avec un pas de 2._
#### À Faire
Écrire une boucle qui calcule s2 :
```python
```
_Rappel : Pour calculer le reste de la division de $`a`$ par $`b`$, on utilise linstruction : $`reste = a \,\%\, b`$._
#### À Faire
La clé de contrôle se calcule comme suit :
- On détermine le reste de la division de s = s1 + s2 par 10.
- Si ce reste est nul alors la clé est égale à 0.
- Sinon la clé est égale à 10 - reste.
Écrire le code qui calcule cette clé de contrôle :
```python
```
Pour finir, il ne reste plus quà comparer cette clé calculée avec le 13ème chiffre du code ISBN, sil y a égalité alors le code est valide, sinon il nest pas valide.
#### À Faire
Écrire une fonction `validite(code)` qui prend en paramètre un code ISBN entré par lutilisateur, et qui renvoie `True` si ce code est valide et `False` sinon. On prendra soin de spécifier la fonction.
```python
```

64
introduction/TP/vitale.md Normal file
View File

@@ -0,0 +1,64 @@
# TP - Carte Vitale
## 1 - Définition
Le code _INSEE_, en France, est un code identifiant chaque individu, utilisé par lInstitut national de la statistique et des études économiques ( INSEE), pour différentes analyses statistiques. Ce code sappelle également NIR ( numéro dinscription au répertoire ) et se retrouve sur les cartes de sécurité sociale (carte Vitale par exemple)
![Exemple de carte Vitale](https://upload.wikimedia.org/wikipedia/commons/a/ad/CarteVitale2.jpg)
Source : CNAMTS - GIE SESAM-Vitale
Dès la naissance, en France, chaque personne est identifiée par un numéro composé de quinze chiffres. Cest le numéro INSEE ou Numéro de Sécurité Sociale.
![Exemple de N°INSEE](./assets/vitale.png)
Afin déviter des erreurs lors des enregistrements (par exemple, lors des remboursements de la Sécurité Sociale), le dernier nombre (rangs 14 et 15) est une clé de contrôle.
## 2 - Un peu d'histoire
Linventeur du NIR est René Carmille (mort en déportation en 1944 à Dachau) qui réalisa entre avril et août 1941, sous le régime de Vichy, le premier répertoire général, pour préparer secrètement la mobilisation dune armée française.
Ultérieurement, cette codification fut reprise par le général Marie, en Algérie, afin de recenser la population sur de nombreuses caractéristiques. Le but était de ficher toute la population française et de les discriminer selon des critères ethniques ou statutaires, dans le cadre de la politique du régime de Vichy. En effet le premier chiffre du code NIR qui aujourdhui sert juste à identifier le sexe de la personne était plus « complet » à lépoque :
- 1 ou 2 pour les citoyens français ;
- 3 ou 4 pour les indigènes dAlgérie (ceux quon appelait les « Musulmans ») et de toutes les colonies, non juifs ;
- 5 ou 6 pour les juifs indigènes ;
- 7 ou 8 pour les étrangers ;
- 9 ou 0 pour les statuts mal définis.
Cette catégorisation discriminante utilisée en Algérie fut abolie en 1944. Elle na jamais été utilisée sur le territoire de la France « métropolitaine », où, durant toute la guerre, il na été fait usage que du « 1 » et du « 2 ».
_Source : Wikipédia, lencyclopédie libre_
## 3 - Comment vérifier la validité d'une carte vitale ?
On considère le nombre formé des treize premiers chiffres. Ce nombre est alors divisé par 97 (division euclidienne). Puis le reste obtenu est soustrait à 97 ( 97 - reste ). Le résultat est la clé de contrôle.
_Remarque : Pour la Corse, les lettres A et B sont remplacées par des zéros, et on soustrait du nombre à 13 chiffres ainsi obtenu 1 000 000 pour A et 2 000 000 pour B._
Exemple : Vérifions la validité du n° dINSEE : 1 54 02 50 025 005 22
On a : $`1540250025005 = 97 \times 15878866237 + 16`$ et $`97 - 16 = 8`$
La clé est donc 81 et pas 22, ce numéro de carte vitale nest donc pas valide.
### 3.1 - À Faire
Vérifier que le numéro dINSEE 1 52 03 55 527 002 38 est valide
### 3.2 - À Faire
Écrire une fonction qui prend en paramètre un numéro dINSEE et qui renvoie `vrai` si son numéro est valide et `faux` sinon.
```python
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,57 @@
# Guido van Rossum
## Introduction
__Guido van Rossum__, né le 31 janvier 1956 à Haarlem aux Pays-Bas, est un développeur connu pour être le créateur et leader du projet du langage de programmation [Python](https://www.python.org/).
Au sein de la communauté pythonienne, il est, jusquen juillet 2018, un _Benevolent Dictator for Life_ « dictateur bienveillant à vie », ce qui signifie qu'il suit le développement de Python et arbitre lorsque la situation le requiert.
## Curriculum Vitae
![Guido van Rossum](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Guido-portrait-2014-drc.jpg/320px-Guido-portrait-2014-drc.jpg)
_Crédits : Photo de Daniel Stroud, retouchée par Deedub1983 et HarJIT (CC-BY-SA), Source : Wikipedia_
Parcours professionnel non exhaustif :
| Années | Société | Activités |
| :----: | :-------: | :----------------------------------------------------------- |
| 1991 | CWI | Chercheur, où il développe le langage ___Python___ |
| 2005 | Google | Engagé pour développer des outils internes |
| 2013 | Dropbox | Engagé pour guider les équipes de développement et promouvoir lépanouissement des femmes au sein des équipes d'ingénieurs |
| 2019 | - | Prend sa retraite |
| 2020 | Microsoft | Membre de la division développeur de Microsoft |
## Python
Le langage inventé par Guido Van Rossum a de nombreux avantages :
1. ___facile d'utilisation___ : la force de Python réside dans le fait que son code est court, facile à comprendre,
2. ___open source___ : Selon [Wikipédia](https://fr.wikipedia.org/wiki/Open_source), s'applique aux logiciels dont la licence respecte des critères précisément établis par l'*Open Source Initiative*, c'est-à-dire les possibilités de libre :
1. redistribution,
2. d'accès au code source
3. de création de travaux dérivés.
3. __Populaire__ : Ce langage fonctionne sur tous les principaux systèmes dexploitation et plateformes informatiques. Il est utilisé aussi bien par des débutants que des experts, notamment les [data scientists](https://www.letudiant.fr/metiers/secteur/informatique-telecom-web/data-scientist.html). Selon l'[étude de Redmonk](https://redmonk.com/sogrady/2020/07/27/language-rankings-6-20/) de Juin 2020, le langage Python est le 2ème plus populaire des langages de programmation.
![](https://www.zdnet.com/a/hub/i/r/2020/07/28/14a50514-99c8-4a16-bfc8-16e6716fc30b/resize/1200xauto/1776e515c7f99727c28874aad3e6ae5a/rankings-over-time-2020-06-2048x16341.png)
_Ce graphique RedMonk suit l'évolution des 20 premiers langages dans l'histoire des classements. Image : RedMonk., Source : [zdnet](https://www.zdnet.fr/actualites/popularite-des-langages-de-programmation-python-depasse-java-rust-rentre-dans-le-top-20-39907413.htm)_
## Citations
> les langages de programmation sont la manière dont les programmeurs expriment et communiquent leurs idées, 27 Avril 2016
> Now, it's my belief that Python is a lot easier than to teach to students programming and teach them C or C++ or Java at the same time because all the details of the languages are so much harder. Other scripting languages really don't work very well there either, date inconnue
> Python va certainement continuer à se développer avec notamment lajout de nouvelles bibliothèques. Concernant lutilisation de Python en classe, jespère que les élèves sapproprieront ce langage et pourront lutiliser pour développer des projets extra scolaires et plus tard au quotidien dans leur carrière !, date inconnue
## Liens
- Page officielle : [https://gvanrossum.github.io/](https://gvanrossum.github.io/)
- L'histoire de Python, par son créateur, Guido van Rossum : [Youtube, 25 Avril 2019](https://www.youtube.com/watch?v=J0Aq44Pze-w)
- [Page Wikipédia](https://fr.wikipedia.org/wiki/Guido_van_Rossum) de Guido Van Rossum
## Quelques caractéristiques
- [x] Porte des lunettes
- [ ] Habite Nice
- [x] Porte une barbe

Binary file not shown.

View File

@@ -0,0 +1,719 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Guide d'utilisation Markdown"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Introduction\n",
"\n",
"Markdown est un _langage de balisage_ simple créé en 2004 par John Gruber avec l'aide d'Aaron Swartz. \n",
"\n",
"En informatique, les langages de balisage représentent une classe de langages spécialisés dans l'enrichissement d'information textuelle. L'inclusion de balises permet de transférer à la fois le contenu et des indications sur la mise en forme (mise en italique, gras...)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Le HTML est un autre langage de balisage. Le Markdown est un langage plus simple à appréhender; son apprentissage facilitera celui de l'HTML.\n",
"\n",
"![Logo Markdown](https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Markdown-mark.svg/208px-Markdown-mark.svg.png)\n",
"\n",
"Il a été créé dans le but d'offrir une syntaxe facile à lire et à écrire. \n",
"\n",
"Un document balisé par Markdown peut être lu en l'état sans donner limpression d'avoir été balisé ou formaté par des instructions particulières."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Usages\n",
"\n",
"Le langage de balisage léger Markdown est utilisé dans de nombreuses applications, que ce soit dans des logiciels/éditeurs de code, des logiciels d'écriture, des plateformes de code, ou encore dans des chaînes d'édition avec l'addition d'autres logiciels. Les domaines concernés peuvent être le développement informatique, la rédaction de documentation technique ou encore la publication académique."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Certains sites comme __discord__ permettent la gestion et l'affichage de texte au format Markdown.\n",
"\n",
"La plupart des cours de NSI sont au format mardown, stocké sous la forme de fichier portant l'extension .md ou .ipynb.\n",
"\n",
"Pour ouvrir, modifier ou visualiser les fichiers, il faut utiliser :\n",
"\n",
"- markdown (`.md`), il faut utiliser le logiciel [Typora](https://typora.io/) ou le logiciel en ligne [stackedit](https://stackedit.io/app#),\n",
"- notebook (`.ipynb`), il faut utiliser le logiciel en ligne [Basthon](https://notebook.basthon.fr/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Formatage\n",
"\n",
"L'emphase est l'exagération dun mot ou d'une phrase en utilisant un style ou une fonte différente de celle du reste du texte — pour mettre laccent dessus.\n",
"\n",
"En markdown, l'emphase se manifeste par les caractères _ utilisés en paire."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Italique\n",
"\n",
"Pour mettre une partie de texte en italique, il faut l'encadrer par un _.\n",
"\n",
"<u>Exemple</u> : Cette _partie du texte_ est en italique.\n",
"\n",
"Est obtenu par la syntaxe :\n",
"```markdown\n",
"Cette _partie du texte_ est en italique\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Gras\n",
"\n",
"Pour mettre une partie de texte en gras, il faut l'encadrer par un double __.\n",
"\n",
"<u>Exemple</u> : Cette __partie du texte__ est en gras.\n",
"\n",
"Est obtenu par la syntaxe :\n",
"```markdown\n",
"Cette __partie du texte__ est en gras`\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Remarque\n",
"\n",
"Il est possible de cumuler le formatage de texte.\n",
"\n",
"<u>Exemple</u> : Cette ___partie du texte___ est en italique et en gras.\n",
"\n",
"Est obtenu par la syntaxe constituée d'une paire de triples _\n",
"```markdown\n",
"Cette ___partie du texte___ est en italique et en gras\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Paragraphe et saut de ligne\n",
"\n",
"\n",
"Pour faire un nouveau paragraphe, sauter deux lignes, c'est à dire laisser une ligne vide entre les deux paragraphes. Sauter une seule ligne dans le texte d'origine n'aura aucun effet à l'affichage (l'affichage sera en continu).\n",
"\n",
"<u>Exemple</u> :\n",
"\n",
"Premier Paragraphe\n",
"Deuxième Paragraphe\n",
"\n",
"Est obtenu par la syntaxe suivante :\n",
"```markdown\n",
"Premier Pragraphe\n",
"Deuxième Paragraphe\n",
"```\n",
"\n",
"<u>Exemple</u> :\n",
"\n",
"Premier Paragraphe\n",
"\n",
"Deuxième Paragraphe\n",
"\n",
"Est obtenu par la syntaxe suivante :\n",
"```markdown\n",
"Premier Pragraphe\n",
"\n",
"Deuxième Paragraphe\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Citation\n",
"\n",
"Il est possible de faire des citations, c'est-à-dire formater le texte dans un style particulier différent du reste du texte, en utilisant le symbole > en début de phrase. \n",
"Le texte est mis avec espace et une barre verticale afin de symboliser la citation.\n",
"\n",
"<u>Exemple</u> :\n",
"\n",
"> Moi, Monsieur, si javais un tel nez, il faudrait sur le champ que je lamputasse !, Edmond Rostand / Cyrano de Bergerac\n",
"\n",
"Est obtenu par la syntaxe suivantes :\n",
"```markdown\n",
"> Moi, Monsieur, si javais un tel nez, il faudrait sur le champ que je lamputasse !, Edmond Rostand / Cyrano de Bergerac\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Citation sur plusieurs lignes\n",
"\n",
"Il est possible de faire une citation sur plusieurs lignes. Dans ce cas, il faut utiliser le symbole > à chaque début de lignes constituant la citation.\n",
"\n",
"<u>Exemple</u> :\n",
"\n",
"> Ah ! non ! cest un peu court, jeune homme !\n",
">\n",
"> On pouvait dire… Oh ! Dieu ! … bien des choses en somme…\n",
">\n",
"> En variant le ton, par exemple, tenez :\n",
">\n",
"> Agressif : « Moi, monsieur, si javais un tel nez,\n",
">\n",
"> Il faudrait sur-le-champ que je me lamputasse ! »\n",
">\n",
"> Amical : « Mais il doit tremper dans votre tasse\n",
">\n",
"> Pour boire, faites-vous fabriquer un hanap ! »\n",
">\n",
"> Descriptif : « Cest un roc ! … cest un pic ! … cest un cap !\n",
">\n",
"> Que dis-je, cest un cap ? … Cest une péninsule ! »\n",
">\n",
"> Curieux : « De quoi sert cette oblongue capsule ?\n",
">\n",
"> Décritoire, monsieur, ou de boîte à ciseaux ? »\n",
">\n",
"> Gracieux : « Aimez-vous à ce point les oiseaux\n",
">\n",
"> Que paternellement vous vous préoccupâtes\n",
">\n",
"> De tendre ce perchoir à leurs petites pattes ? »\n",
">\n",
"> Truculent : « Ça, monsieur, lorsque vous pétunez,\n",
">\n",
"> La vapeur du tabac vous sort-elle du nez\n",
">\n",
"> Sans quun voisin ne crie au feu de cheminée ? »\n",
">\n",
"> Prévenant : « Gardez-vous, votre tête entraînée\n",
">\n",
"> Par ce poids, de tomber en avant sur le sol ! »\n",
">\n",
"> Tendre : « Faites-lui faire un petit parasol\n",
">\n",
"> De peur que sa couleur au soleil ne se fane ! »\n",
">\n",
"> Pédant : « Lanimal seul, monsieur, quAristophane\n",
">\n",
"> Appelle Hippocampéléphantocamélos\n",
">\n",
"> Dut avoir sous le front tant de chair sur tant dos ! »\n",
">\n",
"> Cavalier : « Quoi, lami, ce croc est à la mode ?\n",
">\n",
"> Pour pendre son chapeau, cest vraiment très commode ! »\n",
">\n",
"> Emphatique : « Aucun vent ne peut, nez magistral,\n",
">\n",
"> Tenrhumer tout entier, excepté le mistral ! »\n",
">\n",
"> Dramatique : « Cest la Mer Rouge quand il saigne ! »\n",
">\n",
"> Admiratif : « Pour un parfumeur, quelle enseigne ! »\n",
">\n",
"> Lyrique : « Est-ce une conque, êtes-vous un triton ? »\n",
">\n",
"> Naïf : « Ce monument, quand le visite-t-on ? »\n",
">\n",
"> Respectueux : « Souffrez, monsieur, quon vous salue,\n",
">\n",
"> Cest là ce qui sappelle avoir pignon sur rue ! »\n",
">\n",
"> Campagnard : « Hé, ardé ! Cest-y un nez ? Nanain !\n",
">\n",
"> Cest queuqunavet géant ou ben queuqumelon nain ! »\n",
">\n",
"> Militaire : « Pointez contre cavalerie ! »\n",
">\n",
"> Pratique : « Voulez-vous le mettre en loterie ?\n",
">\n",
"> Assurément, monsieur, ce sera le gros lot ! »\n",
">\n",
"> Enfin parodiant Pyrame en un sanglot :\n",
">\n",
"> « Le voilà donc ce nez qui des traits de son maître\n",
">\n",
"> A détruit lharmonie ! Il en rougit, le traître ! »\n",
">\n",
"> Voilà ce quà peu près, mon cher, vous mauriez dit\n",
">\n",
"> Si vous aviez un peu de lettres et desprit\n",
">\n",
"> Mais desprit, ô le plus lamentable des êtres,\n",
">\n",
"> Vous nen eûtes jamais un atome, et de lettres\n",
">\n",
"> Vous navez que les trois qui forment le mot : sot !\n",
">\n",
"> Eussiez-vous eu, dailleurs, linvention quil faut\n",
">\n",
"> Pour pouvoir là, devant ces nobles galeries,\n",
">\n",
"> me servir toutes ces folles plaisanteries,\n",
">\n",
"> Que vous nen eussiez pas articulé le quart\n",
">\n",
"> De la moitié du commencement dune, car\n",
">\n",
"> Je me les sers moi-même, avec assez de verve,\n",
">\n",
"> Mais je ne permets pas quun autre me les serve."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Listes\n",
"\n",
"Sauter une ligne avant le début de la liste."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Liste non ordonnée\n",
"\n",
"Pour créer une liste non ordonnée, il faut utiliser le symbole - pour chaque élément.\n",
"\n",
"<u>Exemple</u> :\n",
"Listes des fruits :\n",
"\n",
"- Pommes\n",
"- Poires\n",
"- Raisin\n",
"\n",
"Est obtenu par la syntaxe suivantes :\n",
"\n",
"```markdown\n",
"Listes des fruits :\n",
"\n",
"- Pommes\n",
"- Poires\n",
"- Raisin\n",
"```\n",
"\n",
"___N.B : Une ligne vide doit précéder la liste et un espace est nécessaire entre le symbole - et l'élément de la liste.___"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Remarque\n",
"\n",
"Il est possible d'imbriquer des listes. Pour cela, un espace est nécessaire entre l'élément parent et la liste imbriquée.\n",
"\n",
"<u>Exemple</u> :\n",
"Listes des fruits :\n",
"\n",
"- Pommes\n",
" - Golden\n",
" - Gala\n",
" - Pink Lady\n",
" - ...\n",
"- Poires\n",
"- Raisin\n",
" - Corinthe noir\n",
" - Muscat d'Alexandrie\n",
" \n",
"Est obtenu par la syntaxe suivantes :\n",
"\n",
"```markdown\n",
"Listes des fruits :\n",
"\n",
"- Pommes\n",
" - Golden\n",
" - Gala\n",
" - Pink Lady\n",
" - ...\n",
"- Poires\n",
"- Raisin\n",
" - Corinthe noir\n",
" - Muscat d'Alexandrie\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Liste ordonnée\n",
"\n",
"Pour créer une liste ordonnée, il faut énumérer chaque élément précédé de son rang, d'un point et d'un espace.\n",
"\n",
"<u>Exemple</u> :\n",
"Liste ordonnée :\n",
"\n",
"1. premier élément\n",
"2. deuxième élément\n",
"3. troisième élément\n",
"\n",
"Est obtenu par la syntaxe suivantes :\n",
"\n",
"```markdown\n",
"Liste ordonnée :\n",
"\n",
"1. premier élément\n",
"2. deuxième élément\n",
"3. troisième élément\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Remarque 1\n",
"\n",
"La valeur du rang ne doit pas nécessairement être indiqué. C'est le fait que chaque élément se suive qui constitue la liste ordonnée.\n",
"\n",
"<u>Exemple</u> :\n",
"Liste ordonnée :\n",
"\n",
"1. premier élément\n",
"1. deuxième élément\n",
"1. troisième élément\n",
"\n",
"Est obtenu par la syntaxe suivante :\n",
"\n",
"```markdown\n",
"Liste ordonnée :\n",
"\n",
"1. premier élément\n",
"1. deuxième élément\n",
"1. troisième élément\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"#### Remarque 2\n",
"\n",
"Comme pour les listes non ordonnées, il est possible d'imbriquer des listes ordonnées. Pour cela, un espace est nécessaire entre l'élément parent et la liste imbriquée.\n",
"\n",
"<u>Exemple</u> :\n",
"Liste ordonnée imbriquée:\n",
"\n",
"1. premier élément\n",
" 1. premier sous élément\n",
" 2. deuxième sous élément\n",
"2. deuxième élément\n",
"3. troisième élément\n",
" 1. premier sous élément\n",
"\n",
"Est obtenu par la syntaxe suivante :\n",
"\n",
"```markdown\n",
"Liste ordonnée imbriquée:\n",
"\n",
"1. premier élément\n",
" 1. premier sous élément\n",
" 2. deuxième sous élément\n",
"2. deuxième élément\n",
"3. troisième élément\n",
" 1. premier sous élément\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### Liste de cases à cocher\n",
"\n",
"Pour créer une liste de cases à cocher, il faut énumérer chaque élément précédé par `[ ]` pour une case non cochée et `[x]` pour une case cochée.\n",
"\n",
"<u>Exemple</u> :\n",
"Le langage Markdown a été créé par :\n",
"\n",
"- [x] John Gruber\n",
"- [ ] Guido van Rossum\n",
"- [x] Aaron Swartz\n",
"- [ ] Bill Gates\n",
"\n",
"Est obtenu par la syntaxe suivante :\n",
"```markdown\n",
"Le langage Markdown a été créé par :\n",
"\n",
"- [x] John Gruber\n",
"- [ ] Guido van Rossum\n",
"- [x] Aaron Swartz\n",
"- [ ] Bill Gates\n",
"```\n",
"\n",
"__N.B : Le texte entre crochets doit comporter un _seul et un seul caractère_. Soit un espace pour une case non cochée, soit un x pour une case cochée.__"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Titres\n",
"\n",
"Les titres sont créés avec un certain nombre de #(croisillons) avant le titre, qui correspondent au niveau de titre souhaité (de 1 à 6).\n",
"\n",
"<u>Exemple :</u>\n",
"\n",
"# un titre de premier niveau\n",
"#### un titre de quatrième niveau\n",
"\n",
"Est obtenu par la syntaxe suivante :\n",
"```\n",
"# un titre de premier niveau\n",
"#### un titre de quatrième niveau\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Tableaux\n",
"\n",
"Un tableau en Markdown est constitué de 3 éléments :\n",
"\n",
"1. une ligne d'en-tête\n",
"1. une ligne de séparation\n",
"1. un ensemble de lignes de corps du tableau\n",
"\n",
"<u>Exemple</u> :\n",
"\n",
"| Titre 1 | Titre 2 | Titre 3 |\n",
"| :-- | :--: | --: |\n",
"| Colonne | Colonne | Colonne |\n",
"| Alignée à | Alignée au | Alignée à |\n",
"| Gauche | Centre | Droite |\n",
"\n",
"\n",
"Est obtenu par la syntaxe suivante :\n",
"```\n",
"| Titre 1 | Titre 2 | Titre 3 |\n",
"| :-- | :--: | --: |\n",
"| Colonne | Colonne | Colonne |\n",
"| Alignée à | Alignée au | Alignée à |\n",
"| Gauche | Centre | Droite |\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### En-tête\n",
"\n",
"L'en-tête contient chaque titre de colonnes, séparés par un symbole |. Le titre sera automatiquement mis en gras."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Séparation\n",
"\n",
"La ligne de séparation permet de délimiter l'en-tête du corps du tableau et de définir l'alignement du texte du contenu de la colonne.\n",
"\n",
"- `:--`: indique que le contenu est aligné à gauche de la colonne,\n",
"- `:--:`: indique que le contenu est centré,\n",
"- `--:`: indique que le contenu est aligné à droite de la colonne."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Corps\n",
"\n",
"Chaque ligne du corps du tableau contient le contenu de chaque colonne séparé par un symbole |. La couleur du fond de chaque ligne du tableau est alternée automatiquement."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Liens\n",
"\n",
"Pour créer des liens de type url cliquable, il faut utiliser la syntaxe `[texte du lien](url_du_lien)`.\n",
"\n",
"<u>Exemple</u> : [Site du lycée Masséna](http://www.lycee-massena.fr/)\n",
"\n",
"Est obtenu par la syntaxe :\n",
"```\n",
"[Site du lycée Masséna](http://www.lycee-massena.fr/)\n",
"```\n",
"__N.B : il n'y a pas d'espace entre le crochet fermant et la parenthèse ouvrante. Il faut écrire ..lien](url.. et non ..lien] (url.. )__"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Images\n",
"\n",
"Pour afficher une image, il faut utiliser la syntaxe `![Texte alternatif](url_de_l'image)`\n",
"\n",
"<u>Exemple</u> : ![Logo Markdown](https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Markdown-mark.svg/208px-Markdown-mark.svg.png)\n",
"\n",
"Est obtenu par la syntaxe :\n",
"```\n",
"![Logo Markdown](https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Markdown-mark.svg/208px-Markdown-mark.svg.png)\n",
"```\n",
"__N.B : il n'y a pas d'espace entre le crochet fermant et la parenthèse ouvrante. Il faut écrire ..lien](url.. et non ..lien] (url.. )__"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@@ -0,0 +1,25 @@
# Activité - Markdown
## Objectifs
L'activité a pour but d'appréhender le langage de balisage __Markdown__.
Ce langage vous sera utile cette année pour __annoter__ les cours, __réaliser des travaux__ (TD, TP..) et préparer des __présentations__.
## Consignes
- Un guide de la syntaxe Markdown est fourni via le document : [MARKDOWN](./MARKDOWN.ipynb)
- Une fiche concernant Guido Van Rossum, créateur du langage Python est fournie sous la forme du fichier pdf : [GUIDO.pdf](./GUIDO.pdf)
- Vous devez créer un fichier Markdown (extension .md), via le logiciel stakedit.io reproduisant le contenu et la forme de la fiche de Guido Van Rossum
## Méthodologie de travail
Vous devez procéder par étape :
1. Lire le guide et tester la syntaxe markdown en reproduisant les différents exemples,
2. Lire la fiche pdf de Guido Van Rossum et identifier les éléments Titre, formatté, tableaux, listes...
3. Écrire la fiche au format Markdown via le logiciel en ligne [stackedit.io](https://stackedit.io/app)
4. Exporter la fiche sous la forme d'un fichier `.md`.

View File

@@ -0,0 +1,144 @@
---
title : Programmation - Généralités
author : M. BODDAERT, M. MATHIEU
license : CC-BY-NC-SA
---
# Programmation - Généralités
📺 Pourquoi programme-t-on ? ([Vidéo](https://www.youtube.com/watch?v=7b3QupZc08Y&ab_channel=Lumni))
## Objectifs
Les objectifs de la séquence Langages et Programmation est de se questionner et répondre aux interrogations suivantes :
- Qu'est-ce qu'un __langage de programmation__ ?
- __Pourquoi a-t-on besoin__ d'un langage de programmation ?
- Qu'est-ce que __programmer__ ?
- __Comment__ programme-t-on ?
## Définition
> __Langage__ (Selon le Larousse) : Capacité, observée chez tous les humains, d'exprimer leur pensée et de communiquer au moyen d'un système de signes vocaux et éventuellement graphiques.
- Le langage est un système permettant la communication entre 2 entités, 2 humains :
```mermaid
flowchart LR
A[Humain A] --> |Demande|B[Humain B]
C[Humain A] --> |Demande|D[Humain B]
D --> |Interprète|D
E[Humain A] --> |Demande|F[Humain B]
F --> |Interprète|F
F --> |Répond|E
```
Exemple :
```mermaid
flowchart LR
A[Passant A] --> |"Quelle heure est-il, s'il vous plait ?"|B[Passant B]
C[Passant A] --> |"Quelle heure est-il, s'il vous plait ?"|D[Passant B]
D --> |Regarde sa montre|D
E[Passant A] --> |"Quelle heure est-il, s'il vous plait ?"|F[Passant B]
F --> |Regarde sa montre|F
F --> |Répond : 8h35|E
```
- Le langage est propre à une communauté. Un __langage naturel__, ou langage ordinaire, est une langue « normale » parlée par un être humain (Exemple : le Français, l'anglais...)
- Le __langage machine__ : directement interprétables par le processeur d'un ordinateur, mais peu lisibles aux yeux d'un humain,
- Le __langage de programmation__ : Compréhensible par un humain et aisément traduisible en langage machine.
> Un __langage de programmation__ est un langage proche du langage naturel, utilisable par un humain, et exécutable, après traduction par une machine.
___Sans langage de programmation, un humain devrait connaitre et commander la machine en maitrisant son langage, donc écrire des 0 et des 1.___
```mermaid
flowchart LR
A[Langage Naturel] --> B[Langage de Programmation]
B --> C[Langage Machine]
```
### Constituants d'un langage
Tout langage est constitué de 2 ensembles :
```mermaid
flowchart TD
subgraph Langage
Grammaire --> Vocabulaire
end
```
> __Vocabulaire__ : Ensemble des mots ou vocables d'une langue
Exemples :
- heure, quelle, table...
- rehue, llequ, betal...
> __Grammaire__ (Selon le Larousse) : Ensemble des structures linguistiques propres à telle ou telle langue. Autrement dit, la grammaire indique l'ordre et les règles de structures du vocabulaire
Exemples :
- Quelle heure est-il ?
- Il ? heure est quelle
## ...Mais avant de programmer
> Quelles sont les similitudes et différences entre ces 3 activités
| Itinéraire Mappy | Recette de cuisine | Montage de meuble IKEA |
| :--: | :--: | :--: |
| ![Itinéraire Mappy](./assets/mappy.png) | ![Recette de cookie aux pépites de chocolat](./assets/cookie.jpeg) | ![Plan de montage](./assets/ikea.jpeg) |
> __Algorithme__ (Selon Le Robert) : Ensemble fini des règles opératoires propres à un calcul. Ce terme vient d'__Al-Khwarizmi__, mathématicien du 9ème siècle.
![Al-Khwarizmi, Source : Wikipedia](./assets/al-khwarizmi.jpeg)
Source : Wikipedia
> Autrement dit, un __algorithme__ est une suite finie d'instructions exprimées en __langage naturel__.
Un __programme__ est l'_implantation_ d'un algorithme dans un __langage de programmation__.
> __Programmer__ (Selon le Larousse) : Établir à l'avance une suite d'opérations ; planifier, déterminer à l'avance le moment et les modalités d'une action.
Exemple : _Le calcul de l'hypoténuse dans un triangle rectangle_
__Algorithme__ : Dans un triangle rectangle, le carré de la longueur de lhypoténuse est égal à la somme des carrés des longueurs des deux autres côtés.
__Implantation en Java__ :
```java
class Hypotenuse
{
public static void main(String[] args)
{
double adjacent=4, oppose=3, hypotenuse;
hypotenuse= Math.sqrt((adjacent*adjacent)+(oppose*oppose));
System.out.println("La longueur de l'hypotenuse est : " + hypotenuse);
}
}
```
__Implantation en Python__ :
```python
import math
adjacent = 4
opposite = 3
hypotenuse = math.sqrt(adjacent**2 + opposite**2)
print("La longueur de l'hypotenuse est :", hypotenuse)
```
## Langage de Programmation au lycée
Au collège, vous avez déjà programmé mais en utilisant un langage de programmation par blocs : __Scratch__. Ce type de langage est très utile pour apprendre les bases de lalgorithmique et de la programmation mais ne constitue pas un langage utilisé pour programmer réellement. Pour cela, on utilise des langages dits textuels qui nécessitent décrire tout le code avec son clavier.
Au lycée, vous allez apprendre lun de ces langages : le langage __Python__. Vous lutiliserez dans différentes disciplines : Mathématiques, SNT, Physique-Chimie, spécialité NSI notamment.

File diff suppressed because one or more lines are too long

37
programmation/README.md Normal file
View File

@@ -0,0 +1,37 @@
# Programmation Python
## Présentation
Ce chapitre a pour objectif de répondre aux questions suivantes :
- Qu'est-ce que __programmer__ ?
- Qu'est que __Python__ ?
- Comment programmer en Python ?
## Progression
```mermaid
flowchart LR;
A[1. Généralités]-->B[2. Prise en main de Python];
B-->C[3. Les variables];
C-->D[4. Les instructions conditionnelles];
D-->E[5. Les boucles];
E-->F[6. Les fonctions];
click A "./programmation/GENERALITES.md" "Lien vers 1. Généralités" _self
click B "./programmation/NOTEBOOK.ipynb" "Lien vers 2. Prise en main de Python" _self
click C "./programmation/chapitre_1/" "Lien vers 3. Les variables" _self
click D "./programmation/chapitre_2/" "Lien vers 4. Les instructions conditionnelles" _self
click E "./programmation/chapitre_3/" "Lien vers 5. Les boucles" _self
click F "./programmation/chapitre_4/" "Lien vers 6. Les fonctions" _self
```
## Attendus du Programme
| Contenus | Capacités attendues |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| Constructions élémentaires | Mettre en évidence un corpus de constructions élémentaires. Séquences, affectation, conditionnelles, boucles bornées, boucles non bornées, appels de fonction. |
| Diversité et unité des langages de programmation | Repérer, dans un nouveau langage de programmation, les traits communs et les traits particuliers à ce langage. |
| Spécification | Prototyper une fonction. Décrire les préconditions sur les arguments. Décrire des postconditions sur les résultats.|
| Mise au point de programmes | Utiliser des jeux de tests. |
| Utilisation de bibliothèques | Utiliser la documentation dune bibliothèque. |

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 656 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@@ -0,0 +1,19 @@
# Les variables
L'activité consiste en un TD comprenant un __cours dirigé__ et des __exercices__ relatifs à la notion de _variable_ en Python.
## Pré-requis
Avoir pris en main l'éditeur en ligne [Basthon](../NOTEBOOK.ipynb)
## Consignes
1. Télécharger le fichier [TD.ipynb](./TD.ipynb),
2. Se rendre sur [Basthon](https://notebook.basthon.fr/),
3. Ouvrir le fichier TD.ipynb téléchargé,
4. Suivre le déroulé du TD, les réponses sont à mettre directement dans votre fichier,
5. À la fin de la séance, n'oubliez pas de sauvegarder votre fichier sur votre clé USB ou espace personnel.
## Pour aller plus loin
Une fois le TD __fini__ et __validé__, vous pouvez effectuer l'[activité suivante](../chapitre_2/)

View File

@@ -0,0 +1,842 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD - Premier pas en Python\n",
"\n",
"## 1. La console\n",
"\n",
"La __console__ est un endroit où l'on peut écrire du code en Python.\n",
"\n",
"Le code sera exécuté immédiatement dès validation de la ligne, c'est-à-dire dès que vous appuyer sur le bouton Run.\n",
"\n",
"### 1.1. À Faire\n",
"\n",
"1. Éxécuter le code suivant (_sans les >>>_) :\n",
"\n",
"```python\n",
">>> 5 + 2\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. Quel est le résultat obtenu ?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Bilan 1.1\n",
"\n",
"- A travers ce premier exemple, on constate que Python sait faire des calculs !!\n",
"- Lorsque l'on appuie sur le bouton Run, python lit le code 5 + 2, calcule l'opération associée et restitue le résultat."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.2. À Faire\n",
"\n",
"1. Écrire et exécuter successivement les instructions suivantes (_sans les >>> et ???_) `\n",
"\n",
"```python\n",
">>> 5 - 2\n",
"???\n",
">>> 5 * 2\n",
"???\n",
">>> 5 / 2\n",
"???\n",
">>> 5 // 2\n",
"???\n",
">>> 5 % 2\n",
"???\n",
">>> 5 ** 2\n",
"???\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. Quels sont les résultats obtenus ? Compléter le tableau suivant en décrivant ce que fait l'opérateur de l'instruction."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"| Opérateur | Description |\n",
"| :--: | :-- |\n",
"| - | | \n",
"| * | |\n",
"| / | |\n",
"| // | |\n",
"| % | |\n",
"| * | |"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Bilan 1.2\n",
"\n",
"- Python permet l'utilisation des opérateurs arithmétiques usuelles $+, -, *, /$ sur les entiers,\n",
"- Python permet l'utilisation d'opérateurs arithmétiques avec une syntaxe spécifique comme $//, \\%, **$ "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.3. À Faire\n",
"\n",
"Exécuter le code suivant. Que constatez-vous ?\n",
"\n",
"```python\n",
">>> # 3 + 2\n",
"???\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.4. À Faire\n",
"\n",
"1. En prenant votre âge à votre prochaine date d'anniversaire (en nombre d'années), écrire une instruction qui calcule le nombre de jours équivalents (on considère qu'une année correspond à 365 jours)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. Sachant qu'à mon prochain anniversaire j'aurai 9490 jours, écrire une instruction qui calcule mon âge, en nombre d'années :"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3. Sachant que mon logement se situe au 256 de la rue (dont je tairais le nom pour ne pas être localisé ;-)) et que toutes les maisons font 12 mètres et demi de longueur, à quelle distance se situe ma maison par rapport au début de la rue ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Bilan 1.4\n",
"\n",
"- Outre des entiers, Python permet d'utiliser des nombres décimaux en utilisant le symbole \".\" pour séparer la partie entière et la partie décimale."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Les variables\n",
"\n",
"En informatique, il est indispensable de conserver des informations de natures diverses. Par exemple, votre smartphone enregistre dans sa mémoire votre numéro de téléphone, les numéros de téléphones de vos contacts, vos messages (SMS), vos photos, vos applications, etc. Chacune de ces informations est stockée à un endroit précis dans la mémoire dans ce quon appelle une variable.\n",
"\n",
"### 2.1. Définition\n",
"\n",
"> Une __variable__ est un __espace de stockage__ de la mémoire (une case mémoire). Chaque variable est caractérisée par son __nom__, son __type__ et sa __valeur__.\n",
"\n",
"## 3. Valeur des variables\n",
"\n",
"### 3.1. Affecter une valeur à une variable\n",
"\n",
"#### 3.1.1. À Faire\n",
"\n",
"Copier et exécuter les instructions suivantes\n",
"\n",
"```python\n",
">>> a = 5\n",
">>> b = 2\n",
">>> a + b\n",
"???\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Bilan 3.1.1\n",
"\n",
"1. La syntaxe pour déclarer et affecter une valeur a une variable est `nom_de_la_variable = valeur`\n",
"2. Pour les instructions 1 et 2, Le signe `=` indique que la valeur 5 est affectée à la variable `a` et 2 à la variable `b`.\n",
"3. Lorsque Python interprète l'instruction 3, il lit les valeurs associées aux variables et effectue l'opération."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Nom des variables\n",
"\n",
"Chaque variable possède un nom qui permet didentifier lemplacement mémoire correspondant.\n",
"\n",
"Dans le langage Python, il y a des règles à respecter pour nommmer les variables. Voici celles qui vous concernent :\n",
"\n",
"- __Règle 1__ : un nom ne peut contenir que des lettres __en minuscule__ (a-z), des chiffres (0 - 9) et le caractère _ (underscore).\n",
"- __Règle 2__ : un nom ne peut pas commencer par un chiffre.\n",
"- __Règle 3__ : les noms sont sensibles à la casse, cela signifie quil y a une distinction entre les minuscules et les majuscules : la variable nommée `nsi` est différente de la variable `Nsi`.\n",
"- __Règle 4__ : il est préférable de toujours choisir un nom de variable représentatif : par exemple, si vous voulez stocker le nom dune personne dans une variable, il est préférable de lappeler nom plutôt que x.\n",
"- __Règle 5__ : il est préférable de ne pas utiliser de caractères accentués dans le nom dune variable (nous nentrerons pas dans le pourquoi du comment)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.1. À Faire\n",
"\n",
"1. Quels sont les noms de variables incorrects parmi ceux proposés ? Vous indiquerez pourquoi.\n",
"\n",
"| Noms de variable | Correct ou Incorrect | Pourquoi (si Incorrect) |\n",
"| :--:| :--: | :-- | \n",
"| `prix achat` | | |\n",
"| `prix_achat` | | |\n",
"| `note` | | | \n",
"| `2ndeG` | | |\n",
"| `SecondeG` | | | \n",
"| `Seconde:G`| | |\n",
"| `dix-huit` | | |"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. Proposez un nom de variable permettant de stocker :\n",
"\n",
"| Variable | Nom de variable |\n",
"| :-- | :--: |\n",
"| le nombre de personnes aux yeux bleus de Premiere G | |\n",
"| le tarif dun repas au self | |\n",
"| laire dun triangle (il ny a quune seule figure) | |\n",
"| la note à un devoir danglais | |"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. Type des variables\n",
"\n",
"Dans les travaux à faire précédent, nous avons manipulé essentiellement des entiers.\n",
"\n",
"Python gère différents types de variables. \n",
"\n",
"L'objet de cette section est d'expliciter la notion de type et les opérations associées :\n",
"\n",
"- le type __entier__ : il désigne les entiers relatifs (positifs ou négatifs). En Python on parle du type `int` (pour integer qui signifie « entier » en anglais) ;\n",
"- le type __flottant__ : il désigne les nombres décimaux (à virgule). En Python on parle du type `float` (pour floating qui signifie « flottant » en anglais)\n",
"- le type __chaîne de caractères__ : il désigne toute suite ordonnée de caractères. En Python on parle du type `str` (pour string qui signifie « chaîne » en anglais).\n",
"\n",
"### 5.1. À Faire\n",
"\n",
"Indiquez le type des variables permettant de stocker (sur votre smartphone) les informations suivantes :\n",
"\n",
"| Variable | Type identifié |\n",
"| :--: | :-- |\n",
"| le nom dun contact | |\n",
"| le numéro de téléphone dun contact | |\n",
"| un SMS | |\n",
"| lheure du réveil | |\n",
"| le code de votre partage de connexion Wi-Fi | |\n",
"| le pourcentage affiché de batterie restante | |\n",
"| les notes aux deux derniers devoirs de Mathématiques de l'année dernière | |"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5.2. Type entier (int)\n",
"\n",
"Pour affecter (on dit aussi assigner) la valeur 17 à la variable nommée `age`\n",
"\n",
"```python\n",
">>> age = 17\n",
"```\n",
"\n",
"La fonction `print` affiche la valeur de la variable :\n",
"\n",
"```python\n",
">>> print(age)\n",
"17\n",
"```\n",
"\n",
"La fonction `type` renvoie le type de la variable :\n",
"\n",
"```python\n",
">>> type (age)\n",
"<type 'int'>\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5.3. Type flottant (float)\n",
"\n",
"Pour affecter (on dit aussi assigner) la valeur 1,70 à la variable nommée `taille`\n",
"\n",
"```python\n",
">>> taille = 1.7\n",
"```\n",
"\n",
"La fonction `print` affiche la valeur de la variable :\n",
"\n",
"```python\n",
">>> print(taille)\n",
"1.7\n",
"```\n",
"\n",
"La fonction `type` renvoie le type de la variable :\n",
"\n",
"```python\n",
">>> type (taille)\n",
"<type 'float'>\n",
"```\n",
"La notation scientifique est acceptée :\n",
"```python\n",
">>> taille = 1.7e2 #taille en cm où 1m = 100cm = 10**2cm\n",
">>> print (taille)\n",
"170.0\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5.4. Type chaine de caractères (str)\n",
"\n",
"Pour affecter (on dit aussi assigner) la valeur `lundi` à la variable nommée `jour`\n",
"\n",
"```python\n",
">>> jour = 'lundi' # autre possibilité jour = \"lundi\"\n",
"```\n",
"\n",
"La valeur doit être entre guillemet simple (autrement dit côte) ou guillemet double.\n",
"\n",
"La fonction `print` affiche la valeur de la variable :\n",
"\n",
"```python\n",
">>> print(jour)\n",
"lundi\n",
"```\n",
"\n",
"```python\n",
">>> mois = \"septembre\"\n",
">>> print (jour, mois) # print permet d'afficher plusieurs valeurs à la suite, ne pas oublier la virgule\n",
"lundi septembre\n",
"```\n",
"\n",
"La fonction `type` renvoie le type de la variable :\n",
"\n",
"```python\n",
">>> type (jour)\n",
"<type 'str'>\n",
"```\n",
"\n",
"La fonction `len` renvoie la longueur (length) de la chaîne de caractères :\n",
"\n",
"```python\n",
">>> print(len(jour))\n",
"4\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 5.4.1 À Faire\n",
"\n",
"Copier et exécuter les instructions suivantes\n",
"\n",
"```python\n",
">>> a = \"Je suis\"\n",
">>> b = \" Yoda \"\n",
">>> a + b \n",
"???\n",
">>> b + a\n",
"???\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Bilan 5.4.1\n",
"\n",
"Comme vous le voyez, on peut ajouter deux chaînes : c'est une ___concaténation___, la mise bout à bout de plusieurs chaînes de caractères."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 5.4.2 À Faire\n",
"\n",
"Copier et exécuter les instructions suivantes\n",
"\n",
"```python\n",
">>> mot = \"lycée\"\n",
">>> print(mot[0])\n",
"???\n",
">>> print(mot[1])\n",
"???\n",
">>> print(mot[1:4])\n",
"???\n",
">>> print(mot[2:])\n",
"???\n",
">>> print(mot[:2])\n",
"???\n",
">>> print(mot[-1])\n",
"???\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Bilan 5.4.2\n",
"\n",
"Selon les résultats obtenus, que permet d'obtenir l'utilisation des crochets sur une variable de type chaine de caractères :\n",
"\n",
"- variable[indice] : ???\n",
"- variable[indice1:indice2] : ???\n",
"- variable[indice:] : ???\n",
"- variable[:indice] : ???\n",
"- variable[-1] : ???\n",
"\n",
"Par convention, on appelle _indice_ les valeurs entre crochets."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5.5 Conversion de type\n",
"\n",
"Cependant, on ne peut pas ajouter n'importe quoi.\n",
"\n",
"Copier et exécuter les instructions suivantes :\n",
"\n",
"```python\n",
">>> a = 'Je mesure '\n",
">>> b = 1.12\n",
">>> c = 'm'\n",
">>> a + b + c\n",
"???\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cela ne marche pas car les variables ne sont pas du même *type*. Il faut les convertir en utilisant :\n",
"\n",
"- soit la fonction `str(nombre)` qui convertit le nombre en chaîne.\n",
"- soit la fonction `int(chaîne)` qui convertit, si possible, la chaîne en entier.\n",
"- soit la fonction `float(chaîne)` qui convertit, si possible ,la chaîne en flottant.\n",
"\n",
"```python\n",
">>> str(b)\n",
"???\n",
">>> a + str(b) + c\n",
"???\n",
">>> str(b) + c + a\n",
"???\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 6. Les fonctions mathématiques\n",
"\n",
"Pour utiliser les fonctions mathématiques, il faut commencer par importer le module math :\n",
"\n",
"```python\n",
">>> import math\n",
"```\n",
"\n",
"La fonction `dir` renvoie la liste des fonctions et données d'un module :\n",
"\n",
"```python\n",
">>> dir(math)\n",
"['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan',\n",
"'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf',\n",
"'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',\n",
"'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p',\n",
"'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']\n",
"```\n",
"\n",
"Pour appeler une fonction d'un module, la syntaxe est la suivante : `module.fonction(arguments)`\n",
"\n",
"Exemple :\n",
"\n",
"```python\n",
">>> math.sqrt(9)\n",
"3.0\n",
"```\n",
"\n",
"La fonction `help` affiche l'aide, c'est-à-dire ce que fait la fonction\n",
"\n",
"```python\n",
">>> help(sqrt)\n",
"Help on built-in function sqrt in module math:\n",
"\n",
"sqrt(x, /)\n",
" Return the square root of x.\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 7. Saisie utilisateur : fonction `input`\n",
"\n",
"Copier et exécuter l'instruction suivante :\n",
"\n",
"```python\n",
">>> input(\"As-tu un message ? \")\n",
"???\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Bilan : La fonction `input` permet d'obtenir une valeur saisie par l'utilisateur.\n",
"\n",
"___N.B : La valeur saisie est toujours du <type 'str'>___"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 6. Exercices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 1\n",
"\n",
"Lindice de masse corporelle (IMC) est le seul indice validé par lOrganisation mondiale de la santé pour évaluer les éventuels risques pour la santé.\n",
"\n",
"Il s'exprime par la formule `IMC = poids (kg) / taille (m²)`\n",
"\n",
"Je mesure 170cm pour un poids de 3/4 de quintal. \n",
"\n",
"1. Exprimer les différentes données sous forme de variables et l'expression permettant de calculer l'IMC.\n",
"2. Donner les instructions permettant de donner les types des différentes variables et du résultat obtenu."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 2\n",
"\n",
"Afficher la taille en octets et en bits d'un fichier de 536 kio.\n",
"\n",
"On donne : \n",
"\n",
"- 1 kio (1 kibi octet) = 1024 octets !!!\n",
"- 1 octet = 8 bits"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 3\n",
"\n",
"On considère le programme Python suivant.\n",
"\n",
"```python\n",
"a = 8\n",
"b = 3\n",
"a = a - 4\n",
"b = 2 * b\n",
"a = a + b\n",
"print(a)\n",
"```\n",
"\n",
"1. Combien de variables sont utilisées ? Combien de valeurs différentes ont-elles prises au cours de lexécution du programme ?\n",
"2. Quelle est la valeur finale de la variable `a` ?\n",
"3. Il est possible dafficher plusieurs valeurs avec la fonction `print`. Par exemple, si on veut afficher les valeurs des variables `a` et `b` on écrit simplement `print(a, b)`. Modifiez la dernière ligne du programme et exécutez-le."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 4\n",
"\n",
"On considère le programme de calcul suivant.\n",
"\n",
"- a prend la valeur 5\n",
"- Multiplier a par 3\n",
"- Soustraire 4 au résultat\n",
"- Elever le résultat au carré\n",
"- Afficher le résultat\n",
"\n",
"Écrire un programme Python permettant de coder ce programme de calcul. Vérifiez ensuite en l'exécutant."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 5\n",
"\n",
"Sur un site de vente en ligne, on peut acheter différents articles. Un paquet de farine d'un kg coûte 1,15 € et une boîte de six oeufs coûte 1,50 €.\n",
"\n",
"Écrire un programme Python qui utilise deux variables pour stocker le nombre de paquets de farine et de boîtes d'oeufs souhaités puis, qui calcule et affiche le prix total à payer pour la commande."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 6\n",
"\n",
"À partir de deux variables `prenom` et `nom`, afficher les initiales (par exemple LM pour Léa Martin)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 7\n",
"\n",
"L'identifiant d'accès au réseau du lycée est construit de la manière suivante : initiale du prénom puis les 8 premiers caractères du nom.\n",
"\n",
"Exemple : Alexandre Lecouturier → alecoutur\n",
"\n",
"A partir des deux variables `prenom` et `nom`, construire l'identifiant."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 8\n",
"\n",
"Écrire un programme qui donne la pointure du pied demandé à l'utilisateur et affiche la taille du pied sachant qu'en France, la pointure correspond à 3/2 de la longueur du pied exprimée en centimètres et à laquelle on a au préalable ajouté un centimètre. (Vous pouvez vérifier votre résultat via ce [site](https://2-grande-taille.com/conversion-pointures)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 9\n",
"\n",
"![Triangle rectangle, Source : Wikipedia](https://upload.wikimedia.org/wikipedia/commons/8/85/Triangle_aire.png)\n",
"\n",
"Écrire un programme qui demande 2 entiers sous la forme \"a, h\" où a et h sont des nombres à 1 seule chiffre représentant respectivement la base et la hauteur d'une triangle rectangle. Afficher l'aire du triangle."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 10\n",
"\n",
"![Triangle quelconque, Source : Wikipedia](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Triangle_with_notations.svg/320px-Triangle_with_notations.svg.png)\n",
"\n",
"Écrire un programme qui demande 3 entiers sous la forme \"a, b, c\" où a, b et c sont des nombres à 1 seule chiffre et calculer l'aire du triangle quelconque formés par ces 3 longueurs.\n",
"\n",
"__N.B : Le calcul de l'aire d'un triangle quelconque s'effectue par l'application de la formule du Héron.__"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@@ -0,0 +1,19 @@
# Les instructions conditionnelles
L'activité consiste en un TD comprenant un __cours dirigé__ et des __exercices__ relatifs à la notion d'_instructions conditionnelles_ en Python.
## Pré-requis
Avoir effectué l'activité sur les [variables](../chapitre_1/)
## Consignes
1. Télécharger le fichier [TD.ipynb](./TD.ipynb),
2. Se rendre sur [Basthon](https://notebook.basthon.fr/),
3. Ouvrir le fichier TD.ipynb téléchargé,
4. Suivre le déroulé du TD, les réponses sont à mettre directement dans votre fichier,
5. À la fin de la séance, n'oubliez pas de sauvegarder votre fichier sur votre clé USB ou espace personnel.
## Pour aller plus loin
Une fois le TD __fini__ et __validé__, vous pouvez effectuer l'[activité suivante](../chapitre_3/)

View File

@@ -0,0 +1,519 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD - Les instructions conditionnelles\n",
"\n",
"> « _Si j'aurais su, j'aurais pas venu_ », réplique du Petit Gibus dans le film \"La Guerre des boutons\" d'Yves Robert."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Définition\n",
"\n",
"> Une __instruction conditionnelle__ permet de faire des choix en fonction de la valeur dune __condition__. On parle souvent dune instruction _si-alors_, ou _if-else_ en anglais.\n",
"\n",
"En reprenant (et corrigeant) la citation du Petit Gibus, l'instruction conditionnelle devient « _Si j'avais su alors je ne serais pas venu_ ».\n",
"\n",
"> Une __condition__ est une instruction qui est soit vraie, soit fausse. On parle alors dune _instruction booléenne_ ou _variable booléenne_.\n",
"\n",
"Par exemple, si une variable `note_francais` vaut 5 et quune variable `note_anglais` vaut 10 alors la condition `note_francais < note_anglais` est une condition qui est vraie, tandis que les conditions `note_francais > note_anglais` et `note_francais == note_anglais` sont fausses."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Comparaisons de variables\n",
"\n",
"Les opérateurs de comparaisons sont :\n",
"\n",
"- `<` : inférieur\n",
"- `<=` : inférieur ou égal\n",
"- `>`: supérieur\n",
"- `>=`: supérieur ou égal\n",
"- `==` : est égal à\n",
"- `!=`: est différents de\n",
"\n",
"Le résultat d'une comparaison est toujours un booléen\n",
"\n",
"- `True` si la comparaison est vraie\n",
"- `False` si la comparaison est Fausse\n",
"\n",
"Remarque : on ne peut comparer que des objets comparables\n",
"\n",
"⚠ ___ATTENTION___ : le test d'égalité entre deux variables se fait avec un double égal `==` (car le simple `=` permet d'affecter une valeur à une variable, Cf. Activité 1."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.1 À faire\n",
"\n",
"1. Déterminer (sans les exécuter) chaque instruction ci-dessous :\n",
"\n",
"```python\n",
">>> a = 5\n",
">>> b = 18 \n",
">>> c = 12.3\n",
">>> mot1 = \"Hello\"\n",
">>> mot2 = \"World\"\n",
"# \n",
">>> print(a > b)\n",
"#\n",
">>> print(b // a == 3)\n",
"#\n",
">>> print(b % a == 3)\n",
"#\n",
">>> print(a - b > 2)\n",
"#\n",
">>> print(type(c) == float)\n",
"#\n",
">>> print(mot1 != mot2)\n",
"#\n",
">>> print(mot1 < mot2)\n",
"#\n",
">>> print(mot1 > 2)\n",
"```\n",
"\n",
"2. Vérifier les résultats attendus avec les résultats constatés"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dans une suite d'instructions on est souvent amené à faire des choix.\n",
"\n",
"## 3. Cas : Si...Alors\n",
"\n",
"**Si** une ou plusieurs conditions sont réalisées **Alors** on exécute une ou plusieurs instructions\n",
"\n",
"La structure en Python : On __indente__ (une tabulation) les instructions qui doivent s'exécuter si la condition est vérifiée\n",
"\n",
"```\n",
"if condition :\n",
" instruction1\n",
" instruction2\n",
"```\n",
"\n",
"Exemple qui affiche si les variables `a` et `b` sont des entiers pairs\n",
"\n",
"```python\n",
"a = 12\n",
"if a % 2 == 0:\n",
" print(a, \" est un entier pair\")\n",
" \n",
"b = 13\n",
"if b % 2 == 0:\n",
" print(b,\" est un entier pair\")\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Cas : Si ...Alors...Sinon\n",
"\n",
"Dans cette structure, si la ou les conditions sont vraies, les instructions 1 et 2 sont exécutées. Sinon c'est l'instruction3 qui est exécutée.\n",
"\n",
"```\n",
" if condition:\n",
" instruction1\n",
" instruction2\n",
" else:\n",
" instruction3\n",
"```\n",
"\n",
"Exemple :\n",
"\n",
"```python\n",
"a = 12\n",
"\n",
"if a % 2 == 0:\n",
" print(a, \" est un entier pair\")\n",
"else:\n",
" print(a,\" est un entier impair\")\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 5. Cas : Si...Alors...Sinon Si\n",
"\n",
"Dans cette structure on teste plusieurs conditions\n",
"\n",
"```\n",
" if condition1:\n",
" instruction1\n",
" elif condition2:\n",
" instruction2\n",
" instruction3\n",
" elif condition3:\n",
" instruction4\n",
" else:\n",
" instruction5\n",
"```\n",
"\n",
"Exemple :\n",
"\n",
"Imaginons les conditions de passage d'un piéton en fonction du feu de signalisation et du nombre de voitures passantes :\n",
"\n",
"```python\n",
"if feu == 'VERT':\n",
"\tprint('Piéton, vous pouvez passer')\n",
"elif voitures = 0 : # le feu est rouge\n",
" print('Piéton, vous pouvez passer mais attention')\n",
"else: # le feu est rouge et il y a des voitures\n",
"\tprint('Piéton, vous ne pouvez passer')\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### À Faire\n",
"\n",
"Soit l'algorithme qui détermine la réponse de Yoda en fonction de la taille qui lui est communiquée :\n",
"\n",
"```txt\n",
" Demander la taille\n",
" Si la taille est supérieure à 1m80 alors\n",
"\tla réponse est 'Maître, vous vous prenez pour Chewbacca'\n",
" Sinon si la taille est supérieure à 1m20 alors\n",
" la réponse est 'Maitre, vous vous prenez pour Luc Skywalker'\n",
" Sinon si la taille est supérieure à 0.80m alors\n",
" la réponse est \"Maitre, ce n'est pas la taille qui compte\"\n",
" Sinon la réponse est 'Maitre, vous vous sous-estimez'\n",
"```\n",
"\n",
"Compléter le code suivant pour qu'il implante l'algorithme ci-dessus :\n",
"\n",
"```python\n",
"taille = input('Combien mesures-tu ?')\n",
"...\n",
"print(reponse)\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 1\n",
"\n",
"Lindice de masse corporelle (IMC) est le seul indice validé par lOrganisation mondiale de la santé pour évaluer la corpulence dun individu et donc les éventuels risques pour la santé.\n",
"\n",
"La formule de calcul a été vu lors de l'activité 1 sur les variables.\n",
"\n",
"L'OMS fournit l'interprétation suivante de l'état de santé en fonction de l'IMC :\n",
"\n",
"| Indice de masse corporelle (IMC) | Interprétation (d'après l'OMS) | \n",
"| :--: | :--: |\n",
"| moins de 18,5\t| Insuffisance pondérale (maigreur) |\n",
"| 18,5 à 25 |\tCorpulence normale |\n",
"| 25 à 30 | Surpoids |\n",
"| 30 à 35 | Obésité modérée |\n",
"| 35 à 40 | Obésité sévère |\n",
"| plus de 40\t| Obésité morbide ou massive |\n",
"\n",
"Voici une liste de caractéristiques de célébrités anonymisées (i.e le nom a été changé par décence). \n",
"\n",
"| Célébrité | Poids (en cm) | Taille (en kg) | Interprétation |\n",
"| :--: | :--: | :--: | :--: |\n",
"| B | 169 | 56 | |\n",
"| E | 157 | 48 | |\n",
"| A | 175 | 90 | |\n",
"| M | 205 | 200 | |\n",
"| V | 163 | 42 | |\n",
"| P | 170 | 75 | |\n",
"| S | 191 | 113 | |\n",
"\n",
"1. Écrire un programme qui permet d'afficher l'état de santé en fonction de l'IMC, selon l'OMS, en utilisant des instructions conditionnelles.\n",
"\n",
"2. Compléter le tableau en fonction de vos résultats."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 2\n",
"\n",
"1. Écrire un programme qui demande 3 entiers de manières consécutives et affiche le minimum des 3 entiers\n",
"2. Écrire un programme qui demande 3 entiers de manières consécutives et affiche le maximum des 3 entiers"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 3\n",
"\n",
"Écrire un programme pour vérifier si un nombre saisi par un utilisateur est divisible par 3 et 13 ou non,"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 4\n",
"\n",
"Écrire un programme pour vérifier si un caractère saisi par l'utilisateur est une voyelle ou une consonne."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 5\n",
"\n",
"Écrire un programme pour entrer le numéro du jour de la semaine (1-7) et affiche le nom du jour de la semaine correspondant"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 6\n",
"\n",
"Modifier le code suivant pour qu'il y ait 4 couleurs différentes en fonction de la position(abscisse) de la souris\n",
"\n",
"**mouseX** renvoie l'abscisse de la souris (0 pour le coin supérieur gauche de la fenêtre)\n",
"\n",
"( 0 à 50 , 50 à 100, 100 à 150 et 150 à 200)\n",
"\n",
"```python\n",
"from p5 import *\n",
"\n",
"def setup():\n",
" createCanvas(200,200) # crée une fenêtre de 200 x 200 pixels\n",
"\n",
"def draw():# cette fonction s'exécute en boucle 60 fois par seconde...\n",
" # les conditions pour la couleur du fond d'écran\n",
" if mouseX > 0 and mouseX < 100: # teste la position (abscisse) de la souris sur la moité gauche (0 à 100)\n",
" background(255,120,0) # \n",
" elif mouseX > 100 and mouseX < 200:# teste la position (abscisse) de la souris sur la moité droite (100 à 200)\n",
" background(0,255,120) #\n",
" else:\n",
" background(0,0,255) # fond bleu\n",
"run()\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 7\n",
"\n",
"Reprendre le code précédent(copier-coller) et en utilisant les instructions **mouseX** et **mouseY** (qui renvoie abscisse et ordonnée de la souris), faites en sorte qu'il y ait 4 couleurs différentes qui s'affichent suivant la position de la souris dans les quadrants:\n",
"\n",
"- 0 < mouseX <100 et 0 < mouseY < 100, la couleur affichée doit être le bleu\n",
"- 100 < mouseX < 200 et 0 < mouseY < 100, la couleur affichée doit être le vert\n",
"- 0 < mouseX < 100 et 100 < mouseY < 200, la couleur affichée doit être le rouge\n",
"- 100 < mouseX < 200 et 100 < mouseY < 200, la couleur affichée doit être le jaune"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 8\n",
"\n",
"Dans le code suivant on affiche dans la fenêtre 4 cercles et la couleur de fond change si la souris survole l'un des cercles.\n",
"\n",
"- l'instruction **circle(50,50,40)** dessine un cercle de centre (50,50 ) et de diamètre 40.\n",
"- l'instruction **dist(x1,y1,x2,y2)** calcule la distance entre les points de coordonnées (x1,y1) et (x2,y2).\n",
"- **dist(mouseX,mouseY,50,50) < 20** teste si la souris est dans l'un des cercles.\n",
"\n",
"Compléter le code de façon que le fond change de couleur au survol des 4 cercles.\n",
"\n",
"```python\n",
"from p5 import *\n",
"\n",
"def setup():\n",
" createCanvas(200,200) # crée une fenêtre de 200 x 200 pixels\n",
"\n",
"def draw():# cette fonction s'exécute en boucle 60 fois par seconde...\n",
" if dist(mouseX,mouseY,50,50) < 20:\n",
" background(255,255,0)\n",
" # à modifier ici\n",
" else:\n",
" background(51,51,51)\n",
" # ne pas modifier...\n",
" fill(0,0,0)\n",
" circle(50,50,40)\n",
" circle(150,150,40)\n",
" circle(150,50,40)\n",
" circle(50,150,40)\n",
" \n",
"run()\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 9\n",
"\n",
"Le code ci-dessous montre \"une balle\" se déplaçant sur un axe horizontal dans une fenêtre en rebondissant sur les bords.\n",
"\n",
"Compléter le code de telle sorte que la balle se déplace aussi dans la verticale en rebondissant sur les bords inférieur et supérieur de la fenêtre.\n",
"\n",
"```python\n",
"from p5 import *\n",
"\n",
"def setup():\n",
" global bx,by,vx,vy,r\n",
" r = 20\n",
" bx = 50\n",
" by = 50\n",
" vx = 4\n",
" vy = 5\n",
" createCanvas(400,200) # crée une fenêtre de 200 x 200 pixels\n",
"\n",
"def draw():# cette fonction s'exécute en boucle 60 fois par seconde...\n",
" global bx,by,vx,vy,r\n",
" background(0,0,0)# fond noir\n",
" # mouvement du cercle sur l'axe horizontal\n",
" bx = bx + vx\n",
" # rebond sur les bords gauche et droit\n",
" if bx < r or bx > 400 - r:\n",
" vx = -vx\n",
" # dessin du cercle\n",
" fill(255,0,0)\n",
" circle(bx,by,2*r) \n",
" \n",
"run()\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice 10\n",
"\n",
"Reprendre le code précédent et faire en sorte que la \"balle\" change de couleur à chaque rebond\n",
"\n",
"Pour utiliser une couleur aléatoire, on pourra utiliser l'instruction: `fill(random(255),random(255),random(255))`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@@ -0,0 +1,19 @@
# Les boucles
L'activité consiste en un TD comprenant un __cours dirigé__ et des __exercices__ relatifs à la notion de _boucles_ en Python.
## Pré-requis
Avoir effectué l'activité sur les [instructions conditionnelles](../chapitre_2/)
## Consignes
1. Télécharger le fichier [TD.ipynb](./TD.ipynb),
2. Se rendre sur [Basthon](https://notebook.basthon.fr/),
3. Ouvrir le fichier TD.ipynb téléchargé,
4. Suivre le déroulé du TD, les réponses sont à mettre directement dans votre fichier,
5. À la fin de la séance, n'oubliez pas de sauvegarder votre fichier sur votre clé USB ou espace personnel.
## Pour aller plus loin
Une fois le TD __fini__ et __validé__, vous pouvez effectuer l'[activité suivante](../chapitre_4/)

View File

@@ -0,0 +1,704 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "experimental-referral",
"metadata": {},
"source": [
"# TD - Les boucles"
]
},
{
"cell_type": "markdown",
"id": "alive-youth",
"metadata": {},
"source": [
"## 1. Définition\n",
"\n",
"Souvent, dans un programme, il est nécessaire de répéter un certain nombre de fois une (ou des) instruction(s). Pour cela, on utilise ce qu'on appelle des __boucles__."
]
},
{
"cell_type": "markdown",
"id": "romance-grounds",
"metadata": {},
"source": [
"### 1.1. Exemple introductif\n",
"\n",
"Le nombre d'utilisateurs d'un nouveau réseau social _KILESTBIEN_ est égal à 500 000 en janvier 2020. Ce nombre augmente de 5 % par mois, donc est multiplié par 1.05 chaque mois. Si on veut connaître le nombre d'utilisateurs 10 mois plus tard, il faut effectuer 10 fois de suite le même calcul (une multiplication par 1.05)."
]
},
{
"cell_type": "markdown",
"id": "controlled-construction",
"metadata": {},
"source": [
"### 1.2. À Faire \n",
"\n",
"Compléter le programme Python suivant afin d'obtenir le nombre d'utilisateurs du réseau _KILESTBIEN_ au bout de 10 mois.\n",
"\n",
"```python\n",
"nb_utilisateurs = 500000\n",
"nb_utilisateurs = nb_utilisateurs * 1.05\n",
"???\n",
"print(???)\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "awful-usage",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "related-harmony",
"metadata": {},
"source": [
"### 1.3. Problématique\n",
"\n",
"Des banquiers veulent investir 1 million d'euros dans _KILESTBIEN_, mais ont une exigence. Ils souhaitent que le nombre d'utilisateurs du réseau soit au moins de 3 millions dans 3 ans.\n",
"\n",
"Selon le taux de croissance du nombre d'utilisateurs de 5% par mois, vont-ils investir dans _KILESTBIEN_ ? Que faut-il modifier dans le programme précédent pour répondre à cette question ?"
]
},
{
"cell_type": "markdown",
"id": "representative-vertical",
"metadata": {},
"source": [
"## 2. Boucle bornée\n",
"\n",
"Au lieu d'écrire 10 ou 36 lignes identiques il est préférable d'écrire une seule fois cette ligne et d'indiquer de l'exécuter 10 ou 36 fois : pour cela, on utilise une __boucle bornée__. En Python, au lieu d'écrire le programme du 1.2., il est possible d'écrire la suite d'instructions suivantes : \n",
"\n",
"```python\n",
"nb_utilisateurs = 500000\n",
"for i in range(10):\n",
" nb_utilisateurs = nb_utilisateurs * 1.05\n",
"print(nb_utilisateurs)\n",
"```\n",
"\n",
"### À Faire\n",
"\n",
"Modifier le code précédent pour répondre à la problématique."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "sublime-frame",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "czech-andrews",
"metadata": {},
"source": [
"### 2.1. Construction d'une boucle bornée\n",
"\n",
"Pour écrire une boucle bornée en Python on utilise le mot-clé `for`. Les boucles bornées sont par conséquent très souvent appelées *boucles for* (ou *boucles pour* en français).\n",
"\n",
"```python\n",
"for element in sequence:\n",
" bloc_instructions\n",
"````\n",
"\n",
"__Remarques__ :\n",
"\n",
"- `element` est une variable créée par le `for`, ce n'est pas à vous de l'instancier. Elle prend successivement chacune des valeurs figurant dans la sequence parcourue,\n",
"- __ne pas oublier les deux points à la fin de la ligne__ avec `for` qui permettent d'ouvrir le bloc d'instructions à exécuter (à répéter),\n",
"- les instructions à effectuer sont indentées d'une tabulation par rapport au `for`,\n",
"- au contraire du pseudo-code, on n'écrit pas en Python de fin pour car celui-ci est matérialisé la fin des indentations."
]
},
{
"cell_type": "markdown",
"id": "olympic-winner",
"metadata": {},
"source": [
"### 2.2. Utilisation de la fonction `range()`\n",
"\n",
"- La fonction `range` permet de générer un intervalle sous la forme d'une liste d'entiers. Par exemple, l'appel `range(n)` génère $n$ entiers : $0, 1, 2, ..., n-1$. \n",
"- ⚠ Attention : comme le premier entier est 0, le n-ième est numéroté $n - 1$.\n",
"- La variable notée `i` prendra successivement (à chaque tour de boucle) les valeurs générées par la fonction `range`. Ici, `i` prendra les valeurs 0 puis 1 puis 2, ..., puis $n - 1$.\n",
"- Le bloc d'instructions à répéter doit être indenté (d'une tabulation) et sera donc ici exécuté $n$ fois."
]
},
{
"cell_type": "markdown",
"id": "searching-journal",
"metadata": {},
"source": [
"#### 2.2.1. À Faire\n",
"\n",
"On considère le programme Python suivant.\n",
"\n",
"```python\n",
"a = 2\n",
"for i in range(4):\n",
" a = a + 1\n",
" print(a)\n",
"```\n",
"\n",
"1. Quel est le bloc d'instructions répété dans la boucle `for` ?\n",
"2. Combien de fois est-il répété ?\n",
"3. Combien de valeurs sont affichées au cours de l'exécution de ce programme ?\n",
"4. Quelle est la valeur finale de la variable `a` ?"
]
},
{
"cell_type": "markdown",
"id": "broke-warrant",
"metadata": {},
"source": [
"#### 2.2.2. À Faire\n",
"\n",
"On considère le programme Python suivant :\n",
"\n",
"```python\n",
"a = 1\n",
"b = 5\n",
"for i in range(3):\n",
" a = 2 * a\n",
" b = b + a\n",
"print(b)\n",
"```\n",
"\n",
"On va commencer par analyser le code pour le comprendre.\n",
"\n",
"1. Quel est le bloc d'instructions répété dans la boucle `for` ? Combien de fois est-il répété ?\n",
"2. Expliquez pourquoi il n'y a qu'une seule valeur qui s'affiche dans la console si on exécute le code ?\n",
"3. Recopiez et complétez le tableau ci-dessous avec les valeurs des variables `i`, `a` et `b` à chaque tour de boucle.\n",
"\n",
"| `i` | `a` | `b` |\n",
"| :--: | :--: | :---: |\n",
"| | 1 | 5 |\n",
"| 0 | ??? | ??? |\n",
"| ??? | ??? | ??? |\n",
"| ??? | ??? | ??? |\n",
"\n",
"4. Quelle est la valeur finale de la variable `b` ?\n",
"5. Exécutez ensuite le code et vérifiez ce qu'il produit."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "danish-oxide",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "informative-insulation",
"metadata": {},
"source": [
"### 2.3. Boucle bornée sur une chaine de caractères\n",
"\n",
"Comme on l'a vu précédemment, il est possible de créer une boucle bornée en utilisant le mot-clé `in` associé au mot clé `range`. Cela permet de répéter les mêmes instructions sur un intervalle.\n",
"\n",
"Cette section va nous permettre de voir une autre utilisation de la boucle bornée. En effet, il est possible d'itérer sur tous les éléments de certaines variables en utilisant le mot clé `in` de la façon suivante :\n",
"\n",
"```python\n",
"for element in variable: # se traduit pas \"pour chaque element de variable\"\n",
" bloc_instructions\n",
"```\n",
"\n",
"**Remarques** :\n",
"\n",
"- `variable` peut être une chaîne de caractères (type `str`) ou une liste (type `list`).\n",
"- Dans ce cas, la variable `element` prend successivement chacune des valeurs de `variable`."
]
},
{
"cell_type": "markdown",
"id": "abroad-health",
"metadata": {},
"source": [
"#### 2.3.1. Par ses caractères\n",
"\n",
"On peut parcourir une chaîne directement par ses caractères."
]
},
{
"cell_type": "markdown",
"id": "acquired-reset",
"metadata": {},
"source": [
"##### 2.3.1.1. À Faire\n",
"\n",
"1. Copier et exécuter le code suivant.\n",
"```python\n",
"a = \"SNT\"\n",
"for lettre in a:\n",
"\tprint(lettre)\n",
"```\n",
"2. Quel est le résultat obtenu ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bacterial-hamburg",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "upper-adjustment",
"metadata": {},
"source": [
"#### 2.3.2. Par l'indice de ses caractères\n",
"\n",
"On peut aussi utiliser la fonction `range()` pour parcourir les caractères par leurs indices.\n",
"\n",
"##### 2.3.2.1. À Faire\n",
"\n",
"1. Copier et exécuter le code suivant.\n",
"```python\n",
"a = \"SNT\"\n",
"for i in range(len(a)):\n",
"\tprint(a[i])\n",
"```\n",
"2. Quel est le résultat obtenu ?"
]
},
{
"cell_type": "markdown",
"id": "strategic-mason",
"metadata": {},
"source": [
"## 3. Exercices"
]
},
{
"cell_type": "markdown",
"id": "artificial-water",
"metadata": {},
"source": [
"### Exercice 1 - La punition\n",
"\n",
"L'article 2.2 Les punitions scolaires d'une circulaire ministérielle du 13 Juillet 2000 rappelle qu' « _Il convient également de distinguer soigneusement les punitions relatives au comportement des élèves de l'évaluation de leur travail personnel. Ainsi n'est-il pas permis de baisser la note d'un devoir en raison du comportement d'un élève ou d'une absence injustifiée. Les __lignes et les zéros doivent également être proscrits__._»\n",
"\n",
"Votre professeur était élève bien avant cette circulaire et a souvent été puni avec pour sanction le fait de devoir copier 100 fois sur une feuille la phrase suivante : \"_Je ne discuterai plus avec mon camarade de classe pendant les cours_.\"\n",
"\n",
"Écrire un programme Python qui permet de facilement transcire la punition."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "frozen-cherry",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "daily-richards",
"metadata": {},
"source": [
"### Exercice 2 - Table de Multiplication\n",
"\n",
"1. Recopiez le programme suivant :\n",
"\n",
"```python\n",
"nombre = int(input(\"De quel nombre voulez-vous la table de multiplication ? \"))\n",
"\n",
"for compteur in range(10):\n",
"\tprint(nombre)\n",
"```\n",
"\n",
"2. Modifiez ce programme pour qu'il affiche la table de multiplication du nombre demandé, de 0 à 10. Par exemple, si l'utilisateur donne la valeur 6, le programme devrait afficher : 0, 6, 12, 18, …, 60."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "adjustable-serum",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "derived-perfume",
"metadata": {},
"source": [
"### Exercice 3 - Problème de l'échiquier de Sissa\n",
"\n",
"Selon [la légende](https://fr.wikipedia.org/wiki/Problème_de_l'échiquier_de_Sissa), pour remercier l'inventeur des échecs Sissa, le roi lui demanda de choisir sa récompense. Sissa demanda alors du riz : __un grain sur la première case, deux grains sur la seconde case, quatre grains sur la troisième case, huit grains sur la quatrième, et ainsi de suite jusqu'à la dernière case du jeu d'échec__. Le roi accepta.\n",
"\n",
"On se demande combien de grains seront posés sur la dernière case du plateau d'échecs (qui en compte 64).\n",
"\n",
"Pour résoudre ce problème, on peut utiliser le programme suivant :\n",
"\n",
"```python\n",
"grains = 1\n",
"\n",
"for compteur in range(???):\n",
" grains = ???\n",
"\n",
"print(\"Nombre de grains sur la dernière case :\", grains)\n",
"```\n",
"\n",
"1. Compléter ce programme, et exécutez-le.\n",
"2. Combien de grains de riz y aura-t-il sur la dernière case de l'échiquier ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "breeding-stack",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "north-diabetes",
"metadata": {},
"source": [
"### Exercice 4 - Petite tortue qui dessine\n",
"\n",
"Le module `turtle` (*tortue*) permet de dessiner avec Python.\n",
"\n",
"Dans cet exercice on veut écrire un programme qui permet de dessiner des formes géométriques. Voici le code incomplet du programme.\n",
"\n",
"```python\n",
"import turtle # pour utiliser le module turtle\n",
"\n",
"\"\"\"Fonction qui dessine un carré de coté 100 pixels\"\"\"\n",
"turtle.forward(100) # pour avancer de 100 pixels\n",
"turtle.left(90) # pour tourner de 90° à gauche\n",
"turtle.forward(100)\n",
"turtle.left(90)\n",
"# À Compléter\n",
"\n",
"turtle.done() # pour afficher le dessin\n",
"```\n",
"1. Modifiez le programme afin que la tortue dessine un `carré`, en utilisant une boucle `for`.\n",
"2. Modifiez le programme afin que la tortue dessine un `triangle`, en utilisant une boucle `for`.\n",
"3. Modifiez le programme afin que la tortue dessine un `octogone`, en utilisant une boucle `for`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "capital-minnesota",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "human-accommodation",
"metadata": {},
"source": [
"## 4. Compléments sur la fonction range\n",
"\n",
"Dans les paramètres de la fonction `range` il est également possible de préciser une première valeur (si on ne veut pas commencer à zéro) ainsi que le pas (si on ne veut pas que les itérations se fassent de 1 en 1).\n",
"\n",
"Après avoir regardé la [vidéo](https://www.youtube.com/watch?v=07IGOcpiE7o), répondez aux questions qui suivent. Vous vérifierez ensuite en utilisant un éditeur de code Python."
]
},
{
"cell_type": "markdown",
"id": "phantom-presentation",
"metadata": {},
"source": [
"1. Quelles sont les valeurs affichées dans la console lors de l'exécution de chacun des programmes ci-dessous ? *Attention, il faut répondre sans exécuter le code !*\n",
"\n",
"2. - Programme 1 :\n",
"\n",
" ```python\n",
" for i in range(10):\n",
" print(i)\n",
" ```\n",
" - Programme 2 :\n",
"\n",
" ```python\n",
" for k in range(2, 10):\n",
" print(k)\n",
" ```\n",
" - Programme 3 :\n",
"\n",
" ```python\n",
" for ind in range(2, 10, 3):\n",
" print(ind)\n",
" ```\n",
"\n",
"3. Exécutez successivement les trois codes et vérifiez vos réponses à la question précédente."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "saving-conducting",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "brutal-password",
"metadata": {},
"source": [
"## 5. Boucle non bornée\n",
"\n",
"## 5.1 Retour à l'exemple introductif\n",
"\n",
"Bien que l'exigence d'obtenir 3 millions d'utilisateurs dans 3 ans avec un taux de croissance de 5% par mois n'est pas satisfaite, les banquiers donnent une deuxième chance à _KILESTBIEN_.\n",
"\n",
"Ils souhaitent connaitre exactement quel sera le nombre de mois nécessaires pour que le nombre d'utilisateurs atteignent 7 millions d'utilisateurs, avec un taux de croissance à 4% par mois.\n",
"\n",
"Ils investirons 1 million d'euros seulement si la barre des 7000000 d'utilisateurs est atteinte dans les 5 ans.\n",
"\n",
"Ici, nous ne connaissons pas le nombre de mois, impossible d'utiliser une boucle bornée...par contre, il est possible de partir du premier mois et de calculer le nombre d'utilisateurs croissant...__tant qu'__il n'atteint pas 7 millions !\n",
"\n",
"### À Faire\n",
"\n",
"Modifier le code suivant pour répondre à la problématique.\n",
"\n",
"```\n",
"nb_utilisateurs = 500000\n",
"nb_mois = 0\n",
"while nb_utilisateurs < 3000000:\n",
" nb_utilisateurs = nb_utilisateurs * 1.05\n",
" nb_mois = nb_mois + 1\n",
"print(nb_mois)\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "expensive-kenya",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "thirty-bibliography",
"metadata": {},
"source": [
"## 5.2 Construction d'une boucle non bornée\n",
"\n",
"En Python, les boucles \"Tant que\" se codent en utilisant l'instruction while :\n",
"\n",
"```\n",
"while condition:\n",
" bloc_instructions\n",
"```\n",
"\n",
"__Remarques__ :\n",
"\n",
"- `condition` est une __variable booléenne__ qui est soit vraie (True) soit fausse (False),\n",
"- Tant que `condition` vaut True les instructions du bloc sont répétées,\n",
"- On passe à la suite du programme dès que condition vaut False. Cela signifie que si condition reste vraie tout le temps, la boucle `while` boucle à l'infini, ce qui pourra causer des problèmes plus ou moins importants,\n",
"- Ne pas oublier les deux points à la fin de la ligne avec while qui permettent d'ouvrir le bloc d'instructions à exécuter (à répéter),\n",
"- les instructions à effectuer sont indentées d'une tabulation par rapport au `while`."
]
},
{
"cell_type": "markdown",
"id": "ethical-director",
"metadata": {},
"source": [
"### 5.2.1. À Faire\n",
"\n",
"Copier et exécuter le code suivant.\n",
"\n",
"\n",
"```python\n",
"a = 3\n",
"while a < 14:\n",
" a = a + 2\n",
" print(a) # pour voir l'évolution de la variable a\n",
"```\n",
"\n",
"1. Quel est le résultat obtenu ?\n",
"2. Combien d'itérations ont-elles été nécessaires pour que la boucle se termine ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "authorized-applicant",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "adjusted-arthritis",
"metadata": {},
"source": [
"## 6. Exercices"
]
},
{
"cell_type": "markdown",
"id": "wrapped-compound",
"metadata": {},
"source": [
"### Exercice 5 - Final Countdown\n",
"\n",
"Écrire un programme, utilisant une boucle non bornée et affiche un décompte. La valeur de `départ` est égale à 10. "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "african-rings",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "introductory-salon",
"metadata": {},
"source": [
"### Exercice 6 - Divisions successives\n",
"\n",
"Proposer un programme qui utilise une boucle `Tant que` qui a pour but d'afficher les restes successifs de la division entière d'un entier naturel $a$ par un entier naturel $b$.\n",
"\n",
"Vous pouvez tester votre programme en prenant comme valeurs :\n",
"\n",
"- $a$ = 21, $b$ = 10\n",
"- $a$ = 21, $b$ = 2\n",
"- $a$ = 64, $b$ = 2\n",
"- $a$ = 64, $b$ = 16\n",
"\n",
"En lisant le résultat obtenu, que permet de faire ce programme ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "under-nursery",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "retained-witch",
"metadata": {},
"source": [
"### Exercice 7 - Indice\n",
"\n",
"Écrire un programme qui étant donné une variable `nom` égale au vôtre, stocke l'indice de la première voyelle dans une variable `indice`.\n",
"\n",
"__Exemple__ :\n",
"```python\n",
"nom = \"BODDAERT\"\n",
"# \n",
"# code du programme\n",
"# \n",
"indice = 1 # O est la première lettre du nom. Elle se trouve à l'indice 1\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "extraordinary-priest",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "still-joshua",
"metadata": {},
"source": [
"### Exercice 8 - Retour de la tortue\n",
"\n",
"En reprenant les fonctions `forward`, `left`et `done` de la tortue, vus à l'exercice 4, décriver un programme permettant d'obtenir la figure suivante :\n",
"\n",
"La solution peut s'écrire sous la forme de l'algorithme suivant :\n",
"\n",
"```txt\n",
"Tant que longueur > 0 \n",
"\tla tortue avance sur une distance de longueur\n",
"\tla tortue tourne de 90° à gauche\n",
"\tlongueur diminue de 10\n",
"Fin du tant que\n",
"```\n",
"\n",
"Etes vous certain que la boucle s'arrête à un moment donné ? Pourquoi ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "neutral-burden",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "assumed-freight",
"metadata": {},
"source": [
"### Exercice 9 - Re-Retour de la tortue\n",
"\n",
"Ici, il s'agit de tracer une spirale, mais à la différence de l'exercice précédent, la longueur décroit de 10% à chaque itération.\n",
"\n",
"La solution peut s'écrire sous la forme de l'algorithme suivant :\n",
"\n",
"```txt\n",
"Tant que longueur > 0 \n",
"\tla tortue avance sur une distance de longueur\n",
"\tla tortue tourne de 90° à droite\n",
"\tlongueur est multipliée par 0.9 # Décroissance de 10% à chaque itération\n",
"Fin du tant que\n",
"```\n",
"\n",
"Implanter l'algorithme en Python et exécuter le.\n",
"\n",
"Que se passe-t-il ? Pourquoi ? Modifier le code pour y remédier."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "geological-sampling",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@@ -0,0 +1,15 @@
# Les fonctions
L'activité consiste en un TD comprenant un __cours dirigé__ et des __exercices__ relatifs à la notion de _fonctions_ en Python.
## Pré-requis
Avoir effectué l'activité sur les [boucles](../chapitre_3/)
## Consignes
1. Télécharger le fichier [TD.ipynb](./TD.ipynb),
2. Se rendre sur [Basthon](https://notebook.basthon.fr/),
3. Ouvrir le fichier TD.ipynb téléchargé,
4. Suivre le déroulé du TD, les réponses sont à mettre directement dans votre fichier,
5. À la fin de la séance, n'oubliez pas de sauvegarder votre fichier sur votre clé USB ou espace personnel.

View File

@@ -0,0 +1,588 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# TD - Les fonctions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Exemple introductif\n",
"\n",
"La mention au bac se calcule en fonction de la moyenne selon les critères suivants :\n",
"\n",
"| Moyenne | Mention |\n",
"| :--: | :--: |\n",
"| Inférieur à 10 (exclu | Aucune |\n",
"| De 10 à 12 (exclu) | Passable |\n",
"| De 12 à 14 (exclu) | Assez bien |\n",
"| De 14 à 16 (exclu) | Bien |\n",
"| De 16 à + | Très Bien |\n",
"\n",
"Imaginons que l'on souhaite connaitre la mention pour 2 élèves, il est possible d'écrire et d'exécuter les instructions suivantes :\n",
"\n",
"```python\n",
"moyenne = 13.5 # moyenne de l'élève 1\n",
"if moyenne < 10:\n",
" mention = \"Aucune\"\n",
"elif moyenne < 12:\n",
" mention = \"Passable\"\n",
"elif moyenne < 14:\n",
" mention = \"Assez Bien\"\n",
"elif moyenne < 16:\n",
" mention = \"Bien\"\n",
"else:\n",
" mention = \"Très Bien\"\n",
"print(\"la mention pour l'élève 1 est : \", mention)\n",
"moyenne = 10.75 # moyenne de l'élève 2\n",
"if moyenne < 10:\n",
" mention = \"Aucune\"\n",
"elif moyenne < 12:\n",
" mention = \"Passable\"\n",
"elif moyenne < 14:\n",
" mention = \"Assez Bien\"\n",
"elif moyenne < 16:\n",
" mention = \"Bien\"\n",
"else:\n",
" mention = \"Très Bien\"\n",
"print(\"la mention pour l'élève 1 est : \", mention)\n",
"```\n",
"\n",
"On constate que l'on doit répéter le bloc d'instructions conditionnelles.\n",
"\n",
"__Y a-t-il un moyen de factoriser ce bloc d'instuctions ?__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Solution : les fonctions\n",
"\n",
"Utilisons la syntaxe suivante :"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"la mention pour l'élève 1 est : Assez Bien\n",
"la mention pour l'élève 2 est : Passable\n"
]
}
],
"source": [
"def obtenir_mention(moyenne):\n",
" if moyenne < 10:\n",
" mention = \"Aucune\"\n",
" elif moyenne < 12:\n",
" mention = \"Passable\"\n",
" elif moyenne < 14:\n",
" mention = \"Assez Bien\"\n",
" elif moyenne < 16:\n",
" mention = \"Bien\"\n",
" else:\n",
" mention = \"Très Bien\"\n",
" return mention\n",
" \n",
"print(\"la mention pour l'élève 1 est : \", obtenir_mention(13.5))\n",
"print(\"la mention pour l'élève 2 est : \", obtenir_mention(10.75))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$\\Rightarrow$ Le bloc calculant la mention est défini une et une seule fois !!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Déclaration d'une fonction\n",
"\n",
"Dans un langage de programmation, on utilise ce qu'on appelle des __fonctions__. Une __fonction__ est un ensemble d'instructions qui peut recevoir des __arguments__ et qui peut renvoyer un __résultat__ qui est souvent le contenu d'une ou plusieurs variables.\n",
"\n",
"En Python, on définit une fonction en utilisant l'instruction `def` (de l'anglais define, qui veut dire \"définir\") :\n",
"\n",
"```python\n",
"def nom_de_la_fonction(parametre1, parametre2, ..., parametreN):\n",
" corps_de_la_fonction\n",
"```\n",
"\n",
"- l'instruction `def` est suivie du nom de la fonction ;\n",
"- les __paramètres__ de la fonction sont ensuite écrits entre parenthèses et séparés par des virgules ;\n",
"- il existe des fonctions sans paramètre, les parenthèses sont néanmoins obligatoires et restent vides ;\n",
"- il ne faut pas oublier les __deux points__ après les parenthèses de la première ligne ;\n",
"- le corps de la fonction est un bloc d'instructions qui contient toutes les lignes qui doivent être exécutées lorsque la fonction est appelée. Le corps de la fonction doit nécessairement être __indenté__, c'est-à-dire qu'il doit être décalé d'une tabulation par rapport à l'instruction `def`.\n",
"\n",
"Très souvent, le corps de la fonction se terminera par l'instruction `return` suivie de la ou des valeurs que la fonction doit renvoyer. Si la fonction doit renvoyer plusieurs valeurs, celles-ci sont à séparer par des virgules.\n",
"\n",
"Ainsi, le schéma général d'une fonction Python est :\n",
"\n",
"```python\n",
"def nom_de_la_fonction(parametre1, parametre2, ..., parametreN):\n",
" instructions # sur plusieurs lignes éventuellement\n",
" return valeur1, valeur2, valeur3, etc. # souvent une fonction ne renvoie qu'une valeur\n",
"````\n",
"\n",
"Exemple : Voici la fonction inverse implantée en Python\n",
"\n",
"```python\n",
"def inverse(x):\n",
" y = 1 / x\n",
" return y\n",
"```\n",
"\n",
"que l'on peut aussi écrire plus simplement :\n",
"\n",
"```python\n",
"def inverse(x):\n",
" return 1 / y\n",
"```\n",
"\n",
"Identifiez dans ces deux fonctions écrites différemment : leur nom, leur(s) paramètre(s), leur corps, leur(s) valeur(s) renvoyée(s).\n",
"\n",
"Remarque : il existe des fonctions qui ne renvoient aucune valeur, l'instruction return n'est donc pas utilisée dans le corps de ces fonctions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Appel à une fonction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lorsque l'on exécute le code qui définit une fonction, aucune valeur n'est renvoyée ! Cela a seulement pour objectif d'enregistrer la fonction en mémoire."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# à exécuter : il ne se passera rien (visuellement)\n",
"def inverse(x):\n",
" return 1 / x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pour utiliser une fonction il faut l'__appeler__. On appelle une fonction par son nom en donnant des arguments (des valeurs) à ses paramètres. Dans ce cas, la fonction va renvoyer la ou les valeurs attendues."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.5"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# appel à la fonction : qui renvoie alors ce qu'il faut !\n",
"\n",
"inverse(2)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.1"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# un autre appel à la fonction : qui renvoie alors ce qu'il faut !\n",
"\n",
"inverse(10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Une fonction est __définie une__ et __une seule fois__,\n",
"- À chaque appel, la fonction calcule et produit un résultat dépendant des valeurs des paramètres passés,\n",
"- Pour un même ensemble de valeurs de paramètres, le résultat produit est toujours le même. On dit qu'une fonction est __déterministe__ (ou __pure__)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Remarque : au premier `return` rencontré l'exécution de la fonction est stoppée : si on veut renvoyer plusieurs valeurs on ne peut pas utiliser plusieurs return ; il faut séparer les valeurs à renvoyer par des virgules."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### À Faire\n",
"\n",
"1. Écrire une fonction `obtenir_mention` qui prend en paramètre une note, sous la forme d'un flottant et renvoie une mention, sous la forme d'une chaine de caractères.\n",
"2. Quelles instructions permet d'appeller la fonction pour les moyennes des 2 élèves de l'exemple introductif ?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Prototyper une fonction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pour expliquer le fonctionnement d'une fonction, on lui ajoute un __prototype__ juste sous la ligne de définition. En Python les prototypes sont appelés _docstrings_. On peut y accéder dans le code source ou simplement en utilisant la fonction `help()`.\n",
"\n",
"Le prototype doit décrire le __rôle__ de la fonction, le __type des paramètres__, __type de la valeur de retour__ et les __conditions d'utilisation__."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"def inverse(x):\n",
" '''\n",
" Calcule l'inverse de x\n",
" :param x: (int) un entier\n",
" :return: l'inverse de x\n",
" '''\n",
" return 1 / x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Que se passe-t-il pour $x = 0$ ?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il faut a minima que le prototype contienne les cas d'utilisation et les pré-conditions sur les paramètres."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def inverse(x):\n",
" '''\n",
" Calcule l'inverse de x\n",
" :param x: (int) un entier\n",
" :return: l'inverse de x\n",
" :C.U: x != 0\n",
" '''\n",
" return 1 / x"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on function inverse in module __main__:\n",
"\n",
"inverse(x)\n",
" Calcule l'inverse de x\n",
" :param x: (int) un entier\n",
" :return: l'inverse de x\n",
" :C.U: x != 0\n",
"\n",
"\n"
]
}
],
"source": [
"help(inverse)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__N.B : Toute fonction doit comporter un prototype clair et explicite car la fonction peut être utilisée par une personne qui ne l'a pas programmé et doit savoir ce qu'elle fournit comme service sans devoir lire et comprendre son code.__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 6. Valeur de paramètre par défaut"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 7. Portée des variables\n",
"\n",
"Les variables définies dans les fonctions, ses paramètres ou autres, sont appelés des __variables locales__, par opposition aux __variables globales__, qui sont définies dans flot d'exécution du programme."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n"
]
}
],
"source": [
"# Je défini une variable globale x\n",
"x = 3\n",
"# Je défini une fonction avec comme paramètre x\n",
"def double(x):\n",
" # Il s'agit d'une nouvelle variable locale x non liée à la variable globale x\n",
" return 2 * x\n",
"\n",
"# J'appelle la fonction double avec x = 2\n",
"double(2)\n",
"\n",
"print(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La variable globale `x` reste inchangée"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 7.1. Mauvaise pratique "
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6\n"
]
}
],
"source": [
"# Je défini une variable globale x\n",
"x = 3\n",
"# Je défini une fonction sans paramètre\n",
"def double():\n",
" # Je modifie la variable globale x\n",
" global x\n",
" x = 2 * x\n",
"\n",
"# J'appelle la fonction double, x = 3 à ce stade\n",
"double()\n",
"\n",
"print(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La fonction `double` ne prend aucun paramètre mais utilise une variable globale, ce qui est une mauvaise pratique car potentiellement source d'erreurs."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12\n"
]
}
],
"source": [
"double()\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"24\n"
]
}
],
"source": [
"double()\n",
"print(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__N.B : Le résultat calculé et obtenu par une fonction doit dépendre et manipuler uniquement des paramètres et variables locales définis.__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exercices\n",
"\n",
"- calcule le min de 2 valeurs passées en paramètre\n",
"- calcule le nombre de voyelles d'une chaine\n",
"- calcule le pgcd de 2 entiers\n",
"- remplace les voyelles par des nombres\n",
"\n",
"- Convertir de Farenheit à Celsius et inversement\n",
"- calculer le discriminant\n",
"- vérification du format d'une plaque d'immatriculation\n",
"- tortue qui trace des formes géomatriques\n",
"\n",
"- différence print / return"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice X\n",
"\n",
"L'énergie cinétique d'un objet de masse $m$ se déplaçant à la vitesse $v$ est:\n",
"\n",
"$$Ec = \\frac{1}{2} m v^{2}$$\n",
"\n",
"Créer une fonction `energie_cinetique` qui calcule sa valeur à partir des paramètres `masse` et `vitesse`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice X\n",
"\n",
"Construire une fonction, utilisant le module `random`, qui tire au sort un nombre entier entre deux bornes données en arguments."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice X\n",
"\n",
"Écrire une fonction pour calculer la `factorielle` d'un nombre (un entier non négatif). La fonction accepte le nombre en tant qu'argument. \n",
"\n",
"Exemple: factorielle de 5: 5! = 5x4x3x2x1 = 120"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercice X\n",
"\n",
"Écrire une fonction Python qui prend un nombre en paramètre et vérifiez si le nombre est premier ou non. \n",
"\n",
"Remarque: Un nombre premier est un nombre naturel supérieur à 1 et qui n'a pas de diviseur positif autre que 1 et lui-même."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

Binary file not shown.

View File

@@ -24,8 +24,8 @@ L'objet de cette séquence est de répondre à la question : __Comment sont cod
Cette séquence se décompose en 5 chapitres :
- [Chapitre 1 : Représentation d'un entier naturel](./seance_1/)
- [Chapitre 2 : Représentation d'un entier relatif](./seance_2/)
- [Chapitre 3 : Représentation d'un flottant](./seance_3/)
- [Chapitre 4 : Représentation d'un booléen](./seance_4)
- [Chapitre 5 : Représentation d'un texte](./seance_5/)
- [Chapitre 1 : Représentation d'un entier naturel](./chapitre_1/)
- [Chapitre 2 : Représentation d'un entier relatif](./chapitre_2/)
- [Chapitre 3 : Représentation d'un flottant](./chapitre_3/)
- [Chapitre 4 : Représentation d'un booléen](./chapitre_4/)
- [Chapitre 5 : Représentation d'un texte](./chapitre_5/)

View File

@@ -0,0 +1,207 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Un peu de couleurs\n",
"\n",
"## Contexte\n",
"\n",
"Le codage informatique le plus simple de la couleur consiste à donner, pour chaque pixel, c'est-à-dire pour tout élément de l'image, trois valeurs chacune sur un octet, correspondant directement à la luminosité. \n",
"\n",
"Un pixel d'une image, d'un écran est constitué de 3 composantes de luminophore:\n",
"\n",
"<center>\n",
"<span style='background-color: rgb(255, 0, 0);'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style='background-color: rgb(0, 255, 0);'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style='background-color: rgb(0, 0, 255);'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>\n",
"</center>\n",
"\n",
"## Codage en RGB\n",
"\n",
"HTML et CSS acceptent la notation RGB `rgb(24,255,12)` où les nombres représentent la valeur en pourcentage pour le rouge, le vert et le bleu.\n",
"\n",
"Chaque nombre représente la valeur de la luminosité sur un octet (8 bits)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### À Faire\n",
"\n",
"1. Combien y a-t-il de valeurs possibles pour le rouge, vert et le bleu ? \n",
"2. Combien de couleurs totales peut-on coder avec 3 octets ?\n",
"3. Dans le code, modifier la valeur des composantes rgb pour changer la couleur du <span style='background-color: rgb(255, 255, 255);'>Fond du texte</span>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Codage condensé\n",
"\n",
"HTML et CSS acceptent également la notation condensée `#08A12C`, où le code après # agglutine trois valeurs hexadécimales qui sont directement celle des octets de commande des luminophores.\n",
"\n",
"Exemple : \n",
"\n",
"Le fond du texte suivant est en <span style='background-color: #808080;'>couleur grise</span>. \n",
"\n",
"En regardant le code source, on s'aperçoit que notation condensée de la couleur est : `#808080`. \n",
"\n",
"Il correspond à au codage RGB `rgb(128, 128, 128)` : <span style='background-color: rgb(128, 128, 128);'>couleur grise</span>\n",
"\n",
"### À Faire\n",
"\n",
"1. Convertir $80_{16}$ en base 10\n",
"2. Quel lien existe-t-il entre une composante RGB et le codage condensé d'une couleur ?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Couleurs de l'arc-en-ciel\n",
"\n",
"Un arc-en-ciel est un phénomène optique se produisant dans le ciel, visible dans la direction opposée au Soleil quand il brille pendant la pluie. C'est un arc de cercle coloré d'un dégradé de couleurs continu du rouge, à l'extérieur, au jaune au vert et au bleu, jusqu'au violet à l'intérieur.\n",
"\n",
"L'objectif est de reconstituer les couleurs d'un arc en ciel !\n",
"\n",
"En analysant le code source, les couleurs de fond sont manquantes, vous devez modifiez les codes pour afficher les couleurs correspondantes.\n",
"\n",
"<table>\n",
"<tr>\n",
" <td style=\"background-color : rgb(255, 255, 255); color: black;\">Violet</td>\n",
" <td style=\"background-color : #ffffff; color: black;\">Indigo</td>\n",
" <td style=\"background-color : rgb(255, 255, 255); color: black;\">Bleu</td>\n",
" <td style=\"background-color : #ffffff; color: black;\">Vert</td>\n",
" <td style=\"background-color : rgb(255, 255, 255); color: black;\">Jaune</td>\n",
" <td style=\"background-color : #ffffff; color: black;\">Orangé</td>\n",
" <td style=\"background-color : rgb(255, 255, 255); color: black;\">Rouge</td>\n",
"</tr>\n",
"</table>\n",
"\n",
"Pour cela, vous disposez de la liste des valeurs des couleurs...en binaire :\n",
"\n",
"| Couleur | Valeur binaire |\n",
"| :--: | :--: |\n",
"| Violet | `10000000 00000000 10000000` |\n",
"| Indigo | `00110011 01100110 11111111` |\n",
"| Bleu | `00000000 11001100 11111111` |\n",
"| Vert | `10011001 11001100 00000000` |\n",
"| Jaune | `11111111 11001100 00000000`|\n",
"| Orangé | `11111111 01100110 00000000`|\n",
"| Rouge | `11111111 00000000 00000000`|\n",
"\n",
"### À Faire\n",
"\n",
"1. Convertir les valeurs binaires en décimales\n",
"2. Programmer les blocs d'instructions permettant de :\n",
" 1. convertir une couleur RGB en condensé,\n",
" 2. convertir une couleur condensé en RGB.\n",
"3. Modifier les codes couleurs du tableau pour afficher les couleurs de l'arc-en-ciel"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Conversion RGB $\\rightarrow$ condensé\n",
"\n",
"Ci-dessous, l'aide de la fonction `hex`, obtenue en exécutant `help(hex)`\n",
"\n",
"```python\n",
">>>help(hex)\n",
"Help on built-in function hex in module builtins:\n",
"\n",
"hex(number, /)\n",
" Return the hexadecimal representation of an integer.\n",
" \n",
" >>> hex(12648430)\n",
" '0xc0ffee'\n",
"```\n",
"\n",
"Écrire les instructions qui permettent de convertir la valeur d'un RGB en condensé"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"la composante condensé de ( 0 , 0 , 0 ) est : None\n"
]
}
],
"source": [
"# Conversion Codage RGB vers Codage condensé\n",
"\n",
"rouge = 0\n",
"vert = 0\n",
"bleu = 0 \n",
"\n",
"condense = None # valeur calculée du condensé de la couleur \n",
"\n",
"print(\"la composante condensé de (\", rouge, \",\", vert, \",\", bleu, \") est :\", condense)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Conversion condensé $\\rightarrow$ RGB\n",
"\n",
"Écrire les instructions qui permettent de convertir la valeur d'un condensé en RGB"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"la composante RGB de None est : 0 0 0\n"
]
}
],
"source": [
"# Conversion Codage condensé vers Codage RGB\n",
"\n",
"condense = None # valeur condensé de la couleur \n",
"\n",
"rouge = 0 # Extraire la valeur rouge de condense et la convertir en décimale\n",
"vert = 0 # Extraire la valeur verte de condense et la convertir en décimale\n",
"bleu = 0 # Extraire la valeur bleue de condense et la convertir en décimale\n",
"\n",
"print(\"la composante RGB de\", condense, \"est :\", rouge, vert, bleu)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

View File

@@ -0,0 +1,101 @@
---
title : TD - Les Shadoks
author : M. BODDAERT, M. MIESZCZAK
license : CC-BY-NC-SA
---
# Les Shadoks
## Contexte
Les Shadoks réussissent à compter avec seulement 4 mots de leur bien maigre vocabulaire : __GA BU ZO__ et __MEU__.
Dans cette [vidéo](https://youtu.be/lP9PaDs2xgQ), le professeur Shadoko explique simplement la méthode employée par les Shadoks.
Ci dessous, l'explication du professeur Shadoko:
_"Notez bien. Quand il n'y a pas de Shadok, on dit __GA__ et on écrit __O__.
Quand il y a un Shadok en plus on dit __BU__ et on écrit __I__.
Quand il y a un Shadok en plus on dit __ZO__ et on écrit __L__.
Quand il y a un Shadok en plus on dit __MEU__ et on écrit __◺__._
_Quand il y a un Shadok en plus on se rend compte qu'on ne peut plus compter._
_On met tous les Shadoks dans une poubelle et on a __BU__ poubelle et __GA__ Shadok._
_Et on continue: __BUGA__; __BUBU__; __BUZO__...Et on continue_
_Les Shadoks applaudirent sauf un. Le devin plombier s'écria et disait qu'on n'avait pas idée des mettre des dessins sur des poubelles et des Shadoks et que la meilleure chose à faire, c'était de brûler Shadoko. Les Shadoks applaudirent aussi._
## Question 1
Complétez le tableau suivant en comptant jusqu'à 20 en _Shadoks_.
| Nombre | Shadok |
| ---- | ---- |
| 0 | GA |
| 1 | BU |
| 2 | ZO |
| 3 | MEU |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | |
| 17 | |
| 18 | |
| 19 | |
| 20 | |
## Question 2
1. Nous, humains, utilisons le système décimale. Quel est le système de numération utilisé par les Shadoks ?
2. Quelle méthode permet de convertir un nombre décimal en shadok ? et inversement ?
## Question 3
Sachant que **ZO MEU GA** _shadoks_ correspond à $`(44)_{10}`$, convertissez les nombres shadoks suivants en décimal :
1. BUBUZO
2. MEUGABU
Saurez vous sauver le professeur du bûcher,même si brûler le professeur est intéressant aussi faut dire, en révélant le nombre écrit sur le panneau ?
3. BUZOGAMEU
## Question 4
Plus difficile maintenant, le professeur a dénombré 21 shadoks hostiles à son système de numération et 94 shadoks favorables. Saurez vous écrire ces 2 entiers en écriture shadok ?
1. 21
2. 94
## Question 5
Les shadoks parlent mais écrivent également !!
Convertissez les entiers écrits en shadoks, en décimale :
1. II0◺
2. ◺I◺O
3. IOIOIO
## Question 6
Le Professeur Shadoko s'étant enfui, les shadoks ont besoin d'un traducteur officiel décimal / shadok.
Convertissez en _écriture_ shadok, les nombres suivants :
1. 33
2. 3210
2. Votre jour / mois et année de naissance ! Les Shadoks vous souhaiteront un bon anniversaire prochainement.

View File

@@ -8,7 +8,7 @@
<br>
![bo_1.png](/representation_base/assets/BO_1.PNG)
![bo_1.png](/premiere/representation_base/assets/BO_1.PNG)
## <span style="color:blue"> Apport de connaissances </span>
@@ -33,7 +33,7 @@ Donc 4138 peut sécrire : 4 * 10<sup>3</sup> + 1 * 10<sup>2</sup> + 3 * 10<su
→où 10 est appelé BASE de cette numération (ici décimale)<br>
→où chaque chiffre (compris entre 0 et 9) est soit celui des unités, dizaines, etc…
![exercice_1.png](/representation_base/assets/exercice_1.PNG)
![exercice_1.png](/premiere/representation_base/assets/exercice_1.PNG)
✏ *Un nombre est égal à la somme des valeurs de ses rangs, et on peut décomposer n'importe quel nombre en
puissance de sa base.* ✏
@@ -45,9 +45,9 @@ contraction de **_binary digit_**, littéralement **_chiffre binaire_**. <br>Un
En électronique, il est facile d'obtenir un système présentant deux états stables distincts. Prenons l'exemple
d'un interrupteur
![interrupteur.png](/representation_base/assets/interrupteur.PNG)
![interrupteur.png](/premiere/representation_base/assets/interrupteur.PNG)
![exemples.png](/representation_base/assets/exemples.PNG)
![exemples.png](/premiere/representation_base/assets/exemples.PNG)
Ainsi, pour coder une information qui peut ne prendre que deux états stables, la numération binaire est la
plus adaptée.
@@ -63,7 +63,7 @@ loccurrence 2 et 10), nous adoptons les notations suivantes.
→ Méthode des divisions successives <br>
Exemple: (11)<sub>d</sub> = (?)<sub>b</sub>
![10_vers_2.png](/representation_base/assets/10_vers_2.PNG)
![10_vers_2.png](/premiere/representation_base/assets/10_vers_2.PNG)
(11)<sub>d</sub> => (1011)<sub>b</sub>
@@ -81,7 +81,7 @@ Si nous généralisons un peu : avec **_k_** bits, nous pouvons coder **_2<sup>k
Compléter le tableau suivant afin de coder les 8 premiers entiers naturels (entiers positifs ou nul)
![tableau.png](/representation_base/assets/tableau.PNG)
![tableau.png](/premiere/representation_base/assets/tableau.PNG)
### À faire vous-même
@@ -96,7 +96,7 @@ Un octet ((**byte** en anglais) est un regroupement de 8 bits.
On parle aussi de mot. Il permet de coder 2<sup>8</sup> = 256 mots différents.
Si nous codons des entiers naturels, nous coderons les nombres 0 à 255. Dans la littérature, un regroupement de 4 bits est appelé un quartet (cela nous servira plus tard).
![octet.png](/representation_base/assets/octet.PNG)
![octet.png](/premiere/representation_base/assets/octet.PNG)
### <span style="color:violet">Unités de mesure</span>
@@ -126,7 +126,7 @@ Méthode :
<li>Ecrire le nombre binaire dans le tableau de correspondance <br>
<li>Faire la somme des valeurs des rangs pour lesquels la valeur du bit vaut 1.
![2_vers_10.png](/representation_base/assets/2_vers_10.PNG)
![2_vers_10.png](/premiere/representation_base/assets/2_vers_10.PNG)
Somme : ............
@@ -153,11 +153,11 @@ Ce sera donc un système en **base 16**.
> Compléter la colonne binaire
![binaire.png](/representation_base/assets/binaire.PNG)
![binaire.png](/premiere/representation_base/assets/binaire.PNG)
> Passer de la base décimale à la base hexadécimale <br> Écrire le nombre 63650 (10) en base 16
![exercice_2.png](/representation_base/assets/exercice_2.PNG)
![exercice_2.png](/premiere/representation_base/assets/exercice_2.PNG)
> Faisons la conversion de la base 16 vers la base 10, écrire le nombre 2A3 (16) en base décimale
@@ -165,7 +165,7 @@ Méthode :
<li>Ecrire le nombre hexadécimal dans le tableau de correspondance en positionnant le chiffre correspondant à chacun des rangs.
<li> Faire la somme des produits des chiffres avec la pondération correspondante.
![tableau-hexa.png](/representation_base/assets/tableau_hexa.PNG)
![tableau-hexa.png](/premiere/representation_base/assets/tableau_hexa.PNG)
> Passer du code binaire au code hexadécimal
@@ -189,7 +189,7 @@ Pour passer d'une base à une autre, on passera par la base 10 car c'est sur cet
Exemple : (944)<sub>10</sub> → ( 12234)<sub>5</sub>
![base_quelconque.png](/representation_base/assets/Base_quelconque.PNG)
![base_quelconque.png](/premiere/representation_base/assets/Base_quelconque.PNG)
-------------------------
@@ -201,24 +201,24 @@ Prenons l'exemple d'un mot de 2 octets (16 bits) comme 5BC9. Il y a deux organis
<li> Le gros boutisme (ou ou « mot de poids fort en tête » ou big endian en anglais), qui consiste à placer l'octet de poids fort en premier, c'est à dire à l'adresse mémoire la plus petite.
![gros_boutisme.png](/representation_base/assets/gros_boutisme.PNG)
![gros_boutisme.png](/premiere/representation_base/assets/gros_boutisme.PNG)
> Quelques architectures respectant cette règle : _les processeurs Motorola 68000, les SPARC (Sun Microsystems) ou encore les System/370 (IBM)_. De plus, tous les protocoles TCP/IP communiquent en gros-boutiste. Il en va de même pour le protocole PCI Express.
<li>Le petit boutisme (ou little endian en anglais), qui au contraire place l'octet de poids faible en premier.
![petit_boutisme.png](/representation_base/assets/petit_boutisme.PNG)
![petit_boutisme.png](/premiere/representation_base/assets/petit_boutisme.PNG)
> Les processeurs x86 ont une architecture petit-boutiste. Celle-ci, au prix d'une moindre lisibilité du code machine par le programmeur, simplifiait la circuiterie de décodage d'adresses courtes et longues en 1975, quand un 8086 avait 29 000 transistors. Elle est d'influence pratiquement nulle aujourdhui.
Généralisons pour 4 octets. Ainsi, le mot 5BC96AF sera représenté de la manière suivante :
en **gros boutisme**
![gros_boutisme_2.png](/representation_base/assets/gros_boutisme_2.PNG)
![gros_boutisme_2.png](/premiere/representation_base/assets/gros_boutisme_2.PNG)
en **petit boutisme**
![petit_boutisme_2.png](/representation_base/assets/petit_boutisme_2.PNG)
![petit_boutisme_2.png](/premiere/representation_base/assets/petit_boutisme_2.PNG)
La représentation petit ou gros boutisme est en principe transparente à l'utilisateur car cela est géré au niveau du système d'exploitation. Cette représentation prend de l'importance quand on accède aux octets soit en mémoire, soit lors d'échanges d'informations sur un réseau.

View File

@@ -1,11 +1,35 @@
# Convertisseur
# Codage des entiers
## Exercice 1
Donner l'écriture décimale des entiers ci-dessous positifs codés en binaire sur un octet sans complément à 2.
- $`00001000_2`$ =
- $`00001011_2`$ =
- $`10000001_2`$=
- $`11111110_2`$
- $`01000010_2`$ =
## Exercice 2
Donner l'écriture binaire des entiers positifs ci-dessous sur un octet sans complément à 2.
* 203 =
* 47 =
* 23 =
* 237 =
* 33 =
* 24 =
* 128 =
* 255 =
## Exercice 3
Certaines oeuvres (film, livre, série...) contiennent un nombre dans leur titre. L'objectif est d'écrire les nombres en base 2, ce qui donne une toute autre lecture des titres...
Exemple : Terminator $`2`$ $`\rightarrow`$ Terminator $`\overline{10}^2`$
## Titre de films
- Les **4** Fantastiques
- Le **6**ème sens
- Blanche neige et les **7** nains
@@ -22,29 +46,54 @@ Exemple : Terminator $`2`$ $`\rightarrow`$ Terminator $`\overline{10}^2`$
- **28** jours plus tard
- Les **Quatre Cents** Coups
## Titre de livres
## Exercice 4
- Entretien avec **un** vampire, d'Anne rice
- L'homme **bicentenaire**, Isaac Asimov
- Les **Trois** Mousquetaires, Alexandre Dumas
- Les **Quatre** Filles du docteur March, Louisa May Alcott
- Blanche-Neige et les **sept** nains, Frères Grimm
- **Cinquante** nuances de Grey, E.L. James
- Le Tour du monde en **80** jours, Jules Verne
- **99** francs, Frédéric Beigbeder
- Fahrenheit **451**, Ray Bradbury
- Les **Mille et Une** Nuits
- **1984**, Georges Orwell
- Ils étaient **dix**, Agatha Christie
- **Vingt mille** lieues sous les mers
Poser les additions de ces nombres binaires, tous positifs et codés sans complément à 2. Donner la valeur en base 10 du résultat.
## Expressions
* $`10_2+10_2`$
* $`101_2+11_2`$
* $`10001_2+11010_2`$
* $`1101_2+10101_2`$
- Être unis comme les **cinq** doigts de la main
- Lart de faire du **neuf** avec du vieux
- Chercher **midi** à **quatorze** heures
## Exercice 5
## Recette
Convertir en hexadécimal :
* 203 =
* 47 =
* 23 =
* 237 =
* 33 =
* 24 =
De même avec les entiers positifs ci-dessous codés sans compléments à 2.
* $`10110010_2 = `$
* $`10011001_2 = `$
## Exercice 6
Convertir en base 10.
* $`1F_{16} = `$
* $`13_{16} = `$
* $`45_{16} = `$
* $`FF_{16} = `$
* $`FAB_{16} = `$
* $`ABCD_{16} = `$
## Exercice 7
Convertir en base 10.
- Un homme a $`14_{16}`$ doigts, si on compte les orteils !
- En zone résidentielle, la vitesse est souvent limitée à $`1E_{16}`$ km/h.
- La vitesse sur les autoroutes françaises est limitée à $`82_{16}`$ km/h.
- Dans des conditions normales, l'eau bout à $`64_{16}`$ ºC.
- Le revenu annuel médian en France s'élève à $`6EA_{16}`$ euros.
- La population mondiale dépasse les $`1A0 000 000_{16}`$ habitants
## Exercice 8
Une recette de cuisine demande de la précision.

View File

@@ -116,7 +116,7 @@ Dans l'opération ci-dessus, nous avons un 1 pour le 9ième bit, mais comme notr
- Quel est le plus petit entier négatif que l'on peut représenter sur huit (8) bits ?
- Et quel est le le plus grand ?
# ✎ Remarque ✎:
# ✎ Remarque ✎ :
Plus généralement, nous pouvons dire que pour une représentation sur $`n`$ bits, il sera possible de coder des valeurs comprises entre $`-2^{n-1}`$ et $`+2^{n-1} - 1`$ .
@@ -125,3 +125,4 @@ Sachant que dans le langage C, les entiers signés sont codés sur 32 bits, dont
En Python, la taille des entiers est arbitraire (donc non fixe), ainsi les valeurs minimale et maximale des entiers ne dépend que de la quantité de mémoire disponible sur votre machine.
Néanmoins, on dispose de la bibliothèque _numpy_ qui permet de forcer une représentation sur 8 bits, par exemple, à l'aide de la fonction *int8*

View File

@@ -0,0 +1,38 @@
# Exercices
## Exercice 1
Donner la représentation binaire en complément à 2 des entiers relatifs suivants sur 8 bits: 25, -30, -124,100
## Exercice 2
Soit le nombre écrit en binaire en complément à 2: $`00110110`$. Donner le signe de ce nombre. Ecrire en binaire l'opposé de ce nombre.
## Exercice 3
Peut-on écrire un nombre en binaire en complément à 2 sur 16 bits ? Si oui, donner un exemple de nombre négatif.
## Exercice 4
1. L'ours polaire peut atteindre 26m de profondeur et l'orque 109m. Donner les représentations en binaire en complément à 2 sur 8 bits de ces profondeurs.
Quelles opérations permet de vérifier l'exactitude de vos calculs ?
2. Le zéro absolu est la température la plus basse qui puisse exister. Selon un accord international, la valeur du zéro absolu est fixée à 273,15 °C. Nous allons l'arrondir à -273°C. Combien de bits sont nécessaires pour le représenter en binaire en complément à 2 ? Donner sa représentation binaire sur le nombre de bits identifiés.
3. Le point le plus profond atteint par un homme en plongée sous-marine est de $`1010110100_2`$. Donner sa représentation en décimale.
4. La température minimale $`T_{min}`$ jamais observée en europe est $`1000110`$. Sans calculer la valeur en décimale donner à quelle température minimale puissance de 2 $`T_k`$, $`T_{min} > T_k`$.
## Exercice 5
Soit les nombres écrits en binaire en complément à 2 sur 8 bits: $`a=10101010`$ et $`b=01101101`$. Calculer $`a+b`$ en binaire. Ecrire $`a`$ et $`b`$ en décimal et vérifier le résultat de votre addition.
## Exercice 6
Soit les nombres écrits en binaire en complément à 2 sur 8 bits: $`c=10001011`$ et $`d=00010101`$. Calculer $`c+d`$ en binaire. Ecrire $`c`$ et $`d`$ en décimal et vérifier le résultat de votre addition.
## Exercice 7
Soit $`e=10011100`$ et $`f=00010101`$ en binaire signés sur 8 bits. Calculer $`e-f`$ en binaire et en décimal. Que constatez vous?
Calculer $`c-d`$ (cf exercice 5) en binaire et en décimal. Que constatez-vous? Pourquoi ?

View File

@@ -0,0 +1,283 @@
# Représentation des décimaux : les flottants
## 1. Attendus
| Contenus | Capacités attendues |
| :--: | :-- |
| Représentation approximative des nombres réels : notion de nombre flottant | Calculer sur quelques exemples la représentation de nombres réels : 0.1, 0.25 ou 1/3. |
## 2. Contexte
Nous avons appris à encoder des nombres entiers naturels, et relatifs, et nous avons vu que les limites physiques des machines imposaient des limites sur l'étendue des valeurs. Par exemple, sur un octet on dispose de $`2^8 = 256`$ valeurs distinctes qui permettent d'encoder:
- des nombres entiers naturels entre 0 et 255.
- des nombres entiers relatifs entre -128 et 127.
Maintenant que nous allons tenter de coder les réels, les limites de notre machine vont encore entraîner des limites sur l'étendue des valeurs, mais également sur la __précision des valeurs__.
### 2.1. À Faire
1. effectuez le calcul $`0.2 + 0.1`$ en Python :
```python
>>> 0.2 + 0.1
???
```
2. testez l'égalité suivante :
```python
>>> 0.2 + 0.1 == 0.3
???
```
> **Il n'est pas possible de coder un nombre décimal en valeur exacte en base 2**.
>
> **On obtient une approximation du nombre décimal, et non le nombre en lui même.**
>
> **Cette approximation est appelée _nombre en virgule flottante_ et correspond au type _float_ en Python.**
Ainsi, un calcul avec des nombres à virgule ne peut-être qu'__approximatif__. Cependant plus on augmente la taille du registre du processeur et plus nous pourrons représenter de valeurs, et plus nos calculs gagneront en précision.
## 3. Codage de la virgule
Il existe deux façons de coder les nombres réels, en virgule fixe ou virgule flottante.
### 3.1. Virgule fixe
Le codage en __virgule fixe__ consiste à garder __un nombre fixe de chiffes après la virgule__.
Pour une représentation sur $`n`$ bits, on fixe $`e`$ bits pour la partie entière et $`v`$ bits pour la partie décimale où $`e + v = n`$.
__Exemple__ : Sur un octet, on peut utiliser 4 bits pour la partie entière et 4 bits pour la partie décimale.
Ainsi, `0101 1011` a pour valeur : $`2^2 + 2^0 + 2^{-1} + 2^{-3} + 2^{-4} = 4 + 1 + 0.5 + 0.125 + 0.0625 = 5.6875`$
Cest extrêmement simple. Cette manière de faire sappelle virgule fixe, car la position de la virgule est connue davance.
Linconvénient de cette méthode est que, pour un nombre avec peu de chiffres après la virgule, on perd un espace de stockage significatif. Si le nombre en question est `0110 1000`, on perd trois bits “inutilement”.
#### 3.1.1. À Faire
Représenter les valeurs suivants sur 8 bits, en virgule fixe :
1. 7,75
2. 0,1
### 3.2. Virgule flottante
#### 3.2.1. Notation scientifique
Cette écriture se base sur la notation scientifique des nombres : $`\pm a \times 10^n`$ où $`1 \le a \lt 10`$ et $`n \in \mathbb{Z}^*`$
Par exemple :
- 12 s'écrit : $`1,2 \times 10^1`$
- -85 s'écrit : $`-8,5 \times 10^1`$
- 0,0123 s'écrit : $`1,23 \times 10^{-2}`$
Le terme __exposant__ correspond à la puissance de 10, et le terme __mantisse__ correspond à la partie décimale. Ainsi, dans « 1,23 ×102 » :
- la mantisse (ou significande) est « 1,23 » ;
- l'exposant est « -2 ».
##### 3.2.1.1. À Faire
Exprimez les nombres suivants en notation scientifique :
- La distance $`d`$ entre la Lune et la Terre est de 384 400km
- Le poids $`p`$ du moustique Tigre est d'environ 0, 000 001 07kg.
#### 3.2.2. Notation scientifique binaire
Un nombre binaire à virgule de quatre chiffres $`n_1n_0,n_{-1}n_{-2}`$ correspond au nombre décimal $`n_1 \times 2^1 + n_0 \times 2^0 + n_{-1} \times 2^{-1} + n_{-2} \times 2^{-2}`$.
On peut ainsi avoir une notation scientifique binaire : $`n_1n_0,n_{-1}n_{-2}`$ en binaire peut se noter $`n_1,n_0n_{-1}n_{-2} \times 2^1`$.
Par exemple :
- $`11_2 = 1,1_2 \times 2^1`$
- $`0,11_2 = 1,1_2 \times 2^{-1}`$
_N.B : Dans le cas de la notation scientifique binaire, le nombre avant la virgule doit être compris entre $`1_2`$ inclus et $`10_2`$ exclus (c'est-à-dire 2 exclus), c'est-à-dire que sa partie entière est nécessairement 1._
#### 3.2.3. Principe du codage en virgule flottante
Un nombre flottant est formé de trois éléments : la mantisse, l'exposant et le signe.
$$
\begin{aligned}
s.m \times 2^e
\end{aligned}
$$
![](./assets/virgule_flottante.svg)
- Le bit de poids fort $`s`$ est le bit de __signe__ : si ce bit est à 1, le nombre est négatif, et sil est à 0, le nombre est positif.
- Les $`e`$ bits suivants représentent l'__exposant biaisé__ (sauf valeur spéciale),
- Les $`m`$ bits suivants ($`m`$ bits de poids faible) représentent la __mantisse__.
__Exemple__ :
Supposons un nombre flottant codé sur un octet utilisant 1 bit de signe, 3 bits pour l'exposant et 4 bits pour la mantisse: `1 101 1011`
- $`s`$ est le signe représenté par le bit de poids fort. Notre codage représente donc un nombre négatif.
- $`e`$ est l'exposant biaisé, représenté par un entier relatif décalé et non en complément à 2.
- Ce décalage est de $`2^{|e|-1} - 1`$ ($`|e|`$ représente le nombre de bits utilisé pour coder l'exposant).
- L'exposant a pour valeur $`101`$ codé sur 3 bits. Il doit être décalé de $`2^2 - 1 = 3`$.
- Ainsi, puisque $`101_2 = 5_{10}`$, l'exposant $`101`$ correspond à un exposant de $`5 - 3 = 2`$.
- $`m`$ est la mantisse, elle représente en binaire uniquement les chiffres après la virgule.
- Dans notre exemple, la mantisse est $`1011`$,
- Soit $`m = 1 + 1 \times 2^{-1} + 1 \times 2^{-3} + 1 \times 2^{-4} = 1 + \frac{1}{2} + \frac{1}{8} + \frac{1}{16} = 1,6875`$
Le code `1 101 1011` sur un octet utilisant 1 bit de signe, 3 bits pour l'exposant et 4 bits pour la mantisse représente donc: $`-1,6875 \times 2^2 = -6,75`$
## 4. La norme IEEE 754
> L'__IEEE 754__ est une norme pour la représentation des nombres à virgule flottante en binaire. Elle est la norme la plus employée actuellement pour le calcul des nombres à virgule flottante dans le domaine informatique.
Cette norme définit notamment 2 formats pour représenter des nombres à virgule flottante:
- _simple précision_ (32 bits : 1 bit de signe, 8 bits d'exposant (-126 à 127), 23 bits de mantisse),
![](./assets/ieee_754_simple.svg)
- _double précision_ (64 bits : 1 bit de signe, 11 bits d'exposant (-1022 à 1023), 52 bits de mantisse)
![](./assets/ieee_754_double.svg)
### 4.1. Valeurs remarquables
Chaque norme défini aussi des valeurs spéciales, par exemple en double précision:
- le zéro positif: +0 = `0 00000000000 0000000000000000000000000000000000000000000000000000`,
- le zéro négatif: -0 = `1 00000000000 0000000000000000000000000000000000000000000000000000`,
- l'infini positif: +∞ = `0 11111111111 0000000000000000000000000000000000000000000000000000`,
- l'infini négatif: +∞ = `1 11111111111 0000000000000000000000000000000000000000000000000000`
### 4.2. Impossibilité de coder tous les nombres réels
Voici lécriture binaire en format double précision de deux flottants.
| Nombre flottant | Représentation format double précision (mantisse sur 23 bits) |
| :--: | :--: |
| $`2.0^{(1)}`$ | `0 10000000 00000000000000000000000` |
| $`2.000000238418579^{(2)}`$ | `0 10000000 00000000000000000000001` |
Calcul de (1) :
```math
\begin{aligned}
n & = s.m \times 2^e \\
e & = e_{biaisé} - décalage \\
e_{biaisé} & = 10000000_2 = 2^7 \\
décalage & = 2^{8 - 1} - 1 \\
e & = 2^7 - (2^7 - 1) \\
m & = 1 + 0 \\
n & = 1 \times 2^1 = 2.0
\end{aligned}
```
Calcul de (2) :
```math
\begin{aligned}
n & = s.m \times 2^e \\
e & = e_{biaisé} - décalage \\
e_{biaisé} & = 10000000_2 = 2^7 \\
décalage & = 2^{8 - 1} - 1 \\
e & = 2^7 - (2^7 - 1) \\
m & = 1 + 2^{-23} \\
n & = (1 + 2^{-23})\times 2^1 = 2 + 2^{-22} = 2.000000238418579
\end{aligned}
```
On comprend aisément quil ny a pas de flottant entre 2.0 et 2.000000238418579.
Le flottant 2.000000238418579 est donc représenté comme le suivant de 2.0.
La précision possible avec une mantisse sur 23 bits se situe au niveau dernier bit qui vaut
$`2^{-23}`$ . On ne peut pas trouver un flottant compris entre les deux.
### 4.3. Conclusion
Les nombres flottants sont une représentation approximative des nombres réels dans un ordinateur. En particulier, il nest pas possible de représenter de manière exacte en machine tous les nombres réels. La manipulation de nombres réels par un langage informatique est donc à prendre avec précaution car elle peut engendrer des résultats surprenants, en particulier il ne faut jamais tester légalité entre deux flottants.
## 5. Exercices
### 5.1. Exercice
On considère des nombres flottants encodés sur un octet avec dans l'ordre:
- 1 bit de signe,
- 3 bits d'exposant,
- 4 bits de mantisse.
1. Trouver les nombres à virgule représentés par les mots binaires suivant:
- `0111 1000`
- `1001 0001`
2. Donner les représentations binaires des nombres flottants suivants:
- 2,5 (qui est égal à $`1,25 \times 2`$).
- -1,125.
3. Avec cet encodage à 8 bits:
- Quel est le plus grand nombre à virgules que l'on peut représenter ?
- Quel est le plus petit nombre à virgule, donc négatif ?
- Quel est le plus petit nombre à virgule strictement positif que l'on peut représenter ?
### 5.2. Exercice
1. Quelles sont les valeurs attendues des instructions suivantes ?
```python
>>> # Cas 1
>>> from math import sqrt
>>> sqrt(2.0)**2 == 2.00
???
```
```python
>>> # Cas 2
>>> 9007199254740992.0 + 1
???
```
```python
>>> # Cas 3
>>> 1.2 - 1.0
???
```
```python
>>> # Cas 4
>>> 0.5 - 0.2 - 0.2 - 0.1
???
```
```python
>>> # Cas 5
>>> 9007199254740992.0 + 1.0 + 1.0
???
```
```python
>>> # Cas 6
>>> 1.0 + 1.0 + 9007199254740992.0
???
```
2. Copier et exécuter les instructions précédentes et comparer avec les résultats attendus.
### 5.3. Exercice
On considère le programme suivant:
```python
a = 0.0
for loop in range(0,10):
a = a + 0.1
print(a)
```
1. Si l'on calculait sur des nombres rationnels exacts, que se passerait-il lors de l'exécution de ce programme ?
2. Écrire ce programme et l'exécuter. Que constate-t-on ?
3. Vérifier avec le convertisseur en ligne que la représentation binaire de 0,1 est `0 01111111011 1001100110011001100110011001100110011001100110011010`.
4. Quel nombre décimal cette représentation désigne-t-elle en réalité Quel nombre décimal cette représentation désigne-t-elle en réalité ? Expliquer le résultat obtenu.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 45 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 31 KiB

Some files were not shown because too many files have changed in this diff Show More