Aide-mémoire algorithmique et programmation

publicité
Algorithmique et programmation
Master 1 Humanités numériques
Jérôme Darmont
Année 2016-2017
http://eric.univ-lyon2.fr/~jdarmont/
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/
https://scratch.mit.edu
7
https://www.python.org
8
http://tarball69.developpez.com/articles/python/idle-presentation-rapide/
6
M1 HN – Algorithmique et programmation
http://eric.univ-lyon2.fr/~jdarmont/
Page 3 sur 20
Tableau d’équivalence entre les langages
Concept
Algorithmique textuelle
Commentaire
{Il faut commenter son code !}
Var âge : Entier
Var salaire : Réel
Var nom : Chaîne
Var v_f : Booléen
Const N  10
Const PI  3,1416
Const MONNAIE  "Euro"
Déclaration de
variables
Déclaration de
constantes
Affectation de
variables
Algorithmique graphique (Blockly)
# Il faut commenter son code !
Pas d’équivalent !
age = 44
salaire = 1466.62
nom = "Jérôme" ou nom = 'Jérôme'
âge  44
salaire  1466,62
nom  "Jérôme"
v_f  Vrai
{Contraire : Faux}
Type d’une
variable
Calculs
âge  44 + 1
âge  âge + 1
salaire  salaire x 1,05
quotient  a  b
nom  nom | " Darmont"
Opérateurs
arithmétiques
+ - x  ^ div mod
M1 HN – Algorithmique et programmation
Langage Python
v_f = True
# Contraire : False
a = b = 20
x, y = 30, 40
type(age)
type(salaire)
type(nom)
type(v_f)
# int
# float
# str
# bool
age = 44 + 1
age = age + 1 ou age += 1
salaire = salaire * 1.05
quotient = a / b
nom = nom + " Darmont"
+ - x  ^
http://eric.univ-lyon2.fr/~jdarmont/
+ - * / // %
Page 4 sur 20
Concept
Entrées /
sorties
Algorithmique textuelle
Algorithmique graphique (Blockly)
Langage Python
Lire(nom)
Lire(âge)
Lire("Salaire :", salaire)
Écrire("Hello world!")
Écrire(âge)
nom = input()
age = int(input())
salaire = float(input("Salaire : "))
print("Hello world!")
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":
print("Bravo")
Si âge < 18 alors
Écrire("Mineur")
Sinon
Écrire("Majeur")
Fin si
Tests
if age < 18:
print("Majeur")
else:
print("Mineur")
Si salaire < 1466,62 alors
Écrire("Pauvre")
Sinon si salaire ≤ 3000 alors
Écrire("Moyen")
Sinon
Écrire("Riche")
Fin si
if salaire < 1466.62:
print("Pauvre")
elif salaire <= 3000:
print("Moyen")
else:
print("Riche")
Si âge < 18 alors
Si salaire > 0 alors
salarie_mineur  True
Else
Salarie_mineur  False
Fin si
Fin si
if age < 18:
if salaire > 0:
salarie_mineur = True
else:
salarie_mineur = False
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
logiques
= ≠ < ≤ > ≥
= ≠ < ≤ > ≥
== != < <= > >=
et ou non
and or
and or not
M1 HN – Algorithmique et programmation
http://eric.univ-lyon2.fr/~jdarmont/
Page 6 sur 20
Concept
Algorithmique textuelle
Algorithmique graphique (Blockly)
Boucles pour
Pour i de 1 à 10 faire
Écrire(7 x i)
Fin pour
for i in range(1, 11):
print(7 * i)
Boucles
tant que
i  1
Tant que i ≤ 10 faire
Écrire(7 x i)
i  i + 1
Fin tant que
i=1
while i <= 10:
print(7 * i)
i += 1
Boucles
répéter
jusqu’à
i  1
Répéter
Écrire(7 x i)
i  i + 1
Jusqu’à i > 10
i=1
while True:
# Boucle infinie
print(7 * i)
i += 1
if i > 10:
break # Très inélégant
(Fonctionne comme un while)
M1 HN – Algorithmique et programmation
http://eric.univ-lyon2.fr/~jdarmont/
Langage Python
Page 7 sur 20
Concept
Algorithmique textuelle
Algorithmique graphique (Blockly)
Procédure table7()
Var i : Entier
Début
Pour i de 1 à 10 faire
Écrire(7 x i)
Fin pour
Fin
Procédures
Langage Python
def table7():
for i in range(1, 11):
print(7 * i)
Procédure table(n : Entier)
Var i : Entier
Début
Pour i de 1 à 10 faire
Écrire(n x i)
Fin pour
Fin
def table(n):
for i in range(1, 11):
print(n * i)
def tablegen(n, m):
for i in range(1, m + 1):
print(n * i)
Procédure tablegen( n : Entier,
m : Entier)
Var i : Entier
Début
Pour i de 1 à m faire
Écrire(n x i)
Fin pour
Fin
# Appel des procédures
table7()
table(3)
max = 15
tablegen(3, max)
{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
Fonctions
Algorithmique textuelle
Algorithmique graphique (Blockly)
def tva(prixHT):
TAUX = 0.2
return prixHT * (1 + TAUX)
Fonction tva(prixHT : Réel) : Réel
Const TAUX = 0,2
Début
Retourner prixHT x (1 + TAUX)
Fin
def tva2(prixHT):
TAUXPLEIN = 0.2
TAUXRED = 0.055
return prixHT * (1 + TAUXPLEIN),
prixHT * (1 + TAUXRED)
{Appel de la fonction}
prixTTC  tva(10,5)
Traitement
des chaînes de
caractères
Langage Python
lettre3  nom[3]
# Appel des fonctions
prixTTC = tva(10.5)
prixTTCplein, prixTTCred = tva2(10.5)
lettre3 = nom[2] # 1re position = 0
extrait  SousChaîne(nom, 3, 5)
extrait  SousChaîne(nom, 1, 5)
extrait = nom[2 : 5] # Arrêt avant 5
extrait = nom[: 5] # Depuis le début
longueur  Longueur(nom)
nom_maj  Majuscules(nom)
txt  " A bra ca da bra "
txt  SupprimerEspaces(txt)
longueur = len(nom) # Fonction
nom_maj = nom.upper() # Méthode
txt = " A bra ca da bra "
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)
{Déclaration}
Var lst : Liste d’entiers
lst = [ ]
# Liste vide
lst = [1, 3, 5, 7, 9]
print(lst[1])
lst2 = [1, 3.14, "ok", [ ]] # Multitype !
lst  ( )
{Liste vide}
lst  (1, 5, 7)
Écrire(lst(2))
Listes
Langage Python
lst( )  9
{Ajout en fin}
Ajouter(lst, 2, 4) {Ajout 2e position}
lst(2)  3
{Modification}
Suppr(lst, 3) {Suppression 3e pos.}
lst.append(9)
lst.insert(1, 4)
lst[1] = 3
lst.pop(2)
taille  Longueur(lst)
Trier(lst)
pos  ChercherPosition(lst, 3)
mots  Découper(txt, " ")
taille = len(lst)
lst.sort()
pos = lst.index(3)
mots = txt.split(" ")
# Parcours de liste
for nombre in lst:
print(nombre)
{Parcours de liste}
Pour nombre dans lst faire
Écrire(nombre)
Fin pour
M1 HN – Algorithmique et programmation
# Ajout en fin
# Ajout en 2e position
# Modification
# Suppression 3e pos.
http://eric.univ-lyon2.fr/~jdarmont/
Page 10 sur 20
Concept
Algorithmique textuelle
Algorithmique graphique (Blockly)
{Déclarations}
Var f : Fichier
Var lignes : Liste de Chaînes
Var l : Chaîne
# Choix du répertoire de travail
import os
os.chdir("D:/Jérôme")
{Création de fichier)
lignes  ("Angèle", "Bernard",
"Cherifa", "Bob")
f  Ouvrir("fichier.txt", "écriture")
Pour l dans lignes faire
Écrire(f, l)
Fin pour
Fermer(f)
Fichiers
# Création de fichier
f = open("fichier.txt", "w") # (w)rite
f.write("Angèle\n") # Ecriture unique
# (\n = passage à la ligne)
lignes = ["Bernard\n", "Cherifa\n",
"Bob\n"]
f.writelines(lignes) # Ecriture multiple
f.close()
{Ajout dans un fichier}
lignes  ("Ekaterina", "Fali")
f  Ouvrir("fichier.txt", "ajout")
Pour l dans lignes faire
Écrire(f, l)
Fin pour
Fermer(f)
# Ajout dans un fichier
f = open("fichier.txt", "a") # (a)ppend
lignes = ["Ekaterina\n", "Fali\n"]
f.writelines(lignes)
f.close()
# Lecture d'un fichier
f = open("fichier.txt", "r") # (r)ead
lignes = f.readlines()
# lignes est une liste de chaînes
f.close()
{Lecture d’un fichier}
f  Ouvrir("fichier.txt", "lecture")
Lire(f, l)
Tant que non FinDeFichier(f) faire
lignes( )  l
Lire(f, l)
Fin tant que
Fermer(f)
M1 HN – Algorithmique et programmation
Langage Python
http://eric.univ-lyon2.fr/~jdarmont/
Page 11 sur 20
Structure d’un algorithme
Algorithme Nom_algorithme
{Déclaration constantes}
{Déclaration variables}
Début
{Instructions}
Fin
M1 HN – Algorithmique et programmation
{Exemple}
Algorithme Lire_Écrire
Var message : Chaîne
Début
Lire(message)
Écrire(message)
Fin
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) :
2. Utiliser les fonctions d’un module :
1. Importer une/des fonction(s) d’un module :
2. Utiliser les fonctions :
import os
import os, math
os.chdir("D:/Jérôme")
racine_carree = math.sqrt(4)
# Module « os »
# Modules « os » et « math »
# Fonction « chdir » du module « os »
# Fonction « sqrt » du module « math »
from os import chdir
from math import *
chdir("D:/Jérôme")
racine_carree = sqrt(4)
# Fonction « chdir » du module « os »
# Toutes les fonctions du module « math »
# Plus besoin de préfixer la fonction par le nom du module
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()
fenetre.title("Formulaire test")
fenetre.mainloop()
# Création de la fenêtre
# Titre de la fenêtre
# 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()
fenetre.title("Formulaire test")
# Création de la fenêtre
# 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)
nom.pack()
# Création de la zone de saisie
# 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()
M1 HN – Algorithmique et programmation
# Affichage de la fenêtre
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.
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
Téléchargement