Sunteți pe pagina 1din 21

Algorithmique et programmation

Master 1 Humanités numériques

Jérôme Darmont
http://eric.univ-lyon2.fr/jdarmont/
Année 2019-2020
Définitions

Algorithme

Un algorithme est une suite finie et non ambiguë d’opérations ou d'instructions permettant de résoudre un problème ou d'obtenir un résultat.1

Un algorithme peut prendre des données en entrée et fournit au moins un résultat en sortie.2

Un algorithme est souvent exprimé avec une notation indépendante de tout langage de programmation.3

Programme

Un programme est la traduction d’un algorithme en un langage interprétable par un ordinateur.4

1
Wikipedia. https://fr.wikipedia.org/wiki/Algorithme

2
Donald E. Knuth. The Art of Computer Programming, Vol. 1. 3e edition, 1997. Addison-Wesley.

3
Robert Strandh, Irène Durand. Initiation à l’informatique. 2003. http://dept-info.labri.fr/ENSEIGNEMENT/INITINFO/initinfo/supports/book/
4
Robert Cordeau. Introduction à Python 3. http://www.maths-et-tiques.fr/telech/Python3v1-1.pdf

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 1 sur 20


Méthodologie

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 2 sur 20


Outils

Langage algorithmique textuel

Le langage algorithmique en français proposé dans ce support et relativement standard, si tant est qu’il existe un standard en la matière. Il est volontairement
indépendant et différent des autres langages abordés dans cet enseignement (plus rigoureux).

Blockly

Blockly5 est un langage graphique open-source de Google qui vise à démocratiser le développement informatique en limitant les possibilités d’erreurs de
syntaxe grâce à l’agencement de blocs de code par glisser-déposer. Il est inspiré de Scratch6, un langage similaire développé par le MIT. Il permet de générer
automatiquement du code, notamment dans les langages JavaScript, PHP et Python. Il est considéré ici comme un langage algorithmique en anglais.

Python

Python7 est un langage de programmation sous licence libre promu par la Python Software Foundation. Il fonctionne sur la plupart des systèmes d’exploitation
et fait partie des langages les plus utilisés pour apprendre la programmation. Il inclut l’environnement de développement IDLE8, qui vise à faciliter la
programmation en Python. Les programmes Python sont placés dans des fichiers d’extension « .py ».

5
https://developers.google.com/blockly/
6
https://scratch.mit.edu
7
https://www.python.org
8
http://tarball69.developpez.com/articles/python/idle-presentation-rapide/

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 3 sur 20


Tableau d’équivalence entre les langages

Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python


Commentaire {Il faut commenter son code !} # Il faut commenter son code !
Var âge : Entier
Déclaration de Var salaire : Réel Pas d’équivalent !
variables Var nom : Chaîne
Var v_f : Booléen
Const N ← 10
Déclaration de
Const PI ← 3,1416
constantes
Const MONNAIE ← "Euro"
age = 44
salaire = 1466.62
âge ← 44
nom = "Jérôme" ou nom = 'Jérôme'
salaire ← 1466,62
Affectation de
nom ← "Jérôme"
variables v_f = True # Contraire : False
v_f ← Vrai {Contraire : Faux} a = b = 20
x, y = 30, 40
type(age) # int
Type d’une type(salaire) # float
variable type(nom) # str
type(v_f) # bool

âge ← 44 + 1 age = 44 + 1
âge ← âge + 1 age = age + 1 ou age += 1
Calculs salaire ← salaire x 1,05 salaire = salaire * 1.05
quotient ← a ÷ b quotient = a / b
nom ← nom | " Darmont" nom = nom + " Darmont"

Opérateurs
+ - x ÷ ^ div mod + - x ÷ ^ + - * / ** // %
arithmétiques

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 4 sur 20


Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python

Lire(nom) nom = input()


Lire(âge) age = int(input())
Lire("Salaire :", salaire) salaire = float(input("Salaire : "))
Entrées /
Écrire("Hello world!") print("Hello world!")
sorties
Écrire(âge) print(age)

