Vous êtes sur la page 1sur 17

Cours algorithme pour les debutants

1 INTRODUCTION 3
2 NOTIONS DE BASE: 3
2.1 ALGORITHME : 3
2.2 EXEMPLE D’ALGORITHME : 4
3 CONVENTIONS SYNTAXIQUES 5
3.1 SYNTAXE GENERALE D'UN ALGORITHME 5
3.2 LA DECLARATION DES VARIABLES 5
3.3 LES TYPES ELEMENTAIRES DES VARIABLES 6
3.4 OPERATEURS ET EXPRESSIONS 7
4 LES INSTRUCTIONS DE BASE : 9
4.1 L'AFFECTATION 9
4.2 LES OPERATIONS 9
4.3 LE DIALOGUE AVEC L'UTILISATEUR 9
4.4 EXERCICES : 10
5 LA STRUCTURE ALTERNATIVE 10
5.1 LES CONDITIONS 11
5.2 LES ACTIONS 11
5.3 EXERCICES : 12
6 LA STRUCTURE DE CHOIX 12
6.1 EXEMPLE 13
6.2 EXERCICE : CALCUL DU PTTC 13
7 LA STRUCTURE REPETITIVE 13
7.1 LA STRUCTURE REPETTTIVE TANT QUE…FIN TANT QUE 14
7.2 LA STRUCTURE REPETITIVE REPETER ....JUSQU'A 15
7.3 LA STRUCTURE REPETITIVE POUR ....FIN POUR 16
7.4 EXERCICES 17
8 REGLES D'ECRITURE 19
9 EXERCICES COMPLEMENTAIRES 20
9.1 FACTORIELLE : 20
9.2 MOYENNE DES NOTES : 20
9.3 CALCUL D’UNE FACTURE 20
9.4 CALCUL D’UNE FACTURE (SUITE) 20
9.5 DOMAINE DES GARIGUETTES 20
9.6 CALCUL DE LA PAIE : 21
9.7 EXERCICE : LA RECHERCHE DICHOTOMIQUE 21
9.8 TRI PAR INSERTION 21
9.9 FACTURE : 22
9.10 SOMME DES IMPAIRS : 22
9.11 SERIE DES PUISSANCES : 22
9.12 EXPONENTIELLE : 22
9.13 SOMME DES FRACTIONS : 22
9.14 SERIE ALTERNEE : 22
9.15 SERIE APPROCHEE : 22
[/size]

Algorithmique

1 Introduction

L'écriture d'un programme informatique est une tâche exigeante par sa rigueur. Les
ordinateurs exigent perfection et précision dans les instructions qui leurs sont données car
ils ne font que ce qu'on leur demande de faire. Il ne viendrait à l'idée de personne de
rédiger une dissertation sans au préalable construire un plan ; des idées mêmes bonnes ne
suffisent pas à faire une bonne rédaction, une structure est nécessaire à leur cohésion. II
en est de même en informatique, faute de méthode nombre de programmes ne
fonctionnent jamais ou le font très mal. Apprendre à programmer consiste plus à acquérir
une démarche d'esprit, une méthodologie, qu'à connaître les tours et détours d'un langage
de programmation. Connaître un langage de programmation n'est pas savoir programmer,
de même qu'apprendre par cœur le dictionnaire ne signifie pas savoir rédiger un roman.
Programmer, c'est définir précisément le problème à résoudre, décrire peu à peu une
solution et après seulement l'exprimer dans un langage de programmation. Dans cette
démarche, l'activité la plus créative n'est pas le codage, mais l'analyse du problème.
L'algorithmique doit être perçue comme un outil favorisant la réflexion, l'analyse d'un
problème, tout en gommant les difficultés inhérentes au langage de programmation.
II est nécessaire dans un premier temps de prendre conscience de la difficulté que nous
avons d'exprimer la solution à un problème donné de façon complète et non ambiguë.
Dans la situation de résolution d'un problème on considère deux étapes
• Qu'avons nous à faire : QUOI
• Comment allons-nous résoudre le problème : Expression du COMMENT
Deux étapes distinctes, l'analyse précédant toujours la conception.
Nous utiliserons une forme algorithmique pour exprimer le résultat de notre analyse
détaillée.
2 Notions de base:

Algorithmique : Sciences des algorithmes utilisés notamment en informatique ( Petit


larousse). Concrètement cela consiste en la conception et la rédaction d'algorithmes.
2.1 Algorithme :

Le mot vient du nom du mathématicien arabe du 9° siècle MOHAMMED IBN AL KHAREZIN.


Il en existe beaucoup de définitions. A titre d'exemple en voici quelques unes

• c'est une succession de calculs numériques (Larousse).


