Vous êtes sur la page 1sur 28

Plan

1. Notion d’algorithme
2. Opérations élémentaires : affectation,
Module : Informatique entrée/sortie
Classes: 1ères Années MP – PC –T 3. Structures conditionnelles
Chapitre 1: 4 Structures itératives
4.

RAPPEL DES NOTIONS 5. Notion de coût d'un algorithme et classes de


complexité
ALGORITHMIQUES 6. Création et manipulation des tableaux
Enseignant : Dr. Khemaies GHALI (ghali_khemaies@yahoo.fr)
Page Facebook: https://www.facebook.com/groups/ipein.info/
Année universitaire 2016/2017

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 2/110

Définition et Propriétés d’un


algorithme (1/2)
 Un algorithme
g est une description
p des étapes
p de la résolution d’un
problème selon une syntaxe;

1ère Partie:  c’est donc la description logique d’un procédé.


 Le point de départ de l’élaboration d’un algorithme est d’identifier les :
– résultats à obtenir,
– les données en entrée et
NOTION – les moyens pour obtenir les résultats recherchés à partir des

D ALGORITHME
D’ALGORITHME données.
 A un problème donné, peut correspondre plusieurs algorithmes.
 Un algorithme exécute un ordonnancement d’un ensemble fini
d’ ti
d’actions sur d
des d
données
é concrètes
èt pour obtenir
bt i un ou plusieurs
l i
résultats.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 3/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 4/110
Définition et Propriétés d’un
Structure d’un Algorithme
g (1/2)
( )
algorithme (2/2) ALGORITHME nom_Algo
entête
 Tout algorithme possède:

Déclarattion dess objetss/actions définiies


D
CONSTANTE nom_Constante = Valeur de la constante
 une entête, TYPE nom_Type =Définition du type
 une partie déclarative (optionnelle)
(optionnelle), {Cette partie est utile lorsqu’il
lorsqu il y a des
types définis par l’utilisateur}

le)
(optio
 et un corps regroupant l’ensemble des actions à exécuter. VARIABLE nom_Var1 : type1
 Le
L corps d
de chaque
h algorithme
l ith comporte
t lles ttrois
i parties
ti suivantes
i t : nom_Var2, …, nom_Varp : type2

onnel
 La préparation des données nécessaires à la résolution du {type1 ou type2 peuvent êtres des
types élémentaires ou définis}
problème et la vérification de leur cohérence si nécessaire
nécessaire.
 Le traitement : définir les actions à effectuer ainsi que leur PROCEDURE … FONCTION …
enchaînement pour résoudre le problème
problème. {Cette partie sera traitée au chapitre 4}
 La restitution du (ou des) résultat(s) à l’utilisateur. DEBUT
corps Séquence d’instructions (*)
FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 5/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 6/110

Structure d’un Algorithme(2/2)


g ( ) Les déclarations
 Toute information manipulée doit faire l'objet d’une déclaration
Opérrations élémen
DEBUT préalable sauf si cette information est p
p prédéfinie.
O é i
Opérations de
d lecture
l
 La déclaration est constituée essentiellement de deux grandes
parties dont l'ordre doit être respecté :
Séq

Opérations dd’affectation
affectation
quence d’instru

 La déclaration des objets (ou entités) manipulés :


Opérations d’écriture
ntaires

 Les objets élémentaires


Structures Conditionnelles
 Les objets structurés définis par l’utilisateur
ructionss

Structures répétitives/itératives
 La déclaration des actions définies par l’utilisateur
Appels à des modules
REMARQUE : Les actions élémentaires ou instructions élémentaires
(procédures et fonctions)
(prédéfinis par les langages de programmation) ne doivent pas être
FIN déclarées.
déclarées
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 7/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 8/110
Les Objets Objets
j Elémentaires(1/2)
( )
 Les entités ou encore les objets manipulés peuvent être :
 Un identificateur est un nom désignant l’objet
l objet et qui doit être
 Simples (objets élémentaires)
unique dans l’algorithme et invariant et ne doit :
 Complexes (objets structurés) construits à partir des objets être formé q
que de lettres et/ou de chiffres non séparée
p p
par un
élémentaires et définis par l’utilisateur.
espace mais pouvant être attachées par « _ » et commençant
Exemple : les intervalles, les enregistrements, les impérativement par une lettre,
t bl
tableaux, l ensembles,
les bl l listes,
les li t etc.
t (à voir
i plus
l ttard)
d)
 pas comporter de caractères spéciaux (+,*,/,(,à,…),
 Tout objet élémentaire doit être bien spécifié et caractérisé par :  pas être un mot réservé (Algorithme, début, fin, SI,…).
• un identificateur
spécifiés lors de la déclaration
• un type  Le type est la nature de l’objet qui représente le domaine de
• une valeur - l’exécution si l’objet est variable. définition dans lequel l’objet prend ses valeurs ainsi que les
spécifiée lors de : opérations de base qui lui sont appliquées.
- la déclaration si l’objet est fixe.
fixe
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 9/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 10/110

Objets
j Elémentaires(2/2)
( )

 Le type simple ou scalaire représente le type prédéfini par la


majorité des langages de programmation sur machine et qui
regroupe : le type entier (entiers relatifs), le type réel, le type 2ème Partie:
booléen et le type caractère.

 La valeur est une instance quelconque de l’ensemble de OPÉRATIONS


définition décrit par le type.
 Lorsque la valeur de l’objet dans l’algorithme ne change pas
ÉLÉMENTAIRES
d’une exécution à l’autre on parle alors de constante (Exp.
Pi=3 14)
Pi=3.14).
 Lorsque la valeur de l’objet change au cours de l’algorithme
ou d’une
d une exécution à l’autre
l autre on parle alors de variable.
variable
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 11/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 12/110
Opérations Elémentaires (1/4): Opérations Elémentaires (2/4):
« Affectation » « Affectation »
 Une variable ne peut avoir qu’une seule valeur à un instant donné
 On rappelle qu’un algorithme
g exécute un ordonnancement fini et qui doit être compatible avec son type.
d’actions sur des données concrètes pour obtenir un ou plusieurs
 La valeur précédente (si elle existe) est écrasée par la
résultats.
nouvelle valeur.
 Parmi ces opérations, on trouve les opérations élémentaires
 La valeur attribuée à un objet peut être:
d’affectation, de lecture et d’écriture détaillées dans ce qui suit.
une valeur particulière.
 L’opération élémentaire d’affectation attribue une valeur à une
Exemple : A  5 X  ‘b’
variable, qu’il s’agisse d’une première valeur ou d’une valeur
calculée au cours de l’exécution
l exécution de l’algorithme
l algorithme. une valeur contenue dans une autre variable.
variable
 Elle fait appel à la notation «  ». L’opération s’écrit comme Exemple : A  5 B2 AB
suit : une valeur numérique calculée par l’évaluation
l évaluation d’une
d une
expression (pouvant être une expression de cumul).
Identificateur_variable  valeur
Le résultat d’une
d une fonction.
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 13/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 14/110

Opérations Elémentaires (3/4) : Opérations Elémentaires (4/4) :


« Lecture/Ecriture » « Lecture/Ecriture »

 L’instruction de base permettant à la machine de récupérer (ou  Le format général de l’opération élémentaire de sortie ou

encore de lire) les valeurs introduites au clavier est l’opération d’affichage est :

de lecture des données dont le format est :


