Algorithmique et programmation
Sébastien Rey Coyrehourcq / IGR UMR IDEES
sebastien.rey-coyrehourcq@univ-rouen.fr
https://social.sciences.re/@SReyCoyrehourcq
@adrienvh
adrien.van-hamme@univ-paris1.fr
Adrien Van Hamme / Université Paris 1
https://hackmd.io/@reycoseb/BJU4qG3O6
Objectifs
- Autonomie de raisonnement
- Apprendre à décomposer des problèmes complexes
- Apprendre un formalisme de description "NEUTRE"
Les étapes
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
Evaluation
Historique du mot
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
Historique du mot
Historique du mot
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é
Historique du mot
Un terme qui évolue avec le temps
Déterministe ou ?
Symbolique ou ?
Transmission orale
Ingrédients physique
Quel sens en informatique ?
(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
Quel sens en informatique ?
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
Quel sens en informatique ?
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
Et demain ?
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 !
Quelles propriétés ?
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 ?
Quelles propriétés ?
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 ?
Quelles propriétés ?
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
Quelles propriétés ?
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
Quelles propriétés ?
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
Quelles propriétés ?
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
Quelles propriétés ?
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
Quelles propriétés ?
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
"big O" notation
Src : Grokking Algorithm, MEAP Edition, A. Y. Bhargava
software vs hardware
Entre 1971 et 2001, la densité des transistors a doublé chaque 1,96 année.
Software vs Hardware
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
Maze Maze Maze !
Quelles propriétés ?
2D, graphes, de multiples représentations...
pour plusieurs classes d'algorithmes applicables
Entrée
Sortie
LHR 1er essai
Entrée
Sortie
LHR 2ème essai
Pledge
Src : https://Interstices.info
- Compte à zéro
- Aller en face jusqu’à toucher un mur, passer à l'instruction 3 ;
- Longer le mur par la droite (ou par la gauche, mais toujours dans le même sens), mettre à jour le compteur. Si le décompte direction atteint zéro, dans ce cas passer à l'instruction 2 ;
Entrée
Sortie
Pledge 1er essai
0
Pledge 1er essai
-1
-2
0
-4
-1
-2
-3
-3
-2
0
-3
-4
-3
-2
-3
-4
-1
Entrée
Sortie
Pledge 2ème essai
Pledge 2ème essai
-1
0
0
-1
-2
Et pour celui là ?
cases
non accessibles
mur
marqué
condamné
vide
cases accessibles
Implémentation : vision
G
H
D
B
G
H
D
B
Implémentation : règles
G
H
D
B
Règle(s)
Move to
Paint
Exemple
G
H
D
B
De l'éthique des algorithmes
Un cas très ... géographique
Le Gerrymandering
Kevin Slavin - Algorithms
Internet n'est pas le Web
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)
The Internet
1ère couche : Infrastructures physiques
src : Rekazine
The Internet
"LOGIN"
ex: TCP/IP
2 ème couche : Protocoles !
The Internet
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
The Internet
6.1.4.2
3.4.2.1
HTTP
Résolution HTTP (en théorie)
GET / /HTTP/1.1
Host: en.wikipedia.org
HTTP/1.1 200 OK
...
<html>
<head>
<title>Wikipedia EN</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>
Le dessous des cartes
Quelques exemples d'algorithmes cachés
L'Etat et les administrations ...
Quelques exemples d'algorithmes cachés
L'Etat et les administrations ...
Quelques exemples d'algorithmes cachés
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
Quelques exemples d'algorithmes cachés
« 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
Quelques exemples d'algorithmes cachés
Micro-Moments ...
An intent-rich moment when a person turns to a device to act on a need-to know, go, do, or buy.
Intensification / Intrusion croissante ...
Privacy only for the rich?
Privacy Washing !
Manifest V3 / Privacy Sandbox
Maximum price !
All is possible !
Etudes en cours ...
Etudes en cours ...
Dark pattern at scale
Dark pattern after GDPR
Pour aller plus loin ...
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
Pour aller plus loin ...
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
Pour aller plus loin ...
Quelques exemples concrets du mouvement annoncé ...
www.etalab.gouv.fr &
"Loi république numérique 2016"
métropole de Nante
Pour aller plus loin ...
malgré encore quelques réticences de l'administration ...
Xavier Berne, pour next-impact, le 06/02/2020
Pour aller plus loin ...
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
Pour aller plus loin ...
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 aller plus loin ...
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 aller plus loin ...
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 l'homme à la machine ?
Aborder la complexité
De quelques briques de bases à ...
152 Kbytes mémoire
Margaret Hamilton
~ 350 personnes
Assembleur
1965 NASA
... un allunissage sur la lune ...
Aborder la complexité
Quelques pistes primordiales
- Identifier un ou des objectif(s)
- Identifier des contraintes
- Choisir un angle de vue adapté
- Décomposer en sous problème plus simple
- Définir une stratégie, un ordre de résolution
- Faire appels à des experts du domaine
Phase de conception
src : xkcd
Aborder la complexité
Ok, mais comment se comprendre ?
Aborder la complexité
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
Aborder la complexité
Le recours aux cycles de vie logiciels
Conception
Implémentation
Aborder la complexité
Le recours aux cycles de vie logiciels
cascade
cycle en V
Agile
Aborder la complexité
L'importance du MVP "Minimum Viable Product"
Communiquer avec les ordinateurs ?
Plusieurs étapes importantes
Du langage naturel au langage machine
Plusieurs étapes importantes
Du langage naturel au langage machine
Langues naturelles
Formalismes
Languages informatiques
Language
machine
Formalismes Algorithmiques
Les diagrammes d'activités
Src : Randal Munroe (xkcd)
Formalismes Algorithmiques
Les diagrammes d'activités
Formalismes Algorithmiques
Les diagrammes d'activités
Formalismes Algorithmiques
Les diagrammes d'activités
Formalismes Algorithmiques
Les diagrammes d'activités
A vous !
LHR + PLEDGE en diag. activité
Formalismes Algorithmiques
Les "blocs" de pseudo-code
Formalismes Algorithmiques
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; // ok
a = 3.5
b = 2
c = a + b
Formalismes Algorithmiques
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
Résumé
- La représentation des algorithmes peut être
- Graphique (diagramme, schéma)
- Écrite avec des instruction simplifiés
- Mixte Écrite/Graphique (blockly)
- Vous pouvez utiliser l’un ou l’autre, ils ont des avantages et inconvénients respectifs :
- Les versions graphiques
- (+) Plus facile à manipuler, à apprendre
- (+) Peut mélanger des niveaux d’abstraction + facilement
- (-) Perd très vite en lisibilité pour des problèmes complexe
- (-) Reste finalement assez éloigné des langage informatique
- Les versions textuelles (dont celle que l’on va utiliser)
- (-) ne permet pas le mélange de niveau d’abstraction, plus rigide donc
- (-) plus verbeux, moins facile à apprendre
- (+) Facilite énormément le passage au langage informatique !
- Les versions graphiques
Plusieurs étapes importantes
Du langage naturel au langage machine
Langues naturelles
Formalismes
Languages informatiques
Language
machine
Familles de langages
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 xs
Familles de langages
Peter 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
Python
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 ...
Pseudo Code &
python
Structures de données
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
Structures de données
Les structures finies : les variables
variable
- Une variable a un type
- Une variable à une vie (portée)
- Une variable est déclarée puis affectée/assignée
- Pour affecter/assigner une variable on utilise un opérateur dédié
- Pour accéder au contenu d'une variable, on appelle la variable par son nom
calculs
fichiers
inputs
tableaux
objets
affecter
type de valeur(s) possible(s)
Structures de données
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 = TRUE
Structures de données
Exercice 1
#Quelles seront les valeurs des variables A et B ?
Variable A, B Numerique
A = 5
B = 2
A = B
B = A
Structures de données
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
Structures de données
Exercice 1
# Commment échange-t-on des valeurs ?
Variable A, B Numerique
A = 5
B = 3
? Suite ?
Entrées / Sorties
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
Entrées / Sorties
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"
Structures de contrôles
Conditions / Alternatives
...
SI [EXPRESSION] == TRUE ALORS
INSTRUCTION
FIN SI
...
ex : (2 + 2 <= 4)
jump
Structures de contrôles
Conditions / Alternatives
a = 3
SI [EXPRESSION] == TRUE ALORS
INSTRUCTIONS
FIN SI
...
ex : (2*a <= 4)
jump
jump
Structures de contrôles
Conditions / Alternatives
Variable age,n Numerique
n = 18
age = SAISIE("Quel est votre age ?")
SI age <= 18 ALORS
# traitement
FIN SI
Structures de contrôles
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"
Structures de contrôles
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
Structures de contrôles
Boucle 1
...
POUR [VARIABLE] DE 0 À 2
INSTRUCTIONS
FIN POUR
...
ex : i = 0
i = i +1
Structures de contrôles
Boucle 1
Variable i, n as Numerique
n = 15
POUR i DE 0 A n
# traitement
FIN POUR
i = i + 1 implicite
Structures de contrôles
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
Structures de contrôles
Boucle 2
Variable i Numerique
i = 15
TANT QUE i > 0 == TRUE
#traitement
i = i - 1
FIN TANT QUE
modificateur explicite !
Opérateur LOGIQUE
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
Opérateur LOGIQUE
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
Exercices
# Réaliser l'exercice 1 sur papier
Déterminer pour chaque ligne si elle va afficher TRUE ou FALSE
Quelques règles ...
Quelques règles ...
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
Quelques règles ...
Single Letter Variable Names
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
Exercices
# 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
Indentation
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)
Structure de controle
Structure de controle
Structure de controle
Structure de controle
Structure de controle
Structures de données
Structures indexées : Tableaux / Collections
- Permet de stocker plusieurs éléments dans une variable de type Tableau
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)
- en général, en plus des tableaux / listes, il existe plusieurs formes de tableaux par langages, on parle de Collections
Structures de données
Structures indexées : Tableaux / Collections
- Les tableaux peuvent également être de taille fixe ou dynamique
taille fixe
taille dynamique
Array (java)
List (python)
Array (Ruby)
[ ] (C)
+
Exemples de variations par taille
old
new
copy
Structures de données
Structures indexées : Tableaux / Collections
- Les tableaux/collections peuvent également être mutables ou immutables
immutable / immuable
mutable
Exemples de variations par nature
old
new
copy to
exchange
Structures de données
Structures indexées : Tableaux / Collections
- Les tableaux/collections peuvent également être uni-dimensionnel ou multi-dimensionnel
1 dimension
Exemples de variations par dimensions
2 dimensions
3 dimensions
n dimensions
?
Structure de données
tableaux uni-dimensionnel
Structures de données
Structures indexées : Tableaux / Collections
- Chaque élément dans un tableau est accessible par un indice ou index
- Les indices/index notés [...] démarrent invariablement à la valeur 0
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 |
Structures de données
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
Structures de données
Tableaux uni-dimensionnel (taille dynamique)
Pseudo-code tableaux (taille dynamique, typés statiquement)
exemple 2
tableauNoms = ["Pierre", "Gérard", "Paul"]
print("Valeur à l'indice 0", tableauNoms[0] )
tableauChiffres = [4,8]
print("Valeur à l'indice 1", tableauChiffres[1] )
Structures de données
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)
Structures de données
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
Structures de données
Exercices
# 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)
Structure de données
Tableaux multi-dimensionnels
Structures de données
Structures indexées : Tableaux / Collections
- Les tableaux peuvent être uni-dimensionnels ou multi-dimensionnels, de tailles fixes ou variables, symétriques ou non
4 | 6 | 3 |
2 | 1 | 3 |
4 | 6 | 3 |
2 | 1 | 3 |
4
6
3
2
1
3
Structures de données
Structures indexées : Tableaux / Collections
- Les tableaux peuvent être uni-dimensionnels ou multi-dimensionnels, de tailles fixes ou variables, symétriques ou non
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 |
Pseudo-code tableaux
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 |
Pseudo-code tableaux
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)
Pseudo-code tableaux
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
Pseudo-code tableaux
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)
??? suite ???
Équivalent Python : listes imbriquées
Construire et parcourir des tableaux multi-dimensionnels
Exercices
# 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)
Bataille navale
Les fonctions
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
Les fonctions
Des fonctions prédéfinies aux fonctions personnalisées…
Copier / Coller le code ?
Fiabilité ?
Flexibilité ?
Lisibilité ?
Ligne d'assemblage
Modern Times - Charlie Chaplin
Les fonctions
Des fonctions prédéfinies aux fonctions personnalisées…
Les fonctions
Des fonctions prédéfinies aux fonctions personnalisées…
- Mario se joue de gauche (départ) à droite (arrivée)
- Mario a la possibilité de suivre différents chemins (en passant par le ciel, ou par des caves)
- Mario peut, s'il le veut, se téléporter dans des caves
- Mario transporte un sac rempli de pièce et il peut en ajouter sur son chemin
Les fonctions
Des fonctions prédéfinies aux fonctions personnalisées…
Les fonctions
Des fonctions prédéfinies aux fonctions personnalisées…
Les fonctions
Des fonctions prédéfinies aux fonctions personnalisées…
Les fonctions
Des fonctions prédéfinies aux fonctions personnalisées…
Les fonctions
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
Les fonctions
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))
Les fonctions
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
Les fonctions
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
Les fonctions
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 !
Les fonctions
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
Les fonctions
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)
Exercices
# 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
Algorithmique et programmation
By sebastien rey coyrehourcq
Algorithmique et programmation
- 2,679