Vous êtes sur la page 1sur 92

INTRODUCTION À

L’ALGORITHMIQUE
PLAN
Introduction
Notion d’Algorithme et d’action primitive.
Structure d’un algorithme.
Différentes parties d’un algorithme
Les types standards et opérations appropriées.
Actions simples et structures de contrôle
Les types complexes (tableaux et
enregistrements).
OBJECTIFS DU COURS

Ecrire un algorithme afin de résoudre un


problème donné et le préparer pour qu’il soit
traduit dans un langage de programmation.
Utiliser les structures de contrôle dans
l’élaboration d’un algorithme.
Utiliser les différents types de données dans leur
contexte avec les opérations adéquates.
INTRODUCTION
Dans notre vie courante, on dresse souvent une liste
d’actions à accomplir pour répondre à un problème
donné. Plus on donne de détails, mieux on exécute
les tâches de manière correcte.
Les tâches à exécuter doivent être respectées dans
l’ordre pour ne pas dévier de l’objectif attendu.
On doit tenir compte des capacités de celui qui
exécute les différentes tâches (connaissances dans le
domaine, savoir comprendre les tâches sinon les
expliquer avec plus de détails, …)
INTRODUCTION
Exemple: Recette de la mayonnaise
Ingrédients (4 personnes): 1 jaune d'oeuf, 25 cl d'huile,
1 cuillère à café de moutarde, 1 trait de vinaigre ou jus
de citron, sel, poivre.
Préparation:
Mélanger le jaune d'oeuf , la moutarde, le sel et le
poivre.
Incorporer l'huile peu à peu en fouettant au fouet à main
sans s’arrêter.
Incorporer le vinaigre ou
le jus de citron à la fin.

Source: www.lesfoodies.com
NOTION D’ALGORITHME ET D’ACTION
PRIMITIVE
Un algorithme en informatique est un procédé
de calcul qui permet de résoudre un problème
donné. Ce procédé est une suite d’étapes à
effectuer dans un ordre donné afin d’aboutir au
résultat attendu.
Une action est une étape de l'algorithme. C'est un
événement de durée finie qui modifie
l'environnement (changement des valeurs des
variables, résultat d’une expression, …).
Une action primitive est une action exécutée sans
aucune information complémentaire. Exemple:
A45
NOTION D’ALGORITHME ET D’ACTION
PRIMITIVE
Un algorithme est une suite d’actions primitives,
qui une fois exécutées réalisera un travail bien
précis.
Un algorithme doit tenir compte de tous les cas
possibles (le cas général et les cas particuliers).
Il contient toujours un nombre fini d'actions.
Il est souvent répétitif (il contient un traitement qui
se répète).
Il est indépendant des langages de
programmation et des matériels informatiques.
Notion d’algorithme et d’action primitive
POURQUOI UN ALGORITHME?
Un algorithme utilise un formalisme (ensemble de mots,
de structures, de règles) nommé LDA (Langage de
description d’algorithme). dont le but est de:
offrir un langage commun compris par tous ne
dépendant pas d’un langage de programmation 
Facilite la communication de la solution d’un problème.
Assurer une meilleure conception d’une solution avant son
passage à la programmation qui nécessite des
ressources (machine, compilateur, …)
Préparer sa traduction dans un langage de
programmation (C, C++, java) car le passage d’un
langage de programmation à un autre n’est pas assez
simple.
Notion d’algorithme et d’action primitive
DÉMARCHE DE RÉSOLUTION D’UN PROBLÈME
POUR OBTENIR LES RÉSULTATS ATTENDUS, ON DOIT SUIVRE LES ÉTAPES:
Enoncé bien clair du problème posé.
Faire une analyse détaillée qui tient en compte des cas
particuliers.
Ecrire l’algorithme.

Traduire l’algorithme sous forme d’un programme.


Compiler le programme (correction des erreurs et
transformation en format exécutable par la machine).
Affichage et exploitation des résultats.
Notion d’algorithme et d’action primitive
DÉMARCHE DE RÉSOLUTION D’UN
PROBLÈME
Exemple
Enoncé du problème: résoudre une équation du premier
degré.
Analyse:
Une équation du premier degré s’écrit sous la forme:
ax+b=0
On doit introduire les valeurs de a et de b
Si a=0 et b=0  Solution indéfinie
Si a=0 et b<>0  Solution impossible (<> : différent )
Si a<>0  x= -b/a
Notion d’algorithme et d’action primitive
DÉMARCHE DE RÉSOLUTION D’UN
PROBLÈME
Algorithme correspondant
Algorithme équation
Var a,b: entier
Début
Lire (a,b)
Si a=0 alors si b=0 alors écrire (‘Solution
indéfinie’)
sinon écrire (‘Solution impossible)
Fsi
Sinon écrire (‘La solution est:’, -b/a)
Fsi
Fin
DÉMARCHE DE RÉSOLUTION D’UN
PROBLÈME
Programme correspondant en langage C
#include <stdio.h>
main()
{ /* Résolution d'une équation du premier degré */
int A, B;
printf("Calcul de la solution d'une équation du premier degré \n");
printf("Introduisez les valeurs de a, b");
scanf("%i %i", &A, &B);
if (A==0 && B==0) printf("Solution indéfinie.\n");
else if (A==0 && B!=0) printf("Solution impossible.\n");
else {
printf("La solution est :\n");
printf(" x = %.2f\n", (double)-B/A);
}
return 0;
}
STRUCTURE D’UN ALGORITHME
Différentes parties d’un algorithme
Algorithme nom_algorithme
Const nom_constante= valeur /*Déclaration des
Entête

Constantes*/
Type nom_type… /*Déclaration de nouveaux types */
Var var1,var2:type1, var3:type2 /*Déclaration des
variables */
Procedure ou fonction …/* Déclaration des sous-algorithmes */
Des commentaires sont insérés pour donner une
explication textuelle à certaines actions dont on peut
Corps

