Académique Documents
Professionnel Documents
Culture Documents
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.
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:
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
Opérations dd’affectation
affectation
quence d’instru
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)
( )
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 :
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
DEBUT DEBUT
Lire(R) Lire(R)
FIN Lire(Surf_Cercle)
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.
Traitement1 Traitement2
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 21/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 22/110
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
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 33/110 IPEIN2016/2017 1ère Année – Informatique – 34/110
Chapitre 1
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
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") X1
Lire (choix) S0 S0
Si choix
h i <> ‘S’ ET choix
h i <> ’C’ Alors
Al
S S+x x1
Début
x x+1 (x=2)
Ecrire ("Saisie erronée à refaire")
Lire (choix ) SS S+xx SS 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
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 49/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 50/110
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
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 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
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
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é
IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 81/110 IPEIN2016/2017 1ère Année – Informatique – Chapitre 1 82/110
- 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))
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.
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.
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)
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.
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
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