Académique Documents
Professionnel Documents
Culture Documents
0. Objectifs
Un algorithme, c’est une suite d’instructions, qui une fois exécutée correctement,
conduit à un résultat donné.
En informatique, les choses auxquelles on doit donner des instructions sont les
ordinateurs.
1. Les Variables
1.0 A quoi servent les variables ?
La première chose à faire avant de pouvoir utiliser une variable est de créer la boîte et
de lui coller une étiquette. Ceci se fait tout au début de l’algorithme, avant même les
instructions proprement dites. C’est ce qu’on appelle la déclaration des variables
Le nom de la variable (l’étiquette de la boîte) obéit à des impératifs changeant selon les
langages. Toutefois, une règle absolue est :
- Qu’un nom de variable peut comporter des lettres et des chiffres, mais qu’il exclut la
plupart des signes de ponctuation, en particulier les espaces.
- Un nom de variable correct commence également impérativement par une lettre.
- Quant au nombre maximal de signes pour un nom de variable, il dépend du langage
utilisé.
2
Lorsqu’on déclare une variable, il ne suffit pas de créer une boîte (réserver un
emplacement mémoire) ; encore doit-on préciser ce que l’on voudra mettre dedans, car
de cela dépendent la taille de la boîte (de l’emplacement mémoire) et le type de codage
utilisé.
Cette variable est destinée à recevoir des nombres. Il y a plusieurs types numériques
selon les langages :
Entier simple ;
Entier long ;
Réel simple ;
Réel double.
Syntaxe
Variable g en Numérique ou
encore
Variables PrixHT, TauxTVA, PrixTTC en Numérique
Appelée type caractère, type chaîne ou en anglais, le type string, dans une variable de
ce type, on stocke des caractères, qu’il s’agisse de lettres, de signes de ponctuation,
d’espaces, ou même de chiffres. Le nombre maximal de caractères pouvant être stockés
dans une seule variable string dépend du langage utilisé.
Un groupe de caractères (y compris un groupe de un, ou de zéro caractères), qu’il soit ou
non stocké dans une variable, d’ailleurs, est donc souvent appelé chaîne de caractères.
Par exemple, 423 est quatre cent vingt-trois, et s’il y en a, "423" représente la suite des
chiffres 4, 2, 3.
L'autre confusion, bien plus grave - et bien plus consiste à confondre l'étiquette d'une
boîte et ce qu'il y a à l'intérieur
3
- Les variables du type booléen
Le dernier type de variables est le type booléen : on y stocke uniquement les valeurs
logiques VRAI et FAUX.
On peut représenter ces notions abstraites de VRAI et de FAUX par tout ce qu'on veut :
de l'anglais (TRUE et FALSE) ou des nombres (0 et 1). Peu importe. Ce qui compte, c'est
de comprendre que le type booléen est très économique en termes de place mémoire
occupée, puisque pour stocker une telle information binaire, un seul bit suffit.
- L’instruction d’affectation
La seule chose qu’on puisse faire avec une variable, c’est l’affecter, c’est-à-dire lui
attribuer une valeur.
Ainsi :
Toto ← 24
Tutu ← Toto
Tutu ← Toto + 4
Si Toto contenait 12, Tutu vaut maintenant 16. De même que précédemment, Toto vaut
toujours 12.
Tutu ← Tutu + 1
Si Tutu valait 6, il vaut maintenant 7. La valeur de Tutu est modifiée, puisque Tutu est la
variable située à gauche de la flèche.
4
2. Expressions et opérateurs
1. Expressions
Exemple
7
5+4
123-45+844
Toto-12+5-Riri
…sont toutes des expressions valides, à condition que Toto et Riri soient bien des
nombres. Car dans le cas contraire, la quatrième expression n’a pas de sens.
Une condition supplémentaire (en plus des deux précédentes) de validité d’une
instruction d’affectation est que :
• l’expression située à droite de la flèche soit du même type que la variable située à
gauche.
Si l’un des trois points énumérés ci-dessus n’est pas respecté, la machine sera incapable
d’exécuter l’affectation, et déclenchera une erreur.
Un opérateur est un signe qui relie deux valeurs, pour produire un résultat.
2. Opérateurs
- Opérateurs numériques
+ : addition
- : soustraction
* : multiplication /
: division
Mentionnons également le ^ qui signifie « puissance ». 45 au carré s’écrira donc 45 ^ 2.
5
Enfin, on a le droit d’utiliser les parenthèses, avec les mêmes règles qu’en
mathématiques.
Variables A, B, C en Caractère
Début
A ← "Gloubi"
B ← "Boulga"
C←A&B
Fin
La valeur de C à la fin de l’algorithme est "GloubiBoulga"
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
Non C1
C1 Vrai Faux
C1 Faux Vrai
6
3. Les instructions de lecture et d’écriture
La SORTIE ou l’écriture des données permet l’affichage des valeurs des variables.
. Cette instruction est notée « afficher ou écrire identificateur »
Exercice 1:
Ecrire et exécuter un algorithme qui demande un entier à l’utilisateur, puis affiche son
carré.
Algorithme :
Algorithme Calcul_du_Carré
Début
Variables A, B : entier
Écrire ("entrer la valeur de A ")
Lire(A)
B ← A*A
Écrire ("le carre de ", A, "est :", B)
Fin
Exercice 2:
Considérons les algorithmes ci-dessous. Quel sera le contenu des variables a, b et
éventuellement ci-après leur exécution ?
Algo A1
Entier a, b, c :
Debut
a←1
b←2
b←a+b
c←a+b
Fin
Algo A2
Caractère a, b
Début
a ← ’1’
b ← ’2’
a←a+b
Fin
Algo PS
7
Entier A, B
Début
A←5
B←2
A←B
B←A
Fin
Exercice 3 :
1) Quelles seront les valeurs des variables A et B après l’exécution de l’algorithme PS ?
2) Les deux dernières instructions permettent-elles d’échanger les deux valeurs de B et
A?
3) Si l’on inverse les deux dernières instructions, cela change-t-il quelque chose ?
Ces structures sont utilisées pour décider de l'exécution d'un bloc d'instruction : est-
ce-que ce bloc est exécuté ou non. Ou bien pour choisir entre l'exécution de deux blocs
différents.
Une expression logique est un énoncée ou proposition qui peut être vraie ou fausse selon
ce qu’on est en train de parler.
Exemple :
(10 < 15) est une expression logique vrai
(10 < 3) est un prédicat faux
Un test simple contient un seul bloc d'instructions. Selon une condition (expression
logique), on décide est-ce-que le bloc d'instructions est exécuté ou non. Si la condition
Est vraie, on exécute le bloc, sinon on ne l’exécute pas. La syntaxe d'un test alternatif
simple est comme suit :
Cas 1 :
IF (expression logique) then
Instructions ! Exécuté si la condition est vraie
END IF
8
Solution :
Algorithme :
Algorithme positif
Début
Variables A: entier
Écrire ("entrer la valeur de A ")
Lire (A)
Si (A ≥ 0) alors
Écrire (" positif ")
FinSi
Fin
Un test double contient deux blocs d'instructions : on est amené à décider entre le
premier bloc ou le second. Cette décision est réalisée selon une condition (expression
logique ou booléenne) qui peut être vraie ou fausse. Si la condition est vraie on exécute le
premier bloc, sinon on exécute le second. La syntaxe d'un test alternatif double est
comme suit :
Cas 1 :
Exemple :
Écrire un algorithme qui demande un entier (A) à l’utilisateur, teste si ce nombre est
positif (A ≥ 0) ou non, et affiche “positif” ou “négatif”.
Solution :
Algorithme :
Algorithme positif
Début
Variables A: entier
Écrire ("entrer la valeur de A ")
Lire (A)
Si (A ≥ 0) alors
Écrire (" positif ")
Sinon
Écrire (" négatif ")
FinSi
Fin
9
Exemple:
Solution :
Algorithme :
Algorithme positif
Début
Variables A: entier
Écrire ("entrer la valeur de A ")
Lire (A)
Si (A ≥ 0) alors
Écrire (" positif ")
Sinon
Si (A = 0)
Ecrire (" nul ")
Sinon
Écrire (" négatif ")
FinSi
Fin
Plusieurs structures conditionnelles peuvent être imbriquées, si bien que dans une
structure peut (peuvent) figurer une ou plusieurs structure(s) conditionnelle(s), et les
tests peuvent avoir un degré quelconque d'imbrications.
Exemple :
Ecrire un algorithme qui demande à l’user la température de l’eau et afficher son état
(solide, liquide, vapeur).
Solution :
Algorithme :
Algo températureH2O
Variables T : réel
Début
Ecrire (entrer la température de H2O :)
Lire (T)
Si (T=< 0) Alors
Ecrire "C’est de la glace"
Sinon
Si (T< 100) Alors
Ecrire "C’est du liquide"
Sinon
10
Ecrire "C’est de la vapeur"
Fin si
Fin si
Fin
Ecrivons un algorithme qui précise si un triangle ABC est rectangle (et dans ce cas en
quel point) ou s’il ne l’est pas.
Solution :
Algo rectangle
Variables xA,yA, xB,yB xC,yC,ABcarre,ACcarre,BCcarre : réel
Début
Ecrire (Saisir l’abscisse et l’ordonnée des points A, B et C)
Lire (xA,yA, xB,yB xC,yC)
ABcarre= (xB -xA)2+(yB-yA)2
ACcarre= (xC -xA)2+(yC-yA)2
BCcarre= (xC -xB)2+(yC-yB)2
Si (ABcarre+ BCcarre =ACcarre) Alors
Ecrire "le triangle ABC est rectangle en B"
sinon
Si (ABcarre+ ACcarre =BCcarre) Alors
Ecrire "le triangle ABC est rectangle en A"
Sinon
Si (ACcarre+ BCcarre =ABcarre) Alors
Ecrire "le triangle ABC est rectangle en C"
Sinon
Ecrire "le triangle n’’est pas rectangle"
finsi
fin
11
TRAVAUX PRATIQUES
Exercice 1:
Exercice 2
Exercice 3 :
Ecrire un algorithme qui demande à l’user d’entrer la note est qui affiche la mention
comme suite :
Faible ; si note<=10
Passable ; si 10<=note<=12
A. Bien ; si 12<=note<=14
Bien ; si 14<=note<=16
T. Bien; si 16<=note<=18
Excellent ; si 18<=note<=20
Exercice 4 :
Exercice 5 :
Exercice 1:
Algorithme :
Algo petite
Début
Variables A, B, C : réel
Lire (A, B, C)
Si (A<B) alors
Si (A<C) alors
Ecrire A
Si non
12
Ecrire C
Fin Si
Sinon
Si (B<C) alors
Ecrire B
Si non
Ecrire C
Fin Si
Fin
Exercice 2:
algo absolue
Début
Réel a
Lire "tapez un réel", a
Si (a>0) alors
Écrire "|", a,"|=", a
Sinon
Écrire "|", a,"|=",-a
Fin si
Fin
Exercice 3 :
Algo mention
Variable note : réel
Début
Ecrire (entrer la note :)
Lire (note)
Si (note <10) alors
Ecrire (faible)
Si non
Si (note <12) alors
Ecrire (passable)
Si non Si (note <14) alors
Ecrire (A. Bien)
Si non Si (note <16) alors
Ecrire (Bien)
Si non Si (note <18) alors
Ecrire (T. Bien)
Si non
Ecrire (Excellent)
Fin Si
Fin
13
Exercice 4 :
Algo second_degré
Début
Réel a, b, c, delta
Début : Ecrire (saisissez les valeurs a, b et c de l’équation ax²+bx+c=0 )
Lire (a, b, c)
Si (a=0) alors
Écrire (équation du premier degré)
Sinon
Delta=b²-4*a*c
Si (delta>0) alors
Écrire (les solutions de l’équation sont)
Écrire (-b-sqrt(delta))/(2*a), (-b+sqrt(delta))/(2*a))
SinonSi (d=0) alors
Écrire (-b/ (2a))
Sinon
Écrire (pas de solutions réelles)
Fin Si
Fin Si
Fin
Remarque
Utilisation de ET et de OU
14
Cette petite règle pourrait tout aussi bien être formulée comme suit :
Ces deux formulations sont strictement équivalentes. Ce qui nous amène à la conclusion
suivante :
SI A ET B Alors
Instructions1
SINON
Instruction 2
FINSI
Equivaut à
La boucle « Pour »
Cette structure est une BOUCLE ITERATIVE ; elle consiste à répéter un certain
traitement un nombre de fois fixé à l’avance.
Cette structure utilise une variable (indice) de contrôle d’itérations caractérisée par :
- Sa valeur initiale,
15
- Sa valeur finale,
- Son pas de variation.
Instructions
Fin Pour
I : variable
1 : valeur initiale
N : valeur finale
Le pas de variation égale à 1
Exemple :
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite affiche les dix
nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme
affichera les nombres de 18 à 27.
Solution :
Algorithme :
Algorithme nombres
Début
Variables I, N : entier
Écrire ("entrer la valeur de I ")
Lire (I)
N=I+10
Pour I de 17 jusqu’à N pas 1
Ecrire (I)
Fin Pour
Fin
Une action ou un groupe d’actions est exécuté répétitivement tout le temps où une
condition est vraie.
Syntaxe
Instructions
16
Fin Tant que
Exemple :
On veut écrire un algorithme qui calcul la somme des entiers positifs inférieurs ou égaux
à N.
Solution :
Algorithme :
Algorithme somme
Début
Variables I, N, S : entier
Écrire ("entrer la valeur de N ")
Lire (N)
I=0
S=0
Tant Que (I ≤ N) alors
S=S+I
I=I+1
Fin Tant Que
Ecrire (‘la Somme est’, S)
Fin
Une action ou un groupe d’actions est exécuté répétitivement jusqu'à ce qu’une condition
soit vérifiée.
Syntaxe
Répéter
Instructions
Jusqu'à (Condition)
Explication
Entrez le nombre numéro 1 : 7
Entrez le nombre numéro 2 : 24
17
…….etc.
Entrez le nombre numéro 10 : 13
Le plus grand de ces nombres est : 24
Solution :
Algorithme :
Algorithme plus_grand
Début
Variables I, N, PG : entier
I=1
Écrire ("entrer la valeur de N ")
Lire (N)
PG = N
Répéter
Lire (N)
Si (PG ≤ N) alors
PG = N
Fin Si
I=I+1
Jusqu'à (I = 10)
Ecrire (‘La valeur la plus grand est’, PG)
Fin
Exercice 1 :
Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle.
NB : la factorielle de 8, notée 8 !, vaut 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8
Solution
Algorithme :
Algo factorielle
Début
Variables N, I, F : Entier
Ecrire (Entrez un nombre N)
Lire (N)
F=1
Pour i = 2 à N
F=F*i
Fin Pour
Ecrire (La factorielle est :), F
Fin
Exercice 2:
Écrire un algorithme qui demande 10 entiers, compte le nombre d’entiers positifs saisis,
et affiche ce résultat.
18
Solution
Algo positifs
Entier a, i, cc
Début
Écrire "Saisir des entiers"
i=0
cc = 0
Tant que (i < 10) faire
Lire (a)
i=i+1
Si (a ≥ 0) alors
cc = cc + 1
Fin si
Fin Tant que
Écrire cc, "sont positifs"
Fin
Exercice 3 :
La population de la ville Alpha est de 1, 000, 000 d’habitants et elle augmente de 50,000
habitants par an. Celle de la ville Beta est de 500, 000 habitants et elle augmente de 4%
par an. Ecrire un algorithme permettant de déterminer dans combien d’années la
population de la ville Beta dépassera celle de la ville Alpha.
Solution
Algorithme Populations
Début
Entier années, alpha, beta
alpha = 10 000 000
beta = 5 000 000
19
années = 0
Tant que (beta ≤ alpha) alors
années = années + 1
alpha = alpha + 50 000
beta = beta ∗ 1.04
Fin tant que
afficher "Il faut " , années , " années pour que la population de beta dépasse celle de
alpha"
Fin
Exercice 4 :
Ecrire un algorithme qui demande à luser un nombre est :
- Affiche les diviseurs de ce nombre.
- Le nombre de ces diviseurs.
- La somme des diviseurs de ce nombre.
Solution
Algo nbr_premier
Variable compt, s, i, N : entier
Ecrire ( entrer N )
Lire (N)
Compt = 0
S=0
Pour i = 2 à N-1
Si (N mod (i) = 0) alors
Ecrire (i)
Compt = compt+1
S = S+i
Fin Si
Fin pour
Ecrire (la somme est :, S)
Ecrire (le nombre des diviseurs est :, compt)
Fin
Remarque
Boucler en comptant, ou compter en bouclant
Dit d’une autre manière, la structure « Pour … Suivant » est un cas particulier de
TantQue : celui où le programmeur peut dénombrer à l’avance le nombre de tours de
boucles nécessaires.
Nous pouvons donc maintenant donner la formulation générale d’une structure « Pour ».
Sa syntaxe générale est :
Ici, il y aura quinze écritures consécutives de "il est passé par ici", puis six écritures
consécutives de "il repassera par-là".
Des boucles peuvent donc être imbriquées (cas n°1) ou successives. Cependant, elles ne
peuvent jamais, au grand jamais, être croisées. Cela n’aurait aucun sens logique, et de
plus, bien peu de langages vous autoriseraient ne serait-ce qu’à écrire cette structure
aberrante.
22
6. Les Tableaux
6.0 Utilité des tableaux
Imaginons que dans un programme, nous ayons besoin simultanément de 12 valeurs (par
exemple, des notes pour calculer une moyenne), au lieu de déclarer douze variables,
appelées par exemple Notea, Noteb, Notec, ou par exemple N1, N2, N3, …..N12 pour
calculer la moyenne comme par exemple :
Moy ← (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12)/12
Pour s’en passer, la programmation nous permet de rassembler toutes ces variables en
une seule, au sein de laquelle chaque valeur sera désignée par un numéro : la note numéro
1 , la note numéro 2 , la note numéro 8 .
Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle
l’indice.
Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le
nom du tableau, suivi de l’indice de l’élément, entre parenthèses.
Exemple :
Supposons que l’on dispose des chiffres d’inflation pour chaque mois. Pour calculer
l’inflation annuelle, il suffit de calculer la somme des données mensuelles.
On stockera alors les données dans un tableau de 12 éléments : Tab_Inflation .
Tab_Inflation :
Pour définir un tableau, il faut préciser un nom commun pour toutes ces données
(ici Tab_Inflation ) et un indice - variable entière pouvant prendre des valeurs
entre 1 et le nombre d’éléments du tableau - (par exemple, i entre 1 et 12). Cet
indice indiquera le rang de l’élément dans le tableau.
Exemple :
23
Tab_Inflation(6) : ‘ le chiffre de l’inflation du mois de juin.
Remarques
- Tableau interne : ici, les données sont chargées dans le programme ou algorithme.
- Tableau externe : les données proviennent d’un fichier stocké sur un support
magnétique ou amovible.
2. Selon la taille
Si le tableau contient une seule série de données, on dira que sa dimension est
égale à 1 (il s’agit d’un vecteur ou tableau-colonne ou tableau-ligne).
Remarque
24
- Tableau Nomtableau [Nombre d’éléments] type
- Vecteur Nomvecteur [nombre d’éléments] type
Exemple
Dans notre exemple, nous créerons donc un tableau appelé Note. Chaque note individuelle
(chaque élément du tableau Note) sera donc désignée Note(0), Note(1), etc.
Remarque
, les indices des tableaux commencent généralement à 0, et non à 1.
La déclaration des tableaux varie d'un langage à l'autre. Certains langages réclament le
nombre d'éléments, d'autre le plus grand indice.
• Les "cases" sont numérotées à partir de zéro, autrement dit que le plus petit
indice est zéro.
• Lors de la déclaration d'un tableau, on précise la plus grande valeur de l'indice
(différente, donc, du nombre de cases du tableau, puisque si on veut 12
emplacements, le plus grand indice sera 11).
L’énorme avantage des tableaux, c’est qu’on va pouvoir les traiter en faisant des boucles.
Par exemple, pour effectuer notre calcul de moyenne, cela donnera par exemple :
25
Tableau Note(11) en Numérique
Variables Moy, Som en Numérique
Début
Pour i ← 0 à 11
Ecrire "Entrez la note n°", i
Lire Note(i)
i Suivant
Som ← 0
Pour i ← 0 à 11
Som ← Som + Note(i) i
Suivant
Moy ← Som / 12
Ecrire ‘’ la moyenne est :’’, Moy
Fin
Remarque générale : l’indice qui sert à désigner les éléments d’un tableau
peut être exprimé directement comme un nombre en clair, mais il peut être
aussi une variable, ou une expression calculée.
• Être égale au moins à 0 (dans quelques rares langages, le premier élément d’un
tableau porte l’indice 1). Mais comme je l'ai déjà écrit plus haut, nous avons choisi
ici de commencer la numérotation des indices à zéro, comme c’est le cas en
langage C et en Visual Basic. Donc attention, Truc(6) est le septième élément du
tableau Truc !
• Être un nombre entier Quel que soit le langage
• Être inférieure ou égale au nombre d’éléments du tableau (moins 1, si l’on
commence la numérotation à zéro).
Remarque
L’affectation :
Pour affecter une valeur à un élément i d’un tableau nommé par exemple DELPHINE, on
écrira :
DELPHINE(i) ← valeur.
26
Par exemple, l’instruction : DELPHINE (0) ← 20 ; affecte au premier élément du tableau
DELPHINE la valeur 20.
Pour affecter la même valeur à tous les éléments d’un tableau DELPHINE de type
numérique et de dimension 100, on utilise une boucle.
Exemple :
Cette boucle permet de parcourir le tableau DELPHINE élément par élément et affecter
à chacun la valeur 0. La variable i est appelée indice.
La lecture :
Comme les variables simples, il est possible aussi d’assigner des valeurs aux éléments d’un
tableau lors de l’exécution c-à-d. les valeurs sont saisies par l’utilisateur à la demande du
programme.
Exemple :
L’écriture :
De façon analogue à la lecture, l’écriture de la valeur d’un élément donné d’un tableau
s’écrira comme suit : écrire DELPHINE (i) Cette instruction permet d’afficher la valeur
de l’élément i du tableau DELPHINE
Exemple :
Ecrire un algorithme qui déclare et remplisse un tableau de 7 valeurs numériques réels en
les mettant toutes à zéro.
Solution :
Algorithme :
Algorithme remplissage
Tableau A(7) : réel
Variable i : entier
Début
Pour i = 1 à 7
27
A(i) = 0
Fin Pour
Fin
Exemple :
Ecrire une procédure qui recherche dans un vecteur V de dimension N, l'indice de la
composante contenant la valeur X. Considérer d'abord le cas où l'on est sûr que X se
trouve dans le vecteur, puis le cas général.
Solution :
Algorithme :
Algorithme Indice
Tableau V(N) : réel
Variable I, N, Indice : entier
Début
Lire (N)
Pour I = 1 à N
Si (V(I)=X) alors
Indice = I
Fin Si
Fin Pour
Ecrire (l'indice de la composante contenant la valeur X est), Indice
Fin
Exemple :
Remarque
28
Exemple
Il arrive fréquemment que l’on ne connaisse pas à l’avance le nombre d’éléments que devra
comporter un tableau. Ainsi, pour parer à ce genre de situation, a-t-on la possibilité de
déclarer le tableau sans préciser au départ son nombre d’éléments. Ce n’est que dans un
second temps, au cours du programme, que l’on va fixer ce nombre via une instruction de
redimensionnement : Redim.
Notez que tant qu’on n’a pas précisé le nombre d’éléments d’un tableau, d’une
manière ou d’une autre, ce tableau est inutilisable.
Exemple : on veut faire saisir des notes pour un calcul de moyenne, mais on ne sait pas
combien il y aura de notes à saisir.
Cette technique n’a rien de sorcier, mais elle fait partie de l’arsenal de base de la
programmation en gestion.
On présente quelques algorithmes utiles, qui permettent d'ordonner les éléments d'un
tableau dans un ordre croissant ou décroissant. L'ordre est par défaut croissant. Un
vecteur est dit trié si V(i) <=V (i+1),
Il existe plusieurs stratégies possibles pour trier les éléments d’un tableau ; nous en
verrons deux : le tri par sélection, et le tri à bulles
29
6.4.1.1 Le tri par Sélection
45 122 12 3 21 78 64 53 89 28 84 46
On commence par rechercher, parmi les 12 valeurs, quel est le plus petit élément, et où il
se trouve. On l’identifie en quatrième position (c’est le nombre 3), et on l’échange alors
avec le premier élément (le nombre 45). Le tableau devient ainsi :
3 122 12 45 21 78 64 53 89 28 84 46
On recommence à chercher le plus petit élément, mais cette fois, seulement à partir du
deuxième (puisque le premier est maintenant correct, on n’y touche plus). On le trouve en
troisième position (c’est le nombre 12). On échange donc le deuxième avec le troisième :
3 12 122 45 21 78 64 53 89 28 84 46
On
recommence à chercher le plus petit élément à partir du troisième (puisque les deux
premiers sont maintenant bien placés), et on le place correctement, en l’échangeant, ce
3 12 21 45 122 78 64 53 89 28 84 46
qui
donnera in fine :
Début
Entier i, Posmini, j
Réel temp
Dimension t(10)
Pour i=0 à 10
Lire t(i)
Fin Pour
temp ← t(posmini)
t(posmini) ← t(i)
t(i) ← temp
L’idée de départ du tri à bulles consiste à se dire qu’un tableau trié en ordre croissant,
c’est un tableau dans lequel tout élément est plus petit que celui qui le suit. En effet,
prenons chaque élément d’un tableau, et comparons-le avec l’élément qui le suit. Si l’ordre
n’est pas bon, on permute ces deux éléments. Et on recommence jusqu’à ce quel’on n’ait
plus aucune permutation à effectuer. Les éléments les plus grands remontent ainsi peu à
peu vers les dernières places. En fait, tout ce qu’on peut dire, c’est qu’on devra effectuer
le tri jusqu’à ce qu’il n’y ait plus d’éléments qui soient mal classés.
31
Début
Variable logique Yapermute
Dimension t(10)
Pour i=0 à 10
Lire t(i)
Fin Pour
Yapermut=Vrai
TantQue (Yapermut) Alors
Yapermut=Faux
Pour i=0 à 10
Si (t(i) > t (i+1)) alors
Temp=t(i)
t(i)=t(i+1)
t(i+1)=temp
Yapermut=Vrai
Finsi
Fin Pour
FinTantQue
Fin
Commentaire
Que va-t-on faire à l’intérieur de la boucle ? Prendre les éléments du tableau, du premier
jusqu’à l’avant-dernier, et procéder à un échange si nécessaire.
32
TantQue Yapermute
Pour i ← 0 à 10
Si t(i) > t(i+1) Alors
temp ← t(i)
t(i) ← t(i+1)
t(i+1) ← temp
Finsi
i suivant
Fin
Mais il ne faut pas oublier un détail capital : la gestion de notre flag. L’idée, c’est que
cette variable va nous signaler le fait qu’il y a eu au moins une permutation effectuée. Il
faut donc :
• Lui attribuer la valeur Vrai dès qu’une seule permutation a été faite (il suffit qu’il
y en ait eu une seule pour qu’on doive tout recommencer encore une fois).
• Dernier point, il ne faut pas oublier de lancer la boucle principale, et pour cela de
donner la valeur Vrai au flag au tout départ de l’algorithme.
La solution complète donne donc :
33
…
Yapermut ← Vrai
TantQue Yapermut
Yapermut ← Faux
Pour i ← 0 à 10
Si t(i) > t(i+1) alors
temp ← t(i)
t(i) ← t(i+1)
t(i+1) ← temp
Yapermut ← Vrai
Finsi
i suivant
FinTantQue
Fin
Exercices
Exercice 1 :
Que produit l’algorithme suivant ?
Algo Carre
Début
Tableau Nb(5) en Entier
Variable i en Entier
Pour i = 0, 5
Nb(i) ← i * i
Fin Pour
Pour i = 0, 5
Ecrire Nb(i)
Fin Pour
Fin
Peut-on simplifier cet algorithme avec le même résultat ?
Exercice 2 :
Écrivez un algorithme permettant, à l’utilisateur de saisir les notes d’une classe. Le
programme, une fois la saisie terminée, renvoie le nombre de ces notes supérieures à la
moyenne de la classe.
Exercice 3:
Que font les algorithmes suivants ?
a)
34
Var i, n (10) entier
Debut
n [0] ← 1
Pour i allant de 1 a 9
Faire
N(i) ← n (i-1) + 2
Fin
b)
Var i, n [10] entier
Début
Pour i allant de 0 a 9
Faire
N(i) ← 2 * i
Fin
Exercice 4:
Ecrire un algorithme permettant de résoudre le problème suivant :
– Données : un tableau contenant 100 entiers
– Résultat : “vrai” si le tableau est trié du plus petit au plus grand et “faux” sinon
Exercice 5:
Ecrire un algorithme permettant de saisir 100 valeurs et qui les range au fur et à mesure
dans un tableau.
Exercice 6:
Ecrire un algorithme qui calcule le plus grand écart dans un tableau d’entiers. Rappel :
l’écart entre deux entiers x et y est la valeur absolue de leur différence |x − y|.
Exercice 1 :
Cet algorithme remplit un tableau avec le carré de six valeurs : 0, 1, 2, 3, 4, 5.
Il les écrit ensuite a l’écran.
Simplification :
Algo Carre
Début
Tableau Nb(5) en Entier
Variable i en Entier
Pour i = 0, 5
Nb(i) ← i * i
Ecrire Nb(i)
Fin PouExercice 2 :
Algo classe
Début
Tableau T(Nb)
Variable i, Nb, Nbsup en Entier
35
Variable Som, Moy en réel
Ecrire “Entrez le nombre de notes à saisir : “
Lire (Nb)
Pour i = 1, Nb
Ecrire “Entrez le nombre numéro”, i
Lire T(i)
Fin Pour
Som = 0
Pour i = 1, Nb
Som = Som + T(i)
Fin Pour
Moy =Som / Nb
NbSup =0
Pour i =1, Nb
Si (T(i) > Moy) Alors
NbSup =NbSup + 1
FinSi
Fin Pour
Ecrire NbSup, “élèves dépassent la moyenne de la classe”
Fin
Exercice 3:
a) Initialisation d’un tableau avec les 10 premiers nombres impairs
b) Initialisation d’un tableau avec les 10 premiers nombres pairs
Exercice 4:
Algorithme Test
Début
Entier i
Tableau T (100)
Logique Trié
Trié = vrai
i=0
Tant que ((Trié = vrai) et (i < 99)) alors
Trié = (T (i) ≤ T (i +1))
i = i +1
Fin tant que
Ecrire Trié
Fin
Exercice 5:
Algorithme Exercice
36
Entier i, j, x
Tableau Entier T1 (100)
Logique positionné
Début
Pour i=0, 100
Afficher "Entrez votre valeur : "
Lire x
j=i
Tant que ((j > 0) et (T1 (j −1) > x) alors
T1 (j) = T1 (j −1)
j = j −1
T1 (j) = x
Fin
Exercice 6:
Algorithme écart
Exercices
Exercice 1 :
Ecrire un algorithme qui inverse l’ordre d’un tableau des 100 entiers triés. En d’autres
termes, si le tableau est trié du plus petit au plus grand, alors l’algorithme retourne le
tableau trié du plus grand au plus petit ; réciproquement, si le tableau est trié du plus
grand au plus petit, alors l’algorithme retourne le tableau trié du plus petit au plus grand.
Exercice 2 :
1- Que produit l’algorithme suivant ?
37
Tableau Nb(5) en Entier
Variable i en Entier
Début
Pour i ← 0 à 5
Nb(i) ← i * i
Fin pour
Pour i ← 0 à 5
Ecrire Nb(i)
Fin pour
Fin
2- Peut-on simplifier cet algorithme avec le même résultat ?
3- Traduire l’algorithme en programme fortran puis exécuter et affichés l’état de
l’écran.
Exercice 1 :
Algorithme Inversion tableau
Variables entier i, n
Tableau T [100]
Début
Lire n
Pour i de 0 à n
Lire T(i)
Fin
Pour i de 0 à n/2
C=T(i)
T(i) = T (n −i −1)
T (n −i −1) =c
Fin pour
Fin
Exercice 2 :
1- Cet algorithme remplit un tableau avec six valeurs : 0, 1, 4, 9, 16, 25. Il les écrit
ensuite à l’écran.
2- Simplification :
38
Nous allons maintenant nous intéresser au maniement habile d’une variable booléenne : la
technique dite du « flag ».
Le flag, en anglais, est un petit drapeau, qui va rester baissé aussi longtemps que
l’événement attendu ne se produit pas. Et, aussitôt que cet événement a lieu, le petit
drapeau se lève (la variable booléenne change de valeur). Ainsi, la valeur finale de la
variable booléenne permet au programmeur de savoir si l’événement a eu lieu ou non.
Soit un tableau comportant, disons, 20 valeurs. L’on doit écrire un algorithme saisissant
un nombre au clavier, et qui informe l’utilisateur de la présence ou de l’absence de la
valeur saisie dans le tableau.
L'algorithme donne :
i suivant
Si Trouvé Alors
Ecrire "N fait partie du tableau"
Sinon
Ecrire "N ne fait pas partie du tableau"
FinSi
Fin
39
BIBLIOGRAPHIE
40
PLAN DU COURS
Introduction à l’Algorithmique
1. Les Variables
41