Académique Documents
Professionnel Documents
Culture Documents
ÉCOLE SUPÉRIEURE DE
TECHNOLOGIE-ESSAOUIRA
Introduction à l’algorithmique et la
programmation
FAHD KARAMI
fa.karami@uca.ma
ANNÉE : 2013-2019
2
Contents
1 Système informatique v
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
1.2 Composants de l’ ordinateur . . . . . . . . . . . . . . . . . . . . . . . v
1.2.1 Les composants matériels . . . . . . . . . . . . . . . . . . . . vi
1.2.2 Les composants logicielle . . . . . . . . . . . . . . . . . . . . vii
1.3 Langage machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
1.4 Rappel sur la numération . . . . . . . . . . . . . . . . . . . . . . . . viii
1.4.1 Conversion de base . . . . . . . . . . . . . . . . . . . . . . . . viii
1.4.2 Codage des caractères . . . . . . . . . . . . . . . . . . . . . . ix
i
ii CONTENTS
iii
iv CONTENTS
Chapter 1
Système informatique
1.1 Introduction
Le terme Informatique désigne la science du traitement automatique de l’information
et qui est considérée comme le support des connaissances humaines et des communi-
cations dans différents domaines. En anglais (US) on utilise Computing Science
tant dis que Informatics en anglais grande Bretagne.
v
vi CHAPTER 1. SYSTÈME INFORMATIQUE
Ces composants sont interconnectés via trois bus : le bus de données, le bus d’adresses
et le bus de contrôles etde commandes. Où un bus représente plusieurs pistes
électroniques qui sont reliées au microprocesseur. Ils assurent la communication
interne et externe du microprocesseur.
La mémoire vive appelé RAM est une memoire temporaire, après chaque opération,
les données ne sont pas conservées et sont définitivement perdues à l’extinction de
l’ordinateur.
Généralement, un composant électronique n’est capable que de mémoriser des ten-
sions: BIT (Binary DigiT) et qui représente l’unité de stockage élémentaire. Les
informations sont codées en binaires. En fonction de type d’ordinateur, un mot
mémoire est composé de 2 (16 bits) ou 4(32 bits) octets.
être codée en binaire pour être exploitable par un ordinateur. C’est le cas pour
les nombres et les caractères, les sons, les images ... .Toutes communications à
l’intérieur de l’ordinateur sont faites avec des signaux électriques
Exemples:
Lorsque B = 10 c’est la base décimal et on convient que (...)10 = ...
467, 92 = 4 × 102 + 6 × 101 + 7 × 100 + 9 × 10−1 + 2 × 10−2
10
1010, 101 = 1×23 +0×22 +1×21 +0×20 +1×2−1 +0×2−2 +1×2−3 = 10, 625
2 10
Remark 1.4.1 Un même nombre peut être représenté dans plusieurs bases
• 7B en base 16 (hexadécimale)
De la base 10 à la base 2
Exemples:
• 123 en base 10 vaut 1111011 en base 2 et on écrit 123 = (1111011)2 parce que
123 = 1 × 26 + 1 × 25 + 1 × 24 + 1 × 23 + 0 × 22 + 1 × 21 + 1 × 20
De la base 2 à la base 10
Exemple:
x CHAPTER 1. SYSTÈME INFORMATIQUE
Algorithme et Langage de
programmation
• Affectation de variables
xi
xii CHAPTER 2. ALGORITHME ET LANGAGE DE PROGRAMMATION
Algorithme N om de algorithme
Début
Instruction1;
Instruction2;
...
InstructionN;
Fin
Figure 2.1: Cette figure représente la structure de RAM. Les casiers contenant des
chiffres représentent les variables. Les mots ”nombreA”, ”nombreB” and ”nombreC”
représentent les noms des variables
Algorithme N om de algorithme
Début
Instruction1;
Instruction2;
...
InstructionN;
Fin
2.3.1 Identificateurs
Le choix des noms de variables est soumis à quelques règles qui varient selon le
langage, mais en général
• Le nom de la variable doit commencer par une lettre alphabétique (en minus-
cule pour certaine langage)
• Doit être constitué uniquement de lettres, de chiffres et du soulignement
xiv CHAPTER 2. ALGORITHME ET LANGAGE DE PROGRAMMATION
• Le nom de la variable doit être différent des mots réservés du langage (par
exemple en langage C: int, float, else, switch, case, default, for, main,
return,...)
Exemples:
Pour des raisons de lisibilité du code, il faut choisir des noms significatifs qui
décrivent les données manipulées
Remark 2.3.2 En pseudo-code algorithmique, nous allons respecter les règles citées,
même si on est libre dans la syntaxe
Type numérique
Les variables de type numériques sont les variables de type entier ou réel. Lorsqu
on réserve un octet pour coder un nombre nous pourrions coder 28 = 256 valeurs
différentes. i.e. les nombres entiers de 1 à 256, ou bien de 0 à 255, ou bien de −127 à
+128.... Lorsqu’on réserve deux octets, nous pourrions coder jusqu’au 65536 valeurs.
2.3. LES VARIABLES xv
en résumé le type de codage (autrement dit, le type de variable) choisi pour un nom-
bre va spécifier les valeurs maximales et minimales des nombres pouvant être stockés
dans la variable; la précision de ces nombres (dans le cas de nombres décimaux).
Les langages de programmation, offrent un ensemble de types numériques, dont le
détail est peuvent de varier d’un langage à l’ autre, mais généralement nous retrou-
veons les types suivants:
Entier Long (4 octet ou 8 octet) -2 147 483 648 à 2 147 483 647
Remark 2.3.3 La question que nous pouvons se poser est pourquoi ne pas déclarer
toutes les variables numériques en réel double pour s’assurer qu’ il n’y aura pas
de problème. Sauf, q’un bon algorithme ne se contente pas de répondre seulement
au besoin fonctionnel et pour un programmes de grande taille, l’abus de variables
surdimensionnées peut conduire a un ralentissements au niveau de l’exécution, voire
un plantage de l’ordinateur.
Les opérations uitisables sur les éléments de ces deux types sont tous les opérateurs
arithmétiques classiques : l’addition (+), la soustraction (-), le produit (?) et la
division (/). On pourra utiliser, sur les éléments de type entier ou réel, les opérateurs
de comparaison classique:
> < != = ≤ ≥.
De plus, il y a d’autre opérateurs spécifiques aux entier : la division entière (Div ou
bien /) et le modulo (Mod ou %). Par exemple
9 / 4 égale à 2 et 9 % 4 égale à 1.
Pour les opérateurs arithmétiques donnés, l’ordre de priorité est le suivant (du plus
prioritaire au moins prioritaire) : (? ⇒ / ⇒ % ⇒ + ⇒ −) par exemple
2+3?7 vaut 23.
xvi CHAPTER 2. ALGORITHME ET LANGAGE DE PROGRAMMATION
En cas de besoin (ou de doute), on utilise les parenthèses pour indiquer les opérations
à effectuer en prioriténpar exemple: (2 + 3) ? 7 vaut 35.
Les variables peuvent contenir d’autres informations que les nombres, par exemple
lorsqu’ on souhaite stocker un nom, nous pourrions utilisér le type alphanumérique.
En effet, ils’agit d’un domaine constitué des caractères alphabétiques, numériques et
de ponctuation. A ce sujet, nous devrions pas confondre entre la valeur entière 3 et le
caractère ’3’ noté entre simple quotes. Il est a noté qu à chaque caractère est associé
une valeur numérique entière. Comme nous l’avons dèja signalé précédemment la
lettre ’A’ correspond à la valeur 65 en code ASCII .
Nous signalons que, la précédence des caractères dans l’alphabet d’une machine
est dépendante du code de caractères utilisé. Pour le code ASCII, nous pouvons
constater l’ordre suivant:
Les symboles spéciaux (’ ,+ ,- ,/ , ,] , ...) et les lettres accentuées (é ,è ,à ,û , ...) se
trouvent répartis autour des trois grands groupes de caractères (chiffres, majuscules,
minuscules). Leur précédence ne correspond à aucune règle d’ordre spécifique.
Exemple : ’0’ est inférieur à ’Z’ et noter ’0’ < ’Z’.
Le domaine des booléens est l’ensemble formé par les deux valeurs: Vrai et Faux.
Les opérations possibles sur les booléens sont les opérations logiques: disjonction
(OU), conjonction (ET) et la négation (NON).
La table de vérité donne la réponse Vrai et Faux des opérations logiques
Exemple:
2.4. AFFECTATION DES VARIABLES xvii
Variables i, j, k: Entiers;
x,y: Réels;
oK: Boolean;
car1, car2: Caractères;
ch1, ch2: Chaı̂ne de caractères;
Début
Bloc d’instructions;
Fin
où < nomV ariable > est le nom de la variable dont on souhaite modifer la
valeur, < valeur > est la valeur que l’on veut placer dans la variable. Cette valeur
doit être de même type que la variable. Par exemple, l’opération
flèche. L’affectation n’est pas commutative : nomV ariable2 ← nomV ariable1; est
différente de nomV ariable1 ← nomV ariable2; ce qui est différente d’une équation
mathématique : nomV ariable ← nomV ariable + 1; a un sens en langages de
programmation, par contre nomV ariable + 1 ← 2; n’est pas possible en langages de
programmation et n’est pas équivalente à nomV ariable ← 1;
Exemple: Quelles sont les valeurs des variables aprés l’exécution de l’agorithme
suivante ?
Début
varA ← 1;
varB ← 2;
varC ← 3;
varD ← varA;
varA ← varC + 1;
varB ← varD + varC;
varC ← varD + 1;
Fin
2.4.1 Constantes
Une constante est un emplacement mémoire dont la valeur reste figée durant le
déroulement d’un algorithme, le type d’une constante découle de sa valeur.
Constantes P i ← 3.141559;
2.4.2 Exercices
Exercice 2.4.1 Donnez les valeurs des variables varA, varB et varC apràs exécution
des instructions suivantes ?
Début
varA ← 3;
varB ← 7;
varA ← varB;
varB ← varA + 5;
varC ← varA + varB;
varC ← varB − varA;
Fin
Exercice 2.4.2 Donnez les valeurs des variables varA et varB apràs exécution des
instructions suivantes ?
Début
varA ← 1;
varB ← 2;
varA ← varB;
varB ← varA;
Fin
Début
Lire(var);
Fin
Cette instruction permet d’affecter une valeur saisi au clavier à la variable nommée
var.
xxi
xxii CHAPTER 3. LES ENTRÉES & SORTIE:
Début
varE ← 5;
Ecrire(varE);
Ecrire(”Bonjour tous les informaticiens de l’ESTE”);
Fin
Algorithme P rix T T C
La syntaxe de cette instruction peut s’écrit sous par deux formes possibles:
xxv
xxvi CHAPTER 4. LES STRUCTURES DE CONTRÔLE
Si (Condition) Alors
Instruction11;
Instruction12;
...
Instruction1N;
FinSi
Le traitement est ou n’est pas effectué suivant le résultat de la condition. Une Forme
plus complexe s’écrit:
Si (Condition) Alors
Instruction11;
Instruction12;
...
Instruction1N;
Sinon
Instruction21;
Instruction22;
...
Instruction2N;
FinSi
Variables x: réel;
Début
Ecrire(”Entrer un réel :”);
Lire(x);
Si (x<0) Alors
Ecrire(”la valeur absolue de ”, x ,” est ”,-x);
Sinon
Ecrire(”la valeur absolue de ”, x ,” est ”,x);
FinSi
Fin
Variables x, y: réels;
Début
Ecrire(”Entrer un réel :”);
Lire(x);
y ← x;
Si (x<0) Alors
y ← −x;
FinSi
Variable n: entier;
Début
Ecrire(”Entrer un entier:”);
Lire(n);
Fin
Si (Condition 1) Alors
Si (Condition 2) Alors
InstructionsA;
Sinon
InstructionsB;
FinSi
Sinon
Si (Condition 3) Alors
InstructionsC;
FinSi
FinSi
Variable n: entier;
Début
Ecrire(”Entrer un entier:”);
Lire(n);
Si (n<0) Alors
Ecrire(n,” est négatif strictement”);
FinSi
Si (n>0) Alors
Ecrire(n,” est positif strictement”);
FinSi
Si (n=0) Alors
Ecrire(n,” est nulll”);
FinSi
Fin
Variable n: entier;
Début
Ecrire(”Entrer un entier:”);
Lire(n);
Si (n<0) Alors
Ecrire(n,” est négatif strictement”);
Sinon
Si (n>0) Alors
Ecrire(n,” est positif strictement”);
Sinon
Ecrire(n,” est null”);
FinSi
FinSi
Fin
xxx CHAPTER 4. LES STRUCTURES DE CONTRÔLE
Remark 4.1.2 Dans cet d’algorithme, nous avons trois cas possibles a traitée.Conrenant
la première version, nous avons réaliser trois tests systématique, alors que dans la
deuxième version avec les tests imbriquées, si le nombre est négatif on ne fait qu’
un seul test, ce qui permet d’optimiser notre algorithme.
Il est fortement recommandé d’utiliser les tests imbriqués pour limiter le nombre de
tests et placer d’abord les conditions les plus probables (minimiser la complexité).
Exemples:
Variables X, Y : réels;
Début
Ecrire(”Entrez un nombre”);
Lire(X);
Fin
calcule la ou les racines réelles du trinome ou affiche, si besoin est qu’il n’y a pas de
racine réelle. Les trois coefficients A, B et C seront saisis au clavier avant traite-
ment.
Ecrire(”A:”);
Lire(a);
Ecrire(”B:”);
Lire(b);
Ecrire(”C:”);
Lire(c);
delta ← b ? b − 4 ? a ? c;
FinSi
Fin
4.2. LES STRUCTURES DE RÉPÉTITION xxxiii
Remark 4.2.1 Il faut noté que la l’exécution des instructions pour la première fois
nécessite la vérification de la condition.
xxxiv CHAPTER 4. LES STRUCTURES DE CONTRÔLE
L’Algorithme d’Euclide
• Trouver tous les diviseurs de chaque nombre, ensuite trouver le diviseur com-
mun le plus grand par exemple
• D(30) = {1, 2, 3, 5, 6, 10, 15, 30} et D(105) = {1, 3, 5, 7, 15, 21, 35, 105}
• D(30) ∩ D(105) = {1, 3, 5, 15} et par conséquent pgcd (30, 105) = 15.
pgcd (a, b) = pgcd (b, r0 ) = pgcd (r0 , r1 ) = ... = pgcd (rk−1 , rk ) = pgcd (rk−1 , 0) = rk−1
4.2. LES STRUCTURES DE RÉPÉTITION xxxv
Algorithme Euclide
Variables a, b, res: entiers;
Début
Ecrire(”Entrer un entier:”);
Lire(a);
Ecrire(”Entrer un entier:”);
Lire(b);
res ← b;
Exercice 4.2.4 Ecrire un algorithme qui détermine le premier nombre entier N tel
que la somme de 1 à N dépasse strictement 100?
La boucle Faire ... TantQue est similaire à la boucle TantQue, sauf que la
dernière ne permet pas une première exécution des instructions à l’intérieur du bloc
sans vérifier la condition. Contrairement à la boucle Répéter ... Jusqu’à qui
permet une première execution sans condition.
Faire
Instruction1;
Instruction2;
...
InstructionN;
TantQue (Condition);
Faire
som ← som + i;
i ← i + 1;
TantQue (som < 100) ;
1. compteur est une variable de type entier (ou caractère) qui doit être déclarée.
2. pas est un entier qui peut être positif ou négatif. Pas peut ne pas être men-
tionné, car par défaut sa valeur est égal à 1. Dans ce cas, le nombre d’itérations
est égal à finale - initiale +1
3. intiale et finale peuvent être des valeurs, des variables définies avant le début
de la boucle ou des expressions de même type que compteur.
• Si la valeur du compteur est > à la valeur finale dans le cas d’un pas
positif (ou si compteur est < à finale pour un pas négatif), on sort de la
boucle et on continue avec l’instruction qui suit FinPour.
• Si compteur est <= à finale dans le cas d’un pas positif (ou si compteur
est >= à finale pour un pas négatif), instructions seront exécutées
(a) Ensuite, la valeur de compteur est incrémentée de la valeur du pas si
pas est positif (ou décrémenté si pas est négatif)
(b) On recommence l’étape 2 : La comparaison entre compteur et finale
est de nouveau effectuée, et ainsi de suite ...
xxxviii CHAPTER 4. LES STRUCTURES DE CONTRÔLE
Exemple: Cet algorithme permet déterminer le plus grand nombre d’une suite de
n nombres réels saisit au clavier.
Variables i, n : enties;
nbr, grand : réels;
Début
Ecrire(” Entrez n:”);
Lire(n);
grand ← nbr;
Pour i Allant de 1 à n
Ecrire(” Entrez le nombre”, i,”:”);
Lire(nbr);
Si nbr > grand Alors
grand← nbr;
FinSi
FinPour
Les instructions d’une boucle peuvent être également des instructions itératives.
Dans ce cas, nous obtenons une boucle imbriquée. Donner la sortie de cet algorithme
Variables i, j : enties;
Début
i ← 0;
Ecrire(” Debut”);
Pour j Allant de i à 10
Ecrire(” les trois valeurs:”, i , j , i ? j);
FinPour
i ← i + 1;
FinTantQue
Ecrire(” Fin”);
Fin
La boucle Pour peut etre vue comme un cas particulier de la boucle TantQue.
En effet, tout ce qu’on peut écrire avec Pour peut être remplacé avec la boucle
TantQue et la réciproque n’est pas toujours vrai.
De manière générale soit la boucle Pour suivante :
xl CHAPTER 4. LES STRUCTURES DE CONTRÔLE
Ell peut être remplacée, dans le cas d’un pas positif par:
compteur ← initiale;
puis ← 1;
Pour i Allant de 0 à n
puis← puis ? x;
FinPour
puis ← 1;
i← 0;
TantQue (i<=n) Faire
puis← puis ? x;
i← i+1;
FinTantQue
4.3.1 Exercices
Exercice 4.3.1 Ecrire un programme qui lit le prix HT d’un article, le nombre
d’articles et le taux de TVA, et qui fournit le prix total TTC correspondant. Faire
en sorte que des libelles apparaissent clairement.
Exercice 4.3.3 Ecrire un algorithme qui demande l’ge d’un enfant à l’utilisateur.
Ensuite, il l’informe de sa catégorie.
”Poussin” de 6 à 7 ans
”Pupille” de 8 à 9 ans
”Minime” de 10 à 11 ans
”Cadet” apr ès 12 ans.
Exercice 4.3.6 Ecrire un algorithme qui demandeun nombre de dṕart, et qui en-
suite é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 10 = 70
S = 12 + 22 + 32 + ... + N 2 .
Exercice 4.3.9 un nombre parfait est un entier positif égal à la somme de ses
diviseurs (le nombre lui-même n’est pas compté diviseur). Ecrire un algorithme
qui, étant donné un entier plus grand que 1, indique si cet entier est parfait ou
pas. Cette méthode doit retourner un résultat de type booléen. Exemple: 28 est un
nombre parfait car, à par lui, ses diviseurs sont 1, 2, 4, 7 et que:
1 + 2 + 4 + 7 + 14 = 28.
Exercice 4.3.10 Ecrire un algorithme qui permet de saisir une série de nombres
entiers positifs et qui après saisie, affiche les valeurs du plus petit et du plus grand
nombre saisi ainsi que la somme et la moyenne des nombres.
xliv CHAPTER 4. LES STRUCTURES DE CONTRÔLE
Exercice 4.3.11 Ecrire l’algorithme estPremier, qui a partir d’un entier stricte-
ment positif donné, retourne le résultat booléen VRAI ou FAUX selon le nombre
est premier ou non.
Exercice 4.3.12 Ecrire l’algorithme qui calcul la racine carrée d’un nombre sans
avoir recours a la fonction mathématique racine carrée prédéfinie.
Procédure : si n est le nombre dont on souhaite extraire la racine carrée. On
construit une suite de nombres uk dont le premier vaut 1 et dont le terme générale
a pour expression :
1 n
uk = + uk−1 pour k ≥ 1.
2 uk−1
√
Cette suite converge systématiquement vers n. Tester cet algorithme avec des
valeurs: 1, 2, 3, 4, 9, 16.
Exercice 4.3.13 Ecrire un algorithme qui, étant donné un nombre entier naturel
p, affiche tous les couples d’entiers naturels (a, b) tels que a ? b = p.
Algorithme A
Sous-algorithme SA1;
Sous-algorithme SA2;
...
Sous-algorithme SAN;
FinA
xlv
xlvi CHAPTER 5. LES FONCTIONS ET PROCÉDURES
Début
Corps du sous-algorithme
Fin
5.1. SOUS ALGORITHME xlvii
Algorithme N om de algorithme
Début
Instructions;
Appel du sous-algorithme
Instructions;
Fin
où
Exemple :
Maintenant , nous allons utiliser les deux fonctions SommeCarre et Pair, nous ferons
l’appel des ces fonctions par simple écriture de nom dans le programme principale.
5.1.2 Procédure
Une procédure est un sous-programme qui ne retourne pas de valeure. C’est donc
un type particulier de fonction. En général, une procédure modifié la valeur de
ses paramètres , mais ce n’est pas toujours le cas. Tout comme les fonctions, une
procédure est un sous-programme composé d’instructions :
Dans certains cas, nous pourrions avoir besoin de répéter une tache dans plusieurs
endroits du programme, mais que dans cette tache on ne calcule pas de résultats
ou qu’on calcule plusieurs résultats à la fois. Dans ces cas nous ne pourrions pas
utiliser de fonction, nous utilisons une procédure. En effet, une procédure est un
sous-programme semblable à une fonction mais qui ne retourne pas de résultat.
Une procédure s’écrit en dehors du programme principal sous la forme :
Remark 5.1.5 Comme pour une fonction, une procédure peut ne pas avoir de
paramètres mais qui il ne retourne pas de résultat.
L’appel d’une procédure, se fait dans le programme principale ou dans une autre
procédure par une instruction indiquant le nom de la procédure :
5.1. SOUS ALGORITHME li
Algorithme N om de algorithme
Début
Instructions;
Appel de la procédure
Instructions;
Fin
Exemple :
Un sous-algorithme (fonction ou procédure) peut avoir des paramètres qui sont très
utile, car il permettent de répéter une suite d’instructions complexes pour des valeurs
qu’ on ne connaı̂t pas à l’avance. Les paramètres servent à échanger des données
entre l’algorithme principale (ou l’algorithme appelante) et le sous algorithme ap-
pelée. Les paramètres placés dans la déclaration d’un sous algorithme (fonction ou
procédure) sont appelés paramètres formels. Ces paramètres peuvent prendre toutes
les valeurs possibles mais ils sont abstraits (n’existent pas réellement). Par contre,
les paramètres placés dans la déclaration placés dans l’algorithme principale sont ap-
pelés paramètres effectifs car ils contiennent les valeurs pour effectuer le traitement.
Remark 5.1.7 Le nombre de paramètres effectifs doit être égal au nombre de paramètres
formels. L’ordre et le type des paramètres doivent aussi correspondre.
Il existe deux types de passage de paramètres : par valeur et par variable (dite aussi
par référence ou encore par adresse).
C’est la manière de transmission par défaut, le système cré une copie de la valeur,
des paramètres effectifs dans les variables locales provenant des paramètres formels
du sous algorithme appelée. Dans ce cas, le contenu des paramètres effectifs ne peut
pas être modifié par les instructions du sous algorithme. En effet a l’intérieur de ce
dernier, nous ne travaillons pas directement avec la variable, mais sur une copie. A
la fin de l’exécution du sous-algorithme la variable de l’algorithme principale con-
servera sa valeur initiale. Les paramàtres dans ce cas sont utilisés comme données.
Exemple :
En utilisant cette procédure, nous souhaitons écrire un algorithme principale qui lit
un entier positif n puis affiche tous les nombres impaires inférieurs à m
5.1. SOUS ALGORITHME liii
Dans cet exemple, lors de l’appel de la procédure Aug2 la variable i est un paramètre
effectif et le système cré une copie de de la valeur de i dans la variable locale m
(paramètre formel) de la procédure Aug2. Par conséquent, la valeur de i reste
inchangée après appellation de la procédure Aug2 ce qui provoque une boucle infini.
La solution est d’utiliser un passage par adresse .
5.1.4 Exercices
Exercice 5.1.8 Ecrire un algorithme principale utilisant une fonction qui permet
de calculer et de retourner la plus grande valeur parmi trois réels.
Exercice 5.1.10 Ecrire une fonction qui permet de déterminer le plus grand com-
mun diviseur (PGCD) de deux entiers positifs ( cette fonction prend comme paramètres
deux entiers positifs et elle renvoie un entier positif ). Ecrire l’algorithme principale
qui demande a l’utilisateur deux nombres appel la fonction précédente pour calculer
le PGCD, ensuite affiche le résultat à l’écran.
Exercice 5.1.11 1. Ecrire une fonction qui détermine si une entier N est parfait
ou non (cette fonction prend comme paramétre N et elle renvoie un résultt de
type booléen: VRAI ou FAUX).Ecrire l’algorithme principale qui demande a
l’utilisateur un nombre appel la fonction précédente pourconnaitre si le nombre
est parfait ou pas, ensuite affiche le résultat pour l’utilisateur à l’écran.
2. Ecrire une fonction qui affiche tous les nombre parfait inférieur à un nombre
entier N assez grand. Cette fonction fera appel à la fonction crée dans la
question précédente.
Exercice 5.1.12 Ecrire une fonction qui permet le produit de deux nombres. Ici on
impose d’utiliser la méthode de la multiplication égyptienne pour calculer le produit.
U0 = 2
2
Un = Un−1 + , n ≥ 1.
Un−1
On arrête d’itérer quand l’intervalle entre 2 termes consécutifs devient strictement
inférieur à .
F0 = 1, F1 = 2
Fk = 4Fk−1 + 3Fk−2 , k ≥ 2.
lvi CHAPTER 5. LES FONCTIONS ET PROCÉDURES
Chapter 6
Les Tableaux
lvii
lviii CHAPTER 6. LES TABLEAUX
Début
Instructions;
Fin
Cette déclaration réserve des emplacements pour un certaine nombre des éléments
où le nombre est caractérisé par dimension et de type donné Type . Chaque élément
est repéré par son indice dans le tableau. Dans la plus part des langages de pro-
grammation comme langage C, la première position porte le numéro 0. Exemple
Dans cet exemple, nous avons crée un tableau appelé module contenant 16 emplace-
ments memoire pour stocker des nombres réels. Nous pourrions également créer des
tableaux contenant des variables de types numériques, caractàres, booléens, ... .
Remark 6.0.2 Dans un même tableau, nous ne pourrions pas faire un melange de
types différents de valeurs .
L’ avantage d’un tableau, c’est quı́l nous permet réaliser des traitement sur tous les
éléments en utilisant les boucles. Par exemple, pour effectuer la lecture des élement
du tableau précédent
Début
Pour i Allant de 0 à 15
Ecrire(” Donner l’élément ”,i);
Lire(module[i]);
FinPour
Fin
Dans cet exemple, nous avons déclaré un tableau nomé module de 16 valeurs réels
et nous avons demandé a l’utilisateur de saisir une suite de nombres, que nous avons
prévu de stocker successivement dans le tableau. Afin d’accéder (en lecture ou en
lix
• Accès en écriture :
module[7]) ← 15.5; affecte la valeur 15.5 dans la zone mémoire d’indice 7.
• Accès en lecture:
Ecrire(module[7]); affiche à l’écran le contenu du tableau à l’indice 7.
Nous reprendrons l’exemple précédent, et nous allons de plus calculer le nombre des
modules ayant une note supérieure à 10, nous pourrions écrire :
Pour i Allant de 0 à 15
Si (module[i] >10) Alors
nbre ←nbre+1;
FinSi
FinPour
Les langages de programmation permettent de déclarer des tableaux dans lesquels les
valeurs sont repérées par deux indices. Ceci est utile par exemple pour représenter
des matrices . En pseudo code, un tableau à deux dimensions se déclare ainsi
lx CHAPTER 6. LES TABLEAUX
Début
Instructions;
Fin
−1 10.5 17 0 50 17
Tableau à deux dimension 100 3.2 −6 3 44 19
1 1 1 0 0 0
Voici un exemple de la déclaration d’un tableau de 3 × 6 éléments de types réels
• Accès en écriture :
M at[2][4]) ← 13.5; affecte la valeur 13.5 dans la zone mémoire de la matrice
qui se trouve à l’intersection de la ligne 2 et la colonne 4.
• Accès en lecture:
EcrireM at[2][4]); affiche à l’écran le contenu de l’élément du tableau de la
ligne 2 et colonne 4.
lxi
Pour i Allant de 0 à 2
Pour j Allant de 0 à 5
Ecrire(” Donner l’élément ”,i,j);
Lire(Mat[i][j]);
FinPour
FinPour
Fin
Dans cet exemple, nous avons déclaré une matrice nomé Mat de 2 lignes et 3 colonnes
pour stocker des valeurs réels et nous avons demandé a l’utilisateur de saisir une
suite de nombres, que nous avons prévu de stocker successivement dans la matrice.
Maintenant, nous reprendrons l’exemple précédent, et nous dclarerons deux matrices
et aprs saisit nous calculerons la somme de ces deux matrices de la manière suivante
Pour i Allant de 0 à 2
Pour j Allant de 0 à 2
Ecrire(” Donner l’élément ”,i,j);
Lire(A[i][j]);
FinPour
FinPour
Pour i Allant de 0 à 2
Pour j Allant de 0 à 2
Ecrire(” Donner l’élément ”,i,j);
Lire(B[i][j]);
FinPour
FinPour
Pour i Allant de 0 à 2
Pour j Allant de 0 à 2
R[i][j] ← A[i][j]+B[i][j];
FinPour
FinPour
Pour i Allant de 0 à 2
Pour j Allant de 0 à 2
Ecrire(” R[”,i, ”][”,j,”]=”,R[i][j]);
FinPour
FinPour
Fin
6.0.3 Exercices
Exercice 6.0.5 Ecrivez un algorithme calculant la somme des valeurs d’un tableau
Exercice 6.0.6 Ecrire un algorithme qui permet de saisir une série de nombres
entiers positifs et qui après saisie, affiche les valeurs du plus petit et du plus grand
nombre saisi ainsi que la somme et la moyenne des nombres.
Exercice 6.0.7 Ecrire un algorithme qui calcule le schtroumpf des deux tableaux.
Pour calculer le schtroumpf, il faut multiplier chaque élément du tableau 1 par chaque
élément du tableau 2, et additionner le tout.
Exercice 6.0.8 1. Ecrire une fonction qui prend un tableau de 5 entiers, puis
retourne la valeur Vraie ou Faux selon que le tableau est trié par ordre croissant
ou non.
2. Ecrire un algorithme qui lit un tableau de 5 entiers puis teste s’il est trié ou
pas