Introduction à l'Algorithmique 2
Introduction à l'Algorithmique 2
SMI-3
DÉPARTEMENT INFORMATIQUE
•Présence
• Prises de notes de cours
• Diffusion de l’information:
Responsable de la section
facebook : Dept Info FSA
Contact: [Link]@[Link]
• [Link]
• Rappel
• Tableaux (statiques et dynamiques)
• Pointeurs
• Fonctions et procédures
• La récursivité
• Fichiers, Enregistrements et Structures
• Notions sur des structures de données élementaires
• La complexité
• Preuves d’algorithmes
• Tas et tri par tas ,
• Compression de données
Définition 01
• Un algorithme représente une séquence
d’instructions (Actions), logiquement ordonnées, qui
permet de résoudre un problème donné.
Algorithme Problème à
Résoudre
d’actions (instructions) Résoudre
Corps (Instructions)
La partie des instructions (Entrées, Traitement et
Sorties)
Remarques
Les variables doivent être déclarées avant d’être utilisées
Remarques
Un identificateur est affecté à un seul objet. On peut jamais utiliser le même identificateur pour deux
variables ou constantes différentes.
Doit commencer par une lettre alphabétique
Doit être différent des mots réservés du langage (par exemple en C: int, float, long, else, for, if,
return, …)
La longueur du nom doit être inférieure à la taille maximale spécifiée par le langage utilisé
Réponse
• 12x : n’est valide, puisqu’il commence par un caractère numérique.
Doit être : x12
• Prix Unitaire : n’est pas valide, puisqu’il contient un espace. Doit
être : PrixUnitaire ou Prix_Unitaire.
• Hauteur-Mur : n’est pas valide, puisque il contient le signe « -
»(moins). Doit être : Hauteur_Mur.
• a1 : est valide
• a?b : n’est pas valide, puisqu’il contient le caractère « ? ». Doit être
: ab.
Donnée Type
“ Bienvenue au Maroc ”
-300
“8”
25.68
“@”
Vrai
“Faux”
Donnée Type
“ Bienvenue au Maroc ” Chaine de caractères
-300 Entier
25.68 Réel
Vrai Booléen
Variable: Une donnée dont le contenu peut être modifié par une action durant
l'éxécution d'un algorithme.
Constante: Une donnée fixe qui ne varie pas durant l'éxécution d'un algorithme.
Syntaxe:
Constante NOM_DE_LA_CONSTANTE = Valeur
Exemple:
Constante PI = 3.14
Constante Nbr_Mois = 12
Affectation
Entrées / Sorties (Lire-Ecrire)
Opérateurs arithmétiques (binaires & unaires)
Opérateurs Booléens
Opérateurs relationnels (de comparaison)
Opérateurs sur les chaînes
Exemple:
A ← "FSA" C ← 10
B←3 C ← 2<5
A ← "FSA" C ← 10
B←3 C ← 2<5
Variables
Instructions A B C D
B←2
C ← B +10
A←4
D←A
B← B * D
Variables
Instructions A B C D
B←2 2
C ← B +10 2 12
A←4 4 2 12
D←A 4 2 12 4
B← B * D 4 8 12 4
Syntaxe:
ECRIRE (Variable)
ECRIRE (" Message")
ECRIRE ("Message" ,
Variable)
De manière générale :
ECRIRE (V1 , V2 , … , Vn)
Exemples :
ECRIRE (A)
ECRIRE (" bonjour " )
ECRIRE (" le périmètre = " , P )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 23
Instruction d’écriture
Nom ← "Ali"
Ecrire ("Nom")
Ecrire (Nom)
Ecrire ("Nom", Nom)
Nom ← "Ali"
Signifie affiché sur l'écran le message (Nom)
Ecrire ("Nom") Signifie affiché sur l'écran le contenu de la
Ecrire (Nom) variable Nom (Ali)
Ecrire ("Nom", Nom) Signifie affiché sur l'écran le message (Nom)
+ le contenu de la variable Nom (Nom Ali)
Syntaxe:
LIRE (Variable)
Exercice:
Nous voulons écrire un algorithme qui calcule l'aire d'un cercle
1- Donner les instructions de déclaration.
2- Donner les instructions qui demandent à l'utilisateur de taper les valeurs
des données.
3- Donner les instructions de traitement.
4- Donner les instructions qui permettent d'afficher le résultat.
Algorithme Aire_Cercle
Variables Rayon, Surface : Réel
Constante Pi = 3.14
Début
Ecrire ("Veuillez entrer la valeur du rayon de cercle :")
Lire (Rayon)
Surface ← Rayon * Rayon * Pi
Ecrire ("L'aire de cercle est : ", Surface)
Fin
Rappel:
o La division de deux entiers est un entier. 15/2=7
o Le modulo est le reste d’une division entière. 15%2=1
Exemple:
o X++ = X+1
o ++X = X+1
o Y-- = Y-1
o --Y = Y-1
Algorithme Unaire
Variables A : Entier
Début
A←1
Ecrire (++A)
Ecrire (A++)
Ecrire (A)
Fin
Algorithme Unaire
Variables A : Entier
Début
A←1 Resultat:
Ecrire (++A)
Ecrire (A++)
2
Ecrire (A)
Fin
Algorithme Unaire
Variables A : Entier
Début
A←1 Resultat:
Ecrire (++A) 2
Ecrire (A++)
Ecrire (A)
2
Fin
Algorithme Unaire
Variables A : Entier
Début
A←1 Resultat:
Ecrire (++A) 2
Ecrire (A++) 2
Ecrire (A)
Fin
3
C1 C2 C1 ET C2 C1 C2 C1 OU exclusif C2
VRAI VRAI VRAI VRAI VRAI FAUX
VRAI FAUX FAUX VRAI FAUX VRAI
FAUX VRAI FAUX FAUX VRAI VRAI
FAUX FAUX FAUX FAUX FAUX FAUX
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5
B←5
C ← 10
Ecrire (A = B)
Ecrire (A = C)
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5
B←5 Resultat:
C ← 10
Ecrire (A = B)
Ecrire (A = C)
1
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5
B←5 Resultat:
C ← 10
Ecrire (A = B) 1
Ecrire (A = C)
0
Fin
Exemples :
A ← " Faculté "
B ← " des sciences"
C←A&B
La variable C vaut : " Faculté des sciences"
Algorithme TXT
Variables txt1 , txt2 , txt3 , txt4 : chaine des caractères
Début
txt1 ← "FSA"
txt2 ← " SMI"
txt3 ← "FSA SMI3"
txt4 ← txt1 & txt2
Ecrire (" txt1 ")
Ecrire (txt4 != txt3)
Fin
Structures élémentaires:
Structures conditionnelles
Simple : Si ... Alors ... Fin Si
Alternative : Si ... Alors ... Sinon ... Fin Si
Alternative SI imbriquée (plus de deux choix)
à choix multiples : Selon
Structures répétitives
Les boucles Pour
Les boucles Tant que
Les boucles répéter... jusqu’à
Structures de contrôle
conditionnelles
Syntaxe:
SI (condition) Alors
Instructions
FINSI
Si la condition vaut Vrai alors le bloc d'instructions sera exécuté, si non il sera ignoré
Algorithme Factoriele
Variables F , n , i : Entier
Début
Ecrire (" Veuillez entrer le dividende")
Lire (A)
Ecrire (" Veuillez entrer le diviseur")
Lire (B)
Si B != 0 Alors
Ecrire (" Le résultat est : " , A / B)
Fin Si
Fin
Exercice:
Ecrire un algorithme qui permet de calculer le maximum de deux nombres
réels saisies par l'utilisateur.
Algorithme Maximum
Variables A , B , Max : Réel
Début
Ecrire (" Entrez les valeurs de A et de B.")
Lire (A , B)
Max ← A
Si Max < B Alors
Max ← B
Fin Si
Ecrire (" la valeur maximale est : " , Max)
Fin
Syntaxe:
Non Condition Oui
SI (Condition) ALORS
bloc 1 d'instructions vérifiée
SINON
bloc 2 d'instructions
Séquence 22
Instructions Instructions
Séquence1 1
FINSI
Début
Ecrire (" Veuillez entrer le dividende")
Lire (A)
Ecrire (" Veuillez entrer le diviseur")
Lire (B)
Si B != 0 Alors
Ecrire (" Le résultat est : " , A / B)
Sinon
Ecrire (" La division par 0 est impossible " )
Fin Si
Fin
Exercice:
Ecrire un algorithme qui permet de demander un nombre entier à
l'utilisateur, et l'informe ensuite si ce nombre est pair ou impair.
Début
Ecrire (" Programme qui détermine la nature d'un nombre : ")
Ecrire (" Veuillez entrer le nombre")
Lire (A)
Si (A % 2 =0) Alors
Ecrire (" Le nombre est pair ")
Sinon
Ecrire (" Le nombre est impair ")
Fin Si
Fin
Si (condition1) alors
instructionsA
Sinon
Si (condition2) alors
instructionsB
Sinon
instructionsC
Finsi
Finsi
Exemple:
Ecrire un algorithme qui permet de demander un nombre entier à l'utilisateur, et
l'informe ensuite si ce nombre est positif ou négatif.
Début
Ecrire (" Programme qui détermine la nature d'un nombre : ")
Ecrire (" Veuillez entrer le nombre")
Lire (A)
Si A > 0 Alors
Ecrire (" Le nombre est positif ")
Sinon
Si A < 0 Alors
Ecrire (" Le nombre est negatif ")
Sinon
Ecrire (" Le nombre est nul ")
Fin Si
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 54
Structure conditionnelle - Structure alternative
imbriquée (multiple choix)
Exercice:
Ecrire un algorithme qui permet de demander un nombre entier entre 0 et 2 à
l'utilisateur, et affiche leur nom.
Syntaxe:
variable
Selon (variable)
Cas val_1 : inst_1
Cas val_2 : inst_2 val_1 val_2 val_n Sinon
... inst_1 inst_2 .... inst_n inst_d
Cas val_n : inst_n
Sinon : inst_d
FinSelon
Algorithme Nom_chiffre
Variables n : Entier
Début
Ecrire ("Donnez votre chiffre entre 0 et 2")
Lire (n)
Selon (n)
Fin Selon
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 58
Structures élémentaires
instructions
Cpt← Cpt+Pas
Algorithme Table_Multiplication
Variables N , i : Entier
Début
Ecrire (" Saisir un nombre entier")
Lire (N)
Pour i =1 à 10 Pas de 1
FinPour
Fin
Faux
Tant que (Condition) Condition
Bloc d’instructions
Vrai
FinTantque
instructions
La condition est évaluée avant chaque itération;
Si la condition est vraie, on exécute le bloc
d’instructions puis, on retourne pour re-tester la condition.
Si elle est vraie, on ré-exécute le bloc d’instructions et ainsi de suite;
Si la condition est fausse, on sort de la boucle sans exécuter le bloc d’instructions.
Algorithme Somme
Variables Somme , i : Entier
Début
i←0
S←0
Tant que ( i <= 100 )
Somme ← Somme + i
i←i+1
FinTantque
Fin
Algorithme Somme_Clavier
Variables S , Val : Entier
Début
S←0
Répéter
Lire(Val)
S ← S + Val
Jusqu’à (Val != 0)
Fin
Les tableaux
Tableaux
Exemple:
Exemple:
Affectation de la note 14 à l'étudiant num 1 :
Exemple:
Affectation de la note 14 à l'étudiant num 1 : N [ 0 ] ← 14
Exemple:
Utilisation de la lecture pour saisir la note de
l'étudiant num 2
Exemple:
Utilisation de la lecture pour saisir la note de Lire (N [ 1 ])
l'étudiant num 2
Exemple:
Utilisation de la lecture pour saisir la note du
dernier étudiant :
Exemple:
Utilisation de la lecture pour saisir la note du Lire (N [ 499 ])
dernier étudiant :
Exemple:
Affichage de la note du dernier étudiant de la liste :
Exemple:
Affichage de la note du dernier étudiant de la liste : Ecrire (N [ 499 ])
T [0] ← 8
T [1] ← T [0] - 3
T [2] ← T [1] * T [0]
T [3] ← 20
Tableau T [ 5 ] : entier
Tableau T [ 5 ] : entier
T [0] ← 8
T [1] ← T [0] - 3
T [3] ← 20
T [0] ← 8
T [1] ← T [0] - 3
T [3] ← 20
T [0] ← 8
T [1] ← T [0] - 3
T [3] ← 20
T [0] ← 8
T [1] ← T [0] - 3
T [3] ← 20
T [0] ← 8
T [1] ← T [0] - 3
T [3] ← 20
T [0] ← 8
T [1] ← T [0] - 3
T [3] ← 20
Exercice:
Début
Pour i = 0 à 317 Pas de 1
Ecrire (" Donner la note de l'étudiant num “, i+1 , " : ")
Lire (N [ i ])
FinPour
S <- 0
Pour i = 0 à 317 Pas de 1
S <- S + N [ i ]
FinPour
M <- S / 318
Ecrire (" La moyenne est : “, M)
Fin
Exercice:
Tableaux
Lire ( T [ i ] [ j ] )
FinPour
FinPour
Ecrire ( T [ i ] [ j ] )
FinPour
FinPour
Exercice:
DÉPARTEMENT INFORMATIQUE
DÉPARTEMENT INFORMATIQUE
Instructions de base
Structures conditionnelles
Structures répétitives
• Entier
Nom • Réel
Variable Type • Caractère
• Chaîne de caractères
Valeur
• Booléen
Dans Python :
Nom
Variable
Valeur
Pr. Redouan Lahmyed ALGORITHMIQUE 2 5
Instructions de base – «Variables»
Dans Python :
Syntaxe d'utilisation
Nom d'une variable:
Valeur
Exemples :
Num_Joueur = 7
Pi = 3.14
Note_Exam = 15
Filière = "SMI"
Est_Valide = True
Évitez d'utiliser des mots réservés par Python tels que "def",
"and", "try", "print", etc.
Exemples :
X , Y = 10 , 20
Variables
Instructions W X Y Z
X=4
Y = X + 14
W=4
Z=Y
X=X*W
Y=W+X
W = 10 + Y - Z
Y,Z=2,4
Variables
Instructions W X Y Z
X=4 4
Y = X + 14 4 18
W=4 4 4 18
Z=Y 4 4 18 18
X=X*W 4 16 18 18
Y=W+X 4 16 20 18
W = 10 + Y - Z 12 16 20 18
Y,Z=2,4 12 16 2 4
print
Pr. Redouan Lahmyed ALGORITHMIQUE 2 12
Instructions de base – «Lecture / Ecriture»
Exemple:
print ( " FSA AGADIR " ) : Signifie affiché sur l'écran le message suivant:
FSA AGADIR.
print ( " L'étudiant " , Prenom , " " , Nom ) : Signifie affiché sur l'écran
le message suivant: L'étudiant suivi du contenu des variables
Prenom et Nom avec un espace entre elles.
print
Pr. Redouan Lahmyed ALGORITHMIQUE 2 13
Instructions de base – «Lecture / Ecriture»
input () : Permet de demander à l'utilisateur de saisir une valeur.
Syntaxe :
Exemple :
X = input ( " Saisir une valeur " )
input
input
Expressions
Expressions arithmétiques
Expressions de comparaisons
Expressions logiques
Opérateurs Signification
+ Addition
- Soustraction
* Multipication
/ Division
// Division entière
% Reste de la division entière
** Puissance
A = 10 / 3
B = 10 // 3
C = 10 % 3
D = 10 ** 3
10 3
A = 10 / 3
3.3333
10 3
B = 10 // 3
3
10 3
C = 10 % 3
1 3
3
D = 10 ** 3 10 = 1000
Instruction W X Y Z
W=3+6
X=W%6
Y=W*X
Z = X ** 2
W -= Z
W +=Y
Y //= W
Y = (W / Z) + X
Instruction W X Y Z
W=3+6 9
X=W%6 9 3
Y=W*X 9 3 27
Z = X ** 2 9 3 27 9
W -= Z 0 3 27 9
W +=Y 27 3 27 9
Y //= W 27 3 1 9
Y = (W / Z) + X 27 3 6 9
Instruction Résultat
X=2<8
X = 3 != 7
X = 4 >= 11
X = (12 % 5) <= (5 // 5)
Instruction Résultat
X=2<8 True
X = 3 != 7 True
X = 4 >= 11 False
X = (12 % 5) <= (5 // 5) False
X Y X and Y X or Y not X
True True True True False
True False False True False
False True False True True
False False False False True
Instruction Résultat
X= 5
Y = 10
A = (X >= 5) and ( Y != 7)
B = ( Y == 10) or (X + Y < 4)
C = not A
D = C or ( A or B)
Instruction Résultat
X= 5 5
Y = 10 10
A = (X >= 5) and ( Y != 7) True
B = ( Y == 10) or (X + Y < 4) True
C = not A False
D = C or ( A or B) True
Syntaxe: if Condition :
Instruction_1
Instruction_2
Instruction_3
......
Instructions_suivantes
Identation
Syntaxe: if Condition :
Instruction_1
Instruction_2
Instruction_3
......
Instructions_suivantes
Identation
Syntaxe: if Condition :
Instruction_1
Instruction_2
Instruction_3
......
Instructions_suivantes
if Y != 0 :
print ( " Le résultat est : " , X / Y )
MAX = X
if MAX < Y :
MAX = Y
print ( " Le max est : " , MAX )
if Condition :
Instructions_1
......
else :
Instructions_2
......
Instructions_suivantes
if Y != 0 :
print ( " Le résultat est : " , X / Y )
else :
print ( " La division par 0 est impossible ")
Instructions_suivantes
if A > 0 :
print ( " Le nombre est positif " )
elif A < 0 :
print ( " Le nombre est négatif " )
else :
print ( " Le nombre est nul " )
4. Structure imbriquée
Exercie: Ecrire un programme qui permet de déterminer la
nature d'un nombre saisi par l'utilisateur.
A = float ( input ( " Veuillez saisir un nombre : " ) )
if A > 0 :
print ( " Le nombre est positif " )
else :
if A < 0 :
print ( " Le nombre est négatif " )
else :
print ( " Le nombre est nul " )
4. Structure imbriquée
Syntaxe:
if Condition_1 :
Instructions_1
......
else :
if Condition_3 :
Instructions_3
......
else :
Instructions_2
......
Instructions_suivantes
for i in Sequence :
Instructions_1
Range ()
Instructions_2
......
Range (n) Range (n , m) Range (n , m , p)
Instructions_suivantes
Syntaxe:
while Condition :
Instructions_1
Instructions_2
......
Instructions_suivantes
Algorithme Somme
Variables S , i : Entier
Début i=0
i←0 S=0
S←0 while i <= 100 :
Tant que ( i <= 100 ) S=S+i
S←S+i i=i+1
i←i+1
FinTantque print ("La somme est ", S)
Fin
DÉPARTEMENT INFORMATIQUE
Définition
Algorithm: Exercice
Variable X : entier
Debut
X 15
Fin
X 15
X 15
X 15
15
X 15
15
X 15
P &X
15
1B1
X 15
P &X
Ecrire ( P )
Ecrire ( P^ ) 15
1B1
X 15
P &X
Ecrire ( P ) Affiche l’@ 1B1
Ecrire ( P^ ) Affiche la valeur 15 15
1B1
Instruction X Y Z P1 P2
Initialisation 10 20 30 - -
P1 ← &X
P2 ← &Z
P1^ ← (P2^)++
P1 ← P2
P2 ← &Y
P1^ ← P1^ - P2^
++ P2^
P1^ ← P1^ * P2^
X ← ++ P2^ * P1^
P1 ← &X
P2^ ← P1^ / P2^
Pr. Redouan Lahmyed ALGORITHMIQUE 2 13
Pointeurs
Exercice: Donner les valeurs des variables après chaque instructions:
Instruction X Y Z P1 P2
Initialisation 10 20 30 - -
P1 ← &X 10 20 30 &X -
P2 ← &Z 10 20 30 &X &Z
P1^ ← (P2^)++ 30 20 31 &X &Z
P1 ← P2 30 20 31 &Z &Z
P2 ← &Y 30 20 31 &Z &Y
P1^ ← P1^ - P2^ 30 20 11 &Z &Y
++ P2^ 30 21 11 &Z &Y
P1^ ← P1^ * P2^ 30 21 231 &Z &Y
X ← ++ P2^ * P1^ 5082 22 231 &Z &Y
P1 ← &X 5082 22 231 &X &Y
P2^ ← P1^ / P2^ 5082 231 231 &X &Y
Pr. Redouan Lahmyed ALGORITHMIQUE 2 14
Pointeur - Tableau
Exercice:
o Déclaration d'un tableau nommé Tab composé de six éléments entier :
Tab
Tab
Tab
Tab
Exemple:
Ecrire ( Tab[ 0 ] )
Ecrire ( Tab )
Ecrire ( &Tab[ 0 ] )
Ecrire( Tab^ )
Tab
Exemple:
Resultat:
Ecrire ( Tab [ 0 ] ) 8
Ecrire ( Tab ) 1000
Ecrire ( &Tab [ 0 ] ) 1000
Ecrire( Tab^ ) 8
Pr. Redouan Lahmyed ALGORITHMIQUE 2 20
Pointeur - Tableau
variable P : ^ entier
Tab
variable P : ^ entier
Tab
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
Ecrire ( P^ )
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
Ecrire ( P^ )
P++
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
Ecrire ( P^ )
P++
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
Ecrire ( P^ )
P++
Ecrire ( P^ )
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
Ecrire ( P^ )
P++
Ecrire ( P^ )
PP+3
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
Ecrire ( P^ )
P++
Ecrire ( P^ )
PP+3
variable P : ^ entier
Tab
P Tab // ou P &Tab[0]
Ecrire ( Tab[ 0 ] )
Ecrire ( P^ )
P++
Ecrire ( P^ )
PP+3
Ecrire ( P^ )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 31
Pointeur - Tableau
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Régles: Régles:
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
P variable P : ^ entier
P Tab // ou P &Tab[0]
Tab
Exemple:
( Tab + 1 ) ^ 4
P++
( Tab + 3 ) ^ 11
P^ P^ + 5
PP+2
Résumé:
• Le nom d'un tableau représente l'adresse de son premier élément
T : l'adresse de T [ 0 ]
T + i : l'adresse de T [ i ]
(T + i )^ : Le contenu de T [ i ]
Si P T , alors
P : Pointe sur T [ 0 ]
P + i : Pointe sur T [ i ]
(P + i )^ : Le contenu de T [ i ]
Décrémentation
Soustraction
Incrémentation Addition
Comparaison
Ptr++
Ecrire ( Ptr^)
Ecrire ( Ptr )
Ptr^ ++
Ecrire ( Ptr^)
Ecrire ( Ptr )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 50
Arithmétique des pointeurs - Incrémentation
Ecrire ( Ptr^)
Ecrire ( Ptr )
Ptr^ ++
Ecrire ( Ptr^)
Ecrire ( Ptr )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 51
Arithmétique des pointeurs - Incrémentation
Ptr
Ptr--
Ptr
Ptr
Ptr
Ecrire ( Ptr^)
Ecrire ( Ptr )
Ptr^ --
Ecrire ( Ptr^)
Ecrire ( Ptr )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 64
Arithmétique des pointeurs - Décrémentation
Ptr
Ecrire ( Ptr^)
Ecrire ( Ptr )
Ptr^ --
Ecrire ( Ptr^)
Ecrire ( Ptr )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 65
Arithmétique des pointeurs - Décrémentation
Ptr
Ptr
Ptr
Ptr
Ptr
Ptr
Ptr
Ptr
Ptr
Ecrire ( Ptr + 3)
Ecrire ( Ptr^ + 3 )
Ecrire ( Ptr + 3)
Ecrire ( Ptr^ + 3 ) Ptr + 3 ↔ & T [ 3 ]
Ptr^ + 3 ↔ T [ 3 ] + 3
Pr. Redouan Lahmyed ALGORITHMIQUE 2 76
Arithmétique des pointeurs - Soustraction
p q
variable p , q : ^ entier
p T + 1 // ou Ptr &T[0]
q T + 3 // ou Ptr &T[3]
p q
p q
p q
Exemple:
Ecrire ( q = p )
Ecrire ( q >= p )
Ecrire ( p < q )
p q
Exemple:
Ecrire ( q = p )
Ecrire ( q >= p )
Ecrire ( p < q )
p q
Exemple:
Resultat:
Ecrire ( q = p ) 0
Ecrire ( q >= p )
Ecrire ( p < q )
p q
Exemple:
Resultat:
Ecrire ( q = p ) 0
Ecrire ( q >= p )
Ecrire ( p < q )
p q
Exemple:
Resultat:
Ecrire ( q = p ) 0
Ecrire ( q >= p )
1
Ecrire ( p < q )
p q
Exemple:
Resultat:
Ecrire ( q = p ) 0
Ecrire ( q >= p ) 1
Ecrire ( p < q )
p q
Exemple:
Resultat:
Ecrire ( q = p ) 0
Ecrire ( q >= p ) 1
Ecrire ( p < q ) 1
DÉPARTEMENT INFORMATIQUE
DÉPARTEMENT INFORMATIQUE
Début
Ecrire (" Veuillez saisir un entier")
Lire (n)
F←1
Si n = 0 Alors
Sinon
Pour i =1 à n Pas de 1
F←F*i
FinPour
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 3
Fonctions - Procédures
Début
Ecrire (" Veuillez saisir le premier entier") Ecrire (" Veuillez saisir le deuxième entier ")
Lire (n1) Lire (n2)
F1 ← 1 F2 ← 1
Si n1 = 0 Alors Si n2 = 0 Alors
Ecrire (" La factorielle est :" , F1 ) Ecrire (" La factorielle est :" , F2 )
Sinon Sinon
Pour i =1 à n1 Pas de 1 Pour i =1 à n2 Pas de 1
F1 ← F1 * i F2 ← F2 * i
FinPour FinPour
Ecrire (" La factorielle est :" , F1 ) Ecrire (" La factorielle est :" , F2 )
Fin Si Fin Si
Fin
Début
Ecrire (" Veuillez saisir le premier entier") Ecrire (" Veuillez saisir le deuxième entier ")
Lire (n1) Lire (n2)
F1 ← 1 F2 ← 1
Si n1 = 0 Alors Si n2 = 0 Alors
Ecrire (" La factorielle est :" , F1 ) Ecrire (" La factorielle est :" , F2 )
Sinon Sinon
Pour i =1 à n1 Pas de 1 Pour i =1 à n2 Pas de 1
F1 ← F1 * i F2 ← F2 * i
FinPour FinPour
Ecrire (" La factorielle est :" , F1 ) Ecrire (" La factorielle est :" , F2 )
Fin Si Fin Si
Fin
Arguments
de fonction
Traitement
Nom de fonction
* Type de retour
Résultat retourné
Pr. Redouan Lahmyed ALGORITHMIQUE 2 12
Fonctions
Syntaxe:
Fonction Nom_Fonction (arg1 : Type1 , arg2 : Type2 , ....) : Type de retour
Variables
variable 1 : type_var1
variable 2 : type_var2
….
Début
Instructions
Retourne résulat_retour
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 13
Fonctions
Arguments de fonction Type résultat retourné
Syntaxe: Nom de fonction
Variables
variable 1 : type_var1
Variables locales
variable 2 : type_var2
….
Début
Instructions Traitements
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 14
Fonctions - Procédures
Exemple: Écrire une fonction qui calcule la factorielle d'un entier
Variables
Début
Fin
Variables
F , i : Entier
Début
F←1
Si N = 0 Alors
Retourne F
Sinon
Pour i =1 à N Pas de 1
F←F*i
FinPour
Retourne F
Fin Si
Fin
Variables
P : Entier
Début
P X^n
Retourne P
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 19
Fonctions
Appel de la fonction
Variable
Début
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 21
Fonctions
Algorithme Nom_Algorithm
Début
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 22
Fonctions
Algorithme Nom_Algorithm
Début
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 23
Fonctions
Algorithme Nom_Algorithm
Début
Début
Ecrire (" Veuillez saisir le premier entier") Ecrire (" Veuillez saisir le deuxième entier ")
Lire (n1) Lire (n2)
F1 ← 1 F2 ← 1
Si n1 = 0 Alors Si n2 = 0 Alors
Ecrire (" La factorielle est :" , F1 ) Ecrire (" La factorielle est :" , F2 )
Sinon Sinon
Pour i =1 à n1 Pas de 1 Pour i =1 à n2 Pas de 1
F1 ← F1 * i F2 ← F2 * i
FinPour FinPour
Ecrire (" La factorielle est :" , F1 ) Ecrire (" La factorielle est :" , F2 )
Fin Si Fin Si
Fin
Début
Fin
Début
F←1
Si N = 0 Alors
Retourne F
Sinon
Pour i =1 à N Pas de
1
F←F*i
FinPour
Retourne F
Fin Si Fin
Fin
Variables Début
F , i : Entier
Début
F←1
Si N = 0 Alors
Retourne F
Sinon
Pour i =1 à N Pas de 1
F←F*i
FinPour
Retourne F
Fin Si
Fin Fin
Variables Début
F , i : Entier
Ecrire (" Veuillez saisir le premier entier")
Début
Lire (n1)
F←1 Ecrire (" La factorielle est :" , Factorielle (n1))
Si N = 0 Alors
Retourne F
Sinon
Pour i =1 à N Pas de 1
F←F*i
FinPour
Retourne F
Fin Si
Fin Fin
Variables Début
F , i : Entier
Ecrire (" Veuillez saisir le premier entier")
Début
Lire (n1)
F←1 Ecrire (" La factorielle est :" , Factorielle (n1))
Si N = 0 Alors
Retourne F
Ecrire (" Veuillez saisir le deuxième entier")
Sinon Lire (n2)
Pour i =1 à N Pas de 1
Ecrire (" La factorielle est :" , Factorielle (n2))
F←F*i
FinPour
Retourne F
Fin Si
Fin Fin
Variable
Début
Fin
Variables Déclaration
P : Entier de la fonction
Début
P X^n
Retourne P
Fin
Variable
Début
Fin
Variables Déclaration
P : Entier de la fonction
Début
P X^n
Retourne P
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir un nombre et leur puissance : " )
Appel de la
Lire (A , B)
fonction
Ecrire ( " Résultat est : " , Puissance ( A , B ) )
Fin
C ← fct1 ( B , B ) A ← A + fct1 ( A , A )
C ← fct1 ( B , B ) A ← A + fct1 ( A , A )
Variables
Min : Entier Déclaration
Début de la fonction
Min ← A
Si Min > B Alors
Min ← B
Fin Si
Retourne Min
Fin
Variable V1 , V2 : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
Appel de la
Lire (V1 , V2)
fonction
Ecrire ( " La valeur minimale est : " , Minimum ( V1 , V2 ) )
Fin
Syntaxe:
Procedure Nom_Procedure (arg1 : Type1 , arg2 : Type2 , ....)
Variables
variable 1 : type_var1
variable 2 : type_var2
….
Début
Instructions
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 39
Procédures
Arguments de procédure
Syntaxe: Nom de procédure
Variables
variable 1 : type_var1
Variables locales
variable 2 : type_var2
….
Début
Instructions Traitements
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 40
Fonctions - Procédures
Exercice : Écrire une procédure qui calcule la puissance d'un entier
Variables
P : Entier
Début
P X^n
Retourne P
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 42
Fonctions - Procédures
Exercice : Écrire une procédure qui calcule la puissance d'un entier
Variables
P : Entier
Début
P X^n
Ecrire ( " Résultat est : " , P )
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 43
Procédures
Appel de la procédure
Méthode :
Variables Déclaration
P : Entier de la
procédure
Début
P X^n
Ecrire ( " Résultat est : " , P )
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir un nombre et leur puissance : " )
Appel de la
Lire (A , B)
procédure
Puissance ( A , B )
Fin
Variables
Pr : Entier
Début
Pr X * Y
Si Pr > 0 Alors
Ecrire (" Le produit est positif ")
Sinon
Si Pr < 0 Alors
Ecrire (" Le produit est negatif ")
Sinon
Ecrire (" Le produit est nul ")
Fin Si
Fin Si
Fin
Variables
Pr : Entier
Début
Pr X * Y
Déclaration de
Si Pr > 0 Alors la procédure
Ecrire (" Le produit est positif ")
Sinon
Si Pr < 0 Alors
Ecrire (" Le produit est negatif ")
Sinon
Ecrire (" Le produit est nul ")
Fin Si
Fin Si
Fin
Variable V1 , V2 : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
Lire (V1 , V2) Appel de la
Signe_Produit (V1 , V2) procédure
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 48
Fonctions – Procédures (paramètres d’appels)
Variables
Temp : Entier
Début
Temp X
X Y
Y Temp
Fin
Variables
Temp : Entier
Début
Temp X
X Y
Y Temp
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 52
Fonctions – Procédures (paramètres d’appels)
Algorithme Echange
Procedure Echange_valeurs ( X: Entier , Y: Entier)
Variables
Temp : Entier
Début
Temp X
X Y
Y Temp
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier
Début
Temp X
X Y
Y Temp
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier
Début
Temp X
X Y
Y Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 3 2
Début
Temp X
X Y
Y Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 3 2
Début
Temp X
X Y
Y Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 3 2
Début
Temp X
X Y
Y Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3 3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 2 2
Début
Temp X
X Y
Y Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3 3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 2 3
Début
Temp X
X Y
Y Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3 3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (A , B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier
Début
Temp P1^
P1^ P2^
P2^ Temp
Fin
Variables
Temp : Entier
Début
Temp P1^
P1^ P2^
P2^ Temp
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 62
Fonctions – Procédures (paramètres d’appels)
Algorithme Echange
Procedure Echange_valeurs ( P1: ^Entier , P2: ^Entier)
Variables
Temp : Entier
Début
Temp P1^
P1^ P2^
P2^ Temp
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier
Début
Temp P1^
P1^ P2^
P2^ Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 1B3 1B2
Début
Temp P1^
P1^ P2^
P2^ Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 1B3 1B2
Début
Temp P1^
P1^ P2^
P2^ Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 1B3 1B2
Début
Temp P1^
P1^ P2^
P2^ Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
3 3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 1B3 1B2
Début
Temp P1^
P1^ P2^
P2^ Temp 2
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
2 3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
Variables
Temp : Entier 1B3 1B2
Début
Temp P1^
P1^ P2^
P2^ Temp 3
Fin
Variable A , B : Entier
Début
Ecrire ( " Veuillez saisir deux nombres : " )
2 3
Lire (A , B)
Ecrire ( " Avant l’echange : A =" , A , " B = " , B )
Echange_valeurs (&A , &B)
Ecrire (" Apres l’echange : A =" , A , " B = " , B )
Fin
La fonction Alea renvoie un nombre réel aléatoire compris entre 0 et 1. Pour obtenir une
valeur entière comprise entre min et max (avec min < max) on utilise la formule suivante :
Solution:
X Ent ( 6 * Alea () + 5 )
• Exemples:
Len("Bonjour") vaut 7
Len("") vaut 0
Mid("Ahmed is back", 3, 7) vaut "ed is b"
Mid("Ahmed is back", 11, 1) vaut "c"
Left("Et pourtant…", 8) vaut "Et pourt"
Right("Et pourtant…", 4) vaut "t…"
Find("Un pur bonheur", "pur") vaut 3
Find(" Dans la vie ", "bonheur ") vaut -1
Syntaxe:
def Nom_Fonction (arg1 , arg2 , ....) : def Procedure (arg1 , arg2 , ....) :
# Traitement # Traitement
Instruction 1 Instruction 1
Instruction 2 Instruction 2
……… ………
return résulat_retour
def Somme_Fct (X , Y ) :
# Traitement
Z=X+Y
return Z
def Somme_Proce ( X , Y ) :
# Traitement
Z=X+Y
def Somme_Fct (X , Y ) :
A = int ( input ( " Veillez saisir la valeur de A" ) )
# Traitement
B = int ( input ( " Veillez saisir la valeur de B" ) )
Z=X+Y
C = Somme_Fct (A , B )
return Z
print ( " A + B = “ , C )
# Appel_Procedure
# Traitement
Z=X+Y
DÉPARTEMENT INFORMATIQUE
Début Appel de
F←1
Si N < 2 Alors la fonction
Retourne F
Sinon
Pour i =2 à N Pas de
1
F←F*i Déclaration de
FinPour la fonction
Retourne F
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 3
Récursivité
Exercice: Écrire une fonction qui calcule la factorielle d'une valeur saisie par
l’utilisateur.
Fonction Factorielle ( N: Entier ) : Entier Ecrire (" La factorielle est :" , Factorielle (N))
Variables
F , i : Entier
Début
F←1
Si N < 2 Alors Solution itérative
Retourne F
Sinon
Pour i =2 à N Pas de
1
F←F*i
FinPour
Retourne F
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 4
Récursivité
Exercice: Écrire une fonction qui calcule la factorielle d'une valeur saisie par
l’utilisateur.
Fonction Factorielle ( N: Entier ) : Entier Ecrire (" La factorielle est :" , Factorielle (5))
Variables
F , i : Entier
Solution itérative
Début
F←1
Si N < 2 Alors
Retourne F
État initial:
Sinon
Pour i =2 à N Pas de
1
F←F*i
FinPour Itérations:
Retourne F
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 5
Récursivité
Exercice: Écrire une fonction qui calcule la factorielle d'une valeur saisie par
l’utilisateur.
Fonction Factorielle ( N: Entier ) : Entier Ecrire (" La factorielle est :" , Factorielle (5))
Variables
F , i : Entier
Solution itérative
Début
F←1
Si N < 2 Alors
Retourne F
État initial: F=1
Sinon F=2*1=2
Pour i =2 à N Pas de
1 F=3*2=6
F←F*i
FinPour Itérations: F = 4 * 6 = 24
Retourne F F = 5 * 24 = 120
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 6
Récursivité
Fonction Factorielle
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * 1
Factorielle ( 3 ) = 3 * 2 * 1
Factorielle ( 4 ) = 4 * 3 * 2 * 1
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * 1
Factorielle ( 3 ) = 3 * 2 * 1
Factorielle ( 4 ) = 4 * 3 * 2 * 1
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 3 ) = 3 * 2 * 1
Factorielle ( 4 ) = 4 * 3 * 2 * 1
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 3 ) = 3 * 2 * 1
Factorielle ( 4 ) = 4 * 3 * 2 * 1
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 4 ) = 4 * 3 * 2 * 1
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 4 ) = 4 * 3 * 2 * 1
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Factorielle ( 5 ) = 5 * 4 * 3 * 2 * 1
Fonction Factorielle
Factorielle ( 1 ) = 1
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Fonction Factorielle
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Fonction Factorielle
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Fonction Factorielle
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Fonction Factorielle
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Fonction Factorielle
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 1 ) = 1
Fonction Factorielle
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
Factorielle ( 3 ) = 3 * Factorielle ( 2 ) Solution
récursive
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 1 ) = 1
Factorielle ( 5 ) = 5 * Factorielle ( 4 )
Solution
Factorielle ( 4 ) = 4 * Factorielle ( 3 )
récursive
Factorielle ( 3 ) = 3 * Factorielle ( 2 )
Factorielle ( 2 ) = 2 * Factorielle ( 1 )
Factorielle ( 1 ) = 1
• Une procédure (ou fonction) est dite récursive lorsqu'elle fait appel à elle même.
• C’est l’équivalent de la récurrence en mathématique.
• La programmation récursive sert à remplacer les boucles (Pour , tant que,
Répéter .. jusqu'à).
Pr. Redouan Lahmyed ALGORITHMIQUE 2 23
Récursivité
Solution itérative Solution récursive
Variables
F , i : Entier Début
Si N < 2 Alors
Début Retourne 1
F←1
Si N < 2 Alors Sinon
Retourne F
Retourne N * Factorielle ( N -
Sinon 1)
Pour i =2 à N Pas de 1
Fin Si
Fin
Début
Si N < 2 Alors
Retourne 1
Sinon
Retourne N * Factorielle ( N -
1)
Fin Si
Fin
Début
Si N < 2 Alors
Retourne 1
Sinon
Retourne N * Factorielle ( N -
1)
Fin Si
Cas récursif
Fin
Début
Si N < 2 Alors
Retourne 1
Sinon
Retourne N * Factorielle ( N -
1)
Fin Si
Cas récursif
Fin
Cas de base
Fonction Factorielle ( N: Entier ) : Entier
Début
Si N < 2 Alors
Retourne 1
Sinon
Retourne N * Factorielle ( N -
1)
Fin Si
Fin
Cas de base
Fonction Factorielle ( N: Entier ) : Entier
Début
Si N < 2 Alors
Retourne 1
Sinon
Retourne N * Factorielle ( N -
1)
Fin Si
Fin
Cas de base
Fonction Factorielle ( N: Entier ) : Entier
Début
Si N < 2 Alors
Retourne 1
Sinon
Retourne N * Factorielle ( N -
1)
Fin Si
Cas récursif
Fin
Variables
P : Entier
Début
P X^n
Retourne P
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 31
Récursivité
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * 1
Puissance ( X , 2 ) = X * X * 1
Puissance ( X , 3 ) = X * X * X * 1
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * 1
Puissance ( X , 2 ) = X * X * 1
Puissance ( X , 3 ) = X * X * X * 1
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * X * 1
Puissance ( X , 3 ) = X * X * X * 1
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * X * 1
Puissance ( X , 3 ) = X * X * X * 1
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * Puissance ( X , 1 )
Puissance ( X , 3 ) = X * X * X * 1
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * Puissance ( X , 1 )
Puissance ( X , 3 ) = X * X * X * 1
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * Puissance ( X , 1 )
Puissance ( X , 3 ) = X * Puissance ( X , 2 )
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * Puissance ( X , 1 )
Puissance ( X , 3 ) = X * Puissance ( X , 2 )
……….
Puissance ( X , N ) = X * X * … * X * 1
Fonction Puissance
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * Puissance ( X , 1 )
Puissance ( X , 3 ) = X * Puissance ( X , 2 )
……….
Puissance ( X , N ) = X * Puissance ( X , N - 1 )
Fonction Puissance
Cas de base
Puissance ( X , 0 ) = 1
Puissance ( X , 1 ) = X * Puissance ( X , 0 )
Puissance ( X , 2 ) = X * Puissance ( X , 1 )
Puissance ( X , 3 ) = X * Puissance ( X , 2 )
……….
Puissance ( X , N ) = X * Puissance ( X , N - 1 )
Cas récursif
Début
Si N = 0 Alors
Retourne 1
Sinon
Retourne X * Puissance ( X , N - 1)
Fin Si
Fin
Résoudre(P) =
sinon
• décomposer P en sous-problèmes P1, P2,...
• résoudre récursivement P1, P2,...
• combiner les résultats pour obtenir la solution pour P
Méthode :
• Cas de Base : Une condition d’arrêt pour stopper les appels récursifs.
def puissance( X , n ) :
if n == 0:
return 1
else:
return X * puissance( X , n-1 )
DÉPARTEMENT INFORMATIQUE
Exercice:
“ Proposer un algorithme le plus efficace pour trier les éléments de ce tableau T. "
Principe
Répéter
np ← 0
Pour i=0 à N-2
Si (T[i] > T[i+1]) alors
z ← T[i]
T[i] ← T[i+1]
T[i+1] ← z
np ← np + 1
Finsi
FinPour
Jusqu’à (np=0)
Principe T[i]
A la position d’indice j, tel que : T[j-1] <= T[i] et T[i] < T[j+1
Exemple:
Exemple:
Exemple:
Exemple:
15 + 20 = 35 m
30 m
Exemple:
15 + 20 = 35 m
30 m
Types de complexité
Le tableau suivant donne les types de complexité habituellement rencontrés :
Types de complexité
• Si le temps d'exécution d'une instruction est de 10 nanosecondes (1 / 1000000000 de
secondes), le tableau suivant indique le temps d'exécution de chaque type de complexité.
Types de complexité
• Si le temps d'exécution d'une instruction est de 10 nanosecondes (1 / 1000000000 de
secondes), le tableau suivant indique le temps d'exécution de chaque type de complexité.
Types de complexité
Types de complexité
2. le compilateur utilisé.
5. …..
Opération d'affectation ( X ← 10 )
Vérification d'une condition ( X > 0 )
Pour i = 1 à n Pas de 1
FinPour
Pour i = 1 à n Pas de 1
FinPour
FinPour
FinPour
FinPour
FinPour
𝑛
Complexité = O ( 1 ) + ( O(1)+O(1)+O(1)+O(2)+O(2))
𝑖=1
𝑛
Complexité = O ( 1 ) + ( O(1)+O(1)+O(1)+O(2)+O(2))
𝑖=1
𝑛
Complexité = O ( 1 ) + ( O(1)+O(1)+O(1)+O(2)+O(2))
𝑖=1
𝑛
Complexité = O ( 1 ) + ( O(1)+O(1)+O(1)+O(2)+O(2))
𝑖=1
𝑛
Complexité = O ( 1 ) + ( O(1)+O(1)+O(1)+O(2)+O(2))
𝑖=1
𝑛
Complexité = O ( 1 ) + ( O(1)+O(1)+O(1)+O(2)+O(2))
𝑖=1
𝑛
Complexité = O ( 1 ) + ( O(1)+O(1)+O(1)+O(2)+O(2))
𝑖=1
= O ( 1 ) + ( n – 1 + 1) x O ( 7 ) = O ( 1 ) + O ( 7n )
=O ( 7n + 1 )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 44
Complexité
Si i < 2 Alors
Ecrire ( " i : " , i )
Sinon
Ecrire ( " Saisir un nombre" )
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Si i < 2 Alors
Ecrire ( " i : " , i )
Sinon
Ecrire ( " Saisir un nombre" )
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Sinon
Ecrire ( " Saisir un nombre" )
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Sinon
Ecrire ( " Saisir un nombre" ) • Si la condition est fausse : O(4)
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Sinon
Ecrire ( " Saisir un nombre" ) • Si la condition est fausse : O(4)
Lire ( A )
Ecrire ( " Le résultat est : " , i x A ) La complexité de la structure Si / Sinon :
Fin Si O ( 1 ) + Max ( O ( 1 ) , O ( 4 ) ) = O ( 1 ) + O ( 4 )
Fin =O (5)
FinPour
Si i < 2 Alors
Ecrire ( " i : " , i )
Sinon
Ecrire ( " Saisir un nombre" )
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 52
Complexité
Règles de calcul de la complexité
La complexité d'une séquence de deux blocs d'instructions est
égale à la somme des complexités de deux blocs.
Pour i = 1 à n Pas de 1
FinPour
Si i < 2 Alors
Ecrire ( " i : " , i )
Sinon
Ecrire ( " Saisir un nombre" )
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 53
Complexité
Règles de calcul de la complexité
La complexité d'une séquence de deux blocs d'instructions est
égale à la somme des complexités de deux blocs.
Pour i = 1 à n Pas de 1
Si i < 2 Alors
Ecrire ( " i : " , i )
Sinon
Ecrire ( " Saisir un nombre" )
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 54
Complexité
Règles de calcul de la complexité
La complexité d'une séquence de deux blocs d'instructions est
égale à la somme des complexités de deux blocs.
Pour i = 1 à n Pas de 1
Si i < 2 Alors
La complexité de cette séquence :
Ecrire ( " i : " , i )
O ( 7n + 1 ) + O ( 5 ) = O ( 7n + 6 )
Sinon
Ecrire ( " Saisir un nombre" )
Lire ( A )
Ecrire ( " Le résultat est : " , i x A )
Fin Si
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 55
Complexité
Règles de calcul de la complexité
La complexité d'un algorithme est un calcul de ses performances
asymptotiques dans le pire des cas
• Asymptotique nous nous interessons aux données très volumineuses car les petites
valeurs ne sont pas assez informatives.
Exemple:
• O ( 6n2 + 4n + 7 )
• O ( 2n + 4n3 + 11n2 )
• O ( 6n + 13log n + 17 )
Exemple:
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5
B←5
C ← 10
Ecrire (A = B)
Ecrire (A = C)
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5 O(1)
B←5
C ← 10
Ecrire (A = B)
Ecrire (A = C)
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5 O(1)
B←5 O(1)
C ← 10
Ecrire (A = B)
Ecrire (A = C)
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5 O(1)
B←5 O(1)
C ← 10 O(1)
Ecrire (A = B)
Ecrire (A = C)
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5 O(1)
B←5 O(1)
C ← 10 O(1)
Ecrire (A = B) O(2)
Ecrire (A = C)
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5 O(1)
B←5 O(1)
C ← 10 O(1)
Ecrire (A = B) O(2)
Ecrire (A = C) O(2)
Fin
Algorithme Comparaison
Variables A , B , C : Entier
Début
A←5 O(1)
B←5 O(1)
C ← 10 O(1)
Ecrire (A = B) O(2)
Ecrire (A = C) O(2)
Fin
Début
Ecrire ( " Saisir un nombre " )
Lire ( N )
Si N < 2 Alors
Ecrire ( N )
Sinon
Pour i = N+10 à N+20 Pas de 1
Ecrire ( i )
FinPour
Fin Si
Fin
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Si N < 2 Alors
Ecrire ( N )
Sinon
Pour i = N+10 à N+20 Pas de 1
Ecrire ( i )
FinPour
Fin Si
Fin
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Si N < 2 Alors complexité de la structure Si / Sinon
Ecrire ( N )
O(1)
Sinon
Pour i = N+10 à N+20 Pas de 1 • Si la condition est vraie :
Ecrire ( i )
• Si la condition est fausse :
FinPour
Fin Si
Fin
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Si N < 2 Alors complexité de la structure Si / Sinon
Ecrire ( N )
O(1)
Sinon
Pour i = N+10 à N+20 Pas de 1 • Si la condition est vraie :
O(1)
Ecrire ( i )
• Si la condition est fausse :
FinPour
Fin Si
Fin
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Si N < 2 Alors complexité de la structure Si / Sinon
Ecrire ( N )
O(1)
Sinon
Pour i = N+10 à N+20 Pas de 1 • Si la condition est vraie :
O(1)
Ecrire ( i )
• Si la condition est fausse :
FinPour O(2)+ 𝑵+𝟐𝟎
𝒊=𝐍+𝟏𝟎 (O (2)+O(1)+O(2))
Fin Si
Fin
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Si N < 2 Alors complexité de la structure Si / Sinon
Ecrire ( N )
O(1)
Sinon
Pour i = N+10 à N+20 Pas de 1 • Si la condition est vraie :
O(1)
Ecrire ( i )
• Si la condition est fausse :
FinPour O(2)+ 𝑵+𝟐𝟎
𝒊=𝐍+𝟏𝟎 (O (2)+O(1)+O(2))
Fin Si
Fin = O ( 2 ) + ( ( N+ 20 ) – (N+10) + 1 ) x O ( 5 )
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Si N < 2 Alors complexité de la structure Si / Sinon
Ecrire ( N )
O(1)
Sinon
Pour i = N+10 à N+20 Pas de 1 • Si la condition est vraie :
O(1)
Ecrire ( i )
• Si la condition est fausse :
FinPour O(2)+ 𝑵+𝟐𝟎
𝒊=𝐍+𝟏𝟎 (O (2)+O(1)+O(2))
Fin Si
Fin = O ( 2 ) + ( ( N+ 20 ) – (N+10) + 1 ) x O ( 5 )
= O ( 2 ) + O ( 55 ) = O ( 57 )
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Si N < 2 Alors complexité de la structure Si / Sinon
Ecrire ( N )
O ( 1 ) + Max ( O ( 1 ) , O ( 57 ) ) = O ( 57 )
Sinon
Pour i = N+10 à N+20 Pas de 1
Ecrire ( i )
FinPour
Fin Si
Fin
Début O(1)
Ecrire ( " Saisir un nombre " )
Lire ( N ) O(1)
Si N < 2 Alors complexité de la structure Si / Sinon
Ecrire ( N )
O ( 1 ) + Max ( O ( 1 ) , O ( 57 ) ) = O ( 1 ) + O ( 57 )
Sinon
Pour i = N+10 à N+20 Pas de 1
Ecrire ( i ) Complexité = O ( 2 ) + O ( 1 ) + O ( 57 ) = O ( 60 )
FinPour
Fin Si Alors la complexité de cet algorithme est : O ( 1 )
Fin
Algorithme Remplissage_Matrice
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir la dimension du tableau " )
Lire ( N )
Pour i = 0 à N Pas de 1
Pour j = 0 à N Pas de 1
Lire ( i )
FinPour
FinPour
Fin
Algorithme Remplissage_Matrice
Variables i , N : Entier
Tableau T[100][100] : Entier
Lire ( i )
FinPour
FinPour
Fin
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir un nombre " )
Lire ( N )
Pour i = 0 à N Pas de i * 2
Ecrire ( i )
FinPour
Fin
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N )
Pour i = 0 à N Pas de i * 2
Ecrire ( i )
FinPour
Fin
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Pour i = 0 à N Pas de i * 2
Ecrire ( i )
FinPour
Fin
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Pour i = 0 à N Pas de i * 2
Ecrire ( i )
FinPour
Fin
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Pour i = 0 à N Pas de i * 2
Ecrire ( i )
FinPour
Fin
Début
Si N vaut 300
Ecrire ( " Saisir un nombre " ) O(1)
Ité. 1 : i vaut 1
Lire ( N ) O(1) Ité. 2 : i vaut 2
Ité. 3 : i vaut 4
Pour i = 0 à N Pas de i * 2
Ité. 4 : i vaut 8
Ité. 5 : i vaut 16
Ecrire ( i )
Ité. 6 : i vaut 32
FinPour
Ité. 7 : i vaut 64
Ité. 8 : i vaut 128
Fin
Ité. 9 : i vaut 256
Début
Si N vaut 300
Ecrire ( " Saisir un nombre " ) O(1)
Ité. 1 : i vaut 1
Lire ( N ) O(1) Ité. 2 : i vaut 2
Ité. 3 : i vaut 4
Pour i = 0 à N Pas de i * 2
Ité. 4 : i vaut 8
Ité. 5 : i vaut 16
Ecrire ( i )
Ité. 6 : i vaut 32
FinPour
Ité. 7 : i vaut 64
Ité. 8 : i vaut 128
Fin
Ité. 9 : i vaut 256
Début
Si N vaut 300
Ecrire ( " Saisir un nombre " ) O(1)
Ité. 1 : i vaut 1
Lire ( N ) O(1) Ité. 2 : i vaut 2
Ité. 3 : i vaut 4
Pour i = 0 à N Pas de i * 2
Ité. 4 : i vaut 8
x 1 + log2 (n) Ité. 5 : i vaut 16
Ecrire ( i )
Ité. 6 : i vaut 32
FinPour
Ité. 7 : i vaut 64
Ité. 8 : i vaut 128
Fin
Ité. 9 : i vaut 256
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Fin
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Début
Ecrire ( " Saisir un nombre " ) O(1)
Lire ( N ) O(1)
Algorithme Affichage
Variables i , N : Entier
Tableau T[100][100] : Entier
Complexité de l’algorithme :
Début
Ecrire ( " Saisir un nombre " ) O ( 1 ) + O ( 1 ) + O ( 5 + 4log2 (n) )
Lire ( N )
= O ( 7 + 4log2 (n) )
Pour i = 0 à N Pas de i * 2
Alors la complexité de cet algorithme est :
Ecrire ( i )
FinPour O ( log (n) )
Fin
Pour i = 1 à N Pas de 2
………
FinPour
Pour i = 1 à N Pas de i *2
………
FinPour
Pour i = N à -1 Pas de i /2
………
FinPour
Pour i = 1 à N Pas de 2
……… O(n/2) O(n )
FinPour
Pour i = 1 à N Pas de i *2
……… O ( log (n) )
FinPour
Pour i = N à -1 Pas de i /2
……… Boucle infinie
FinPour
Pour i = 1 à N Pas de 2
……… O(n )
FinPour
Pour i = 1 à N Pas de i *2
……… O ( log (n) )
FinPour
Pour i = N à -1 Pas de i /2
……… Boucle infinie
FinPour
Pour i = 1 à N Pas de 2
……… O(n )
FinPour
Pour i = 1 à N Pas de i *2
……… O ( log (n) )
FinPour
Pour i = N à -1 Pas de i /2
……… Boucle infinie
FinPour
…….
Début
Ecrire ( " Saisir un nombre " )
Lire ( N )
Pour i = 1 à N Pas de 1
Pour j = 1 à N Pas de i * 4
Ecrire ( i )
FinPour
Fin
…….
Début
Ecrire ( " Saisir un nombre " )
Lire ( N )
Pour i = 1 à N Pas de 1
Pour j = 1 à N Pas de i * 4
Alors la complexité de cet algorithme est :
Ecrire ( i ) O ( n log (n) )
FinPour
Fin
Début
Si N <= 0 Alors
Retourne 1
Sinon
Retourne Fn ( N - 1) + Fn ( N - 2)
Fin Si
Fin
Sinon
Retourne Fn ( N - 1) + Fn ( N - 2)
Fin Si
Fin
DÉPARTEMENT INFORMATIQUE
Les structures permettent d’organiser les données compliquées. Les variables liées
sont groupés en seule entité au lieu des entités séparées.
Exemple-2, un point est une paire de coordonnées, un rectangle est une paire de points, ...etc.
Exemple: Un point d’un plan 2-D est caractérisé par ses coordonnées X et Y.
Supposant que les coordonnées sont des entiers, la structure décrivant
un point est déclarée en langage algorithmique par:
Exemple: Un point d’un plan 2-D est caractérisé par ses coordonnées X et Y.
Supposant que les coordonnées sont des entiers, la structure décrivant
un point est déclarée en langage algorithmique par:
Struct Point
Début
X : Entier
Y : Entier
Fin
o Le mot-clé struct peut être suivi d’un nom qu’on souhaite attribuer à la structure.
Dans ce cas, “ Struct Point ”. Ce nom sera utilisé par la suite pour se référer à la
structure (déclaration des variables de ce type).
Exemple:
Fin
Fin
Exemple:
/* un pointeur de la structure */
variable P2 : ^Struct Point
Struct Point
Début
X : Entier
Y : Entier
Fin
Exemple: dans Pt1 = { 7 , 2 };
Variables: X reçoit 7 et Y reçoit 2.
Pt1 , Pt2 : Struct Point
Début
Pt1 ← { 7 , 2 }
Pt2 ← { 4 , 3 }
Fin
Variable structure
Variable pointeur
Variable pointeur: On peut aussi accéder aux champs d’une variable structure en
utilisant un pointeur approprié (du même type).
•Une fois la variable est pointée, on peut y accéder via ce pointeur en utilsant
le nom du pointeur, suivi d’une flèche “”, suivi du champ en question.
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 15
Initialisation, accès aux membres
Variable pointeur: On peut aussi accéder aux champs d’une variable structure en
utilisant un pointeur approprié (du même type).
•Une fois la variable est pointée, on peut y accéder via ce pointeur en utilsant
le nom du pointeur, suivi d’une flèche “”, suivi du champ en question.
Algorithme: Initialisation_Points Algorithme: Initialisation_Points
Début Début
Pt1.X ← 7
Pt1.Y ← 2
Fin Fin
Début Début
Pt1.X ← 7 Pt1X ← 7
Pt1.Y ← 2
Fin Fin
Début Début
Pt1.X ← 7 Pt1X ← 7
Pt1.Y ← 2 Pt1 Y ← 2
Fin Fin
Struct Couleur
Début
R : Entier
G : Entier
B : ^Entier
Fin
Variables
Col1: Struct Couleur
Col2: ^Struct Couleur
Struct Couleur
Début
R : Entier
G : Entier
B : ^Entier
Fin
Variables
Col1: Struct Couleur
Col2: ^Struct Couleur
Struct Couleur
Début
R : Entier
G : Entier
B : ^Entier
Fin
Variables
Col1: Struct Couleur
Col2: ^Struct Couleur
Pour accéder aux champs d’une structure imbriquée, on est obligé d’utiliser deux
indexations.
Exemple
un rectangle peut être représenté par deux points (coins opposés diagonalement).
Struct Point
Début
X : Entier
Y : Entier
Fin
Struct Rectangle
Début
Pt1 : Struct Point
Pt2 : Struct Point
Fin
9 7
3 4
/* Rectangle Rect1*/ 9 7
Rect1.Pt1.X ← 3
Rect1.Pt1.Y ← 4
Rect1.Pt2.X ← 9
Rect1.Pt2.Y ← 7
3 4
9 7
3 4
/* Rectangle Rect2*/ 9 7
Rect2Pt1.X ← 3
Rect2Pt1.Y ← 4
Rect2Pt2.X ← 9
Rect2Pt2.Y ← 7
3 4
Une structure peut être utilisée comme argument ou résultat d’une fonction.
Début
Fin
Procedure Affichage_Point ( P: Struct Point)
Variables pt : Struct Point
Début .....
Début
Ecrire (" (" , P.X " , " P.Y , " ) " )
Affichage_Point ( pt )
Fin
Fin
Début
Fin
Procedure Affichage_Point ( P: Struct Point)
Début
Fin
Procedure Affichage_Point ( P: ^Struct Point) Variables pt : ^Struct Point
.....
Début Début
Ecrire (" (" , PX " , " PY , " ) " ) Affichage_Point ( pt^ )
Fin
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 34
Structures & fonctions
Exercice: Écrire un algorithme qui permet de :
- Définir un tableau permettant de stocker 10 points.
- Écrire une fonction qui renvoie la distance du point par rapport à l'origine.
Struct Point
Début
X : Entier
Y : Entier
Fin
Variables:
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 36
Structures & fonctions
Fonction Distance_Origine ( X: Entier , Y: Entier) : Réel
Début
Retourne sqrt ( X * X + Y * Y )
Fin
y2 + x2
Fonction Distance_Origine ( P: Struct Point) :
Réel
Début 0 0
Retourne sqrt ( P.X * P.X + P.Y * P.Y )
Fin
Fonction Distance_Origine ( P: ^Struct Point) :
Réel
Début
Retourne sqrt ( PX * PX + PY * PY )
Fin
Fin
Pr. Redouan Lahmyed ALGORITHMIQUE 2 38
Organisation des champs
• Les champs sont organisés dans l'ordre de leurs déclarations dans la structure.
Struct Ma_Str
Début
A : Entier
B : Caractère
C : Réel
Fin
Variables:
Var1 : Struct Ma_Str
Sortie
Début
Ecrire ( & Var1.A) 0xbfc98bb4
Ecrire ( & Var1.B)
0xbfc98bb8
Ecrire ( & Var1.C)
Ecrire ( & Var1)
0xbfc98bbc
Fin 0xbfc98bb4
Pr. Redouan Lahmyed ALGORITHMIQUE 2 39
Organisation des champs (Alignement des champs)
La taille de la structure dépend du Nombre, le type et l’ordre de ses champs.
Exemple
Exemple
Struct Ma_Str1
Début
a : Caractère
b : Entier
c : Caractère
d : Caractère
Fin
Exemple
Struct Ma_Str2
Début
a : Entier
b : Caractère
c : Caractère
d : Caractère
Fin
Exemple
Exemple
Exemple
Fichier texte
Exemple
Fichier binaire
Ouvrir un fichier
Fermer un fichier
Ouvrir un fichier
Syntaxe :
Ouvrir un fichier
Syntaxe :
Ouvrir un fichier
Syntaxe :
Num_Canal: C'est le nom logique du fichier. Pour ouvrir un fichier, il faut lui allouer un
numéro du canal valide et disponible.
Ouvrir un fichier
Syntaxe :
Fermer un fichier
Une fois qu'on a terminé avec un fichier, il ne faut pas oublier de le fermer.
On libère ainsi le canal qu'il occupait
Syntaxe :
Fermer ( Nom_du_Fichier )
Ou bien
Fermer ( Nom_du_Canal )
……..
Ou bien
Nom_Variable ← Donnée
…… ……
Ouvrir " [Link] " en 1 en Écriture Ouvrir " [Link] " en 1 en Écriture
EcrireFichier 1 , “ 5” X←5
Fermer (1 ) EcrireFichier 1 , X
Fermer (1 )
/* Fichier [Link]*/
Variables: Ouvrir " [Link] " en 1 en Écriture
Tableau Tab_Pt [ 10 ] : Struct Point
i : Entier Pour i = 0 à 9 Pas de 1
EcrireFichier 1 , Tab_Pt [ i ]
FinPour
Fermer ( 1 )
Fin
Exemple 1:
Exemple 1:
……
Ouvrir " [Link] " en 1 en Lecture
LireFichier 1 , A
Fermer (1 )
Exemple 2:
Exemple 2:
……
Ouvrir " [Link] " en 1 en Lecture
Tantque Non EOF(1)
LireFichier 1 , Tab_Point [ i ]
Fin Tantque
Fermer (1 )
Pr. Redouan Lahmyed ALGORITHMIQUE 2 67
ALGORITHMIQUE – 2: STRUCTURES - FICHIERS
SMI-3
DÉPARTEMENT INFORMATIQUE