Algorithmique
Algorithmique
Version 1.2
Sommaire 1
Sommaire
Sommaire 1
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Les structures conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Les structures itératives ou répétitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.2 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.3 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4 Les procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.2 Opérations sur les caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.3 Les chaînes de caractères. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.4 Exercice d’application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Chapitre 1
Introduction générale
La partie logicielle est celle à laquelle les instructions sont données pour exécuter des
actions bien précises : on parle de programme informatique.
Les programmes interagissent avec l’environnement ou les utilisateurs grâce aux périphé-
riques d’entrée et de sortie. Leur mise en œuvre est assurée par la partie matérielle au
cœur de laquelle se trouve le processeur.
Ordinateur de bureau
Un ordinateur de bureau est conçu pour être toujours au même endroit, généralement
sur un bureau. Il se compose :
1. d’une unité centrale : qui contient les principaux composants de l’ordinateur. C’est
également sur celle-ci que vous trouverez le bouton pour allumer l’ordinateur ;
2. d’un écran : qui permet d’afficher le contenu de l’ordinateur ;
3. d’un clavier : qui permet de communiquer avec l’ordinateur en tapant du texte ;
4. d’une souris : qui permet de déplacer le curseur à l’écran.
Il existe également des ordinateurs sur lesquels tous les composants sont regroupés derrière
l’écran, on les appelle ordinateurs all in one ou tout-en-un en français.
À ces ordinateurs, il faut ajouter un clavier et une souris pour pouvoir les utiliser.
Ordinateurs portables
Les ordinateurs portables sont conçus pour être compacts et mobiles. Ainsi, ils ne dis-
posent pas d’une unité centrale, tous les composants se situent sous le clavier.
Sur ce type d’ordinateur, brancher une souris n’est pas obligatoire, car il y a un touchpad :
une surface sensible au toucher qui permet de déplacer le pointeur à l’écran.
Comme pour les ordinateurs de bureau, d’autres périphériques peuvent être ajoutés.
Il existe aussi des tablettes, ce sont des ordinateurs mobiles à la taille réduite. Les écrans
sont tactiles et affichent un clavier virtuel. Tous les composants sont situés derrière l’écran.
Ainsi, les tablettes n’ont pas besoin d’unité centrale, ni de clavier ou de souris. Sur certains
modèles, il est toutefois possible d’y connecter un clavier et/ou une souris.
Le processeur
C’est la mémoire temporaire de l’ordinateur, c’est là où sont stockés tous les fichiers
sur lesquels l’utilisateur est en train de travailler. Cette mémoire est temporaire, car les
informations sont supprimées lors de l’arrêt de l’ordinateur.
Plus cette mémoire est importante, plus l’ordinateur travaille facilement et rapidement
et plus il peut gérer des tâches différentes.
C’est le support sur lequel on peut stocker des informations. Les capacités de stockage
ne cessent d’augmenter et permettent donc d’enregistrer un grand nombre de données :
documents, photos, films...
Il y a actuellement deux types de disques durs : SSD et HDD. Les SSD ont l’avantage
d’être extrêmement rapides, mais ils sont plus chers et de capacité limitée.
Elle permet de produire une image affichable sur un écran d’ordinateur. La carte gra-
phique peut être intégrée à la carte mère ou dédiée, c’est-à-dire qu’elle est séparée et
qu’elle dispose de sa propre mémoire vive. Une carte graphique dédiée est plus puissante,
mais coûte plus cher. Elle permet de faire fonctionner correctement des jeux en 3D, des
logiciels de retouche vidéo/photo par exemple.
Le ventilateur
Remarque 1
Pour un ordinateur de bureau, ces différents composants se retrouvent dans l’unité centrale.
Pour les ordinateurs all in one, ils se retrouvent derrière l’écran et pour les ordinateurs por-
tables, ils se retrouvent sous le clavier.
1.1.3 Le langage
Le langage informatique est un langage dans lequel il est aisé de communiquer avec
l’ordinateur. Il est composé de mots clés, de fonctions prédéfinies qui sont utilisés dans le
but de donner des instructions à une machine. On distingue deux (02) types de langages
en informatique : le langage machine et le langage évolué.
Le langage évolué ou langage haut niveau est un langage qui utilise les mots-clés du lan-
gage naturel. Leur utilisation est plus facile pour les programmeurs. Parmi ces langages,
on distingue les langages compilés et les langages interprétés.
1.2.1 Le programme
Un programme représente un assemblage et un enchaînement d’instructions élémentaires
écrites dans un langage de programmation et exécutées par un ordinateur afin de traiter
les données d’un problème et retourner les résultats. Le langage de programmation est
donc un langage de communication par le biais duquel on est en mesure de communiquer
avec l’ordinateur.
1.2.2 Le problème
Un problème est un ensemble de données et de traitements décrivant une situation que
l’on cherche à résoudre. Le but visé à travers la résolution du problème peut être :
- automatiser une tâche ;
- satisfaire un besoin ;
- informatiser un système.
Exemple 1.2.1
Supposons qu’un enseignant dispose d’un ordinateur et veut un programme de calcul des
moyennes. Le problème ici est : Mettre en place des moyens et des procédures afin que si l’on
fournit des notes, on obtienne en retour les moyennes.
Dans ce problème, les données sont les différentes notes. Les traitements consisteront à faire
la somme de toutes les notes que l’on divise par la somme des coefficients. Le résultat à la
fin de ce problème est la moyenne.
Si dans le programme, il est prévu de fournir d’autres résultats, ils pourront être fournis.
Un moyen de décrire la procédure de résolution d’un problème est d’écrire un algorithme.
1.2.3 L’algorithme
Un algorithme est l’enchaînement des actions ou instructions élémentaires nécessaires
pour faire exécuter une tâche à un ordinateur ; c’est-à-dire pour résoudre un problème.
L’algorithmique est donc l’art d’écrire des algorithmes. Il permet de se focaliser sur la
procédure de résolution du problème sans avoir à se soucier des spécificités d’un langage
particulier.
La mise en œuvre d’un programme commence par la réflexion sur le problème posé.
Ensuite la procédure identifiée pour la résolution est décrite dans un algorithme. Ce
dernier peut alors être traduit en programme dans un langage de programmation.
1.3.2 Exécution
Après que le programme est édité, il est enregistré sous la bonne extension dans un
emplacement précis sur l’ordinateur. Ensuite, il est traduit en code binaire (0 et 1) grâce
à un compilateur. La compilation produit donc un exécutable (.exe) que le processeur
exécute en respectant l’ordre des instructions.
A cette étape, on pense à reformuler le problème en utilisant des termes et des concepts
complètement différents de ceux utilisés dans le domaine d’application. Il s’agit ici de
penser aux données du problème qui peuvent être utilisées par l’ordinateur ou l’automate
pour résoudre ledit problème.
Cette étape fait suite à l’étape précédente. Ainsi, après avoir essayé de se focaliser sur
les données probables du problème, on cherche à identifier les variables d’entrée, les
variables intermédiaires et les variables de sortie.
Le second volet de cette étape inclut les différentes opérations ou les différents traitements
que l’on doit opérer sur ou avec les variables.
Il s’agit ici d’écrire la solution en respectant la syntaxe et en faisant usage des structures
et outils prévus par la science algorithmique.
Chapitre 2
Structure et syntaxe
On attribue un nom unique appelé identificateur à la variable. C’est à travers cet iden-
tificateur qu’on peut recueillir ou modifier la valeur de la variable. Les valeurs que peut
prendre une variable sont également précisées à travers les types.
Pour qu’un programme puisse utiliser une variable, il faut au préalable réserver la case-
mémoire à laquelle elle doit correspondre. Pour ce faire, il faut procéder à la déclaration
des variables qui est une instruction spécifique.
2.1.2.1 Identificateur
L’identificateur peut être composé de lettres et de chiffres. Il ne peut pas commencer par
un chiffre et ne peut comporter d’espace. Il doit être suffisamment signifiant pour qu’on
y reconnaisse la chose représentée.
2.1.2.2 Type
2.1.3.2 Exemple
VARIABLE : a, b : REEL
Ent1, Ent2, Ent3 : ENTIER
Justin : ENTIER
2.2.1.1 Syntaxe
<identificateur> ←− <expression> ;
2.2.1.2 Exemple
Justin ←− 12 ;
a ←− 4 * 2.5 ;
a ←− 0.0 ;
b ←− 5 * Justin + a + 2.5 ;
a ←− Justin ;
2.2.2 L’écriture
C’est une instruction qui permet au programme de fournir des informations ou de retour-
ner des résultats sous forme compréhensible pour l’utilisateur à travers l’écran.
2.2.2.1 Syntaxe
2.2.2.2 Exemple
2.2.3 La lecture
C’est une instruction qui permet de récupérer des données à partir du périphérique d’en-
trée (généralement le clavier). La valeur récupérée est rangée dans une variable.
2.2.3.1 Syntaxe
2.2.3.2 Exemple
PROGRAMME <NomProgramme>
VARIABLE : <var11>, <var12>, ... , <var1n> : <type1>
<var21>, <var22>, ... , <var2m> : <type2>
.
.
.
<varN1>, <varN2>, ... , <varNp> : <typeN>
DEBUT
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
FIN
PROGRAMME SommeEtProduit
VARIABLE : Ent1, Ent2, produit : ENTIER
DEBUT
ECRIRE ("Entrez les deux nombres entiers") ;
LIRE (Ent1, Ent2) ;
ECRIRE ("La somme donne : ", Ent1 + Ent2) ;
produit ←− Ent1 ∗ Ent2 ;
ECRIRE ("Le produit donne : ", produit) ;
FIN
PROGRAMME TableDeMultiplicationPartielle
VARIABLE : n : ENTIER
DEBUT
ECRIRE ("Entrez un entier") ;
LIRE (n) ;
ECRIRE (n, " × 1 = ", n) ;
ECRIRE (n, " × 2 = ", 2 ∗ n) ;
ECRIRE (n, " × 3 = ", 3 ∗ n) ;
ECRIRE (n, " × 4 = ", 4 ∗ n) ;
ECRIRE (n, " × 5 = ", 5 ∗ n) ;
FIN
Elle permet d’additionner deux variables de type entier ou réel. Son symbole est ( + ).
2.4.1.2 Soustraction
Elle permet de calculer la différence entre deux variables de type entier ou réel. Son
symbole est ( − ).
2.4.1.3 Multiplication
Elle permet de faire le produit de deux variables de type entier ou réel. Son symbole est
( ∗ ).
2.4.1.4 Division
Elle permet de faire le quotient de deux variables de type entier ou réel. Son symbole est
( / ). Il n’est pas rare de rencontrer le symbole (÷).
Cet opérateur permet d’obtenir la partie entière du quotient de deux variables de type
entier ou réel. Son symbole est div.
Cet opérateur retourne la partie entière d’une variable réelle. Son symbole est ent.
Cet opérateur permet d’élever un nombre à une puissance donnée. Son symbole est (^).
Il retourne le reste de la division de deux variables de type entier. Son symbole est mod.
Il ne s’applique pas aux nombres réels.
Exemple
PROGRAMME Calculs
VARIABLE : Ent1, Ent2, ENt3 : ENTIER
Rel1, Rel2 : REEL
DEBUT
1 Ent1 ←− 12 ; //Ent1 est initialisé à 12
2 Ent2 ←− 5 ; //Ent2 est initialisé à 5
3 Ent3 ←− (Ent1 ∗ Ent2) + Ent1 − (Ent2 / Ent1) ;
4 Rel1 ←− 14.75 ; //Rel1 est initialisé à 14.75
5 Rel2 ←− Rel1 + 3.15 ; //Rel2 = 17.90
6 Rel1 ←− Rel1 − (Ent2 / Ent1) ; //Rel1 = 14.33333
7 Ent1 ←− Ent1 + Ent1 DIV Ent2 ; //Ent1 = 14
8 Ent2 ←− Ent2 + ENT(Ent1 / Ent2) ; //Ent2 = 7
9 Ent3 ←− Ent1 MOD Ent2 ; //Ent3 = 0
FIN
Commentaire
Le programme Calculs ci-dessus manipule cinq (05) variables dont trois (03) de type
entier et deux (02) de type réel. Aux lignes d’instructions 1, 2 et 4, des initialisations
sont faites. A la ligne d’instruction 3, on tente d’affecter une valeur calculée à la variable
Ent3. Si l’on regarde de près le calcul effectué, on se rend compte qu’il y a un risque
d’obtenir un nombre à virgule à cause de la division. L’objectif dans ce cas pourrait donc
ne pas être atteint car Ent3 est de type entier. Au niveau des lignes d’instruction 7 et
8, ce problème est bien géré avec les opérateurs div et ent. Par contre, au niveau de la
ligne d’instruction 6, le problème ne se pose pas.
Les opérateurs de cette catégorie permettent de comparer les contenus de deux variables
ou de deux expressions. Les symboles ci-après sont utilisés :
< : infériorité ;
2.4.2.2 La négation
Elle permet de faire un NON logique sur une expression. Son symbole est non.
2.4.2.3 La conjonction
Elle permet de faire un ET logique sur deux expressions. Son symbole est et.
2.4.2.4 La disjonction
Elle permet de faire un OU logique sur deux expressions. Son symbole est ou.
Exemple
Chapitre 3
3.1 Introduction
La résolution d’un problème par un algorithme peut faire ressortir un certain nombre de
cas ou de situations qui nécessitent que l’on dise à l’ordinateur comment réagir. Il peut
s’agir de choix à opérer ou de comportement récurrent à gérer. En algorithmique, les
structures de contrôle sont prévues pour faire face à ce genre de situation.
SI (<condition>) ALORS
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
FINSI
NB : S’il y a une seule instruction, alors on peut se passer des accolades (ouvrante et
fermante). Les accolades jouent le rôle de délimitateur.
PROGRAMME Controle1
VARIABLE : val1 : ENTIER
DEBUT
ECRIRE ("Entrez un entier positif") ;
LIRE (val1) ;
Commentaire
Le programme exécute l’instruction qu’il y a entre si et finsi si et eulement si la condition
val1 < 0 est vérifiée.
3.2.2.1 Syntaxe
SI (<condition>) ALORS
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
SINON
<instruction1> ;
<instruction2> ;
.
.
.
<instructionm> ;
FINSI
PROGRAMME Controle2
VARIABLE : val1 : ENTIER
DEBUT
ECRIRE ("Entrez un entier positif") ;
LIRE (val1) ;
Commentaire
Dans le programme Controle2, si tant est que l’utilisateur entre une valeur qui n’est
pas inférieure à 0, il verra s’afficher Vous avez gagné. Mais dans ce cas, les autres
entrées au clavier qui ne seront pas des chiffres seront prises également en compte. Donc
le programme Controle2 nécessiterait qu’on gère ces cas aussi ; d’où le recours à des
structures imbriquées plus complexes du genre :
SI (<condition1>) ALORS
<instruction1> ;
.
.
.
SINON
<instruction1> ;
.
.
.
SI (<condition2>) ALORS
<instruction1> ;
.
.
.
SINON
<instruction1> ;
.
.
.
FINSI
SI (<condition3>) ALORS
<instruction1> ;
.
.
.
SI (<condition4>) ALORS
<instruction1> ;
.
.
.
FINSI
FINSI
FINSI
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
FTQ
Commentaire
Le programme n’exécutera les instructions qu’il y a dans la structure TANT_QUE que si la
condition est vérifiée et ne sortira de cette structure que si la condition n’est plus vérifiée.
Le bloc d’instructions sera répété encore et encore jusqu’à ce que la condition ne soit plus
vérifiée. Cette manière de répéter le bloc d’instruction s’appelle BOUCLER ou FAIRE
UNE BOUCLE.
3.3.1.2 Exemple
PROGRAMME Controle3
VARIABLE : val : ENTIER
DEBUT
ECRIRE ("Entrez un entier strictement positif") ;
LIRE (val) ;
FTQ
Commentaire
Si aucune instruction n’est prévue dans la structure (boucle) TANT_QUE pour permettre de
sortir de la structure, alors on est dans le cas d’une boucle infinie. De la même manière,
si une condition est posée de manière à ce qu’elle soit toujours vérifiée, alors on est
également dans le cas d’une boucle infinie.
Exemples de boucle infinie
PROGRAMME BoucleInfinie
VARIABLE : val : ENTIER
DEBUT
FTQ
FTQ
FIN
PROGRAMME Table_de_Multiplication
VARIABLE : i, n : ENTIER //i sert de compteur et permettra la
//répétition de la boucle et n la table voulue
DEBUT
i ←− 0 ;
ECRIRE ("Entrez un nombre entier") ;
LIRE (n) ;
FTQ
FIN
FAIRE
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
TANT_QUE (<condition>) ;
Commentaire
3.3.2.2 Exemple
PROGRAMME Table_de_Multiplication
VARIABLE : i, n, rep : ENTIER
DEBUT
FAIRE
i ←− 0 ;
ECRIRE ("Entrez un nombre entier") ;
LIRE (n) ;
FTQ
ECRIRE ("Voulez-vous recommencer ? Si oui, tapez 1, sinon,
tapez autre") ;
LIRE (rep) ;
TANT_QUE (rep = 1) ;
FIN
3.3.2.3 Exemple
Dans cet exemple, on va écrire un programme qui fait la somme cubique d’un certain
nombre entré par l’utilisateur.
PROGRAMME Somme_Cubique
VARIABLE : somme, N, i : ENTIER
DEBUT
ECRIRE ("Entrez une entier supérieur ou égal à 5") ;
LIRE (N) ;
i ←− 5 ;
somme ←− i^3 ;
i ←− i+1 ;
somme ←− somme + i^3 ;
FTQ
ECRIRE ("Le résultat est ", somme) ;
FIN
3.3.3.1 Syntaxe
REPETER
<instruction1> ;
JUSQU’A (<condition>) ;
3.3.3.2 Exemple
Nb ←− 1 ; Nb ←− 1 ; Nb ←− 1 ;
i ←− 10 ; i ←− 10 ; i ←− 10 ;
3.3.4.1 Syntaxe
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
FPOUR
OU
POUR
<var> ALLANT DE <début> A <Fin>
PAS DE <incrément>
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
FPOUR
3.3.4.2 Exemple
Dans l’exemple ci-après, on veut afficher tous les nombres compris entre 8 et 23.
PROGRAMME Affichage
VARIABLE : i : ENTIER
DEBUT
ECRIRE (i − 2) ;
FPOUR
FIN
Commentaire
A travers cet exemple, on peut voir que le fonctionnement de la structure itérative POUR
est tel que la variable compteur prend toutes les valeurs de l’intervalle de parcours y
compris les valeurs des bornes. Ces valeurs successives sont définitives et des manipu-
lations qui pourraient être faites sur elles dans le bloc d’instructions n’auront aucun
impact sur la manière dont elles sont incrémentées ou décrémentées selon l’instruction
ALLANT DE ... A ... PAS DE ....
Chapitre 4
Les tableaux
Un tableau est un type complexe de variable. Il est caractérisé par le nombre maximale
de valeurs qu’il peut contenir et le type de ces valeurs.
4.2.2 Syntaxe
<nomVariable>[<Nmax>] : <type>
Exemple
Note[100] : ENTIER
Remarque 5
Il n’est pas rare de faire la déclaration des tableaux comme suit :
Le mot clé TAB indiquant qu’il s’agit d’une variable de type tableau.
PROGRAMME Notes_Etudiants
VARIABLE : Moy, Ecart : REEL
N, i, Min, Max : ENTIER
Notes[1000] : ENTIER
DEBUT
ECRIRE ("Combien de notes ?") ;
LIRE (N) ;
Moy ←− 0 ;
Min ←− 20 ;
Max ←− 0 ;
FPOUR
Moy ←− Moy / N ;
Ecart ←− (Notes[0] − Moy)^2 ;
Commentaire
On peut constater que les index de la variable Notes varient de 0 à N-1. N étant le nombre
de valeurs que l’on veut stocker. En règle générale, c’est ce qui se fait. Mais on peut faire
varier les index d’une variable d’une valeur a donnée à une valeur b donnée (avec a<b)
selon l’utilisation que l’on veut faire des données stockées.
Pour parcourir les valeurs du tableau, on doit faire usage d’une boucle. La structure POUR
est recommandée à cet effet. Lorsque l’on veut afficher une valeur précise, on utilise son
index.
Lorsqu’il s’agit de trois nombres, les structures conditionnelles imbriquées peuvent être
utilisées pour régler le problème de tri. Dans ce cas, on aura à gérer 3! possibilités. Mais
quand il va s’agir de n nombres, le travail sera fastidieux non seulement du point de vue
du nombre de valeurs à stocker, mais aussi du point de vue du nombre de possibilités à
gérer.
Pour gérer donc le tri de n nombres, il est préférable de faire usage des tableaux et de
minimum local ou maximum local. Pour ce faire, on peut imaginer plusieurs procédures,
mais elles peuvent toutes se ramener en deux cas :
- On fait usage d’un premier tableau pour stocker les nombres à ranger et on fait le
classement dans un second tableau.
PROGRAMME Tri_croissant
VARIABLE : T1[100], T2[100] : ENTIER
pos, i, j, N : ENTIER
min, max : ENTIER
DEBUT
ECRIRE ("Combien de nombre voulez-vous trier ?") ;
LIRE (N) ;
FPOUR
max ←− T1[0] ;
FPOUR
T2[N − 1] ←− max ; //maximum global
min ←− T1[0] ;
pos ←− 0 ;
FINSI
FPOUR
T2[i] ←− min ;
T1[pos] ←− max ; //ancienne valeur écrasée et remplacée
//par max pour que lors de prochaines
//itérations, elle ne soit pas prise
//en compte
FPOUR
FIN
PROGRAMME Tri_croissant
VARIABLE : T[100] : ENTIER
min, pos, temp, i, j, N : ENTIER
DEBUT
ECRIRE ("Combien de nombre voulez-vous trier ?") ;
LIRE (N) ;
FPOUR
min ←− T[0] ;
pos ←− 0 ;
FINSI
FPOUR
temp ←− T[0] ;
T[0] ←− T[pos] ;
T[pos] ←− temp ;
j ←− 1 ;
min ←− T[j] ;
pos ←− j ;
FINSI
FPOUR
temp ←− T[j] ;
T[j] ←− T[pos] ;
T[pos] ←− temp ;
j ←− j + 1 ;
FTQ
FIN
4.4.1.2 Syntaxe
<NomTableau>[N1][N2] : <type>
4.4.1.3 Exemple
Tab[50][20] : ENTIER
Commentaire
Avec cet exemple, on a déclaré un tableau de 50 lignes et 20 colonnes devant conte-
nir des valeurs de type ENTIER. D’une manière générale, la convention veut que l’on
énumère la ligne avant la colonne. Quant au type, tous les types de base sont permis
(REEL, ENTIER, CHAR, VARCHAR, BOOLEEN).
Exercice d’application
On veut collecter des données météo sur une période de 30 jours. Les données d’une jour-
née sont composées de la température relevée et de la vitesse du vent. Dans le programme
ci-après, on utilise les lignes pour faire varier les jours et les colonnes pour différencier la
donnée sur le vent de celle sur la température.
PROGRAMME Donnees_Meteo
VARIABLE : Tab[30][2] : REEL
i, j : ENTIER
DEBUT
ECRIRE ("Nous allons collecter vos données météo") ;
SI (j = 0) ALORS
SINON
FINSI
FPOUR
FPOUR
FIN
Exemple de parcours
Pour afficher la donnée du 25e jour relative au vent, on va faire :
ECRIRE (Tab[24][0]) ;
moy ←− 0 ;
Remarque 6
Le sens qui est donné à chaque dimension du tableau est important comme on a pu le voir
dans les exemples du tableau précédent. Il faudra donc faire attention à ne pas changer ce
sens lors de l’utilisation du tableau.
Exemple 4.5.1
Si l’on prend l’exemple précédent relatif de la météo, on peut vouloir collecter les données
journalières en question toutes les heures et également disposer de ces données pour tous
les mois. L’analyse de ces contraintes nous fait constater que chaque donnée stockée est
caractérisée par :
– Le mois (1 à 12),
– Le jour (1 à un maximum de 31),
– L’heure (1 à 24),
sans oublier le vent et la température qui se rapportent à la donnée elle-même. On se retrouve
donc à 4 dimensions que l’on doit toutes prendre en compte pour pouvoir distinguer les
données.
Chapitre 5
Les algorigrammes
5.1 Définitions
L’algorigramme est la représentation graphique de l’algorithme. Il permet de représenter
chaque opération élémentaire au moyen d’un symbole graphique normalisé.
Le diagramme est une suite de directives composées d’actions et de décisions qui doivent
être exécutés selon un enchaînement strict pour réaliser une tâche (ou séquence).
5.2 Symboles
5.2.1 Symboles de traitement
L’opération de test logique se fait sur une condition. Le résultat de cette opération im-
plique le choix d’une voix parmi plusieurs.
Le symbole de test logique est couramment employé pour représenter une décision ou un
aiguillage.
<opération 1> ;
<opération 2> ;
<opération 3> ;
SI (<condition>) ALORS
<operation 1> ;
FINSI
SI (<condition>) ALORS
<operation 1> ;
SINON
<operation 2> ;
FINSI
Algorithme Algorigramme
<operation 1> ;
<operation 2> ;
FTQ
Algorithme Algorigramme
FAIRE
<operation 1> ;
<operation 2> ;
TANT_QUE (<condition>) ;
Algorithme Algorigramme
<operation> ;
FPOUR
5.5 Exemples
5.5.1 Exemple 1
Nous allons illustrer l’algorithme de l’exemple de la page 24 sous la forme d’un algo-
rigramme.
5.5.2 Exemple 2
Pour cet exemple, nous utiliserons l’algorithme du tri croissant avec la technique du
swapping de la page 35.
Chapitre 6
Les sous-programmes
6.1 Introduction
Il arrive que dans les programmes algorithmiques, on ait des blocs d’instructions qui se
répètent. Pour éviter ces répétitions et parfois pour rendre la structure générale d’un
algorithme plus lisible, on peut décider d’extraire lesdits blocs d’instructions et de les
ranger dans une structure spéciale. On pourra donc les appeler à travers une seule ligne
d’instructions dans l’algorithme principal. Pour ce faire, les blocs d’instructions extraits
devront être identifiés (pour être appelés) et constituent des sortes d’algorithmes indé-
pendants. On distinguera donc l’algorithme dit algorithme principal de ces algorithmes
indépendants qu’on appelle sous-programmes.
6.2 Définitions
6.2.1 Sous-programmes
Un sous-programme est un moyen de nommer une action complexe généralement compo-
sée de plusieurs actions ou calculs élémentaires dans le but de :
- l’utiliser plusieurs fois parce que la résolution du problème nous y contraint ;
- rendre la structure d’un algorithme plus claire et plus lisible.
On parle de modularité pour désigner la qualité d’un algorithme à être divisé.
Il existe deux types (ou formes) de sous-programmes : les Fonctions et les Procédures.
6.2.2.1 Paramètres
Les paramètres d’une procédure ou d’une fonction constituent les données nécessaires à
son fonctionnement.
6.2.2.2 Arguments
Les arguments correspondent aux valeurs qui sont effectivement passées à la procédure
ou à la fonction au moment de son appel.
Soit f une fonction mathématique définie par f (x) = x3 − 2x2 + 5. On désire écrire un
algorithme dans lequel les images de plusieurs valeurs par la fonction seront calculées.
On décide donc d’utiliser une fonction.
6.3.2.2 Solution
PROGRAMME Ex_Appel
VARIABLE : a, b : REEL
DEBUT
ECRIRE ("Entrez une valeur") ;
LIRE (a) ;
b ←− ImagParf(a) ;
ECRIRE ("L’image par f de ", a, " est ", b) ;
FIN
6.4.1 Syntaxe
PROCEDURE <nomProcedure> (par1 : type, ..., parn : type)
VARIABLE : <déclaration des variables>
DEBUT
<instruction1> ;
<instruction2> ;
.
.
.
<instructionn> ;
FIN
FINPROCEDURE
PROCEDURE AfficherMenu ()
VARIABLE :
DEBUT
ECRIRE ("Menu") ;
ECRIRE ("Choix 1 : Addition, tapez A") ;
ECRIRE ("Choix 2 : Soustraction, tapez S") ;
ECRIRE ("Choix 3 : Multiplication, tapez M") ;
FIN
FINPROCEDURE
6.4.2.2 Exemple 2
PROGRAMME Sympa
VARIABLE : ent1, ent2 : ENTIER
choix : CHAR
DEBUT
AfficherMenu() ;
LIRE (choix) ;
ECRIRE ("Entrez deux entiers") ;
LIRE (ent1, ent2) ;
Chapitre 7
7.1 Introduction
Les chaînes de caractères et les caractères constituent des types de variables très utiles en
programmation. Mais leur utilisation est soumise à un certain nombre de contraintes dont
il faut cerner les subtilités. C’est pour cette raison qu’ils seront étudiés dans ce chapitre
afin de donner à l’apprenant tous les outils nécessaires pour pouvoir les manipuler.
Remarque 8
Un caractère est une lettre ou un chiffre ou un symbole. A tout cela, s’ajoute l’espace (␣) et le
vide (||). Le vide (||) ici est différent de l’espace (␣). Un espace peut séparer deux caractères,
mais un vide entre deux caractère signifie qu’ils sont juxtaposés. On pourra en déduire que
la fonction de suppression que peut offrir un clavier sera remplie en utilisant le caractère vide
(||). Ce caractère se met dans deux simples côtes (’ ’).
En informatique, le code ASCII est une valeur numérique qui est associée à chaque ca-
ractère. L’ensemble des codes est recensé dans une table nommée Table des codes ASCII.
Donc quand on stocke un caractère en mémoire, on mémorise en réalité son code ASCII
(American Standard Code forInformation Interchange).
CODE(<nomVariable>) ;
7.2.2.2 Exemple
ent1 ←− CODE(’A’) ;
ENTIER
z }| {
CAR(<code ASCII>), sinon CAR(<nomVariable>)
7.3.1.2 Syntaxe
<nonVariable> : VARCHAR
CHAINE
7.3.1.3 Exemple
7.3.3 Concaténation
Le but de la concaténation est de créer des chaînes de caractères en juxtaposant deux
ou plusieurs caractères et/ou chaînes de caractères. L’opérateur de concaténation est
remplacé par "//" ou " + ".
Exemple
7.3.4.2 Exemple
s ←− SSCHAINE("Baobab", 3, 3) ; // s = "oba"
prenom ←− Bill Gates, ce milliardaire ! ;
s2 ←− SSCHAINE(prenom, 7, 12) ; //s2 = "ates, ce mil"
7.3.6.2 Exemple
ch1 ←− "Baobab" ;
ch2 ←− "Bobaraba" ;
p ←− RANG(ch1, "oba", 1) ; //p = 3
p ←− RANG(ch1, "oba", 4) ; //p = 0
p ←− RANG(ch2, "a", 1) ; //p = 4
LONGUEUR(<chaine>) ;
Cet opérateur donne le nombre de caractères contenu dans la chaine de caractère <chaine>.
7.3.7.2 Exemple
a ←− LONGUEUR("Baobab") ; //a = 6
CVCHAINE(<Ent>) ;
ent ←− 25 ;
c ←− CVCHAINE(ent) ; //c = "25"
CVNOMBRE(<chaineEnt>) ;
Cet opérateur convertit une variable de type chaine de caractère ne contenant que des
chiffres en entier.
7.3.9.2 Exemple
chEnt ←− "25" ;
c ←− CVNOMBRE(chEnt) ; //c = 25
7.3.10.1 Syntaxe
7.3.10.2 Exemple
ch1 ←− "Ananas" ;
ch2 ←− "Topographe" ;
T1[] ←− CHERCHER(ch1, "na", 3) ; //T1[0] = 4, T1[1] = 5
T2[] ←− CHERCHER(ch2, "graphe", 7) ; //T2[0] = 7, T1[1] = 10
FPOUR
FIN