Vous êtes sur la page 1sur 102

Algorithmique

introduction générale et terminologie

Prof. A.SABOUR
Syllabus du cours ...
Objectif : L’acquisition des notions fondamentales de l’algorithmique.

 Apprendre les principes de l'algorithmique ;

 Se familiariser avec les méthodes de résolution de problèmes avec l'outil


informatique ;
 résoudre des problèmes «comme» une machine

 savoir expliciter son raisonnement

 savoir formaliser son raisonnement

 concevoir (et écrire) des algorithmes :

 Apprendre comment Spécifier, Concevoir, Coder, Mettre au point et


Documenter des programmes performants, en utilisant un langage de haut
niveau.
2
Introduction à l'algorithmique

Une autre définition

 Un algorithme est un moyen pour un humain de

présenter la résolution par calcul d'un problème


à une autre personne physique (un autre humain)
ou virtuelle (un calculateur).

 En effet, un algorithme est un énoncé dans un

langage bien défini d'une suite d'opérations


permettant de résoudre par calcul un problème.
3
Qu'est ce qu'un algorithme ?
Définition informelle

 Un algorithme est une procédure de calcul bien définie qui


prend en entrée une valeur, ou un ensemble de valeurs, et qui
donne en sortie une valeur, ou un ensemble de valeurs.
 Un algorithme est donc une séquence d’étapes de calcul qui
transforment l'entrée en sortie.
 Un algorithme est un moyen pour un humain de présenter la
résolution par calcul d'un problème à une autre personne
physique (un autre humain) ou virtuelle (un calculateur).
 En effet, un algorithme est un énoncé dans un langage bien
défini d'une suite d'opérations permettant de résoudre par
calcul un problème.

4
Définition

 Algorithmique:

 Définition 1: désigne l'ensemble des règles et des


techniques qui sont impliquées dans la définition et la
conception des algorithmes.

 Définition 2: l'algorithmique c'est de savoir comment lire,


écrire, évaluer et optimiser des algorithmes.

5
Définition
 Définition : Un algorithme est un ensemble d'opérations de calcul

élémentaires, organisé selon des règles précises dans le but de


résoudre un problème donné. Pour chaque donnée du problème,
l'algorithme retourne une réponse après un nombre fini d'opérations
(+, -,/,<,>,... ).
 Un algorithme est une procédure systématique permettant de

résoudre une classe de problèmes. À partir d'une entrée


(représentant une instance du problème), un algorithme suit un
ensemble déterminé de règles et, en un nombre fini d'étapes,
produit une sortie (représentant une réponse à l'instance donnée).
 L'algorithmique est donc l'étude des algorithmes, de leur conception

et de leurs propriétés.
6
Définition
 Qu’est-ce qu’un programme?
 Un programme est donc une suite d'instructions
exécutées par la machine. La machine a son propre langage
appelé langage machine.
 Un programme est l’expression d’un algorithme par une
machine donnée dans un langage de programmation donné
en utilisant le répertoire d’actions(opérations, instructions)
et les règles de composition propres à cette machine et à ce
langage donnés.
 Un programme est un assemblage et un enchaînement
d’instructions élémentaires écrit dans un langage de
programmation, et exécuté par un ordinateur afin de
traiter les données d’un problème et renvoyer un ou
plusieurs résultats.
7
Introduction a l'algorithmique
Pour être bon en algorithmique ...

Faut-il être matheux pour être bon en algorithmique?


Non, pas du tout !
La maîtrise de l'algorithmique requiert trois qualités :

1. Il faut être méthodique.

Avant d‘écrire les instructions d'un


algorithme, il faut analyser le problème à
résoudre. Il faut ensuite définir les entrées
et les sorties de l'algorithme.

8
Introduction a l'algorithmique
Pour être bon en algorithmique ...

Faut-il être matheux pour être bon en algorithmique?


Non, pas du tout !
La maîtrise de l'algorithmique requiert trois qualités :
1. Il faut être méthodique.
2. Il faut avoir de l'intuition.

Aucune recette ne permet de savoir à priori


quelles instructions permettront d'obtenir le
résultat voulu.
Les réflexes du raisonnement
algorithmique deviennent spontanés avec
l'expérience.

9
Introduction a l'algorithmique
Pour être bon en algorithmique ...

Faut-il être matheux pour être bon en algorithmique?


Non, pas du tout !
La maîtrise de l'algorithmique requiert trois qualités :
1. Il faut être méthodique.
2. Il faut avoir de l'intuition.
3. Il faut être rigoureux.

Chaque fois qu'on écrit une série


d'instructions, il faut systématiquement se
mettre mentalement à la place de la
machine qui va les exécuter. Si nécessaire, il
faut avoir recours à une simulation sur
papier.
10
Méthodologie
 Pour résoudre un problème, il est vivement conseillé de
réfléchir d'abord à l'algorithme avant de programmer.

 La résolution d’un problème est caractérisé par 4


étapes:
 Comprendre la nature du problème posé
 Préciser les données fournies (Entrées)
 Préciser les résultats que l’on désire obtenir (Sorties)
 Déterminer le processus de transformation des données
en résultats.
11
Méthodologie
 Comment on programme?
On utilise un pseudo-langage, comportant toutes les structures de base d'un langage
de programmation

On traduit notre "pseudo" en langage évolué en fonction des possibilités


de ce langage

Ce langage sera ensuite traduit en langage machine

Niveaux de développement
1. Analyse : niveau conceptuel ;
2. Algorithmique : niveau logique ;
3. Programmation : niveau physique.
12
L'algorithmique et la programmation ...

Quelle est la différence entre l'algorithmique et la


programmation ?
Réponse
 L’écriture d'un programme dans un langage de programmation
n'est que l‘étape finale d'un développement qui se déroule en
trois phases : l'analyse, l'algorithmique et la
programmation.
En d'autre terme :
 Un algorithme est un maillon de la chaîne de
développement d'un programme. Il est le lien indispensable
entre l'analyse et la programmation.

13
Environnement algorithmique
Niveau logique du développement

 Apprendre l'algorithmique, c'est apprendre à manier la

structure logique d'un programme informatique.

 L'algorithmique exprime les instructions résolvant un


problème donné indépendamment des particularités de tel
ou tel langage.

 Lorsqu'on programme dans un langage (en C, en Visual Basic,

etc.) on doit, en plus de la structure logique, prendre en


