Algorithmique et programmation - Laboratoire ERIC · 2019. 8. 24. · Écrire("Bravo") Fin si Si âge < 18 alors Écrire("Mineur") Sinon Écrire("Majeur") Fin si Si salaire
Post on 16-Mar-2021
0 Views
Preview:
Transcript
Algorithmique et programmation Master 1 Humanités numériques
Jérôme Darmont Année 2019-2020
http://eric.univ-lyon2.fr/jdarmont/
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 1 sur 20
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 2 sur 20
Méthodologie
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 3 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 4 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 !
Déclaration de variables
Var âge : Entier Var salaire : Réel Var nom : Chaîne Var v_f : Booléen
Pas d’équivalent !
Déclaration de constantes
Const N ← 10
Const PI ← 3,1416
Const MONNAIE ← "Euro"
Affectation de variables
âge ← 44
salaire ← 1466,62
nom ← "Jérôme"
v_f ← Vrai {Contraire : Faux}
age = 44 salaire = 1466.62 nom = "Jérôme" ou nom = 'Jérôme' v_f = True # Contraire : False a = b = 20 x, y = 30, 40
Type d’une variable
type(age) # int type(salaire) # float type(nom) # str type(v_f) # bool
Calculs
âge ← 44 + 1
âge ← âge + 1
salaire ← salaire x 1,05
quotient ← a ÷ b
nom ← nom | " Darmont"
age = 44 + 1 age = age + 1 ou age += 1 salaire = salaire * 1.05 quotient = a / b nom = nom + " Darmont"
Opérateurs arithmétiques
+ - x ÷ ^ div mod + - x ÷ ^ + - * / ** // %
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 5 sur 20
Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Entrées / sorties
Lire(nom) Lire(âge) Lire("Salaire :", salaire) Écrire("Hello world!") Écrire(âge) Écrire("Âge ", âge, "Salaire ", salaire)
nom = input() age = int(input()) salaire = float(input("Salaire : ")) print("Hello world!") print(age) print("Âge", age, "Salaire", salaire)
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 6 sur 20
Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Tests
Si nom = "Jérôme" alors Écrire("Bravo") Fin si Si âge < 18 alors Écrire("Mineur") Sinon Écrire("Majeur") Fin si Si salaire < 1466,62 alors Écrire("Pauvre") Sinon si salaire ≤ 3000 alors Écrire("Moyen") Sinon Écrire("Riche") Fin si Si âge < 18 alors Si salaire > 0 alors
salarie_mineur ← True Else
Salarie_mineur ← False Fin si Fin si Si age ≥ 25 et salaire = 0 alors Écrire("Droit au RSA") Fin si
if nom == "Jérôme": print("Bravo") if age < 18: print("Majeur") else: print("Mineur") if salaire < 1466.62: print("Pauvre") elif salaire <= 3000: print("Moyen") else: print("Riche") if age < 18: if salaire > 0: salarie_mineur = True else: salarie_mineur = False if age >=25 and salaire == 0: print("Droit au RSA")
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 7 sur 20
Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
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
(Fonctionne comme un while)
i = 1 while True: # Boucle infinie print(7 * i) i += 1 if i > 10: break # Très inélégant
Boucles imbriquées
Pour i de 1 à 5 faire Pour j de 1 à 5 faire Écrire(i x j) Fin pour Fin pour
for i in range(1, 6): for j in range(1, 6): print(i * j)
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 8 sur 20
Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Procédures
Procédure table7() Var i : Entier Début Pour i de 1 à 10 faire Écrire(7 x i) Fin pour Fin Procédure table(n : Entier) Var i : Entier Début Pour i de 1 à 10 faire Écrire(n x i) Fin pour Fin 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)
def table7(): for i in range(1, 11): print(7 * i) 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) # Appel des procédures table7() table(3) max = 15 tablegen(3, max)
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 9 sur 20
Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Fonctions
Fonction tva(prixHT : Réel) : Réel
Const TAUX ← 0,2 Début Retourner prixHT x (1 + TAUX) Fin {Appel de la fonction}
prixTTC ← tva(10,5)
def tva(prixHT): TAUX = 0.2 return prixHT * (1 + TAUX) def tva2(prixHT): TAUXPLEIN = 0.2 TAUXRED = 0.055 return prixHT * (1 + TAUXPLEIN), prixHT * (1 + TAUXRED) # Appel des fonctions prixTTC = tva(10.5) prixTTCplein, prixTTCred = tva2(10.5)
Traitement des chaînes de caractères
lettre3 ← nom[3]
extrait ← SousChaîne(nom, 3, 5)
extrait ← SousChaîne(nom, 1, 5)
longueur ← Longueur(nom)
nom_maj ← Majuscules(nom)
txt ← " A bra ca da bra "
txt ← SupprimerEspaces(txt)
pos ← ChercherPosition(txt, "bra")
txt ← Remplacer(txt, "bra", "BRA")
lettre3 = nom[2] # 1re position = 0 extrait = nom[2 : 5] # Arrêt avant 5 extrait = nom[: 5] # Depuis le début longueur = len(nom) # Fonction nom_maj = nom.upper() # Méthode txt = " A bra ca da bra " txt = txt.strip() pos = txt.find("bra") txt = txt.replace("bra", "BRA")
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 10 sur 20
Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Listes
{Déclaration} Var lst : Liste d’entiers
lst ← ( ) {Liste vide}
lst ← (1, 5, 7) Écrire(lst(2))
lst( ) ← 9 {Ajout en fin} Ajouter(lst, 2, 4) {Ajout 2e position}
lst(2) ← 3 {Modification} Suppr(lst, 3) {Suppression 3e pos.}
taille ← Longueur(lst) Trier(lst)
pos ← ChercherPosition(lst, 3)
mots ← Découper(txt, " ") {Parcours de liste} Pour nombre dans lst faire Écrire(nombre) Fin pour
lst = [ ] # Liste vide lst = [1, 5, 7] print(lst[1]) lst2 = [1, 3.14, "ok", [ ]] # Multitype ! lst.append(9) # Ajout en fin lst.insert(1, 4) # Ajout en 2e position lst[1] = 3 # Modification lst.pop(2) # Suppression 3e pos. taille = len(lst) lst.sort() pos = lst.index(3) mots = txt.split(" ") # Parcours de liste for nombre in lst: print(nombre)
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 11 sur 20
Concept Algorithmique textuelle Algorithmique graphique (Blockly) Langage Python
Fichiers
{Déclarations} Var f : Fichier Var lignes : Liste de Chaînes Var l : Chaîne {Création de fichier}
lignes ← ("Angèle", "Bernard", "Cherifa", "Doug")
f ← Ouvrir("fichier.txt", "écriture") Pour l dans lignes faire Écrire(f, l) Fin pour Fermer(f) {Ajout dans un fichier}
lignes ← ("Ekaterina", "Fali")
f ← Ouvrir("fichier.txt", "ajout") Pour l dans lignes faire Écrire(f, l) Fin pour Fermer(f) {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)
# Choix du répertoire de travail import os os.chdir("D:/Jérôme") # Création de fichier lignes = ["Bernard\n", "Cherifa\n", "Doug\n"] f = open("fichier.txt", "w") # (w)rite f.write("Angèle\n") # Ecriture unique # (\n = passage à la ligne) f.writelines(lignes) # Ecriture multiple f.close() # Ajout dans un fichier lignes = ["Ekaterina\n", "Fali\n"] f = open("fichier.txt", "a") # (a)ppend 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()
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 12 sur 20
Structure d’un algorithme
Algorithme Nom_algorithme {Déclaration constantes} {Déclaration variables} Début {Instructions} Fin
{Exemple} Algorithme Lire_Écrire Var message : Chaîne Début Lire(message) Écrire(message) Fin
M1 HN – Algorithmique et programmation http://eric.univ-lyon2.fr/jdarmont/ Page 13 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 14 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 15 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 16 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 17 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 18 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 19 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 20 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
top related