Écrire("Âge ", âge, "Salaire ", salaire) print("Âge", age, "Salaire", salaire)

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 5 sur 20


Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Si nom = "Jérôme" alors
Écrire("Bravo")
Fin si
if nom == "Jérôme":
Si âge < 18 alors print("Bravo")
Écrire("Mineur")
Sinon if age < 18:
Écrire("Majeur") print("Majeur")
Fin si else:
print("Mineur")
Si salaire < 1466,62 alors
Écrire("Pauvre") if salaire < 1466.62:
Sinon si salaire ≤ 3000 alors print("Pauvre")
Écrire("Moyen") elif salaire <= 3000:
Tests Sinon print("Moyen")
Écrire("Riche") else:
Fin si print("Riche")

Si âge < 18 alors if age < 18:


Si salaire > 0 alors if salaire > 0:
salarie_mineur ← True salarie_mineur = True
Else else:
Salarie_mineur ← False salarie_mineur = False
Fin si
Fin si if age >=25 and salaire == 0:
print("Droit au RSA")
Si age ≥ 25 et salaire = 0 alors
Écrire("Droit au RSA")
Fin si
Opérateurs de
= ≠ < ≤ > ≥ = ≠ < ≤ > ≥ == != < <= > >=
comparaison
Opérateurs
et ou non and or and or not
logiques

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 6 sur 20


Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Pour i de 1 à 10 faire
for i in range(1, 11):
Boucles pour Écrire(7 x i)
print(7 * i)
Fin pour

i ←1
i=1
Tant que i ≤ 10 faire
Boucles while i <= 10:
Écrire(7 x i)
tant que print(7 * i)
i ←i+1
i += 1
Fin tant que

i=1
i ←1
while True: # Boucle infinie
Boucles Répéter
print(7 * i)
répéter Écrire(7 x i)
i += 1
jusqu’à i ←i+1
if i > 10:
Jusqu’à i > 10
break # Très inélégant
(Fonctionne comme un while)

Pour i de 1 à 5 faire
Pour j de 1 à 5 faire for i in range(1, 6):
Boucles
Écrire(i x j) for j in range(1, 6):
imbriquées
Fin pour print(i * j)
Fin pour

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 7 sur 20


Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Procédure table7()
Var i : Entier
Début
Pour i de 1 à 10 faire
Écrire(7 x i)
Fin pour
Fin
def table7():
for i in range(1, 11):
Procédure table(n : Entier)
print(7 * i)
Var i : Entier
Début
def table(n):
Pour i de 1 à 10 faire
for i in range(1, 11):
Écrire(n x i)
print(n * i)
Fin pour
Fin
Procédures def tablegen(n, m):
for i in range(1, m + 1):
Procédure tablegen( n : Entier,
print(n * i)
m : Entier)
Var i : Entier
# Appel des procédures
Début
table7()
Pour i de 1 à m faire
table(3)
Écrire(n x i)
max = 15
Fin pour
tablegen(3, max)
Fin

{Appel des procédures}


table7()
table(3)
max ← 15
tablegen(3, max)

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 8 sur 20


Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
def tva(prixHT):
TAUX = 0.2
return prixHT * (1 + TAUX)
Fonction tva(prixHT : Réel) : Réel
Const TAUX ← 0,2
def tva2(prixHT):
Début
TAUXPLEIN = 0.2
Retourner prixHT x (1 + TAUX)
Fonctions TAUXRED = 0.055
Fin
return prixHT * (1 + TAUXPLEIN),
prixHT * (1 + TAUXRED)
{Appel de la fonction}
prixTTC ← tva(10,5)
# Appel des fonctions
prixTTC = tva(10.5)
prixTTCplein, prixTTCred = tva2(10.5)
lettre3 ← nom[3] lettre3 = nom[2] # 1re position = 0

extrait ← SousChaîne(nom, 3, 5) extrait = nom[2 : 5] # Arrêt avant 5


extrait ← SousChaîne(nom, 1, 5) extrait = nom[: 5] # Depuis le début

Traitement longueur ← Longueur(nom) longueur = len(nom) # Fonction


des chaînes de nom_maj ← Majuscules(nom) nom_maj = nom.upper() # Méthode
caractères txt ← " A bra ca da bra " txt = " A bra ca da bra "
txt ← SupprimerEspaces(txt) txt = txt.strip()

