Analyse de Problèmes avec Python
Analyse de Problèmes avec Python
Le développement d’un logiciel est la transformation d’une idée ou d’un besoin (problème) en un logiciel
fonctionnel.
Le processus de résolution d’un problème peut être décrit en 3 phases :
• Analyse du problème
• Résolution du problème (conception et réalisation de la solution)
• Evaluation de la solution
J’imagine le problème
Analyse Résolution
Le Problème
5
01- ANALYSER UN PROBLÈME
Définition du problème
Un problème peut se définir comme une question à résoudre, qui prête à discussion. Un problème peut aussi se définir par un écart entre ce qui est, et ce qui
devrait ou pourrait être.
Il est soumis à des critères bien définis
Exemple 1 :
6
01- ANALYSER UN PROBLÈME
Définition du problème
L'analyse d'un problème est une étape préalable indispensable dans le processus de résolution de problème.
Le problème posé est souvent en langue naturelle et comporte plusieurs ambiguïtés d’où la nécessité de :
7
01- ANALYSER UN PROBLÈME
Définition du problème
Exemple 2 :
On se donne un ensemble
d’entiers positifs, on
souhaite calculer la Quelle est la moyenne
moyenne (’K’) de ces de ’K’ entiers positifs ?
entiers.
Conseils :
8
01- ANALYSER UN PROBLÈME
Définition du problème
Données d’entrée :
Conseils :
• Décrire précisément et d'avoir bien en tête les valeurs qu'elles peuvent prendre.
9
01- ANALYSER UN PROBLÈME
Définition du problème
Exemple 1 :
Exemple 2 :
10
01- ANALYSER UN PROBLÈME
Définition du problème
Ils correspondent à ce que l'on demande de calculer ou de déterminer pour pouvoir obtenir le résultat
11
01- ANALYSER UN PROBLÈME
Définition du problème
Exemple 1 :
Exemple 2 :
12
01- ANALYSER UN PROBLÈME
Définition du problème
• L’analyse d’un problème se base aussi sur spécification de toutes les relations liant les résultats aux données et éventuellement les résultats entre eux
• La spécification des relations est la partie liée aux traitements à développer afin de résoudre le problème
• Le traitement est décrit à travers une suite finie et ordonnées de règles opératoires à suivre en vue de résoudre un problème.
Exemple 2 :
Le traitement des données est donc la formulation d’une solution imaginée par :
• Analogie: recherche des ressemblances, des rapprochements à partir d'idées déjà trouvées pour un problème précédent plus ou moins similaire.
• Contraste: recherche des différences, des oppositions, des arguments antagonistes.
• Contigüité: recherche des faits se produisant en même temps, des parallélismes, des simultanéïtés et autres concomitances.
Il est nécessaire d’avoir du bon sens, d’adopter une démarche rigoureuse et d’utiliser des outils adaptés
13
CHAPITRE 1
ANALYSER UN PROBLÈME
• Tout traitement est effectué par l’exécution séquencée d’opérations appelées instructions.
Traitement Traitement
séquentiel conditionnel
Traitement Traitement
itératif récursif
15
01- ANALYSER UN PROBLÈME
Types de traitement des données
Le traitement séquentiel
Le traitement est décrit à travers l’enchaînement d’une suite d’actions primitives. Exemple :
La séquence des actions sera exécutée dans l’ordre
Fournir les données
séquentiel conditionnel
Calculer le prix des
carreaux
Calculer le prix du
ciment
Emettre le résultat
16
01- ANALYSER UN PROBLÈME
Types de traitement des données
Le traitement conditionnel
Le traitement est utilisé pour résoudre des problèmes dont la solution ne peut Exemple :
être décrite par une simple séquence d’actions mais implique un ou plusieurs
choix entre différentes possibilités. Un magasin accorde une remise sur les achats de ses clients.
17
01- ANALYSER UN PROBLÈME
Types de traitement des données
Le traitement itératif
L’analyse d’un problème peut révéler le besoin de répéter un même traitement plus d’une fois. Exemple :
Recours à des outils permettant d’exécuter ce traitement un certain nombre de fois sans pour
autant le réécrire autant de fois.
Traitement Traitement
Entrer un entier
séquentiel conditionnel Ajouter l’entier à la somme
Répéter 1 et 2 10 fois
Afficher le résultat
Traitement Traitement
itératif récursif
18
01- ANALYSER UN PROBLÈME
Types de traitement des données
Le traitement récursif
Un problème peut être exprimé en fonction d’un ou de plusieurs sous-problèmes tous de même Exemple :
nature que lui mais de complexité moindre
Si N > 0
Factorielle (N) = N * Factorielle
Si N = 0
Factorielle (N) = 1
Traitement Traitement
itératif récursif
19
CHAPITRE 2
IDENTIFIER LES APPROCHES
D’ANALYSE D’UN PROBLÈME
Ce que vous allez apprendre
dans ce chapitre:
• Différencier les différentes approches
d’analyse d’un problème
• Les maitriser
CHAPITRE 2
IDENTIFIER LES APPROCHES
D’ANALYSE D’UN PROBLÈME
1 Approche descendante
2 Approche ascendante
02- IDENTIFIER LES APPROCHES
D’ANALYSE D’UN PROBLÈME
Approche descendante
Approche descendante
Prix de revient ?
Surface Surface
Prix du m2 Prix du sac
pièce pièce
24
CHAPITRE 2
IDENTIFIER LES APPROCHES
D’ANALYSE D’UN PROBLÈME
1 Approche descendante
2 Approche ascendante
02- IDENTIFIER LES APPROCHES
D’ANALYSE D’UN PROBLÈME
Approche ascendante
Approche ascendante
• Conception des pièces les plus fondamentales qui sont ensuite Une pièce rectangulaire de 4 sur 3 mètres doit être carrelée. Le carrelage d’un
combinées pour former le module de niveau supérieur. m² nécessite 1 sac de ciment. On cherche le prix de revient du carrelage de cette
pièce sachant que le prix des carreaux est de 58 Dh / m² et le prix d’un sac de
• Intégration de sous-modules et de modules dans le module de ciment est de 75 Dh.
niveau supérieur est répétée jusqu'à l'obtention de la solution
complète requise
Prix de revient ?
Surface
pièce
26
PARTIE 2
FORMULER UN TRAITEMENT
7 heures
CHAPITRE 1
RECONNAITRE LA STRUCTURE
D’UN ALGORITHME
1 Définition d’un algorithme
Un algorithme est une suite d'instructions détaillées qui, si elles sont correctement exécutées, conduit à un résultat donné.
"détaillées" signifie que les instructions sont En algorithmique, nous utiliserons un langage situé à mi-
suffisamment précises pour pouvoir être mises en œuvre chemin entre le langage courant et un langage de
correctement par l'exécutant (homme ou machine) programmation appelé pseudo-code.
Explication : Lorsque nous cuisinons, nous utilisons des ingrédients et ustensiles, dans un ordre précis qui est
régis par notre recette (une liste d’instruction dans un ordre donné), afin d’obtenir un résultat précis
30
CHAPITRE 1
RECONNAITRE LA STRUCTURE
D’UN ALGORITHME
1 Définition d’un algorithme
2,5
30
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
• Une constante est un objet dont l'état reste inchangé durant toute l'exécution d'un programme. On ne peut jamais modifier sa valeur et celle-ci doit donc être
précisée lors de la définition de l'objet.
• Une variable est un objet dont le contenu (sa valeur) peut être modifié par une action
• Exemple:
31
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
• A chaque variable utilisée dans le programme, il faut associer un type qui permet de définir :
• l’ensemble des valeurs que peut prendre la variable
• l’ensemble des opérations qu’on peut appliquer sur la variable
Exemples
13 div 5 = 2
13 mod 5 = 3
32
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
• Il existe plusieurs types de réels représentant chacun un ensemble particulier de valeurs prises dans R (ensemble des nombres réels).
33
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
Type caractère
• Un caractère peut appartenir au domaine des chiffres de ”0” à ”9”, des lettres (minuscules et majuscules) et des caractères spéciaux (”*”, ”/”, ”{”, ”$”, ”#”, ”%” …).
• Exemple:
” ” < ”0” < ”1” < ”A” < ”B” < ”a” < ”b” < ”{”
34
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
• Une variable logique ne peut prendre que les valeurs ”Vrai” ou ”Faux”.
• Les principales opérations définies sur les variables de type logique sont : la négation (NON), l’intersection (ET) et l’union (OU).
35
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
Expressions
• Ce sont des combinaisons entre des variables et des constantes à l’aide d’opérateurs.
• Afin d’éviter les ambiguïtés dans l’écriture, on se sert des parenthèses et des relations de priorité entre les opérateurs arithmétiques :
• En cas de conflit entre deux opérateurs de même priorité, on commence par celui situé le plus à gauche
36
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
Expressions
• Ce sont des combinaisons entre des variables et des constantes à l’aide d’opérateurs relationnels (=, <, <=, >, >=, #) et/ou des combinaisons entre des variables et des
constantes logiques à l’aide d’opérateurs logiques (NON , ET, OU, etc).
• On utilise les parenthèses et l’ordre de priorité entre les différents opérateurs pour résoudre les problèmes de conflits.
• Exemple:
5 + 2 * 6 – 4 + (8 + 2 ^ 3) / (2 – 4 + 5 * 2) = 15
37
01- STRUCTURE D’UN ALGORITHME
Objets informatiques (variable, constante, type)
• Toute variable utilisée dans un programme doit avoir fait l’objet d’une déclaration préalable.
38
CHAPITRE 1
RECONNAITRE LA STRUCTURE
D’UN ALGORITHME
1 Définition d’un algorithme
<NOM_ALGORITHME> Cercle
Const Const
pi = 3.14
Const1= val1 : type
Liste des constantes
Const2=val2 : type Var
r, p, s : Réel
………
Var Début
Ecrire(”Entrer le rayon du cercle : ”)
v1 : type Liste des variables
Lire(r)
v2 : type
p := 2 * pi * r
………
s :=pi * r ^2
Début
Ecrire (”Périmètre = ”, p)
Instruction 1 Corps de l’algorithme Ecrire (”Surface = ”, s)
Instruction 2 Fin.
…..;
Fin
42
CHAPITRE 2
RECONNAITRE LES BASES
Ce que vous allez apprendre
dans ce chapitre :
• Maitriser les instructions d’affectation et les
instructions d’entrée/Sortie
• Reconnaitre les différents types de traitement
des instructions dans un algorithme
15 heures
CHAPITRE 2
RECONNAITRE LES BASES
2 Traitement alternatif(conditions)
Instruction d’affectation
• L’affectation consiste à attribuer une valeur à une variable (c’est-à-dire remplir ou modifier le contenu d'une zone mémoire)
Exemple:
• l’instruction : A := 6 signifie « mettre la valeur 6 dans la case mémoire identifiée par A ».
• l’instruction : B := (A + 4) Mod 3 range dans B la valeur 1 (A toujours égale à 6).
• La valeur ou le résultat de l’expression à droite du signe d’affectation doit être de même type ou de type compatible avec celui de la variable à gauche.
43
02- RECONNAITRE LES BASES
Traitement séquentiel (affectation, lecture et écriture)
Instruction de lecture
• Les instructions de lecture et d'écriture (Entrée/Sortie) permettent à la machine de communiquer avec l'utilisateur
• En pseudo-code, on note :
lire (var)
• La machine met la valeur entrée au clavier dans la zone mémoire nommée var.
• Le programme s'arrête lorsqu'il rencontre une instruction Lire et ne se poursuit qu'après la frappe d’une valeur au clavier et de la touche Entrée.
Instruction d’écriture
• L'écriture permet d'afficher des résultats à l'écran (ou de les écrire dans un fichier)
• En pseudo-code, on note :
Ecrire (var)
44
CHAPITRE 2
RECONNAITRE LES BASES
2 Traitement alternatif(conditions)
Traitement alternatif
Rappel :
• Les instructions conditionnelles servent à n'exécuter une instruction ou une séquence d'instructions que si une condition est vérifiée.
• Cette primitive a pour effet d’exécuter la séquence d’instructions si et seulement si la condition est vérifiée.
46
02- RECONNAITRE LES BASES
Traitement alternatif(conditions)
Traitement alternatif
• Cette primitive a pour effet d’exécuter la première séquence d’instructions si la condition est vérifiée ou bien la deuxième séquence d’instructions dans le cas contraire.
47
02- RECONNAITRE LES BASES
Traitement alternatif(conditions)
Exemple 1 Exemple 2
Finsi
• Si la condition est vraie, la seule instruction qui sera exécutée est l’instruction
d’affectation a : = c.
48
02- RECONNAITRE LES BASES
Traitement alternatif(conditions)
Traitement alternatif
Exemple:
• On dispose d’un ensemble de tâches que l’on souhaite exécuter en fonction de la valeur d’une variable choix de type entier, conformément au tableau suivant :
49
02- RECONNAITRE LES BASES
Traitement alternatif(conditions)
Traitement alternatif
finsi
finsi
finsi
finsi
50
CHAPITRE 2
RECONNAITRE LES BASES
2 Traitement alternatif(conditions)
Traitement itératif
il passe automatiquement à la valeur suivante dans son domaine jusqu’à atteindre la valeur finale
Comptcompt+VP
• L’exécution de cette instruction se déroule selon l’organigramme suivant:
Compt>VF
Faux
Vrai
52
02- RECONNAITRE LES BASES
Traitement itératif (boucles)
Traitement itératif
• Structure « Pour………….Faire »
moyenne
var n, i, x, s : réel
Début
lire( n )
s := 0
Pour i de 1 à n faire
lire( x )
s := s + x
Finpour
ecrire( “la moyenne est :”, s / n )
Fin
53
02- RECONNAITRE LES BASES
Traitement itératif (boucles)
Traitement itératif
Faux
Condition
Vrai
Traitements
54
02- RECONNAITRE LES BASES
Traitement itératif (boucles)
Traitement itératif
Exemple : un algorithme permettant de lire une suite de réels, de calculer et d’afficher leur moyenne.
moyenne
var i, x, s : réel
Début
lire( x )
s := 0
i := 0
TantQue x > 0 faire
i : = i + 1
s := s + x
lire( x )
FinTQ
si i ≠ 0
alors écrire( “la moyenne est :”, s / i ) Condition obligatoire pour éviter de diviser par 0 si le premier entier lu est 0
finsi
Fin
55
02- RECONNAITRE LES BASES
Traitement itératif (boucles)
Traitement itératif
• Structure « Répéter…..Jusqu' à »
• La séquence d’instructions est exécutée une première fois, puis l’exécution se répète jusqu’à ce que la condition de sortie soit vérifiée.
• Une boucle « répéter » s’exécute toujours au moins une fois
Traitements
Faux
Condition
56
02- RECONNAITRE LES BASES
Traitement itératif (boucles)
Traitement itératif
• Structure « Répéter…..Jusqu' à »
Exemple : un algorithme permettant de lire deux entiers, de calculer et d’afficher le résultat de la division du premier par le second (quotient)
quotient
var x, y : entier
Début
lire( x )
répéter
lire( y ) un contrôle obligatoire doit être effectué lors de la lecture de la deuxième valeur
jusqu’à y > 0
écrire( x / y )
Fin
57
02- RECONNAITRE LES BASES
Traitement itératif (boucles)
(*) : Le passage d’une boucle « répéter » ou « tantque » à une boucle « pour » n’est possible que si le nombre de parcours est connu à l’avance
(**) : Lors du passage d’une boucle « pour » ou « tantque » à une boucle « répéter », faire attention aux cas particuliers (le traitement sera toujours exécuté au moins une fois)
58
02- RECONNAITRE LES BASES
Traitement itératif (boucles)
non
oui Le traitement
Boucle « Répéter » s’exécute a u
moins une fois
non
Boucle « TantQue »
59
CHAPITRE 3
STRUCTURER UN ALGORITHME
Ce que vous allez apprendre
dans ce chapitre :
• Maîtriser la définition des procédures et des
fonctions
• Maîtriser les notions de paramètre formel et
paramètre effectif
• Définir les différents types de passage des
paramètres
• Connaître la notion de variable locale et de
variable globale
CHAPITRE 3
STRUCTURER UN ALGORITHME
1 Procédures et Fonctions
Programmation structurée
• La résolution d’un problème complexe peut engendrer des milliers de lignes de code :
• Algorithme long
• Algorithme difficile à écrire
• Algorithme difficile à interpréter
• Algorithme difficile à maintenir
Programmation Structurée
• Avantages
• clarté de l’algorithme
• lisibilité de la lecture d’un algorithme
• facilité de maintenance
• réutilisation des sous algorithmes
62
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Programmation structurée
Exemple : Un programme de gestion de scolarité peut être découpé en plusieurs modules : inscription, suivi des absences, examens, diplômes, etc
Les modules développés peuvent être réutilisés plusieurs fois dans le même
programme ou dans d’autres programmes une fois intégrés à des
bibliothèques.
Décomposition d’un programme en sous-programmes
63
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Procédures et fonctions
64
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
• une variable
• une constante
• un appel de fonction
• Le paramètre formel et le paramètre effectif correspondant doivent avoir le même type ou être de types compatibles.
• La correspondance entre paramètres formels et paramètres effectifs se fait selon l’ordre de leurs apparitions dans la définition et dans l’utilisation de la procédure ou la
fonction.
65
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
<Nom_proc> (<liste_par_form>)
Var <declaration_variables>
Debut
<Corps_procédure>
Fin Nom_proc> : désigne le nom de la procédure.
<liste_par_form> : la liste des paramètres formels. Un paramètre résultat ou
donnée/résultat doit être précédé par le mot clé var.
<declaration_varibales> : la liste des variables
<Corps_procédure> : la suite des instructions décrivant le traitement à effectuer
66
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Exemple:
• La procédure suivante permet de lire N valeurs entières et de calculer la plus petite Min_Max (N : entier ; var min: entier, var max : entier)
et la plus grande parmi ces N valeurs. Var i, x : entier
Début
• Les entiers saisis doivent être supérieurs à 0 et inférieurs à 100. min := 100
max := 0
Le nom de cette procédure est Min_Max pour i de 1 à N faire
Répéter
Les paramètres formels sont : l’entier N comme paramètre donné, les Lire ( x )
entiers min et max comme paramètres résultats (précédés par le mot clé Jusqu’à (x > 0) et (x < 100)
var). Si x < min Alors
min := x
2 variables locales de type entier : i et x Finsi
Si x > max Alors
max := x
Finsi
Finpour
Fin
67
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Nom_fonction>(<liste_par_form>) : <Type-fonction>
Var <declarat_var_locales>
Début
<Corps_fonction>
retourner <valeur>
Nom_fonction>: désigne le nom de la fonction
Fin
<liste_par_form> : désigne la liste des paramètres formels de la fonction
68
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Exemple:
• La fonction suivante permet de lire N valeurs entières et de calculer la plus petite Min (N : entier): entier
parmi ces N valeurs. Var i, x, min : entier
Début
• Les entiers saisis doivent être supérieurs à 0 et inférieurs à 100. min := 100
pour i de 1 à N faire
Le nom de cette fonction est Min Répéter
Lire ( x )
La fonction retour un entier Jusqu’à (x > 0) et (x < 100)
Si x < min Alors
Les paramètres formels sont : l’entier N comme paramètre donné min := x
3 variables locales de type entier : i , x et min Finsi
Finpour
retourner min
Fin
69
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
• Lors de l’appel d’un sous algorithme (procédure ou fonction) à partir d’un algorithme appelant, on utilisera le nom de la procédure ou la fonction suivi par la liste de ses
paramètres effectifs
<Nom>(<liste_par_effectif>)
• Les paramètres effectifs et les paramètres formels doivent être compatibles en nombre et en type.
70
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Exemple:
• On souhaite écrire un algorithme qui lit un entier N supérieurs à 3, puis saisit N valeurs entières et affiche la plus petite parmi ces N valeurs. Les entiers saisis doivent
être supérieurs à 0 et inférieurs à 100.
Finpour
retourner min
Fin
71
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Passage de paramètre
Appelant Appelé
[Link] [Link]
Appelant Appelé
Passage par adresse
[Link] [Link]
72
03- STRUCTURER UN ALGORITHME
Procédures et Fonctions
Passage de paramètre
Exemple:
Appel :
Appel : Programme Principal
Programme Principal var y : entier
var x : entier Debut
Debut y := 9
x := 9 inc(y)
ajoute_un(x) ecrire(y)
ecrire(x) Fin
Fin
Valeur affichée 9 Valeur affichée 10
73
CHAPITRE 3
STRUCTURER UN ALGORITHME
1 Procédures et Fonctions
Déclaration de la
procédure A
• Une variable définie au niveau du programme principal (celui qui résout le Début
problème initial, le problème de plus haut niveau) est appelée variable X variable locale de A
X:=..
globale
I:= Y variable locale de A
• La portée d’une variable globale est totale : tout sous-algorithme du Fin
programme principal peut utiliser cette variable
• Une variable définie au sein d’un sous-algorithme est appelée variable locale Procédure B
la procédure B
Déclaration de
• La portée d’une variable locale est uniquement le sous-algorithme qui la Var Y: entier
déclare Début
Y:= Y variable locale de B
• Lorsque le nom d’une variable locale est identique à une variable globale, la
variable globale est localement masquée Dans ce sous-programme la variable Fin
(programme principal)
X variable globale
X:=..
77
CHAPITRE 4
STRUCTURER LES DONNÉES
Ce que vous allez apprendre
dans ce chapitre:
Structure de données
• Une structure de données est une manière particulière de stocker et d’organiser des données dans un ordinateur de façon à pouvoir être utilisées efficacement.
78
04- STRUCTURER LES DONNÉES
Différents types de tableaux
• Un tableau est une structure de données qui permet de stocker à l’aide d’une seule variable un ensemble de valeurs de même type
• L’accès à un élément du tableau se fait via la position de cet élément dans le tableau
nom_tableau [indice]
avec indice est la position de l’élément dans le tableau
79
04- STRUCTURER LES DONNÉES
Différents types de tableaux
• Caractéristiques
• Un tableau vecteur possède un nombre maximal d’éléments défini lors de l’écriture de l’algorithme (les bornes sont des constantes explicites, par exemple
MAX, ou implicites, par exemple 10)
• Le nombre d’éléments maximal d’un tableau est différent du nombre d’éléments significatifs dans un tableau
LectutreTabVecteur
Var i : entier
T : tableau[1..12] de Réel
Debut
Pour i de 1 à 12 faire
Lire(T[i])
Finpour
Fin
80
04- STRUCTURER LES DONNÉES
Différents types de tableaux
81
04- STRUCTURER LES DONNÉES
Différents types de tableaux
LectutreTabMatrice j de 1 à 8
Var i , j : entier indices
T: tableau[1..12 , 1..8] de Réel
Debut
Pour i de 1 à 12 faire
Pour j de 1 à 8 faire
Lire(T[i , j])
Finpour
Finpour
Fin i
de 1 à 12
.
.
82
04- STRUCTURER LES DONNÉES
Différents types de tableaux
• Il existe plusieurs méthodes de tri qui se différencient par leur complexité d’exécution et leur complexité de compréhension pour le programmeur.
83
04- STRUCTURER LES DONNÉES
Différents types de tableaux
Le tri par sélection est la méthode de tri la plus simple, elle consiste à : Tri_Selection(Var T : Tab)
• chercher l’indice du plus petit élément du tableau T[1..n] et permuter
l’élément correspondant avec l’élément d’indice 1 Var
i, j, x, indmin : Entier
• chercher l’indice du plus petit élément du tableau T[2..n] et permuter
Début
l’élément correspondant avec l’élément d’indice 2
• ………………………………………………………………………………………… Pour i de 1 à (n-1) Faire
indmin i
• chercher l’indice du plus petit élément du tableau T[n-1..n] et permuter
l’élément correspondant avec l’élément d’indice (n-1). Pour j de (i+1) à n Faire
Si (T[j] < T[indmin]) Alors
indmin j
FinSi
FinPour
x T[i]
T[i] T[indmin]
T[indmin] x
FinPour
Fin
84
04- STRUCTURER LES DONNÉES
Différents types de tableaux
Tri à bulles
85
04- STRUCTURER LES DONNÉES
Différents types de tableaux
Le tri par insertion consiste à prendre les éléments de la liste un par un et insérer chacun dans sa bonne Tri_Insertion(Var T : Tab)
place de façon que les éléments traités forment une sous-liste triée. Var
Pour ce faire, on procède de la façon suivante : i, j, x, pos : Entier
Début
• comparer et permuter si nécessaire T[1] et T[2] de façon à placer le plus petit dans la case d’indice
• comparer et permuter si nécessaire l’élément T[3] avec ceux qui le précèdent dans l’ordre (T[2] puis Pour i de 2 à n Faire
T[1]) afin de former une sous-liste triée T[1..3] pos i - 1
• …………………………………………………. TantQue (pos>=1) et (T[pos]>T[i]) Faire
• comparer et permuter si nécessaire l’élément T[n] avec ceux qui le précèdent dans l’ordre (T[n-1],
pos pos – 1
T[n-2], …) afin d’obtenir un tableau trié.
FinTQ
pos pos + 1
x T[i]
Pour j de (i-1) à pos [pas = -1] Faire
T[j+1] T[j]
FinPour
T[pos] x
[Pas = -1] signifie que le parcours se fait dans le sens
FinPour décroissant
Fin
86
CHAPITRE 4
STRUCTURER LES DONNÉES
Chaine de caractères
• Une chaîne est une suite de caractères. La chaîne ne contenant aucun caractère est appelée chaîne vide.
ch : Chaîne
chn : Chaîne[Max]
La variable ch peut contenir jusqu’à 255 caractères alors que chn peut
contenir au maximum Max caractère
88
04- STRUCTURER LES DONNÉES
Chaines de caractères
Chaine de caractères
89
04- STRUCTURER LES DONNÉES
Chaines de caractères
Chaine de caractères
• Procédures standards sur les chaines de caractères • Fonctions standards sur les chaines de caractères
90
PARTIE 3
PROGRAMMER EN PYTHON
Dans ce module, vous allez :
2 Blocs d’instructions
Langage de programmation
• Langage de programmation est un outil à l’aide duquel le programmeur écrit des programmes exécutables sur un ordinateur
94
01- PYTHON
Critères de Choix d’un langage de programmation
Instructions de contrôle
Critères affectant la • Pour la lisibilité d’un langage de programmation, il est important d’avoir des
structures de contrôle adéquates ( structures itératives, structures conditionnelles,
fiabilité etc)
• Par exemple, l’un des plus grands problèmes du premier ,BASIC est que sa seule
instruction de contrôle était le « goto »
95
01- PYTHON
Critères de Choix d’un langage de programmation
• Abstraction des données: les données peuvent être abstraites par les langages de
Critères affectant programmation de haut niveau dans des objets à interface simple. L’utilisateur n’a
la fiabilité pas besoin de connaitre les détails d’implémentation pour les utiliser (utilisation des
arbres, tables de hachage,….)
L'expressivité
• Un langage est expressif s’il offre des outils simples, commodes et intuitifs pour
permettre au programmeur d'exprimer les différents concepts de programmation
Exemple: Utiliser des boucles "for" et "while" au lieu de "goto
96
01- PYTHON
Critères de Choix d’un langage de programmation
Critères d’évaluation
Vérification de types
• La vérification de type signifie qu’un langage est capable de détecter les erreurs
relatives aux types de données lors de la compilation etbde l'exécution
Exemple:
• Le langage de programmation C e détecte pas ces erreurs, le programme peut-être
Critères affectant exécuté, mais les résultats ne seront pas significatifs
Critères affectant
la facilité
la lisibilité Prise en Charge des Exceptions
d'écriture • La possibilité pour un programme d’intercepter les erreurs faites pendant l’exécution,
de les corriger, et de continuer l’exécution augmente de beaucoup la fiabilité du
langage de programmation
Exemple:
• Des langages tels que Python, Ada, C++ et Java, Ruby, C# ont des capacités étendues
de prise en charge des exceptions, mais de tels capacités sont absentes dans d'autres
langages tels que le C ou le FORTRAN
Critères affectant
Lisibilité et facilité d'écriture
la fiabilité • La lisibilité et la facilite d’écriture influencent la fiabilité des langages de
programmation
• si il n’y a pas de moyens naturels d’exprimer un algorithme, des solutions complexes
seront utilisées, et le risque d'erreurs (bugs) augmente
97
01- PYTHON
Critères de Choix d’un langage de programmation
• Autres facteurs
• Les coûts de la compilation et de l’exécution de programmes
• Les coûts de la maintenance de programmes
• le coût de la mise en marche du langage
• le coût lié au manque de fiabilité
• le coût de la maintenance du langage (correction, modification et ajout de nouvelles fonctionnalités)
Autres critères
98
01- PYTHON
Critères de Choix d’un langage de programmation
Langage python
• Python est un langage de programmation développé depuis 1989 par Guido van Rossum et de nombreux contributeurs bénévoles
• Afin de réparer certains défauts du langage, la version Python 3.0 a été publié en décembre 2008.
• Cette version a été suivie par une version 3.1 qui corrige les erreurs de la version 3.0
Caractéristiques de Python
• Python est portable, non seulement sur les différentes variantes d'Unix, mais aussi sur les OS propriétaires: MacOS, BeOS, NeXTStep, MS-DOS et les différentes
variantes de Windows
• Python est gratuit, mais on peut l'utiliser sans restriction dans des projets commerciaux
• La syntaxe de Python est très simple et, combinée à des types de données évolués (listes, dictionnaires,...), conduit à des programmes à la fois très compacts et très
lisibles.
• Python gère ses ressources (mémoire, descripteurs de fichiers...) sans intervention du programmeur
99
01- PYTHON
Critères de Choix d’un langage de programmation
Caractéristiques de Python
• Python intègre un système d'exceptions, qui permettent de simplifier considérablement la gestion des erreurs.
• Python est dynamique (l'interpréteur peut évaluer des chaînes de caractères représentant des expressions ou des instructions Python), orthogonal (un petit nombre
de concepts suffit à engendrer des constructions très riches) et introspectif (un grand nombre d'outils de développement, comme le debugger sont implantés en
Python lui-même).
• Python est dynamiquement typé c’est à dire tout objet manipulable par le programmeur possède un type bien défini à l'exécution, qui n'a pas besoin d'être déclaré à
l'avance.
• Python est extensible, on peut facilement l'interfacer avec des bibliothèques C existantes.
• La bibliothèque standard de Python, et les paquetages contribués, donnent accès à une grande variété de services: chaînes de caractères et expressions régulières,
services UNIX standard (fichiers, pipes, signaux, sockets, threads...), protocoles Internet (Web, News, FTP, CGI, HTML...), persistance et bases de données, interfaces
graphiques
100
CHAPITRE 1
Transformer une suite d’étapes
algorithmique en une suite
d’instructions Python
2 Blocs d’instructions
• En Python, chaque instruction s'écrit sur une ligne sans mettre d'espace:
Exemple:
a = 10
b = 3
print(a, b)
• Ces instructions simples peuvent cependant être mises sur la même ligne en les séparant par des points virgules ; les lignes étant exécutées dans l'ordre de gauche à
droite:
• La séparation entre les en-têtes qui sont des lignes de définition de boucles, de fonction, de
classe qui se terminent par les deux points :
• Une indentation s'obtient par le bouton tab (pour tabulation) ou bien par 4 espaces
successifs.
104
CHAPITRE 1
TRANSFORMER UNE SUITE
D’ÉTAPES ALGORITHMIQUE EN
UNE SUITE D’INSTRUCTIONS
PYTHON
2 Blocs d’instructions
• Peu de ponctuation
• Python n'offre pas la notion de variable, mais plutôt celle de référence (adresse) d'objet.
104
01- PYTHON
Conversion de l’algorithme en Python
Types de données
• Type Boolean
• Type caractère
105
01- PYTHON
Conversion de l’algorithme en Python
Variables
• Une variable est créée au moment où vous lui attribuez une valeur pour la première fois.
• Les variables de chaîne peuvent être déclarées à l'aide de guillemets simples ou doubles:
• Python permet d'affecter des valeurs à plusieurs variables sur une seule ligne:
106
01- PYTHON
Conversion de l’algorithme en Python
Variables d’entrée
• La fonction input() retourne une valeur correspondant à ce que l'utilisateur a entré. Cette valeur peut alors être assignée à une variable quelconque
• input() renvoie une valeur dont le type est une chaine de caractère
Variables de sortie
• La fonction print Python est souvent utilisée pour afficher des variables et des chaines de caractères.
• Pour combiner à la fois du texte et une variable, Python utilise le caractère +:
107
01- PYTHON
Conversion de l’algorithme en Python
Variables de sortie
• Le mot clé sep précise une séparation entre les variables chaines
108
01- PYTHON
Conversion de l’algorithme en Python
• Les quatre arithmétiques de base se font de manière simple sur les types numériques (nombres entiers et réels)
109
01- PYTHON
Conversion de l’algorithme en Python
110
01- PYTHON
Conversion de l’algorithme en Python
• L’opérateur indice [ ]
• Une chaîne de caractères est une séquence de caractères.
• Un caractère de la chaîne est accessible par l’opérateur indice [ ]
111
01- PYTHON
Conversion de l’algorithme en Python
• Recherche de sous-chaînes
• endswith: vérifie si une chaine se termine par une autre
• startswith: vérifie si une chaine se commence par une autre
• Find: recherche de la position d’une chaine dans une autre
• Count: retourne ne nombre d’occurrence d’une chaine dans une autre
112
01- PYTHON
Conversion de l’algorithme en Python
Structure conditionnelle
Exemple1:
Exemple 2: Exemple 3:
• Le mot clé or est un opérateur logique et est utilisé pour combiner des instructions conditionnelles:
• Le mot clé and est un opérateur logique et est utilisé pour combiner des instructions conditionnelles:
113
01- PYTHON
Conversion de l’algorithme en Python
Boucles d'itérations
• Boucle While
• Avec la boucle while, il est possible d’exécuter un ensemble d'instructions tant qu'une condition est vraie:
• Avec l'instruction break, nous pouvons arrêter la boucle même si la condition while est vraie:
• Avec l'instruction continue, nous pouvons arrêter l'itération en cours et continuer avec la suivante:
114
01- PYTHON
Conversion de l’algorithme en Python
Boucles d'itérations
• Boucle For
• Une boucle for est utilisée pour itérer sur une séquence (c'est-à-dire une liste, un tuple, un dictionnaire, un ensemble ou une chaîne):
• Même les chaînes sont des objets itérables, elles contiennent une séquence de caractères
• Avec l'instruction break, nous pouvons arrêter la boucle avant d'avoir bouclé tous les éléments:
115
01- PYTHON
Conversion de l’algorithme en Python
Boucles d'itérations
• Boucle For
• Pour parcourir un ensemble de codes un nombre spécifié de fois,
nous pouvons utiliser la fonction range (),
• La fonction range () renvoie une séquence de nombres,
commençant à 0 par défaut, et incrémentant de 1 (par défaut),
et se termine à un nombre spécifié;
116
CHAPITRE 1
Transformer une suite d’étapes
algorithmique en une suite
d’instructions Python
2 Blocs d’instructions
• Afin d’améliorer le langage Python, la communauté qui développe Python publie régulièrement des Python Enhancement Proposal (PEP), suivi d’un numéro.
• Il s’agit de propositions concrètes pour améliorer le code, ajouter de nouvelles fonctionnalités, mais aussi des recommandations sur la manière d’utiliser Python, bien
écrire du code, etc.
• On parle de code pythonique lorsque ce dernier respecte les règles d’écriture définies par la communauté Python mais aussi les règles d’usage du langage.
• La PEP 8 Style Guide for Python Code 2 est une des plus anciennes PEP (les numéros sont croissants avec le temps). Elle consiste en un nombre important de
recommandations sur la syntaxe de Python
Indentation
Commentaires
118
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• Cela vient d’un constat simple, l’indentation améliore la lisibilité d’un code
• Dans la PEP 8, la recommandation pour la syntaxe de chaque niveau d’indentation est très
simple : 4 espaces
119
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• Les modules sont des programmes Python qui contiennent des fonctions que l’on est amené à
réutiliser souvent (on les appelle aussi bibliothèques ou libraries). Ce sont des « boîtes à outils »
qui vont vous être très utiles.
• l’utilisation de la syntaxe import module permet d’importer tout une série de fonctions organisées
par «thèmes ».
• Exemple:
• les fonctions gérant les nombres aléatoires avec random et les fonctions mathématiques avec
math. Python possède de nombreux autres modules internes (c’est-à-dire présent de base
lorsqu’on installe Python)
120
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
121
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• La PEP 8 recommande d’entourer les opérateurs (+, -, /, *, ==, !=, >=, not, in, and, or. . . )
d’un espace avant et d’un espace après. Par exemple :
• Ni juste avant la parenthèse ouvrante d’une fonction ou le crochet ouvrant d’une liste ou
d’un dictionnaire :
122
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• Par contre, pour les tranches de listes, on ne met pas d’espace autour du :
123
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• À l’intérieur d’une parenthèse, on peut revenir à la ligne sans utiliser le caractère \. C’est
particulièrement utile pour préciser les arguments d’une fonction ou d’une méthode,
lors de sa création ou lors de son utilisation :
124
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• Les parenthèses sont également très pratiques pour répartir sur plusieurs lignes une
chaîne de caractères qui sera affichée sur une seule ligne
• L’ opérateur + est utilisée pour concaténer les trois chaînes de caractères et que celles-ci
ne sont pas séparées par des virgules.
• On peut aussi utiliser les parenthèses pour évaluer un expression trop longue
125
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• Dans un script, les lignes vides sont utiles pour séparer visuellement les différentes
parties du code.
• Il est recommandé de laisser deux lignes vides avant la définition d’une fonction
• . On peut aussi laisser une ligne vide dans le corps d’une fonction pour séparer les
sections logiques de la fonction, mais cela est à utiliser avec parcimonie.
126
01- PYTHON
Optimisation du code (Bonnes pratiques de codage,…)
• Les commentaires donnent des explications claires sur l’utilité du code et doivent être
synchronisés avec le code, c’est-à-dire que si le code est modifié, les commentaires
doivent l’être aussi (le cas échéant).
• Les commentaires sont sur le même niveau d’indentation que le code qu’ils
commentent.
• Les commentaires sont constitués de phrases complètes, avec une majuscule au début
(sauf si le premier mot est une variable qui s’écrit sans majuscule) et un point à la fin
127
CHAPITRE 2
MANIPULER LES DONNÉES
3- Fichiers de données
4- Bibliothèques standards
02- MANIPULER LES DONNÉES
Manipulation des fonctions/lambda
• Une fonction est un bloc de code qui ne s'exécute que lorsqu'elle est appelée.
• Vous pouvez transmettre des données, appelées paramètres, à une fonction.
• Une fonction peut renvoyer des données en conséquence.
• Pour appeler une fonction, utilisez le nom de la fonction suivi de parenthèses
• Il est possible de donner une valeur par défaut à un paramètre d’une fonction
130
02- MANIPULER LES DONNÉES
Manipulation des fonctions/lambda
Fonction Lambda
• En Python, le mot clé Lambda est utilisé pour déclarer une fonction anonyme (sans nom), raison pour laquelle ces fonctions sont appelées « fonction Lambda » .
• Une fonction Lambda est comme n’importe quelle fonction Python normale, sauf qu’elle n’a pas de nom lors de sa définition et qu’elle est contenue dans une ligne
• Tout comme la définition d’une fonction normale par l’utilisateur à l’aide du mot clé ‘def’, une fonction Lambda est définie à l’aide du mot clé ‘Lambda ’.
• Une fonction Lambda peut avoir ‘n’ nombre d’arguments mais une seule expression
Syntaxe
Exemple:
• Une fonction lambda qui ajoute 10 au nombre passé en argument et affiche le résultat:
• Une définition de fonction qui prend un argument, et cet argument sera multiplié par un nombre inconnu
131
02- MANIPULER LES DONNÉES
Manipulation des fonctions/lambda
Fonction Lambda
• En Python, le mot clé Lambda est utilisé pour déclarer une fonction anonyme (sans nom), raison pour laquelle ces fonctions sont appelées « fonction Lambda » .
• Une fonction Lambda est comme n’importe quelle fonction Python normale, sauf qu’elle n’a pas de nom lors de sa définition et qu’elle est contenue dans une ligne
• Tout comme la définition d’une fonction normale par l’utilisateur à l’aide du mot clé ‘def’, une fonction Lambda est définie à l’aide du mot clé ‘Lambda ’.
• Une fonction Lambda peut avoir ‘n’ nombre d’arguments mais une seule expression
Syntaxe
Exemple:
• Une fonction lambda qui ajoute 10 au nombre passé en argument et affiche le résultat:
• Une définition de fonction qui prend un argument, et cet argument sera multiplié par un nombre inconnu
132
CHAPITRE 2
Manipuler les données
3 Fichiers de données
4 Bibliothèques standards
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Tableaux dynamiques(Liste)
134
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Tableaux dynamiques(Liste)
135
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Tableaux dynamiques(Liste)
136
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Tableaux dynamiques(Liste)
137
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Tableaux dynamiques(Liste)
• Autres méthodes
138
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
139
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
140
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
• Autres méthodes
141
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
142
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
• Une fois qu'un ensemble est créé, vous ne pouvez pas modifier ses éléments, mais vous pouvez ajouter de nouveaux éléments.
143
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
144
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
145
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
• Autres méthodes:
146
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Dictionnaires
• En Python, les dictionnaires sont écrits avec des accolades, et ils ont des clés et des valeurs.
147
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Dictionnaires
148
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Dictionnaires
• Recherche de la longueur:
• Ajout à un dictionnaire:
149
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Dictionnaires
150
02- MANIPULER LES DONNÉES
Listes, tuples, dictionnaires, ensembles (set)
Dictionnaires
• Autres méthodes
151
CHAPITRE 2
Manipuler les données
3 Fichiers de données
4 Bibliothèques standards
02- MANIPULER LES DONNÉES
Fichiers de données
• Python a plusieurs fonctions pour créer, lire, mettre à jour et supprimer des fichiers texte.
• La fonction clé pour travailler avec des fichiers en Python est open().
• Elle prend deux paramètres; nom de fichier et mode.
• Il existe quatre méthodes (modes) différentes pour ouvrir un fichier:
•"r" -Lecture -Par défaut. Ouvre un fichier en lecture, erreur si le fichier n'existe pas
•"a" -Ajouter -Ouvre un fichier à ajouter, crée le fichier s'il n'existe pas
•"w" -Écrire -Ouvre un fichier pour l'écriture, crée le fichier s'il n'existe pas
•"x" -Créer -Crée le fichier spécifié, renvoie une erreur si le fichier existe
153
02- MANIPULER LES DONNÉES
Fichiers de données
154
02- MANIPULER LES DONNÉES
Fichiers de données
• Fermer un fichier
• Il est recommandé de toujours fermer le fichier lorsque vous en avez terminé.
155
02- MANIPULER LES DONNÉES
Fichiers de données
Format CSV
• Il existe différents formats standards de stockage de données. Il est recommandé de favoriser ces formats car il existe déjà des modules Python permettant de
simplifier leur utilisation.
• Le fichier Comma-separated values (CSV) est un format permettant de stocker des tableaux dans un fichier texte. Chaque ligne est représentée par une ligne de texte
et chaque colonne est séparée par un séparateur (virgule, point-virgule …).
• Les champs texte peuvent également être délimités par des guillemets.
• Lorsqu'un champ contient lui-même des guillemets, ils sont doublés afin de ne pas être considérés comme début ou fin du champ.
• Si un champ contient un signe pouvant être utilisé comme séparateur de colonne (virgule, point-virgule …) ou comme séparateur de ligne, les guillemets sont donc
obligatoires afin que ce signe ne soit pas confondu avec un séparateur.
156
02- MANIPULER LES DONNÉES
Fichiers de données
Format CSV
• Il est également possible de lire les données et obtenir un dictionnaire par ligne contenant les données en utilisant DictReader au lieu de reader
157
02- MANIPULER LES DONNÉES
Fichiers de données
Format CSV
Nom;Prénom;Téléphone
Dubois;Marie;0198546372
Duval;"Julien ""Paul""";0399741052
Jacquet;Bernard;0200749685
Martin;"Julie;Clara";0399731590
158
02- MANIPULER LES DONNÉES
Fichiers de données
Format CSV
• Il est également possible d'écrire le fichier en fournissant un dictionnaire par ligne à condition que chaque dictionnaire possède les mêmes clés.
• Il faut également fournir la liste des clés des dictionnaires avec l'argument fieldnames :
reference;quantite;produit;prixUnitaire
F452CP;41;cahier;1.6
D857BL;18;stylo bleu;0.95
D857NO;18;stylo noir;0.95
GF955K;4;équerre;5.1
RT42AX;13;compas;5.25
159
02- MANIPULER LES DONNÉES
Fichiers de données
Format JSON
• Le format JavaScript Object Notation (JSON) est issu de la notation des objets dans le langage JavaScript.
• Il s'agit aujourd'hui d'un format de données très répandu permettant de stocker des données sous une forme structurée.
• Il ne comporte que des associations clés → valeurs (à l'instar des dictionnaires), ainsi que des listes ordonnées de valeurs (comme les listes en Python).
• Une valeur peut être une autre association clés → valeurs, une liste de valeurs, un entier, un nombre réel, une chaîne de caractères, un booléen ou une valeur nulle.
160
02- MANIPULER LES DONNÉES
Fichiers de données
Format JSON
{'Troyes': {'population': {'2006': 61344, '2011': 60013, '2014': 60750}, 'codePostal': 10000,
'nomDepartement': 'Aube'}, 'Dijon': {'population': {'2006': 151504, '2011': 151672, '2014':
153668}, 'codePostal': 21000, 'nomDepartement': "Côte d'Or"}}
161