considération les problèmes de syntaxe et les types
d'instructions propres a ce langage.

14
Environnement algorithmique
Représentation d'un algorithme

Historiquement, plusieurs types de notations ont été utilises pour


représenter des algorithmes :
 Descriptions littéraires
 Organigrammes
 Pseudo-codes
Définition informelle
 Un pseudo-code est une série de conventions qui ressemble à
un langage de programmation authentique dont on aurait
évacue la plupart des problèmes de syntaxe.
Important
 Un pseudo-code est susceptible de varier d'une référence à une
autre. En effet, un pseudo-code est purement conventionnel.
Aucune machine n'est censée le reconnaître.

15
pseudo-code
 les algorithmes sont rédigés dans un langage à mi-
chemin entre le français et les langages de
programmation, dit pseudo-code .
 plus pratique pour écrire un algorithme
 représentation largement utilisée
Exemple
 problème du tri
 Entrée: une séquence de n nombres
(a1, : : : ,an)
 Sortie: une permutation (a1’; : : :
;an’) de la séquence d’entrée:
a1’<a2’<….<an’

 Exemple : (31;41;59;26;41;58) 
(26;31;41;41;58;59)

16
Les instructions fondamentales

Les ordinateurs ne comprennent que quatre catégories


d'instructions :
1. l'affectation de variables ;
2. la lecture/écriture ;
3. les tests (les structures conditionnelles) ;
4. les boucles (les structures itératives).
Important
 Un algorithme informatique se ramène toujours à la
combinaison de ces quatre types d'instruction. Il peut y
en avoir quelques unes, quelques dizaines, et jusqu‘à
plusieurs centaines de milliers.

17
Caractéristiques d'un algorithme
 Un algorithme est l'énoncé dans un langage bien défini
d'une suite d'opérations permettant de répondre au
problème. Un algorithme doit donc être :
 lisible: l'algorithme doit être compréhensible même par
un non-informaticien
 de haut niveau: l'algorithme doit pouvoir être traduit en
n'importe quel langage de programmation, il ne doit donc
pas faire appel à des notions techniques relatives à un
programme particulier ou bien à un système d'exploitation
donné
 précis: chaque élément de l'algorithme ne doit pas porter à
confusion, il est donc important de lever toute ambiguïté
 concis: un algorithme ne doit pas dépasser une page. Si
c'est le cas, il faut décomposer le problème en plusieurs
sous-problèmes
 structuré: un algorithme doit être composé de différentes