Ecrire(expression1, …, expressionN)
Une expression est soit :
Lire (indentificateur_variable1,…, indentificateur_variableN) • un nom de variable
Ou • une chaîne de caractères
Lire (indentificateur_variable1) … Lire(indentificateur_variableN) …
Exemple : Ecrire(‘la surface du rectangle est = ‘, S)
Exemples: Lire(A,
Lire(A B)
Ou
Lire(A) Lire(B)

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 15/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 16/110
Exemple
p (1/2)
( ) Exemple (2/2): Erreurs à ne pas faire
ALGORITHME Circ_Surface_Cercle ALGORITHME Circ_Surface_Cercle

CONSTANTE Pi=3.14 CONSTANTE Pi = 3.14

VARIABLE R, Circ_Cercle, Surf_Cercle :réel VARIABLE R, Circ_Cercle, Surf_Cercle :réel

DEBUT DEBUT

Ecrire(‘donner le rayon du cercle R:’) Ecrire(‘donner le rayon du cercle’, R)

Lire(R) Lire(R)

Surf_Cercle  R * R * Pi {ou R^2 * Pi} Surf_Cercle  R * R * Pi

Circ_Cercle  2*Pi*R Circ Cercle


Circ_Cercle = 2*Pi*R

Ecrire(‘la circonférence et la surface du cercle Ecrire(‘la circonférence et la surface du cercle


de rayon’
rayon , R,
R ‘sont
sont respectivement égales à ‘, de rayon
ayo R so
sont
t respectivement
espect e e t éga
égales
es à ‘,
,
Circ_Cercle, ‘, ‘, Surf_Cercle) Circ_Cercle, ‘, ‘, Surf_Cercle)

FIN Lire(Surf_Cercle)

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 17/110


FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 18/110

Traduction en Python Exemple1


p en Python
y
Version 1
Opéra- from math import pi
Algorithmique
g q Python
y Exemples
p R = float(input("entrer la valeur du rayon"))
ti
tions
[>from math import factoriel C = 2 * pi * R
Affect- Var  valeur L’opérateur est : « = » [> e = factorial(5) S = pi * R ** 2
ation [>var = valeurs [>e print("le périmètre du cercle de rayon", R,
120 "est ", C, "et la surface du même cercle est ", S)
LIRE(var1) [ var1 = input()
[>var1 [>nom = input() Version 2
LIRE(var2) [>var2 = input() [>annee = int(input()) from math import *
[>var := input(" texte ") [>poids = float(input()) print("entrer la valeur du rayon")
Entrée
Ou [>NM = input(
input(" Donner R = float(input())
fl (i ())
ECRIRE(" texte ") [> print(" texte ") valeur de NM: ")
C = 2 * pi * R
LIRE(var) [>var = input()
S = pi * R * R
ECRIRE("texte", [> print("la note de maths est print("le périmètre du cercle de rayon", R,
Sortie [> print("texte", var)
var,…) égale à ", NM) "est ", C, "et la surface du même cercle est ", S)

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 19/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 20/110
Définition et Structure (1/2)
 Lorsque l’exécution d’un traitement est conditionné c.-à-d.
s’exécute selon l’évaluation d’une condition,
 les instructions séquentielles sont inadéquates => utiliser des
structures conditionnelles.
3ème Partie :  La structure conditionnelle exprime la possibilité de choisir entre
deux alternatives selon la valeur de l’évaluation d’une condition.

STRUCTURES  Dans ce cas, la condition doit être booléenne donc formulée de


telle sorte à n’offrir que deux réponses :
CONDITIONNELLES  oui,
i sii lla condition
diti estt remplie
li (vérifiée),
( é ifié )
 non, si la condition n’est pas remplie.
non Test oui
?

Traitement1 Traitement2
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 21/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 22/110

Définition et Structure (2/2) Exemple : Calcul de surface OU de circonférence d’un


 A chacune des deux réponses peut correspondre une ou plusieurs cercle (version1)
instructions pouvant être des instructions de base, des structures de
ALGORITHME Circ_Surface_Cercle //Version recommandée dans ce cas
contrôle ou des appels à des « Actions » ». CONSTANTE Pi=3.14
VARIABLE R, Circ_Cercle, Surf_Cercle :réel choix : caractère
 Remarque: A l’une des alternatives peut ne correspondre aucun DEBUT
traitement! donner le rayon du cercle
Ecrire("donner
Ecrire( cercle")
) Lire(R)
Ecrire("donner votre choix") Lire(choix)
 Le format général d’une structure conditionnelle s’exprime comme suit : {on suppose qu’il n’y a pas d’erreurs de saisie c.à.d que choix = ‘S’ pour
surface et choix = ‘C’ pour circonférence }
Si choix
h i =‘S’
‘S’ ou choix
h i =‘s’
‘ ’ ALORS
oui Surf_Cercle  R * R * Pi
SINON {choix ici est forcément égal à ‘C’ ou ‘c’}
Circ_Cercle  2*Pi*R
FINSI
SI condition ALORS instructions1 Si choix =‘S’ ou choix =‘s’ ALORS
SINON instructions 2 Ecrire("la
Ecrire( la surface du cercle de rayon",
rayon , R, "est
SINON {choix ici est forcément égal à ‘C’ ou ‘c’}
est = ",
, Surf_Cercle)
Surf Cercle)

FINSI FINSI
Ecrire("la circonf. du cercle de rayon", R, "est = ", Circ_Cercle)

FIN
non Optionnelle
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 23/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 24/110
Exemple : Calcul de surface OU de circonférence d’un Exemple : Calcul de surface OU de circonférence
cercle
l avec des
d « Si » séquentiels
é ti l (version2)
( i 2) d un cercle avec des « Si » séquentiels (version2
d’un (version2’))
ALGORITHME Circ_Surface_Cercle
CONSTANTE Pi = 3.14 ALGORITHME Circ_Surface_Cercle //Version non recommandée dans ce cas
VARIABLE R, Circ_Cercle, Surf_Cercle :réel choix : caractère CONSTANTE Pi=3.14
DEBUT
VARIABLE R, Circ_Cercle, Surf_Cercle :réel choix : caractère
Ecrire("donner le rayon du cercle") Lire(R)
DEBUT
Ecrire("donner
Ecrire( donner votre choix
choix")
) Lire(choix)
Si choix =‘S’ ou choix =‘s’ ALORS Ecrire("donner le rayon du cercle") Lire(R)
Début Ecrire("donner votre choix") Lire(choix)
Surf_Cercle  R * R * Pi //on suppose qu’il n’y a pas d’erreurs de saisie c.à.d que choix = ‘S’
Ecrire("la surface du cercle de rayon", R, "est = ", Surf_Cercle) pour surface et choix = ‘C’ pour circonférence
Fin SI choix =‘S’ ou choix =‘s’ ALORS Surf_Cercle  R * R * Pi FINSI
FINSI
SI choix =‘C’ ou choix =‘c’ ALORS Circ_Cercle  2*Pi*R FINSI
Si choix =‘C’ ou choix =‘c’ ALORS
SI choix
i =‘S’ ou choix
i =‘s’ ALORS
Début
Circ_Cercle  2*Pi*R Ecrire("la surface du cercle de rayon", R, "est = ", Surf_Cercle)
Ecrire("la circonférence du cercle de rayon", R, "est =", Circ_Cercle) FINSI
Fin SI choix
h i =‘C’
‘C’ ou choix
h i =‘c’
‘ ’ ALORS
FINSI Ecrire("la circonf. du cercle de rayon", R, "est = ", Circ_Cercle)
FIN
FINSI
N.B: Cette solution est moins conseillée car la machine effectue un test inutile
=>
> dans ce cas la version 1 est meilleure
meilleure. FIN

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 25/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 26/110

La condition (1/2)
( ) La condition (2/2)
( )
 La condition de l’alternative est soit simple soit complexe : • Si NON (condition1) => vraie lorsque la condition1
– L
La condition
diti simple
i l utilise
tili des
d opérateurs
é t relationnels
l ti l (t
(tels
l que. n’est
’ t pas vraie.
i
X>Y ; X<Y ; X>=Y ; X<=Y ; X=Y ; X ≠Y) ou des verbes
Exemple : NON(X>5) → X<=5
logiques (tels que existe=Vrai, NON(existe), … où « existe » est
une variable booléenne).
– La condition complexe combine plusieurs conditions simples à  Il est possible qu’une condition complexe combine d’autres
ll’aide
aide des opérations logiques ET
ET, OU et NON : conditions
diti complexes
l à l’l’aide
id ddes opérateurs
é t ET
ET, OU ett NON
NON.
• Si (condition1 ET condition2) => vraie lorsque les deux  Exemples :
conditions sont vraies simultanément;;
• ((X>5)
((X 5) ET (X
(X<10))
10)) OU (NON(X
(NON(X>=5)
5) ET (X>0))
(X 0))
Exemple : (X>5) ET (X<=10)
• (le feu est rouge) ET (le passage est fermé)
• Si (condition1 OU condition2) => vraie lorsque l’une des
deux conditions est vraie;
Exemple : (X>=5) OU (X<1)

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 27/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 28/110
L Instruction
L’Instruction L’Instruction ((cas 1))
Instruction  Cas1 : absence de traitement correspondant à l’une des deux
alternatives
lt ti :
Absence de traitement associée à la réponse NON
Appels à des SI condition ALORS
Vide Actions instructions1
(Voir chapitre4) FINSI
Elémentaire Absence de traitement associée à la réponse OUI => dans ce
Structures
Répétitives/Itératives cas prendre
d lal négation
é ti de d la
l condition.
diti
Bloc Cas4 (Voir chapitre suivant) SI NON(condition) ALORS
D’opérations
D opérations instr ctions2
instructions2
Structures FINSI
Conditionnelles
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 29/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 30/110

L’Instruction (cas2 et cas3)


L’Instruction ((cas1))  Cas2 : les instructions 1 et 2 sont simples.
 Exemple : Algorithme qui Calcule la somme des inverses de X
Séquence d’un algorithme Séquence d’un algorithme
et Y:
calculant le Sup: affichant le Sup:
ALGORITHME CalculSomInverseXY SI X>Y ALORS SupX SI X>Y ALORS Ecrire("le sup est", X)
VARIABLE X,Y: entier SomI: réel SINON SupY SINON Ecrire("le sup est", Y)
DEBUT FINSI FINSI
Ecrire("donner deux entiers")
Lire(X) Lire(Y)
 Cas3 : Bloc d’instructions encadré par DEBUT et FIN.
SI X≠0 ET Y≠0 ALORS SomI  1/X +1/Y FINSI
Si X≠0 et Y≠0 ALORS SI X>Y ALORS
Ecrire("la somme des inverses de ", X, " et ", Début
Y, S
Sup X I f Y
Inf
"est égale à ", SomI) Fin
SINON SINON
( p
Ecrire("impossible de calculer la somme des Début
inverses de ", X, " et ", Y) Sup Y Inf X
FINSI Fin
FIN FINSI
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 31/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 32/110
L’Instruction (cas4)
( ) Équivalence en structures séquentielles du cas 4

SI condition1 et condition2 N.B: Dans ce cas, la version


 Cas4: Structure conditionnelle imbriquée ou emboîtée.
ALORS Instruction_c1_c2
Instruction c1 c2 imbriquée est meilleure car si
SI condition1 ALORS FINSI les conditions 1 et 2 sont
SI condition2 ALORS SI condition1 et non(condition2)
Instruction c1 c2
Instruction_c1_c2 vérifiées,, la machine teste les
ALORS Instruction_c1_non(c2)
SINON 3 autres alternatives
FINSI
Instruction_c1_non(c2) inutilement.
FINSI SI non(condition1) et condition3
SINON ALORS Instruction_non(c1)_c3 Conclusion : Lorsque l’ensemble
SI condition3 ALORS FINSI d’intersection entre les
Instruction_non(c1)_c3 SI non(condition1) et différentes conditions est {Ø},
SINON non(condition3)
les structures conditionnelles
_ _
Instruction_non(c1)_non(c3) ALORS
FINSI séquentielles
é ti ll doivent
d i t être
êt
Instruction_non(c1)_non(c3)
FINSI FINSI
utilisées.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 33/110 IPEIN2016/2017 1ère Année – Informatique – 34/110
Chapitre 1

Exemple1 (1/2) Exemple1: détaillant d’avantage l’affichage


(2/2)
ALGORITHME CalculSomInverseXY
VARIABLE X,Y: entier SomI : réel ALGORITHME CalculSomInverseXY
VARIABLE X,Y: entier SomI : réel
DEBUT
DEBUT
Ecrire("donner deux entiers ")
Ecrire("donner deux entiers ") Lire(X) Lire(Y)
Lire(X,Y) SI X≠0 ET Y≠0 ALORS SomI  1/X + 1/Y FINSI

SI X≠0 ALORS Si X≠0 et Y≠0 ALORS


SI Y≠0 ALORS SomI  1/X + 1/Y FINSI Ecrire("la somme des inverses de", X, "et", Y,
FINSI "est égale
é à ", SomI)
SINON {plus de précision sur l’origine du problème}
Si X≠ 0 et Y≠ 0 ALORS Si X≠ 0 Alors Ecrire("Calcul impossible car Y est nul")
Ecrire("la somme des inverses de", X, "et", Sinon
Y, "est égale à ", SomI) Si Y ≠ 0 Alors Ecrire("Calcul impossible car X =0")
Sinon Ecrire("Calcul impossible car X et
SINON Y égaux
g à 0")
Ecrire("impossible de calculer la somme des Finsi
inverses de ", X, "et", Y) Finsi
FINSI FINSI
FIN FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 35/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 36/110
Exemple
p 2 : Résolution de Ax+B=0 Structure conditionnelle en Python
y ((1/2))
ALGORITHME sol_prem_degre
VARIABLE A,B,x : réel Drapeau : entier if condition:
DEBUT bloc instruction1
bloc_instruction1
Ecrire(" donner les coefficients de l’équation ") Lire(A,B) else:
SI A=0 ALORS bloc_instruction2
SI B=0 ALORS
drapeau  0
SINON drapeau  -1 FINSI  La condition est une expression booléenne composée
SINON DEBUT x  -B/A d'opérateurs relationnels, d'opérateurs logiques et des verbes
drapeau  1 logiques (True
(True, False).
False)
FIN
FINSI  L'évaluation de la condition doit donner True ou False, autrement
SI drapeau = 1 ALORS une erreur se produit.
Ecrire("la solution de l’équation", A,"* x +", B,
"=0 est x=", x)  La clause else s'exécute lorsque l'évaluation de toutes les
SINON conditions précédentes donne False. Cette clause est
SI drapeau = -1 1 ALORS Ecrire(
Ecrire("pas
pas de solution
solution")
) optionnelle.
optionnelle
SINON Ecrire("infinité de solution")
FINSI ATTENTION : Python est sensible à la casse.
FINSI
FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 37/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 38/110

Structure conditionnelle en Python (2/2) Indentation signifiante


g (1/2)
( )
 Si l’instruction1 et (ou) l’instruction2 est à son tour une structure
conditionnelle, la structure s’écrit alors :  Un bloc est une suite d’instructions qui s’exécutent les unes
if condition_1: après les autres.
autres
bloc_instruction_1  Pour identifier sans ambiguïté les instructions appartenant
else:
if condition_2:
au bloc du if,
if il est nécessaire de les indenter.
indenter
bloc_instruction_2  Indenter signifie ajouter un même nombre d’espaces devant
else:
chacune des lignes
g définissant les instructions.
bl
bloc_instruction_3
i i 3
 Alors que dans certains langages cette pratique n’est qu’une
 La structure peut s’écrire encore en remplaçant else if par elif : recommandation,
if condition_1:  elle est une obligation dans Python!
bloc_instruction_1
elif condition_2:
condition 2:  On p
peut se fixer p
par convention q
qu’une indentation est
bloc_instruction_2 constituée de quatre espaces (ou un appuis sur la touche
else:
Tabulation).
bloc_instruction_3

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 39/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 40/110
Indentation signifiante
g (2/2)
( ) Exemple
p (1/3)
( )
#cette ligne a un niveau d'indentation de 0  Le programme suivant exécute trois instructions différentes
suivant la valeur de x % 3:
#cette ligne a un niveau d'indentation de 1
#cette ligne a un niveau d'indentation de 2
if x % 3 == 0 : #ici, les trois instructions
x = x + 1 #sont au même niveau.
 Au sein d’un bloc, le niveau d’indentation doit être le même. Le
else: if x % 3 == 0 :
code suivant est valide et la ligne y = y // x ne ss’exécute
exécute que si x
if x % 3 == 1 : x = x + 1
est non nul :
x = x – 1
if x != 0: elif x % 3 == 1 :
else:
y = 3 x = x – 1
x = 2 * x
y = y // x # division entière else:
x = 2 * x

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 41/110 IPEIN2016/2017 1ère Année – Informatique – 42/110
Chapitre 1

Exemple
p (2/3)
( ) Exemple
p (3/3)
( )
#programme pour la résolution de l’équation Ax+B=0
X = int(input("Donner entier X: ")) A = float(input("Donner le coefficient A: "))
B = float(input("Donner le coefficient B: "))
Y = int(input("Donner entier Y: "))
if A==0 :
if X != 0 and Y != 0: if B==0:
SomI = 1/X + 1/Y drapeau = 0
else:
print("la somme des inverses de", X, "et", Y, drapeau = -1
"est égale à ", SomI) else:
elif X != 0: x = -B/A
drapeau = 1
print("Calcul impossible car Y est nul") #affichage en fonction de la valeur de « drapeau »
elif Y != 0: if drapeau == 1:
print("la solution de l’équation", A,"* x +", B, "=0 est x=",
print("Calcul impossible car X =0 ") x)
else:
l elif drapeau
d == -1:
1
print("pas de solution")
print("Calcul impossible car X et Y égaux à 0") else:
print("infinité
print( infinité de solution")
solution )

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 43/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 44/110
Problématique
q : Exemple1
p

Reprenons l’exemple du calcul de la surface ou de la


circonférence d’un cercle selon le choix de l’utilisateur:

4ème Partie :
L’utilisateur doit répondre par ‘S’ ou ‘C’. Mais il risque fort, tôt
ou tard, de taper autre chose que cela!
STRUCTURES ITÉRATIVES  Si on veut se protéger en cas d’erreur, il faudrait
conditionner la saisie à l’aide de structures conditionnelles.
ET RÉPÉTITIVES .

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 45/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 46/110

Problématique
q : Exemple1
p (suite)
( ) Problématique : Exemple2
… On veut calculer la somme de N entiers.
Ecrire (" Donner votre choix S pour surface et C pour circonférence") X1
Lire (choix) S0 S0
Si choix
h i <> ‘S’ ET choix
h i <> ’C’ Alors
Al
S  S+x x1
Début
x  x+1 (x=2)
Ecrire ("Saisie erronée à refaire")
Lire (choix ) SS S+xx SS S+x
x
Si choix <> ‘S’ ET choix <> ’C’ Alors x  x+1 (x=3) x  x+1
Début …
Ecrire (("Saisie
Saisie erronée
erronée. Recommencez")
Recommencez ) Arrêter la boucle
Lire (choix ) x  x+1 (x=N) quand x > N
… S  S+x
bou

FIN
ucler

FinSi On remarque que le même traitement se répète un certains nombre de


Fin fois.
FinSi … Problème : combien d d’instructions
instructions séquentielles va
va-t-on
t on écrire ?
 MAIS !!! Combien de structures conditionnelles (Si … FINSI)? N est inconnue lors de l’écriture de l’algorithme !!!
mais sera connue pendant l’exécution (lors de la saisie de N), d’où le
D’où le besoin d’utiliser des structures répétitives.
p besoin dd’utiliser
utiliser des structures itératives
itératives.
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 47/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 48/110
Définitions (1/3) Définitions (2/3)
 En général, lorsque plusieurs opérations se répètent:  Les boucles permettent ainsi d’exécuter une séquence
 nous représentons
é t celles-ci
ll i par une même
ê séquence
é d’i t ti
d’instructions soit
it un certains
t i nombre
b d de ffois
i :
d’instructions  Connu d’avance. Exemple : calcul du Nème terme d’une suite.
 et nous répétons l'exécution de la séquence plusieurs fois
fois.  Non connu d’avance
d avance. Exemple : le contrôle de saisie de données
qui consiste à vérifier que les valeurs des données entrées au
 L’exécution de toute séquence d’instructions répétitive ou itérative clavier correspondent bien à celles attendues par l’algorithme.
est une boucle.
boucle
 La séquence d’instructions peut être :
 Un traitement répétitif ou itératif peut être vu comme un traitement
 Une répétition : Le passage courant dans la boucle est
conditionnel: indépendant du passage précèdent
précèdent.
 qu’on exécute un certains nombre de fois connu,  Exemple : calcul des moyennes des étudiants (la même
séquence d’opérations se répète pour le calcul de la moyenne de
 ou non connu d’avance
d avance (y compris zéro fois) selon la valeur de
chaque étudiant; MAIS aucune relation n’existe entre la moyenne
la condition. d’un étudiant et celle d’un autre).

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 49/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 50/110

Les Différentes Structures


Définitions (3/3) Ré étiti
Répétitives/Itératives
/Ité ti (1/2)
 Une itération : chaque passage dans la boucle est dépendant du
 Trois formes existent :
passage précèdent.
é èd t
 La structure TANTQUE … FIN_TANTQUE
 Ainsi, une itération permet de calculer une valeur par étapes
successives (la valeur calculée à une étape est dépendante de S’exécute
S exécute un certain nombre de fois (ou zéro fois), connu ou
la valeur déterminée aux étapes précédentes). non, d’avance.
 Exemples
p :  La structure REPETER … JUSQU’À
JUSQU À
Calcul de la pluviométrie d’une région pendant un mois. S’exécute un certain nombre de fois (au moins une), connu ou
Calcul d’un terme d’une suite récurrente à partir d’un terme non,, d’avance.
i iti l
initial.
 Un passage dans la boucle est une exécution une fois de  La structure POUR … FIN_POUR
p
l’ensemble des opérations se trouvant dans la boucle (q
(qu’il s’agisse
g S’exécute
S exécute un certain nombre de fois (ou zéro fois) connu
d’une itération ou d’une répétition).
d’avance. Elle permet d’exprimer les boucles à index numérique.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 51/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 52/110
Les Différentes Structures Boucle conditionnelle
Répétitives/Itératives (2/2) TANTQUE … FIN_TANTQUE
Cette structure s’applique aussi bien dans le cas où le nombre de
passages dans
d lla boucle
b l ((c.à.d.
à d itération
ité ti ou répétition)
é étiti ) estt connu ou
TRES IMPORTANT :
inconnu d’avance:
 Chaque structure répétitive/itérative se caractérise par :
 une initialisation,

 une condition, Initialisation
TANTQUE (condition d’EXECUTION est vraie) FAIRE
 une séquence logique d’instructions.
oui
Instructions (incluent au moins une instruction
qui change la valeur de la condition)
Toute modification de l’une des trois caractéristiques
nécessite une vérification des deux autres. FIN_TANTQUE
FIN TANTQUE
… non

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 53/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 54/110

Exemple de Calcul du produit des N premiers Exemple de Calcul du produit des N premiers
entiers positifs avec TANTQUE (1/2) entiers positifs avec TANTQUE (2/2)
ALGORITHME Produit
VARIABLE P, N, x : entier
ALGORITHME Produit 2
Produit_2 ALGORITHME Produit 3
Produit_3
DEBUT VARIABLE P, N, x : entier VARIABLE P, N, x : entier
ECRIRE(" Donner N > 0: ") DEBUT DEBUT
LIRE(N) ECRIRE("Donner N > 0") ECRIRE("Donner N > 0")
TANTQUE (N<=0) FAIRE LIRE(N) LIRE(N)
TANTQUE (N <= 0) FAIRE TANTQUE (N <= 0) FAIRE
ECRIRE(" Donner N > 0: ")
ECRIRE("Donner N > 0") ECRIRE("Donner N > 0")
LIRE(N)
( ) LIRE(N) LIRE(N)
FIN_TANTQUE FIN_TANTQUE FIN_TANTQUE
x  1 x  N x  0
P  1 P  1 P  1
TANTQUE (x > 0) FAIRE TANTQUE (x < N) FAIRE
TANTQUE (x <= N) FAIRE
P  P * x x  x + 1
P  P * x x  x - 1 P  P * x
x  x + 1 FIN TANTQUE
FIN_TANTQUE FIN TANTQUE
FIN_TANTQUE
FIN_TANTQUE ECRIRE("Le produit des", ECRIRE("Le produit des",
ECRIRE(" Le produit des ",N, " entiers est ", P) N, "entiers est P=", P) N, "entiers est P=", P)
FIN FIN
FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 55/110 IPEIN2016/2017 1ère Année – Informatique – 56/110
Chapitre 1
Caractéristiques de la Structure
TANTQUE Remarques importantes
ALGORITHME Somme_Pairs  L’exécution pour N=10 est :
 La condition peut être simple ou complexe.
complexe VARIABLE S
S, N
N, i
i: entier
ti S=0+2+4+6+8+10
DEBUT => arrêt de la boucle pour la
 Les instructions sont exécutées tant que la condition est toujours ECRIRE(" Donner N > 0 ")
valeur de i=10
LIRE(N)
Vraie.
Vraie  L’exécution
L’ é ti pour N=9 N 9 estt :
TANTQUE N<=0 FAIRE
 Si dès le départ la condition n’est pas vérifiée alors la structure ECRIRE(" Donner N > 0 ") S=0+2+4+6+8+10+12+…
LIRE(N) => boucle infini car le « i » n’est
répétitive (ou itérative) n
n’est
est jamais exécutée (exécutée 0 fois).
fois) FIN TANTQUE
FIN_TANTQUE
jamais égal à N=9
i  0
 L’exécution de la structure répétitive (ou itérative) s’arrête dès que S  0  En conclusion il faut que la
la condition cesse d d’être
être vérifiée. TANTQUE i <> N FAIRE condition perche par excès et
i  i + 2 utiliser :
 Lorsque la condition cesse d’être vraie, l’algorithme exécute S  S + i TANTQUE i <N-1 FAIRE
FIN_TANTQUE
ll’instruction
instruction qui suit la structure répétitive ou itérative (si elle existe) ECRIRE("La somme des entiers à la place de
ou arrêt de l’exécution. pairs < à ", N, " est= ", S) TANTQUE i <> N FAIRE
FIN

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 57/110 IPEIN2016/2017 1ère Année – Informatique – 58/110
Chapitre 1

Boucle while en Python


y Terminaison d’une boucle
Syntaxe d’une boucle while:  Dans l’exemple précédent:
while condition:
bloc_instructions  La variable « C » joue le rôle d’un compteur
 Au départ « C » contient le nombre des itérations à faire
Exemple:
E l Calcul
C l l factoriel
f t i l ded N
 La condition d’arrêt test si le « N » itération ont été faites
N = int(input("Donner N > 0: "))
while N<=0:  Mathématiquement, la fin de la boucle est garantie:
N=int(input("Donner N > 0: "))  La valeur de « C » est un entier strictement positif;
C = N
 Elle décroît strictement après chaque itération
P = 1
while C > 0:  Et comme il n’existe pas de suite infinie strictement
P = P * C décroissante d’entier naturels,
C = C - 1
 Il ne peut y avoir qu’un nombre fini d’itérations.
print(" Le factoriel de ",N, “ est ", P)

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 59/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 60/110
Invariant de boucle ((1/2)) Invariant de boucle (2/2)
( )
 Il s’agit de démontrer qu’une boucle produit l’effet attendu au c = n pour toute « i » on a pi=2n-ci et ci≥0
moyen d’und un invariant, c’est-à-dire
c est à dire une propriété: p = 1
 Pour i=0: p0=1=20=2n-c0 et
 Qui est vérifiée avant d’entrer dans la boucle, while c > 0 : c0=n ≥0
 Si elle est vérifiée avant une itération
itération, est vérifiée après p = p * 2
 Pi+1=2pi=2n-ci+1=2n-ci+1 et
celle-ci, c = c – 1 ci+1=ci-1
 Lorsqu’elle
Lorsqu elle est vérifiée en sortie de boucle permet d’en
d en  Soit ci et pi à l’itération
l itération « i »  Or ci>0 =>
> ci+1 ≥0
déduire que le programme est correct.
 L’état initial: c0 = n, p0 = 1  Si (ci>0) n’est pas vérifiée =>
 Exemple:
p on quitte la boucle avec ci=0,
=0
 Et d’après la boucle on a: ci+1
Démontrer que le programme de calcul de « 2n » suivant est = ci - 1 et pi+1 = 2pi donc pi=2n
correct, c.-à-d. lorsque l’exécution se termine, la variable « p » => La subtilité de ce
 Et on remarque que la
contient bien la valeur « 2n » où « n >0 » est la valeur initiale de raisonnement tient dans le
propriété suivante est
la variable « c ». toujours vérifiée, choix de bon invariant!

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 61/110 IPEIN2016/2017 1ère Année – Informatique – 62/110
Chapitre 1

Boucle conditionnelle Exemple de Calcul du produit des N


REPETER … JUSQU’A premiers entiers positifs avec REPETER
La structure REPETER … JUSQU’A s’applique aussi bien dans le ALGORITHME Produit
cas où le nombre de passages dans la boucle est connu ou inconnu VARIABLE P, N, x : entier
d’avance : DEBUT
REPETER
ECRIRE(" Donner N")

LIRE(N)
Initialisation
REPETER JUSQU'A (N > 0)
x  1
Instructions (incluent au moins une instruction P  1
qui change la valeur de la condition) REPETER
non
P  P * x
JUSQU’A (
(condition
diti d’ARRET est
t V
Vraie)
i ) x  x + 1
… JUSQU'A (x > N)
oui ECRIRE("Le produit des",N, "entiers est =", P)
FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 63/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 64/110
Caractéristiques de la structure REMARQUES IMPORTANTES

REPETER ALGORITHME Somme_Pairs i  0
 La condition peut être simple ou complexe. VARIABLE S, N, i: entier S  0
DEBUT REPETER
 Les instructions sont exécutées jusqu’à ce que la condition i  i + 2
REPETER
d’arrêt devienne vraie. S  S + i
ECRIRE(" Donner N")
 On exécute au moins une fois ll’itération
itération (ou la répétition) avant LIRE(N) JUSQU’À
JUSQU À i >=
> N-1
N 1
de vérifier la condition d’arrêt. JUSQU'À (N > 0) …
i  0 PROBLEME : Si N=1 Alors S = 2.
 Les instructions sont exécutées tant que la condition est toujours Solution :
S  0
à la valeur Faux. …
TANTQUE (i<=N) FAIRE
REMARQUE IMPORTANTE : i  i + 2 S 0
S  S + i Si N>1 Alors
 Un traitement exprimé avec TANTQUE ne peut pas être exprimé
FIN_TANTQUE Début i  0
avec REPETER en inversant juste la condition (la négation). REPETER
ECRIRE("La somme des
 Ceci n’est vrai que pour un traitement dont le nombre de entiers
e t e s pa
pairs
s < à
à",
, N,, i  i + 2
passages dans la boucle TANTQUE est au moins égal à une "est= ", S) S  S + i
fois. FIN JUSQU’À i >= N-1
q
Remarque : Si N=1 Alors S=0. Fin
Finsi
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 65/110 IPEIN2016/2017 … –
1ère Année – Informatique 66/110
Chapitre 1

Boucle répéter
p en Python
y Boucle inconditionnelle
POUR … FIN
FIN_POUR
POUR
Boucle croissante :
 Ce type de boucle n’existe
n existe Exemple: Calcul factoriel de N
while True: …
pas en Python, mais on Initialisation partielle
N = int(input("Donner
peut, facilement, là simulée POUR var de V_I à V_F FAIRE
N > 0: "))
par la technique suivante: if N>0: (POUR var = V_I à V_F FAIRE)
Syntaxe d’une boucle répéter: break Instructions
C = N FIN_POUR
while True: P = 1 …
while True:
bloc_instructions P = P * C
Boucle décroissante :
C = C - 1 …
if condition: if C <= 0: Initialisation partielle
break break
POUR var = V_I à V_F avec p
pas=-1 FAIRE
print("
i t(" L
Le factoriel
f t i l ded "",
Instructions
N, " est ", P)
FIN_POUR

IPEIN2016/2017 1ère Année – Informatique – 67/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 68/110
Chapitre 1
Caractéristiques de la structure POUR Exemple de Calcul du produit des N premiers
entiers positifs avec POUR croissante
 La structure POUR…FIN_POUR (boucles à index numérique) ALGORITHME Produit
ne s’applique
s applique que dans le cas où le nombre de passages dans VARIABLE P N
P, N, x : entier
ti
la boucle est connu d’avance. DEBUT
 Les instructions encadrées par POUR et FIN_POUR sont REPETER
exécutées : ECRIRE("Donner N")
 (V_F – V_I + 1) fois, dans le cas d’une boucle croissante à LIRE(N)
condition que V_I
V I <= V_F,
V F autrement la boucle s’exécute
s exécute 0 JUSQU'A
JUSQU A N>0
N 0
fois. P  1
x  1 {pas d’initialisation manuelle de x}
 (V_I – V_F + 1) fois, dans le cas d’une boucle décroissante
POUR x = 1 à N FAIRE
à condition que V_I >= V_F, autrement la boucle s’exécute
0 fois. P  P * x
x  x + 1 {pas d’incrémentation manuelle de x}
 Le pas est par défaut égal à 1 pour une boucle croissante et FIN_POUR
égal à -1 pour une boucle décroissante.
ECRIRE("Le produit des",N, "entiers est =", P)
FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 69/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 70/110

Exemple de Calcul du produit des N premiers Applications (1/3)


entiers positifs avec POUR décroissante
 Exemple 1 : ALGORITHME AfoisB
VARIABLE P, A, B, S : entier
Ecrire un algorithme qui calcule DEBUT
ALGORITHME PProduit
d it l produit
le d it d
de ddeux nombres
b REPETER
VARIABLE P, N, x : entier entiers positifs par additions ECRIRE("Donner le
DEBUT successives du multiplicande multiplicande")
LIRE(A)
REPETER autant de fois que nécessaire: JUSQU'A A>0
ECRIRE(" Donner N") A*B = A + A + … + A REPETER
LIRE(N) ECRIRE(" Donner le
B fois multiplicateur")
JUSQU'A N > 0 LIRE(B)
P  1  Exemple2 : JUSQU'A B>0
POUR x = N à 1 avec pas =-11 FAIRE Soit N couples de nombres P  0
P  P * x entiers positifs, modifier POUR S=1 à B FAIRE
l’algorithme pour qu’il calcule et P  P + A
FIN_POUR FIN_POUR
affiche au fur et à mesure le
ECRIRE("Le produit des",N, "entiers est ", P) ECRIRE("Le produit de", A,"*",B,
produit des 2 termes de chaque "par additions successives est =
FIN
couple selon le même principe. ",P)
FIN
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 71/110 IPEIN2016/2017 1ère Année – Informatique – 72/110
Chapitre 1
Applications (2/3) Applications (3/3)
 A fois B avec N couples en calculant la somme des produits des
ALGORITHME N_AfoisB différents couples
REPETER
VARIABLE N,P,A,B,S,i: entier ECRIRE("Donner le ALGORITHME N_AfoisB REPETER
DEBUT multiplicateur") VARIABLE N,P,A,B,S,i,S_C : ECRIRE(" Donner le
REPETER LIRE(B) entier multiplicateur")
ECRIRE("N b
ECRIRE("Nombre d
de JUSQU'A B> 0 DEBUT LIRE(B)
couples?") P  0 REPETER JUSQU'A B>0
LIRE(N) POUR S=B à 1 avec pas =-1 ECRIRE("Le nombre P 0
JUSQU'A N>0 FAIRE couples?") POUR SS=1
1 à B FAIRE
i  N P  P + A LIRE(N) P  P + A
TANTQUE i>0 FAIRE FIN_POUR JUSQU'A N>0 FIN_TANTQUE
REPETER ECRIRE("L produit
ECRIRE("Le d it d
de",
" S_C  0 ECRIRE("Le
ECRIRE( Le produit de"
de ,
ECRIRE(" Donner le A, "*", B, "par additions POUR i=1 à N FAIRE A, "*", B, "par additions
multiplicande") successives est = ",P) REPETER successives est =", P)
LIRE(A) i  i - 1 ECRIRE(" Donner le S C  S_C
S_C S C + P
JUSQU'A A>0 FIN_TANTQUE multiplicande ") FIN_POUR
FIN LIRE(A) FIN
JUSQU'A
JUSQU A A>0
IPEIN2016/2017 1ère Année – Informatique – 73/110 IPEIN2016/2017 1ère Année – Informatique – 74/110
Chapitre 1 Chapitre 1

Structures Répétitives/Itératives en Python (1/4) Structures Répétitives/Itératives en Python (2/4)


1- Syntaxe d’une boucle conditionnelle: 2- Exemple:
 En Python, on écrit une boucle conditionnelle ainsi :  Le programme calculant 2n deviendra alors :
while condition:
c = n
bloc_d_instructions
p = 1
while c > 0:
 Les contraintes d’indentation pour le bloc d’instructions sont les
mêmes
ê que pour une iinstruction
t ti conditionnelle
diti ll p = p * 2
 et la fin du bloc est marquée par le retour au niveau d’indentation c = c - 1
du while.
while  On va détailler l’exécution
l exécution de ce programme à partir de l’état
l état c = 3
 Ce bloc d’instructions est appelé le corps de boucle et chaque
Après Après Après
passage dans ce bloc est appelé une itération
itération. itération Initial
itér 1
itér.1 itér 2
itér.2 itér 3
itér.3
p 1 2 4 8
c 3 2 1 0

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 75/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 76/110
Structures Répétitives/Itératives en Python (3/4) Structures Répétitives/Itératives en Python (4/4)
3- Syntaxe d’une boucle inconditionnelle: 4- Exemple:
 Les boucles conditionnelles sont nécessaires p pour effectuer des Si on reprend le programme de calcul de 2n, on aura juste à écrire :
calculs lorsqu’il n’est pas possible de borner le nombre d’étapes p = 1
nécessaires. for c in range(n):
p = 2 * p
 En pratique, dans de nombreux cas, on connaît à l’avance le nombre
 Le compteur de boucle est ici entièrement géré par la boucle for.
d’itérations qu’il faudra effectuer, ce qui rend inutile d’utiliser une  Il n’est pas besoin de l’incrémenter, ni de tester qu’il ne dépasse pas
b
bouclel conditionnelle.
diti ll une certaine limite.
Il reste possible d’utiliser ce compteur au sein du corps de la boucle.
 E
En Python,
P th on écrit
é it une b
boucle
l iinconditionnelle
diti ll « for
f » ainsi
i i:  Dans la boucle for c in range(n), la variable « c » parcourt les entiers de
for i in range(x): 0 à n − 1.
bloc d instructions
bloc_d_instructions On remarque que le paramètre passé à range() est donc la valeur
avant laquelle on s’arrête.
Comme souvent en informatique, on numérote à partir de 0.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 77/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 78/110

Correspondance entre les Structures Exemple en Python


Répétitives/Itératives en Algorithmique et Programme utilisant “while …” Programme utilisant “for …”
N = int(input(“Entrer N>0: ”)) #boucle répeter
Python while not isinstance(N, int) or N<=0 : while True :
N i t(i
N=int(input("entrer
t(" t de d nouv. N>0"))
N 0")) N i (i
N=int(input("Entrer
("E N>0:
N 0 "))
i=1 if isinstance(N, int) and N>0 :
Algorithmique Python P=1 break
Pour var de v_ii à v_ff faire for var in range(v_i, v_f): while i<=N : P=1
instructions instructions P =P*i #boucle pour
i=i+1 for i in range(N) :
Fin_Pour
_ print("Le
print( Le produit des ", N,
N "premiers
premiers P = P * (i + 1)
Tantque condition faire while condition: entiers positifs est P=", P) print("Le produit des ", N, "premiers
instructions instructions entiers positifs est P=", P)
Fin Tantque
Fin_Tantque Résultat de l’exécution
l exécution
Répeter while True : Entrer N>0 : 0 Résultat de l’exécution
instructions instructions entrer de nouv. N>0 : 0 Entrer N>0: -6
entrer de nouv. NN>00 : -5
5 Entrer NN>0:
0: 0
J
Jusqu'à
'à condition
diti if condition:
diti
entrer de nouv. N>0 : 5 Entrer N>0: 4
break Le produit des 5 premiers entiers Le produit des 4 premiers entiers positifs
positifs est P= 120
p est P= 24

IPEIN2016/2017 1ère Année – Informatique – 79/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 80/110
Chapitre 1
Coût d’algorithme et complexité

 Evaluer un algorithme revient à mesurer sa complexité.


5ème Partie :
 La complexité d’un
d un algorithme dépend:

 de la complexité temporelle (temps d’exécution)


NOTION DE COÛT D
D'UN
UN  et de la complexité spatiale (taille des données).
ALGORITHME ET CLASSES  Temps de calcul ou d’exécution
d exécution est noté:

DE COMPLEXITÉ  O de f(n): fonction asymptotique.

 Il dépend du nombre d’opérations.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 81/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 82/110

Coût d’algorithme (1/2) Coût d’algorithme (2/2)


 Coût d’opérations complexes:
Coût d’algorithme = ∑ coûts d’opérations  Opération complexe: instruction conditionnelle ou boucle ou appel
élémentaires + ∑ coûts d’opérations
d opérations complexes de module
module.
 Coût des opérations élémentaires:  coût (inst_cond) = coût(test)+max(coût(T1),coût(T2))
 opération
opé at o élémentaire:
é é e ta e a affectation,
ectat o , lecture/écriture,
ectu e/éc tu e, opé
opérations
at o s  coût(boucle Pour) = n * ∑coût(inst(i))
arithmétiques, test de comparaison…  coût(boucle TantQue) = n*∑coût(inst(i))+coût(comparaison)
 coût(module) = ∑coûts (opérations élémentaires internes)
 coût d’exécution =1
 Exemple Algorithme B:
 Exemple Algorithme A: TantQue i <= n faire
Somme  n + 1 Somme  Somme + i
Somme  somme ∗ n i  i + 1
FinTantQue
Somme  somme/2
 coût (B) = 3n (n comparaisons + 2n affectations) ou
=>
> coût(A)
ût(A) = 3 (3 affectations)
ff t ti ) ou
= 5n si calcul détaillé (n comparaisons + 2n affectations
= 6 si calcul détaillé (3affectations + une + 2n additions)
addition + multiplication + division)
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 83/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 84/110
Complexité
p temporelle
p vs spatiale
p (1/2)
( ) Complexité
p temporelle
p vs spatiale
p (2/2)
( )
Exemple : échange de deux valeurs entières
 L'efficacité d'un algorithme peut être évalué en temps et en
// (1) échange des valeurs // (2) échange des espace :
de deux variables entier x, valeurs de deux variables
y, z; entier x, y;  complexité en temps : évaluation du temps d'exécution de
... // i
initialisation
iti li ti d
de x ... // i
initialisation
iti li ti d
de l'algorithme
et y x et y
 complexité en espace : évaluation de l'espace mémoire
z <- x; x <
<- y-x; occupé par l'exécution
l exécution de l'algorithme
l algorithme
x <- y; y <- y-x;  Espace-temps : en général pour gagner du temps de calcul, on
y <- z; x <- y+x;
doit utiliser davantage d'espace
d espace mémoire.

 - la première méthode utilise une variable supplémentaire « z » et  On s'intéresse essentiellement à la complexité en temps (ce qui
réalise 3 affectations n'était p
pas forcément le cas q
quand les mémoires coutaient cher))

 - la deuxième méthode n'utilise que les deux variables dont on veut


échanger les valeurs, mais réalise 3 affectations et 3 opérations
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 85/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 86/110

Complexité
p asymptotique
y p q Domination asymptotique
y p q (1/2)
( )
 f et g étant deux fonctions, f = O(g) s'il existe des constantes
 Calculer la complexité de façon exacte n'est pas raisonnable vu
c>0 et n0 telles q
que f(x)
( ) < c*g(x)
g( ) p
pour tout x > n0
l quantité
la tité d'i
d'instructions
t ti d
de lla plupart
l tddes programmes
 et n'est pas utile pour pouvoir comparer deux algorithmes.

 Première approximation : on ne considère souvent que la


complexité
l ité au pire
i
 Deuxième approximation : on ne calcule que la forme
générale de la complexité
 Troisième approximation : on ne regarde que le
comportement asymptotique de la complexité
f = O(g) signifie que f est dominée
asymptotiquement par g.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 87/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 88/110
Domination asymptotique (2/2) Classes de complexité
p (1/3)
( )
 La notation O, dite notation de Landau, vérifie les propriétés
 O(1)
( ) : complexité constante, pas d'augmentation
g du temps
suivantes
i t :
d'exécution quand le paramètre croit
 si f=O(g) et g=O(h) alors f=O(h)
 O(log(n)) : complexité logarithmique, augmentation très faible
 si f=O(g) et k un nombre, alors k*f=O(g) du temps d'exécution quand le paramètre croit.
 si f1=O(g1) et f2=O(g2) alors f1+f2 = O(g1+g2)  Exemple : algorithmes qui décomposent un problème en
 si f1=O(g1) et f2=O(g2) alors f1*f2 = O(g1*g2) un ensemble de problèmes plus petits (dichotomie).
 Exemples de domination asymptotique :  O(n) : complexité linéaire, augmentation linéaire du temps
 x = O(x2) car pour x>1, x<x2 d' é ti quand
d'exécution d lle paramètre
èt croit
it ((sii lle paramètre
èt d double,
bl
le temps double).
 x2 = O(x3) car pour x>1, x2<x3
 Exemple : algorithmes qui parcourent séquentiellement
 100*x = O(x2) car pour x>100, x<x2
des structures linéaires.
 ln(x) = O(x) car pour x>0, ln(x)<x

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 89/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 90/110

Classes de complexité
p (2/3)
( ) Classes de complexité
p (3/3)
( )
 O(n log(n)) : complexité quasi-linéaire, augmentation un peu
 O(ni) : complexité polynomiale, quand le paramètre double,
supérieure à O(n).
le temps d'exécution est multiplié par 2i .
Exemple : algorithmes qui décomposent un problème en
E l : algorithme
Exemple l ith utilisant
tili t « i » boucles
b l iimbriquées.
bi é
d'autres plus simples, traités indépendamment et qui
 O(in) : complexité exponentielle, quand le paramètre double,
combinent les solutions p
partielles p
pour calculer la solution
le temps d'exécution est élevé à la puissance 2.
générale.
( ) : complexité
 O(n!) p factorielle, asymptotiquement
y p q équivalente
q
 O(n2) : complexité quadratique
quadratique, quand le paramètre double
double, le
à nn
temps d'exécution est multiplié par 4.

Exemple : algorithmes avec deux boucles imbriquées.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 91/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 92/110
Exemples
p

Exemple 1: Exemple 2:
n=int(input("Donner n") n=int(input("Donner n")
for i in range(15): for i in range(n): 6ème Partie :
print(2*i) print(i)

 Ici la boucle est toujours


j
exécutée 15 fois (de i=0 ..14)
 Ici la boucle affiche le « i » p
i=[0 ..n-1] et elle comporte
pour
CRÉATION ET
et elle ne comporte que 2
opérations élémentaires
qu’une opérations élémentaires
(affichage) MANIPULATION DES
(multiplication + affichage)
 La boucle est exécuté « n » fois TABLEAUX
 Le temps
p d’exec. = cte.
Indépendant de « n »  Donc
D lla complexité
l ité estt O(n)
O( )

 Donc la complexité est O(1)

IPEIN2016/2017 1ère Année – Informatique – 93/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 94/110
Chapitre 1

Problématique Définitions
 Parfois on a besoin de manipuler plusieurs variables de même type
c.à.d. leur appliquer le même traitement.  Chacune des valeurs (des cases) est repérée par son rang ou
Exemples : - les notes des élèves d’une classe, sa position
iti appelé
lé encore indice.
i di

- longueurs des mois d’une année non bissextile.  Exemple : pour accéder à la valeur 28 on donne l’indice 2.

Dans ce cas, au lieu de déclarer un nombre faramineux de


variables, on fait recours à des structures de données adéquates  Dans le cas où l’indice est unique, on parle de tableau à une
t l que lles tableaux.
tels t bl dimension (monodimensionnel) ou vecteur.
vecteur
Exemple : Pour ranger les longueurs des mois d’une année non  Dans le cas où un élément est repéré par 2 indices, le tableau
bissextile on utilise le tableau suivant :
bissextile, est dit à deux dimensions (bidimensionnel) ou encore
31 28 31 30 31 30 31 31 30 31 30 31 matrice.
 Lorsqu’un
Lorsqu un élément est repéré par N indices
indices, le tableau est dit à
positions 1 2 3 … 12 N dimensions (ce cas dépasse le cadre de ce cours).
=> On constate que ce tableau contient 12 éléments de même type.

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 95/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 96/110
Définition d’un tableau à une dimension (1/2) Définition d’un tableau à 1D (2/2)
 Jusque là, nous avons considéré qu’un tableau commence
 Un tableau de nom « T » et de longueur « N » est une suite de « N »
forcément par l’indice « 1 » jusqu’à l’indice « N » pour simplifier le
variables « T[i]
[ ] » ((ayant
y tous le même type)
yp ) où « i » est un indice entier
di
discours maisi cecii n’a
’ rien
i d’d’obligatoire
bli t i algorithmiquement.
l ith i t
compris entre la position inférieure et la position supérieure (à définir).
 En effet, la borne inférieure d’un tableau (éventuellement la
 « [ ] » représente l’opérateur de sélection d’éléments.
borne supérieure) peut être négative mais forcément inférieure à
 La variable « T[i] » s’appelle l’élément d’indice « i » ou encore le ième la borne supérieure.
élément du tableau « T ».  De manière générale,
générale un tableau à une dimension ayant (bsup –
 Tous les éléments « T[i] » sont de même type. binf + 1) éléments se présente comme suit :

 U
Un ttableau
bl à une dimension
di i oùù l’indice
l’i di iinférieur
fé i vautt « 1 » ett l’i
l’indice
di T[binf] T[binf+1] … T[i] … T[bsup-1]
T[bsup 1] T[bsup]
supérieur vaut « N » se présente comme suit : Exemples:
T T[1] T[2] … T[i] … T[N-1] T[N 1] T[N] [binf .. bsup] = [[-10
10 ..-1]
1] [binf .. bsup] = [[-10
10 ..10]
10]
[binf .. bsup] = [-10 .. 0] [binf .. bsup] = [ 0 ..10]
indices 1 2 i N-1 N
[binf .. bsup] = [1 ..10]
10] etc
etc.
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 97/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 98/110

Déclaration d’un tableau à 1D (1/3)


( ) Déclaration d
d’un
un tableau à 1D (2/3)
 Un tableau est une variable qui doit avoir un nom, un nombre
Si « Tab » est une variable « tableau » pouvant contenir « N »
éléments (borne_sup
d’éléments
d (borne sup - borne_inf
borne inf + 1) et un type qui représente le
entiers (avec borne_inf = 1 et borne_sup = N) alors la déclaration
type de ses éléments.
de Tab peut se faire:
 Il est nécessaire de déclarer un tableau avant sa première
soit :
utilisation.
Constante N = valeur
Cette déclaration peut se faire directement dans la partie
Variable Tab : tableau [1 .. N] d’entiers
variable,
Soit encore :
ou en définissant un type tableau dans la partie type et déclarer
Constante N = valeur
ensuite la variable de ce type défini comme suit:
Type TABENT = tableau [1..N] d’entiers
T
Type N T
NomType = tableau
t bl [b
[borne_inf
i f .. borne_sup]
b ]
Variable Tab : TABENT
de type des éléments

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 99/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 100/110
Déclaration d’un Tableau à 1D (3/3) Manipulation d’un tableau à 1D
 Il est préférable d’utiliser la deuxième déclaration surtout avec la  Si T est un tableau à « N » entiers, défini comme un tableau
programmation modulaire (utilisation des types définis dans les entêtes [1..N] d’entier avec « N » constante déjà défini.
d procédures
des éd ett ffonctions).
ti )  L’accès à la case d’indice « i » se fait par T[i].
Possibilité 1:
 Lorsque l’indice « i » est inférieur à « 1 » ou supérieur à « N »,
Constante N = 30 C = 6
T[i] génère une erreur.
Variable Tab_note, Tab_moy: tableau [1..N] de réel
 La variable « T[i] » peut être manipulée comme n’importe quelle
Tab_coeff: tableau [1..C] d’entier
variable
i bl scalaire
l i :
Possibilité 2:
Lire(T[i]) Ecrire(T[i])
Constante N = 30 C = 6
T[i]  valeur T[i]  T[i]+T[i-1]
Type TNote = tableau [1..N] de réel
Si T[i] > T[i-1] Alors ….
TCoeff = tableau [1..C] d’entier
Variable
i bl Tab_note,
b Tab_moy
b : TNote Remarque importante : Attention, les instructions de lecture, d’écriture
d écriture
et d’affectation ne sont pas applicables au tableau T.
Tab_coeff : TCoeff
Lire(T)
( ) Ecrire(T)
( ) T  valeur
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 101/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 102/110

Remplissage d’un tableau à 1D Affichage


g d’un tableau à 1D
 Dans la suite, on suppose avoir effectué les déclarations suivantes :
 Affichage du contenu d’un tableau:
une constante Nmin=1 Nmax=10
Procédure Affich_Tab (E T: Tab1, E x, y: entier)
un type Tab1
b1 = tableau
bl [
[Nmin..Nmax]
i ] d
de entier
i
Variable i: entier
 « x » et « y » représentent respectivement la borne « inf » et la Début
borne « sup » de début et de fin de remplissage.
Pour i = x à y Faire
Procédure Remplir_Tab Ecrire (‘T[‘,i,’]=’, T[i])
Remplissage complet
(S T: Tab1
Tab1, Algorithme Remplir_Comp FinPo r
FinPour
E x, y: entier) Constante Nmin=1 Nmax=10 Fin
Variable i : entier Type Tab1=tableau[Nmin..Nmax]
Début d’ ti
d’entier  Appels :
Pour i = x à y Faire Variable V:Tab1 …  Affichage complet :
Ecrire (‘donner
T[‘,i,’]=’)
T[ ,i, ] ) Affich_Tab(T, 1, Nmax)
Début …
Lire(T[i]) Remplir_Tab(V, Nmin, Nmax)  Affichage partiel :
FinPour … Affich_Tab(T, 1, p) avec p<Nmax
Fin Fin
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 103/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 104/110
Définition d’un Tableau à deux Définition d’un Tableau à 2D (2/2)
( )
dimensions – 2D (1/2) jème
Hypothèse : On suppose que la borne inférieure des lignes et celle colonne
d colonnes
des l vautt 1
1.
 Un tableau à deux dimensions de nom « T » a « L » lignes et « C » T[1,1] T[1,2] … T[1, j] … T[1, C]
colonnes est une suite de L*C variables T[i,j][ ,j] où l’entier « i » varie
entre « 1 » et « L » et l’entier « j » varie entre « 1 » et « C ». T[2,1] T[2,2] … T[2, j] … T[2, C]
 Lorsque L=C le tableau est dit carré. On appelle ordre le nombre
des éléments des lignes ou des colonnes.
colonnes … … … …
 La variable « T[i,j] » s’appelle l’élément d’indice « i » et « j » du
tableau « T ».
ième T[i,1] T[i,2] … T[i, j] … T[i, C]
ligne
 Le premier indice est l’indice des lignes et le deuxième est celui
… … … …
des colonnes.
 Tous
T les
l éléments
élé t « T[i
T[i,j]
j] » sontt de
d même
ê ttype. T[L 1]
T[L,1] T[L 2]
T[L,2] … T[L j]
T[L, … T[L C]
T[L,
 De manière générale un tableau à deux dimensions « 2D » se
présente comme suit :
p
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 105/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 106/110

Déclaration d’un Tableau à 2D Manipulation


p d’un tableau à 2D
 Un tableau à deux dimensions (matrice) doit être déclaré en  Si T est un tableau à L*C éléments, défini par exemple comme un
précisant son nom, le type de ses éléments, le nombre de ses tableau [1..L,1..C] de réel, alors :
li
lignes (L) ett celui
l idde ses colonnes
l (C).
(C)
 L’accès à la case d’indice « i » et « j » se fait par T[i,j] ;
 Si « i » ou « j » est à l’extérieur des bornes, T[i,j] génère une
 Cette déclaration se présente comme suit :
erreur ;
Constante L=valeur1 C=valeur2
 La variable T[i,j] peut être manipulée comme n’importe quelle
yp
Type nomtype
yp = tableau[1..L ,1..C] type
yp variable scalaire,
scalaire
des éléments
 c.à.d. que les instructions de lecture, d’écriture et
Variable T : nomtype … d’affectation sont applicables aux différentes cases du
 Exemple : tableau et non pas au tableau « T » lui-même :
Constante L=5 C=5 Lire(T[i,j])
Type Tab2d
b2d = tableau
bl [1
[1..L, 1
1..C]
C] d’
d’entier
i E i (T[i j])
Ecrire(T[i,j])
Variable T : Tab2d … T[i,j]  valeur

IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 107/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 108/110
Remplissage d’un tableau à 2D ligne par Affichage
g d’un tableau à 2D
ligne
li
Dans la suite, on suppose que les déclarations suivantes sont déjà définies : Procédure Affich_Tab (E T: Tab2, E x, y:
 constante L=10 C=7 entier)
 type Tab2 = tableau [1..L, 1..C] de réel Variable i, j: entier
Début
Procédure Remplir_Tab_L
Remplir Tab L (S T: Tab2
Tab2, E x,
x y: entier)
Pour i = 1 à x Faire
Variable i, j: entier
Début Pour j = 1 à y Faire
Pour i = 1 à x Faire E i
Ecrire (‘T[‘
(‘T[‘,i,’
i ’ ,’,j,’]=’,
’ j ’] ’ T[i
T[i,j])
j])
Pour j = 1 à y Faire
FinPour
Ecrire (‘donner T[‘,i,’,’,j,’]=’)
Lire(T[i j])
Lire(T[i,j]) FinPour
FinPour Fin
FinPour
Fin
Appels :
remplissage complet : Remplir_Tab_L(M, L, C)
remplissage partiel : Remplir_Tab_L(M,
Remplir Tab L(M p,
p q) {avec p<L et q<C}
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 109/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 110/110

Vous aimerez peut-être aussi