• c'est un ensemble de règles opératoires propres à un calcul (Petit Robert)
• c'est une suite finie d'opérations élémentaires constituant un schéma de calcul ou de
résolution d'un problème (Petit Larousse)
• c'est un procédé spécial de résolution d'un certain type de problèmes. (Dictionnaire des
mathématiques
ou encore :
• C’est une suite d'actions que devra effectuer un automate pour arriver, en un temps fini,
à un résultat déterminé à partir d'une situation donnée. Cette suite d'actions sera
composée d'actions élémentaires

Mais c'est KNUTH qui, dans "THE ART OF COMPUTER PROGRAMMING" , en donne les
caractéristiques complètes.
Un algorithme permet de passer d'un état initial à un état final de façon déterministe et
doit respecter les 5 caractéristiques suivantes

• il est fini et se termine après un nombre fini d'opérations.


• il est défini sans ambiguïté.
• il manipule des objets qui doivent être définis de façon précise.
• doit avoir au moins un résultat.
• il doit être effectif : toutes les opérations doivent pouvoir être effectuées exactement et
dans un temps fini par un homme utilisant des moyens manuels.

Dans les actions de la vie quotidienne, notre cerveau déroule à longueur de journée des
algorithmes, qu'il s'agisse de faire la cuisine ou de changer une roue de voiture.

Les actions ou opérations d'un algorithme sont décrites à l’aide de mots (verbes, locutions,
...) respectant des règles syntaxiques et de présentation qui en facilitent la
compréhension. Toutes ces règles définissent la notation algorithmique.

Les algorithmes utilisent un pseudo-langage, comportant toutes les structures de base


d'un langage de programmation.
2.2 Exemple d’algorithme :

Algorithme relatif au changement d'une roue exprimé en langage naturel.

Début
1. ouvrir le coffre
2. prendre la roue de secours
3. Si la roue de secours est crevée Alors
4. appeler un garagiste
Sinon
5. sortir le cric et la clé à boulons du coffre
6. dévisser légèrement les boulons avec la clé
7. Répéter
8. tourner la manivelle du cric
jusqu'à ce que la roue crevée ne touche plus le sol
9. dévisser complètement les boulons.
10. retirer complètement la roue endommagée
11. Répéter
12. tourner la manivelle du cric
Jusqu'à ce que la roue de secours puisse être placée
13. monter la roue de secours
14. visser les boulons
15 abaisser le véhicule avec le cric
16. visser fortement les boulons
17. Ranger le cric, la clé et la roue crevée
Fin si
18. fermer le coffre
Fin

Ce simple exemple, nous permet de constater


