Cours Algorithmes :
Définition d’un programme :
Un programme est considéré comme la solution automatique d'un problème. Un programme est un fichier qui
contient des commandes (instructions, ordres, actions).
Un programme doit être exécuté. Lorsqu’un on exécute un programme toutes les commandes du programme
vont être exécutées séquentiellement de la première jusqu’à la dernière.
Un algorithme est une suite d’instructions, qui une fois exécutée correctement, conduit à un résultat donné.
un algorithme doit donc contenir uniquement des instructions compréhensibles par celui qui devra l’exécuter
(Microprocesseur). Donc, un algorithme est la solution automatique d'un problème. Il est écrit sur papier.
La forme générale d’un algorithme :
Algorithme nom de l’algorithme ; Partie 1
Variables
Déclaration de variables ; Partie 2
Début
Action 1 ;
Action 2 ;
Action 3 ;
.
Partie 3
.
.
.
Action N ;
Fin.
Partie 1 : Entête du programme (non obligatoire)
Partie 2 : Partie déclaration des variables
Partie 3 : Partie Action
La partie déclaration :
- Dans la partie déclaration, on doit déclarer toutes les variables utilisées dans la partie action (partie 3).
- Dans la partie déclaration on doit définir toutes les variables utilisées dans la partie action.
- Déclarer une variable veut dire spécifier son nom et son type.
- Donc déclarer une variable veut dire spécifier le champ de valeur que peut prendre la variable.
Comment déclaré une variable ?
Nom de la variable : Type ;
Entier = (Z)
Type
Réel = (R)
Exemple : Comment déclarer la variable AB de tel sorte qu’elle reçoit des réels ?
AB : Réel ;
Interprétation de l’action déclarative AB : réel ;
AB : Réel ; 🡪 A l'exécution, On a une réservation d’une case mémoire dans la RAM et cette case mémoire
va recevoir des réels.
RAM
AB
Comment affecter une valeur à une variable déclarée par le programmeur ?
Nom de la variable : = valeur ;
Exemple : Comment affecter la valeur 8 à la variable déclarée AB ?
AB : = 8 ;
Lecture : La variable AB reçoit la valeur 8
Lecture : La valeur 8 est affectée à la variable AB
Interprétation :
AB := 8 --------> A l'exécution
RAM
Code binaire de 8
Comment afficher un texte (message) à l’écran ?
Il faut utiliser la procédure :
ECRIRE
Syntaxe :
Ecrire ( ‘ Texte ’ ) ;
Exemple :
Ecrire ( ‘ Saisir une valeur : ‘ ) à l’exécution l’écran affiche : Saisir une valeur :
Comment afficher le contenue d’une variable à l’écran ?
Il faut aussi utiliser la procédure :
ECRIRE
Syntaxe :
Ecrire ( Nom de la variable ) ;
Exemple :
Soit la partie Action suivante :
Début
A : =8 ; La case réservée à la variable A reçoit la valeur 8.
A : =7 ; La case réservée à la variable A reçoit la valeur 7. Donc, la valeur 8 est écrasée par 7.
Ecrire (A) ; L’écran affiche la contenu de la variable A.
Ecrire (‘A’) ; L’écran affiche le caractère A.
Fin.
Comment affecter une valeur à une variable (par un utilisateur) au moment de l’exécution ?
La procédure utilisée est :
Lire
Syntaxe :
Lire ( Nom de la variable ) ;
Exemple :
Début
Ecrire (‘Saisir une valeur’) ; ---------> A l’exécution, l’écran affiche : Saisir une valeur
La valeur saisie est 5.
Lire (A) ; ----------> A l’exécution, la valeur 5 est affectée à la variable A.
Fin.
Exercice N°1:
Ecrire l’algorithme qui demande à l’exécution deux valeurs entières puis affiche la somme de ces deux
valeurs.
Algorithme Somme ;
Variables
A : Entier ;
B : Entier ;
S : Entier ;
Début
Ecrire ( ' Saisir la première Valeur : ' ) ;
Lire ( A ) ;
Ecrire ( ' Saisir la deuxième Valeur : ' ) ;
Lire ( B ) ;
S := A + B ;
Ecrire ( ' La somme est : ' , S ) ;
Fin .
Exercice N°2:
Ecrire l’algorithme qui demande à l’exécution deux valeurs entières A et B puis affiche le résultat de la division de A
sur B.
Analyse :
- L'opérateur de division utilisé est le slash ( / ). Le slash retourne un résultat réel.
- La variable qui reçoit le résultat de la division doit être déclarée de type réel.
Algorithme division ;
Variables
A, B : Entier ;
S : Réel ;
Début
Ecrire ( ' Saisir la Valeur du divisé : ' ) ;
Lire ( A ) ;
Ecrire ( ' Saisir la Valeur du diviseur : ' ) ;
Lire ( B ) ;
S := A / B ;
Ecrire ( ' Le résultat de la division est : ' , S ) ;
Fin .
Remarque : L'affichage du résultat se fait en virgule flottante car le réel est stockée en mémoire en virgule
flottante.
Exercice N°3:
Ecrire l’algorithme qui demande à l’exécution deux valeurs entières A et B puis affiche le résultat de la division de A
sur B en utilisant seulement deux variables (Pour minimiser le nombre de variable utilisée= optimisation de la
mémoire).
Algorithme division ;
Variables
A, B : Entier ;
Début
Ecrire ( ' Saisir la Valeur du divisé : ' ) ;
Lire ( A ) ;
Ecrire ( ' Saisir la Valeur du diviseur : ' ) ;
Lire ( B ) ;
Ecrire ( ' Le résultat de la division est : ' , A / B ) ;
Fin .
Exercice N°4:
Ecrire l’algorithme qui demande à l’exécution deux valeurs entières A et B puis réalise la permutation des deux
variables en utilisant une variable intermédiaire.
Algorithme permutation;
variable
a, b, c : entier ;
Début
Ecrire (' Donner la première valeur de a : ' ) ;
Lire (a) ;
Ecrire ( ' Donner la deuxième valeur de b : ' );
Lire (b);
c:=a ;
a:=b ;
b:=c ;
Ecrire (' La nouvelle valeur de a est : ' ,a);
Ecrire (' La nouvelle valeur de b est : ' ,b);
Fin.
Exercice N°5:
Ecrire l’algorithme qui demande à l’exécution deux valeurs entières A et B puis réalise la permutation des deux
variables sans utiliser une variable intermédiaire.
Algorithme permutation1;
variable
a, b : entier ;
Début
Ecrire (' Donner la première valeur de a : ' ) ;
Lire (a) ;
Ecrire ( ' Donner la deuxième valeur de b : ' );
Lire (b);
a:= a + b ;
b:= a - b ;
a:= a - b ;
Ecrire (' La nouvelle valeur de a est : ' ,a);
Ecrire (' La nouvelle valeur de b est : ' ,b);
Fin.
Exercice N°6:
Ecrire l’algorithme qui demande à l’exécution deux valeurs entières A et B puis affiche la plus petite valeur.
Analyse du Problème :
Pour pouvoir déterminer la plus petite valeur entre A et B, il faudra comparer le contenu de A avec le contenu de B et
pour cela on doit utiliser une structure Algorithmique qui permet ce test. Cette structure est appelée : Structure de
contrôle ou structure conditionnelle.
L'instruction Alternative SI :
Syntaxe :
Si Condition Alors Action1
Sinon Action2 ;
Interprétation de l’instruction conditionnelle Si :
A l'exécution de l'instruction conditionnelle, le processeur teste si la condition est vraie, dans ce cas il exécute l'action1
et non pas l'action2. Mais si le teste de la condition s'avère faux alors l'action2 est exécutée et non pas l'action1.
Donc, l'exécution de l'instruction de contrôle implique soit l'exécution de l'action1 ou de l'action2 mais pas les deux et
cela dépend de la condition.
La Condition = Une Comparaison = Un Test
La condition est sous l'une des formes suivantes :
Nom Variable Opérateur Valeur
ou
Nom Variable1 Opérateur Nom Variable2
ou
Nom Variable Opérateur expression arithmétique
Les opérateurs possibles :
< inférieur
> Supérieur
>= Supérieur ou égal
<= inférieur ou égal
= égal à
<> différent de
Solution de l'exercice N° 6 :
Algorithme comparaison;
variable
a, b, c : entier ;
Début
Ecrire('Donner une valeur : ');
Lire (a);
Ecrire ('Donner une autre valeur : ');
Lire (b);
c:=a - b;
if c<0 Alors Ecrire ('La plus petite valeur est : ',a)
Sinon Ecrire ('La plus petite valeur est : ',b);
Fin.
Autre Solution:
Algorithme comparaison;
variables
a, b: Entier ;
Début
Ecrire ('Donner une valeur : ');
Lire(a);
Ecrire ('Donner une autre valeur : ');
Lire (b);
if a < b Alors Ecrire ('La plus petite valeur est : ',a)
Sinon Ecrire ('La plus petite valeur est : ',b);
Fin.
Autre Solution:
Algorithme comparaison;
variables
a, b, Min: Entier ;
Début
Ecrire ('Donner une valeur : ');
Lire(a);
Ecrire ('Donner une autre valeur : ');
Lire (b);
if a<b Alors Min := a
Sinon Min := b;
Ecrire ('La plus petite valeur est : ',Min)
Fin.
Interprétation Algorithme ------ Pascal :
Algorithme Pascal Algorithme Pascal
Algorithme Program Caractère Char
Variables Var Si If
Début Begin Alors Then
Fin End Sinon Else
Entier Integer
Réel Real
Ecrire Write
Lire Read
Exercice
Ecrire le programme Pascal qui affiche le résultat de la division de A sur B.
program somme;
uses crt;
var
a,b:integer;
begin
clrscr; Cette Instruction efface l'écran (Clear screen)
write('Donner la premiere valeur : ');
read(a);
write('Donner la deuxieme valeur : ');
read(b);
write('La somme est : ',a/b:00);
readkey; Lire touche
end.
Remarque :
- Readkey est utilisée pour bloquer l'exécution des instructions car le microprocesseur exécute rapidement les
instructions et dés qu’il arrive au « Fin. » de la partie action, l’affichage du programme n’apparait pas. Donc, pour que
l'utilisateur puisse voir le message affiché par l'instruction : « write ('La somme est : ',a/b); », Readkey, bloque
l’exécution.
- Pour pouvoir utiliser dans un programme "Readkey" et "Clrscr", il faudra déclarer la bibliothèque "CRT".
- La déclaration des bibliothèque se fait avant la déclaration des variables.
a/b:00 : Pour afficher deux chiffres après la virgule seulement.
- Dans le cas où on veut calculer le résultat de la division entière de A sur B, on utilise la fonction Pascal : DIV
- Dans le cas où on veut calculer le reste de la division entière de A sur B, on utilise la fonction Pascal : MOD
Exemple :
5 Div 2 --------> 2
12 Mod 7 ----------> 5
Exercice
Ecrire le programme Pascal qui affiche le résultat et le reste de la division entière de A sur B.
program division;
uses crt;
var
a,b,resu,rest:integer;
begin
clrscr;
write('Donner la valeur du divise : ');
read(a);
write('Donner la valeur du diviseur : ');
read(b);
resu:=a div b;
rest:=a-(b*resu);
writeln;
writeln('Le resultat de la division est : ',resu);
write('Le reste de la division est : ',rest);
readkey;
end.
Remarque :
- Dans le cas où la valeur du diviseur donnée est zéro alors le programme affiche un message d'erreur Pascal. Donc, il
faut faire un test.
- Dans le cas où plusieurs actions doivent être exécutées si la condition est vraie alors ces actions doivent être entre un
Début et un fin ;
Autre syntaxe du SI:
Si Condition Alors Début
Action1;
Action2;
Fin
Sinon Début
Action 3;
Action 4;
Fin;
Autres solution:
program division;
uses crt;
var
a,b,resu,rest:integer;
begin
clrscr;
write('Donner la valeur du divis‚ : ');
read(a);
write('Donner la valeur du diviseur : ');
read(b);
writeln;
if b=0 then begin
write('Erreur division par z‚ro');
readkey;
end
else begin
resu:=a div b;
rest:=a mod b;
writeln(' Le r‚sultat de la division est : ',resu);
write(' Le reste de la division est : ',rest);
readkey;
end;
end.
Exercice
Ecrire le programme Pascal qui demande une valeur entière puis affiche si cette valeur est pair ou impair.
program division;
uses crt;
var
a : integer;
begin
clrscr;
write('Donner une valeur : ' );
read(a);
Si A MOD 2 = 0 Alors write(A, ' est pair ')
Sinon write(A, ' est impair ')
readkey;
end.
Remarque :
Dans le cas où des instructions doivent être exécutées seulement dans le cas où la condition est vraie alors on utilise un
Si sans sinon.
Autres Syntaxe de l'instruction de contrôle SI.
Si condition alors Action 1 ;
Exercice :
Ecrire le programme Pascal qui demande une valeur entre 1 et 7 puis affiche le jour correspondant.
program jours_de_semaine;
uses crt;
var
a:integer;
begin
clrscr;
write('Donner un chiffre entre 1 et 7 : ');
read(a);
writeln;
if (a<1) or (a>7) then write('Erreur, vous devez donner un chiffre entre 1 et 7. ')
else begin
if a=1 then write('Le jour correspondant est le dimanche');
if a=2 then write('Le jour correspondant est le lundi');
if a=3 then write('Le jour correspondant est le mardi');
if a=4 then write('Le jour correspondant est le mercredi');
if a=5 then write('Le jour correspondant est le jeudi');
if a=6 then write('Le jour correspondant est le vendredi');
if a=7 then write('Le jour correspondant est le samedi');
end;
readkey;
end.
Exercice :
Ecrire l'algorithme qui demande un caractère R ou O ou V puis affiche le message correspondant Stop ou Attention
ou Passage autorisé.
Remarque :
A l'exécution du programme, l'utilisateur doit donner un caractère et non pas une valeur entière ou un Réel. Donc,
l'espace réservé dans la RAM doit pouvoir stocker un caractère. d'où la nécessité d'utilisation d'un type nommé
caractère.
Le type Caractère:
Dans le cas où on déclare une variable de type caractère alors cette variable ne reçoit que des caractères.
Comment déclarer une variable caractère ?
Nom Variable : Caractère ;
Exemple :
Début
A:= 5 ; //( La variable A reçoit la valeur 5 )
C := 'A' ; // ( La variable caractère C reçoit le caractère majuscule A)
C := '5' ; // ( La variable caractère C reçoit le caractère 5 )
C := 'a' ; // ( La variable caractère C reçoit le caractère minuscule a)
Fin.
Remarque :
- La condition peut être composée de plusieurs conditions en utilisant l'opérateur "et" ou l'opérateur "ou". Dans ce cas
chaque condition doit être délimitée par des parenthèses.
- Sous Pascal la récupération d'un caractère de chez l'utilisateur se fait par "Readln".
program Feux ;
uses crt;
var
a:integer;
begin
clrscr;
write('Donner une lettre R ou O ou V : ');
readln (a);
writeln;
if (a< >' R ' ) and (a < > ' O ' ) and ((a < > ' V ' ) then write(' Erreur ')
else begin
if a=' R ' then write(' Stop ');
if a=' O ' then write(' attention ');
if a=' V ' then write(' Passage autorisé ');
end;
readkey;
end.
Exercice :
Ecrire le programme Pascal qui demande trois valeurs entières puis affiche la plus petite valeur.
1ère Solution :
program Minim;
uses crt;
var
a, b, c, min : integer;
begin
clrscr;
write('Donner la 1 valeur : ' );
read(a);
write('Donner la 2 valeur : ' );
read(b);
write('Donner la 3 valeur : ' );
read(c);
if a < b Then min :=a
Else min :=b;
if Min > c Then min :=c ;
write(' La plus petite valeur est : ', Min );
readkey;
end.
2 ème Solution :
program Minim;
uses crt;
var
a, b, c, min : integer;
begin
clrscr;
write('Donner 3 valeurs : ' );
read(a, b, c);
if a < b Then if b < c Then min :=a
Else If a < c Then min :=a
Else min := c
Else if b < c Then min :=b
Else min := c;
write(' La plus petite valeur est : ', Min );
readkey;
end.
L'instruction de contrôle Imbriquée SI :
Si cond1 alors Si cond2 alors Si cond3 alors Action1
Sinon On gère
Sinon On gère
Sinon On gère ;
Exercice :
Ecrire le programme Pascal qui permet de résoudre l'équation du premier degré.
program equation;
uses crt;
var
a, b, c : real ;
begin
clrscr;
writeln(' *** Programme qui résoud une equation du type A x + B = 0 *** ');
writeln;writeln;writeln;
write('Donnez la valeur de A : ');
read(A);
write('Donnez la valeur de B : ');
read(B);
if a=0 then if b=0 then write('Toutes les valeurs sont des solutions')
else write('Erreur, equation incorrecte')
else write('La solution est : ',-B / A) ;
readkey;
end.
Exercice :
Ecrire l'algorithme qui permet de résoudre l'équation du deuxième degré.
program equation;
uses crt;
var
a,b,c,d : real ;
begin
clrscr;
writeln(' *** Programme qui résoud une equation du type A x² + B x + C = 0 *** ');
writeln;writeln;writeln;
write('Donnez la valeur de A : ');
read(A);
write('Donnez la valeur de B : ');
read(B);
write('Donnez la valeur de C : ');
read(C);
if a=0 then if b=0 then if c=0 then write('Toutes les valeurs sont des solutions')
else write('Erreur, equation incorrecte')
else write('La solution est : ',-b/c)
else begin
d:=b*b-4*a*c;
if d<0 then write('Pas de solutions dans R');
if d=0 then write('Solution double X1=X2=',-b/(2*a));
if d>0 then write(' Deux solutions differentes : X1= ',(-b+sqrt(d))/(2*a),' X2= ',(-b-sqrt(d))/(2*a));
end;
readkey;
end.
Exercice :
Ecrire l'algorithme qui affiche le message "Bonjour" dix fois verticalement.
Algorithme Exo ;
Début
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Ecrireln(' Bonjour ');
Fin.
Inconvénient du programme :
Dans le cas où on doit afficher 1000 fois le message "Bonjour" alors on doit répéter l'écriture de l'instruction :
Ecrireln(' Bonjour '); 1000 fois. Donc, on a un problème de répétition.
Solution :
Eviter la répétition.
Comment ?
Utiliser une nouvelle structure Algorithmique dans laquelle on écrit l'instruction :
Ecrireln(' Bonjour '); une seule fois mais elle doit s'exécuter 1000 fois.
Cette nouvelle structure est appelée :
La Boucle
Il existe trois types de Boucle :
1- La boucle Tant que.
2- La boucle Pour.
3- La boucle Répéter.
Syntaxe de la boucle Tant que :
Tant que Condition Faire
Début
Action 1 ;
Action 2 ;
Action N ;
Fin ;
Interprétation de la boucle Tant que :
Si la condition est vraie alors on entre dans la boucle pour exécuter toutes les actions de cette boucle puis arrivé au
"fin;" on remonte tester la condition. Si elle est toujours vraie alors on entre dans la boucle une deuxième fois pour
exécuter toutes les actions puis on remonte tester la condition et ainsi de suite jusqu'a ce que la condition soit fausse. à
ce moment là, on sort de la boucle pour exécuter les actions qui viennent après le "Fin;" de la boucle.
Remarque :
La condition doit faire intervenir une variable appelée "Compteur" et cette variable doit absolument recevoir une
nouvelle valeur à chaque fois qu'on entre dans la boucle pour que la condition devienne vraie à un moment donné.
Compteur := compteur + 1
Solution du programme précédent en utilisant la Boucle :
program bonjour;
var
i:integer;
begin
i:=1;
while i <=10
do begin
writeln('Bonjour');
i:= i+1;
end;
end.
Exercice :
Ecrire l’algorithme qui demande une valeur entière puis affiche si cette valeur est pair ou impair sans utiliser Mod, Div
et slash(/).
Analyse du problème :
Pour pouvoir déterminer si une valeur A est pair ou impair, on doit soustraire tant qu’on peut à la variable A 2 et si la
dernière valeur restante est 0 alors A est pair sinon A est ampair.
11 - 2 = 9
9 -2=7
7 - 2=5
5 - 2=3
3 - 2=1
Le dernier reste est 1 donc 11 est impair.
Ici la répétition est l’instruction de soustraction. Donc, pour éviter cette répétition, on doit utiliser une boucle dans
laquelle on entre plusieurs fois.
program pairimp;
uses crt;
label 1;
var
n,rest:integer;
begin
1:clrscr;
write('Donner une valeur entiere positive : ');
read(n);
if n<0 then begin
writeln ('Erreur');
readkey;
goto 1;
end;
rest:=n;
while rest >= 2
do begin
rest:=rest-2;
end;
if rest=0 then write (n,' est pair')
else write (n,' est impair');
end.
Exercice :
Ecrire l’algorithme qui demande une valeur entière puis affiche tous ses diviseurs.
Algorithme diviseur;
variable
VAL,i : entier ;
debut
Ecrire ('Saisir une valeur : ');
Lire (val);
i:= 1 ;
Tant que i < = VAL
faire début
Si Val mod i = 0 alors ecrire (i,' divise ',val);
i : = i+1 ;
fin ;
Fin .
Exercice :
Ecrire l'algorithme qui demande une valeur entière Val puis affiche le nombre de diviseur de Val.
Algorithme nombdiv ;
Variable
Val , i , Nb : entier ;
Début
Ecrire ('saisir une valeur');
Lire (val);
i:= 1;
nb:= 0;
Tant que i < = val
faire début
Si val mod i = 0 alors nb :=n+1;
i:= i+1 ;
fin;
Ecrire (' Le nombre de diviseur est : ',nb);
Fin.
Exercice :
Ecrire l'algorithme qui demande une valeur entière puis affiche si cette valeur est un nombre premier ou pas..
Algorithme nombprem ;
variable
val , i , nb : entier;
début
Ecrire (' saisir une valeur : ');
Lire(val);
i:= 1;
nb:= 0;
Tant que i< = val faire début
si val mod i = 0 alors n:= nb+1;
i:= i+1 ;
fin;
Si nb = 2 alors Ecrire (n,' est premier ')
sinon Ecrire (n,' n’’ est pas premier ');
fin .