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

\frac{1}{2}*(n-1)!

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

  1. Compte à zéro
     
  2. Aller en face jusqu’à toucher un mur, passer à l'instruction 3 ;
     
  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.

Google

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 !

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

  1. Une variable a un type
  2. Une variable à une vie (portée)
  3. Une variable est déclarée puis affectée/assignée
  4. Pour affecter/assigner une variable on utilise un opérateur dédié
  5. 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 ?")

t_0
t_1
t_2

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

 

 

t_2

AFFICHE("Tél = "  +  tel)

t_3

tel

5567

"5567"

conversion et concatenation

"Tél = 5567"

Structures de contrôles

Conditions / Alternatives

...
SI [EXPRESSION] == TRUE ALORS

      INSTRUCTION
FIN SI

...

t_0
t_1
t_0
t_1
t_{2}
t_{2}
t_{3}
t_{3}

ex : (2 + 2 <= 4)

jump

Structures de contrôles

Conditions / Alternatives

a = 3
SI [EXPRESSION] == TRUE ALORS

      INSTRUCTIONS
FIN SI

...

t_0
t_1
t_0
t_1
t_{2}
t_2

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

t_0
t_{1_{a}}
t_0
t_{1_{b}}

ex : (a != "A")

jump

t_{2}
t_{1_{c}}

jump

ex : a == "B"

t_{1_{a}}
t_{1_{b}}
t_{1_{c}}
t_{2}

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

...

t_0
t_{1}
t_0

ex : i = 0

t_{7}
t_{2}
t_{3}

i = i +1

t_{4}
t_{5}
t_{6}
t_{7}
t_{1,3,4}
t_{2,4,6}

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

...

t_0
t_{1}
t_0

ex : i < 3

t_{11}
t_{2}
t_{3}

ex : i = i +1

t_{4}
t_{5}
t_{6}
t_{7}
t_{1,4,7,9,10}
t_{2,3,5,6,8,9}

MODIFICATEUR

t_{8}
t_{9}
t_{10}
t_{11}

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

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)

+

T_{0} =
T_{0}[3] =
T_{1}[4] =

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

T_{0} =
T_{0} =
T_{1} =

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
T_{0}
T_{0}[0]
T_{0}[1]
T_{0}[2]
T_{1}
0
1
2
T_{0}[3]

error

T_{2}
0
1
2
3
0
1
2
3
T_{1}[2*2-1]
T_{1}[1+2]
T_{1}[6-3]
T_{1}[3+1]

error

T_{2}[a-b]
a = 3 ; b = 2
T_{2}[b+1]
T_{2}[a]
T_{2}[b]

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"
0
1
2
0
1
2
0
4 8
0
1
1
0
1

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
T[0][0]
0
1
2
4 6 3
2 1 3
0
1
4 6 3
2 1 3
0
1
2
0
1
2
0
1
T[0][1]
T[0][2]

4

6

3

T[1][0]
T[1][1]
T[1][2]

2

1

3

T

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
T
T[0][0]
0
1
2
0
1
4 6 3
2 1 3
0
1
2
0
1
2
0
1
T[0][1]
T[0][2]

4

6

3

T[1][0]
T[1][1]
T[1][2]

2

1

3

4 6 3
2 1 3
1 0
T[2][0]
T[2][1]
T[2][2]

0

1

error

1 0
0
1
2
2

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
0
1
0
1
2

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
POURDE 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
POURDE 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,678