Sébastien Rey Coyrehourcq / IGR UMR IDEES ( 2012 - ... )
sebastien.rey-coyrehourcq@univ-rouen.fr
https://social.sciences.re/@SReyCoyrehourcq
Adrien Van Hamme / Université Paris 1 ( < 2023)
Robin Cura / Université Paris 1 ( 2024 - ... )
robin.cura@univ-paris1.fr
https://twitter.com/RobinCura
https://hnurl.fr/hjm7ia
Préparer le stage et les autres cours
Un autre regard sur la société
Algorithmie ?
Programmation Python ?
LE Langage de la géomatique
QGIS / ArcGIS / Webmapping
Muhammad Mūsā al-
Khuwārizmī (780 - 850)
« Abrégé du calcul par la restauration
et la comparaison » (~813-833)
« Livre de l’addition et de la soustraction selon le calcul indien (~825) »
« Codex Vigilanus » Espagne (~976)
Introduction aux chiffres arabes, empruntés aux indiens, traduction au XII ème siècle par Adélard De Bath sous le nom « Algoritmi de numero Indorum »
Ouvrage « fondateur de l'algèbre », traduit en latin au XII ème siècle en Espagne, par Robert de Chester
Brahmagupta
(598 ? -668 ? )
Mathématicien, Géographe, Astronome ...
Apparition chiffres arabes en occident
Apparitions chiffres arabes en Occident
définit le Zero (0),
algèbre 2nd degré, etc.
~ 5 siècles de diffusion
Un terme qui évolue avec le temps
Calcul
Méthodologie
Une méthode qui sert à résoudre un problème de façon systématique et en un nombre fini d’étapes
une suite d’action à accomplir séquentiellement, dans un ordre fixé
Un terme qui évolue avec le temps
Déterministe ou ?
Symbolique ou ?
Transmission orale
Ingrédients physique
Métiers à tisser et cartes perforés (~ 1725 Lyon)
lié à la mécanisation ~ 200 ans
A Jacquard loom showing information punch cards, Stephen C. Dickson, National Museum of Scotland, 2019 (Wikimedia Commons | CC BY-SA 4.0).
Text
Page of National Museum of Scotland.
Machine à taper les cartes perforées
lié à la mécanisation ~ 200 ans
24000 cartes ont été nécessaires pour ce portrait en soie, hommage à Jacquard (1839)
(small part of) Analytical Engine
(1834 - today? )
Charle Babbage (1791-1871)
Métiers à tisser et cartes perforés (~ 1725 Lyon)
lié à la mécanisation ~ 200 ans
Premier description d'algorithme pour l'Analytical Engine (1843)
lié à la mécanisation ~ 200 ans
Ada Lovelace portrait 1835
(1815 - 1852)
[...] the example of the calculation of Bernoulli's numbers exceeded the features of the machines as planned, but that Ada Lovelace was so confident on its usefulness, that she stuck to the published text and the example, possibly in order to influence the construction of a real machine [...] Rainer Glaschick
lié à la mécanisation ~ 200 ans
L'importance croissante des algorithmes a conduit à la naissance d'un nouveau domaine scientifique : l'algorithmique ou science des algorithmes en informatique
Donald Knuth
1968, premier volume
credit : Jill Knuth 1963
Turing, Minsky, Markov, Knuth, etc.
With more than one million copies in print, “The Art of Computer Programming” is the Bible of its field.
5 propriétés
Vers une nouvelle ère ?
The end of classical computer science is coming, and most of us are dinosaurs waiting for the meteor to hit.
Matt Welsh
On the Dangers of Stochastic Parrots: Can Language Models Be Too Big?
Emily Bender et Al.
🗲 VS 🗲
Science et Technique
Lerhoi-Gouran, Gilbert Simondon, Bernard Stiegler, Bruno Bachimont, Pierre Steiner
Jacque Ellul, Yvan Illich, Lewis Mumford, etc.
Techno-solutionisme
UTC Cos-tech
(ex github CoPilot
€€€ Microsoft €€€)
=> Stop the Hype : ChatGPT n'est pas et ne sera pas intelligent !
Voyons voir par l'exemple ...
Un lotissement de trois maisons doit être équipé d'eau, de gaz et d'électricité. La règlementation interdit de croiser les canalisations pour des raisons de sécurité. Comment faut-il faire ?
Voyons voir par l'exemple ...
Un lotissement de trois maisons doit être équipé d'eau, de gaz et d'électricité. La règlementation interdit de croiser les canalisations pour des raisons de sécurité. Comment faut-il faire ?
Voyons voir par l'exemple ...
Quels algorithmes pour découper une feuille en 16 cases de surfaces équivalentes ?
1
2
3
4
5
16
6
7
8
9
10
11
12
13
14
15
Src : Grokking Algorithm, MEAP Edition, A. Y. Bhargava
Voyons voir par l'exemple ...
Quels algorithmes pour découper une feuille en 16 cases de surfaces équivalentes ?
Src : Grokking Algorithm, MEAP Edition, A. Y. Bhargava
Voyons voir par l'exemple ...
Un voyageur de commerce doit visiter une et une seule fois un nombre fini de villes et revenir à son point d’origine. Trouvez l’ordre de visite des villes qui minimise la distance totale parcourue par le voyageur
Src : https://Interstices.info
Le problème du voyageur de commerce
A
C
B
D
7
5
7
8
6
5
Voyons voir par l'exemple ...
Un voyageur de commerce doit visiter une et une seule fois un nombre fini de villes et revenir à son point d’origine. Trouvez l’ordre de visite des villes qui minimise la distance totale parcourue par le voyageur
Src : https://Interstices.info
Le problème du voyageur de commerce
A
C
B
D
5
6
5
7
chemin optimal
pour n villes :
(4-1)!=1×2×3 = (6 / 2) = 3 chemins
abdc
bdca
abcd
Voyons voir par l'exemple ...
Étant donné plusieurs objets possédant chacun un poids et une valeur et étant donné un poids maximum pour le sac, quels objets faut-il mettre dans le sac de manière à maximiser la valeur totale sans dépasser le poids maximal autorisé pour le sac ?
Le problème du sac à dos
max 30 kg
13 kg
7€
12 kg
4€
8 kg
3€
10 kg
3€
Src : https://Interstices.info
Voyons voir par l'exemple ...
25 kg
11€
21 kg
10€
"approché"
"exacte"
(1) 0,54
(3) 0,33
(2) 0,37
| objets classés | escalade | outils | habits | musique |
|---|---|---|---|---|
| valeur | 7 | 3 | 4 | 3 |
| poids | 13 | 8 | 12 | 10 |
|
vp = valeur/poids |
0,54 | 0,37 | 0,33 | 0,30 |
21
31
35
tri et ajout dans l'ordre vp
Src : https://Interstices.info
(1) 0,54
Src : Grokking Algorithm, MEAP Edition, A. Y. Bhargava
merge-sort
src wikipedia
Entre 1971 et 2001, la densité des transistors a doublé chaque 1,96 année.
http://algorithm-wiki.org/
Around half of all algorithm families experience little or no improvement. At the other extreme, 14% experience transformative improvements, radically changing how and where they can be used.
Overall, we find that, for moderate-sized problems, 30%–43% of algorithmic families had improvements comparable or greater than those that users experienced from Moore’s Law and other hardware advances. Thus, this article presents the first systematic, quantitative evidence that algorithms are one of the most important sources of improvement in computing.
https://news.mit.edu/2021/how-quickly-do-algorithms-improve-0920
https://hnurl.fr/hjm7ia
2D, graphes, de multiples représentations...
pour plusieurs classes d'algorithmes applicables
Entrée
Sortie
Entrée
Sortie
Src : https://Interstices.info
Entrée
Sortie
0
-1
-2
0
-4
-1
-2
-3
-3
-2
0
-3
-4
-3
-2
-3
-4
-1
Entrée
Sortie
-1
0
0
-1
-2
cases
non accessibles
mur
marqué
condamné
vide
cases accessibles
G
H
D
B
G
H
D
B
G
H
D
B
Règle(s)
Move to
Paint
Exemple
G
H
D
B
Le Gerrymandering
Tim bernard lee (gauche), inventor of the WWW (1989)
Vint Cerf (droite), co-inventeur du protocole Tcp/Ip
Internet : 1969 - 2019 (50 ans en octobre)
World Wide Web : 1989 - 2019 (30 ans en octobre)
1ère couche : Infrastructures physiques
src : Rekazine
"LOGIN"
ex: TCP/IP
2 ème couche : Protocoles !
Résolution DNS
1.2.2.1
2.4.3.1
5.1.1.2
3.4.2.1
2.4.3.1
5.1.1.2
6.1.4.2
DNS
DNS
DNS
en.wikipedia.org = ?
see 2.4.3.1
DNS .org
see 5.1.1.2
DNS
wikipedia.org
see 6.1.4.2
DNS
xxx.wikipedia.org
en.wikipedia.org = 6.1.4.2
6.1.4.2
3.4.2.1
HTTP
Résolution HTTP (en théorie)
GET / /HTTP/1.1
Host: en.wikipedia.orgHTTP/1.1 200 OK
...
<html>
<head>
<title>Wikipedia EN</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>L'Etat et les administrations ...
L'Etat et les administrations ...
Le cas Google
Valeur (smiley) proportionnel au nombre de fois qu'un utilisateur est susceptible de passer sur une page en parcourant le graphe de façon aléatoire (wikipédia)
2011 - today
2012 - today
contenu des sites
~ 600 mises à jour / an + maj majeures
pratiques abusives
prediction
mot-clef
2013 - today
1997
ADS
« yield management », « ip tracking », « real time bidding / ad networks / programmatic / retargeting»
For as long as you’ve been using Google, Google has been building a “citizen profile” on you.
Patrick Berlinquette
Micro-Moments ...
An intent-rich moment when a person turns to a device to act on a need-to know, go, do, or buy.
Privacy only for the rich?
Privacy Washing !
Dark pattern at scale
Dark pattern after GDPR
Vers une réflexion éthique sur les algorithmes
We want legislation requiring that publicly financed software developed for the public sector be made publicly available under a Free and Open Source Software licence.
If it is public money, it should be public code as well.
L’essentiel du web n’a plus pour fonction principale de permettre à des hommes de publier et de relier des documents, mais de permettre à quelques multinationales de collecter l’information sur chacun de nous
Les algorithmes sont avant tout des solutions, mais ces solutions ne sont pas neutres. S’ils sont à l’origine de transformations radicales des notions de travail, de propriété, de gouvernement, de responsabilité, de vie privée et même d'humanité, c’est à nous de décider de quel côté faire pencher la balance.
http://publiccode.eu
Olivier Ertzscheid
Gilles Dowek & Serge Abiteboul
https://www.cnil.fr
Vers une réflexion éthique sur les algorithmes
Cathy O'Neil
Les algorithmes sont une arme de domination sociale
I would argue that one of the major problems with our blind trust in algorithms is that we can propagate discriminatory patterns without acknowledging any kind of intent.
Stéphane Bortzmeyer
Quelques exemples concrets du mouvement annoncé ...
www.etalab.gouv.fr &
"Loi république numérique 2016"
métropole de Nante
malgré encore quelques réticences de l'administration ...
Xavier Berne, pour next-impact, le 06/02/2020
Vers une réflexion éthique sur les algorithmes
Article(s) de Hubert Guillaud / Internet Actu
Github list of "Awfull AI"
Franken-algorithms: the deadly consequences of unpredictable code
Toward ethical, transparent and fair AI/ML: a critical reading list
Plateforme scientifique pour le développement de la transparence et de la redevabilité des algorithmes et des données
Ethique et Intelligence artificielle / CNIL
VICE Magazine's Algorithms issue
Vers une réflexion éthique sur les algorithmes
une nécessaire formation dès le plus jeune âge
For us, coding is not a set of technical skills but a new type of literacy and personal expression, valuable for everyone, much like learning to write. We see coding as a new way for people to organize, express, and share their ideas
La pensée informatique est un processus de réflexion qui visualise tant la formulation d'un problème que la repré-sentation de sa solution de façon à ce qu'elles puissent être exécutées par des humains ou des machines
I knew that in the science and engineering disciplines, computation would be the third pillar of the scientific method, along with theory and experimentation. […] And today, with the advent of massive amounts of data, researchers in all disciplines — including the arts, humanities and social sciences — are discovering new knowledge using computational methods and tools.
Jeannette Wing 2006
Resnick 2015
Jeannette Wing 2016
scratch
pour autonomiser (empowerment) les futurs citoyens
La Free Software Foundation Europe est une association à but non lucratif qui donne aux utilisateurs les moyens de contrôler la technologie. Les logiciels prennent une part toujours plus importante dans tous les aspects de nos vies. Il est donc important que cette technologie renforce nos libertés plutôt que les limite.
Les Logiciels Libres donnent à tous les droits d'utiliser, comprendre, modifier et partager les logiciels. Ces droits permettent de soutenir d'autres droits fondamentaux tels que la liberté d'expression, la liberté de la presse et la vie privée.
pour autonomiser (empowerment) les futurs citoyens
The Electronic Frontier Foundation is the leading nonprofit organization defending civil liberties in the digital world. Founded in 1990, EFF champions user privacy, free expression, and innovation through impact litigation, policy analysis, grassroots activism, and technology development. We work to ensure that rights and freedoms are enhanced and protected as our use of technology grows.
1990 - today
La Quadrature du Net est une association qui défend nos droits et libertés fondamentales à l'ère du numérique et propose des alternatives pour un internet libre, décentralisé et émancipateur.
De quelques briques de bases à ...
152 Kbytes mémoire
Margaret Hamilton
~ 350 personnes
Assembleur
1965 NASA
... un allunissage sur la lune ...
Iphone 16 pro => ~ 2 TFlops
AGC => ~ 14 Flops
Quelques pistes primordiales
Phase de conception
src : xkcd
Ok, mais comment se comprendre ?
L'ambiguité des langues naturelles
| Papy (1954) | Papy & Lamblin (1972) | Claude Gilbert (1991) | Jean Balczesak (2008) |
|---|---|---|---|
| N'est point mort qui peut éternellement gésir; Au cours des âges la mort même peut mourir. | N'est pas mort ce qui semble à jamais dormir, En d'étranges éternités, la mort même peut mourir. | N'est pas mort ce qui à jamais dort. Et au long des siècles peut mourir même la mort. | N'est pas mort ce qui à jamais dort. Et au long des ères peut mourir même la mort. |
| Le Dain (2012) | Camus (2013) | Marcheteau & Savio (2013) | François Bon (2015) |
| N'est pas mort ce qui à jamais dort. Et au fil des âges peut mourir même la mort. | N'est pas mort ce qui peut à jamais gésir, Et au fil d'ères étranges, même la mort peut périr |
N'est pas mort ce qui peut reposer éternellement, Et à travers d'étranges éternités, la mort même peut mourir. |
N'est pas mort ce qui éternellement repose Et dans les longues éternités même la mort peut mourir. |
That is not dead which can eternal lie,
And with strange aeons even death may die.
Necronomicon, 1921
Le recours aux cycles de vie logiciels
Conception
Implémentation
Le recours aux cycles de vie logiciels
cascade
cycle en V
Agile
L'importance du MVP "Minimum Viable Product"
Du langage naturel au langage machine
Du langage naturel au langage machine
Langues naturelles
Formalismes
Languages informatiques
Language
machine
Les diagrammes d'activités
Src : Randal Munroe (xkcd)
Les diagrammes d'activités
Les diagrammes d'activités
Les diagrammes d'activités
Les diagrammes d'activités
A vous !
LHR + PLEDGE en diag. activité
Les "blocs" de pseudo-code
S'abstraire des différences entres langages
java
python
...
Le pseudo-code
Python
Java
double a = 3.5;
int b = 2;
int c;
c = a + b; // Erreur
c = a + (int) b; // oka = 3.5
b = 2
c = a + b
Le pseudo-code
type dynamique
type statique
etiquette
recopie
b = [ 5,2 ]
a = b
b = b.append(3)
tableau dynamique
tableau statique
int[] a = {5,2};
a.add(3); // Erreur
a = 5
b = 2
a = b
int a = 5;
int b = 2;
a = b;
a
b
a
b
src : http://rosettacode.org
Du langage naturel au langage machine
Langues naturelles
Formalismes
Languages informatiques
Language
machine
Impératif
Déclaratif
HOW
WHAT
Mémoire (State) qui varie dans le temps
Focus sur la succession d'étapes à réaliser
Focus sur le résultat
Transparence référentielle ( x=y implique f(x)=f(y) )
SELECT * FROM Users WHERE Country=’France’;Ordre est peu important
Ordre est important
Sql, Haskell, Html, etc.
Python, Java, C, etc.
l = [2,3]
sum = 0
for e in l:
sum = sum + e
recursiveSum :: [Int] -> Int
recursiveSum [] = 0
recursiveSum (x:xs) = x + recursiveSum xsPeter Van Roy 2007
Wikipedia
Un paradigme est une manière de programmer un ordinateur basé sur un ensemble de principes ou une théorie
Indépendance
Fermeture
Enregistrement
etc...
~ 29 paradigmes
Guido Von Rossum (2006)
Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. [...] I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus).
An easy and intuitive language just as powerful as major competitors
Open source, so anyone can contribute to its development
Code that is as understandable as plain English
Suitability for everyday tasks, allowing for short development times
src : Darpa, 1999, « Computing Programming for Everybody »
src : wikipédia
THE UGGLY
THE GOOD
166,284 projects / 1,199,440 releases
1,687,776 files / 297,563 users
&
Incredible grow of python
Langage of the year 2019 ( tiobe index)
De BASIC à Python ...
Les structures finies : les variables
variable
Une chaîne de texte alphanumérique non accentué qui commence par une lettre
Sensible (ou pas) à la casse
Contenant des symboles (ou pas)
microprocesseur
mémoire
stockage
Les éléments principaux d'un ordinateur
carte mère
Les structures finies : les variables
variable
calculs
fichiers
inputs
tableaux
objets
affecter
type de valeur(s) possible(s)
pseudo-code pour les variables
# Initialisation des variables par affectation d’une valeur
# Declarer et Affecter une variable de type numérique
Variable v1 Numerique
v1 = 42
# Declarer et Affecter une variable de type texte
Variable v2 Charactere
v2 = "Hello World"
# Declarer et Affecter une variable de type
# booléen (true ou false)
Variable v3 Booleen
v3 = TRUEExercice 1
#Quelles seront les valeurs des variables A et B ?
Variable A, B Numerique
A = 5
B = 2
A = B
B = A
Exercice 1
# Quelles seront les valeurs des variables A, B et C ?
Variable A, B, C Numerique
A = 5
B = 3
B = B * 2
C = B + A
A = 2
C = B - A
Exercice 1
# Commment échange-t-on des valeurs ?
Variable A, B Numerique
A = 5
B = 3
? Suite ?Stocker des valeurs utilisateurs
Variable nom Charactere
Variable age, tel Numerique
nom = SAISIE("Nom ?")
tel = SAISIE("Téléphone ?")
age = SAISIE("Age ?")
nom
tel
age
Afficher le contenu des variables
Variable nom Charactere
Variable age, tel Numerique
nom = SAISIE("Nom ?") # Seb
tel = SAISIE("Téléphone ?") #5567
age = SAISIE("Age ?") #34
AFFICHE("Tél = " + tel)
tel
5567
"5567"
conversion et concatenation
"Tél = 5567"
Conditions / Alternatives
...
SI [EXPRESSION] == TRUE ALORS
INSTRUCTION
FIN SI
...
ex : (2 + 2 <= 4)
jump
Conditions / Alternatives
a = 3
SI [EXPRESSION] == TRUE ALORS
INSTRUCTIONS
FIN SI
...
ex : (2*a <= 4)
jump
jump
Conditions / Alternatives
Variable age,n Numerique
n = 18
age = SAISIE("Quel est votre age ?")
SI age <= 18 ALORS
# traitement
FIN SI
Conditions / Alternatives
a = "A"
SI [EXPRESSION] == TRUE ALORS
INSTRUCTIONS
SINON SI [EXPRESSION] == TRUE
INSTRUCTIONS
SINON
INSTRUCTIONS
FIN SI
ex : (a != "A")
jump
jump
ex : a == "B"
Conditions / Alternatives
Variable vitesse, max Numerique
max = 50
Vitesse = SAISIE("Quelle est votre vitesse ?")
SI (vitesse <= max) == True ALORS
AFFICHE("Pas de contrôle routier")
SINON SI (vitesse > max + 10) == True ALORS
AFFICHE("Je verbalise !")
SINON
AFFICHE("Je fais un rappel à l’ordre...")
FIN SI
Boucle 1
...
POUR [VARIABLE] DE 0 À 2
INSTRUCTIONS
FIN POUR
...
ex : i = 0
i = i +1
Boucle 1
Variable i, n as Numerique
n = 15
POUR i DE 0 A n
# traitement
FIN POUR
i = i + 1 implicite
Boucle 2
i = 0
TANT QUE [EXPRESSION] == TRUE
INSTRUCTIONS
FIN TANT QUE
...
ex : i < 3
ex : i = i +1
MODIFICATEUR
i = 1
i = 2
i = 3
Boucle 2
Variable i Numerique
i = 15
TANT QUE i > 0 == TRUE
#traitement
i = i - 1
FIN TANT QUE
modificateur explicite !
| C2 True | C2 False | |
|---|---|---|
| C1 True | ||
| C1 False |
C1 AND C2
| C2 True | C2 False | |
|---|---|---|
| C1 True | ||
| C1 False |
C1 OR C2
| C1 True | |
|---|---|
| C1 False |
NOT C1
True
False
False
False
True
True
True
False
True
False
Variable X Booleen
Variable A, B Numerique
X = True
A = 15
B = 5
# C1 AND ( C2 OR C3 )
SI ( A < B ET (X == True OU A < 16 ) ) == True ALORS
AFFICHE("Le premier test vaut true")
SINON
AFFICHE("Le premier test vaut false")
FIN SI
# ( C1 AND C2 ) OR C3
SI ( ( A < B ET X == True ) OU A < 16) == True ALORS
AFFICHE("Le second test vaut true")
SINON
AFFICHE("Le second test vaut false")
FIN SI
# Réaliser l'exercice 1 sur papier
Déterminer pour chaque ligne si elle va afficher TRUE ou FALSE
1- Lancez le programme le plus souvent possible
2 - Prenez des pauses, dormez, mangez, aérez vous
3 - Entraidez vous, expliquez votre problème aux autres
7 - pratiquez le plus souvent possible !
4 - MVP !! Simple avant complexe
5 - Documentez votre code
6 - N'ayez pas peur, nous aussi on ne comprend pas tout
If you call your variables a, b, c, then it will be impossible to search for instances of them using a simple text editor. Further, nobody will be able to guess what they are for. If anyone even hints at breaking the tradition honoured since FØRTRAN of using i, j, and k for indexing variables, namely replacing them with ii, jj and kk, warn them about what the Spanish Inquisition did to heretics.
src : unmaintainable-code
# Réaliser les exercices sur papier
Écrire les 2 programmes 2a, 2b, 2c en pseudo code
# Consulter le support de cours HTML
- Le langage Python > … > En utilisant l’IDE Pycharm
- Indentation
- Variables, Objets et références
- Commentaires
- Input / Output
- Structure de Contrôle > Conditions
- Structure de Contrôle > Boucles > Définition (uniquement)
# Implémenter en Python avec PyCharm
Écrire les programmes 2a, 2b, 2c en Python
import random
a = random.randint(0,5)
b = random.randint(0,5)
if a >= 3:
print("a = ", a, " superieur a 3")
if b >= 2:
print ("b = ", b, " superieur a 2")
b = b * 2
else:
print("a = ", a , "<= 3")
print("b = ", b)
Structures indexées : Tableaux / Collections
Exemples de variations possibles par types
typage statique homogène
typage dynamique hétérogène
object
integer
string
typage statique hétérogène
Array (java)
Array[Any] ou HList (scala)
List (python)
Array<?> (java)
Array (Ruby)
[ ] (C)
Structures indexées : Tableaux / Collections
taille fixe
taille dynamique
Array (java)
List (python)
Array (Ruby)
[ ] (C)
+
Exemples de variations par taille
old
new
copy
Structures indexées : Tableaux / Collections
immutable / immuable
mutable
Exemples de variations par nature
old
new
copy to
exchange
Structures indexées : Tableaux / Collections
1 dimension
Exemples de variations par dimensions
2 dimensions
3 dimensions
n dimensions
?
Structures indexées : Tableaux / Collections
error
error
Pseudo-code tableaux (taille fixe, typés statiquement)
Variable Tableau tableauNoms[3] Charactere
Variable Tableau tableauChiffre[2] Numerique
tableauNoms[ ] = "Pierre"
tableauNoms[ ] = "Gérard"
tableauNoms[ ] = "Paul"
AFFICHE("La valeur du tableau à l'indice 0 est " + tableauNoms[ ] )
tableauChiffre[ ] = 4
tableauChiffre[ ] = 8
AFFICHE("La valeur du tableau à l'indice 1 est " + tableauChiffre[ ] )
| "Pierre" | "Gérard" | "Paul" |
| 4 | 8 |
Tableaux uni-dimensionnel (taille fixe)
exemple 1
Variable Tableau tableauC[] Numerique
tableauC.APPEND(1)
tableauC.APPEND(2)
Variable Tableau tableauC[] Numerique
Variable Tableau tableauA[2] Numerique
Variable Tableau tableauB[1] Numerique
tableauA[0] = 1
tableauA[1] = 1
tableauB[0]= 2
# tableauC contiendra deux tableaux numérique [ [1,1] , [2] ]
tableauC.APPEND(tableauA)
tableauC.APPEND(tableauB)
pas de dimension indiqué
ajoute
Tableaux uni-dimensionnel (taille dynamique)
Pseudo-code tableaux (taille dynamique, typés statiquement)
exemple 2
tableauA = [1,1,2] en python
tableauNoms = ["Pierre", "Gérard", "Paul"]
print("Valeur à l'indice 0", tableauNoms[0] )
tableauChiffres = [4,8]
print("Valeur à l'indice 1", tableauChiffres[1] )Equivalents python des exemples
tableauC = []
tableauC.append(1)
tableauC.append(2)
print(tableauC)
tableauC = []
tableauA = [1,1]
tableauB = [2]
tableauC.append(tableauA)
tableauC.append(tableauB)
print(tableauC)exemple 2
exemple 1
tableauNoms = ["Pierre", "Gérard", "Paul"]
print("Valeur à l'indice 0", tableauNoms[0] )
tableauChiffres = [4,8]
print("Valeur à l'indice 1", tableauChiffres[1] )
tableauChiffres.append(9)
print("Valeur à l'indice 2", tableauChiffres[2] )exemple 1 bis
En python tous les tableaux (listes) sont de tailles dynamiques
Construire et parcourir des tableaux uni-dimensionnels
Variable Tableau notes[5] Numérique
Variable moyenne, somme Numérique
POUR i DE 0 A 4
notes[ i ] = Saisie ("Entrez la note n " + i)
Fin Pour
somme = 0
POUR i DE 0 A 4
somme = somme + notes[ i ]
Fin Pour
moyenne = somme / 5
Afficher ("La moyenne des notes est : " + moyenne)
Pseudo-code
Construire et parcourir des tableaux uni-dimensionnels
notes = []
for i in range(5):
notes.append(int(input("Saisir la note")))
print(notes)
somme = 0
for i in range(5):
somme = somme + notes[i]
moyenne = somme / 5
print("Moyenne = ", moyenne)
Equivalent Python
# Réaliser les exercices sur papier
Écrire les 4 programmes 3a, 3b, 3c, 3d, 3e en pseudo code
# Consulter le support de cours HTML
- Les listes
- Structure de Contrôle > Boucles > parcours de liste & construire une liste
# Implémenter en Python avec PyCharm
Écrire les 3 programmes 3a, 3b, 3d, 3e en Python
Écrire le programme du jeu Pendu (voir support de cours)
Structures indexées : Tableaux / Collections
| 4 | 6 | 3 |
| 2 | 1 | 3 |
| 4 | 6 | 3 |
| 2 | 1 | 3 |
4
6
3
2
1
3
Structures indexées : Tableaux / Collections
| 4 | 6 | 3 |
| 2 | 1 | 3 |
4
6
3
2
1
3
| 4 | 6 | 3 |
| 2 | 1 | 3 |
| 1 | 0 |
0
1
error
| 1 | 0 |
Tableaux statiques, typés multi-dimensionnels
Variable Tableau t[3][2] Numerique
t[0][0] = 4
t[0][1] = 2
t[1][0] = 6
t[1][1] = 5
t[2][0] = 3
t[2][1] = 7
#Affiche la ligne 1
Affiche (" ligne 1 = " + tableauC[0][0] + tableauC[0][1] )
#Affiche la ligne 3
Affiche (" ligne 3 = " + tableauC[2][0] + tableauC[2][1] )
| 4 | 2 |
| 6 | 5 |
| 3 | 7 |
Tableaux statiques, typés multi-dimensionnels
t = [[4,2],[6,5],[3,7]]
#Affiche la ligne 1
print(" ligne 1 = " , t[0][0], " - " , t[0][1] )
# Affiche la ligne 3
print(" ligne 3 = ", t[2][0] , " - ", t[2][1] )Equivalent python : liste (tableau dynamique)
Construire et parcourir des tableaux multi-dimensionnels
Variable Tableau notes[4][3] Numérique
# 1 ligne par eleve
POUR i DE 0 A 3
notes[i][0] = SAISIE("Entrez la note n° 1 " )
notes[i][1] = SAISIE("Entrez la note n° 2 ")
notes[i][2] = SAISIE("Entrez la note n° 3 " )
FIN POUR
# On affiche le tableau cellule par cellule
POUR i DE 0 A 3
AFFICHE ( " Étudiant numéro " + i )
POUR j DE 0 A 2
AFFICHE ( " Note " + j + " = " + notes[i][j] )
FIN POUR
notes = []
# 1 ligne par élève
for i in range(4):
ligneEleve = []
ligneEleve.append(int(input("Entrez la note n°1 : ")))
ligneEleve.append(int(input("Entrez la note n°2 : ")))
ligneEleve.append(int(input("Entrez la note n°3 : ")))
notes.append(ligneEleve)
print(notes)
for l in range(3): # ligne
print ( "Étudiant numéro" , l )
for c in range(2): # colonne
print ( " Note " , c , " = " , notes[l][c] )Équivalent Python : listes imbriquées
Construire et parcourir des tableaux multi-dimensionnels
# Réaliser les exercices sur papier
Écrire le programme 3f en pseudo code
# Implémenter en Python avec PyCharm
Écrire le programme 3f en Python
Écrire le programme du jeu Bataille Navale (voir support de cours)
Des fonctions prédéfinies aux fonctions personnalisées…
Dans une application, on peut avoir à procéder aux mêmes traitements, ou à des traitements similaires, à plusieurs endroits de son déroulement
Que peut on faire ?
Modern Times - Charlie Chaplin
Des fonctions prédéfinies aux fonctions personnalisées…
Copier / Coller le code ?
Fiabilité ?
Flexibilité ?
Lisibilité ?
Ligne d'assemblage
Modern Times - Charlie Chaplin
Des fonctions prédéfinies aux fonctions personnalisées…
Des fonctions prédéfinies aux fonctions personnalisées…
Des fonctions prédéfinies aux fonctions personnalisées…
Des fonctions prédéfinies aux fonctions personnalisées…
Des fonctions prédéfinies aux fonctions personnalisées…
Des fonctions prédéfinies aux fonctions personnalisées…
Des fonctions prédéfinies aux fonctions personnalisées…
f
Si tu entre quelque chose, tu as quelques chose en sortie
input
output
Pour chaque entrée, une seule sortie est possible
Le comportement est systématiquement le même
Des fonctions prédéfinies aux fonctions personnalisées…
f
input f
output g
g
output f
input g
Chaînage de fonctions
fonctions imbriqués
input f
output f
g
f
g(f(x))
Des fonctions prédéfinies aux fonctions personnalisées…
input(s) ?
f
output ?
variable
calculs
fichiers
inputs
tableaux
objets
affecter
type de valeur(s) possible(s)
fonctions
(
)
,
,
,
...
f
arguments / paramètres
Des fonctions prédéfinies aux fonctions personnalisées…
resultat1
affecter
somme( 3 , 2 )
1 - Définition de la fonction
somme( x,y ) = x + y
2 - Appel(s) de la fonction
code inactif tant que pas appelé
resultat2
affecter
somme( , 2 ) ; a=2;
a
resultat3
affecter
somme( * , somme( , 5) ) ; a =2; b = 4
a
b
b
Anatomie pseudo-code et python
FONCTION [NOM] ( [PARAMETRES] )
[TRAITEMENT]
RENVOIE [VARIABLE]
FIN FONCTION
VARIABLE z Numerique
FONCTION somme (X, Y)
VARIABLE sum Numerique
sum = X + Y
RENVOIE sum
FIN FONCTION
z = 3
AFFICHE( APPEL somme(z, 2) )
def somme (X, Y) :
sum = X + Y
return sum
z = 3
print(somme(z, 2))
exemple python
syntaxe générale pseudo-code
exemple pseudo-code
L'ordre des paramètres
compte !
Déroulement d'une imbrication de fonctions
VARIABLE resultat Numerique
FONCTION calcul1 (A, B)
VARIABLE C NUMERIQUE
C = APPEL calcul2(B, 2)
C = APPEL calcul2(C, 3)
RENVOIE C * A
FIN FONCTION
resultat = APPEL calcul1 (5, APPEL calcul2(4, 3))
AFFICHE(resultat)
FONCTION calcul2 (A, M)
RENVOIE (A * M)
FIN FONCTION
Déroulement d'une imbrication de fonctions
# fonctions
def calcul2(A, M):
return (A*M)
def calcul1(A, B):
C = calcul2(B, 2)
C = calcul2(C, 3)
return C * A
# programme principal
resultat = calcul1(5, calcul2(4, 3))
print(resultat)# Réaliser les exercices sur papier
Écrire les programmes 4a et 4b en pseudo code
# Consulter le support de cours HTML
- Les fonctions
# Implémenter en Python avec PyCharm
Écrire les programmes 4a et 4b en Python
Écrire le programme correspondant aux salles de Mario (une fonction par salle)
Ajouter au moins une fonction à votre Bataille Navale