Début oublier le sens au fil du temps (A mettre entre /*


Action 1 */).
Action 2
….
Différentes parties d’un algorithme
Nom de Déclaration de
l’algorithme deux variables a et
b
Algorithme équation Introduction des
Var a,b: entier Étudier les
deux valeurs de a
Début différents cas
et b
Lire (a,b) selon a et b
Si a=0 alors si b=0 alors écrire (‘Solution
indéfinie’)
Début de
l’algorithme sinon écrire (‘Solution impossible)

fsi
Sinon écrire (‘La solution est:’, -b/a)
Fsi Affichage de la
Fin solution attendue
Fin de l’algorithme
STRUCTURE D’UN ALGORITHME
Différentes parties d’un algorithme

La partie entête contient les éléments suivants:


La définition des types non standards tels que
les enregistrements...
La définition des procédures et des fonctions
(sous-algorithmes).
La déclaration des constantes.
La déclaration des variables (simples ou
composés comme les tableaux et les matrices).
STRUCTURE D’UN ALGORITHME
Différentes parties d’un algorithme
Déclaration des constantes
Une constante est une zone mémoire qui ne
possède qu’une seule valeur manipulée par le
programme et ne change pas son état en cours
de traitement.
Elle est utilisée pour ne pas reproduire une valeur
à plusieurs reprises dans l’algorithme.
Exemple:
Const TVA=0.07, Pi=3.141592
STRUCTURE D’UN ALGORITHME
Exemple d’algorithme qui manipule des constantes

Algorithme rattrapage
Const note_elimin=7 /* note éliminatoire fixée à
7*/
Var moyenne:reel
Début
Lire (moyenne)
Si moyenne <note_elimin
Alors écrire (‘l.etudiant refait le module’)
Fsi
Fin algorithme
Structure d’un algorithme
Déclaration des variables
 Les variables sont des zones mémoires contenant les
données manipulées par un programme ayant des
adresses mémoire pour pouvoir les atteindre. Le contenu
d’une variable peut changer une à plusieurs fois.
 Les variables sont nommées afin d’être utilisées dans un
algorithme et doivent être définies ainsi que leurs types
dans la partie déclaration.
Exemple:
Var A,B: entier, V: booleen, Quotient: reel
Ici nous avons déclaré pour les besoins de notre algorithme: 4
variables (deux de type entier, une de type booléen et une
de type réel).
Structure d’un algorithme
Différentes parties d’un algorithme
Déclaration des variables
 Un nom d’une variable (identifiant) doit être:
 Porteur de sens pour pouvoir comprendre facilement
l’algorithme en cours de sa lecture ou de son
déroulement (notamment pour les algorithmes
compliqués et longs).
 Il doit toujours être présent dans la partie déclaration
des variables (avant de l’utiliser).
 Il ne doit pas commencer par un chiffre.
 Il ne doit pas contenir un symbole sauf la caractère
souligné (_).
 Il doit être différent des mots réservés utilisés dans la
structure d’un algorithme (si, sinon, pour, tant que, var,
const, type, entier, booleen,…)
Structure d’un algorithme
Les types standards et opérations appropriées.
 Le type de variable définit les valeurs qu’elle peut
contenir.
 Les types standards sont:

Le type explication Exemple


entier Positif ou négatif (100, -548, …) Var a,b: entier

réel Nombre à virgule (1.75, 2.4586,…) Var result:reel

caractère Lettres (‘A’,..’Z’,’a’…’z’), symboles Var c: caractère