parties facilement identifiables
18
II- Les instructions
de base
pour commencer :
un exemple
- ensuite :
• les variables
• saisir et afficher des données
• simuler un algorithme
• faire des tests
• répéter des traitements
- pour terminer : les principales erreurs a éviter
Un premier algorithme
Algorithme EleveAuCarre
{Cet algorithme calcule le carré du nombre que lui fournit l'utilisateur}
variables unNombre, sonCarre: entiers
début
{saisie d’un nombre}
afficher("Quel nombre voulez-vous elever au carre?")
saisir(unNombre)
{calcul du carré du nombre saisi}
sonCarre ← unNombre Χ unNombre
{affichage du résultat}
afficher("Le carre de ", unNombre)
afficher("c'est ", sonCarre)
fin
20
Un premier algorithme
Algorithme EleveAuCarre
{Cet algorithme calcule le carré du nombre que lui fournit l'utilisateur}
variables unNombre, sonCarre: entiers
début
{saisie d’un nombre}
afficher("Quel nombre voulez-vous elever au carre?")
saisir(unNombre)
{calcul du carré du nombre saisi}
sonCarre ← unNombre Χ unNombre
{affichage du résultat}
afficher("Le carre de ", unNombre)
afficher("c'est ", sonCarre)
fin

21
Un premier algorithme
Algorithme EleveAuCarre
variables unNombre, sonCarre: entiers Bloc de Déclaration

début
afficher("Quel nombre voulez-vous elever au carre?")
saisir(unNombre) Bloc de
Traitement
sonCarre ← unNombre Χ unNombre Ou
afficher("Le carre de ", unNombre) Bloc
actions
afficher("c'est ", sonCarre)
fin

22
Syntaxe général de l’algorithme
 Exemple :
Algorithme toto
{les constantes: il est obligatoire de leur donner une valeur dès leur
déclaration }
CONST ANTS (titi : entier) 10
(tutu: chaîne)  "bonjour!"
{ les variables au sens strict} déclarations
VAR IABLES riri, fifi : réels
loulou : chaîne
Debut
<Instruction1>;
<Instruction2>;
…. Corps de l’algorithme
<Instruction3>;
Fin
23
Syntaxe général de l’algorithme(suite)
 Le moule d’un algorithme
 Dans la partie déclarations, nous trouvons :

 Déclaration de constantes
 déclaration de variables
 déclaration de fonctions

 Dans la partie actions, nous trouvons :

 suite d'instructions
 Structure alternative
 Structure répétitive

24
Un premier algorithme
Bloc de Déclaration
Serve à Déclarer les variables et les constantes d’un algorithme donné

Syntaxe : variables <liste d’identificateurs> : typeA


<liste d’identificateurs> : typeB

constantes (Const1 : typei) ← Val1
(Const2 : typej) ← Val2

Avec : <liste d’identificateurs> : iden_1 , iden_2 , … , iden_n


et type : {entier, réel, chaîne, caractère, …}

exemple :
constantes (TVA : réel) ← 19,6
(TITRE : chaîne) ← "Resultat "

Variables prixHT, prixTTC : réel


25
Les variables

 Une variable est un objet dont la valeur peut changer

 Une variable peut être représentée par une case

mémoire, qui contient la valeur d'une donnée.


 Chaque variable possède un nom unique appelé

identificateur par lequel on peut accéder à son contenu.


 Par exemple, on peut avoir en mémoire une variable prix

et une variable quantité.

26
Les variables(suite)

 Une variable possède 3 attributs :


 Une valeur
 Un nom (invariable) qui sert à la désigner
 Un type (invariable) qui décrit l’utilisation possible de la
variable
 Une valeur
 la valeur d'une variable (contenu) peut varier au cours
du programme. L'ancienne valeur est tout simplement
écrasée et remplacée par la nouvelle.

27
Les variables(suite)
 Nom de la variable
 C’est une suite de lettres et de chiffres
commençant nécessairement par une lettre
 Le nombre maximal de caractères imposé varie
selon les langages
 La lisibilité des programmes dépend de l’habilité à
choisir des noms représentatifs
 Le nom de la variable doit être le plus
représentatif possible du contenu de celle-ci pour
faciliter la lecture de l'algorithme. En revanche, il
ne doit pas non plus être trop long pour ne pas
nuire à la lisibilité de l'ensemble.

28
Les variables(suite)
 Nom de la variable
 Exemple
 Je veux mémoriser l'âge d'une personne dans une variable, j'ai le
choix de l'appeler :
 a
 âge
 age
 ageDeLaPersonneDontJeSuisEntrainDeParler

 Remarque :
 Le premier cas est trop court, si je n'ai pas lu la description
plus haut, je suis totalement perdu. Le deuxième cas ne
convient pas non plus car on évitera tout caractère accentué
dans les noms de variable. Le dernier cas est certes très précis,
mais tellement long qu'il en devient illisible. Bref, le troisième
cas semble le plus approprié

29
Les variables(suite)
 Type de la variable

 Le type de la variable définit :


 La nature des informations qui seront représentées dans la
variable
 Les limitations concernant les valeurs à représenter
 Les opérations réalisables avec les variables correspondantes.

 Propriété :

Une variable doit être déclaré avant son utilisation

30
Les variables(suite)

 Type de la variable

 Entier : il s'agit des variables destinées à contenir un

nombre entier positif ou négatif.


 Réel : il s'agit des variables numériques qui ne sont pas

des entiers, c'est à dire qui comportent des décimales


 Caractère : Les variables de type caractère contiennent

des caractères alphabétiques ou numériques seul(ex: ‘c’)


 Booléen : Les variables qui prennent les valeurs (vrai ou

faux) ou les valeurs (oui ou non).

31
Les variables(suite)
 Type de la variable
 Chaîne de caractères : représentant un texte,
contenant un ou plusieurs caractères(ex: ’’Bonjour
tout le monde’’)
 Tous les traducteurs de langages prennent en compte
cette notion de type par des instructions de
déclaration de type
 Exemple:
Variable Moyenne : réel; {Moyenne en numérique}
Variable NbreEtudiant : entier; {NbreEtudiant en
numérique}
Variable c1, lettre, z : caractère;

32
Les variables(suite)
 Les opérateurs de l’algorithmique

Type Exemple Opération possibles symbole

Réel -15.69, 0.49 Addition +


Soustraction -
Multiplication *
Division /
Exposant ^
comparaisons <,<=,>,>=,=,…

Entier -10, 4, 768 Addition +


Soustraction -
Multiplication *
Division DIV
Modulo MOD
Exposant ^

33
Les variables(suite)
 Les opérateurs de l’algorithmique

Type Exemple Opération possibles symbole

caractère ‘B’, ‘\n’ comparaisons <,<=,>,>=,=,…

Booléen Vrai, Faux Comparaison <,<=,>,>=,=,…


Négation NON
Conjonction ET
disjonction OU

34
Un premier algorithme
Bloc de Déclaration

exemple : constantes (MAX : entier) ← 100

Instruction permettant de réserver de l’espace mémoire pour y stocker des


données dont la valeur est fixée pour tout l’algorithme. Ainsi on aura
allocation d’un espace mémoire à la constante MAX, un espace de la taille
d’un entier et affectation de la valeur 100.

Signification :
←: opération d’affectation
constantes (const) : mot clé réserver pour déclarer un sous bloc de
constante
variables (var): mot clé réserver pour déclarer un sous bloc de
variable

35
Un premier algorithme
Bloc de Traitement
Suite d’instruction manipulant les données de l’algorithmes et résolvante la
problématique
Syntaxe :

début Un programme est donc une suite d'instructions


exécutées par la machine.
instruction 1 Ces instructions peuvent:
instruction 2  soit s'enchaîner les unes après les autres, on parle

alors de séquence d'instructions;
 ou bien s'exécuter dans certains cas et pas dans
insriction n d'autres, on parle alors de structure alternative;
fin  ou se répéter plusieurs fois, on parle alors de
structure répétitive.

36
La séquence d’instructions

 Une instruction est une action que l'ordinateur est


capable d'exécuter.
 Une séquence d'instruction serait :
 Se lever
 Prendre sa douche
 Prendre le petit déjeuner
 S'habiller

37
Structures Alternatives

 Une alternative s'exprime par si … Sinon…


 Si fin de semaine ou congé
 Mettre sa tenue de sport
 Faire son jogging
 Sinon
 Mettre sa tenue de travail
 Aller travailler
 Fin Si

38
Structures répétitive
 La routine journalière d’un employé est :
 Ouvrir guichet
 Appeler premier client
 TantQue " client dans file d'attente " et " pas fin
de journée "
 Traiter client
 Appeler client suivant
 FinTantQue
 Les deux actions "Traiter client" et "Appeler client
suivant" vont se répéter tant que la condition
située derrière l'instruction "Tant que" est vérifiée.

39
Un premier algorithme
Bloc de Traitement
Instruction d’affectation
Syntaxe :

<identificateur> ← <expression> ou <constante> ou <identificateur>


Fonction :

L’instruction d’affectation permet de manipuler les valeurs des


variables. Son rôle consiste à placer une valeur dans une
variable.

Autre Notation : X=Y ou bien X:=Y ou bien XY

Exemples :

nom ← " Ali ben 9adour"


val ←50
val ←val * 2
dada ←val
40
Instruction d’affectation

 Exemple :
1. affecter une valeur à une variable

 X ← 5, On charge la variable X avec la valeur 5

2. Affecter le contenu d’une variable à une autre variable

 X ← Y , On charge X avec le contenu de Y

 Y représente :
 Constante ou Nom d’une variable ou Expression logique

 X et Y doivent être de même type

41
Les instructions(suite)
 Les instructions d’Entrée/Sortie
 Un programme est amené à :
 Prendre des données par le périphérique(clavier) : rôle de
l’instruction de lecture
 Communiquer des résultats par l’intermédiaire du
périphérique(écran) : rôle de l’instruction de l’écriture
 Instruction de lecture
 Rôle : fournir des données au programme
 Syntaxe : saisir(variable)
 Exemple : saisir( X) on saisie une valeur pour la stocker après dans
la variable X
 Instruction d’écriture
 Rôle : fournir des résultats directement compréhensibles
 Syntaxe : afficher( variable), afficher(’’chaine de caractères’’)
 Exemple : afficher(X), afficher(’’Bonjour’’)
42
Un premier algorithme
Bloc de Traitement
Instruction de Saisir une donnée
Syntaxe :
saisir(<liste de noms de variables>)
<liste de noms de variables>:= variable, <liste de noms de variables>

Fonction :

Instruction permettant de placer en mémoire les informations fournies


par l'utilisateur.

Exemples
:
saisir(unNombre)
saisir(nom, prenom)
saisir(val)

43
Un premier algorithme
Bloc de Traitement
Instruction d’affichage
Syntaxe :

afficher(<liste de noms de variables, de constantes ou d ’expressions>)

Fonction :
Instruction permettant de transmettre des informations a l’utilisateur
et/ou de visualiser les informations placées en mémoire.

Exemples :

afficher("Veuillez saisir un nombre : ")


afficher(unNombre, "est different de 0")
afficher("La somme de", unNombre, "et" , val , "est", unNombre + val)

44
1 Algorithme ParExemple
2 {Saisit un prix HT et affiche le prix TTC correspondant}
3 constantes (TVA : réel) ←19,6
4 (TITRE : chaîne) ←"Resultat"
5 variables prixHT, prixTTC : réels
6 début
7 {préparation du traitement}
8 afficher("Donnez-moi le prix hors taxe :")
9 saisir(prixHT)
10 {calcul du prix TTC}
11 prixTTC ← prixHT * (1+TVA/100)
12 {présentation du résultat}
13 afficher(TITRE )
14 afficher(prixHT, " € H.T. devient ", prixTTC, " € T.T.C.")
15 fin

45
1 constante (SEUIL : entier) ←13
2 variables valA, valB, compteur :
3 entiers
4 mot , tom : chaînes
5 début
Variables
6 valA←5
7 valB←valA valA valB Compteur mot Tom
8 valA←valA X (10 + SEUIL) i 5
9 compteur ← 1 n 6
10 compteur ←compteur + 10 s 7
11 mot ← " Bonjour " t 8
12 tom ← " Au revoir ! " r 9
13 afficher(mot) u 10
14 afficher("valA ", valA) c 11
15 afficher("valB ", valB) t 12
16 afficher("compteur ", compteur ) i 13
17 afficher(tom) o 14
fin n 15
16

Tableau de simulation
46
Quelques erreurs a éviter

 Saisie de données : saisir(uneVal)


 erreur si variables non déclarées au préalable
 prévenir l'utilisateur de ce qu’on lui demande
 Affichage des données : afficher(unMot)
 erreur si variables non déclarées, ou non initialisées
 Affectations :
 attention aux types :
uneVal ← "ok" Faux
 Constantes :
 attention aux types : Faux
(MAX : entier) ← "ok"

 non modifiable :
saisir(MAX)
Faux

47
Quelques erreurs a éviter
1 Algorithme CaFaitQuoi?
2 {Cet algorithme .......................................................................................}
3 variables valA, valB : réels
4 début
5 {saisie de deux valeurs }
6 afficher("Donnez-moi deux valeurs :")
7 saisir (valA, valB)
8 afficher("Vous m'avez donne ", valA, " et ", valB)
9 {traitement : ??? }
10 valA←valB
11 valB←valA
12 {présentation du résultat}
13 afficher("Maintenant , mes donnees sont : ", valA, " et ", valB)
14 fin

Utiliser le tableau de simulation pour expliquer ce que fait cet algorithme

48
Ce qu’il fallait faire
 Déclarer une variable supplémentaire
variables valA, valB, valTemp : entiers

 Utiliser cette variable pour stocker provisoirement


une des valeurs :
saisir(valA, valB)
valTemp←valA
valA←valB
valB←valTemp

49
Exercices : Instructions

 Exercice 1:
Écrire un algorithme qui permet de calculer et afficher la
surface d’un cercle?
 Exercice 2:
Écrire un algorithme qui permet de calculer et afficher le
salaire brut d’un ouvrier connaissant le nombre d’heure
et le tarif d’horaire?
 Exercice 3 :
Écrire un algorithme qui fait la conversion d’une somme
d’argent donnée en DH, en une somme d’argent en Euro?

50
Traitement a faire si …

1 Algorithme SimpleOuDouble
2 {Cet algorithme saisit une valeur entière et affiche son double si cette donnée
3 est inférieure à un seuil donné}
4 constante (SEUIL : entier) ←10
5 variable val : entier
6 début
7 afficher("Donnez-moi un entier : "); { saisie de la valeur entière}
8 saisir(val)
9 si val < SEUIL; { comparaison avec le seuil}
10 alors afficher ("Voici son double :" , val X2)
11 sinon afficher ("Voici la valeur inchangee :" , val)
12 fsi
13 fin

51
L’instruction conditionnelle
Syntaxe : si <expression logique> alors
<bloc instruction 1>

[sinon <bloc instruction 2> ]


fsi
Fonction :

Si l’expression logique (la condition) prend la valeur vrai,


le premier bloc d’instructions est exécuté; si elle prend
la valeur faux, le second bloc est exécuté (s’il est
présent).
Remarque :

[ ] signifier que c’est facultatif et que son utilisation dépend des besoins du
programmeur
52
les conditionnelles emboîtées
Problème :
Afficher "Reçu avec mention" si une note est supérieure ou égale à 12,
"Passable" si elle est supérieure à 10 et inferieure a 12, et "Insuffisant" dans
tous les autres cas.

Solution :

1 si note >= 12 alors


2 afficher( "Recu avec mention" )
3 sinon si note >= 10 alors
4 afficher( "Passable" )
5 sinon
6 afficher( "Insuffisant" )
7 fsi
8 fsi

53
Conditionnelles séquentielles
Solution 1: Solution 2:

1 si note >= 12 alors 1 si note >= 12 alors


2 afficher( "Recu avec mention" ) 2 afficher( "Recu avec mention" )
3 sinon si note >= 10 alors 3 fsi
4 afficher( "Passable" ) 4 si note >= 10 et note < 12 alors
5 sinon 5 afficher( "Passable" )
6 afficher( "Insuffisant" ) 6 fsi
7 fsi 7 si note < 10 alors
8 fsi 8 afficher( "Insuffisant" )
9 fsi

54
exemple
Après la séquence suivante, donner la valeur de la
variable y est telle que :
(a) x = -1
(b) x=0
(c) x = -7
(d) x = -2
si x < -4 alors y←0
sinon si x < -3 alors y ← 4 - x
sinon si x < -1 alors y ← x*x + 6*x + 8
sinon si x < 3 alors y ← 2 - x
sinon y = -2
fsi

fsi

55
Les structures de contrôles(suite)
 Qu’est ce qu’une condition ?

 une condition est composée de trois éléments :


 une valeur, un opérateur de comparaison, une autre valeur
 Les valeurs peuvent être a priori de n’importe quel
type (numériques, caractères…). Mais si l’on veut que
la comparaison ait un sens, il faut que les deux valeurs
de la comparaison soient du même type !
 Les opérateurs de comparaison sont :
 = égal à, <> différent de
 < strictement plus petit que, > strictement plus grand que, <= plus
petit ou égal à, >= plus grand ou égal à…

56
Les structures de contrôles(suite)

 Exemple:
 ‘t’ < ‘w’ VRAI
5>6 FAUX
2< 3 VRAI
 Exercice:
 Écrire un algorithme qui demande un nombre à
l’utilisateur, et l’informe ensuite si ce nombre est positif
ou négatif (on laisse de côté le cas où le nombre vaut
zéro).

57
Les structures de contrôles(suite)
 Conditions composées:
 Certains problèmes exigent parfois de formuler des
conditions composées liées entre eux par les
opérateurs logiques suivants : ET, OU, NON, et XOR.
 Condition1 ET Condition2 : VRAI, si Condition1 est VRAI et
Condition2 est VRAI.
 Condition1 OU Condition2 : VRAI, si Condition1 est VRAI ou bien
Condition2 est VRAI.
 Le XOR (ou OU exclusif)
 Condition1 XOR Condition2 : VRAI, si Condition1 est VRAI, ou
bien Condition2 est VRAI.
 Mais si toutes les deux sont fausses, ou que toutes les deux sont
VRAI, alors le résultat global est considéré comme FAUX.

58
Les structures de contrôles(suite)
 le NON inverse une condition : NON(Condition1) est
VRAI si Condition1 est FAUX, et il sera FAUX si
Condition1 est VRAI.
 tables de vérité (C1 et C2 représentent deux conditions,
et on envisage à chaque fois les quatre cas possibles) :

C1 et C2 C2 Vrai C2 Faux
C1 Vrai Vrai Faux
C1 Faux Faux Faux

C1 ou C2 C2 Vrai C2 Faux
C1 Vrai Vrai Vrai
C1 Faux Vrai Faux

59
Les structures de contrôles(suite)
C1 xor C2 C2 Vrai C2 Faux
C1 Vrai Faux Vrai
C1 Faux Vrai Faux

Non C1
C1 Vrai Faux
C1 Faux Vrai
 Exercices:
 Écrire un algorithme qui demande deux nombres à l’utilisateur
et l’informe ensuite si leur produit est négatif ou positif (on
laisse de côté le cas où le produit est nul). Attention toutefois :
on ne doit pas calculer le produit des deux nombres.
 Écrire un algorithme qui affiche le salaire brut d’un ouvrier
sachant que les heures supplémentaires de 172 heures sont
payées à 50% de tarifs d’horaire en plus?
60
Exercices
 Exercice 1:
Calculer le montant de la facture d’un client ayant commandé une quantité
d’un produit avec un prix unitaire hors taxe
 Le taux de T.V.A est : 20%
 Les frais de transport sont 0.8 DH de Km , Le client est disposé du frais de
transport si le montant est supérieur 4500 DH
 Exercice 2:
Écrire un algorithme qui calcule et affiche le maximum de trois nombre A,B et
C?
 Exercice 3:
Écrire un algorithme qui permet de résoudre l’équation du premier degré :
aX+b=0?
 Exercice 4:
Écrire un algorithme qui permet de résoudre une équation de second degré :
aX²+bX+c=0 ?
 Exercice 5:
Écrire un algorithme qui lie trois nombre A,B et C , puis il détermine si l’un est
égal à la somme de 2 autres sinon il affiche un message « pas de solution »?

61
La sélection sur choix multiples
1 si abreviation = "M"
2 alors afficher( "Monsieur" )
3 sinon si abreviation = "Mme"
4 alors afficher("Madame")
5 sinon si abreviation = "Mlle"
6 alors afficher( "Mademoiselle" )
7 sinon afficher( "Monsieur,Madame " )
8 fsi
9 fsi
10 fsi

1 selon abreviation
2 "M" : afficher( "Monsieur" )
3 "Mme" : afficher( "Madame" )
4 "Mlle" : afficher( "Mademoiselle" )
5 autres : afficher( "Monsieur, Madame ")
6 fin selon

62
L’instruction selon
Syntaxe : selon <identificateur>
(liste de) valeur(s) : instructions
(liste de) valeur(s) : instructions

[autres : instructions]
fin selon
Fonction :

S’il y a plus de deux choix possibles, l’instruction selon


permet une facilite d’ecriture.
- Meme efficacite (meme nombre d’operations)
- Mais pas de tests possibles
Remarque :

[ ] signifier que c’est facultatif et que son utilisation dépend des besoins du
programmeur
63
Structure répétitive
 A quoi cela sert-il donc ?
 Prenons le cas d’une saisie au clavier (une lecture), où
par exemple, le programme pose une question à
laquelle l’utilisateur doit répondre par O (Oui) ou N
(Non). Mais tôt ou tard, l’utilisateur, risque de taper
autre chose que la réponse attendue.
 Alors, dans tout l’algorithme on met en place ce qu’on
appelle un contrôle de saisie, afin de vérifier que les
données entrées au clavier correspondent bien à celles
attendues par l’algorithme.

64
Structure répétitive(suite)
 A quoi cela sert-il donc ?
 On pourrait essayer avec une structure de contrôle SI.

Variable Rep : Caractère


Début
afficher(“Voulez vous un café ? (O/N)“)
saisir(Rep)
si Rep <> “O“ ET Rep <> “N” Alors
afficher( “Saisie erronnée. Recommencez“)
saisir(Rep)
fsi
Fin

65
Structure répétitive(suite)
 A quoi cela sert-il donc ?
 Si l’utilisateur ne se trompe qu’une seule fois, et entre une
valeur correcte à la deuxième demande, c’est parfait.
 Par contre, s’il commet une deuxième erreur, il faudrait
rajouter un SI. Et ainsi de suite, on peut rajouter des
centaines de SI, et écrire un algorithme lourd.
 La solution consistant à aligner des SI n’est pas correcte
dans ce cas. La seule issue est d’utiliser une
structure de boucle.

66
Structure répétitive(suite)
 A quoi cela sert-il donc ?
 Qui ce présente ainsi:
TantQue booléen Faire

Instructions

FinTantQue

 Le principe est simple : l’algorithme arrive sur la ligne du


TantQue. Il examine alors la valeur du booléen (qui, je le
rappelle, peut être une variable booléenne ou, plus
fréquemment, une condition). Si cette valeur est VRAI,
l’algorithme exécute les instructions qui suivent, jusqu’à ce qu’il
rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne
du TantQue, procède au même examen, et ainsi de suite. Le
cycle ne s’arrête que lorsque le booléen prend la valeur FAUX.
67
Structure répétitive(suite)
 A quoi cela sert-il donc ?
 Illustration avec notre problème de contrôle de saisie.
Une première approximation de la solution consiste à
écrire :

Variable Rep :Caractère


Début
afficher (“Voulez vous un café ? (O/N)“)
saisir(Rep)
TantQue Rep <> “O“ ET Rep <> “N“ Faire
saisir (Rep)
FinTantQue

Fin

68
Structure répétitive(suite)
 A quoi cela sert-il donc ?
 Une deuxième approximation de la solution, avec
affectation, consiste à écrire :
Variable Rep :Caractère
Début
Rep ← “X“
afficher (“Voulez vous un café ? (O/N)“)
TantQue Rep <> “O“ ET Rep <> “N“ Faire
saisir(Rep)
FinTantQue
Fin

 Cette manière de procéder est à connaître, car elle est


employée très fréquemment.

69
Structure répétitive(suite)
 Structure répétitive, dite aussi itérative ou boucle
permet, de répéter une ou plusieurs actions un
certain nombre de fois. On identifie en règle
générale 3 types de répétitive :
 TantQue
 Répéter Jusqu'à
 Pour

70
Structure répétitive(suite)
 Tant que
 Les répétitives où la condition d’arrêt est placée
au début.
 Syntaxe :
Tant que <expression logique> faire
<séquence d’instructions>
Ftantque
TantQue condition
actions
FinTantQue
 Ce qui signifie : tant que la condition est vraie, on
exécute les actions.

71
Structure répétitive(suite)
 Boucler en comptant, ou compter en bouclant
 Il arrive très souvent qu’on ait besoin d’effectuer un
nombre déterminé de passages. Or, a priori, notre
structure TantQue ne sait pas à l’avance combien de tours
de boucle elle va effectuer:
 C’est pourquoi une autre structure de boucle est à notre
disposition :
 la structure : Pour

72
Structure répétitive(suite)
 Variable Num1 : Entier  Variable Num1 : Entier
Début Début
Num1 ← 0 Pour Num1 = 1 à 15 Faire
TantQue Num1 < 15 Faire afficher( "Passage numéro : ",
Num1 = Num1 + 1 Num1)
afficher(“Passage numéro : “, Num1) Num1 Suivant
FinTantQue Fin Pour
Fin Fin

la structure : Pour est un cas particulier de TantQue :


celui où le programmeur peut dénombrer à l’avance le
nombre de tours de boucles nécessaires.
73
Structure répétitive
 Pour
 Les répétitives où le nombre d’itération est fixée une
fois pour toute.
 Syntaxe :

Pour Compteur = Initial à Final Pas ValeurDuPas



Instructions

Fin Pour

74
Structure répétitive(suite)
 la progression du compteur est laissée à votre libre
disposition. Dans la plupart des cas, on a besoin d’une
variable qui augmente de 1 à chaque tour de boucle. On ne
précise alors rien à l’instruction « Pour » ; celle-ci, par
défaut, comprend qu’il va falloir procéder à cette
incrémentation de 1 à chaque passage, en commençant par
la première valeur et en terminant par la deuxième.
 Si vous souhaitez une progression plus spéciale, de 2 en 2,
ou de 3 en 3, ou en arrière, de –1 en –1, ou de –10 en –10, il
faut préciser à votre instruction « Pour » en lui rajoutant le
mot « Pas » et la valeur de ce pas.
 Quand on met un pas négatif dans une boucle, la valeur
initiale du compteur doit être supérieure à sa valeur finale
si l’on veut que la boucle tourne !
75
Structure répétitive(suite)
 Les structures TantQue sont employées dans les
situations où l’on doit procéder à un traitement sur
les éléments d’un ensemble dont on ne connaît pas
d’avance la quantité, comme par exemple :
 le contrôle d’une saisie.
 la gestion des tours d’un jeu (tant que la partie n’est
pas finie, on recommence).
 Les structures Pour sont employées dans les
situations où l’on doit procéder à un traitement sur
les éléments d’un ensemble dont on connaît
d’avance la quantité.

76
Structure répétitive(suite)
 Des boucles imbriquées:
 De même que qu’une structure SI … ALORS peut
contenir d’autres structures SI … ALORS, une boucle
peut tout à fait contenir d’autres boucles.
Variables Num1, Num2 : Entier
Pour Num1 ← 1 à 15
Afficher (“Il est passé par ici“)
Pour Num2 ← 1 à 6
Afficher (“Il repassera par là“)
Fpour
Fpour

77
Structure répétitive(suite)
 Répéter..Jusqu’à :
 la condition d’arrêt est placée à la fin
 Syntaxe :
Répéter
<séquence d’instructions>
Jusqu’à <expression logique>
Frépéter
 Exemple :
Num1:=1
Répéter
Afficher (“Passage numéro : “, Num1)
Num1 = Num1 + 1
Jusqu’à (Num1 >= 15 )

78
Organigramme
 Définition
 un organigramme est la représentation schématique qui
permet de faire apparaître d’une façon claire et logique
l’enchaînement des différentes opérations.

 Les symboles utilisés pour construire un organigramme

Symbole général traitement

Symbole début-fin-interruption Les lignes de


liaison

Symbole embranchement(choix)

Symbole commentaire

79
Les organigrammes
 Définition:
1- Un organigramme est une représentation graphique de l' algorithme
2- L’organigramme est une représentation graphique d’un programme
de commande, il est construit à partir d’un algorithme.

Symboles de l' organigramme:

ellipse: début ou fin de traitement,


parallélogramme: entrée:sortie d' informations
rectangle: opération ou groupement d' opérations
losange: test,
flèche: liaison

Le fonctionnement du système automatique est expliqué


par un algorithme, représenté graphiquement par
un organigramme, et mise en oeuvre par un programme.
80
Les organigrammes
Chaque case de l’organigramme possède une fonction précise :

Case : Le début ou la fin ou Traitement général


interruption d'un organigramme ou Partie quelconque de traitement : exécution
d'un sous- organigramme. d'une action, d'une séquence (groupe
d'actions) modifiant la valeur, la forme ou la
position d'informations.

Début

Instruction 1
….
fin Instruction n

81
Les organigrammes

Entrée - Sortie : Commentaire :


Ajout, pour clarification, de
Mise à disposition d'une commentaires descriptifs ou notes
information à traiter ou explicatives. Les lignes de texte
enregistrement d'une information sont reliées au symbole concerné
traitée. par un trait interrompu.

82
Les organigrammes
Fonction de type sélection ou décision comportant une seule
entrée et deux sorties possibles, dont une seule peut être
activée après l'évaluation d'une expression conditionnelle définie
dans le symbole.

fausse
Condition

Vraie

83
Organigramme

Exemple :

Condition

Instruction 2 Instruction 1

suite

84
Organigramme

Exemple :Structure répétitive

V
instruction

condition

85
Notions de sous-algorithme
 Définition
 La notion de sous-algorithme est un moyen simple et
efficace de structurer les algorithmes. Elle consiste a
associer un nom a un groupe d'instructions qui peut alors
être active par l'appel de cet identifiant. Cette notion
possède plusieurs avantages.
 Intérêt :
 Réaliser un découpage d’une tâche en sous-tâche.
 Effectuer une seule description d’une tâche commune
 Concevoir une application de manière descendante en entrant de
plus en plus dans les détails
 Lisibilité
 Optimisation
 Fiabilité

86
Notions de sous-algorithme
 Lisibilité : Lorsqu'un algorithme est convenablement structuré, il est
composé de petites sections ne dépassant pas une page écran. Il est alors
possible de suivre et comprendre le déroulement d'un traitement. La lisibilité
s'en trouve grandement accrue.
 Optimisation : Il arrive que des groupes d'instructions se répètent plusieurs
fois dans un même algorithme. En créant une section regroupant ces
instructions il est possible de gagner du temps en conception et en saisie, de
réduire la longueur d'un algorithme et l'espace alloué aux variables, mais
également faciliter les opérations de déboggage et maintenance.
 Fiabilité : Un système est d'autant plus fiable que les liaisons entre ses
différents éléments sont plus étroites et limitées. La décomposition d'un
algorithme en différentes sections accroît de façon notable sa fiabilité. La
notion de sous-algorithme, en permettant de définir des zones mémoires
cachées à l'algorithme ou aux autres sous-algorithmes appelants, permet de
limiter cette dispersion de l'information, et de ce fait, d'accroître la fiabilité
globale d'un système.

87
Procédures & Fonctions
 Une procedure est un algorithme paramétré, c.-a-d.
un bloc d'instructions, ayant un début et une fin, et
identifie par un nom (l'identifiant)
 La signature (ou en-tête) d'un sous-algorithme est le
couple < identifiant, paramètres >. L'arite est le
nombre de paramètres d'un sous-algorithme.
 Structure : un sous-algorithme est composé
 D’une tête nom sous-algorithme, paramètres(arguments) avec
leur type
 D’un corps des déclarations d’objets locaux aux sous-
algorithme, instructions à exécuter

88
Forme d’une Fonction
 Une fonction s'écrit en dehors du programme principal sous la forme

Fonction identificateur (paramètres et leurs types) : type_fonction

Instructions constituant le corps de la fonction


retourne …
FinFonction

 type de fonction : le type du résultat renvoyé par la fonction


 Identificateur : le nom que l’on a donné à la fonction
 liste de paramètres : la liste des paramètres formels donnés en entrée avec
leurs types
 corps de la fonction : un bloc d’instructions, pouvant comprendre la
déclaration des « variables locales » a la fonctions
Remarque : le corps de la fonction doit comporter une instruction de la forme :
return(expression); où expression est du type du résultat de la fonction

89
Procèdures
 Dans certains cas, on peut avoir besoin de répéter une tache dans plusieurs endroits du
programme, mais que dans cette tache on ne calcule pas de résultats ou qu'on calcule
plusieurs résultats à la fois

 Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédure

 Une procédure est un sous-programme semblable à une fonction mais qui ne retourne
rien

 Une procédure s'écrit en dehors du programme principal sous la forme :

Procédure nom_procédure (paramètres et leurs types)

Instructions constituant le corps de la procédure

FinProcédure
 Remarque : une procédure peut ne pas avoir de paramètres

90
Appel d'une procédure
 L'appel d'une procédure, se fait dans le programme principale ou dans une autre
procédure par une instruction indiquant le nom de la procédure :

Procédure exemple_proc (…)


FinProcédure

Algorithme exepmleAppelProcédure
Début
exemple_proc (…)

Fin

 Remarque : contrairement à l'appel d'une fonction, on ne peut pas affecter la procédure


appelée ou l'utiliser dans une expression. L'appel d'une procédure est une instruction
autonome

91
Paramètres d'une procédure
 Les paramètres servent à échanger des données entre le programme
principale (ou la procédure appelante) et la procédure appelée

 Comme avec les fonctions :


 Les paramètres placés dans la déclaration d'une procédure sont appelés
paramètres formels. Ces paramètres peuvent prendre toutes les valeurs
possibles mais ils sont abstraits (n'existent pas réellement)

 Les paramètres placés dans l'appel d'une procédure sont appelés


paramètres effectifs. ils contiennent les valeurs pour effectuer le
traitement

 Le nombre de paramètres effectifs doit être égal au nombre de paramètres


formels. L'ordre et le type des paramètres doivent correspondre

92
Exemple de fonction / fonction

93
Fonctions : exemples

 La fonction SommeCarre suivante calcule la somme des carrées de deux réels x


et y :
Fonction SommeCarre (x : réel, y: réel ) : réel
variable z : réel
z ←x^2+y^2
retourne (z)
Paramètres
formels
FinFonction

 La fonction Pair suivante détermine si un nombre est pair :

Fonction Pair (n : entier ) : booléen


retourne (n%2=0)
FinFonction

94
Utilisation des fonctions

 L'utilisation d'une fonction se fera par simple écriture de son nom dans le
programme principale. Le résultat étant une valeur, devra être affecté ou être
utilisé dans une expression, une écriture, ...

 Exepmle : Algorithme exepmleAppelFonction


variables z : réel, b : booléen
Début
b ←Pair(3)
z ←5*SommeCarre(7,2)+1
écrire("SommeCarre(3,5)= ", SommeCarre(3,5))
Fin

 Lors de l'appel Pair(3) le paramètre formel n est remplacé par le paramètre


effectif 3

95
Trouver le PGCD de a et b

Exemple: pgcd(30, 105)


 1ère méthode: Trouver tous les diviseurs de a et b, et trouver le diviseur
commun le plus grand
 Diviseurs de 30: 1, 2, 3, 5, 6, 10, 15, 30
 Diviseurs de 105: 1, 3, 5, 7, 15, 21, 35, 105
 pgcd(30, 105) = 15

• 2ème méthode: la méthode d’Euclide


 105 = 30.3 + 15. Donc pgcd(105, 30) = pgcd(30,15)
 30 = 15.2 + 0. Donc pgcd(30, 15) = pgcd(15,0)
 pgcd(15,0)=15

 pgcd(105,30)=pgcd(30,15)=pgcd(15,0)=15

96
Méthode d’Euclide : Algorithme

Soient r0, r1 deux entiers strictement positifs, tels que


r0=r1.q+r2 avec 0≤r2<r1

 Si r2 = 0, pgcd (r0, r1) = r1


 Sinon, rediviser ri par ri+1 tant que ri+1 est différent de 0
 Si rn est le premier reste nul, alors
pgcd(r0,r1) = pgcd(r1,r2) = … =pgcd(rn-1,rn)= pgcd(rn-1,0) = rn-1

97
Algorithme d’Euclide
Entrée: a, b deux entiers positifs Trace de l’algorithme pour
a=504 et b=396
Sortie: pgcd(a,b)
504 396 a
108 1
Procédure pgcd(a,b)
Tant que b <> 0 Faire b 396 108 a
Début 72 3
diviser a par b: a = b.q+r, 0 ≤ r < b;
a:=b; b 108 72 a
b:=r; 36 1
Fin
72 36 a
Retourner (a) b 0 2
Fin pgcd
b
Les tableaux

 Un tableau est un ensemble ordonne contenant un


nombre constant d‘éléments d'un même type ;
 Exemple
 un tableau a une dimension de 7 éléments :

 un tableau a deux dimensions de 3 * 5 = 15 éléments :


 Un tableau peut avoir n'importe quel nombre de
dimensions ; En général, on manipule surtout :
 I des tableaux a une dimension (= vecteurs) ;
 I des tableaux a deux dimensions (= matrices) ;

99
Construction des tableaux
 Les langages de programmation offrent divers
mécanismes pour construire des tableaux ;
 En pseudocode, on va supposer qu'il existe des
fonctions pour les construire :

Exemple:

TB tab_binaire(n) ; // tableau a n composantes binaires


TE tab_entiers(n) ; // tableau a n composantes entières
TR tab_reels(n) ; // tableau a n composantes réelles
TC tab_caracteres(n) ; // tableau de n caractères
TE2 tab_entiers(l,c) ; // tableau a l*c composantes entières sur
l lignes et c colonnes

100
Propriétés des tableaux
 Il faut également initialiser le tableau !
 I les fonctions qu'on a vues créent des tableaux, mais
ils peuvent contenir n'importe quoi ;
 On ne peut pas mélanger les types dans un tableau ;
 La taille d'un tableau est constante : on ne peut pas
donc pas la modifier ;
 On accède aux éléments d'un tableau grâce a
l'operateur [] ;
Exemple (construire un tableau contenant les entiers de 1 a 10)
n  10 ;
T  tab_entiers(n) ;
pour i 1 à n
T[i ]  i ;
fin_pour
101
102