pos ← ChercherPosition(txt, "bra") pos = txt.find("bra")

txt ← Remplacer(txt, "bra", "BRA") txt = txt.replace("bra", "BRA")

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 9 sur 20


Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python

{Déclaration}
Var lst : Liste d’entiers
lst = [ ] # Liste vide
lst ← ( ) {Liste vide} lst = [1, 5, 7]
print(lst[1])
lst ← (1, 5, 7)
lst2 = [1, 3.14, "ok", [ ]] # Multitype !
Écrire(lst(2))
lst.append(9) # Ajout en fin
lst( ) ← 9 {Ajout en fin}
lst.insert(1, 4) # Ajout en 2e position
Ajouter(lst, 2, 4) {Ajout 2e position}
lst[1] = 3 # Modification
lst(2) ← 3 {Modification}
lst.pop(2) # Suppression 3e pos.
Listes Suppr(lst, 3) {Suppression 3e pos.}
taille = len(lst)
taille ← Longueur(lst)
lst.sort()
Trier(lst)
pos = lst.index(3)
pos ← ChercherPosition(lst, 3) mots = txt.split(" ")
mots ← Découper(txt, " ")
# Parcours de liste
{Parcours de liste} for nombre in lst:
Pour nombre dans lst faire print(nombre)
Écrire(nombre)
Fin pour

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 10 sur 20


Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
{Déclarations}
Var f : Fichier
Var lignes : Liste de Chaînes
Var l : Chaîne # Choix du répertoire de travail
import os
{Création de fichier} os.chdir("D:/Jérôme")
lignes ← ("Angèle", "Bernard",
"Cherifa", "Doug") # Création de fichier
f ← Ouvrir("fichier.txt", "écriture") lignes = ["Bernard\n", "Cherifa\n",
Pour l dans lignes faire "Doug\n"]
Écrire(f, l) f = open("fichier.txt", "w") # (w)rite
Fin pour f.write("Angèle\n") # Ecriture unique
Fermer(f) # (\n = passage à la ligne)
f.writelines(lignes) # Ecriture multiple
{Ajout dans un fichier} f.close()
Fichiers
lignes ← ("Ekaterina", "Fali")
f ← Ouvrir("fichier.txt", "ajout") # Ajout dans un fichier
Pour l dans lignes faire lignes = ["Ekaterina\n", "Fali\n"]
Écrire(f, l) f = open("fichier.txt", "a") # (a)ppend
Fin pour f.writelines(lignes)
Fermer(f) f.close()

{Lecture d’un fichier} # Lecture d'un fichier


f ← Ouvrir("fichier.txt", "lecture") f = open("fichier.txt", "r") # (r)ead
Lire(f, l) lignes = f.readlines()
Tant que non FinDeFichier(f) faire # lignes est une liste de chaînes
lignes( ) ← l f.close()
Lire(f, l)
Fin tant que
Fermer(f)

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 11 sur 20


Structure d’un algorithme

Algorithme Nom_algorithme {Exemple}


{Déclaration constantes} Algorithme Lire_Écrire
{Déclaration variables} Var message : Chaîne
Début Début
{Instructions} Lire(message)
Fin Écrire(message)
Fin

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 12 sur 20


Tables de vérité

Opérateurs élémentaires
Soient deux variables booléennes (prenant les valeurs Vrai ou Faux) C1 et C2.
Quel est le résultat des tests « Si non C1 », « Si C1 et C2 », « Si C1 ou C2 » ?

C1 C2 non C1 C1 et C2 C1 ou C2
Vrai Vrai Faux Vrai Vrai

Vrai Faux Faux Faux Vrai

Faux Vrai Vrai Faux Vrai

Faux Faux Vrai Faux Faux

Exemple de condition complexe


Soit la variable booléenne C3 ← (C1 et (non C2)) ou ((non C1) et C2), quelles sont les valeurs possibles de C3 en fonction de celles de C1 et C2 ?

C1 C2 non C2 C1 et (non C2) non C1 (non C1) et C2 C3

Vrai Vrai Faux Faux Faux Faux Faux

Vrai Faux Vrai Vrai Faux Faux Vrai

