Académique Documents
Professionnel Documents
Culture Documents
Algorithmique Chapitre1
Algorithmique Chapitre1
UN LANGAGE ALGORITHMIQUE
Après une brève introduction, nous définirons les objets utilisables par la machine: les
objets existants appelés constantes (1)types de bases - constantes) et ceux permettant un
stockage temporaire appelés variables (2)variables et déclarations).
Puis, seront définis, les opérateurs pouvant agir sur ces objets (3)opérateurs et fonctions)
ce qui permettra de construire des objets plus complexes (4)les expressions) que l'on
pourra stockés en mémoire en utilisant les variables (5)l'affectation). On introduira
également la notion de variables dimensionnées (6)variables indicées ou tableaux)
permettant le stockage de plusieurs informations référencées par un même label.
Enfin une notion essentielle qui permet, entre autre, de structurer un programme (10)les
procédures et fonctions)
Introduction:
Le but, ici, n'est pas de définir un nouveau langage muni de ses contraintes de syntaxes et
de sa panoplie d'instructions et fonctions, mais au contraire de se munir d'un langage
simple à utiliser, facilement compréhensible et qui de plus permettra une "traduction" aisée
dans un langage de programmation (On remarquera que ce langage est d'ailleurs assez
proche des langages PASCAL et C). Ainsi, par exemple, les mots clés seront en français et la
syntaxe ne sera pas trop rigoureuse.
- les entiers
- les réels
- les booléens
- les caractères
2) variables et déclarations
Au cours d'un traitement, il est nécessaire de pouvoir conserver certaines données afin de
les exploiter ultérieurement. Pour cela on utilise des variables (emplacements mémoire)
dans lesquelles l'ordinateur viendra stocker les données au cours du traitement.
Une variable est représentée par un identificateur (ou nom de la variable) qui est un mot
répondant aux exigences suivantes:
Déclaration
Toute variable doit être déclarée. Ceci se fait, avant l'utilisation de celle-ci, de la façon
suivante:
Exemple:
ENTIER i , j , k
REEL min , x , rac
BOOLEEN flag , drap
3) opérateurs et fonctions
ET OU NON
Rappels:
- tables de vérités des fonctions logiques
<= (inférieur ou
= (égal) < (inférieur)
égal)
>= (supérieur ou
<> (différent) > (supérieur)
égal)
- l'opérateur concaténation
Exemples:
cos (cosinus) sin (sinus) abs (valeur absolue) rac (racine carrée) etc
Remarque: On utilisera toutes les fonctions qui seront nécessaires. Il conviendra de définir
celles-ci si le langage de programmation utilisé ne les possède pas.
Celles-ci seront également définies lorsque le besoin s'en fera sentir. A titre d'exemple la
fonction longueur pourra être définie comme donnant le nombre de caractères contenus
dans une chaîne de caractères.
4) les expressions
Moyen d'obtenir une valeur en utilisant les constantes, variables, opérateurs et fonctions.
Exemples:
'soir'
x
25
15 + 18 * (rac(f + 4 * x) - cos(3 * pi / x)) ^ 2
NOM + 's'
correspond à l'expression:
5) l'affectation
notée <-- elle permet d'affecter, à une variable, une nouvelle valeur.
Exemples:
I <-- 5
nom <-- nom + prenom
min <-- 4 * pi - cos(x + y)
flag <-- VRAI
Remarque: La valeur représentée par l'expression doit être du même type que la variable.
Toutefois si le résultat de l'expression est réel et la variable entière, on admettra que celle-ci
peut recevoir la valeur calculée tronquée à la partie entière.
6) variables indicées ou tableaux
Dans certains cas, il est nécessaire de regrouper plusieurs données sous un même label
(identificateur), on réserve alors un certain nombre de 'cases' en mémoire pour venir y
stocker ces différentes données. L'ensemble de ces 'cases' en mémoire est alors appelé
tableau.
Un tableau est donc référencé par un identificateur. De plus il faut pouvoir accéder à une
'case' de celui-ci; pour cela on utilise la notation suivante:
Identificateur [ N ] qui fait référence à la Nième case du tableau désigné par identificateur.
Les tableaux peuvent également posséder plusieurs dimensions. C'est le cas lorsque l'on
veut traiter un problème faisant appel aux matrices. Ainsi:
Exemple:
Remarque: Le ou les numéros de la 'case' spécifiée porte également le nom d'indice (indice
de ligne, indice de colonne pour un tableau à deux dimensions).
Déclarations
On visualisera les variables indicées par le fait qu'elles seront suivies de crochets ouvrant et
fermant.
Les tableaux des exemples seront déclarés sous la forme suivante:
ENTIER T [ ] , MAT [ ]
7) afficher, lire
Au cours de l'exécution d'un programme, il est indispensable de pouvoir communiquer
avec l'ordinateur. Cela est rendu possible grâce à l'emploi des instructions afficher et lire.
afficher
permet d'afficher les différents résultats des calculs réalisés par les expressions.
Remarques:
afficher x + y
Remarque: Dans le cas où la lecture d'un tableau n'est pas une contrainte à étudier, on
pourra se contenter d'écrire "lire T [ ]" (si T est le tableau à entrer).
8) Si alors sinon
Syntaxe:
si condition alors
|
| séquence 1 d'instructions
|
sinon
|
| séquence 2 d'instructions
|
finsi
si condition alors
|
| séquence 1 d'instructions
|
finsi
Exemple:
- calcul du minimum de deux nombres entiers
ENTIER A , B , MIN
AFFICHER 'donnez deux entiers'
LIRE A , B
SI A < B ALORS
MIN <-- A
SINON
MIN <-- B
FINSI
AFFICHER 'le minimum de ' , A , ' et de ' , B , ' est ' , MIN
ENTIER A , B , MIN
AFFICHER 'donnez deux entiers'
LIRE A , B
MIN <-- B
SI A < B ALORS
MIN <-- A
FINSI
AFFICHER 'le minimum de ' , A , ' et de ' , B , ' est ' , MIN
9) les boucles
Il arrive fréquemment qu'un même type d'actions (suite d'instructions) se répète plusieurs
fois dans un programme de façon consécutive. On a alors la possibilité et souvent
l'obligation d'utiliser une structure dite de boucle.
Ces boucles sont appelées "définies" car c'est le programmeur qui spécifie le nombre de fois
que la boucle doit s'exécuter.
Syntaxe:
pour variable allant de expression1 jusqu'à expression2 avec un pas de expression3 faire
|
| séquence d'instructions
|
finpour
A l'origine la variable de
contrôle prend comme valeur,
la valeur décrite par
expression1.
Remarques:
|
| séquence d'instructions
|
finpour
|
| séquence d'instructions
|
finpour
Exemples:
ENTIER I , N , S
AFFICHER 'entrez une valeur entière'
LIRE N
S <-- 0
POUR I <-- 1 JUSQU'A N FAIRE
S <-- S + I
FINPOUR
AFFICHER 'la somme des ' , N , ' premiers entiers est ' , S
- lecture des valeurs d'un tableau de données entrées par l'utilisateur ce qui peut s'écrire:
LIRE T [ ]
FINPOUR
|
| séquence d'instructions
|
fintantque
Remarques:
- fintantque sera souvent
abrégé fintq ou même ftq.
- le test est fait en début de
boucle (on peut donc simuler
une boucle "pour" à l'aide
d'une boucle "tant que").
ENTIER A , B
AFFICHER 'calcul de A modulo B (A et B positifs)'
AFFICHER 'donnez deux entiers positifs'
LIRE A , B
AFFICHER A , ' modulo ' , B , ' = '
TANT QUE A >= B FAIRE
A <-- A - B
FINTANTQUE
AFFICHER A
repete
|
| séquence d'instructions
|
jusqu'à condition
Remarques:
- le test de sortie est fait en fin
de boucle.
- la séquence d'instructions
s'exécute donc au moins une
fois.
REPETE
JUSQU'A N = ent(N)
- structurer un programme
- diviser les difficultés
- accroître la lisibilité d'un programme
- éviter les répétitions
-constituer des bibliothèques
Ainsi dès qu'une tâche est cernée et définie il est utile et souvent indispensable de faire une
procédure reflétant cette tâche.
Exemple:
- les fonctions
Syntaxe:
|
| corps de la fonction
|
| résultat (résultat du calcul effectué par la fonction)
R <-- A - (A % B) * B
A <-- B
B <-- R
FINTANTQUE
RESULTAT (A)
Remarques:
- la liste de paramètres se présente sous la forme d'une liste de variables dont les noms sont
propre à la fonction.
- si besoin est, on peut également déclarer des variables internes à la fonction, là encore les
noms de ces variables sont propre à la fonction.
- la communication entre le programme (ou portion de programme) appelant et la fonction
se fait grâce aux paramètres et au "résultat".
- les données:
la fonction utilise la valeur du paramètre mais, si celui-ci est modifié dans la fonction, cette
modification est reportée du coté appelant.
coté appelant, le paramètre doit être une variable.
- les résultats
la fonction n'utilise pas la valeur du paramètre mais celui-ci sera affecté dans la fonction et
cette valeur sera retransmise du coté appelant.
coté appelant, le paramètre doit être une variable.
- la sortie de la fonction est assurée par l'instruction résultat qui a pour effet de renvoyer
le résultat d'un calcul effectué par la fonction.
Cette instruction peut être placée à un endroit quelconque de la fonction (il faudra toutefois
s'assurer que l'instruction est utilisée pour la sortie de fonction). L'instruction "résultat"
peut également apparaître plusieurs fois à l'intérieur d'une même fonction.
P <-- PGCD(A , B)
Q <-- PGCD(A , PGCD(B , C + 5) + 1)
- les procédures
Syntaxe:
|
| corps de la procédure
|
retour
Exemple: procédure calculant le PGCD
PROCEDURE PGCD(A , B , C)
DONNEES ENTIERES A , B
RESULTAT C
ENTIER R
RETOUR
Remarques:
- de même que pour la fonction, bien que souvent placée en fin, l'instruction retour peut
apparaître plusieurs fois dans la procédure.
FINTANTQUE
RESULTAT (A)
PGCD de A et B = PGCD de B et R
Ce qui induit alors la notion de récursivité (le calcul d'un PGCD revient à calculer
un autre PGCD). On en déduit alors l'écriture de la fonction suivante:
SI B <> 0 ALORS
R <-- A - (A % B) * B
RESULTAT ( PGCD ( B , R ) )
SINON
RESULTAT ( A )
FINSI
Remarque: Lors de l'écriture d'une procédure récursive, on peut transposer les conseils
d'écriture d'une boucle.
Les problèmes liés à l'initialisation étant souvent résolus par l'écriture de l'appel de la
procédure (ou fonction).