• Que l’ordre des opérations est important Il n'est guère possible d'intervertir par exemple
les opérations 5 et 6.
• Qu'à une ou plusieurs opérations peuvent être dépendantes de conditions (Si ...Alors ...)
ou bien répétées (Répéter ... Jusqu'à).

Complétons la définition d'un algorithme, en précisant que les actions d'un algorithme
s'articulent à l’aide de structures de base.
Les structures de base d'un algorithme sont :

• la structure séquentielle (ensemble d'opérations à la suite les unes des autres)


• la structure conditionnelle (ensemble d'opérations soumises à une condition)
• la structure répétitive (ensemble d'opérations répétées un nombre fini de fois)

Ces trois structures constituent les briques de base de tout algorithme et permettent de
résoudre n'importe quel problème, qu'il s'agisse de la simple addition de 2 nombres ou du
pilotage d'un module lunaire. Elles permettent de décrire de façon statique le
comportement dynamique d'un flot d'actions qui se déroulent
3 CONVENTIONS SYNTAXIQUES

Nous définissons dans la suite du cours le langage algorithmique ou langage de conception


structurée (L.C.S) que nous utiliserons. Ce langage comme tout langage obéit à une
syntaxe
3.1 Syntaxe générale d'un algorithme

Un algorithme écrit en langage de conception structuré (L.C.S) doit répondre à la syntaxe


suivante :

Algo <identificateur>
[<déclarations>]
début
[<instructions>]*
fin

• <identificateur> permet de nommer l’algorithme


• <déclarations> permet de déclarer les objets utilisés par l’algorithme
• <instructions> permet d'indiquer l’ensemble des actions élémentaires

Exemple :

algo Somme
var a, b, Résultat : entier
début
afficher "Entrez les valeurs"
Lire a
Lire b
a + b⇓Résultat
afficher "Résultat", Résultat
fin
Les mots-clés, constitutifs de la syntaxe de l’algorithme sont indiqués en gras.
Les lignes de l'algorithme sont indentées afin d'en faciliter la lecture.
3.2 La déclaration des variables

La plupart des langages de programmation obligent à déclarer au début tous les objets
qui, seront utilisés par la suite, en indiquant leur type. Nous adoptons cette règle lors de
l’écriture des algorithmes en L.C.S. Ainsi :

• tous les objets sont décrits en tête de l'algorithme.


• en même temps que l'objet on déclare son type, ce qui évite toute ambiguïté sur son
utilisation.

Donnez aux objets des identificateurs parlants !Φ

N'appelez pas T un objet représentant le total d'une facture, mais appelez le plutôt
Total_Facture ou TotalFacture.

Exemple de déclarations de variables :

Var NomElève , PrenomElève : chaîne


Var a,b : entier
Var Montant, PrixTtc : réel
Var Exact : booléen
3.3 Les types élémentaires des variables

• ENTIER :
Un objet de ce type peut prendre une valeur entière comprise généralement entre
-32768 et +32767 .

• REEL :
Un objet de ce type peut prendre une valeur décimale dont la valeur absolue est dans
l'intervalle : [5.3976E -79 , 7.2370E+75]

• CARACTERE :
Il y a 128 caractères ( "A", "a" ou "!", "@"). (voir code ASCII). Attention : le symbole 1
correspond à la valeur entière "un", alors que "1" correspond. au caractère 1.Certains
caractères (de 0 à 19) ne peuvent être imprimés, par exemple le caractère de code 07 est
en fait le bip sonore.

• CHAINE :
Tout objet pouvant prendre comme valeur une suite ou une chaîne de caractères est de ce
type. La suite peut être vide.
Exemple : "Bonjour à vous tous" est une expression type chaîne de caractères.

• BOOLEEN :
Un objet de type BOOLÉEN prend sa valeur dans l'ensemble {.vrai., .faux. }.

Les tableaux

On peut regrouper plusieurs variables sous un même nom, chacune étant alors repérée
par un numéro. C'est ce que l’on appelle un tableau. On peut faire un tableau avec des
variables de n'importe quel type.
Dans tous les cas d'un tableau appelé TAB sera adressé par TAB(i).
Généralement on fait des tableaux à une dimension, mais il existe également des tableaux
à deux dimensions, dans ce cas TAB(i,j) représente la jème colonne et la ième ligne. La
déclaration d’un tableau est la suivante :

TABLEAU variable [longueur] : type

Exemples :

TABLEAU liste_nb [25] : ENTIER

3.4 Opérateurs et expressions


Nous donnons ci-après la liste des opérateurs applicables aux différents types de variables.

3.4.1 Opérateur de concaténation

Il relie des caractères ou des chaînes de caractères pour constituer une nouvelle chaîne de
caractères. On utilise essentiellement le caractère "&"

Exemples "A" & "B" = "AB"


"Bon"&"jour" = "Bonjour"
3.4.2 Opérateurs et expressions arithmétiques

Opération Opérateur Priorité Exemple


Addition + 1 a + b
Soustraction - 1 a - b
Multiplication * 2 a * b
Division / 2 a ./ b
Elévation à la puissance ^ 3 a ^ b
Division entière Div 1 a Div b
Reste de la division entière Mod 1 a Mod b

Les opérateurs arithmétiques associés aux variables de type entier ou réel, permettent la
construction d'expression arithmétique.

Exemple d'expressions arithmétiques :

A*x^2 + b*x+c
MontantHt * 1.206

La priorité d'un opérateur conditionne l’ordre d'interprétation de celui-ci dans l’expression


arithmétique. Plus la priorité est élevée, plus tôt l'opérateur sera interprété.

Les parenthèses peuvent être utilisées pour pré-déterminer l’ordre d'interprétation des
opérateurs.
Ainsi pour x = 8 l’expression "2*(x + 11)" sera égale à 38.
3.4.3 Opérateurs relationnels

Opérateur Signification
= Egal
<> Différent
< inférieur
<= Inférieur ou égal
> supérieur
>= Supérieur ou égal

Les opérateurs relationnels s'appliquent essentiellement aux objets de type entier, réel,
caractère et chaîne de caractères. Ainsi il est possible de comparer des données de même
type entre elles pour savoir si elle sont égales, plus grandes ou plus petites. La
comparaison de deus chaînes de caractères est également possible et s'effectue caractère
par caractère, de gauche droite, en comparant les codes ASCII respectifs.

Exemple Résultat
11 > 8 vrai
11 < 8 faux
"A" < "G" vrai
"A" > "G" faux
"grand" < "petit" vrai
"grand" > "petit" faux
3.4.4 Opérateurs et expressions logiques

Ils relient des expressions logiques ou des identificateurs. On en utilise essentiellement


quatre, qui sont par ordre de priorité croissante :

Opérateurs signification Priorité


NON Non logique 1
OU Ou logique 2
ET Et logique 2
OUX Ou exclusif 3

Un opérateur logique ne s'applique qu'aux objets de type booléen. Une expression logique
est toujours de type booléen et respecte les tables de vérité définies pour chaque
opérateur logique.

Tables de vérité des opérateurs logiques

NON
Vrai FAUX
Faux Vrai

Exemples

Non Faux = Vrai


Non Vrai= Faux

OU Vrai Faux
Vrai Vrai Vrai
Faux Vrai Faux

Exemples

Vrai OU Faux = Vrai


Vrai OU Vrai = Vrai

Exemples d'expressions logiques :

1. NON (Vrai ET Faux) = Vrai


2. (Vrai OU (Vrai ET faux)) = Vrai 3. (5> =10) OU (20 > 18) = Vrai
4. ( (8 >= 82) OU (98> 68) ) ET (182 = 182) ET ("grand" < "petit") = Vrai
4 Les instructions de base :
4.1 L'affectation

Valeur⇓Variable

Ce qui se lit "variable reçoit valeur" et qui signifie que l'on mémorise la valeur à un endroit
nommé variable.
Par exemple :

1⇓i
VRAI⇓Termine
4.2 Les opérations

Les opérations arithmétiques courantes, addition, soustraction, multiplication et division


s'écrivent Ainsi :

Val1 + Val2⇓Variable
Val1 -⇓Variable Val2
Val1 * Val2⇓Variable
Val1 / Val2⇓Variable

On doit toujours affecter le résultat d'une opération dans une variable.


4.3 Le dialogue avec l'utilisateur

Pour permettre au programme de dialoguer avec l'utilisateur, c'est à dire d'afficher un


résultat à l'écran et de lire une entrée au clavier, il faut au moins deux instructions une
pour lire, l'autre pour afficher.
Dans le Pseudo-langage elles s'écrivent ainsi :

LIRE Variable
AFFICHER Texte, Variable…
La première lit tous les caractères qui sont saisis au clavier, jusqu'à ce que l'utilisateur
appuie sur la touche entrée, et stocke le résultat dans la variable.

La seconde affiche sur l'écran le ou les textes et la valeur des variables.

Exemple : algorithme permettant de calculer et d'afficher la surface S d'un cercle à partir


du rayon R:

algo Surface
var Rayon, Surface : réels
Début
Lire Rayon
3.14*Rayon*Rayon⇓Surface
Afficher Surface
Fin

4.4 Exercices :

Ecrire l'algorithme pour calculer chacune des expressions suivantes:

1) B = N * (N+1) / 2
2) H = A + (N-1) * R
3) A = B * N + 1
S=A*D-1
4) M = (N-1) * R
P = 1 + M²
Q=M+P-H
5 La structure alternative

