Vous êtes sur la page 1sur 59

Algorithmique

SMIA, module M5 E2

Universit Mohammed V-Agdal

Facult des Sciences Rabat

Dpartement dInformatique
Le module M5 E2 : SMIA

Algorithmique

Par
Pr. Mohamed El Marraki
marraki@fsr.ac.ma
2012/2013
M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

Sommaire
1. Gnralits sur lAlgorithmique
Introduction
Lalgorithmique
Principe
Les caractristiques dun Algorithme
Analyse descendante

Lalgorithmique et la programmation
Le but de la programmation
Langages de programmation
Pseudo langage

2. Les variables
Dclaration des variables
Noms de variables
Types de variables

3. Les Primitives
Affectation
Dfinition et notation
Utilisations

Lire et crire
Donnes et rsultats
Les objets manipuls par lalgorithme

Les tests
si .. alors .., si .. alors .. sinon ..
Conditions composes
Organigramme
Tests imbriqus

Les Boucles
La boucle TantQue
La boucle Rpter jusqu
La boucle Pour jusqu
Les boucles imbriques
Une mthodologie pour l'criture d'une boucle

4. Les structures de donnes statiques


Tableaux une dimension
Introduction
Notation et utilisation algorithmique
Types pour les tableaux
Quelques algorithmes utilisant les tableaux une dimension

Tableaux deux dimensions


Notation et dfinitions
Algorithmes sur les matrices

5.

Exercices et Problmes dexamens

M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

1. Gnralits sur lAlgorithmique


1.1 Introduction
Lalgorithmique est un terme dorigine arabe, hommage Al Khawarizmi (780-850) auteur dun
ouvrage dcrivant des mthodes de calculs algbriques.
Un algorithme est une mthode de rsolution de problme nonce sous la forme d'une srie
d'oprations effectuer. La mise en uvre de l'algorithme consiste en l'criture de ces oprations
dans un langage de programmation et constitue alors la brique de base d'un programme
informatique.
1 Une recette de cuisine est un algorithme!
2 Le mode demploi dun magntoscope est aussi un algorithme!
3 Indiqu un chemin un touriste gar ou faire chercher un objet quelquun par
tlphone cest fabriquer - et faire excuter - des algorithmes.
Un algorithme, cest une suite dinstructions, qui une fois excute correctement, conduit un
rsultat donn.
1 Si lalgorithme est juste, le rsultat est le rsultat voulu, et le touriste se retrouve l o il
voulait aller.
2 Si lalgorithme est faux, le rsultat est, disons, alatoire, et dcidment, ce magntoscope
ne marche pas!
Pour fonctionner, un algorithme doit donc contenir uniquement des instructions comprhensibles
par celui qui devra lexcuter (lordinateur).
LADN, qui est en quelque sorte le programme gntique, lalgorithme la base de construction
des tres vivants, est une chane construite partir de quatre lments invariables. Ce nest que le
nombre de ces lments, et lordre dans lequel ils sont arrangs, qui vont dterminer si on obtient
une puce ou un lphant.
Les ordinateurs eux-mmes ne sont fondamentalement capables dexcuter que quatre oprations
logiques :
1 laffectation de variables
2 la lecture / criture
3 les tests
4 les boucles
Un algorithme informatique se ramne donc toujours au bout du compte la combinaison de ces
quatre petites briques de base. Il peut y en avoir quelques unes, quelques dizaines, et jusqu
plusieurs centaines de milliers dans certains programmes.
La taille dun algorithme ne conditionne pas en soi sa complexit : de longs algorithmes peuvent
tre finalement assez simples, et de petits algorithmes peuvent tre trs compliqus.
Linformatique est la science du traitement automatique de linformation. Pour cela il faut:
1
modliser cette information,
2
dfinir laide dun formalisme strict les traitements dont elle fera lobjet.
3
et enfin traduire ces traitements dans un langage comprhensible par un ordinateur.
Les deux premiers points concernent lalgorithmique, alors que le dernier point relve de ce que
lon nomme la programmation.

M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

Lcriture dun programme consiste gnralement implanter une mthode de rsolution dj


connue et souvent conue indpendamment dune machine pour fonctionner aussi bien sur toutes
les machines ou presque. Ainsi, ce nest pas le programme mais la mthode quil faut tudier
pour comprendre comment traiter le problme. Le terme algorithme est employ en informatique
pour dcrire une mthode de rsolution de problme programmable sur machine. Les algorithmes
sont la matire de linformatique et sont lun des centres dintrt de la plupart, sinon la
totalit, des domaines de cette science.

1.2 Lalgorithmique
Principe
Dfinition : Un algorithme est une squence bien dfinie doprations (calcul, manipulation de
donnes, etc.) permettant daccomplir une tache en un nombre fini de pas.
En principe un algorithme est indpendant de toute implantation. Cependant dans la pratique
de la programmation il savre indispensable de tenir compte des capacits du langage de
programmation utilis.
La conception dun algorithme passe par plusieurs tapes :
Analyse : dfinition du problme en terme de squences doprations de calcul de
stockage de donnes, etc. ;
Conception : dfinition prcise des donnes, des traitements et de leur squencement ;
Implantation : traduction et ralisation de lalgorithme dans un langage prcis ;
Test : Vrification du bon fonctionnement de lalgorithme.

Remarque :
Les programmes sont souvent sur-optimiss. Il nest pas toujours indispensable de se donner la
peine de trouver limplantation la plus efficace dun algorithme, mois que ce dernier ne soit
susceptible dtre utilis pour une tche trs rptitive. Dans les autres cas, une mise en uvre
simple conviendra souvent : on pourra tre sr que le programme fonctionnera, peut-tre cinq ou
dix fois moins vite que la version la plus optimise, ce qui se traduira ventuellement par
quelques secondes supplmentaires lexcution. En revanche, un mauvais choix dalgorithme
peut entraner une diffrence dun facteur cent, mille ou plus, ce qui se traduira en minutes, en
heures voir en jours au niveau des temps dexcution.

Les caractristiques dun Algorithme


Un algorithme est une marche suivre :
1 dont les oprations sont toutes dfinies et portent sur des objets appels informations,
2 dont lordre dexcution des oprations est dfini sans ambigut,
3 qui est rpute rsoudre de manire certaine un problme ou une classe de problmes,
4 sexprime dans un langage indpendant des langages de programmation,

1.3 Lalgorithmique et la programmation


Un programme est la traduction dun algorithme dans un certain langage de programmation. Il
faut savoir qu chaque instruction dun programme correspond une action du processeur.

M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

1.3.1 Le but de la programmation :

Utiliser lordinateur pour traiter des donnes afin dobtenir des rsultats.
Abstraction par rapport au matriel (indpendance application / plate forme matrielle).
Intermdiaire entre le langage machine (binaire) et le langage humain

1.3.2 Langages de programmation


Le langage utilis par le processeur, est appel langage machine. Il s'agit d'une suite de 0 et de 1
(du binaire). Toutefois le langage machine est difficilement comprhensible par l'humain. Ainsi il
est plus pratique de trouver un langage intermdiaire, comprhensible par l'homme, qui sera
ensuite transform en langage machine pour tre exploitable par le processeur. L'assembleur est
le premier langage informatique qui ait t utilis. Celui-ci est encore trs proche du langage
machine mais il permet dj d'tre plus comprhensible. Toutefois un tel langage est tellement
proche du langage machine qu'il dpend troitement du type de processeur utilis (chaque type de
processeur peut avoir son propre langage machine). Ainsi un programme dvelopp pour une
machine ne pourra pas tre port sur un autre type de machine (on dsigne par le terme
"portable" un programme qui peut tre utilis sur un grand nombre de machines). Pour pouvoir
l'utiliser sur une autre machine il faudra alors parfois rcrire entirement le programme!
Il y a trois catgories de langage de programmations : les langages interprts et les langages
intermdiaires et les langages compils.

Langage interprt
Un langage de programmation est par dfinition diffrent du langage machine. Il faut donc le
traduire pour le rendre intelligible du point de vue du processeur. Un programme crit dans un
langage interprt a besoin d'un programme auxiliaire (l'interprteur) pour traduire au fur et
mesure les instructions du programme.
Exemples de langages interprts : Le langage HTML (les pages web), le langage Maple (calcul
mathmatique), Prolog (Intelligence artificielle), etc.

Langage compil :
Un programme crit dans un langage dit "compil" va tre traduit une fois pour toutes par un
programme annexe (le compilateur) afin de gnrer un nouveau fichier qui sera autonome, c'est-dire qui n'aura plus besoin d'un programme autre que lui pour s'excuter (on dit d'ailleurs que
ce fichier est excutable).
Un programme crit dans un langage compil a comme avantage de ne plus avoir besoin, une fois
compil, de programme annexe pour s'excuter. De plus, la traduction tant faite une fois pour
toute,
il
est
plus
rapide

l'excution.
Toutefois il est moins souple qu'un programme crit avec un langage interprt car chaque
modification du fichier source il faudra recompiler le programme pour que les modifications
prennent effet.
D'autre part, un programme compil a pour avantage de garantir la scurit du code source. En
effet, un langage interprt, tant directement intelligible (lisible), permet n'importe qui de
connatre les secrets de fabrication d'un programme et donc de copier le code voire de le
M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

modifier. Il y a donc risque de non-respect des droits d'auteur. D'autre part, certaines applications
scurises ncessitent la confidentialit du code pour viter le piratage (transaction bancaire,
paiement en ligne, communications scurises, ...).
Exemples de langages compils : Le langage C (Programmation systme), le langage C++
(Programmation systme objet), le Cobol (Gestion) etc.

