Académique Documents
Professionnel Documents
Culture Documents
ALGORITHMES ET PROGRAMMATION
1.1. Algorithmes
La description de cette liste doit être faite de manière non ambigüe car il ne
faut pas s’attendre à la moindre interprétation des ordres finis. Ils seront
exécutés de façon purement mécanique.
1
1.1.2 Représentation d’un algorithme
Un algorithme doit :
Avoir un nombre fini d’étapes ;
Avoir un nombre fini d’opérations par étape ;
Se terminer après un nombre fini d’opération ;
Fournir un résultat.
1.2. Programmation
1.2.1 Définitions
2
à être exécutées une par une par un ordinateur suivant l’ordre de
leur rédaction afin d’atteindre un résultat escompté ;
Un programme est l’implémentation d’un algorithme dans un
langage de programmation.
3
La phase suivante consiste à traduire l’algorithme dans un langage de
programmation donné. Ce travail, quoiqu’il semble facile, exige le respect strict
de la syntaxe du langage.
Lors de l’étape d’exécution, soit des erreurs syntaxiques sont signalées, ce qui
entraîne des corrections en général simples à effectuer, soit des erreurs
sémantiques plus difficiles à déceler. Dans le cas d’erreur syntaxique, les
retours vers le programme peuvent être fréquents. Dans le cas d’erreur
sémantique, le programme produit des résultats qui ne correspondent pas à
ceux escomptés : les retours vers l’analyse (algorithme) sont alors inévitables.
4
Ces instructions peuvent être : les tests (instructions alternatives), les boucles
(instructions itératives), les structures de données (tableau, liste, etc.). Dans la
suite, nous aborderons plus en détails toutes ces instructions.
Une donnée peut être considérée comme une boîte, portant une étiquette
(nom), d'une certaine forme (type) et qui contient une information (valeur).
Une donnée peut être :
Une constante si sa valeur ne change jamais durant
l’exécution du programme ;
Une variable si sa valeur est susceptible de changer durant
l’exécution du programme.
5
1. Les types numériques
6
1) Le type caractère
Sa valeur est une suite finie de caractères quelconques. Ce type n'est pas
toujours prédéfini et doit faire l'objet d'un « paramétrage », en fonction de sa
longueur (le nombre de caractères).
Une variable chaîne peut être vide, si elle est de longueur nulle, et sera notée :
' '. Si cette dernière est égale à 1, la variable est considérée aussi comme Car.
Exemples :
ChaîneA < ChaîneB : si le mot contenu dans ChaîneA est 'inférieur' à celui de
ChaîneB dans le sens du dictionnaire; (inférieur : avant ; supérieur : après).
Exemple :
'BAL' < 'BALLES' < 'BALLON' < 'BAR' < 'Bar' < 'bar'
7
De plus, il existe une autre opération définie sur les variables chaîne, la
concaténation (|| ou +). Elle crée une nouvelle variable chaîne en juxtaposant
deux ou plusieurs mots.
Exemple :
„TOURNE'||'VIS' = 'TOURNEVIS'
3. Le type logique
Une valeur logique (ou booléenne) est l'une des deux valeurs 'vrai' ou 'faux'.
Elle intervient dans l'évaluation d'une condition.
Les opérations définies sur les variables de type logique sont la négation,
l'intersection et l'union.
Les valeurs, dans ce type, occupent 1 octet en mémoire centrale, mais seul le
premier bit de l’octet compte. La valeur VRAI équivaut à la suite 11111111 et
8
la valeur FAUX à 00000000. En effet 00000000 est le complément à 2 de
11111111.
2. Le type utilisateur
1ère possibilité :
2ème possibilité :
Déclaration
Type Nom_type(val1, val2,…, valn)
Var Nom_variable : Nom_type;
Exercice
Déclarer les types suivants :
Un type intitulé mention qui n’acceptera que les mentions attribuées à
une moyenne d’un étudiant (satisfaction, distinction, grande distinction,
la plus grande distinction).
Un type saison comportant les quatre saisons (Automne, Hiver,
Printemps, Eté).
Une variable est une zone mémoire réservée pour stocker une donnée
susceptible de changer (varier) pendant l’exécution du programme.
Une constante est une zone mémoire dans laquelle on a stocké une donnée
qui ne peut pas changer pendant l’exécution du programme.
9
2.2.7.1 Déclaration d’une variable
La déclaration d’une variable est une opération qui consiste à faire une
réservation de la zone mémoire dans laquelle on va stocker une donnée ou un
résultat. La déclaration d’une variable se fait en fournissant le type de donnée
ainsi que l’identificateur de la zone mémoire et éventuellement la valeur initiale
à y stocker.
Syntaxes
Déclaration d’une variable avec initialisation (en lui affectant une valeur initiale)
:
Var identificateur = valeur : type
Exemple 1.
Déclarer les variables pour un programme qui calcule l’intérêt simple d’un
capital placé à un taux donné pendant un certain nombre de jours donné
sachant que l’intérêt simple est calculé par la formule :
Intérêt simple = capital * taux * nombre de jours / 36000
Analyse du problème
10
précision (ou double précision). Nous opterons pour double précision par
mesure de prudence parce que le capital peut être une valeur très grande.
Leurs zones mémoires peuvent être initialisées à 0 en attendant que leurs
valeurs réelles leur soient affectées.
Le nombre de jours quant à lui doit être un nombre entier.
Toutes ces données peuvent changer. Il s’agit des variables.
Après cette analyse, la déclaration sera :
Déclaration
Exemple 2
Déclarer les variables pour un programme qui résout une équation du second
degré à une inconnue.
Analyse du problème
Déclaration
11
On peut déclarer plusieurs constantes de même type :
Const IDENTIFICATEUR1=valeur,…,
IDENTIFICATEURN=valeur : type
Analyse du problème
Ce problème a déjà été analysé. Mais cette fois-ci le taux d’intérêt est connu
d’avance et ne doit pas être modifié quel que soit le capital et le nombre de
jours. Donc, le taux sera stocké dans la mémoire centrale comme constante
avec identificateur TAUX. Dans la même logique, nous pouvons stocker le
nombre 36000 au dénominateur comme une constante avec
identificateur JOURS_ANNEE.
Par convention, les identificateurs des constantes sont toujours en majuscule.
Déclaration
ou
identificateur_zone_provenance
ou
ou
Exemple 1
A 2;
B C + 3;
Contre exemples :
A + 1 2;
A 3D; (3D n'est pas un identificateur; il n'est pas non plus une expression)
Exemple 2
Notez bien que cette instruction n’a pas modifié la valeur de B : une
instruction d’affectation ne modifie que ce qui est situé à gauche de la flèche.
Exemple :
Si A contenait 12, B vaut maintenant 16. De même que précédemment, A vaut
toujours 12.
Exemple :
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
.
Voyons à présent le rôle des guillemets dans les chaînes de caractères ;
comparons maintenant deux algorithmes suivants :
13
Algorithme 1
Debut
Riri ← "Loulou"
Fifi ← "Riri"
Fin
Algorithme 2
Debut
Riri ← "Loulou"
Fifi ← Riri
Fin
La seule différence entre les deux algorithmes consiste dans la présence ou
dans l’absence des guillemets lors de la seconde affectation. Et l'on voit que
cela change tout.
Dans l'algorithme 1, ce que l'on affecte à la variable Fifi, c'est la suite de
caractères R – i – r - i.
Et à la fin de l’algorithme 1, le contenu de la variable Fifi est donc « Riri ».
Dans l’algorithme 2, en revanche, Riri étant dépourvu de guillemets, n'est pas
considéré comme une suite de caractères, mais comme un nom de variable.
Le sens de la ligne devient donc : « affecte à la variable Fifi le contenu de la
variable Riri ». A la fin de l’algorithme 2, la valeur de la variable Fifi est donc «
Loulou ». Ici, l’oubli des guillemets conduit certes à un résultat, mais à un
résultat différent.
A noter, car c’est un cas très fréquent, que généralement, lorsqu’on oublie les
guillemets lors d’une affectation de chaîne, ce qui se trouve à droite du signe
d’affectation ne correspond à aucune variable précédemment déclarée et
affectée. Dans ce cas, l’oubli des guillemets se solde immédiatement par une
erreur d’exécution.
Ceci est une simple illustration. Mais elle résume l’ensemble des problèmes
qui surviennent lorsqu’on oublie la règle des guillemets aux chaînes de
caractères.
Il va de soi que l’ordre dans lequel les instructions sont écrites va jouer un rôle
essentiel dans le résultat final. Considérons les deux algorithmes suivants :
Algorithme 1
Variable A : Numérique
Début
A ← 34 ;
A ← 12 ;
Fin
14
Algorithme 2
Variable A : Numérique
Début
A ← 12
A ← 34
Fin
Il est clair que dans le premier cas la valeur finale de A est 12, dans l’autre elle
est 34.
Il est tout aussi clair que ceci ne doit pas nous étonner. Lorsqu’on indique le
chemin à quelqu’un, dire « prenez tout droit sur 1km, puis à droite » n’envoie
pas les gens au même endroit que si l’on dit « prenez à droite puis tout droit
pendant 1 km ».
Enfin, il est également clair que si l’on met de côté leur vertu pédagogique, les
deux algorithmes ci-dessus sont parfaitement idiots ; à tout le moins ils
contiennent une incohérence. Il n’y a aucun intérêt à affecter une variable pour
l’affecter différemment juste après. En l’occurrence, on aurait tout aussi bien
atteint le même résultat en écrivant simplement :
Algorithme 1
Variable A : Numérique
Début
A ← 12 ;
Fin
Algorithme 2
Variable A : Numérique
Début
A ← 34 ;
Fin
Exemple
Algorithme Moyenne ;
Const Note1 12 ; Note2 7.5 ; Note3 14 ;
Var Som, Moy : réel
début
Som Note1
Som Som + Note2
Som Som + Note3
15
Moy Som / 3
Afficher („ La moyenne est de : ,‟ ; Moy)
fin.
EXERCICES
Exercice 1
Quelles seront les valeurs des variables A et B après exécution des
instructions suivantes ?
Var A, B : Entier
Début
A 1
B A+3
A 3
Fin
Exercice 2
Quelles seront les valeurs des variables A, B et C après exécution des
instructions suivantes ?
Var A, B, C: Entier
Début
A 5
B 3
C A+B
A 2
C B–A
Fin
Exercice 3
Quelles seront les valeurs des variables A et B après exécution des
instructions suivantes ?
Var A, B : Entier
Début
A 5
B A+4
A A+1
B A–4
Fin
Exercice 4
Quelles seront les valeurs des variables A, B et C après exécution des
instructions suivantes ?
Var A, B, C : Entier
Début
A 3
16
B 10
C A+B
B←A+B
A←C
Fin
Exercice 5
Quelles seront les valeurs des variables A et B après exécution des
instructions suivantes ?
Var A, B : Entier
Début
A 5
B 2
A B
B A
Fin
Les deux dernières instructions permettent-elles d’échanger les deux valeurs
de B et A ? Si l’on inverse les deux dernières instructions, cela change-t-il
quelque chose ?
Exercice 6
Plus difficile, mais c’est un classique absolu, qu’il faut absolument maîtriser :
écrire un algorithme permettant d’échanger les valeurs de deux variables A et
B, et ce quel que soit leur contenu préalable.
Exercice 7
Une variante du précédent : on dispose de trois variables A, B et C. Ecrivez un
algorithme transférant à B la valeur de A, à C la valeur de B et à A la valeur de
C (toujours quels que soient les contenus préalables de ces variables).
Exercice 8
Que produit l’algorithme suivant ?
Var A, B, C : Chaîne
Début
A ← "423"
B ← "12"
C←A+B
Fin
Exercice 9
Que produit l’algorithme suivant ?
Variables A, B, C : Chaîne
Debut
A ← "423"
B ← "12"
C←A&B
Fin
17
2.2.10 Opération de lecture des données externes
Exemple
18
EXERCICES
Exercice 1
Quel résultat produit le programme suivant ?
Var val, double : simple précision;
Début
Val←231
Double ← Val * 2
Ecrire Val
Ecrire Double
Fin.
Exercice 2
Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et
affiche le carré de ce nombre.
Exercice 3
Ecrire un programme qui lit le prix HT(hors taxes) d’un article, le nombre
d’articles et le taux de TVA, et qui fournit le prix total TTC (toutes taxes
comprises) correspondant. Faire en sorte que des libellés apparaissent
clairement.
Exercice 4
Ecrire un algorithme utilisant des variables de type chaîne de caractères, et
affichant quatre variantes possibles de la célèbre « belle marquise, vos beaux
yeux me font mourir d’amour ». On ne se soucie pas de la ponctuation, ni des
majuscules.
19
var capital = 45678.25 : double précision
const TAUX =2.5 : double précision
var jours = 35 : entier
var interet = capital * TAUX * jours / 36000 : double précision
Le résultat qui sera stocké dans la variable interet doit être en double précision
parce que c’est le type le plus précis des opérandes. Par conséquent, la
variable interet doit absolument être déclarée comme une variable du type
double précision.
Remarque :
En cas de conflit entre deux opérateurs de même priorité, on commence par
celui situé le plus à gauche.
Exemples :
a +b-c : on fait d'abord a + b, ensuite - c
a/b*c : on fait d'abord a / b, ensuite * c
soit l'expression suivante :
20
Exemple
21
La valeur de la variable C est 0 (FAUX) à la troisième instruction, 1 (VRAI) à la
quatrième instruction, 1 (VRAI) à la cinquième instruction et 0 (FAUX) à la
dernière instruction.
Les langages de programmation utilisent les mêmes opérateurs excepté Java
qui utilise == au lieu de = pour éviter la confusion entre égalité et affectation et
= ! au lieu de <>.
Le langage Basic ne connait pas le type booléen. Le résultat d’une opération
relationnelle est un entier -1 (interprété comme VRAI) ou 0 (interprété comme
FAUX).
En Java, le type booléen est noté boolean et ses valeurs sont TRUE (VRAI)
et FALSE (FAUX) codées sur 1 bit. Il convient de noter que TRUE et FALSE
ne sont pas de chaînes de caractères et ne doivent pas être entourés des
guillemets.
22
CHAPITRE II. STRUCTURES DE CONTROLE ET
ORDINOGRAMMES
V F
1° Alternative simple
Syntaxe
Si condition Alors
Action
23
Fin si
Ordinogramme
Non
Condition ?
Oui
Action1
2° Alternative double
Syntaxe
Si condition Alors
Action1
Sinon
Action2
Finsi
Ordinogramme
Condition ? Non
Oui
Action1 Action2
24
Comme il est indiqué sur l’ordinogramme, si la condition est vérifiée, l’action1
est exécutée. Dans tous les autres cas, il y a exécution de l’action2.
Exemple
Var A, B : entier
Var Grand, Petit : entier
Lire A, B
Si A>B
alors
Grand = A
Petit = B
Sinon
Grand = B
Petit = A
Finsi
Syntaxe
Si condition 1 Alors
Instruction 1
Sinon si condition 2 Alors
Instruction 2
.
.
.
Sinon si condition N Alors
Instruction N
Sinon
Instruction X
Finsi
La logique de cette structure ne permet l’exécution que d’une seule action.
Plus précisément, soit l’action qui suit la première condition vérifiée est
exécutée, soit est exécutée celle qui suit la dernière instruction « sinon ».
Condition est une expression dont la valeur est VRAI ou FAUX.
Exemple
Nous avons fait des économies : au lieu de devoir taper trois conditions, dont
une composée, nous n’avons plus que deux conditions simples. Mais aussi, et
surtout, nous avons fait des économies sur le temps d’exécution de
l’ordinateur. Si la température est inférieure à zéro, celui-ci écrit dorénavant «
C’est de la glace » et passe directement à la fin, sans être ralenti par l’examen
d’autres possibilités (qui sont forcément fausses).
Cette deuxième version n’est donc pas seulement plus simple à écrire et plus
lisible, elle est également plus performante à l’exécution.
Les structures de tests imbriqués sont donc un outil indispensable à la
simplification et à l’optimisation des algorithmes.
26
NB :
L’informatique met à notre disposition quatre opérateurs logiques : ET, OU,
NON, et XOR.
• Le ET a le même sens en informatique que dans le langage courant.
Pour que "Condition1 ET Condition2" soit VRAI, il faut impérativement
que Condition1 soit VRAI et que Condition2 soit VRAI. Dans tous les
autres cas, "Condition 1 et Condition2" sera faux.
• Il faut se méfier un peu plus du OU. Pour que "Condition1 OU
Condition2" soit VRAI, il suffit que Condition1 soit VRAI ou que
Condition2 soit VRAI. Le point important est que si Condition1 est VRAI
et que Condition2 est VRAI aussi, Condition1 OU Condition2 reste
VRAIE. Le OU informatique ne veut donc pas dire « ou bien ».
• Le XOR (ou OU exclusif) fonctionne de la manière suivante. Pour que
"Condition1 XOR Condition2" soit VRAI, il faut que soit Condition1 soit
VRAI, soit que Condition2 soit VRAI. Si toutes les deux sont VRAI, ou
que toutes les deux sont FAUX, alors le résultat global est considéré
comme FAUX. Le XOR est donc l'équivalent du "ou bien" du langage
courant.
• Enfin, le NON inverse une condition : NON(Condition1) est VRAI si
Condition1 est FAUX, et il sera FAUX si Condition1 est VRAI. Retenons
que plutôt d’écrire NON(Prix > 20), il serait plus simple d’écrire tout
bonnement Prix=<20.
27
une étiquette ou un label sur la ligne à laquelle on se branche. (numéro de
l’instruction choisi par le programme).
Exemple :
Lire A, B
S=A+B
D=A-B
Aller à 10
Afficher “ la somme de ces deux termes est” ; S
10 Afficher “ la différence du 1er par le 2ème terme est” ; D
28
SELON Variable de comparaison
Cas Expression1: Action1
Cas Expression2: Action2.1
Action2.2
…
[AUTRE[S] CAS : Action autre(s)cas]
FIN
Exemple :
En langage C ou C++, case s'emploie obligatoirement à l'intérieur d'une
instruction switch :
switch (expression)
{
case exp1 :
//…instructions exécutées si expression est égale à la valeur de exp1…
break ;
case exp2 :
//…instructions exécutées si expression est égale à la valeur de exp2…
break ;
…
default :
//…instructions exécutées si expression n’est égale à aucune valeur de
case…
Boucle Condition
...
Action composée
29
...
Fin Boucle
Ordinogramme :
30
La boucle peut donc être exécutée un nombre infini de fois, aussi longtemps
que condition est différent de zéro ou True. Les instructions ne sont jamais
exécutées si condition est initialement False.
Exemple :
Début
Var S, I : Entiers
S 0
I 1
Tant que I ≤ 100 faire
S S+I
I I+1
Fin Faire
Afficher S
Fin
Ordinogramme :
31
Exemple :
Début
Var S, I : Entiers
S 0
I 1
Répéter
S S+I
I I+1
Jusque à ce que I 100
Afficher S
Fin
2° La boucle Pour
Les boucles Tant que sont particulièrement utiles lorsque vous ne savez pas
combien de fois les instructions doivent être exécutées dans la boucle.
Cependant, lorsque vous savez combien de fois les instructions doivent être
exécutées, il est préférable d'utiliser une boucle Pour. Contrairement à la
boucle Tant que, la boucle Pour inclut une variable appelée compteur dont la
valeur augmente (ou diminue) à chaque itération de la boucle.
Syntaxe :
Pour V ← vd à vf (inc n)
Actions
Fin pour
32
Ordinogramme :
A noter aussi que l'argument peut être positif ou négatif. Dans le premier
cas, la valeur de vd doit être inférieure ou égale à celle de vf pour que les
instructions soient exécutées. Dans le second cas, il faut que la valeur de vd
soit supérieure ou égale à celle de vf pour que le corps de la boucle soit
exécuté. Si le pas n'est pas défini, la valeur par défaut de l'argument est 1.
Exemple 1
On se propose d’écrire un algorithme qui calcule et affiche la somme
S = 1+2+3+…+100. On peut procéder de la manière suivante :
33
Début
Var S, I : Entiers
S 0
I 1
5 S S+I
I I+1
Si I 100 alors Aller à 5
Afficher S
Fin
Noter que la ligne 5 et les deux autres qui suivent, seront exécutées 100 fois de
manière répétitive. Cette partie s’appelle boucle ; et I est le compteur de la
boucle.
On peut améliorer cet algorithme en utilisant le schéma itératif.
Début
Var S, I : Entiers
S 0
Pour I 1 à 100
S S+I
Fin pour I
Afficher S
Fin
Exemple 2:
Pour i = 1 à 10
Tant que
Afficher "Personne N°"; i
Lire "Introduire son âge", Age
Faire Age > 18
Fin pour i
Imbrication de boucles
Plusieurs boucles peuvent être imbriquées l'une dans l'autre, à la manière des
poupées russes. Il faut tout de même respecter une certaine logique. Le haut de
la petite poupée ne s'emboîte pas avec la base de la grande :
Pour i = 1 à 10
Pour j = 1 à 10
34
Afficher j; " fois "; i;" égal "; j * i
Fin pour j
Fin pour i
Il s’agit d’une boucle dont les instructions se répètent à l’infini. On peut sortir
d’une telle boucle par une instruction de débranchement effectuée par
exemple à l’issue d’un test.
A noter que l’oubli d’une instruction de débranchement dans une telle boucle
génère un programme qui ne s’arrête pas !
Exercices
Exercice 1
Ecrire un algorithme qui demande à l’utilisateur un nombre compris entre 1 et
3 jusqu’à ce que la réponse convienne.
Exercice 2
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à
ce que la réponse convienne. En cas de réponse supérieure à 20, on fera
apparaître un message : « Plus petit ! », et inversement, « Plus grand ! » si le
nombre est inférieur à 10.
35
Exercice 3
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.
Exercice 4
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite écrit la
table de multiplication de ce nombre, présentée comme suit (cas où
l'utilisateur entre le nombre 7) :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21
…
7 x 10 = 70
Exercice 5
Ecrire un algorithme qui demande un nombre de départ, et qui calcule la
somme des entiers jusqu’à ce nombre. Par exemple, si l’on entre 5, le
programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
NB : on souhaite afficher uniquement le résultat, pas la décomposition du
calcul.
Exercice 6
Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa
factorielle.
NB : la factorielle de 8, notée 8 !, vaut
1x2x3x4x5x6x7x8
Exercice 7
Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur,
et qui lui dise ensuite quel était le plus grand parmi ces 20 nombres :
Entrez le nombre numéro 1 : 12
Entrez le nombre numéro 2 : 14
etc.
Entrez le nombre numéro 20 : 6
Le plus grand de ces nombres est : 14
Modifiez ensuite l’algorithme pour que le programme affiche de surcroît en
quelle position avait été saisie ce nombre : C’était le nombre numéro 2
Exercice 8
Réécrire l’algorithme précédent, mais cette fois-ci on ne connaît pas d’avance
combien l’utilisateur souhaite saisir de nombres. La saisie des nombres
s’arrête lorsque l’utilisateur entre un zéro.
36
Exercice 9
Lire la suite des prix (en dollars entiers et terminée par zéro) des achats d’un
client. Calculer la somme qu’il doit, lire la somme qu’il paye, et simuler la
remise de la monnaie en affichant les textes "10 dollars", "5 dollars" et
"1 dollar" autant de fois qu’il y a de coupures de chaque sorte à rendre.
Exercice 10
Écrire un algorithme qui permette de connaître ses chances de gagner au
tiercé, quarté, quinté et autres impôts volontaires.
On demande à l’utilisateur le nombre de chevaux partants, et le nombre de
chevaux joués. Les deux messages affichés devront être :
Dans l’ordre : une chance sur X de gagner
Dans le desordre : une chance sur Y de gagner
X et Y nous sont donnés par la formule suivante, si n est le nombre de
chevaux partants et p le nombre de chevaux joués (on rappelle que le signe !
signifie "factorielle", comme dans l'exercice 6 ci-dessus) :
X = n ! / (n - p) !
Y = n ! / (p ! * (n – p) !)
NB : cet algorithme peut être écrit d’une manière simple, mais relativement
peu performante. Ses performances peuvent être singulièrement augmentées
par une petite astuce. Vous commencerez par écrire la manière la plus simple,
puis vous identifierez le problème, et écrirez une deuxième version permettant
de le résoudre.
Le tableau ci-dessous indique les symboles les plus couramment usités dans
le tracé des ordinogrammes :
37
Symbole Nom
Terminal
Entrée / Sortie
Traitement
Décision
1. Symbole terminal
2. Symbole d’entrée/sortie
3. Symbole de traitement
38
Le symbole rectangulaire est utilisé pour indiquer une opération de traitement.
Il peut être une instruction d’affectation.
Exemple
:
Produit = A x B
4. Symbole de décision
Le symbole losange est utilisé pour indiquer toute question posée au cours de
l’algorithme ; la réponse amenant à une décision.
Symbole Signification
Egal à
Différent de
< Plus petit que
Plus petit ou égal à
Plus grand que
>
Plus grand ou égal à
Exemple
39
D B2 – 4*A*C
Si D < 0 Alors
Afficher "Pas de solution"
Sinon si D = 0 Alors
X - B / 2*A
Afficher "La racine double est " ; X1
Sinon
X1 (- B √ ) / 2*A
X2 (- B √ ) / 2*A
Afficher "Les racines distinctes sont " ; X1 ; X2
Fin Si
Fin.
Ordinogramme
Début
Lire A, B, C
D B2 – 4*A*C
V F
D<0
V F
D=0
"Pas de solutions »
X - B / 2*A X1 (- B + D ) / 2*A
X2 (- B - D ) / 2*A
Afficher X
Afficher X1, X2
Fin
40
CHAPITRE III. SOUS-PROGRAMMES
III.1 Procédures et fonctions
41
Une autre différence réside en ce que le sous-programme comportera une
instruction « Retour » plutôt qu’une instruction « Sortie » ; ceci permet
d’insister sur le fait que le contrôle est transféré au programme appelant après
que l’exécution du sous-programme ait été achevée.
Les sous-programmes se classent fondamentalement en deux catégories : les
sous-programmes de fonction et les sous-programmes de procédure. Une
de grandes différences entre eux est qu’une fonction ne renvoie qu’une seule
valeur au programme appelant, alors qu’une procédure peut en renvoyer plus
d’une.
III.1.1. La procédure
42
Exemple
III.1.2. La fonction
Une fonction est un sous programme qui retourne obligatoirement une valeur.
Cette dernière sera stockée dans une variable qui porte le même nom que la
fonction.
Exemple (suite)
43
Si Montant ≥ plafond Alors
taux = 0,1 Sinon
taux = 0,03
Fin Si ;
Commission = Montant * taux ;
fin.
Procédure Calcul_Salaire ;
Var Salaire, Sal_fixe, Chif_Aff : réel ;
début
Saisie(Sal_fixe, Chif_Aff) ;
Salaire = Sal_fixe + Commission(Chif_Aff )
Afficher(„‟ Le salaire est de : ‘’ Salaire) ;
fin.
Commentaires :
44
programmes peuvent avoir des variables locales portant le même nom
éventuellement. Celles-ci n’auront pas la même signification pour chacun
d’eux. On dira également que la portée d’une variable locale est le sous-
programme où elle a été définie.
Exemple :
Sal_fixe et Chif_Aff sont des variables locales à Calcul_Salaire.
Si une variable doit être accessible par tous les sous-programmes, il faut la
définir comme une variable globale. Ce qui veut dire qu’elle est visible par tout
sous-programme et que sa valeur peut être utilisée ou modifiée n’importe où.
La portée d’une variable globale est l’ensemble des sous-programmes
pouvant l’utiliser.
A remarquer que :
Fonctions de bibliothèque
On appelle fonctions de bibliothèque d’un langage donné, les fonctions
incorporées au compilateur du langage du fait de leur utilisation fréquente.
C’est la cas des fonctions : mod, sqrt, div, abs, int, cos, sin, etc.
Exemple :
45
• Mid(chaîne,n1,n2) : renvoie un extrait de la chaîne, commençant au
caractère n1 et faisant n2 caractères de long.
Ce sont les deux seules fonctions de chaînes réellement indispensables.
Cependant, pour nous épargner des algorithmes fastidieux, les langages
proposent également :
• Left (chaîne,n) : renvoie les n caractères les plus à gauche dans
chaîne.
• Right (chaîne,n) : renvoie les n caractères les plus à droite dans chaîne
• Trouve (chaîne1,chaîne2) : renvoie un nombre correspondant à la
position de chaîne2 dans chaîne1. Si chaîne2 n’est pas comprise dans
chaîne1, la fonction renvoie zéro.
Un sous-algorithme avec paramètres est très utile parce qu’il permet de répéter
une série d’opérations complexes pour des valeurs qu’on ne connaît pas à
l’avance. Il existe deux types de passage de paramètres : par valeur et par
variable (dite aussi par référence ou encore par adresse).
Syntaxe :
Procédure nom_procédure (param1 :type1 ; param2, param3 :type2) ;
Fonction <nom_fonction> (param1 :type1 ; param2 :type2) : Type_fonction ;
Exemple :
Soit l’algorithme suivant.
Algorithme pas-val ;
Déclaration
M : entier ;
Procédure P1 (nombre : entier) ;
46
Début
Si nombre < 0 Alors
nombre nombre
FinSi ;
Ecrire (nombre)
Fin ;
Début
Lire (M) ;
P1 (M) ;
Ecrire (M)
Fin.
M Ecran
M Nombre Ecran
Syntaxe :
Procédure nom_procédure (Var param1 :type1, param2, param3 :type2) ;
Fonction <nom_fonction> (Var param1 : type1, param2 :type2) : Type_fonction
;
III.3.3 Remarque
Syntaxe :
Procédure nom_procédure (Var param1 :type1 ; param2, param3 :type2) ;
Dans ce cas param1 est passé par variable(ou par adresse ou par référence)
alors que les deux autres le sont par valeur.
Exemple :
Soit l’algorithme précédent modifié dans le type de passage de paramètre.
Algorithme pas-val ;
Déclaration
M : entier ;
Procédure P1 (nombre : entier) ;
Début
Si nombre < 0 Alors
nombre nombre
FinSi ;
Ecrire (nombre)
Fin ;
Début
Lire (M) ;
P1 (M) ;
Ecrire (M)
Fin.
nombre
Exemple
Algorithme val_abs ;
Déclaration
a, b : Entier ;
Fonction abs (unEntier : Entier) : Entier ;
Déclaration
valeurAbsolue : Entier ;
Début
si unEntier ≥ 0 alors
valeurAbsolue unEntier
sinon
valeurAbsolue unEntier
finsi ;
abs valeurAbsolue
Fin ;
Début
Ecrire ('Entrez un entier : ') ;
Lire (a) ;
b abs (a) ;
Ecrire ('la valeur absolue de ', a, ' est ', b)
Fin.
49
Exercices
Exercice 1
Pour chacun des cas suivants donner un sous- programme qui permet de :
a) Saisir un caractère Majuscule.
b) Saisir une chaîne de caractère non vide et de longueur maximale égale à
20.
c) Vérifier est-ce qu’une chaîne de caractère donnée est alphabétique ou
non.
d) Remplir un tableau T par N entiers positifs croissant.
e) Afficher un tableau T de N éléments.
f) Compter l'occurrence (nombre d'apparition) d'un caractère dans une
chaîne.
g) Vérifier la présence d'un caractère dans une chaîne.
h) Déterminer le maximum d’un tableau.
i) Inverser une chaîne de caractère.
j) Inverser une chaîne de caractère.
Exercice 2
Soit l'Algorithme suivant :
Fonction Traitement (T : Tab ; N : Entier) : Entier
NB 0
Pour i de 1 à N faire
Si Non (majus (T [i]) dans ["A", "E", "O", "I", "U", "Y"]) alors
NB NB + 1
Fin si
Fin Pour
Traitement NB
Fin Traitement
1. Préciser le rôle de la fonction Traitement suite à l'exécution suivante :
T ‘’T’’ ‘’e’’ ‘’c’’ ‘’h’’ ‘’n’’ ‘’o’’ ‘’I’’ ‘’o’’ ‘’g’’ ‘’i’’ ‘’e’’
1 2 3 4 5 6 7 8 9 10 11
Exercice 3
Ecrire un programme permettant d’afficher tous les couples d’entiers (m,n)
vérifiant la propriété suivante :
m [1,100] et n[2,15]
Et m figure dans l’écriture du produit m.n
Exemples :
1. Si m=20 et n=6
50
Alors le produit m.n = 120 contient le nombre ; dans ce cas
le couple (20,6) sera affiché.
2. Si m=20 et n=12
Alors le produit m.n = 20 * 12 = 240 ne contient pas le
nombre 20.
Exercice 4
Soit l'algorithme suivant :
Fonction Somme (p : entier) : entier
S 0
Pour i de 1 à (p div 2) faire
Si (p mod i = 0) Alors
S S+i
FinSi
Fin pour
Somme S
Fin Somme
Exercice 5
Un nombre est dit parfait s’il est égal à la somme de ces diviseurs (sauf lui
même).
Exemple : 6=3+2+1.
Ecrire un algorithme du programme intitulé parfait qui permet de saisir un
entier strictement positif puis il vérifie s’il est parfait.
Exercice 6
La « multiplication Russe » est une méthode particulière permettant la
multiplication de deux entiers A et B en utilisant seulement la multiplication par
2, la division par 2 et l’addition.
Exemple :
51
Pour A =17 et B = 19, le produit de A par B se fait comme suit :
A B
17 19
Le premier nombre est divisé par 2 (division entière) et le deuxième est
multiplié par 2 : on aura
8 38
Le processus se répète jusqu’à avoir dans la première colonne 1 :
17 19
8 38
4 76
2 152
1 304
Le résultat est la somme des nombres de la deuxième colonne qui sont en
face des nombres impairs de la première colonne (donc les nombres de la
deuxième colonne qui sont en face des nombres pairs de la première colonne
seront ignorés).
17 19
8 38 Ignoré
4 76 Ignoré
2 152 Ignoré
1 304
17 * 19 = 19+304 = 323
Exercice 7
Ecrire un algorithme intitulé info qui permet de :
T
52
Samir Système temporairement Bonjour ses Elle
Exercice 8
Un texte est dit tautogramme si tous les mots commencent par la même lettre.
Exemple :
« Mazarin, ministre malade, méditait même moribond malicieusement mille
maltôtes »
On suppose que la phrase est écrite correctement. (Pas d’espace en double)
Ecrire un algorithme qui permet de vérifier si une chaîne de caractère saisie au
clavier est tautogramme ou non.
Exercice 9
Il est demandé d’écrire un algorithme qui demande à l’utilisateur d’entrer une
valeur entière positive appelée (Valeur) puis
a. qui indique à l’utilisateur si Valeur est un nombre à 2 chiffres,
b. qui affiche la factorielle de Valeur,
c. et qui saisit des valeurs au nombre de Valeur puis affiche la plus
grande valeur saisie.
53
CHAPITRE IV STRUCTURES DE DONNEES
Un tableau est une structure de données qui permet de conserver dans une
seule entité plusieurs valeurs de même type. Un tableau nous évite de
multiplier des variables lorsque les données sont nombreuses et de même
type.
Exemple :
Un tableau linéaire TEMP qui donne les températures moyennes de 12 mois de
l’année.
28 27 29 24 28 25 26 24 22 23 27 29
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 :
Note (4) = 24 (quatrième élément du tableau).
On peut créer des tableaux contenant des variables de tous types : tableaux
de numériques, tableaux de caractères, tableaux de booléens, etc.
Pour affecter une valeur dans un tableau, il faut préciser l’emplacement exact
dans ce tableau. Le rang de cet emplacement est appelé l’indice du tableau.
Exemple :
54
Déclarer Temp[n], où Temp est le nom du tableau et n est l’indice. -
Exemple :
On veut faire saisir des notes pour un calcul de moyenne, mais on ne sait pas
combien il y aura de notes à saisir. Le début de l’algorithme sera quelque
chose du genre :
55
Un tableau doit être déclaré comme tel avant son utilisation, en précisant la
taille (intervalle de sa définition) et le type de valeurs qu’il contiendra. La
syntaxe retenue est :
Var Tableau NomTableau (taille du tableau) : type d’éléments
Dans notre exemple, nous créerons donc un tableau appelé Tab. Chaque note
individuelle (chaque élément du tableau Note) sera donc désignée Tab(0),
Tab(1), etc. La déclaration est : Var Tableau Tab(15) : réels.
Exemple
Les tableaux ont beaucoup d’avantage du fait que pour les traiter, on utilise
des boucles. Par exemple, pour effectuer notre calcul de moyenne, cela
donnera :
Début
Var Tableau Note(15) : réels
Var Moy, Som : réels
Pour i ← 1 à 15
Afficher "Entrez la note n°", i
Lire Note(i)
FinPour i
Som ← 0
Pour i ← 1 à 15
Som ← Som + Note(i)
Fin Pour i
Moy ← Som / 15
Afficher Moy
Fin
A noter qu’à la place de deux boucles ci haut, on aurait pu faire une seule
dans laquelle on aurait tout fait d’un seul coup.
Remarque générale : lors de parcours d’un tableau, l’indice sert à désigner
les éléments d’un tableau et doit être souvent un nombre en clair, mais il peut
être aussi une variable, ou une expression calculée. La valeur de cet indice
doit être égale au moins 1, doit être un nombre entier et doit nécessairement
être inférieure et égale au nombre d’élément du tableau
Quand vous déclarez un tableau, faites suivre son nom par la limite
supérieure entre parenthèses. La limite supérieure ne peut pas dépasser la
plage d'un type de données Long (-2 147 483 648 à 2 147 483 647). Par
exemple, ces déclarations de tableaux peuvent apparaître dans la section
Déclarations d'un module :
56
Declarer Counters(14) : Entiers ' 15 éléments.
Declarer Sums(20) : Réels ' 21 éléments.
a. Recherche linéaire
57
single. Lorsqu’on veut chercher la température maximale et minimale dans ce
tableau de 12 températures, on procédera comme suit :
Recherche de l’élément maximal
On doit parcourir le tableau et de conserver la valeur maximale dans
une variable dite temporaire « TempMax ».
Au départ, on suppose que la température maximale est la première du
tableau.
Var TempMax : réel
TempMax = Temp (1)
Pour i ← 2 à 12
Si Temp (i) > TempMax alors TempMax ← Temp (i)
Fin Pour i
A la fin du processus, la variable TEMPMAX contiendra la valeur
recherchée.
Recherche de l’élément minimal
Pareillement que lors de la recherche de l’élément maximal, mais ici, il suffit de
conserver la valeur minimale dans une variable dite temporaire
« TempMin».
Au départ, on suppose que la température minimale est la première du
tableau.
Var TempMin : réel
TempMin = Temp (1)
Pour i ← 2 à 12
Si Temp (i) TempMin alors TempMin ← Temp (i)
Fin Pour i
A la fin du processus, la variable TEMPMin contiendra la valeur
recherchée.
c. Recherche dichotomique
La recherche dichotomique (en anglais : binary search) est un algorithme de
recherche efficace et rapide qui recherche la position d’un élément dans une
structure de données triée, en l’occurrence ici un tableau trié. .
Lorsqu’on veut rechercher la position d’un élément dans un tableau trié selon
l’ordre croissant des nombres entiers concernés dans ce tableau, on procède
à la recherche dichotomique. On peut aussi procéder à la recherche
séquentielle, mais cette méthode, pourtant facile à écrire et à mettre en œuvre,
58
n’est pas facile en termes de temps d’exécution, à moins que le tableau
parcouru soit très petit.
On développe ici la version dichotomique qui est la plus efficace en temps
d'exécution.
Recherche de 46 :
Etape 1 : comparaison de 46 avec t(4) (4=(8+1)÷2), t(4)<46 => recherche dans
[5..8]
Etape 2 : comparaison de 46 avec t(6), (6=(8+5)÷2), t(6)>46 => recherche
dans [5..5]
Etape 3 : comparaison de 46 avec t(5), t(5)=46 => élément cherché est trouvé
à l'indice 5
Recherche de 10 :
Etape 1 : comparaison de 10 avec t(4), t(4)>10 => recherche dans [1..3]
Etape 2 : comparaison de 10 avec t(2), t(2)>10 => recherche dans [1..1]
Etape 3 : comparaison de 10 avec t(1), t(1)<10 => recherche dans [2..1],
Borne inférieure devient supérieure à la borne supérieure, donc on met fin à
l'algorithme et l'élément cherché n'a pas été trouvé !
Voyons l'implémentation de cette fonction :
Fonction RechercheDicho(e : entier, n : entier, Tableau t(n) : entier):entier
Début
D←1
F←n
trouve ← faux
Tant que D <= F et non (trouve) faire
i ← (D + F) / 2
Si t[i] = e alors
trouve ← vrai sinon
si t[i] > e alors
F ← i -1
Sinon
D ← i +1
Fin si
59
Fin Si
Fin faire
Si trouve alors
indice ← i
sinon
indice ← -1
Fin Si
retourne indice
Fin
Légende :
60
3. Tri d’un tableau
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.
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 :
61
• Boucle secondaire : à partir de ce point de départ mouvant,
recherchons jusqu’à la fin du tableau quel et le plus petit élément.
Une fois que nous l’avons trouvé, nous l’échangeons avec le point de
départ. Cela s’écrit : boucle principale : le point de départ se décale à
chaque tour
Pour i ← 0 a 10
On considère provisoirement que t(i) est le plus petit élément
posmini ← i
on examine tous les éléments suivants
Pour j ← i + 1 a 11
Si t(j) < t(posmini) Alors
posmini ← j
Finsi
j suivant
A cet endroit, on sait maintenant où est le plus petit élément. Il ne reste plus
qu'a effectuer la permutation.
temp ← t(posmini)
t(posmini) ← t(i)
t(i) ← temp
On a placé correctement l'élément numéro i, on passe à présent au suivant.
i suivant
b) Tri à bulles
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 que l’on n’ait plus aucune permutation à
effectuer. Les éléments les plus grands « remontent » ainsi peu à peu vers les
dernières places, ce qui explique la charmante dénomination de « tri à bulle ».
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.
Ceci est typiquement un cas de question « asymétrique » : il suffit que deux
éléments soient mal classés pour qu’un tableau ne soit pas trié. En revanche,
il faut que tous les éléments soient bien rangés pour que le tableau soit trié.
Nous utiliserons une variable booléenne Yapermute qui va nous indiquer si
nous venons ou non de procéder à une permutation au cours du dernier
balayage du tableau (dans le cas contraire, c’est signe que le tableau est trié,
et donc qu’on peut arrêter la machine à bulles). La boucle principale sera alors
:
62
Debut
…
TantQue Yapermute
…
FinTantQue
Fin
63
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
5. Mise à jour
Nous parlerons ici de l’ajout et de la suppression d’un élément dans un
vecteur. Supposons que nous voulions insérer un élément dans un vecteur
A de taille n. Si les éléments de A ne sont pas ordonnés, il n’y a qu’à ajouter
à la fin du vecteur. Si B est le vecteur mise à jour déclaré avec une taille
supérieure à celle de A, la mise à jour se fait par des actions suivantes :
Pour i de 1 à n,
:
Fin Pour i.
Cependant , si le vecteur A est trié, il faut d’a bord trouver la position où
doit être inséré avant de le faire. C’est de nouveau un travail de recherche.
Une fois trouvé, on ne peut pas affecter à de peur d’écraser ,
par conséquent, il faut d’abord libérer la place en déplaçant la partie du
vecteur d’une position vers la droite. Appelons B le
vecteur mise à jour ; la taille de B sera taille(A)+1 en cas d’ajout et taille(A)-1
en cas de suppression.
L’ajout correspondant à l’action :
Pour i de n à p (déc 1)
Faire
Fin faire
65
Fin faire.
EXERCICES
Exercice 1
Ecrire un algorithme qui déclare et remplisse un tableau de 7 valeurs
numériques en les mettant toutes à zéro.
Exercice 2
Ecrire un algorithme qui déclare et remplisse un tableau contenant les six
voyelles de l’alphabet français.
Exercice 3
Ecrire un algorithme qui déclare un tableau de 9 notes, dont on fait ensuite
saisir les valeurs par l’utilisateur.
Exercice 4
Que produit l’algorithme suivant ?
Tableau Nb(5) : Entier
Variable i : Entier
Début
Pour i ← 0 a 5
Nb(i) ← i * i
i suivant
Pour i ← 0 a 5
Ecrire Nb(i)
i suivant
Fin
Peut-on simplifier cet algorithme avec le même résultat ?
Exercice 5
Que produit l’algorithme suivant ?
Tableau N(6) : Entier
Variables i, k : Entier
Début
N(0) ← 1
Pour k ← 1 a 6
N(k) ← N(k-1) + 2
k Suivant
Pour i ← 0 a 6
Ecrire N(i)
i suivant
Fin
66
Exercice 6
Que produit l’algorithme suivant ?
Tableau Suite(7) : Entier
Variable i : Entier Debut
Suite(0) ← 1
Suite(1) ← 1
Pour i ← 2 a 7
Suite(i) ← Suite(i-1) + Suite(i-2)
i suivant
Pour i ← 0 a 7
Ecrire Suite(i)
i suivant
Fin
Exercice 7
Ecrivez un algorithme permettant à l’utilisateur de saisir un nombre
quelconque de valeurs, qui devront être stockées dans un tableau. L’utilisateur
doit donc commencer par entrer le nombre de valeurs qu’il compte saisir. Il
effectuera ensuite cette saisie. Enfin, une fois la saisie terminée, le programme
affichera le nombre de valeurs négatives et le nombre de valeurs positives.
Exercice 8
Ecrivez un algorithme calculant la somme des valeurs d’un tableau (on
suppose que le tableau a été préalablement saisi).
Exercice 9
Ecrivez un algorithme constituant un tableau, à partir de deux tableaux de
même longueur préalablement saisis. Le nouveau tableau sera la somme des
éléments des deux tableaux de départ.
Tableau 1 :
Tableau 2 :
Tableau à constituer :
67
Exercice 10
Ecrivez un algorithme qui permette de saisir un nombre quelconque de
valeurs, et qui les range au fur et à mesure dans un tableau. Le programme,
une fois la saisie terminée, doit dire si les éléments du tableau sont tous
consécutifs ou non. Par exemple, si le tableau est :
Exercice 11
Ecrivez un algorithme qui trie un tableau dans l’ordre décroissant.
Vous écrirez bien entendu deux versions de cet algorithme, l'une employant le
tri par insertion, l'autre le tri à bulles.
Exercice 12
Ecrivez un algorithme qui inverse l’ordre des éléments d’un tableau dont on
suppose qu'il a été préalablement saisi (« les premiers seront les derniers… »)
Exercice 13
Ecrivez un algorithme qui permette à l’utilisateur de supprimer une valeur d’un
tableau préalablement saisi. L’utilisateur donnera l’indice de la valeur qu’il
souhaite supprimer. Attention, il ne s’agit pas de remettre une valeur à zéro,
mais bel et bien de la supprimer du tableau lui-même! Si le tableau de départ
était :
68
Exercice 14
Ecrivez l'algorithme qui recherche un mot saisi au clavier dans un dictionnaire.
Le dictionnaire est supposé être codé dans un tableau préalablement rempli et
trié.
Vous pouvez déclarer l'une et/ou l'autre de ces deux dimensions avec des
limites inférieures explicites :
Déclarer I, J: Entiers
MatrixA (1 à 10, 1 à 10) : Réels
69
Pour I = 1 à 10
Pour J = 1 à 10
MatrixA (I, J) = I * 10 + J
Next J
FinPour I
56 54 1 - 56 20 22
72 8 54 34 43 2
70 5 16 78 90
56 23 - 47 0 12
M (2,1) ← - 56
Cette instruction modifie le contenu de la case (2,1) du tableau M. (72 en – 56)
Exemple
L’algorithme qui calcule la somme des éléments dans ce tableau
70
Début
Var Somme : réel
Var Tableau m() : réels
Var li, co : entiers
Afficher "Combien y a-t-il de lignes à saisir ?" Lire
li
Afficher "Combien y a-t-il de colonnes à saisir ?"
Lire co
Redim m (li, co)
Pour i de 1 à li : Pour j de 1 à co : Lire m (i, j) : Fin pour j : Fin pour i
Somme ← 0
Pour i de 1 à li : Pour j de 1 à co : Somme ← Somme + m(i,j) : Fin pour j
Fin pour i
Afficher Somme
Fin
A Les listes
B Les arbres
Il existe un nœud au niveau 1 qui n’est pointé par aucun autre nœud :
c’est la racine de l’arbre
71
C Les graphes
A noter que toutes les structures de données citées dans cette section feront
l’objet d’un deuxième cours d’algorithmique dans la suite de votre parcours.
Elles seront traitées en détails dans ce cadre.
72
REFERENCES
73
TABLE DES MATIERES
74