II est souvent nécessaire lorsque l'on écrit un programme de distinguer plusieurs cas
conditionnant l'exécution de telles ou telles instructions. Pour ce faire, on utilise une
structure alternative : si on est dans tel cas, alors on fait cela sinon on fait ceci.
La structure alternative permet d'exécuter, à un instant donné une action, ou une autre
action, exclusivement l'une de l'autre. Il s'agit donc de deux actions conditionnées par des
prédicats complémentaires.
La syntaxe de cette instruction est la suivante :

Si <expression logique> ALORS


{<instruction si vrai> }*
[SINON
{<instruction si faux> }*]
Fin Si

Les crochets signifient que la partie SINON {<instruction si faux> }*] est facultative.

Exemple1 :

Afficher le plus grand des deux nombres a et b

Algo PlusGrand
Var a, b : entier
Début
afficher "Entrez deux nombres : "
Lire a
Lire b
afficher "Le plus grand des deux est :"
Si a >= b Alors
afficher a
Sinon
afficher b
Fin Si
Fin

Exemple2 :

Soit à résoudre l'équation du premier degré: Ax + B = 0


- On donne : A et B
- On demande: La valeur de x.

Suivant les valeurs de A et de B, x prendra les valeurs suivantes:

0≠ x= -B/A si A ◊
La◊ valeur de x est indéterminée si A=0 et B=0
≠ x est impossible si A=0 et B ◊ 0

On a alors l'algorithme suivant:

Algo Equation
Var A , B, X : réels
Début

Lire A, B
Si A <> 0 Alors
-B/A⇓X
Afficher X
Sinon Si B <> 0 Alors
Afficher "Impossible"
Sinon
Afficher " Indétermination"
Fin SI
Fin SI
Fin
5.1 Les conditions

Pour exprimer les conditions on utilise les opérateurs conditionnels suivants

= égal
< inférieur
> supérieur
<= inférieur ou égal
>= supérieur ou égal
<> différent

On peut combiner des conditions à l'aide des opérateurs logiques suivants : ET OU NON
XOR (ou exclusif).

(a < 2 ) ET ((b=0) OU (c <> a )) XOR (d=1))

Lorsque l'on écrit de telles conditions, il est recommandé de mettre toutes les parenthèses
afin d'éviter les erreurs.
5.2 Les actions

Les actions qui suivent le SINON ou le ALORS peuvent être


une simple instruction
une suite d'instructions séparées par des :
une autre alternative
une répétitive

5.3 Exercices :
5.3.1 Calcul d'une remise sur facture:

Une société accorde à ses clients une remise (R), en fonction du montant de la facture
(MF).

Si MF < 1000 alors R= 0


MF≤Si 1000 < 2000 alors R= 4% de MF
2000 alors R= 7% de MF≥Si MF
Représenter l'algorithme qui calcule R.
5.3.2 Calcul d'un salaire:
Le calcul du salaire d'un ouvrier se fait de la façon suivante:

Le salaire total (ST)= Salaire brut (SB) + Prime (P)


La prime (P) dépend de la valeur du salaire brut (SB)
1000≤Si SB alors P=200 DH
Si SB > 1000 alors P=500 DH

Ecrire l’algorithme qui calcule le salaire total

- Les données sont: SB


- Les résultats sont: P et ST
5.3.3 Calcul du prix d'une marchandise:

On veut calculer le prix d'une marchandise. Pour cela on a:


Le prix(P) = prix unitaire(PU) * quantité(Q)
Sur cette marchandise on a une remise (R) de 10% 4000 DH≥si P
Le prix total (PT) = P - R
Ecrire l’algorithme qui calcule PT. Et affiche R et PT
5.3.4 Un patron décide de calculer le montant de sa participation au prix du repas de ses
employés de la façon suivante :

si l’employé est célibataire participation de 20%


si l’employé est marié participation de 25%
si l’employé a des enfants participation de 10% supplémentaires par enfant

Si le salaire mensuel est inférieur à 6000 DH la participation est majorée de 10%

La participation est plafonnée à 50%