Langages intermdiaires :
Certains langages appartiennent en quelque sorte aux deux catgories prcdentes (LISP, Java,
Python, ..) car le programme crit avec ces langages peut dans certaines conditions subir une
phase de compilation intermdiaire vers un fichier crit dans un langage qui n'est pas intelligible
(donc diffrent du fichier source) et non excutable (ncessit d'un interprteur). Les applets
Java, petits programmes insrs parfois dans les pages Web, sont des fichiers qui sont compils
mais que l'on ne peut excuter qu' partir d'un navigateur Internet (ce sont des fichiers dont
l'extension est .class).
Toutefois, peu prs tous les langages de programmation sont bass sur le mme principe:
Le programme est constitu d'une suite d'instructions que la machine doit excuter. Celle-ci
excute les instructions au fur et mesure qu'elle lit le fichier (donc de haut en bas) jusqu' ce
qu'elle rencontre une instruction (appele parfois instruction de branchement) qui lui indique
d'aller un endroit prcis du programme. Il s'agit donc d'une sorte de jeu de piste dans lequel la
machine doit suivre le fil conducteur et excuter les instructions qu'elle rencontre jusqu' ce
qu'elle arrive la fin du programme et celui-ci s'arrte.
Historique des langages

Langage de bas niveau (proche du langage machine):


- Jusquen 1945 : langage binaire
- 1950 : langage assembleur

Langage de haut niveau (proche des langages naturels):


Depuis 1955:
- Programmation procdurale : Fortran, Cobol, Basic, Pascal, C, Ada
- Programmation orient objet : SmallTalk, C++, Delphi, Java
- Programmation logique : Prolog
- Et beaucoup dautres

Evolution:
o Programmation imprative (fonction):
- Exemples : Pascal, C,
o Programmation oriente objet (POO) :
- Exemples : SmallTalk, Java, C++,

M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

1.3.3 La notion de fichier


Dans un programme les instructions et donnes rsident en mmoire centrale pour tre
excutes, Les programmes et les donnes sont sauvegardes dans des fichiers qui portent des
extensions spcifiques du langage :
o Les donnes et les programmes sont stocks dans des fichiers
o Un fichier est identifi par un nom et une extension (fichier.doc, pgcd.c, texte.tex, etc.)
o Un fichier est caractris par des attributs:
taille, date de cration, date de modification, etc.
o Lexploitation dun fichier par une application se fait par lintermdiaire du systme
dexploitation qui accomplit les oprations logiques de base suivantes:
ouvrir, fermer un fichier
lire, crire dans un fichier
o Lutilisateur peut crer, dtruire, organiser, lire, crire, modifier et copier des fichiers ou
des enregistrements qui les composent

1.3.4 La dmarche de programmation et analyse descendante


La rsolution d'un problme passe par toute une suite d'tapes :

Phase d'analyse et de rflexion (algorithmique)


Phase de programmation
- choisir un langage de programmation
- traduction de l'algorithme en programme
- programme (ou code) source
- compilation : traduction du code source en code objet
- traduction du code objet en code machine excutable, comprhensible par l'ordinateur
Phase de test
Phase dexcution
Enonc dun problme

Analyse du problme

Programmation laide dun


langage de programmation

Algorithme

Programme source

Compilation

Programme binaire
excutable

Excution du programme

Rsultats

M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

Le travail est ici surtout bas sur l'analyse du problme et l'criture de l'algorithme.
La ralisation d'un programme passe par l'analyse descendante du problme : il faut russir
trouver les actions lmentaires qui, en partant d'un environnement initial, nous conduisent
l'tat final.
Lanalyse descendante consiste dcomposer le problme donn en sous-problmes, et ainsi de
suite, jusqu descendre au niveau des primitives. Les tapes successives donnent lieu des sousalgorithmes qui peuvent tre considrs comme les primitives de machine intermdiaires
(procdures en Pascal, fonction en C).
Le travail de lanalyse est termin lorsquon a obtenu un algorithme ne comportant que :
Des primitives de la machine initiale,
Des algorithmes dj connus.
Lanalyse descendante est la mise en pratique du Discours de la mthode de Descartes.
Lordre des instructions est essentiel : la machine ne peut excuter quune action la fois et dans
lordre donn; cest la proprit de squentialit.
Une fois ces actions dtermines, il suffit de les traduire dans le langage de programmation.
Durant l'criture d'un programme, on peut tre confront 2 types d'erreur :
o les erreurs syntaxiques : elles se remarquent la compilation et sont le rsultat d'une
mauvaise criture dans le langage de programmation.
o les erreurs smantiques : elles se remarquent l'excution et sont le rsultat d'une
mauvaise analyse. Ces erreurs sont beaucoup plus graves car elles peuvent se dclencher
en cours d'exploitation du programme.

1.3.5 Excuter un programme


La mise au point d'un programme informatique se fait en plusieurs tapes.

Donnes

Excution du programme
Transformation des donnes
en rsultats

Ordinateur
Programme

Rsultats

M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

1.3.6 Pseudo langage


Un algorithme doit tre lisible et comprhensible par plusieurs personnes. Il doit donc suivre des
rgles prcises, il est compos dune entte et dun corps :
- lentte, qui spcifie :
o le nom de lalgorithme (Nom :)
o son utilit (Rle :)
o les donnes en entre, cest--dire les lments qui sont indispensables son
bon fonctionnement (Entre :)
o les donnes en sortie, cest--dire les lments calculs, produits, par
lalgorithme (Sortie :)
o les donnes locales lalgorithmique qui lui sont indispensables (Dclaration :)
- le corps, qui est compos :
o du mot clef dbut
o dune suite dinstructions indentes
o du mot clef fin
Le plus important pour un algorithme sont les dclarations ainsi que les instructions qui
constituent le corps de lalgorithme. Il existe des instructions qui ne servent qu la clart de
lalgorithme (lordinateur les ignore compltement), ce sont les commentaires.
Un commentaire a la syntaxe suivante :
/* ceci est un commentaire */

Exemple : voici le schma dun algorithme crit en notre pseudo langage :


Nom
Rle
Entre
Sortie

:
:
:
:

le nom de lalgorithme
que fait cet algorithme
les donnes ncessaires
les rsultats produits par lalgorithme

Facultatifs

Variables : la dclaration des variables


Debut
Instruction 1
Instruction 2

/* les commentaires explicatives des instructions */
Instruction k
Fin

M. El Marraki

31/03/2013

Algorithmique

SMIA, module M5 E2

2. Variables
Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement
des valeurs. Il peut sagir de donnes issues du disque dur, fournies par lutilisateur (frappes au
clavier). Ces donnes peuvent tre de plusieurs types : elles peuvent tre des nombres, du texte,
etc. Ds que lon a besoin de stocker une information au cours dun programme, on utilise une
variable.

2.1 Dclaration des variables


La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de lui
coller une tiquette. Ceci se fait tout au dbut de lalgorithme, avant mme les instructions
proprement dites. Cest ce quon appelle la dclaration des variables.
Une variable ne peut tre utilise que selle est dclare. La dclaration se fait par la donne du
nom de la variable et du type de la variable.

2.1.1 Noms de variables


Le nom de la variable (ltiquette de la bote) obit des rgles qui changent selon le langage
utiliser. Les principales rgles respecter sont :
Le nom de variable peut comporter des lettres et des chiffres,
On exclut la plupart des signes de ponctuation, en particulier les espaces.
Un nom de variable doit commencer par une lettre.
Le nombre maximal de caractres qui composent le nom dune variable dpend du
langage utilis.
Ne pas utiliser les mots cls du langage de programmation.

2.1.2 Types de variables


Lorsquon dclare une variable, il ne suffit pas de crer une bote (rserver un emplacement
mmoire) ; il faut prciser ce que lon voudra mettre dedans, car de cela dpendent la taille de la
bote (lemplacement mmoire) et le type de codage utilis.
- Types numriques classiques
Commenons par le cas trs frquent, celui dune variable destine recevoir des nombres.
8

l Si lon rserve un octet pour coder un nombre, on ne pourra coder que 2 = 256 valeurs
diffrentes. Cela peut signifier par exemple les nombres entiers de 1 256, ou de 0 255,
ou de 127 +128.
16

24

l Si lon rserve deux octets, on a droit 2 =65 536 valeurs ; avec trois octets, 2 =16
777 216, etc.

M. El Marraki

10

31/03/2013

Algorithmique

SMIA, module M5 E2

Type Numrique

Plage

Octet

de 0 255

Entier simple

de -32768 32767

Entier double

de -2147483648 2147483647

Rel simple

de -3.40x1038 -1.40x10-45 pour les ngatives


de 1,40x10-45 3.40x1038 pour les positives

Rel double

de -1.79x10
-4.94x10
les ngatives
-324
308
de 4.94x10
1.79x10
les positives

308

-324

La syntaxe dune dclaration de variable numrique en pseudo-langage aura la forme :


Variable g : Numrique
Variables PrixHT, TauxTVA, PrixTTC : Numrique
- Type alphanumrique
On dispose donc galement du type alphanumrique (galement appel type caractre, type
chane ou en anglais, le type string). Dans une variable de ce type, on stocke des caractres, quil
sagisse de lettres, de signes de ponctuation, despaces, ou mme de chiffres. Le nombre maximal
de caractres pouvant tre stocks dans une seule variable string dpend du langage utilis.
Un groupe de caractres est appel chane de caractres.
En pseudo-code, une chane de caractres est toujours note entre guillemets " ", car, il
peut y avoir une confusion entre des nombres et des suites de chiffres. Par exemple, 423
peut reprsenter :
le nombre 423 (quatre cent vingt-trois),
ou la suite de caractres 4, 2, et 3 note : "423"
La syntaxe dune dclaration de variable de type alphanumrique en pseudo-langage aura la
forme :
Variable nom : chane
Variables x, y : caractre.
- Type boolen
Le dernier type de variables est le type boolen : on y stocke uniquement les valeurs logiques
VRAI et FAUX. On peut reprsenter ces notions abstraites de VRAI et de FAUX par tout ce
qu'on veut : de l'anglais (TRUE et FALSE) ou des nombres (0 et 1). Le type boolen est trs
conomique en termes de place mmoire occupe, un seul bit suffit.

M. El Marraki

11

31/03/2013

Algorithmique

SMIA, module M5 E2

En gnral dans un algorithme on trouve des dclarations de variables de la forme :


Variables a,b,c,delta,x,y : nombres
nom,prenom : chaines de caractres
ok : booleen.

3.

Primitives

3.1 Affectation, expression et oprateurs


3.1.1 Affectation
Dfinition et notation :
Laffectation est laction lmentaire dont leffet est de donner une valeur une variable (ranger
une valeur une place).
L'affectation est ralise au moyen de l'oprateur (ou = en C et := en Pascal). Elle signifie
" prendre la valeur se trouvant du ct droit (souvent appele rvalue) et la copier du ct gauche
(souvent appele lvalue) ". Une rvalue reprsente toute constante, variable ou expression capable
de produire une valeur, mais une lvalue doit tre une variable distincte et nomme (autrement dit,
il existe un emplacement physique pour ranger le rsultat). Par exemple, on peut affecter une
valeur constante une variable (A 4), mais on ne peut pas affecter quoi que ce soit une
valeur constante - elle ne peut pas tre une lvalue (on ne peut pas crire 4 A).
Exemple :
X3
Signifie mettre la valeur 3 dans la case identifie par X. A lexcution de cette instruction, la
valeur 3 est range en X (nom de la variable).
La valeur correspond au contenu : 3
La variable correspond au contenant : X
On peut reprsenter la variable X par une boite ou case, et quand elle prend la valeur 3, la valeur
3 est dans la case X :
X
X
3
On remarque quune variable ne peut contenir un instant donn quune seule valeur.
Utilisations :
Voici quelques effets dclenches par lutilisation de laffectation () :
Instructions

actions

X3

X2

YX

M. El Marraki

effets
3

12

plus de 3 !
X

31/03/2013

Algorithmique

SMIA, module M5 E2

La dernire instruction (Y X) signifie : copier dans Y la valeur actuelle de X.


Un petit exercice instructif :
Quelles sont les valeurs successives prises par les variables X et Y suit aux instructions suivantes :
X 1 ; Y -4 ; X X+3 ; X Y-5 ; Y X+2 ; Y Y-6 ;
Rponses :
X
Y

1
-4

4
-4

-9
-4

-9
-7

-9
-13

Remarque :
noter aussi que laffectation est une expression comme une autre, cest--dire quelle retourne
une valeur. Il est donc possible dcrire:
X Y Z+2 ;
ceci revenant affecter Y le rsultat de lvaluation de Z+2, puis X le rsultat de laffectation
Y Z+2, cest--dire la valeur quon a donne Y. Remarquez lordre dvaluation de la droite
vers la gauche.
L'affectation des types primitifs est trs simple. Puisque les donnes de type primitif contiennent
une valeur relle et non une rfrence un objet, en affectant une valeur une variable de type
primitif on copie le contenu d'un endroit un autre. Par exemple, si on crit A B pour des
types primitifs, alors le contenu de B est copi dans A. Si alors on modifie A, bien entendu B
n'est pas affect par cette modification. C'est ce qu'on rencontre gnralement en programmation.
Echanger deux valeurs :
Problme : soit 2 variables quelconques (nombres ou caractres) x et y ayant respectivement
comme valeur a et b ; quelles sont les affectations qui donneront x la valeur b et y la valeur
a?
Analyse : la premire ide est dcrire : x y ; y x. Mais a ne marche pas, les deux
variables se retrouvent avec la mme valeur b ! Il faut mettre la valeur de x de cot pour ne pas la
perdre : on utilise une variable auxiliaire z et on crit les instructions suivantes :
z x ; x y ; y z ;
Le programme complet avec notre pseudo-langage est :
Nom
Rle
Entre
Sortie
Variables
Debut
x
y
z
x
y
Fin

: change
: changer deux valeurs
: x et y
: x et y
x, y, z : quelconques
3
-6
x
y
z

M. El Marraki

/* initialisation de x et y */
/* on stocke la valeur de x dans z */
/* on peut maintenant crire dans x */
/* on remet lancien contenu de x dans y */

13

31/03/2013

Algorithmique

SMIA, module M5 E2

Vrification : il sagit de vrifier que lalgorithme donne bien la solution voulu. Ecrivant aprs
chaque instruction les valeurs des variables X, Y et Z :
x 3
" x = 3, y = ,
z =
"
y -6
" x = 3, y = -6, z =
"
z x
" x = 3, y = -6, z = 3 "
x y
" x = -6, y = -6, z = 3 "
y z
" x = -6, y = 3, z = 3 " donc tout va bien.
Autre mthode : sil sagit de nombres entiers, nous pouvons nous passer dune variable
auxiliaire, mais en utilisant les primitives additionner et soustraire :
x a
" x = a, y =
"
y b
" x = a, y = b "
x x + y
" x = a + b, y = b "
y x y
" x = a + b, y = a + b b = a "
x x y
" x = a + b a = b, y = a " donc tout va bien.
Le programme complet avec notre pseudo-langage est :
Nom
Rle
Entre
Sortie
Variables
Debut
x
y
x
y
x
Fin

: change_entiers
: changer deux valeurs entires
: x et y
: x et y
x, y : nombres
3
/* initialisation de x et y */
-6
x + y
x - y
x - y

3.1.2 Expression et oprateurs


Expression :
Dans une instruction daffectation, on trouve :
o gauche de la flche, un nom de variable,
o droite de la flche, ce quon appelle une expression : un ensemble de valeurs, relies
par des oprateurs, et quivalent une seule valeur
o Lexpression situe droite de la flche doit tre du mme type que la variable situe
gauche.
Si lun des trois points numrs ci-dessus nest pas respect, la machine sera incapable
dexcuter laffectation, et dclenchera une erreur.

M. El Marraki

14

31/03/2013

Algorithmique

SMIA, module M5 E2

Oprateurs :
Un oprateur est un signe qui relie deux valeurs, pour produire un rsultat.
o Oprateurs numriques :
Ce sont les quatre oprations arithmtiques :
+
addition
soustraction
*
multiplication
/
division
Mentionnons galement le ^ qui signifie puissance". 45 au carr scrira donc 45^2.
La multiplication et la division sont prioritaires sur laddition et la soustraction.
12*3+5 et (12*3)+5 valent strictement la mme chose, savoir 41.
En revanche, 12*(3+5) vaut 12*8 soit 96.
o Oprateur alphanumrique : &
Cet oprateur permet de concatner deux chanes de caractres.
Exemple :
Nom
: concatner
Rle
: concatner deux chanes de caractres
Entre
: A et B
Sortie
: C
Variables A, B, C : caractre
Dbut
A "Bonjour"
B " Tous le monde"
C A & B
Fin
La valeur de C la fin de lalgorithme est "Bonjour Tous le monde".

3.2 Lire et crire


3.2.1 Introduction
Soit le programme suivant :
Variable A : entire
Dbut
A 12^2
Fin
Ce programme nous donne le carr de 12 soit 144.
On remarque que :
o si lon veut le carr dun autre nombre que 12, il faut rcrire le programme.

M. El Marraki

15

31/03/2013

Algorithmique

SMIA, module M5 E2

o Le rsultat est calcul par la machine elle le garde pour elle, et lutilisateur qui excute ce
programme, ne saura jamais quel est le carr de 12.
Cest pourquoi, il faut utiliser des instructions qui permettent lutilisateur de dialoguer avec
la machine.

3.2.2 Donnes et rsultat


Pour pouvoir effectuer un calcul sur une variable, la machine doit connatre la valeur de cette
variable. Si cette valeur na pas t dtermine par des initiations ou des calculs prcdents, il
faut que lutilisateur lui fournisse, cest une donne. Il sagit alors dintroduire une valeur partir
de lextrieur de la machine et pour cela lalgorithme doit contenir linstruction qui commande
la machine de lire la donne.
Si un algorithme contenant linstruction X A^2 la machine ne peut excuter cette
instruction que si elle connat la valeur de A, en supposant que la valeur de A en ce moment nest
pas connu, alors lalgorithme doit contenir linstruction lire(A) qui signifie : mettre dans la
case A, la valeur donne par le clavier (organe dentre de la machine).
Ds que le programme rencontre une instruction lire(), lexcution sinterrompt, attendant
larriver dune valeur par lintermdiaire du clavier. Ds que la touche Entre (Enter) a t
frappe, lexcution reprend.
Si on veut connatre le rsultat dun calcul ou le contenu dune variable X, lalgorithme doit
contenir linstruction qui commande la machine de fournir ce rsultat. Cette instruction est
crire(X) qui signifie : mettre sur lcran (organe de sortie de la machine) le contenu de la
case X. Cette action ne modifie pas le contenu de X.
Exemple : soit le morceau dalgorithme suivant :
A tant une donne, X un rsultat
lire (A)
X A^2
crire(X)
Schma des actions effectues par lutilisateur et la machine :
Utilisateur

Machine
A
lecture
12
calcul
12
criture

Lutilisateur donne 12

Lutilisateur lit !

144

144

La machine lit sur le clavier et crit sur lcran, lutilisateur crit sur le clavier et lit sur lcran.

M. El Marraki

16

31/03/2013

Algorithmique

SMIA, module M5 E2

3.2.3 Les libells


Avant de lire une variable, il est trs fortement conseill dcrire des libells lcran, afin de
prvenir lutilisateur de ce quil doit frapper :
crire("Entrez votre nom : ")
lire(NomFamille)

3.2.4 Exemples
Exemple 1 :
Quel est le rsultat produit par le programme suivant ?
Variables val, dval : entiers
Dbut
val 234
dval val * 2
crire(val)
crire(dval)
Fin

Rponses : 234 468


1re amlioration :
Variables val, dval : entiers
Dbut
crire("donner un entier : ") /* un libell */
lire(val)
dval val * 2
crire("le double est : " )
crire(dval)
Fin
Excution :
donner un entier : 234
le double est : 468

2me amlioration :
Nom : double
Rle : demande un nombre et affiche sont double
Entre : val
Sortie : dval
Variables val, dval : entiers
Dbut
crire("donner un entier : ")
lire(val)
dval val * 2
crire(" le double de : ",val," est : ", dval )
Fin

Excution :
donner un entier : 234
le double de : 234 est : 468
M. El Marraki

17

31/03/2013

Algorithmique

SMIA, module M5 E2

Exemple 2 :
Problme :
Multiplier deux nombres entiers.
En utilisant les primitives suivantes :
lire(), crire(), affecter ( ), multiplier (*).

Solution :
Algorithme :
Nom : multiplication
Rle : demander deux nombres et afficher leur multiplication
Entre : A et B
Sortie : C
variables A, B, C : entiers
Dbut
crire(" entrer la valeur de A : ")
lire(A)
crire(" entrer la valeur de B : ")
lire(B)
C A * B
crire(" le produit de ",A," et ",B," est : ",C)
Fin

Excution :
entrer la valeur de A : 12
entrer la valeur de B : -11
le produit de 12 est de 11 est : -132

3.2.5 Exercices :
Exercice 1 :
Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ?
Variables A, B, C : Entier
Dbut
A 8
B -2
C A + B
A 4
C B A
Fin

Exercice 2 :
Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ?
Variables A,
Dbut
A 2
B A +
A A +
B B +
A B
Fin

M. El Marraki

B : Entier
5
B
2
A

18

31/03/2013

Algorithmique

SMIA, module M5 E2

Exercice 3 :
Que produit lalgorithme suivant ?
Variables A, B : Entier
Dbut
crire("entrer la valeur de A : ")
crire("entrer la valeur de B : ")

lire(A)
lire(B)

A A + B
B A - B
A A B

crire(" A = ",A) crire(" B = ",B)


Fin

Exercice 4 :
Que produit lalgorithme suivant ?

Variables A, B, C : chane de caractres


Dbut
A "423"
B "12"
C A & B
crire(" C = ",C)
Fin

Exercice 5 :
1. Ecrire un algorithme permettant dchanger les valeurs de deux variables A et B, et ce quel
que soit leur contenu pralable.
2. On dispose de trois variables A, B et C. Ecrivez un algorithme transfrant A la valeur de B,
B la valeur de C et C la valeur de A (quels que soient les contenus pralables de ces
variables).

Exercice 6 :
Ecrivez un algorithme qui calcule et affiche la surface et la circonfrence dun cercle (2 r et
r 2 ). Lalgorithme demandera lutilisateur dentrer la valeur du rayon.

Exercice 7 :

Comment calculer le plus rapidement possible x16 ?


Calculer x25 avec le minimum de multiplication.

Exercice 8 :
Ecrivez un algorithme qui calcule et affiche la surface et la circonfrence dun cercle (2 r et
r 2 ). Lalgorithme demandera lutilisateur dentrer la valeur du rayon.

Exercice 9 :
crire un algorithme qui effectue la lecture du temps t en seconde, et il affiche le temps t en
jours, heure, minutes, secondes.
Exemple : si t=21020 secondes lalgorithme affichera 0 jours 5 heures 50 minutes et 20
secondes.

M. El Marraki

19

31/03/2013

Algorithmique

SMIA, module M5 E2

3.5.4 si .. alors .., si .. alors .. sinon ..


Les primitives que nous allons prsenter maintenant vont permettre la machine de "choisir" les
excutions suivant les valeurs des donnes. Lors de lexcution lalgorithme, la primitive :
si C alors
A
finsi
O C est une condition (on prcisera plus loin la nature de cette condition) et A une instruction
ou une suite dinstructions, a pour effet de faire excuter A si et seulement si C est satisfaite.
La primitive
si C alors
A
sinon B
finsi
A pour effet de faire excuter A si C est satisfaite ou bien B dans la cas contraire (C non
satisfaite).
Une condition est une comparaison. Cest--dire quelle est compose de trois lments
q une valeur
q un oprateur de comparaison
q une autre valeur
Les valeurs peuvent tre a priori de nimporte quel type (numriques, caractres)
Les oprateurs de comparaison sont : = != < > =< >=
Lensemble constitue donc si lon veut une affirmation, qui a un moment donn est VRAIE ou
FAUSSE.
A noter que ces oprateurs de comparaison semploient tout fait avec des caractres. Ceux-ci
sont cods par la machine dans lordre alphabtique, les majuscules tant systmatiquement
places avant les minuscules. Ainsi on a :
"t" < "w"
"Maman" > "Papa"
"maman" > "Papa"

VRAI
FAUX
VRAI.

Conditions composes
Certains problmes exigent parfois de formuler des conditions qui ne peuvent pas tre exprimes
sous la forme simple expose ci-dessus. Prenons le cas " n est compris entre 5 et 8 ". En fait cette
phrase cache non une, mais deux conditions. Car elle revient dire que " n est suprieur 5 et n
est infrieur 8 ". Il y a donc bien l deux conditions, relies par ce quon appelle un oprateur
logique, le mot ET.
Comme on la voqu plus haut, linformatique met notre disposition trois oprateurs logiques :
ET, OU, et NON.
Le ET a le mme sens en informatique que dans le langage courant. Pour que C1 ET C2 soit
VRAI, il faut imprativement que C1 soit VRAIE et que C2 soit VRAIE.

M. El Marraki

20

31/03/2013

Algorithmique

SMIA, module M5 E2

Il faut se mfier un peu plus du OU. Pour que C1 OU C2 soit VRAI, il suffit que C1 soit VRAIE
ou que C2 soit VRAIE.
Le point important est que si C1 est VRAIE et C2 est VRAIE, alors C1 OU C2 est VRAIE. Le OU
informatique ne veut donc pas dire " ou bien ".
VRAI NON FAUX
On reprsente tout ceci dans des tables de vrit :

ET

OU

Exemple :
Problme :
tant donns deux nombres entiers positifs, identifier le plus grand des deux nombres.

Solution :
Analyse : si A>B alors le plus grand est A sinon le plus grand est B.
Conception : Algorithme
variables A, B : entiers
dbut
crire("Programme permettant de dterminer le plus grand de deux entiers positifs)
crire(Entrer le premier nombre : )
lire(A)
crire (Entrer le second nombre : )
lire(B)
si (A>B) alors
crire(Le nombre le plus grand est : ,A)
sinon
crire(Le nombre le plus grand est : , B)
finsi
fin

Organigramme

M. El Marraki

21

31/03/2013

Algorithmique

SMIA, module M5 E2

crire(" Entrer le premier nombre :")

lire(A)

crire(" Entrer le second nombre :")


nombre :
lire(B)

non

si A>B

crire(Le nombre le plus grand est : ,B)

oui

crire(Le nombre le plus grand est : ,A)

Tests imbriqus
Graphiquement, on peut trs facilement reprsenter un si comme un aiguillage de chemin de fer.
Un si ouvre donc deux voies, correspondant deux traitements diffrents. Mais il y a des tas de
situations o deux voies ne suffisent pas. Par exemple, un programme devant donner ltat de
leau selon sa temprature doit pouvoir choisir entre trois rponses possibles (solide, liquide ou
gazeuse).

Exemple :
Variable Temp : entier
Dbut
crire("Entrez la temprature de leau :")
lire(Temp)
si Temp =< 0 Alors
crire("Cest de la glace")
finsi
si Temp > 0 Et Temp < 100 Alors
crire("Cest du liquide")
finsi
si Temp > 100 Alors
crire("Cest de la vapeur")
finsi
Fin

Les tests successifs portent sur une la mme chose, la temprature (la valeur de la variable
Temp). Il serait ainsi bien plus rationnel dimbriquer les tests de cette manire :

M. El Marraki

22

31/03/2013

Algorithmique

SMIA, module M5 E2

Exemple :
Variable Temp en Entier
Dbut
crire("Entrez la temprature de leau :" )
lire(Temp)
si Temp =< 0 Alors
crire("Cest de la glace")
sinon
si Temp < 100 Alors
crire("Cest du liquide")
sinon
crire("Cest de la vapeur")
finsi
finsi
Fin

Nous avons fait des conomies au niveau de la frappe du programme : au lieu de devoir taper
trois conditions, dont une compose, nous navons plus que deux conditions simples. Mais aussi,
et surtout, nous avons fait des conomies sur le temps dexcution de lordinateur. Si la
temprature est infrieure zro, celui-ci crit dornavant " Cest de la glace " et passe
directement la fin, sans tre ralenti par lexamen dautres possibilits (qui sont forcment
fausses).
Cette deuxime version nest donc pas seulement plus simple crire et plus lisible, elle est
galement plus performante lexcution.
Les structures de tests imbriqus sont donc un outil indispensable la simplification et
loptimisation des algorithmes.

Exercices :
Exercice 10 :
Ecrivez un algorithme qui donne le maximum de trois nombres saisis au clavier. Effectuez des
tests pour :
2 5 8
3 1 3
8 -6 1

Exercice 11 :
Ecrivez un algorithme qui demande deux nombres lutilisateur et linforme ensuite si leur
produit est ngatif, positif ou nul (attention : on ne doit pas calculer le produit des deux
nombres).

Exercice 12 :
crivez un algorithme qui permet de discerner une mention un tudiant selon la moyenne de ses
notes :
- "Trs bien" pour une moyenne comprise entre 16 et 20 (16<= moyenne <=20)
- "Bien" pour une moyenne comprise entre 14 et 16
(14<= moyenne <16)
- "Assez bien" pour une moyenne comprise entre 12 et 14 (12<= moyenne <14)
- "Passable" pour une moyenne comprise entre 10 et 12
(10<= moyenne <12)

M. El Marraki

23

31/03/2013

Algorithmique

SMIA, module M5 E2

Exercice 13 :
crivez un algorithme qui permet de rsoudre une quation du second degr
( a x 2 + b x + c = 0 avec a 0 )

Exercice 14 :
Les tudiants ayant pass l'examen dalgorithmique en session de Juin ont t classs selon leurs
notes en trois catgories :
-

pour une note infrieure strictement 5, l'tudiant est limin,

pour une note suprieure ou gale 5 et infrieur strictement 10, l'tudiant passe la
session de rattrapage,

pour une note suprieure ou gale 10, l'tudiant valide le module

Ecrivez un algorithme qui demande lutilisateur dentrer la note du module, puis affiche la
situation de l'tudiant selon sa note (on suppose que l'utilisateur entre une note valide entre 0 et
20).

3.5.5 Les Boucles


La notion ditration (boucle) est une des notions fondamentales de lalgorithmique. On lutilise
souvent quand on doit exercer plusieurs fois le mme traitement sur un mme objet, ou plusieurs
objets de mme nature. Mais son rel intrt rside dans le fait que lon peut modifier, chaque
rptition, les objets sur lesquels sexerce laction rpte.
Pour comprendre lintrt des boucles, on se place dans un cas bien prcis :
Prenons le cas dune saisie au clavier (une lecture), par exemple, on pose une question laquelle
lutilisateur doit rpondre par O (Oui) ou N (Non). Mais lutilisateur maladroit risque de taper
autre chose que O ou N. Ds lors, le programme peut soit planter par une erreur dexcution
(parce que le type de rponse ne correspond pas au type de la variable attendu) soit se drouler
normalement jusquau bout, mais en produisant des rsultats faux.
Alors, dans tout programme, on met en place ce quon appelle un contrle de saisie (pour
vrifier que les donnes entres au clavier correspondent bien celles attendues par
lalgorithme).
On pourrait essayer avec un si. Voyons voir ce que a donne :
Variable Rep Caractre
crire("Voulez vous un caf ? (O/N)")
lire(Rep)
si Rep != "O" et Rep != "N" alors
crire("Saisie erronne. Recommencez")
Lire(Rep)
finsi
a marche tant que lutilisateur ne se tromper quune seule fois, et il rentre une valeur correcte
la deuxime demande. Si lon veut galement viter une deuxime erreur, il faudrait rajouter un
SI. Et ainsi de suite, on peut rajouter des centaines de SI. Mais cela ne rsout pas le problme. La
seule issue est lutilisation dune boucle.

M. El Marraki

24

31/03/2013

Algorithmique

SMIA, module M5 E2

Il existe trois faons dexprimer algorithmiquement litration :


q
q
q

TantQue
Rpter jusqu
Pour jusqu

La boucle TantQue
Le schma de la boucle TantQue est :
TantQue conditions
...
Instructions
...
FinTantQue
Le principe est simple : le programme arrive sur la ligne du TantQue. Il examine alors la valeur
de la condition. Si cette valeur est VRAI, le programme excute les instructions qui suivent,
jusqu ce quil rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne du TantQue,
procde au mme examen, et ainsi de suite. On ne sarrte que lorsque la condition prend la
valeur FAUX.
Illustration avec notre problme de contrle de saisie :
Variable Rep en Caractre
Ecrire "Voulez vous un caf ? (O/N)"
TantQue Rep != "O" ET Rep != "N"
Lire Rep
Si Rep != "O" ET Rep != "N" Alors
Ecrire "Saisie errone. Recommencez"
FinSi
FinTantQue

La boucle Rpter jusqu


Le schma de la boucle rpter est :
Rpter
...
Instructions
...
jusqu conditions
Le principe est simple : toutes les instructions crites entre Rpter et jusqu sont
excutes au moins une fois et leur excution est rpte jusqu ce que la condition place
derrire jusqu soit satisfaite.
Illustration avec notre problme de contrle de saisie :

M. El Marraki

25

31/03/2013

Algorithmique

SMIA, module M5 E2

Variable Rep en Caractre


Ecrire "Voulez vous un caf ? (O/N)"
Rpter
Lire Rep
Si Rep != "O" ET Rep != "N" Alors
Ecrire "Saisie errone. Recommencez"
FinSi
Jusqu Rep = "O" OU Rep = "N"

La boucle Pour jusqu


Cette boucle est utile surtout quand on connat le nombre ditrations effectuer.
Le schma de la boucle Pour est :
Pour i allant de dbut jusqu fin
...
Instructions
...
FinPour
Le principe est simple :
q on initialise i par dbut
q on test si on a pas dpass fin
q on excute les instructions
q on incrmente i (i i + 1)
q on test si on a pas dpass fin
q etc.

Exemple :
Problme :
On veut crire un algorithme qui affiche le message "Bonjour tous" 100 fois.

Rsolution :
Au lieu dcrire linstruction :
crire("Bonjour tous") ;
100 fois. On utilise plutt une boucle :
variable i entire
Pour i allant de 1 100 faire
crire("Bonjour tous")
finpour
On peut amliorer ce programme par :
q ajouter un entier n : le nombre de fois que le message safficher lcran,
q afficher la variable i dans la boucle : pour numroter les passages dans la boucle.
variable n, i entires
crire("entrer le nombre n :")
M. El Marraki

26

31/03/2013

Algorithmique

SMIA, module M5 E2

lire(n)
Pour i allant de 1 n faire
crire("Bonjour tous la ",i," fois")
finpour
Dans la boucle prcdente le i est incrment automatiquement. Si on dsire utiliser la boucle
TantQue, il faut incrmenter le i soit mme :
variable n, i entires
crire("entrer le nombre n :")
lire(n)
i 1
TantQue(i<=n) faire
crire("Bonjour tous la ",i," fois")
i i + 1
FinTantQue

Des boucles imbriques


De mme quune structure SI ALORS peut contenir dautres structures SI ALORS, une
boucle peut contenir dautres boucles.
Variables i, j entier
Pour i allant de 1 10
crire("Premire boucle") ;
Pour j allant de 1 6
crire("Deuxime boucle") ;
Finpour ;
Finpour ;
Dans cet exemple, le programme crira une fois "Premire boucle" puis six fois de suite
"Deuxime boucle", et ceci dix fois en tout. A la fin, il y aura donc eu 10 x 6 = 60 passages
dans la deuxime boucle (celle du milieu).
Notez la diffrence marquante avec cette structure :
Variables i, j entier
Pour i allant de 1 10
crire("Premire boucle") ;
Finpour ;
Pour j allant de 1 6
crire("Deuxime boucle") ;
Finpour ;
Ici, il y aura dix critures conscutives de "Premire boucle", puis six critures
conscutives de "Deuxime boucle" , et ce sera tout.
Examinons lalgorithme suivant :

M. El Marraki

27

31/03/2013

Algorithmique

SMIA, module M5 E2

Variable i entier
Pour i allant de 1 10
i i * 2
crire("Passage numro : ",i) ;
Finpour
On remarque que la variable i est gre "en double", ces deux gestions tant contradictoires.
Dune part, la ligne " Pour " augmente la valeur de i de 1 chaque passage. Dautre part la
ligne " i i * 2" double la valeur de i chaque passage. Il va sans dire que de telles
manipulations perturbent compltement le droulement normal de la boucle.

Exemple :
Problme :
On veut crire un algorithme qui calcul la somme des entiers positifs infrieurs ou gaux N.

Rsolution :

1re tape : Analyse


1. Entrer la valeur de N
2. Calculer la somme des N premiers entiers positifs
3. Afficher le rsultat
2me tapes : Conceptions
1.
dclaration des variables N, i, somme : entiers
crire(donner la valeur de N)
lire(N)
si N<0 alors erreur
initialiser somme et i
Rpter
somme somme + i
i i+1
jusqu i>=N
crire("la somme est ",somme)
2.

dclaration des variables N, i, somme : entiers


crire(donner la valeur de N)
lire(N)
si N<0 alors erreur
initialiser somme et i
TantQue i<= N
somme somme + i
i i+1
FinTantque
Ecrire("la somme est ",somme)

3.
dclaration des variables N, i, somme : entiers

M. El Marraki

28

31/03/2013

Algorithmique

SMIA, module M5 E2

crire(donner la valeur de N)
lire(N)
si N<0 alors erreur
initialiser somme et i
Pour i allant de 1 N
somme somme + i
FinPour
Ecrire("la somme est ",somme)
3me tape : Test
Somme_N_entiers
Donner N : -1
N doit etre >0 !
Somme_N_entiers
Donner N : 7845
La somme est : 30775935
Somme_N_entiers
Donner N : 10
La somme est : 55

Remarque : Pour cet exemple on peut faire une vrification plus complte en calculant une
autre variable somme1 = N(N+1)/2 , qui est la somme 1+2+3+ +N, et la compare
somme ensuite afficher le rsultat de la comparaison.

Mthodologie pour l'criture d'une boucle :


reprer une action rptitive, donc une boucle
choix entre boucle avec compteur ou sans
Question ? Peut-on prvoir/dterminer le nombre d'itrations ?
q si oui, boucle avec compteur : la boucle pour
q si non, boucle sans compteur
Est ce que il faut commencer l'action avant de tester ou l'inverse ?
si tester d'abord, alors boucle TantQue
si action puis tester, alors Rpter jusqu
crire l'action rptitive et l'instruction de boucle choisie
Question ? Faut-il prparer les donnes l'itration suivante ?
si oui, complter le corps de boucle
initialiser les variables utilises (si ncessaires)
crire les conditions d'arrt, voire l'incrmentation de la variable de contrle.
excuter pour les cas extrmes et au moins un cas "normal".

3.6 Exemple
Ecrire lalgorithme qui compte le nombre de bits ncessaires pour coder en binaire un entier
n.
- Le nombre de bits ncessaire pour coder lentier n est [lg(n)] (lentier juste au dessus du

M. El Marraki

29

31/03/2013

Algorithmique

SMIA, module M5 E2

logarithme base 2 de lentier n).


- Analyse : on initialise une variable nb 0 et chaque fois que lon divise n par 2 on
augment de 1 la valeur de nb, on rpte ce procd jusqu ce que le quotient obtenu est nul.
- Lalgorithme :
Variables i,n,nb : entiers
Debut
Ecrire(" Entrer la valeur de n :")
lire(n)
i n
nb 0
TantQue(i<>0) faire
i i/2
nb nb+1
FinTantQue
Ecrire("Pour coder ",n," en binaire il faut ",nb,"bits")

Fin
- Excution :
Entrer la valeur de n : 13
Pour coder 13 en binaire il faut 4 bits
===========================
Entrer la valeur de n : 1750
Pour coder 1750 en binaire il faut 11 bits
============================
Entrer la valeur de n : 0
Pour coder 0 en binaire il faut 0 bits
Erreur !!!!!
- Amlioration :
Variables i,n,nb : entiers
Debut
Ecrire(" Entrer la valeur de n :")
lire(n)
i n/2
/* Pour le cas de zro */
nb 1
TantQue(i<>0) faire
i i/2
nb nb+1
FinTantQue
Ecrire("Pour coder ",n," en binaire il faut ",nb,"bits")
Fin

- Implmentation en langage C :

#include<stdio.h>
void main(){
int i,n,nb ;
printf(" Entrer la valeur de n :") ;
scanf("%d",&n) ;
i = n ;
nb = 0 ;
while(i!=0){
i = i/2 ;

M. El Marraki

30

31/03/2013

Algorithmique

SMIA, module M5 E2
nb = nb + 1;
}
printf("Pour coder %d en binaire il faut %d bits\n",n,nb) ;

3.6 Exercices
Exercice 15 :
1. crivez un algorithme qui affiche 100 fois la phrase : "je ne dois pas arriver en retard en
classe".
2. crivez un algorithme qui affiche les entiers de 1 100.
3. crivez un algorithme qui affiche les entiers pairs de 1 100.

Exercice 16 :
1. crivez un algorithme qui calcule la somme des n premiers nombres entiers positifs.
Lalgorithme demandera lutilisateur dentrer la valeur de n.
2. crivez un algorithme qui calcule la somme des n premiers nombres entiers positifs
paires. Lalgorithme demandera lutilisateur dentrer la valeur de n.

Exercice 17 :
1. Excuter le programme suivant :
Variable i, j : Entier
debut
Pour i1 jusqu 5
Ecrire(" i= ", i)
Pour j1 jusqu 3
Ecrire("le produit de",i," et ",j," est:",i*j)
FinPour
FinPour
Fin
2. Excuter le programme suivant :
Variable i, j : Entier
debut
Pour i1 jusqu 5
Ecrire(" i= ", i)
FinPour
Pour j1 jusqu 3
Ecrire("le produit de",i," et ",j," est:",i*j)
FinPour
Fin

Exercice 18 :
1. crivez un algorithme qui calcule la somme S suivante :
S = 1 + 2 + 3 + + (n-1) + n.
Lalgorithme demandera lutilisateur dentrer la valeur de n.

M. El Marraki

31

31/03/2013

Algorithmique

SMIA, module M5 E2

2. crivez un algorithme qui calcule le factoriel de n :


n ! = 123 (n-1) n.
Lalgorithme demandera lutilisateur dentrer la valeur de n.

Exercice 19 :
Soit lalgorithme suivant :
variables a,b,r : entiers
dbut
crire("donner les valeurs de a et b : ")
lire(a,b)
TantQue b>0 faire
r a%b
/* a%b :reste de la division de a par b */
a b
b r
FinTanQue
crire(a)
Fin
1. Excuter lalgorithme (afficher dans un tableau les valeurs de a, b et r) pour :
a.
a = 50 et
b = 45
b.
a = 21 et
b = 13
c.
a = 96 et
b = 81
2. Que fait lalgorithme prcdant.

Exercice 20:
1. Un nombre entier p (diffrent de 1) est dit premier si ses seuls diviseurs positifs sont 1 et
p. Ecrivez un algorithme qui effectue la lecture dun entier p et dtermine si cet entier est
premier ou non.
2. Deux nombres entiers n et m sont qualifis damis, si la somme des diviseurs de n est
gale m et la somme des diviseurs de m est gale n (on ne compte pas comme diviseur
le nombre lui mme et 1).
Exemple : les nombres 48 et 75 sont deux nombres amis puisque :
Les diviseurs de 48 sont : 2, 3, 4, 6, 8, 12, 16, 24 et
2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 75
Les diviseurs de 75 sont : 3, 5, 15, 25 et
3 + 5 + 15 + 25 = 48.
Ecrire un algorithme qui permet de dterminer si deux entiers n et m sont amis ou non.

M. El Marraki

32

31/03/2013

Algorithmique

4.

SMIA, module M5 E2

Les structures de donnes statiques

4.1 Tableaux une dimension


4.1.1 Introduction
Imaginons que dans un programme, nous ayons besoin simultanment de 25 valeurs (par
exemple, des notes pour calculer une moyenne). La solution consiste dclarer 25 variables
relles, appeles par exemple n1,n2,n3,,n25 et la variable moyenne relle.
moyenne = (n1+n2+n3++n25) / 25
En programmation (exemple langage C) : lordinateur va rserver 25*4=100 octets pour les
valeurs relles des 25 variables et 25*4=100 octets pour les adresses de ces 25 variables.
La programmation nous permet de rassembler toutes ces variables en une seule : " la note numro
1 ", " la note numro 2 ", , " la note numro 25 ".
Un ensemble de valeurs portant ainsi le mme nom de variable et repres par un nombre,
sappelle un tableau, et le nombre qui sert reprer chaque valeur sappelle un indice.
Un tableau de taille n est une structure trs simple constitue de n emplacements conscutifs en
mmoire. Il est donc possible d'accder un lment d'un tableau en temps constant pourvu que
l'on connaisse sa position (ou indice). Un tableau est donc une structure trs simple et trs
efficace. Il n'est cependant pas possible de modifier la taille d'un tableau, ce qui est gnant pour
un certain nombre d'algorithmes. On dit cette structure est statique. Le nombre d'lments qu'elle
contient ne peut pas varier.
Dans notre exemple, nous crerons donc un tableau appel Note[]. Et chaque note individuelle
sera dsigne par : Note[i] (llment qui se trouve la position i).
Pour dclarer un tableau il faut prciser le nombre et le type de valeurs quil contiendra.
Tableau Note[25] : rels
Cette dclaration rserve lemplacement de 25 lments de type rels. Chaque lment est
repr par son indice (position de llment dans le tableau). Dans la plus part des langages de
programmation (en particulier en langage C), la premire position porte le numro 0. Dans notre
exemple, les indices vont de 0 24. Le premier lment du tableau sera dsign par Note[0],
le deuxime par Note[1], le dernier par Note[24]. Lutilisation de Note[25] dclanchera
une erreur.
On peut crer des tableaux contenant des variables de tous types : tableaux de numriques,
tableaux de caractres, tableaux de boolens, tableaux de tout ce qui existe dans un langage
donn comme type de variables. Par contre, on ne peut pas faire un mixage de types diffrents de
valeurs au sein dun mme tableau.
Lnorme avantage des tableaux, cest quon va pouvoir les traiter en faisant des boucles. Par
exemple, pour effectuer notre calcul de moyenne, cela donnera par exemple :

4.1.2 Exemple
Voici un programme qui comporte la dclaration dun tableau de 25 rels (les notes dune classe),
on commence par effectuer la saisie des notes, et en suite on calcul la moyenne des 25 notes et on
affiche la moyenne :
M. El Marraki

33

31/03/2013

Algorithmique

SMIA, module M5 E2

variables tableau Note[25],i,somme


: entier
moyenne
: rel
dbut
/* saisir les notes */
pour i allant de 0 24 faire
ecrire("entrer une note :")
lire(Note[i])
finpour
/* effectuer la moyenne des notes */
somme 0
pour i allant de 0 24 faire
somme somme + Note[i]
finPour
moyenne = somme / 25
/* affichage de la moyenne */
ecrire("la moyenne des notes est :",moyenne)
fin

Excution :

entrer une
entrer une
entrer une

entrer une
la moyenne

note : 12
note : 10.5
note : 14

note : 08
des notes est :11.75

Une amlioration :

Constante Max 200


variables tableau Note[Max],i,somme,n : entier
moyenne : rel
dbut
crire("entrer le nombre de notes :")
lire(n)
/* saisir les notes */
ecrire("entrer les ",n," notes :")
pour i allant de 0 n-1 faire
lire(Note[i]
finpour
/* effectuer la moyenne des notes */
somme 0
pour i allant de 0 n-1 faire
somme somme + Note[i]
finPour
moyenne = somme / 25
/* affichage de la moyenne */
ecrire("la moyenne des ",n," notes est :",moyenne)
fin

Remarque :
- A la compilation la constante Max sera remplace par le nombre 200.
- Ici le nombre de note nest pas fix 25, mais il est seulement infrieur 200.

M. El Marraki

34

31/03/2013

Algorithmique
-

SMIA, module M5 E2

Mme si on donne n la valeur 10, lordinateur rserver quand mme la place pour
200 variables de types rels.
La saisie des notes est aussi amliore, puisque on rentre sur la mme ligne toutes les
notes. Attention : si n=10, il faut rentrer 10 valeurs relles sparer par un espace, si vous
rentrez moins de dix valeurs, lordinateur restera bloquer, et attend que vous rentrer les
dix valeurs attendues. Si au contraire vous rentrez 11 valeurs au lieu de 10, lordinateur
affectera les10 premires valeurs au tableau Note et gardera la 11-ime valeur pour une
prochaine lecture, ce qui provoquera peut tre une erreur !!

4.1.3 Les caractristiques de lindice dun tableau


Lindice qui sert parcourir les lments dun tableau peut tre exprim directement comme un
nombre ou une variable.
La valeur dun indice doit toujours :
- tre gale au moins 0 (dans le langage Pascal, le premier lment dun tableau porte
lindice 1). Mais, nous avons choisi ici de commencer la numrotation des indices zro,
comme cest le cas en langage C. Donc attention, Tab[2] est le troisime lment du
tableau Tab !
- tre un nombre entier. Quel que soit le langage, llment Tab[3,1416] nexiste
jamais.
- tre infrieure ou gale au nombre dlments du tableau moins 1. Si le tableau Tab a t
dclar comme ayant 10 lments, la prsence dans une ligne, sous une forme ou sous une
autre, de Tab[10] dclenchera automatiquement une erreur.
Remarques :
1. La dclaration :
tableau Tab[10] : entier
crera un tableau Tab de 10 lments, le plus petit indice tant 0 et le plus grand indice
est 9.
2. Ne pas confondre lindice dun lment dun tableau avec le contenu de cet lment. La
premire maison de la rue na pas forcment un habitant, et la dixime maison na pas
dix habitants. En notation algorithmique, il ny a aucun rapport entre i et Tab[i].

Exercice 21 :
1.

Ecrivez un algorithme qui lit la taille n dun tableau T, il saisi les n lments du
tableau T, il effectue la somme des n lments du tableau et il affiche cette somme.

2.

Ecrivez un algorithme qui lit la taille n de deux tableaux T1 et T2, il effectue la lecture
de ces deux tableaux, ensuite il effectue la somme des tableaux T1 et T2 dans un
tableau T et il affiche le tableau T.
Exemple :
pour n=8 T1=[4,5,8,-2,5,6,0,-5], T2=[1,-5,-7,0,-1, 3,-8,9],
le tableau T obtenu est : T=[5,0,1,-2,4,9,-8,4],

M. El Marraki

35

31/03/2013

Algorithmique

SMIA, module M5 E2

Exercice 22 :
1. Ecrivez un algorithme qui permet lutilisateur de saisir les notes d'une classe, ensuite il
renvoie le nombre de ces notes suprieures la moyenne de la classe.
2. Ecrivez un algorithme qui permet lutilisateur de saisir un tableau de taille n et

dafficher le plus grand et le plus petit lment du tableau.

Exercice 23 :
Que produit lalgorithme suivant ?
Variable Tableau F[10], i : entier
dbut
F[0] 1
F[1] 1
crire(F[0],F[1])
pour i allant de 2 10 faire
F[i] F[i-1]+F[i-2]
crire(F[i])
finpour
fin

4.1.4 Les tableaux dynamiques


Il arrive frquemment que lon ne connaisse pas lavance le nombre dlments que devra
comporter un tableau. Bien sr, une solution consisterait dclarer un tableau gigantesque (10
000 lments) pour tre sr que "a rentre". Mais dune part, on nen sera jamais parfaitement sr
(si le nombre n des lments du tableau dpasse 10 000, a provoquera une erreur), dautre part,
en raison de limmensit de la place mmoire rserve (la plupart du temps non utilise), cest un
gchis qui affectera la taille de notre algorithme, ainsi que sa rapidit.
Pour rsoudre ce problme, on a la possibilit de dclarer le tableau sans prciser au dpart son
nombre dlments. Ce nest que dans un second temps, au cours du programme, que lon va
fixer ce nombre via une instruction dallocation : Allocation(nom,nombre,type), Dans
la quelle il faut prciser le nom du tableau, le nombre dlments et le type des lments
allouer. Notez que tant quon na pas prcis le nombre dlments dun tableau, dune
manire ou dune autre, ce tableau est inutilisable. Il ne faut pas oublier de librer le tableau
la fin de son utilisation avec linstruction : libre(nom).
Exemple : on veut faire saisir des notes pour un calcul de moyenne, mais on ne sait pas combien
il y aura de notes saisir. Lalgorithme sera :
variables tableau Note[], moyenne, somme
: rels
i, n
: entiers
dbut
crire("entrer le nombre de notes saisir : ")
lire(n)
/* allouer n nombres de types rels */
allocation(Notes,n,rels)
/* saisir les notes */
crire("entrer les ",n," notes :")
pour i allant de 0 n-1 faire

M. El Marraki

36

31/03/2013

Algorithmique

SMIA, module M5 E2
lire(Note[i])
finpour
/* effectuer la moyenne des notes */
somme 0
pour i allant de 0 n-1 faire
somme somme + Note[i]
finPour
moyenne = somme / n
/* affichage de la moyenne */
crire("la moyenne des ",n," notes est :",moyenne)
/* librer le tableau Notes */
libre(Notes)

fin

Exercice 24 :
Refaire lExercice 1 prcdent en utilisant des tableaux dynamiques.

4.2 Tableaux deux dimensions


4.2.1 Introduction
Pour reprsenter par exemple les matrices dans un ordinateur, un tableau ne suffit pas, puisque
chaque ligne de la matrice est en effet un tableau, donc une matrice nk peut par exemple tre
reprsenter par n tableaux de k lments chacun. Mais cette reprsentation sera difficile grer,
surtout si on veut implmenter un algorithme qui effectue la multiplication ou laddition de deux
matrices. Linformatique nous offre la possibilit de dclarer des tableaux dans lesquels les
valeurs ne sont pas repres par un indice seule, mais par deux indices. Cest la solution notre
problme de reprsentation de matrice.
Un tel tableau se dclare ainsi :
tableau matrice[10][10] : entier
Cette dclaration signifie : rserver un espace de mmoire pour 10 x 10 entiers, et quand jaurai
besoin de lune de ces valeurs, je les reprerai par deux indices.
matrice[i][j] est llment de la matrice qui se trouve lintersection de la ligne i et la
colonne j.
matrice[2][3] 5
Cette instruction signifie : mettre lemplacement qui se trouve lintersection de la deuxime
ligne avec la troisime colonne la valeur 5.
Dans la mmoire lordinateur reprsente un tableau matrice[10][10] par un seul tableau avec la
taille 1010.

4.2.2 Initialisation de matrice :


Pour initialiser une matrice on peut utiliser par exemple les instructions suivantes :
T1[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
T2[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
T3[4][4] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
T4[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Ces instructions initialisent quatre tableaux de la manire suivantes :

M. El Marraki

37

31/03/2013

Algorithmique

1
4
7

SMIA, module M5 E2

T1
2 3
5 6
8 9

1
4
7

T2
2 3
5 6
8 9

1
4
7
0

2
5
8
0

T3

3
6
9
0

0
0
0
0

1
5
9
0

2
6
0
0

T4
3
7
0
0

Remarque : Rappelons que ces reprsentations rectangulaires sont trs conventionnelles. Dans la
mmoire de lordinateur ces quatre tableaux sont plutt arrangs en lignes :

T1
T2
T3
T4

1
1
1
1

2
2
2
2

3
3
3
3

4
4
0
4

5
5
4
5

6
6
5
6

7
7
6
7

8
8
0
8

9
9
7 8 9 0 0 0 0 0
9 0 0 0 0 0 0 0

4.2.3 Lecture et criture dune matrice


Lecture dune matrice :

variable Tableau matrice[10][10],i,j,n,k : entiers


dbut
crire("donner le nombre de ligne de la matrice :")
lire(n)
crire("donner le nombre de colonne de la matrice :")
lire(k)
pour i allant de 1 n faire
crire("donner les lments de la ",i," ligne:")
pour j allant de 1 k faire
lire(matrice[i][j])
finpour
fipour
fin

Ecriture dune matrice :


variables Tableau Mat[10][10],i,j,n,k : entier
dbut
pour i allant de 1 n faire
pour j allant de 1 k faire
crire(Mat[i][j]," ")
finpour
crire("\n")
/* retour la ligne */
finpour
fin

4.2.4 Exemples dutilisation dune matrice


Somme de deux matrices :
constante N 20
variables Tableau A[N][N],B[N][N],C[N][N],i,j,n : entier
dbut
crire("donner la taille des matrices(<20) :")

M. El Marraki

38

31/03/2013

4
8
0
0

Algorithmique

SMIA, module M5 E2
lire(n)
/* lecture de la matrice A */
pour i allant de 1 n faire
crire("donner les lments de la ",i," ligne:")
pour j allant de 1 n faire
lire(A[i][j])
finpour
fipour
/* lecture de la matrice B */
pour i allant de 1 n faire
crire("donner les lments de la ",i," ligne:")
pour j allant de 1 n faire
lire(B[i][j])
finpour
fipour
/* la somme de C = A + B */
pour i allant de 1 n faire
pour j allant de 1 n faire
C[i][j] A[i][j]+B[i][j]
finpour
fipour
/* affichage de la matrice de C */
pour i allant de 1 n faire
pour j allant de 1 n faire
crire(C[i][j]," ")
finpour
crire("\n")
/* retour la ligne */
finpour

fin

Produit de deux matrices :

constante N 20
variables Tableau A[N][N],B[N][N],C[N][N],i,j,k,n,S : entier
dbut
crire("donner la taille des matrices(<20) :")
lire(n)
/* lecture de la matrice A */
pour i allant de 1 n faire
crire("donner les lments de la ",i," ligne:")
pour j allant de 1 n faire
lire(A[i][j])
finpour
fipour
/* lecture de la matrice B */
pour i allant de 1 n faire
crire("donner les lments de la ",i," ligne:")
pour j allant de 1 n faire
lire(B[i][j])
finpour
fipour
/* le produit de C = A * B */

M. El Marraki

39

31/03/2013

Algorithmique

SMIA, module M5 E2
pour i allant de 1 n faire
pour j allant de 1 n faire
S 0
pour k allant de 1 n faire
S S + A[i][k]*B[k][j]
finpour
C[i][j] S
finpour
fipour
/* affichage de la matrice de C */
pour i allant de 1 n faire
pour j allant de 1 n faire
crire(C[i][j]," ")
finpour
crire("\n")
/* retour la ligne */
finpour

fin

Exercice 25 :
1. Ecrire un algorithme qui effectue la lecture dune matrice carre A ainsi que sa taille n et
affiche la trace de A (pour une matrice A(ai,j), Trace(A)=ai,i la somme des
lments sur la diagonale).
2. Ecrire un algorithme qui effectue la lecture dune matrice carre A ainsi que sa taille n et
affiche la matrice transpos tA de A (Pour une matrice A(ai,j), tA(aj,i) ).

Exercice 26 :
1. crivez un algorithme qui effectue la lecture de :
- n un entier.
- vect[] un tableau de n nombre rels,
- mat[][] une matrice carre de nn nombre rels,
il calcule et affiche le produit de la matrice mat par le vecteur vect.
2. crivez un algorithme qui effectue la lecture de deux matrices alloues dynamiquement
et affiche le produit de ces deux matrices.

4.3 Applications
4.3.1 Les algorithmes de recherche dans un tableau
Problme : recherche dun lment dans un tableau.

Recherche squentielle
Analyse :
Parcours squentiel du tableau
Arrt lorsque la valeur est trouve
Retour lindice correspondant
La valeur nest pas trouve
Retour dune valeur spciale
M. El Marraki

40

31/03/2013

Algorithmique

SMIA, module M5 E2

Conception :
Un programme qui demande la taille du tableau T, les lments du tableau T, la valeur de x (la
valeur cherche), le programme donne la premire position de x dans le tableau T, si x est dans le
tableau T et donne la valeur -1 si x nest pas dans le tableau T.
variables n,i : entier
tableau T : rel
x : rel
dbut
crire("donner la taille de T :")
lire(n)
crire("donner les ",n," lments de T :")
pour i allant de 0 jusqu n-1 faire
lire(T[i])
finpour
crire("donner la valeur de x :")
lire(x)
i 0
Tant que ( i < n et T[i] != x) faire
i i + 1
fintantque
si (i<n) alors retourne(i)
sinon retourne(-1)
fin

Test :

Si on prend n=10, T= 1 9 2 0 3 5 2 4 11 -1 et x=7


la fonction retourne -1 (puisque 7 ne se trouve pas dans T !)

Si on prend n=10, T= 1 9 2 0 3 5 2 4 11 -1 et x=2


la fonction retourne 2 (puisque T[2]=2 , la premire position trouve)

Recherche dichotomique
On se place dans le cas o le tableau est ordonn et les lments du tableau sont deux deux
distincts.
Analyse :
x : lment recherch,
T : tableau ordonn, sans duplication,
n : la taille du tableau (le nombre dlments du tableau)
mil : indice du milieu du tableau,
si x = T[mil] alors retourne mil
sinon
si x < T[mil] alors
recherche dans la 1re moiti du tableau (T[d mil-1])
sinon recherche dans la 2me moiti du tableau (T[mil+1 f])
finsi
M. El Marraki

41

31/03/2013

Algorithmique

SMIA, module M5 E2

finsi
crire(" llment x nest pas dans T ")
Conception :
variables n, i, d, f, mil : entier
tableau T : rel
x : rel
dbut
crire("donner la taille de T :")
lire(n)
crire("donner les ",n," lments de T :")
pour i allant de 0 jusqu n-1 faire
lire(T[i])
finpour
crire("donner la valeur de x :")
lire(x)

dbut
d 0
f n 1
Tantque (d<=f)
mil (d + f)/2
si (x = T[mil])
crire(" llment x est la position ",mil)
sinon si (x<T[mil]) f mil-1
sinon d mil + 1
finsi
finsi
fintantque
crire(" llment x nest pas dans T ")
fin
Test :
Soit le tableau T[1..9] (ordonn et sans rptition) suivant :
0
1
2
3
4
5
6
2
6
8
11
17
18
22

7
45

8
102

On cherche llment 8.
d
f
mil

0
8
4

0
3
1

1
3
2

Au dbut : d=0, f=8 comme d<f on rentre dans la boucle "Tantque", mil=(0+8)/2=4 et
comme x<T[mil] (8 <17) on a f=mil-1 (f=3), d=0, puisque d<f (0<3) on reste dans la
boucle Tantque et on a mil =(0+3)/2=1 et comme x>T[mil] (8>6), donc d=mil+1=2
et f=3 par consquent d<f (2<3), alors on reste dans la boucle Tantque et mil=2, la
x=T[mil] (8=T[2]) alors le programme affiche la valeur 2 qui est bien la position que occupe
la valeur x=8.
M. El Marraki

42

31/03/2013

Algorithmique

SMIA, module M5 E2

Exercice 32 : Soit le tableau T[0..10] (ordonn et sans rptition) suivant :


-2

10

17

19

23

50

62

70

1. Chercher llment 3 dans le tableau T, par dichotomie.


2. Chercher llment 19 dans le tableau T, par dichotomie.
3. Chercher llment 56 dans le tableau T, par dichotomie.

5. Exercices et Problmes dexamens


5.1 Examen dinformatique (I2) session de Juin 2004
Enoncs des exercices :
Exercice 1 :
Ecrivez un algorithme qui demande lutilisateur dentrer la temprature de leau, et affiche
ensuite ltat de leau selon la temprature (on rappelle que ltat de leau est glace pour une
temprature infrieure ou gale 0, est vapeur pour une temprature suprieure ou gale 100
et liquide pour une temprature comprise strictement entre 0 et 100).

Exercice 2 :
1. Ecrivez un algorithme qui lit un entier n et compte le nombre de 1 dans la reprsentation
binaire de cet entier.
2. crivez un algorithme qui lit un tableau dentiers de n lments et donne la plus grande et
la plus petite valeur de ce tableau.

Exercice 3 :
Soit la fonction mystere crite en Maple suivante :

mystere := proc(n)
local liste,x,i ;
x := n ;
liste := NULL ;
i :=2 ;
while (i<= x) do
if (irem(x,i)=0) then
x := x/i;
liste := liste,i;
else
i := i+1;
fi;
od;
[liste];
end;

1. Que valent mystere(8), mystere(90) et mystere(210) (justifier par un tableau


de variables) ?
2. Que fait ce programme ?
M. El Marraki

43

31/03/2013

Algorithmique

SMIA, module M5 E2

3. Que se passera-t-il si on remplace linstruction i:=2; par i:=1; ?


N.B : la fonction Maple irem(x,y) retourne le reste de la division de x par y et x/y
dsigne la division entire de x par y.

Exercice 4 :
Deux nombres entiers n et m sont qualifis damis, si la somme des diviseurs de n est gale m et
la somme des diviseurs de m est gale n (on ne compte pas comme diviseur le nombre lui mme
et 1).
Exemple : les nombres 48 et 75 sont deux nombres amis puisque :
Les diviseurs de 48 sont : 2, 3, 4, 6, 8, 12, 16, 24 et
2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 75
Les diviseurs de 75 sont : 3, 5, 15, 25 et 3 + 5 + 15 + 25 = 48.
Ecrire un algorithme qui permet de dterminer si deux entiers n et m sont amis ou non.

5.2 Correction de lexamen dinformatique (I2 ) session Juin 2004


Exercice 1 : sur 4 points
Variable Temp : Entier
Dbut
Ecrire("Entrez la temprature de leau :" )
Lire(Temp)
Si Temp =< 0 Alors Ecrire("Cest de la glace" )
Sinon Si Temp < 100 Alors Ecrire("Cest du liquide")
Sinon Ecrire("Cest de la vapeur")
finsi
finsi
Fin

2me solution (mauvaise):


Variable Temp : Entier
Dbut
Ecrire("Entrez la temprature de leau : ")
Lire(Temp)
Si Temp =< 0 Alors Ecrire("Cest de la glace") finsi
Si Temp > 0 Et Temp < 100 Alors
Ecrire("Cest du liquide") finsi
Si Temp > 100 Alors Ecrire("Cest de la vapeur") finsi
Fin

Exercice 2 : sur 7 points


1.

Variables i,n,poids : entiers


Debut
Ecrire(" Entrer la valeur de n :")
lire(n)
i n
poids 0

M. El Marraki

44

31/03/2013

Algorithmique

SMIA, module M5 E2
TantQue(i<>0) faire
si (i mod 2 = 1) alors
poids poids + 1
finsi
i i/2
FinTantQue
Ecrire(poids)

Fin
2. variables Tableau Tab[100], i, n, min, max : Entier
debut
ecrire("donner la taille du tableau :")
lire(n)
ecrire("donner les lments du tableaux :")
Pour i allant de 1 n faire
lire(Tab(i))
FinPour
min Tab[1]
max Tab[1]
Pour i allant de 2 n faire
si (min > Tab[i]) alors
min Tab[i] finsi
si (max < Tab[i]) alors
max Tab[i] finsi
FinPour
Ecrire("le minimum est ",min)
Ecrire("le maximum est ",max)
fin

Exercice 3 : sur 6.5 points


1. mystere(8) :
x
i
liste

8
2

4
2
2

2
2
2,2

1
2
2,2,2

mystere(90) :
x
i
liste

90
2

45
2
2

45
3
2

15
3
2,3

5
3
2,3,3

5
4
2,3,3

5
5
2,3,3

1
5
2,3,3,5

mystere(210) :
x
210 105 105
i
2
2
3
liste
2
2

35
3
2,3

35
4
2,3

35
5
2,3

7
5
2,3,5

7
6
2,3,5

7
1
7
7
2,3,5 2,3,5,7

2. Ce programme donne la liste des diviseurs (premiers) dun entier n.

M. El Marraki

45

31/03/2013

Algorithmique

SMIA, module M5 E2

3. En remplaant linstruction i:=2 par linstruction i:=1 le teste irem(x,i)=0 est


toujours vrai, x prend toujours la mme valeur et la liste contiendra une infinit de 1 (on obtient
une boucle infini) !

Exercice 4 : sur 3 points


1re Solution :

variables n, m, d, p, S1, S2 : Entier


debut
ecrire(" entrer lentier n :")
lire(n)
ecrire(" entrer lentier m :")
lire(m)
S1 0
S2 0
d 2
TantQue d*d<=n faire
Si irem(n,d)=0 alors
S1 S1 + d + n/d
finsi
d d + 1
FinTantQue
p 2
TantQue p*p<=m faire
Si irem(m,p)=0 alors
S2 S2 + p + m/p
finsi
p p + 1
FinTantQue
Si (S1=S2) alors
Ecrire(" n et m sont amis")
Sinon
Ecrire(" n et m ne sont pas amis")
finsi
fin

2me Solution :
variables n, m, i, S1, S2 : Entier
debut
ecrire(" entrer lentier n :")
lire(n)
ecrire(" entrer lentier m :")
lire(m)
S1 0
S2 0
Pour i allant de 2 n-1 faire
Si irem(n,i)=0 alors
S1 S1 + i
finsi
FinPour
Pour i allant de 2 m-1 faire

M. El Marraki

46

31/03/2013

Algorithmique

SMIA, module M5 E2
Si irem(m,i)=0 alors
S2 S2 + i
finsi
FinPour
Si (S1=S2) alors
Ecrire("n et m sont amis")
Sinon
Ecrire("n et m ne sont pas amis")
finsi

fin

5.3 Examen dinformatique (I2 ) session de Juillet 2004


Exercice 1 : (4 points)
Les tudiants ayant pass l'examen du module I2 en session de Juin ont t classs selon leurs
notes en trois catgories :
-

pour une note infrieure strictement 5, l'tudiant est limin,

pour une note suprieure ou gale 5 et infrieur strictement 10, l'tudiant passe la
session de rattrapage,

pour une note suprieure ou gale 10, l'tudiant valide le module

Ecrivez un algorithme qui demande lutilisateur dentrer la note du module, puis affiche la
situation de l'tudiant selon sa note (on suppose que l'utilisateur entre une note valide entre 0 et 20).

Exercice 2 : (4 points)
Un nombre parfait est un entier positif suprieur 1, gal la somme de ses diviseurs ; on ne
compte pas comme diviseur le nombre lui-mme.
Exemple : 6 est un nombre parfait puisque : 6 = 3 + 2 + 1.
1.
Donner un nombre parfait diffrent de 6.
2.
Ecrire la conception de lalgorithme qui nous dit si un entier n est parfait ou non.

Exercice 3 : (5 points)
Soit la fonction mystere crite en Maple suivante :
mystere := proc(a,b)
local r ;
while ( b > 0 ) do
r := irem(a,b);
a := b;
b := r;
od;
a;
end;
1. Que valent mystere(35,12), mystere(96,81) et mystere(34,21) (donner
les valeurs que prennent les variables a, b et r dans chacun des cas) ?
2. Que fait ce programme ?

M. El Marraki

47

31/03/2013

Algorithmique

SMIA, module M5 E2

N.B : la fonction Maple irem(x,y) retourne le reste de la division de x par y.

Exercice 4 : (7 points)
1. crivez un algorithme qui lit la taille dun tableau n, le tableau T, une valeur x, et il
indique ensuite si llment x appartient ou non au tableau T.

2. crivez un algorithme qui permet de dterminer si les lments d'un tableau d'entiers sont

tous conscutifs ou non. (Par exemple, si le tableau est : 7; 8; 9; 10, ses lments sont
tous conscutifs. Si le tableau est : 7; 9 ; 10; 11, ses lments ne sont pas tous
conscutifs).
5.4 Correction de lexamen dinformatique (I2 ) session juillet 2004

Exercice 1 :
1re version :

Variables note : rel


Dbut
Ecrire("Entrez la note du module :")
Lire (note)
Si (note < 5)
alors Ecrire ("l'tudiant est limin")
Sinon Si note <10 alors
Ecrire ("l'tudiant passe en rattrapage")
Sinon
Ecrire ("l'tudiant a valid le module")
Finsi
Finsi
Fin
2me version :
Variables note : rel
Dbut
Ecrire("Entrez la note du module")
Lire (note)
Si (note < 5)
alors Ecrire("l'tudiant est limin") Finsi
Si (note >= 5 et note < 10) alors
Ecrire(" l'tudiant passe en rattrapage")
Finsi
Si (note > 10) alors Ecrire("l'tudiant a valid le module")
Finsi
Fin

Exercice 2 :
1. Le nombre 28 est parfait puisque 28 = 14+4+7+2+1.
2. solution :
Variables n, d, S : entier
Dbut
Ecrire ("Entrez la valeur de n : ")
Lire (n)
S 1

M. El Marraki

48

31/03/2013

Algorithmique

SMIA, module M5 E2
d 2
TantQue (d*d <= n)
Si (n%d=0) alors S S + d + n/d finsi
d d + 1
FinTantQue
Si (S=n) alors
Ecrire ("le nombre n est parfait ")
Sinon
Ecrire ("le nombre n nest pas parfait ")
finsi

Fin

Exercice 3 :
1. mystere(35,12) :
a
b
r

35
12
11

12
11
1

11
1
0

La valeur affiche est 1


mystere(96,81) :
a
96
81
15
6
b
81
15
6
3
r
15
6
3
0
La valeur affiche est 3
mystere(34,21) :
a
34
21
13
8
5
3
2
b
21
13
8
5
3
2
1
r
13
8
5
3
2
1
0
La valeur affiche est 1
2. Cet algorithme donne le plus grand commun diviseur (le pgcd) de deux nombres entiers a et b.

Exercice 4 :
1. variables n, i, x, T[20] : entiers
debut
ecrire("entrer la valeur de n : ")
lire(n)
ecrire("entrer le tableau T : ")
pour i allant de 1 n faire lire(T[i]) finpour
ecrire("entrer la valeur de x : ")
lire(x)
i 1
TantQue ( i n et T[i] x) faire
i i + 1
FinTantQue
Si (i n+1) alors
Ecrire(" llment x se trouve dans le tableau T ")
Sinon
Ecrire("llment x ne se trouve pas dans le tableau T ")
finsi
fin

M. El Marraki

49

31/03/2013

Algorithmique

SMIA, module M5 E2

2. Dans cette question, on suppose que les variables n et T sont connues.


1re version:
Variable i: entier
Dbut
i 1
TantQue (i<n ET T[i+1] = T[i]+1)
i i+1
FinTantQue
Si (i<n) alors
Ecrire("les termes du tableau ne sont pas conscutifs")
Sinon
Ecrire(" les termes du tableau sont conscutifs ")
FinSi
Fin
2me version:
Variable i, j: entier
Dbut
j 1
Pour i allant de 1 n-1
Si (T[i+1] T[i] +1) alors
j 0
i n-1
FinSi
FinPour
Si (j=1) alors
Ecrire("les termes du tableau sont conscutifs")
Sinon
Ecrire("les termes du tableau ne sont pas conscutifs")
Finsi
Fin

5.5 Examen dinformatique (I2 ) session de Juin 2005


Exercice 1 :
Ecrire un algorithme qui demande lge dun enfant lutilisateur. Ensuite, il linforme de sa
catgorie :
La catgorie dun enfant est "Poussin" si 6 age < 8,
La catgorie dun enfant est "Pupille" si 8 age < 10,
La catgorie dun enfant est "Minime" si 10 age < 12,
La catgorie dun enfant est "Cadet" si age 12.

Exercice 2 :
1. Ecrivez un algorithme qui lit un entier n et compte le nombre de 1 dans la reprsentation
binaire de cet entier.
2. crivez un algorithme qui lit un entier n (la taille du tableau), le tableau dentiers T de n
lments, lentier x et indique le nombre de fois que x figure dans le tableau T.

M. El Marraki

50

31/03/2013

Algorithmique

SMIA, module M5 E2

3. Ecrivez une procdure qui prend pour arguments un entier n (la taille du tableau), le
tableau de rels T et affiche le plus grand lment du tableau T ainsi que sa position dans
le tableau. (On suppose que le tableau T est form dlments tous distincts)

Exercice 3 :
Soit la fonction mystere crite en Maple suivante :
>

mystere := proc(L,t)
local u, i;
u := 0;
for i from 1 to nops(L) do
u := u*t + L[i];
od;
u;

end;

1. Que valent mystere([1,-1,0,2],3), mystere([1,0,1,1,1],2) et


mystere([a,b,c],x) (donner la valeur de u chaque tapes de la boucle) ?
2. Que fait ce programme ?
3. Que calcule la procdure mystere(L,t) si les lments de la liste L sont tous
strictement infrieur t ?

Exercice 4 :
Soit T un tableau qui contient n valeurs relles tris dans lordre croissant. Ecrire une procdure
qui prend comme paramtre le Tableau T, lentier n (la taille de T) et un nombre rel x, et elle
effectue linsertion de x dans le tableau T, de telle manire que le tableau T reste tri.
Exemple : Soit le tableau T de 8 nombres tris dans lequel on dsire insrer le nombre 40 :
4 7 8 12 23 56 89 112
Le rsultat est un tableau T de 9 nombres toujours tris :
4 7 8 12 23 40 56 89 112

5.6 Examen dinformatique (I2 ) session de Juin 2006


Exercice 1 : 3 points
Dans le championnat de foot marocain (qui comporte 16 quipes) les deux premires quipes
sont qualifies pour la ligue des champions africaine, les deux suivants (le troisime et le
quatrime) sont qualifis pour la ligue des champions arabes, les trois dernires quipes
descendent en deuxime division, et les autres restent en premire division.
Ecrire un algorithme qui demande le classement dune quipe du championnat de foot marocain.
Ensuite, il nous informe de sa situation pour lanne prochaine.
Correction :
Nom : Foot
Role : donne la situation dune quipe en fonction de son classement
Entre : n un entier compris entre 1 et 16
Sortie : un message
Variables : n entier
Debut
crire("donner votre classement (entre 1 et 16) :")
lire(n)

M. El Marraki

51

31/03/2013

Algorithmique

SMIA, module M5 E2

si n<=0 alors
crire(" faux classement !")
else si n<=2 alors
crire(" lquipe ira la ligue des champions africaine ")
else si n<=4 alors
crire(" lquipe ira la ligue des champions arabe ")
else si n<=14 alors
crire(" lquipe restera en premire division ")
else
crire(" lquipe jouera en deuxime division ")
finsi
finsi
finsi
finsi
fin

Exercice 2 : 10 points
1.
a. crivez une fonction fact(), qui prend pour argument un entier k et retourne le
factoriel de k.
b. crivez une procdure qui effectue la lecture dun entier n, calcule et affiche la
somme des factoriels des entiers de 0 n :

i! . (utiliser la fonction fact()


i =0

prcdente).
2. Ecrivez une fonction qui prend en argument un entier n et retourne le nombre de 1 dans la
reprsentation binaire de lentier n.
3. crivez une procdure qui lit un entier n (la taille du tableau), le tableau dentiers T de n
lments, lentier x et indique le nombre de fois que x figure dans le tableau T.
Correction :
1. a. 2 points
fonction fact(n entier) : entier
var f,i :entier
debut
f1
i1
tantque(i<=n) faire
ff*i
ii+1
fintantque
retourne(f)
fin
b. 2 points nom : somme factorielle
n

rle : calcule de

i!
i =0

entre : n :entier
sortie : S : entier
variable : n, S, i : entiers
debut
crire("donner n :")
lire(n)

M. El Marraki

52

31/03/2013

Algorithmique

SMIA, module M5 E2

S0
i 1
tanque(i<=n) faire
SS+fact(i)
ii+1
fintanque
crire(" la somme est ",S)
fin
2. sur 3 points : fonction poids(n :entier) :entier
variables i,n,poids : entiers
dbut
i n
poids 0
TantQue(i<>0) faire
si (i mod 2 = 1) alors
poids poids + 1
i i/2
FinTantQue
Ecrire(poids)
Fin
3. sur 3 points :
variables Tableau Tab[100], i, n, x, c : entier
debut
ecrire("donner la taille du tableau :")
lire(n)
ecrire("donner les lments du tableaux :")
Pour i allant de 1 n faire
lire(Tab(i))
FinPour
ecrire("donner x :")
lire(x)
c 0
Pour i allant de 0 n-1 faire
si (x = Tab[i]) alors c c+1 finsi
FinPour
Ecrire("le mombre de",x," est ",c)
fin

Exercice 3 : 4 points
Soit la fonction mystere() crite en Maple suivante :
>
mystere := proc(n)
local s, i;
s := 0, 1;
i:=3;
while(i<=n) do
s := s, s[i-1]+s[i-2];
i:=i+1;
od;
[s];
end;
1. Que valent mystere(10) ?

M. El Marraki

53

31/03/2013

Algorithmique

SMIA, module M5 E2

2. Que fait ce programme ?


3. On remarque que pour calculer s[i] on besoin que de s[i-1] et s[i-2], comment amliorer cette
fonction (crire une fonction qui nutilise pas de liste s) ?

Correction :
1. sur 1 point : mystere(10) : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
2. sur 0.5 point : cette procdure calcule les termes de la suite de Fibonacci.
3.
fonction Fibo(n :entier)
variables i, n, u, v, w : entiers
dbut
si (n=1) alors crire(0," ")
si (n=2) alors crire(1," ")
i 3
TantQue(i<=n) faire
crire(u," ")
w v
v u + v
u w
i i+1
FinTantQue
Fin

Exercice 4 :

3 points

On dsire crire un algorithme qui affiche limage miroir n dun nombre entier n.
Exemple : limage miroir du nombre n=54321 est n=12345.
1. Analyse : expliquer comment extraire partir de lentier n les chiffres qui le compose.
2. Ecrire une conception de lalgorithme qui lit un entier n et affiche son image miroir.
Correction :
1. Pour extraire les chiffres qui composent un entier n il suffit de rpter les deux
instructions suivantes :
r n mod 10

n n/10

2. nom : miroir
rles : affichage de limage miroir dun entier
entre : n :entier
sortie : les chiffres qui composent n
variables n, i, r : entier
dbut
crire("Entrer un entier : ")
lire(n)
tanque(n<>0) faire
r n mod 10
crire(r)
n n/10
fintantque
fin

M. El Marraki

54

31/03/2013

Algorithmique

SMIA, module M5 E2

Exercice 1 :
1. crivez un algorithme qui effectue la lecture de trois nombres et affiche le plus grands de
ces trois nombres.
2. crivez un algorithme qui effectue la lecture de n nombres, ensuite affiche le plus grands
de ces n nombres (n saisie au clavier).
Correction :
1. 1re solution

(chercher une solution avec le minimum de tests) :


Nom :
maximum
Rle :
donne le maximum de trois nombres
Entre :
a, b, c : nombres
Sortie :
message
Variables a, b, c : nombres
Dbut
ecrire("donner trois nombres :")
lire(a,b,c)
si (a>=b) alors
si (a>=c) alors
ecrire("le maximum est ",a)
sinon
ecrire("le maximum est ",c)
finsi
sinon si (b>=c) alors
ecrire("le maximum est ",b)
sinon
ecrire("le maximum est ",c)
finsi
fin

2me solution :
Nom :
maximum
Rle :
donne le maximum de trois nombres
Entre :
a, b, c : nombres
Sortie :
max : nombre
Variables a, b, c, max : nombres
Dbut
ecrire("donner trois nombres :")
lire(a,b,c)
max a
si (b>max) alors max b finsi
si (c>max) alors max c finsi
ecrire("le maximum est ",max)
fin

2. Nom

:
maximum
Rle :
donne le maximum de trois nombres
Entre :
a: nombre
Sortie :
max : nombre
Variables a, max : nombres
Dbut
ecrire("donner lentier n :")
lire(n)
ecrire("donner le premier nombre :")
lire(max)
pour i allant de 2 n faire
ecrire("donner le ",i," nombre :")
lire(a)
si (a>max) alors max a finsi
finpour
ecrire("le maximum est ",max)
fin

M. El Marraki

55

31/03/2013

Algorithmique

SMIA, module M5 E2

Exercice 2 : Soit lalgorithme suivant :


variables a,b,r : entiers
dbut
crire("donner les valeurs de a et b : ")
lire(a,b)
TantQue (b>0) faire
r a%b
/* a%b :reste de la division de a par b */
a b
b r
FinTanQue
crire(a)
Fin

1. Excuter le programme prcdent (afficher dans un tableau les valeurs de a, b et r) pour :


a.
a = 35 et
b = 12
b.
a = 96 et
b = 81
c.
a = 34 et
b = 21
2. Implmenter ce programme en langage C ;
3. Que fait ce programme.
Correction :
1. mystere(35,12) :
a
35
12
11
b
12
11
1
r
11
1
0
La valeur affiche est 1
mystere(96,81) :
a
96
81
15
6
b
81
15
6
3
r
15
6
3
0
La valeur affiche est 3
mystere(34,21) :
a
34
21
13
8
5
b
21
13
8
5
3
r
13
8
5
3
2
La valeur affiche est 1
2.

1
0

3
0

3
2
1

2
1
0

1
0

#include<stdio.h>
#include<conio.h>
void main(){
int a,b,r ;
printf("donner a et b :") ;
scanf("%d %d",&a,&b) ;
while(b !=0){
r = a%b
/* a%b :reste de la division de a par b */
a = b
b = r
}
printf("le pgcd est %d\n",a) ;
getch() ;
}

M. El Marraki

56

31/03/2013

Algorithmique

SMIA, module M5 E2

Exercice 3 :
Deux nombres entiers n et m sont qualifis damis, si la somme des diviseurs de n est gale
m et la somme des diviseurs de m est gale n (on ne compte pas comme diviseur le nombre
lui mme et 1).
Exemple : les nombres 48 et 75 sont deux nombres amis puisque :
Les diviseurs de 48 sont : 2, 3, 4, 6, 8, 12, 16, 24 et

2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 75
Les diviseurs de 75 sont : 3, 5, 15, 25 et
3 + 5 + 15 + 25 = 48.
Ecrire un programme qui permet de dterminer si deux entiers n et m sont amis ou non.
Correction :

variables n, m, d, p, S1, S2 : Entier


debut
ecrire(" entrer les entiers n et m :")
lire(n,m)
S1 0
S2 0
d 2
TantQue (d*d<=n) faire
Si (n%d=0) alors S1 S1 + d + n/d
d d + 1
FinTantQue
p 2
TantQue (p*p<=m) faire
Si (m%p)=0 alors S2 S2 + p + m/p
p p + 1
FinTantQue
Si (S1=S2) alors
Ecrire(" n et m sont amis")
Sinon
Ecrire(" n et m ne sont pas amis")
fin

finsi

finsi

Exercice 4 (un nombre parfait) :


Un nombre parfait est un entier positif suprieur 1, gal la somme de ses diviseurs ; on ne
compte pas comme diviseur le nombre lui-mme.
Exemple : 6 est un nombre parfait puisque : 6 = 3 + 2 + 1.
1.
Donner un nombre parfait diffrent de 6.
2.
Donner lanalyse de lalgorithme correspondant la fonction parfait().
3.
Donner la conception de cet algorithme.
Correction :
1.
28 est un nombre parfait puisque : 28 = 14 + 7 + 4 + 2 + 1.
2.
Pour un entier n donn, on calcul ses diviseurs ainsi que la somme de ses diviseurs, si
la somme est gale n alors le nombre n est parfait, sinon il ne lest pas.
3.
s et d : entiers
ecrire("donner n :")
lire(n)

M. El Marraki

57

31/03/2013

Algorithmique

SMIA, module M5 E2

s 1
d 2
tant que (d*d < n) faire
si (n%d=0) alors s s + d + n/d finsi
d d + 1
finTantque
si (s=n) alors ecrire("n est parfait")
sinon ecrire("n nest pas parfait")
finsi

4.6 Examen dInformatique (juin 2011)


Exercice 1 : (6.5 points)
I. QCM (2.5 points) : Cocher la bonne rponse :
1. Le nombre dcimal 432110 est cod en base 16 par :
114116
10E116
1E0116

A
B
C

2. le nombre de bits ncessaire pour coder en binaire le nombre dcimal 3000 est :
13 bits
12 bits

A
B
C

11 bits

3. Lentendu du codage sur 6 bits en binaire sign est compris entre :


0 et 63
-32 et 31
-31 et 31

A
B
C

4. Quelle est la valeur dcimale du nombre 10010110c1 crits en complment 1 :


-105
-104
-103

A
B
C

5. Le plus grand nombre entier quon peut coder (en complment 2) sur 10 bits est :
1023
512
511

A
B
C

II. Codage (4 points)


1. Coder les nombres entiers relatifs du tableau suivant sur 1 octet :
Nombre
Binaire sign
Complment 2
62(10)
-76(10)
M. El Marraki

58

31/03/2013

Algorithmique

SMIA, module M5 E2

2. valuer le nombre rel en format IEEE 754 simple prcision : 1 10000100


00011100000000000000000

Exercice 2 : (4 points) Soit le fragment de programme suivant :

variables u,v : entiers


dbut
crire("donner les valeurs de u et v : ")
lire(u,v)
TantQue (u != v) faire
Si (u > v) alors u u v Sinon v v u finsi
FinTanQue
crire(u)
Fin

1. Donner les valeurs de u et v aprs chaque itration dans le cas suivant :


u
24
v
14
2. Donner les valeurs de u et v aprs chaque itration dans le cas suivant :
u
96
v
81
3. Que fait ce programme ?

Exercice 3 : (4.5 points)


Soit T un tableau qui contient n valeurs relles. Ecrire un programme qui lit lentier n (la taille de
T), le tableau T, ensuite le programme affiche si les lments du tableau T sont tous conscutifs
ou non.
Exemples :
1. Soit le tableau T1 de 8 lments :
9 10 11 12 13 14 15 16
Le programme affiche : les lments du tableau T1 sont conscutifs.
2. Soit le tableau T2 de 6 nombres :
5 10 40 66 99 112
Le programme affiche : les lments du tableau T2 ne sont pas conscutifs.

Exercice 4 : (5 points)
Un nombre parfait est un entier positif suprieur 1, gal la somme de ses diviseurs ; on ne
compte pas comme diviseur le nombre lui-mme.
Exemple : 6 est un nombre parfait puisque : 6 = 3 + 2 + 1.
4.
Donner un nombre parfait diffrent de 6.
5.
Ecrire un programme qui effectue la lecture dun entier n et affiche si n est parfait ou non.

M. El Marraki

59

31/03/2013