Faux Vrai Faux Faux Vrai Vrai Vrai

Faux Faux Vrai Faux Vrai Faux Faux

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 13 sur 20


Modules Python

Définition
Un module (ou bibliothèque) est un fichier Python (extension .py) qui contient des fonctions pouvant être employées depuis plusieurs programmes.
Python inclut de plusieurs bibliothèques standards. De nombreuses bibliothèques externes sont également disponibles9.

Utilisation de modules dans un programme (exemples)


1. Importer le(s) module(s) : import os # Module « os »
import os, math # Modules « os » et « math »
2. Utiliser les fonctions d’un module : os.chdir("D:/Jérôme") # Fonction « chdir » du module « os »
racine_carree = math.sqrt(4) # Fonction « sqrt » du module « math »

1. Importer une/des fonction(s) d’un module : from os import chdir # Fonction « chdir » du module « os »
from math import * # Toutes les fonctions du module « math »
2. Utiliser les fonctions : chdir("D:/Jérôme") # Plus besoin de préfixer la fonction par le nom du module
racine_carree = sqrt(4)

Mode d’emploi des modules et fonctions


help("os") # Fournit la liste et la description de toutes les fonctions d’un module (ici, le module « os »)
help("os.chdir") # Fournit la description d’une fonction d’un module (ici, la fonction « chdir » du module « os »)

9
https://fr.wikibooks.org/wiki/Programmation_Python/Biblioth%C3%A8ques_pour_Python

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 14 sur 20


Interface graphique tkinter (Tool kit interface)
Une interface tkinter est constituée d’une fenêtre dans laquelle on place des widgets :
• étiquettes textuelles,
• zones de saisie,
• boutons de commandes,
• canevas pour dessins,
• photos ou images.

Code Python Résultat


from tkinter import * # Importation du module tkinter
# Fenêtre
fenetre = Tk() # Création de la fenêtre
fenetre.title("Formulaire test") # Titre de la fenêtre
fenetre.mainloop() # Affichage de la fenêtre
# Etiquette textuelle (code à insérer avant fenetre.mainloop())
etiq_nom = Label(fenetre, text = "Saisir votre nom :") # Création de l’étiquette
etiq_nom["fg"] = "black" # Couleur du texte
etiq_nom["bg"] = "white" # Couleur de l’arrière-plan de l’étiquette
etiq_nom.pack() # Affichage de l’étiquette

# Zone de saisie (code à insérer avant fenetre.mainloop())


nom = Entry(fenetre) # Création de la zone de saisie
nom.pack() # Affichage de la zone de saisie

# Bouton de commande (code à insérer avant fenetre.mainloop())


bouton = Button(fenetre, text = "Valider", command = afficher_nom) # Création du bouton de commande
bouton.pack() # Affichage du bouton de commande

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 15 sur 20


Code Python Résultat
# Fonction permettant de traiter la commande du bouton "Valider" (à insérer avant fenetre = Tk())
def afficher_nom():
fenetre_resultat = Tk() # Définition d’une nouvelle fenêtre
fenetre_resultat.title("Votre nom")
affichage = Label(fenetre_resultat) # Définition d’une étiquette pour l’affichage du nom saisi
affichage["text"] = nom.get() # Lecture du contenu du widget "nom"
affichage.pack() # Affichage du nom
# Bouton qui ferme fenetre_resultat
bouton_quitter = Button(fenetre_resultat, text = "Quitter", command = fenetre_resultat.destroy)
bouton_quitter.pack()

# Canevas (code à insérer avant fenetre.mainloop())

# Création du canevas avec ses dimensions et sa couleur de fond


dessin = Canvas(fenetre, width = 200, height = 200, bg = "cyan")
dessin.pack() # Affichage du cannevas
dessin.create_rectangle(0, 0, 200, 200) # Dessin d'un rectangle (coordonnées (0, 0) en haut à gauche)
dessin.create_line(0, 0, 200, 200) # Dessin des diagonales
dessin.create_line(0, 200, 200, 0)
dessin.create_oval(75, 75, 125, 125, fill = "yellow") # Disque de couleur jaune inscrit dans un carré

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 16 sur 20