Ecrire l’algorithme qui lit les informations au clavier et affiche pour chaque salarié, la
participation à laquelle il a droit.
6 La structure de choix
La sélection ou choix multiple permet de présenter une solution à des problèmes ou un
nombre important de cas, mutuellement exclusifs, sont à envisager en fonction des valeurs
prises par une seule variable ou expression. Puisque chaque action est exclusive des
autres, la structure sélective correspond à une imbrication d'alternatives.

Selon <expression>
{Cas expression : <instructions>}*
[Cas Sinon : <instructions>]
{Fin Selon}
6.1 Exemple

Attribution de la mention à un élève en fonction de sa moyenne générale.

Algo Mention
Var Nomeleve, Mention : chaine
Var MoyenneGénerale : réel
Début
Lire "Veuillez indiquer le nom de l’élève ", NomElève
Lire "Veuillez indiquer la moyenne de l'élève ", MoyenneGénérale
Selon MoyenneGénérale
Cas >=0 et < "Faible"⇓= 8 : Mention
Cas > 8 et <= 12 : "Moyen"⇓Mention
Cas >12 et < "Bien"⇓= 15 :Mention
Cas > 15 et < "Très bien"⇓= 20 :Mention
Cas Sinon
Afficher " La moyenne générale n'est pas comprise entre 0 et 20"
Fin Selon
Afficher "L'élève ", NomElève, " obtient la mention ", Mention
Fin
6.2 Exercice : CALCUL DU PTTC
On veut calculer le prix toute taxe comprise (PTTC), d'une marchandise, à partir de la
valeur du prix hors de taxe (PHT) et du code de la TVA. Celui-ci est donné par le tableau
suivant:

CODE Taux de la TVA (TTVA)


1 0,07
2 0,1232
3 0,186
4 0,3333

On a: PTTC = PHT + PHT*TTVA

Ecrire l’algorithme qui calcule le PTTC:


Données: PHT, CODE ( de 1 à 4)
Résultats: PTTC
7 La structure répétitive
Un programme a presque toujours pour rôle de répéter la même action un certain nombre
de fois. Pour ce faire on utilise une structure permettant de dire " Exécute telles actions
jusqu'à ce que telle condition soit remplie".
Bien qu'une seule soit nécessaire, la plupart des langages de programmation proposent
trois types de structures répétitives. Voici celles de notre pseudo-langage.

7.1 LA STRUCTURE REPETTTIVE Tant Que…Fin tant que

Syntaxe :

Tant que <expression logique> faire


{<instruction >}*
Fin tant que
7.1.1 Action

La sémantique est la suivante:

On teste d'abord si <expression logique> est vraie. Dans ce cas on exécute <instruction>
puis on boucle de nouveau sur le test de <expression logique>. Par contre si <expression
logique> est fausse la boucle se termine et le programme poursuit son exécution après
"fin tant que".
7.1.2 Remarques :
• Le test est effectué avant l'exécution du bloc, il est donc possible de n'avoir aucune
exécution du bloc d'instructions.
• Comme il est conseillé de ne pas boucler indéfiniment, une instruction au moins du bloc
<instruction> doit agir sur l'expression logique pour la rendre fausse.
• Le bloc <instruction> peut contenir des structures alternatives et des structures
répétitives imbriquées.
7.1.3 Exemple
Multiplication de 2 entiers positifs en n'utilisant que l'addition.
Produit = A+A+A+ ... +A (◊⇓Produit = A x B L'addition est effectuée B fois )
La valeur de la variable B est stockée dans une variable décrémentée à chaque boucle.
Boucle dans laquelle on additionne la valeur de A à la valeur précédente de Produit
(Produit est initialisé à 0).
7.1.4 Algorithme
Algo multiplication
Var Produit, A, B, Compteur : entier
Début
0⇓Produit
Afficher "Veuillez indiquez 2 entiers positifs "
Lire A
Lire B
B⇓Compteur
Tant que Compteur <> 0 faire
Produit + A⇓Produit
Compteur⇓Compteur – 1
Fin tant que
Afficher "Le produit de ",A," par ",B," est égal à:" , Produit
Fin

Cet exemple très simple montre les 3 points à vérifier lors de l’utilisation d'une structure
répétitive:

• l'initialisation des variables qui interviennent dans l'expression logique.


• l'établissement d'une expression logique correcte, c'est-à-dire provoquant à un moment
donné un arrêt du traitement.
• les précautions à prendre en cas d'intervention sur les variables utilisées dans
l'expression logique.
7.2 La structure répétitive Répéter ....Jusqu'à

Syntaxe :

Répéter
{<instruction>}*
Jusqu’à (<expression logique>)
7.2.1 Action
La sémantique est la suivante:

1. Le bloc <instructions> est exécuté


2. L' <expression logique> est testée.
3. Dans le cas où elle est égale à faux, on recommence au point 1. Dans le cas où elle est
égale à vrai , le programme poursuit son exécution après l'instruction "Jusqu'à "
7.2.2 Remarques
• Avec cette forme de structure répétitive, le bloc d'instructions est exécuté au moins une
fois ! Cela peut être source d'erreurs dans certains cas.
• La condition exprimée par l'expression logique est l'expression contraire de celle
exprimée dans la structure répétitive de type "Tant que".
7.2.3 Exemple
Ainsi pour passer de la structure Tant ...Que à la structure Répéter... Jusqu'à il suffit
d'inverser la condition d'arrêt (Compteur <> 0 devient Compteur = 0)
7.2.4 Algorithme
Algo multiplication
Var Produit, A, B, Compteur : entier
Début
0⇓Produit
Afficher "Veuillez indiquez 2 entiers positifs "
Lire A
Lire B
B⇓Compteur
Répéter
Prod⇓uit Produit + A
Compteur – 1⇓Compteur
Jusqu’à Compteur = 0
Afficher "Le produit de ",A," par ",B," est égal à:" , Produit
Fin

Mais dans le cas où B est inférieur ou égal à zéro l'algorithme boucle car les instructions
comprises dans la boucle sont exécutées au moins une fois ! D'où la nécessité de forcer
l'utilisateur à introduire deux valeurs strictement positives !

La structure répétitive Répéter...Jusqu’à permet d'ailleurs de gérer plus facilement le


contrôle sur les données à saisir puisqu'un seul message suffit

Elle est très souvent utilisée pour contrôler des données saisies..

Algo multiplication
Var Produit, A, B, Compteur : entier
Début
0⇓Produit
Répéter
Afficher "Veuillez indiquer 2 entiers positifs"
Lire A
Lire B
Jusqu’à (A > 0 et B > 0)
B⇓Compteur
Répéter
Produit + A⇓Produit
Compteur –⇓Compteur 1
Jusqu’à Compteur = 0
Afficher "Le produit de ",A," par ",B," est égal à:" , Produit
Fin
7.3 La structure répétitive Pour ....Fin pour

Cette action permet de répéter l'exécution d'une ou plusieurs instructions un nombre de


fois déterminé. Le nombre des répétitions est connu ou déterminable avant la première
exécution de l'action concernée. L'exécution est conditionnée par l’observation d'une
variable de test, appelée indice de boucle ou compteur, qui est initialisée puis incrémentée
ou décrémentée de façon implicite, après chaque passage dans la boucle. La condition
porte uniquement sur le nombre de répétitions.

Syntaxe :

Pour <identificateur> de <expression début> à <expression fin> [pas de <expression


pas>]
{<instructions>}*
Fin Pour

<identificateur> est une variable de type entier.


<expression début>, <expression fin> et <expression pas> sont des expressions
numériques de type entier.
7.3.1 Action

La sémantique est la suivante:

4. <identificateur> est une variable assimilée à un compteur qui est automatiquement


augmenté ou diminué en fonction de <expression pas>.
5. Au début, <identificateur> prend la valeur de <expression début>.
6. Le bloc d'instructions est exécuté jusqu'à ce que <identificateur> prenne la valeur de
<expression fin>.
7. La valeur <identificateur> évolue de <expression début> jusqu’à <expression fin> en
fonction de <expression pas> qui par défaut est égale à 1.

7.3.2 Exemple
Affichage de la table de multiplication de 10

Algo Table_Multiplication_De_Dix
Var k :entier
Début
Afficher "table de multiplication de 10"
Pour k de 1 à 10
afficher k," * 10 = ",k*10
Fin pour
Fin

Dans cet algorithme, le pas de progression de l'indice k est implicitement 1.


Cet algorithme délivre les résultats suivants :

1 * 10 = 10
2 * 10 = 20

8 * 10 = 80

10 * 10 = 100
7.4 Exercices
7.4.1 Modifier l'exercice 5.3.4 pour que l'on ne soit pas obligé de relancer le programme
pour chaque employé
7.4.2 Ecrire un algorithme qui permette de saisir des nombres entiers et en affiche la
somme et la moyenne (on arrête la saisie et on affiche les résultats lorsque l'on saisit la
valeur (0).
7.4.3 Les statistiques

On saisit des entiers (comme dans l'exercice précédent) et on les range dans un tableau
(maximum 50)

Ecrire un algorithme qui affiche la liste, le maximum, le minimum et la valeur moyenne de


ces nombres.
7.4.4 Le tri par sélection

N.B. : Dans tous les exercices qui suivent on étudie différents algorithmes permettant de
trier un tableau de 10 entiers. Afin d'expliquer les algorithmes, on prendra en exemple le
tableau suivant :

52 10 1 25 62 3 8 55 3 23

Le premier algorithme auquel on pense pour effectuer ce tri est celui ci


on cherche le plus petit élément du tableau et on le place en 1er, puis on cherche le plus
petit dans ce qui reste et on le met en second , etc...

52 10 1 25 62 3 8 55 3 23
1 52 10 25 62 3 8 55 3 23
1 3 52 10 25 62 8 55 3 23
1 3 3 52 10 25 62 8 55 23
1 3 3 8 52 10 25 62 55 23
1 3 3 8 10 52 25 62 55 23
1 3 3 8 10 23 52 25 62 55
1 3 3 8 10 23 25 52 62 55
1 3 3 8 10 23 25 52 62 55
1 3 3 8 10 23 25 52 55 62

Ecrire l'algorithme qui permet de réaliser ce tri.


7.4.5 le tri bulle

Le tri bulle est un tri plus astucieux. son principe est de faire remonter petit à petit un
élément trop grand vers le haut du tableau en comparant les éléments deux à deux. Si
l'élément de gauche est supérieur à son voisin de droite on les inverse et on continue avec
le suivant. Lorsque l'on est en haut du tableau on repart au début et on s'arrête lorsque
tous les éléments sont bien placés.

52 10 1 25 62 3 8 55 3 23
10 52 1 25 62 3 8 55 3 23
10 1 52 25 62 3 8 55 3 23
10 1 25 52 62 3 8 55 3 23
10 1 25 52 62 3 8 55 3 23
10 1 25 52 3 62 8 55 3 23
10 1 25 52 3 8 62 55 3 23
10 1 25 52 3 8 55 62 3 23
10 1 25 52 3 8 55 3 62 23
10 1 25 52 3 8 55 3 23 62

On a parcouru tous le tableau, on recommence, jusqu'à ce que tout soit bien placé.

Ecrire l'algorithme qui réalise ce tri.


7.4.6 le tri par permutation

Le tri par permutation est le tri du jeu de cartes. On parcourt le tableau jusqu'à ce que l'on
trouve un élément plus petit que le précédent, donc mal placé. On prend cet élément et on
le range à sa place dans le tableau puis on continue la lecture. On s'arrête à la fin du
tableau.

52 10 1 25 62 3 8 55 3 23
10 52 1 25 62 3 8 55 3 23
1 10 52 25 62 3 8 55 3 23
1 10 25 52 62 3 8 55 3 23
1 3 10 25 52 62 8 55 3 23
1 3 8 10 25 52 62 55 3 23
1 3 8 10 25 52 55 62 3 23
1 3 3 8 10 25 52 55 62 23
1 3 3 8 10 23 25 52 55 62

Ecrire l'algorithme qui réalise ce tri.

7.4.7 le tri par comptage

Le tri par comptage consiste pour chaque élément du tableau à compter combien
d'éléments sont plus petits que lui, grâce à ce chiffre on connaît sa position dans le tableau
résultat.

52 10 1 25 62 3 8 55 3 23
Nombre 7 4 0 6 9 1 3 8 1 5
Position 8 5 1 7 10 2 4 9 3 6

Résultat après tri :

1 3 3 8 10 23 25 52 55 62

7.4.8 le tri alphabétique

Le programme consiste à saisir des mots (au maximum 10) de 20 caractères maximum et
de les insérer dans un tableau dans l'ordre alphabétique. Puis d'afficher ensuite ce tableau.
Le tableau résultat est du type TABLEAU CAR [10,20].
8 Règles d'écriture

Un programme doit être le plus lisible possible, de manière à ce que n'importe qui d'autre
que l'auteur soit capable de comprendre ce qu'il fait rien qu'en le lisant. Pour cela il faut
suivre les quelques règles suivantes

• le nom des variables doit être significatif, c'est à dire indiquer clairement à quoi elles
servent
• un algorithme ne doit pas être trop long (une page écran). S'il est trop long, il faut le
découper en fonctions et procédures (voir Chapitre suivant)
• Les structures de contrôle doivent être indentées, c'est à dire, par exemple, que les
instructions qui suivent le ALORS doivent toutes être alignées et décalées d'une tabulation
par rapport au SI. II en est de même pour les répétitives.
• A chaque imbrication d'une structure de contrôle, on décale d'une tabulation.

En ce qui concerne les fonctions et procédures, il y a aussi des règles à respecter :


• On doit toujours être capable de donner un nom significatif à une procédure ou à une
fonction.
• Le nombre de paramètres ne doit pas être trop grand ( en général inférieur à 5) car cela
nuit à la lisibilité du programme.
• Une procédure ou une fonction doit être la plus générale possible de manière à pouvoir
être réutilisée dans d'autres circonstances.
• Si le but d'une procédure est de calculer une valeur simple, il est préférable d'en faire
une fonction.
• II est souvent plus clair d'écrire une fonction booléenne plutôt qu'une condition
complexe.

9 Exercices complémentaires
9.1 Factorielle :
Ecrire l’algorithme permettant de calculer la factorielle d’un nombre.
9.2 Moyenne des notes :
On veut calculer la moyenne des notes de plusieurs matières. Chaque matière a un
coefficient différent
Données : la note de chaque matière
son coefficient
Résultats : - La moyenne des notes sur 20

9.3 CALCUL D’UNE FACTURE


Établissez la facturation d'un article livré en un ou plusieurs exemplaires. Le taux de T.V.A
est supposé être toujours de 18,6 %. Si le montant est supérieur à 1 000 DH, une remise
de 1% est accordée.

Données : le prix unitaire « hors taxes » de l'article


le nombre d'articles
Résultats : - le prix « hors taxes » de l'ensemble des articles
- le montant de la T.V.A.
-le montant de la remise (on l'affichera, même s'il est nul)
-le montant net à payer.
9.4 CALCUL D’UNE FACTURE (suite)
Modifier l’exercice précédent pour établir la facturation de plusieurs articles livré en un ou
plusieurs exemplaires chacun. Le taux de T.V.A est supposé être toujours de 18,6 %. Si le
montant est supérieur à 1 000 DH, une remise de 1 % est accordée.

Données : - Le nom de chaque article


- le prix unitaire « hors taxes » de chaque article
le nombre de chaque article
Résultats : - Liste contenant : le nom des articles, leur prix total (prix unitaire * nombre)
- le prix « hors taxes » de l'ensemble des articles
- le montant de la T.V.A. pour tous les articles.
-le montant de la remise (on l'affichera, même s'il est nul) pour tous les articles.
-le montant net à payer.
9.5 Domaine des Gariguettes

Le propriétaire du domaine des Gariguettes vous demande de calculer et d'afficher le


montant du séjour de ses clients en sachant que :
Le coût d'une nuit en chambre d'hôte est de 175 DH du 1 er mai au 30 juin inclus
210 DH du 1 juillet au 31 août inclus
175 DH du 1er septembre au 15 octobre inclus

L'établissement est fermé au public du 16 octobre au 30 avril.

NB : Vous devez utiliser un nouveau type de données : Date. On peut effectuer des
comparaisons et des calculs sur les dates.
9.6 Calcul de la paie :

Vous êtes employé dans une SSI. On vous demande de réaliser le programme permettant
de calculer la paie des salariés. Les données à saisir chaque mois sont :

• Nombre d’heures normales


• Nombre d’heures supplémentaires travaillées entre 5 H et 10 H du soir
• Nombre d’heures supplémentaires travaillées entre 5 H et 10 H du soir le week-end
• Taux horaire (ou salaire horaire des heures normales).
Pour les heures supplémentaires du soir le taux horaire est de 125%. Pour les heures
supplémentaires du soir du Week-end le taux est de 150%
• L’ancienneté.
• Si l’employé est célibataire ou marié et dans ce cas :
• le nombre d’enfants.
• le taux de cotisation à la CNSS
• le taux de cotisation à une retraite complémentaire ( la CIMR)
• le taux de cotisation à une assurance maladie.
• Le taux des frais professionnels.

Etablissez l’algorithme permettant de calculer le salaire net d’un employé.


9.7 Exercice : la recherche dichotomique

Cet algorithme permet de ranger un élément à sa place ou de le trouver dans une liste de
manière très rapide. On possède une liste de N entiers triés, on cherche la place d'un
nombre X. On compare X à l'élément du milieu de tableau, si il est inférieur on réduit le
tableau à sa partie gauche, si il est supérieur on réduit le tableau à sa partie droite. On
réitère l'opération jusqu'à ce que le tableau ait moins de 2 éléments.

1 3 3 5 6 8 12 25 26 42 53 55 , on veut y insérer le chiffre 7


6 ème élément 8 +=> on insère 7 dans 1 3 3 5 6 8
3ème élément 3 ==> on insère 7 dans 5 6 8
2ème élément 6 ==> on insère 7 dans 6 8

==> 7 est entre 6 et 8

Ecrire le programme qui insère le chiffre à sa place dans le tableau en utilisant fonctions et
/ ou procédures.
9.8 Tri par insertion
il s’agit d’ajouter une nouvelle donnée directement à sa place, plutôt que de la mettre à la
fin, puis de tout retrier.. C'est ce qu'on appel le tri par insertion.
Le principe, dans le cas d'une liste, est le suivant : on parcours la liste jusqu'a tomber sur
un élément qui est situé après (dans l'ordre choisi) l'élément à insérer. On revient alors en
arrière d'un cran. L'élément courant devra alors pointer sur le nouvel élément, qui pointera
lui-même sur l'élément sur lequel on s'était arrêté en parcourant la liste. Dans le cas où il
n’y a pas encore d’éléments dans la tableau on place la donnée au début.
Dans le cas d'un tableau, il faut, après avoir trouver où devait être inséré le nouvel
élément, décaler toute la deuxième partie du tableau, en partant de la fin.

9.9 Facture :
Ecrire l'algorithme Facture_elec qui calcule le montant de la facture d'électricité pour les
clients d'une Entreprise foumisseuse d'électricité.
Les clients peuvent être des particuliers ou des sociétés. La consommation est divisée par
tranche, chaque tranche ayant un prix
Catégorie
C<=10 Kw
10< C<=40 Kw
C >40Kw

Prix Particulier (en DHS/Kw)


2
5
10

Catégorie
C<=100 Kw
C<=400 Kw
C>400 Kw

Prix Société (en DHS/Kw)


1
3
5

9.10 Somme des impairs :


Ecrire l'algorithme Somme_Impairs qui calcule la somme des N (N>0) premiers entiers
positifs impairs.
9.11 Série des puissances :
Ecrire l'algorithme Serie_Puissances qui calcule la somme :
1 + 1/3 + 1/9 + ... + 1/3^N (N>0).
9.12 Exponentielle :
Ecrire l'algorithme Exponentielle qui calcule pour un réel x . une somme approchée de
exp(x) définie par : S =1 + x/(1!) + x2/2!)+...+ xN /(N !).
9.13 Somme des fractions :
Ecrire l'algorithme Somme_Fractions qui calcule la somme :
1 + 1/2 + 1/4 + 1/6 + ... + 1/2N, (N>0).
9.14 Série alternée :
Ecrire l'algorithme Serie_Alternee qui calcule la somme :
1 - 1/2 + 1/3 - 1/4 + ... ± 1/N, (N>0).
9.15 Série approchée :
Ecrire l'algorithme Serie_Approchee qui retourne le nombre N tel que la somme :
S = 1 + 1/2 - 1/3 + 1/4 - ... ± 1/N soit proche de 1.33 (avec une erreur E).[/hide]