(&,$, @,#,…) , les chiffres (‘0’…’9’).
Chaine Texte (composé de plusieurs Var adresse:
caractères: ’ecole ‘, ‘exercice’) chaine
Booleen Vrai ou faux Var trouv:
booleen
Structure d’un algorithme
Les types standards et opérations appropriées.
 Les opérations utilisées sont des opérations
arithmétiques et logiques et des opérations de
comparaison.
 Opérations arithmétiques: +, -, /, *, mod
(modulo), div (division entière), ** ou ^
(exponontiation)
 Opération logiques: non, et, ou
 Opérations de comparaison: =, <, <=,>, >=,
<> (non égal)
Structure d’un algorithme
Les types standards et opérations appropriées.
Remarques:
• L’addition entre deux caractères ou deux
chaines de caractères donne une chaine de
caractère.
Exemple: CH A +B . Si A contient la valeur
‘pomme’ et B contient la valeur ‘de terre’ alors
CH contient la valeur ‘pomme de terre’.
• On peut comparer deux caractères ou chaines
de caractères . Exemple: Si A contient ‘p’ et B
contient ‘r’ alors A<B.
Structure d’un algorithme
Les types standards et opérations appropriées.
Remarques:
• Le résultat d’une comparaison est de type logique
(booleen).
Exemple:
Si A<B alors minA Cond(A<B)
Si cond=vrai alors Action1

Donc A<B est évalué, le résultat est soit 1 soit 0.


Structure d’un algorithme
Les types standards et opérations appropriées.
Priorités des opérations arithmétiques: Le calcul
d’une expression qui lie des variables par des
opérateurs s’effectue selon l’ordre de priorité
suivant
• Les termes entres parenthèses (parenthèses
internes puis parenthèses externes).
• L’exponenciation
• Multiplication et division
• Addition et soustraction
Pour les opérations de même niveau, l’évaluation se
Structure d’un algorithme
Les types standards et opérations appropriées.
Priorités des opérations arithmétiques:
• Exemple
Res(a+b)/(a*b**2)
On calcule a+b
On calcule b**2
On multiplie a par b**2
On fait la division de a+b par a*b**2
S’il y’a une comparaison, on doit d’abord calculer
les expressions avant de les comparer. Exemple:
a**2 <b*c
Structure d’un algorithme
Les types standards et opérations appropriées.
Priorités des opérations logiques: L’ordre suivant
doit être respectée.
• Calcul des expressions entre paranthèses
• Non logique
• Et logique
• Ou logique
Exemple
• a ou b et non(d)
On calcule [non(d)] puis [b et [non (d)]] puis [[(b et
[non(d)] ] ou a]
Structure d’un algorithme
Exercice: Corriger l’algorithme suivant et donnez les
résultats des différentes expressions
Algorithme exercice
Const S=7.466
Var A,B: entier, V:booleen
Début
Lire(A,B)
SA+B
RA*B/A+B**2
V(S<R)
Ecrire(S,R,V)
Fin algorithme
Structure d’un algorithme
Exercice: Corriger l’algorithme suivant et donnez les
résultats des différentes expressions (pour A=1 et B=1)
Algorithme exercice Il faut déclarer R
avant son utilisation
Const S=7.466
Var A,B: entier, V:booleen, R:reel
Cette action est à supprimer. S est
Début une constante, on ne doit pas lui
affecter une valeur
Lire(A,B)
Pour A=1 et B=1, le calcul donne
SA+B ((1*1)/1) + (1**2)  R=2
RA*B/A+B**2 Pour A=1 et B=1, S<R est fausse,
V(S<R) ou (A>B) A>B est fausse d’où V est faux (0)

Ecrire(S,R,V)
7.466 2 false
Fin algorithme
Structure d’un algorithme
Un algorithme est composé de deux types
d’éléments:
Les actions simples ou les actions de traitement
de l’information proprement dit.
Les structures de contrôle qui expriment
l’organisation logique du programme et
commandent le déroulement du programme
dans le temps. Ces structures sont:
l’enchaînement,
 la conditionnelle et l’alternative, et
la répétitive.
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les actions simples comprennent:
L’affectation
Les actions d’entrée/sortie ou lecture et écriture.
Les calculs élémentaires
Et les appels de sous programmes (procédures et
fonctions).
Exemples d’actions simples:
AB
Produit(A,B)
AB*C-E
Lire (A)
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
L’affectation est l’opération qui permet de stocker un contenu
dans une variable (zone mémoire) à un instant donné. On peut
affecter à une variable une valeur simple, le contenu d’une
autre variable ou le contenu d’une expression. Elle est noté (
ou =)

Exemples:
A5 (ou A=5) /*Affectation d’une valeur*/
AB /*Affectation du contenu d’une variable*/
A(B+C)/10 /*Affectation du résultat d’une expression*/

Ce qui est affecté à la variable doit être de même type que cette
dernière.
Si A est de type entier, A10.5 est considéré comme une erreur.
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Une action de lecture permet de stocker une
valeur dans une variable. Cette valeur est
donnée par l’utilisateur en utilisant un organe
d’entrée. Si l’exécution est répétée , la valeur
peut être changée.
Exemple:
Lire (A,B)
CA+B
Si l’utilisateur a introduit 5 pour A puis 2 pour B
alors C aura 7 comme valeur.
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Une action d’écriture permet d’afficher un message,
le contenu d’une variable, ou le contenu d’une
expression sur un organe de sortie (écran,
imprimante,… ).
Exemple:
Lire (A,B)
CA+B
Écrire (‘La somme de A et de B est:’, C)

Si l’utilisateur a introduit 5 puis 2 alors le message


affiché est comme suit: La somme de A et de B est: 7
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les structures de contrôle
On distingue:
L’enchaînement
Les structures conditionnelles et alternatives
Les structures répétitives
Remarque: On évoquera dans ce qui suit le terme
condition logique. Cela veut dire expression
logique qui peut être vraie ou faux. Exemple: (A-
2) >0, I<10, A=B+C, …
Structure d’un algorithme
L'enchaînement (séquencement) : Les actions primitives
sont exécutées dans l'ordre d'apparition dans
l'algorithme. Ces enchaînements peuvent se trouver dans
les autres structures de contrôle.

Action 1 Exemple:
Action 2 Lire (A)
B A**4
..... CB*100
Action n Ecrire (A,B,C)
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les structures conditionnelles et alternatives
Elles permettent d’effectuer un traitement
conditionnel (un choix de décision). On
distingue:
La structure simple (choix unique) ou
conditionnelle
La structure à double choix ou alternative.
Le choix multiple (à plusieurs alternatives)
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
La structure Si condition logique
conditionnelle alors action A
La structure simple Fsi
(choix unique): Dans
ce cas une ou ----------OU ---------
plusieurs actions sont Si condition logique
exécutées si une alors
condition est vraie. action A
Exemple: Action B
Action C
Si A<B alors AB
…..
Fsi
Fsi
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les structures alternatives
Si condition logique
La structure à double alors action A
choix: On exécute une Sinon action B
action dans le cas où la Fsi
condition est vraie. Si elle ----------OU ---------
est fausse, on exécute une Si condition logique
autre. alors action A
Exemple: Si A<B action B
…..
alors CB-A Sinon action x
sinon CA-B action y
……
Fsi
Fsi
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les structures alternatives
Le choix multiple: Selon <expression ou variable>
Plusieurs conditions qui valeur 1: Action 1
mènent chacune à une ou valeur 2: Action 2
plusieurs actions. valeur 3: Action 3
Exemple: Lire (choix) …..
Selon choix Fin selon
1: P’Rouge’
Remarque :
2: P ‘Vert’
Selon la condition, on peut exécuter
3: P ‘Blanc’ une ou plusieurs actions.
Fin selon
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Exercice sur l’alternative: Soit à afficher la plus
petite valeur entre deux nombres entiers
Algorithme plus_petit
Var A,B, Min:entier
Début
Écrire (‘Donnez deux valeurs entières à comparer’)
Lire(A,B)
Si A<B alors MinA
Sinon minB
Fsi /*Fsi n’est pas obligatoire s’il y’a une seule
action*/
Ecrire (‘la plus petite valeur entre:’, A, ‘et’,B, ‘est:’, min)
Fin Algorithme
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les Structures alternatives
Soient C1, C2 deux conditions, et A1, A2 deux
actions (ou groupe d’actions), Il est utile de savoir
que:
Si (C1 et C2) alors A1 Si C1 alors si C2 alors
A1

Si (A<0 et B<0) alors Si (A<0) alors si (B<0)


écrire (‘La somme de’, Exemple alors écrire (‘La somme
A, ‘et’,B, ‘est négative’) de’, A, ‘et’,B, ‘est
négative’)
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les Structures alternatives

Si (C1 ou C2) alors A1 Si C1 alors A1


sinon si C2 alors A1

Si (A<0 ou A>0) Si (A<0)


alors écrire (‘A est non Exemple alors écrire (‘A est non
nul’) nul’)
Sinon si (A>0)
alors écrire (‘A est non nul’)
Cette forme est
plus optimisée en Cette forme est plus
terme d’écriture optimisée en terme de calcul
de l’expression
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les Structures alternatives
Si (C1 ou C2) alors A1 Si (A<0 ou A>0) alors
Sinon A2 écrire (‘A est non nul’)
Sinon écrire (‘A est nul’)

Exemple
Si C1 alors A1
sinon si C2
alors A1 Si A<0 alors écrire (‘A est non nul’)
Sinon A2 sinon si A>0 alors écrire (‘A est non nul’)
Sinon écrire (‘A est nul’)

A2 est exécutée si C1 et C2 sont toutes les deux non


vérifiées
ACTIONS SIMPLES ET STRUCTURES DE
CONTRÔLE
Les Structures alternatives
Si (A<0 et B<0) alors écrire (‘somme est de
Si (C1 et C2) alors A1 signe négatif’)
Sinon A2 Sinon écrire(‘la somme dépend du signe de
la plus grande valeur absolue’)

Si A<0 alors
si B<0
Si C1 alors si C2 alors alors écrire (‘somme est de signe négatif’)
A1 sinon écrire(‘la somme dépend du signe de
sinon A2 la plus grande valeur
absolue’)
Fsi Fsi
Sinon A2 Sinon écrire(‘la somme dépend du signe de la
plus grande valeur absolue’)
Fsi Fsi
Exercice
AFFICHER LE RÉSULTAT ADMIS OU REFAIT L’ANNÉE SELON LA
MOYENNE
Algorithme passage
Var moy:reel
Début
Écrire (‘Donnez la moyenne de l’étudiant’)
Lire(moy)
Si moy>=10 alors Ecrire (‘L étudiant admis en année
suivante)
Sinon Ecrire (‘L Etudiant refait lannée en cours’)
Fsi
Fin Algorithme
Actions simples et structures de contrôle
LES BOUCLES

Une boucle est une structure répétitive,


elle permet la répétition de l’exécution
d’une ou plusieurs instructions un nombre
fini de fois. Cette répétition nécessite une
condition d’arrêt. Il existe trois types de
boucles
La boucle pour
La boucle tant que
La boucle Répéter
Actions simples et structures de contrôle
LA BOUCLE « POUR »
Cette boucle utilise un compteur qui
s’incrémente automatiquement et s’arrête à la
valeur maximale qu’on lui attribue.

Pour nom_variable de (valeur initiale) à


(valeur finale) faire
Début
Bloc d’instructions
Fin pour
Actions simples et structures de contrôle
LA BOUCLE « POUR »(EXEMPLE)
Multiplier la variable 5 fois par lui même (a **
5) Algorithme puiss5
Var a,i,p:entier
Début
Lire (a)
P1
Pour i de 1 à 5 faire pp*a
Fin pour
Ecrire (a, ‘puissance 5 est:’,p)
Fin algorithme
Actions simples et structures de contrôle
LA BOUCLE « POUR »(EXEMPLE)
Déroulement de l’algorithme (Trace)
a i p Entrée de la valeur de
2 1 1 a:
2 2 On suppose que c’est
3 4 2
Affichage sur écran:
4 8 a puissance 5 est 32
5 16
32
Actions simples et structures de contrôle
D’AUTRES CARACTÉRISTIQUES DE LA BOUCLE « POUR »
On peut définir un pas pour l’incrémentation
du compteur.
Exemple: somme de 2+4+6+8+ …+100
S0
Pour i de 2 à 100 pas 2 faire
Début
SS+i
Fin pour
Actions simples et structures de contrôle
D’AUTRES CARACTÉRISTIQUES DE LA BOUCLE « POUR »
La boucle « pour » peut être utilisée avec un
compteur qui se décrémente.
Exemple: somme de 1+2+3+4+ …+50
S0
Pour i de 50 à 1 pas -1 faire
Début
SS+i
Fin pour
Actions simples et structures de contrôle
LA BOUCLE TANT QUE
La boucle tant que utilise une expression
booléenne comme condition d’arrêt de la
répétition.
La boucle tant que est plus générale que la
boucle Pour qui ne peut avoir de condition que
sur le nombre d’itérations spécifié par la valeur
maximale du compteur. (toute boucle « pour »
peut être écrite à l’aide de la boucle « tant que
»).
S’il y’a un compteur, son incrémentation doit être
explicite (ii+1).
Actions simples et structures de contrôle
LA BOUCLE TANT QUE

Tant que expression faire


début
Action1
Action2

Fin tantque
Actions simples et structures de contrôle
LA BOUCLE TANT QUE (EXEMPLE1)
ALGORITHME QUI AFFICHE UN MESSAGE 5 FOIS
Algorithme fois5 Algorithme fois5
Var i:entier Var i:entier
Début Début
i1 Pour i de 1 à 5 faire
Tant que i<=5 faire écrire(‘Je suis bien
début concentré avec le cours ’)
écrire(‘Je suis bien Fin pour
concentré avec le cours ’) Fin algorithme
ii+1 Remarque: Dans le cas d’un
Fin tantque compteur, il est préférable d’utiliser
Fin algorithme la boucle Pour
Actions simples et structures de contrôle
LA BOUCLE TANT QUE
REMARQUE: QU’ARRIVE T-IL SI LA CONDITION D’ARRÊT N’EST
JAMAIS VÉRIFIÉE?
Algorithme fois5 Si l’instruction ii+1
Var i:entier n’existe pas donc i va
Début garder la valeur 1
i1 indéfiniment. Ceci engendre
Tant que i<=5 faire
ce qu’on appelle une
début
écrire(‘Je suis bien boucle infinie  faire
concentré avec le cours ’) toujours un déroulement de
ii+1 votre algorithme pour
Fin tantque s’assurer que tout va bien!
Fin algorithme
LA BOUCLE TANT QUE (EXEMPLE2)
ALGORITHME QUI S’ARRÊTE QUAND L’UTILISATEUR DEVINE LA VALEUR CAC HÉE
Algorithme devine
Const quoi=12
Var a:entier, trouv:booleen
Début
Trouvfaux
Tant que (trouv=faux) faire /* tant que Remarque:
non(trouv) */ Dans ce cas,
Début la boucle «
Écrire (‘introduire une valeur entre 1 et 20’) tant que » ne
Lire(a) peut être
Si a=quoi alors remplacée
écrire (‘BRAVO, vous avez gagné’) avec la
trouvvrai boucle « pour
Sinon écrire (‘Faux, donnez une autre valeur’) ».
Fsi
Fin tantque
Déroulement de l’algorithme (Trace)
quo trouv a Affichage sur écran
i
12 faux Introduire une valeur entre 1 et 20
(1) (2) (3)

1 Faux, donnez une autre valeur


(4) (5)

3 Faux, donnez une autre valeur


(6) (7)

10 Faux, donnez une autre valeur


(8) (9)

Vrai 12 BRAVO, vous avez gagné


(11)
Actions simples et structures de contrôle
LA BOUCLE TANT QUE (EXERCICE)
Compléter l’algorithme devine pour prendre en
considération les cas suivants:
- L’utilisateur peut faire erreur en introduisant les
valeurs hors intervalle souhaité. Il faut lui rappeler qu’il
doit respecter l’intervalle donné.
- L’utilisateur peut arrêter le jeu au moment qu’il
souhaite en lui rappelant cela avec un message.
- On suppose qu’il y’a une fonction random (x,y) qui
génère un nombre aléatoire entre les deux valeurs x et
y.
Actions simples et structures de contrôle

La boucle tant que (exemple3)


Vérifier si un entier est premier ou non.
Analyse:
- Un nombre premier n’est divisible que par 1 et lui-
même
- S’il a un diviseur, il doit impérativement en avoir
deux dont l’un est dans l’intervalle [2,n div 2]
- De ce fait, on minimise les calculs en ne cherchant
les diviseurs que dans l’intervalle cité plus haut.
- Si aucun diviseur n’existe dans cet intervalle, le
nombre est premier.
Algorithme premier
Var n , d : entier
Début
Lire(n)
D2
Tant que (d <= n DIV 2) et ( n MOD d <> 0)
Faire
dd + 1
Fin tantque
Si n mod d <>0 alors écrire (n,’est premier’)
Sinon écrire (n, ‘n.est pas premier’)
Fin algorithme
Actions simples et structures de contrôle
LA BOUCLE RÉPÉTER
La condition d’arrêt d’une boucle répéter est
placée à la fin du bloc à répéter. Cela
garantit l’exécution du bloc au moins une fois
sans tenir compte de la condition d’arrêt.

Répéter
Action 1
Action 2
……
Jusqu’à (condition d’arrêt vérifiée)
Actions simples et structures de contrôle
LA BOUCLE RÉPÉTER (EXEMPLE)
Algorithme qui affiche ‘Bonjour’ jusqu’à ce que
l’utilisateur ne le souhaite plus.

Algorithme Bonjour
Var rep:caractère
Début
Répéter
Écrire (‘Bonjour’)
Écrire (‘voulez –vous d’un autre bonjour : O/N’)
Lire(rep)
Jusqu’à (rep=‘N’)
Fin algorithme
Les Types complexes
LES TABLEAUX
Supposons que nous ayons besoin de conserver les notes
de vingt étudiants de façon qu’on puisse faire différents
traitements sur ces notes et accessibles simultanément.
Solution: Nous pouvons déclarer 20 variables N1,N2,
…,N20 pour conserver ces notes.
Inconvénient 1: Si le nombre d’étudiants est trop élevé
(exemple 100 ou plus), nous devrions déclarer autant de
variables que d’étudiants!!!
Inconvénient 2: Il n’existe pas un lien entre les variables
pour pouvoir faire tous les traitements possibles tel que
le tri qui est un traitement très important en
algorithmique.
Les Types complexes
LES TABLEAUX
La solution au problème précédent est de définir un
vecteur (tableau à une dimension) qui porte un seul nom
exemple « note » où les différentes notes sont
accessibles l’une après l’autre grâce à un indice.

Tableau « note » (de 10 éléments)


14. 10. 11. 6.5 5.5 15 12 12 20 13
5 0 5

Les différents éléments sont accessibles via leurs nom et


leur position dans le tableau: note[1],
note[2],…,note[10]
Les Types complexes
LES TABLEAUX
Avantages de l’utilisation d’un tableau:
Recherche aisée d’une valeur donnée
Tri (classement)
Opérations de mise à jour (modification, rajout de valeurs,
suppression de valeurs).
Exemple pour le tri croissant des valeurs d’un tableau:

14. 10. 11. 6.5 5.5 15. 12. 12. 20. 13.
5 0 5 0 0 0 0 0

5.5 6.5 10. 11. 12. 12. 13. 14. 15. 20.
0 5 0 0 0 5 0 0
Les Types complexes
LES TABLEAUX
Déclaration d’un tableau à une dimension

Type tab=tableau[1..100] d’entier;


Var T:tab
/* déclaration intéressante si on utilise des tableaux de
même type et de même taille */
…….
Ou directement
Var T= tableau[1..100] d’entier;
Les Types complexes
LES TABLEAUX
Accès à un élément d’un tableau
Un élément est accessible via son indice dans le tableau

VT[3]
T[4]X+1

Pour un traitement sur tout le tableau, les boucles


répondent à beaucoup de problèmes posés utilisant les
tableaux.
Les Types complexes
LES TABLEAUX
Lecture des éléments d’un tableau
La lecture des éléments d’un tableau doit se faire à
l’aide d’une boucle. Exemple:

Pour i de 1 à 10 faire
Lire(T[i])
Fin pour
Les Types complexes
LES TABLEAUX
Ecriture des éléments d’un tableau
Si l’on souhaite afficher le contenu des éléments d’un
tableau, on utilise également une boucle

Pour i de 1 à 10 faire
écrire(‘La valeur du’,i,’eme élément est ,’T[i])
Fin pour
Les Types complexes
LES TABLEAUX
Exemple: somme des éléments d’un tableau
Algorithme som_tab
Var T: tableau[1..10] d’entiers, S,i:entier
Début
Pour i de 1 à 10 faire
Lire(T[i]) Lecture des éléments
Fin pour du tableau T
S0
Pour i de 1 à 10 faire
Début On rajoute à S le
SS+T[i] contenu de chaque
Fin pour
élément de T
Écrire (‘La somme est: ‘,S)
Fin Algorithme
Les Types complexes
LES TABLEAUX (LE TRI D’UN TABLEAU)
Il existe plusieurs méthodes pour faire les tri des
valeurs d’un tableau selon l’ordre croissant ou
décroissant.
Le tri par sélection consiste à comparer le premier
élément aux éléments suivants. Si un élément
quelconque est inférieur au premier élément, les valeurs
sont permutées. A la fin la valeur minimale est affectée
à T[1].
L’opération sera répétée avec le 2eme élément en le
comparant aux autres valeurs sauf le premier et ainsi
de suite on compare le 3eme élément, le 4eme,
…jusqu'à l’avant dernier.
Les Types complexes
LES TABLEAUX (LE TRI D’UN TABLEAU)
Pour i de 1 à 10 faire
Lire(T[i])
Fin pour
Pour i de 1 à 9 faire
Pour j de i +1 à 10
Si T[i]>T[j] alors
CT[j]
T[j]T[i]
T[i]C
Fsi
Fin pour
Fin pour
Les Types complexes
LES TABLEAUX (LA RECHERCHE DANS UN TABLEAU TRIÉ)
La recherche d’une valeur dans un tableau non trié
nécessite de parcourir tous ses éléments.
La recherche dans un tableau trié est optimisée, elle
s’appelle une recherche dichotomique.
La recherche dichotomique permet rechercher un
élément dans la moitié du tableau et de comparer la
valeur à la valeur du premier élément du dernier, s’il
est compris entre ses valeurs, on se suffit à la première
partie, sinon la recherche se fait dans la deuxième
partie.
Les Types complexes
LES TABLEAUX (LA RECHERCHE DANS UN TABLEAU TRIÉ)

1 3 4 8 11 15 20 21 25 30

•Supposons que l’on recherche la valeur 4 dans le tableau


• on a deux parties [1 à 11] et [15 à 30] (5 éléments dans
chaque partie)
•On a 4>1 et 4<11, on subdivise encore la partie en deux
tableaux:[1 à 3] et [4 à 11], 4 est supérieur aux éléments
de la première partie donc s’il se trouve il est dans la
deuxième partie. Effectivement, il y’est dans la première
case de cette partie.
• Pour un tableau volumineux, la même démarche est
RECHERCHE DICHOTOMIQUE (ALGORITHME)
Algorithme recherche
Const n=100
Var gauche,droite, milieu,val: entier ; trouv:booléen
T:tableau[1..n] d’entiers
Début
gauche1
droiten
Trouvfaux
Lire (val)
Tant que (non trouv) et (gauche<droite) faire
Milieu(gauche+droite) div 2
Si t[milieu] = val alors trouv  vrai
Sinon Si val > t[milieu] Alors
gauche  milieu+1 Sinon droite  milieu-1
FSi
FSi
Fin tantque
Si trouv alors écrire(‘La valeur ", val , ‘est d.indice’,
milieu)
Sinon écrire(‘La valeur ‘, val , ‘ n.est pas dans le
tableau’)
Fsi
Les Types complexes
LES TABLEAUX (À PLUSIEURS
DIMENSIONS)
Le choix de la borne inférieure à 1 est conseillée en
algorithmique mais cela n’empêche de déclarer un
tableau comme suit
VAR t=tableau[m..n] de type_tableau (avec m<n)
Exemple: var t=tableau[3..20] de réel
Un tableau de plusieurs dimensions est déclaré comme
suit:
Var t=tableau[m1..n1,m2..n2,…] de type_tableau
On utilise souvent les tableaux à deux dimensions pour
le calcul matricielle (matrice transposée, inverse,
produit,…)
Les Types complexes
LES TABLEAUX (À PLUSIEURS DIMENSIONS): EXEMPLE
(CALCUL DE LA SOMME DES ÉLÉMENTS D’UNE MATRICE)
Algorithme dimension2 S0
Var T: tableau[1..10,1..5] Pour i de 1 à 10 faire
d’entiers, S,i,j:entier début
Début Pour j de 1 à 5 faire
Pour i de 1 à 10 faire début
SS+(T[i,j])
début Fin pour
Pour j de 1 à 5 faire Fin pour
début
Lire(T[i,j])
Écrire (‘La somme est: ‘,S)
Fin pour
Fin pour Fin Algorithme
Les Types complexes
Les enregistrements
Un enregistrement est un type spécifique pour des variables
qui sont composés de plusieurs parties appelés « champs »
qui sont de type standard ou à leur tour de type
enregistrement.
L’objectif est d’avoir une variable à deux ou plusieurs parties
qui constituent des propriétés pour une entité donnée.

Exemple: chaque étudiant possède un matricule, un nom, une


moyenne. Ceci peut être décalré comme un type et utilisé
dans un algorithme.
Les Types complexes
Les enregistrements
Déclaration:
Type nom_enregistrement=enregistrement;
Début
champ1: type1

champn: typen
Fin
Exemple
Type etudiant=enregistrement Puis on déclare une
début variable de ce type
Matricule:chaine comme suit:
Nom:chaine Var e:etudiant
Moyenne:reel
Fin
Les Types complexes
Les enregistrements
Accès à un champ donné d’une variable:
Un champ est accessible en spécifiant tout d’abord le
nom de la variable suivi d’un point suivi du nom du
champ correspondant.
Variable_inom_variable.nom_champ

Exemple (si e est de type etudiant déclaré


précédemment)
Ne.nom
Me.moyenne
Les Types complexes
Les enregistrements
Lecture ou écriture d’un champ donné d’une variable:
Un champ est lu ou écrit de la façon suivante
Lire(nom_variable.nom_champ)
Écrire(nom_variable.nom_champ)

Exemple (si e est de type etudiant déclaré


précédemment)
Lire(e.nom)
Lire(e.moyenne)
Exemple pour le type enregistrement
Soit à comparer l’âge de deux étudiants
Algorithme comparer
Type etudiant=enregistrement
Début
Nom:chaine
Age:entier
Fin
Var e1,e2:etudiant
Début
Lire(e1.nom,e1.age,e2.nom,e2.age)
Si e1.age<e2.age alors écrire (e1.nom,’ est plus jeune que: ‘,
e2.nom)
Sinon écrire (e2.nom,’ est plus jeune que: ‘, e1.nom)
Fsi
Fin algorithme
Les Types complexes
Les enregistrements
Types imbriqués: il se peut qu’un champ i soit de type complexe,
dans ce cas, il est déclaré avant le type où il est utilisé
Type type_i=enregistrement
Début
Schamp1:type1

Schampm:typem
Fin
Type nom_enregistrement=enregistrement;
Début
champ1: type1

Champi:type_i

champn: typen
Fin
Les Types complexes
Les enregistrements
Types imbriqués (exemple)
Type date=enregistrement
Début
jour:entier
Mois:entier
annee:entier
Fin
Type etudiant=enregistrement;
début
Matricule:chaine
Nom:chaine
D_naiss:date
Moyenne:reel
Fin
Les Types complexes
Les enregistrements
Types imbriqués (exemple)
Exemple d’une variable de type etudiant (4 champs
dont l’un est composé à son tour de 3champs)

matricul nom jour mois annee moyenne


e
Type date (type
complexe)
Les champs sont accessibles dans ce cas de cette façon:
je.date.jour
Me.date.mois
Ne.nom
Les Types complexes
Exercice (tableau, boucle et le type enregistrement)
Il s’agit d’écrire un algorithme qui affiche les noms des
étudiants dont la note est supérieure à la moyenne du
groupe composé de 40 étudiants.
Analyse
Lire les noms des étudiants et leurs notes respectives
Calculer la moyenne des notes: M=(somme des 40 notes
/40)
Il faut parcourir toutes les notes et chercher les notes Ti
telque Ti>=M
Pour chaque Ti >=M afficher le nom de l’étudiant
correspondant.
Les Types complexes
Algorithme notes
Type etudiant=enregistrement
Début
Nom:chaine
Note:reel
Fin
Var T=tableau[1..40] de etudiant, M,S:reel
Début
S0
Pour i de 1 à 40 faire
Lire(T[i].nom, T[i].note)
SS+ T[i].note
Fin pour
MS/40
Pour i de 1 à 40 faire
Si T[i].note>=M alors écrire(T[i].nom)
Fin pour
Fin algorithme
ANNEXE1: LISTE DES MOTS RÉSERVÉS
Opérateurs logiques: ET, OU, NON
Opérateurs arithmétiques: DIV, MOD
Types: entier, réel, caractère, chaine, booleen
Début/fin: Début, fin, Fpour ou Fin pour, pas, FSI ou Fin
SI, Ftanque ou Fin tantque
Déclaration: const, var, tableau, type, enregistrement
Sous programmes: fonction, procédure, paramètres
Structures : SI, alors, sinon, pour, tant que, répéter,
jusqu’à, selon, faire, de, à
Entrée/sortie: écrire, lire

Remarque: ces mots réservés ne sont pas utilisables


comme noms de variables.
ANNEXE2: ORGANIGRAMME
Un organigramme est la représentation schématique
d’un algorithme. On utilise des formes géométriques
pour exprimer une solution.
ANNEXE2: ORGANIGRAMME

Source: El Sakaan Nadim, « Programmation en langage C », éditions pages


bleues
ANNEXE2: ORGANIGRAMME (EXEMPLE)

Source: http://larp.marcolavoie.ca/fr/description/description.htm
RESSOURCES BIBLIOGRAPHIQUES

B. Meyer et C. Baudoin, « Méthodes de


programmation », Edition Eyrolles, 1978
Nadji Medjaoui, cours d’algorithmique, ESI
El Sakaan Nadim, « Programmation en langage
C », éditions pages bleues.