Code Python Résultat

# Image (code à insérer avant fenetre.mainloop())


logoPython = PhotoImage(file = "pythonmini.png") # Création de l'image
etiq_image = Label(fenetre, image = logoPython) # Association de l'image à une étiquette
etiq_image.pack() # Affichage de l'étiquette

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 17 sur 20


# Code complet

from tkinter import * # Importation du module tkinter

# Fonction permettant de traiter la commande du bouton "Valider"


def afficher_nom():
fenetre_resultat = Tk() # Définition d’une nouvelle fenêtre
fenetre_resultat.title("Votre nom")
affichage = Label(fenetre_resultat) # Définition d’une étiquette pour l’affichage du nom saisi
affichage["text"] = nom.get() # Lecture du contenu du widget "nom"
affichage.pack() # Affichage du nom
# Bouton qui ferme fenetre_resultat
bouton_quitter = Button(fenetre_resultat, text = "Quitter", command = fenetre_resultat.destroy)
bouton_quitter.pack()

# Fenêtre
fenetre = Tk() # Création de la fenêtre
fenetre.title("Formulaire test") # Titre de la fenêtre

# Etiquette textuelle
etiq_nom = Label(fenetre, text = "Saisir votre nom :") # Création de l’étiquette
etiq_nom["fg"] = "black" # Couleur du texte
etiq_nom["bg"] = "white" # Couleur de l’arrière-plan de l’étiquette
etiq_nom.pack() # Affichage de l’étiquette

# Zone de saisie
nom = Entry(fenetre) # Création de la zone de saisie
nom.pack() # Affichage de la zone de saisie

# Bouton de commande
bouton = Button(fenetre, text = "Valider", command = afficher_nom) # Création du bouton de commande
bouton.pack() # Affichage du bouton de commande

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 18 sur 20


Code Python Résultat
# Canevas avec ses dimensions et sa couleur de fond
dessin = Canvas(fenetre, width = 200, height = 200, bg = "cyan")
dessin.pack() # Affichage du cannevas
dessin.create_rectangle(0, 0, 200, 200) # Dessin d'un rectangle (coordonnées (0, 0) en haut à gauche)
dessin.create_line(0, 0, 200, 200) # Dessin des diagonales
dessin.create_line(0, 200, 200, 0)
dessin.create_oval(75, 75, 125, 125, fill = "yellow") # Disque de couleur jaune inscrit dans un carré

# Image
logoPython = PhotoImage(file = "pythonmini.png") # Création de l'image
etiq_image = Label(fenetre, image = logoPython) # Association de l'image à une étiquette
etiq_image.pack() # Affichage de l'étiquette

fenetre.mainloop() # Affichage de la fenêtre

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 19 sur 20


Webographie

Algorithmique

Christophe Darmangeat. Algorithmique et programmation pour non-matheux. Université Paris 7, 2013.


http://pise.info/algo/

Bouazza El Benani, Awatef Sayah. Cours d’informatique – Partie 1. Université Mohammed V Rabat, 2008.
https://web.archive.org/web/20180920202742/http://www.fsr.ac.ma/cours/informatique/elbenani/Partie1.pdf

Python

Vincent Le Goff. Apprenez à programmer en Python. OpenClassrooms, 2016.


https://openclassrooms.com/courses/apprenez-a-programmer-en-python

Robert Cordeau. Introduction à Python 3. Université Paris Sud.


http://www.maths-et-tiques.fr/telech/Python3v1-1.pdf

Wikilivres. Programmation Python. 2016.


https://fr.wikibooks.org/wiki/Programmation_Python

Pierre-Antoine Champin. Bonnes pratiques de programmation. Université Claude Bernard Lyon 1, 2015.
http://liris.cnrs.fr/pierre-antoine.champin/enseignement/algo/cours/algo/bonnes_pratiques.html

Raphaël Seban. IDLE – présentation rapide. L’environnement de développement standard Python. Developpez.com, 2014.
http://tarball69.developpez.com/articles/python/idle-presentation-rapide/

Étienne Florent. ISN : Documentation de tkinter. 2013.


http://tkinter.fdex.eu

M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 20 sur 20

S-ar putea să vă placă și