You are on page 1of 245

Initiation la programmation

algorithmique

Anne Acadmique 2007-2008

Plan du cours
Introduction linformatique
Architecture dun ordinateur
Dcomposition fonctionnelle
Concepts cls

ENSA Safi

Introduction

Introduction

Quest-ce quun ordinateur ?


Quest-ce quun langage de programmation ?
Que signifie faire de linformatique ?
A quoi sert la programmation ?
Quest-ce que la complexit algorithmique ?

ENSA Safi

Quest-ce quun ordinateur ?


Machine automatique de traitement de linformation
obissant des programmes forms par des suites
doprations arithmtiques et logiques (Larousse 2002)
Diffrents niveaux dapproche : utilisateur, programmeur
machine, concepteur de circuits logiques

ENSA Safi

Des 0 et des 1
Le hardware de lordinateur comprend essentiellement :
diverses mmoires, un processeur, une horloge, des units
dentre/sortie
Lordinateur excute la cadence de son horloge des
instructions (de niveau machine ) contenue en mmoire et
utilisant des donnes contenue dans une autre partie de la
mmoire.
Les donnes et les instructions, sont codes, au plus bas
niveaux en une suite de 0 et de 1.
Ces 0 et ces 1 correspondent des tensions des circuits
lectroniques. Le cadencement est essentiellement fonction
du temps de stabilisation des circuits et de leur chauffement.
ENSA Safi

Codage binaire
Le langage des ordinateurs
Toutes communications l'intrieur de l'ordinateur sont faites
avec des signaux lectriques
0: teint (absence de signal lectrique)
1: allum (prsence de signal lectrique)

ENSA Safi

Un mme nombre peut tre reprsent dans plusieurs bases


123 en base 10 (dcimal)
1111011 en base 2 (binaire)
173 en base 8 (octale)
7B en base 16 (hexadcimale)

ENSA Safi

ENSA Safi

Codage et adressage
On peut exprimer autant avec une suite de 0 et de 1, qu
laide dun alphabet complet (a,b,c,d,e ). Il suffit de
saccorder sur la faon dont on code linformation.
Certains codages peuvent tre plus efficaces que dautres (cf
thorie de Shannon)
Toute donne code se trouve une certaine adresse en
mmoire. Cette adresse en mmoire est elle-mme code
sous forme de 0 et de 1.

ENSA Safi

10

Quest-ce quun langage de programmation ?


Langage cd ensemble de mots (vocabulaire) et syntaxe
(grammaire) stricte (non ambigu) permettant dcrire un
programme
Ensemble de structures de donnes, doprations sur ces
structures & ensemble de structures de contrle :
squencement, branchement conditionnel, itration

ENSA Safi

11

Niveau dun langage


Haut niveau : proche de lhomme, instructions plus complexes,
vocabulaire et syntaxe plus riches

C++, Java
Pascal
C, Fortran
Assembleur
Langage machine

Bas niveau : proche de la machine, instructions lmentaires

ENSA Safi

12

Que signifie faire de linformatique ?


Passer du temps proximit dun ordinateur ?
Il est essentiel de prciser le niveau auquel cet outil complexe
est utilis
Ces niveaux sont relativement indpendants
Le plus souvent :
Utiliser des fonctionnalits offertes par certains logiciels pour
acclrer, rendre plus efficace, le traitement de certains types
de donnes
ENSA Safi

13

A quoi sert la programmation ?


A faire excuter par lordinateur une squence dinstructions
Habituellement , cette squence dinstructions ralise
effectivement un algorithme
Un algorithme est une squence finie dinstructions qui permet
dobtenir la solution dun problme en un temps fini.
La programmation sert rsoudre des catgories de
problmes de faon systmatique

ENSA Safi

14

Mais encore
Tous les problmes nont pas de solutions algorithmiques
La programmation permet dadapter le comportement de
logiciels des catgories spcifiques de problmes. Elle
savre souvent indispensable.
Dans la description de Turing et Von Neumann, lordinateur
est une machine universelle.

ENSA Safi

15

La machine de Turing
tats internes:
Etat0, Etat1, Etat2,
...

Unit de
commande
Ruban= entre,
sortie et
mmoire

Lecture/criture
+

Etat de la
machine
Etat0
Etat0

+ +

Contenu de Ecrit sur le Dplacement


Etat suivant
la cellule
ruban
ruban
vide
D
Etat0
+
D
Etat1

Le Programme

ENSA Safi

16

Complexit algorithmique
Donne une estimation du nombre doprations lmentaires
ncessaires lexcution de lalgorithme, et ce en fonction de
la taille des donnes.
Lestimation ne tient pas compte de la vitesse dexcution.
En gnral la complexit est value dans le pire des cas
(worst case analysis)

ENSA Safi

17

Exemples
Recherche dun mot dans un dictionnaire :
parcours linaire VS parcours dichotomique
Tri dune liste dlments
Problmes NP-complets

ENSA Safi

18

Graphique : complexit algorithmique


linaire
Nbre
dinstructions

logarithmique

Taille des donnes (N)


ENSA Safi

19

Bon ou mauvais programme ?


Aisment lisible donc bien spcifi, bien document
Clair, donc bien structur
Aisment modifiable
Facile tester, dbugger
Robuste (erreurs de lutilisateur)
Correct
Efficace

ENSA Safi

20

Vrai ou faux ?
Lutilisation dun ordinateur permet de raliser un travail plus
efficacement et plus rapidement
Lordinateur fait ce quon lui dit de faire
Le concepteur dun programme connat toujours le rsultat du
programme quil a conu

ENSA Safi

21

Architecture dun ordinateur

Architecture dun ordinateur


La mmoire centrale
Lunit centrale de traitement (Central Processing Unit)
Les units dentre/sorties
Les units priphriques

Illustrations

ENSA Safi

23

Diagramme fonctionnel dune architecture de


Von Neumann

Arithmetic Unit
Control
Unit
Program Memory

Output Interface

Input Interface

Data Memory

Program Interface

Illustration reprise de Tib[2002]


ENSA Safi

24

Ordres de grandeur
K =Kilo

2^10 = 1 024

M= Mga

2^20 =1 048 576

G= Giga

2^30 =1 073 741 824

T=Tra

2^40 =1 099 511 627 776

ENSA Safi

25

La mmoire centrale
Les bits (binary digits) / octets (bytes)
Les cellules mmoire (mots) typiquement 32 ou 64 bits
Registre dadresse et registre de donnes
Lecture et criture

ENSA Safi

26

Schma de principe
Connecteurs donnes

Memoire
centrale

Registre donnes
L/E
Registre adresse

Connecteurs adresse
ENSA Safi

27

Lunit centrale de traitement (CPU)

Les instructions
Les adresses
Unit de contrle / unit arithmtique et logique
Les registres

ENSA Safi

28

Les instructions

Trois informations ncessaires la CPU en contact avec la


mmoire RAM.
1.

Quelle information traiter ?

2.

Quel traitement effectuer ?

3.

O ranger le rsultat ?

Architecture RISC et CISC

ENSA Safi

29

Les adresses
La suite des instructions excuter est elle-mme range en
mmoire.
LA CPU ne communique avec lextrieur que via la mmoire
et naccde aux informations que par leur adresse.

ENSA Safi

30

Unit de contrle et ALU


Les circuits qui ralisent les oprations lmentaires
(additions, multiplications, oprations logique ) sont
regroups dans lALU.
Lunit de contrle met en place les donnes et positionne les
circuits lectroniques pour que lALU excute effectivement
lopration
Oprations unaires : mise zro, complmentation logique,
dcalage, incrmentation
Oprations binaires : ET, OU, XOR
ENSA Safi

31

Circuit additionneur
Additionneur 2 bits

OU
ET

ET

ENSA Safi

32

Les registres
Cellules mmoires trs rapides et ddicaces dans la CPU
Le compteur ordinal contient ladresse de la prochaine instruction
excuter
Le registre dinstruction contient linstruction en cours dexcution
Laccumulateur
Autres registres : gnraux, dindice, de base, dtat (PSW), registre de
pile, registre spcialiss (dcalage, virgule flottante, )

ENSA Safi

33

Ordres de grandeurs (2005)


Processeur 32 - 64 bits
Mmoire RAM = 1 Go
Mmoire dure = 200 Go
Vitesse du processeur = 3 GHz

+ Loi de Moore : cf article du Pour La Science


ENSA Safi

34

Illustrations des composants

Carte mre (mother board)

ENSA Safi

36

CPU

ENSA Safi

37

Carte Graphique

ENSA Safi

38

Carte Son

ENSA Safi

39

Carte rseau

ENSA Safi

40

Les Bus

ENSA Safi

41

Connecteurs dentre/sortie

ENSA Safi

42

Hirarchie mmoire

Dans un ordinateur, le processeur accde aux instructions du programme


excuter ainsi qu'aux donnes ncessaires son excution depuis la mmoire.
ENSA Safi

43

Programmation Procdurale

Bien distinguer !
Spcification d un algorithme :
ce que fait lalgorithme
cahier des charges du problme rsoudre
Expression d un algorithme :
comment il le fait
texte dans un langage de type Pascal / C
Implmentation d un algorithme :
traduction du texte prcdent
dans un langage de programmation rel
ENSA Safi

45

Programmation Procdurale
Notion didentificateur et de type
Notion de fonction
Instructions de contrle du flux dexcution
Comment concevoir un programme ?
Quelques exemples de code
Le traitement des donnes avant tout

ENSA Safi

46

Notion didentificateur et de type


Identificateur : symbole sans signification universelle
permettant de dsigner des objets qui nont pas dexistence en
dehors du programme.
Dclaration : fixe la signification dun identificateur
Porte dun identificateur : bloc dinstructions pour lequel la
dclaration est valable.
Les langages de programmation peuvent tre typs ou non
ENSA Safi

47

Notion de variable
Une variable est un lment de donne dsigne par un identificateur.
Dans un langage typ ,
chaque variable a un type (int, float, boolean, String, )
chaque identificateur a une porte (portion du code dans laquelle
lidentificateur est reconnu; en gnral, le bloc dinstructions dans
lequel la variable est dclare).
Une variable est un endroit de la mmoire laquelle on a donn un nom
de sorte que lon puisse y faire facilement rfrence dans le programme.
Une variable a une valeur, correspondant un certain type. La valeur
dune variable peut changer au cours de lexcution du programme (
do son nom ;-) )
ENSA Safi

48

dclaration et assignation dune variable


Variables i : integer ;
type entier (entier : type prdifini integer : mot cl du langage)
identificateur

i:=4;

ENSA Safi

49

Notion de fonction
Une fonction est un morceau de code qui permet de rsoudre
un sous-problme du problme trait
La dcomposition du code en tches et sous- tches, le rend
plus modulaire. Le programme est plus clair, plus lisible, plus
aisment modifiable
Les fonctions cachent les dtails dimplmentation : il suffit de
savoir ce quelles font et non comment elles le font

ENSA Safi

50

Notion de fonction

ENSA Safi

51

Dclaration dune fonction


Comprend essentiellement trois lments:
1. Le nom de la fonction
2. La liste des types darguments
3. Le type de retour de la fonction

Exemples :

Function exposant ( i , j : integer ) : integer ;

ENSA Safi

52

Corps dune fonction


Function exposant ( i , j : integer ) : integer ;
variablesi2 , a : integer ;
Begin
i2 := 1 ;
For a := 1 To j Do i2 := i2 * i ;
exposant := i2 ;
End ;

ENSA Safi

53

Exemple : un pseudo-code
Programme Principal
// Ce programme permet de lire deux entiers lcran et dafficher ensuite leur
somme

BEGIN
variablesunEntier , unAutreEntier : integer ;
// dclaration de variable entire

unEntier=lisAlEcranUnEntier();
unAutreEntier=lisAlEcranUnEntier();
// utilisation de la fonction lisAlEcranUnEntier()()

ecrisAlEcran(calculeSomme(unEntier,unAutreEntier));
// utilisation des fonctions calculeSomme(int,int) et

ecrisAlEcran(int)

END
ENSA Safi

54

Instructions de Contrle
Branchement conditionnel :
if then else ( si alors aussinon)
switch case
Boucle conditionnelle :
while do ou do while ( fait tant que )
Boucle inconditionnelle
For

ENSA Safi

55

Exemple de code
Function calculeSomme( i , j : integer ) : integer ;
// cette fonction donne la somme de deux entiers, si elle est positive,
// et renvoie 0 aussinon.

begin
EXERCICE
end

ENSA Safi

56

Solution 1
Function calculeSomme ( i , j : integer ) : integer ;
Begin
somme := i+j ;
End ;

ENSA Safi

57

Solution 2
Function somme ( i , j : integer ) : integer ;
Begin
somme := i+j ;
If somme <0 then somme:=0 ;
End ;

ENSA Safi

58

Comment concevoir un programme ?


Identifier prcisment le problme que le programme se doit
de rsoudre
Dcomposer le problme en sous-problme
Dfinir les fonctions correspondantes
crire le programme principal en pseudo-code, en valuant
les critres de qualit.
Implmenter, compiler, excuter sur diffrents cas dutilisation,
dbugger
ENSA Safi

59

Le traitement des donnes avant tout


La conception du programme se fait essentiellement par
abstraction procdurale , dcomposition en sous-problme
Vision trs top-down de la programmation, tendance
cartsienne analytique
Danger du Code spaghetti
Critres de qualit facilement viols : modularit, lisibilit,
robustesse, exactitude

ENSA Safi

60

Premiers algorithmes

Anne Acadmique 2007-2008

Plan :Premiers algorithmes


Les Variables
Instruction daffectation
Les instructions de lecture et dcriture
Les Tests
Les Boucles
Les Tableaux
Procdures et Fonctions
Les Fichiers

algorithmique ?
Encyclopedia Universalis :
Spcification dun schma de calcul sous forme dune suite
finie doprations lmentaires obissant un enchanement
dtermin.
DONNES RSULTATS, ACTIONS
Composition d un nombre fini doprations dont chacune est :
dfinie de faon rigoureuse et non ambigu
effective sur les donnes adquates
(excution en temps fini)
ENSA Safi

63

Pourquoi un cours dalgorithmique ?


Objectif: obtenir de la machine quelle effectue un travail
notre place
Problme: expliquer la machine comment elle doit s'y
prendre
Mais... comment le lui dire ?
Comment le lui apprendre ?
Comment s'assurer qu'elle fait ce travail aussi bien que nous ?
Mieux que nous?

ENSA Safi

64

bon en algorithmique ?
La matrise de lalgorithmique requiert deux qualits, trs complmentaires dailleurs :
il faut avoir une certaine intuition, car aucune recette ne permet de savoir a priori quelles
instructions permettront dobtenir le rsultat voulu. Cest l, si lon y tient, quintervient la
forme dintelligence requise pour lalgorithmique. Alors, cest certain, il y a des gens
qui possdent au dpart davantage cette intuition que les autres. Cependant, et jinsiste
sur ce point, les rflexes, cela sacquiert. Et ce quon appelle lintuition nest finalement
que de lexprience tellement rpte que le raisonnement, au dpart laborieux, finit par
devenir spontan .
il faut tre mthodique et rigoureux. En effet, chaque fois quon crit une srie
dinstructions quon croit justes, il faut systmatiquement se mettre mentalement la
place de la machine qui va les excuter, arm d'un papier et d'un crayon, afin de vrifier
si le rsultat obtenu est bien celui que lon voulait. Cette opration ne requiert pas la
moindre once dintelligence. Mais elle reste nanmoins indispensable, si lon ne veut pas
crire laveuglette.
Et petit petit, force de pratique, vous verrez que vous pourrez faire de plus en plus
souvent lconomie de cette dernire tape : lexprience fera que vous verrez le rsultat
produit par vos instructions, au fur et mesure que vous les crirez. Naturellement, cet
apprentissage est long, et demande des heures de travail patient. Aussi, dans un premier
temps, vitez de sauter les tapes : la vrification mthodique, pas pas, de chacun de vos
algorithmes reprsente plus de la moiti du travail accomplir... et le gage de vos progrs.

ENSA Safi

65

se mettre mentalement la place de la machine qui va


les excuter ?
les ordinateurs, quels quils soient, ne sont fondamentalement
capables de comprendre que quatre catgories d'ordres (en
programmation, on n'emploiera pas le terme d'ordre, mais
plutt celui d'instructions). Ces quatre familles d'instructions
sont :
laffectation de variables
la lecture / criture
les tests
les boucles
Un algorithme informatique se ramne donc toujours au bout
du compte la combinaison de ces quatre petites briques de
base.
ENSA Safi

66

Avec quelles conventions crit-on un algorithme ?


Historiquement, plusieurs types de notations ont reprsent
des algorithmes.
Il y a eu notamment une reprsentation graphique, avec des
carrs, des losanges, etc. quon appelait des organigrammes.
Aujourdhui, cette reprsentation est quasiment abandonne.
Cest pourquoi on utilise gnralement une srie de
conventions appele pseudo-code , qui ressemble un
langage de programmation authentique dont on aurait vacu
la plupart des problmes de syntaxe. Ce pseudo-code est
susceptible de varier lgrement dun livre (ou dun
enseignant) un autre.
ENSA Safi

67

Structure de base dun programme


Dclaration de variables et fonctions
Programme principale
Dbut

..
fin

Variables
La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de lui
coller une etiquette (identificateur).
Ceci se fait tout au dbut de lalgorithme, avant mme les instructions proprement dites.
Cest ce quon appelle la dclaration des variables
Il y a trois type:
Type Numrique
Type alphanumrique
Type boolen
En pseudo-code, une dclaration de variables aura ainsi cette tte :
variables g en entier
identificateur

En informatique, une variable possde un moment donn une valeur et une seule
valeur
Dans un programme une variable a un identificateur unique
un identificateur est un mot : - commenant obligatoirement par une lettre
- ne comportant aucun espace
ENSA Safi

69

Type variable
Type Numrique
Type caractre
Type chane
Type boolen

ENSA Safi

70

Type variable numrique


Tous les langages, quels quils soient offrent un bouquet de types
numriques, dont le dtail est susceptible de varier lgrement dun
langage lautre. On retrouve cependant les types suivants :
type
entier
rel

ensemble
nom_typ caractres
e
autoriss
de valeurs
ent
09
[-32768..+32767]
entier
rel
0 9, .

ENSA Safi

exemples
de valeurs
-152
+4560 ou 4560
-12.3652
+0.186 ou 0.186

71

Instruction daffectation
Cette seule chose quon puisse faire avec une variable, cest
laffecter, cest--dire lui attribuer une valeur
En pseudo-code, l'instruction d'affectation se note avec le
signe

ENSA Safi

72

Expressions et oprateurs
Oprateurs numriques :
+ : addition
- : soustraction
* : multiplication
/ : division
Parenthses * et / + et
12 * 3 + 5 et (12 * 3) + 5 valent strictement la mme chose.
En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96
Oprateur alphanumrique : & concatner
Oprateurs logiques (ou boolens) ET, du OU, du NON

ENSA Safi

73

Instruction daffectation
A la rigueur, elle peut ne pas avoir de valeur du tout (une fois quelle a t
dclare, et tant quon ne la pas affecte. A signaler que dans certains langages,
les variables non encore affectes sont considres comme valant
automatiquement zro). Mais ce qui est important, cest que cette valeur justement,
ne varie pas proprement parler. Du moins ne varie-t-elle que lorsquelle est
lobjet dune instruction daffectation.
La deuxime remarque concerne le signe de laffectation. En algorithmique, comme
on la vu, cest le signe . Mais en pratique, la quasi totalit des langages
emploient le signe gal. Et l, pour les dbutants, la confusion avec les maths est
galement facile. En maths, A = B et B = A sont deux propositions strictement
quivalentes. En informatique, absolument pas, puisque cela revient crire A B
et B A, deux choses bien diffrentes. De mme, A = A + 1, qui en
mathmatiques, constitue une quation sans solution, reprsente en
programmation une action tout fait licite (et de surcrot extrmement courante).
Donc, attention ! ! ! La meilleure des vaccinations contre cette confusion consiste
bien employer le signe en pseudo-code, signe qui a le mrite de ne pas laisser
place lambigut. Une fois acquis les bons rflexes avec ce signe, vous naurez
plus aucune difficult passer au = des langages de programmation.
ENSA Safi

74

Exercice 1
Quelles seront les valeurs des variables A et B aprs excution
des instructions suivantes ?
variables A, B : Entiers
Dbut
A1
BA+3
A3
Fin

ENSA Safi

75

Solution
Aprs
La valeur des variables est :
A1
A=1
B=?
BA+3 A=1
B=4
A3
A=3
B=4

ENSA Safi

76

Exercice 2
Quelles seront les valeurs des variables A, B et C aprs
excution des instructions suivantes ?
Variables A, B, C : Entier
Dbut
A5
B3
CA+B
A2
CBA
Fin

ENSA Safi

77

Solution
Aprs
A5
B3
CA+B
A2
CBA

La valeur des variables est :


A=5
B=?
C=?
A=5
B=3
C=?
A=5
B=3
C=8
A=2
B=3
C=8
A=2
B=3
C=1

ENSA Safi

78

Exercice 3
Quelles seront les valeurs des variables A et B aprs
excution des instructions suivantes ?
Variables A, B : Entier
Dbut
A5
BA+4
AA+1
BA4
Fin

ENSA Safi

79

Solution
Aprs
La valeur des variables est :
A5
A=5
B=?
BA+4 A=5
B=9
AA+1 A=6
B=9
BA4 A=6
B=2

ENSA Safi

80

Exercice 4
Quelles seront les valeurs des variables A, B et C aprs
excution des instructions suivantes ?
Variables A, B, C :Entier
Dbut
A3
B 10
CA+B
BA+B
AC
Fin

ENSA Safi

81

Solution
Aprs
A3
B 10
CA+B
BA+B
AC

La valeur des variables est :


A=3
B=?
C=?
A=3
B = 10
C=?
A=3
B = 10
C = 13
A=3
B = 13
C = 13
A = 13
B = 13
C = 13

ENSA Safi

82

Exercice 5
Quelles seront les valeurs des variables A, B et C aprs
excution des instructions suivantes ?
variablesA, B, C :Entier
Dbut
A3
B 10
CA+B
BA+B
AC
Fin

ENSA Safi

83

Solution
Aprs
A5
B2
AB
BA

La valeur des variables est :


A=5
B=?
A=5
B=2
A=2
B=2
A=2
B=2

Les deux dernires instructions ne permettent donc pas


dchanger les deux valeurs de B et A, puisque lune des deux
valeurs (celle de A) est ici crase.
Si lon inverse les deux dernires instructions, cela ne
changera rien du tout, hormis le fait que cette fois cest la
valeur de B qui sera crase.

ENSA Safi

84

Exercice 6
Plus difficile, mais cest un classique absolu, quil faut
absolument matriser : crire un algorithme permettant
dchanger les valeurs de deux variables A et B, et ce quel
que soit leur contenu pralable.

ENSA Safi

85

Solution
Dbut

CA
AB
BC
Fin
On est oblig de passer par une variable dite temporaire (la
variable C).

ENSA Safi

86

Exercice 7
Une variante du prcdent : on dispose de trois variables A, B
et C. crivez un algorithme transfrant B la valeur de A, C
la valeur de B et A la valeur de C (toujours quels que soient
les contenus pralables de ces variables).

ENSA Safi

87

Solution
Dbut

DC
CB
BA
AD
Fin
En fait, quel que soit le nombre de variables, une seule
variable temporaire suffit

ENSA Safi

88

Exercice 8
Que produit lalgorithme suivant ?
Variables A, B, C : Caractre
Dbut
A "423"
B "12"
CA+B
Fin

ENSA Safi

89

Solution
Il ne peut produire quune erreur dexcution, puisquon ne
peut pas additionner des caractres.

ENSA Safi

90

Exercice 9
Que produit lalgorithme suivant ?
Variables A, B, C :Caractre
Dbut
A "423"
B "12"
CA&B
Fin

ENSA Safi

91

Solution
En revanche, on peut les concatner. A la fin de
lalgorithme, C vaudra donc "42312".

ENSA Safi

92

Les instructions de lecture et dcriture


(I/O standard: clavier/ecran)
Dans un sens, ces instructions permettent lutilisateur de
rentrer des valeurs au clavier pour quelles soient utilises par
le programme. Cette opration est la lecture.
Dans lautre sens, dautres instructions permettent au
programme de communiquer des valeurs lutilisateur en les
affichant lcran. Cette opration est lcriture.

ENSA Safi

93

Les instructions de lecture et dcriture: Syntaxe


lire_clavier Titi ou Lire Titi
Ds que le programme rencontre une instruction Lire,
lexcution sinterrompt, attendant la frappe dune valeur au
clavier. Ds lors, aussitt que la touche Entre (Enter) a t
frappe, lexcution reprend
ecrire_ecran Toto ou Ecrire Toto
Dans le sens inverse, pour crire quelque chose lcran.
Important:
Avant de lire_clavier une variable, il est trs fortement
conseill dcrire des libells lcran, afin de prvenir
lutilisateur de ce quil doit frapper
ENSA Safi

94

Exercice 1
Quel rsultat produit le programme suivant ?
Variables v, double: entier
Dbut
V 231
Double V * 2
ecrire_ecran V
ecrire_ecran Double
Fin

ENSA Safi

95

Solution
On verra apparatre lcran 231, puis 462 (qui vaut 231 * 2)

ENSA Safi

96

Exercice 2
Ecrire un programme qui demande un nombre
lutilisateur, puis qui calcule et affiche le carr de ce
nombre.

ENSA Safi

97

Solution
variables nb, carr : Entier
Dbut
ecrire_ecran "Entrez un nombre :"
lire_clavier nb
carr nb * nb
ecrire_ecran "Son carr est : ", carr
Fin
En fait, on pourrait tout aussi bien conomiser la variable carr en
remplaant les deux avant-dernires lignes par :
ecrire_ecran "Son carr est : ", nb*nb
C'est une question de style ; dans un cas, on privilgie la lisibilit de
l'algorithme, dans l'autre, on privilgie l'conomie d'une variable.

ENSA Safi

98

Exercice 3
Ecrire un programme qui lit le prix HT dun article, le
nombre darticles et le taux de TVA, et qui fournit le prix
total TTC correspondant. Faire en sorte que des libells
apparaissent clairement.

ENSA Safi

99

Solution
variables nb, pht, ttva, pttc : entier
Dbut
ecrire_ecran "Entrez le prix hors taxes :"
lire_clavier pht
ecrire_ecran "Entrez le nombre darticles :"
lire_clavier nb
ecrire_ecran "Entrez le taux de TVA ( %):"
lire_clavier ttva
pttc nb * pht * (1 + (ttva/100))
ecrire_ecran "Le prix toutes taxes est : ", pttc
Fin
L aussi, on pourrait squeezer une variable et une ligne en crivant
directement. :
ecrire_ecran "Le prix toutes taxes est : ", nb * pht * (1 + ttva)
C'est plus rapide, plus lger en mmoire, mais un peu plus difficile relire
(et crire !)

ENSA Safi

100

Les Tests
Si boolen Alors
Instructions
Finsi
Si boolen Alors
Instructions 1
Sinon
Instructions 2
Finsi
Si boolen1 Alors
Instructions 1
Sinon si boolen2 Alors
Instructions 2
Instructions 3
Sinon
Instructions 4
Finsi
ENSA Safi

101

Les Tests

Boolen est une condition :


gal =
diffrent de !=
strictement plus petit que <
strictement plus grand que >
plus petit ou gal <=
plus grand ou gal >=
Conditions composes oprateur logique ET, OU, NON, et
XOR
ENSA Safi

102

Exercice 1
crire un algorithme qui demande un nombre lutilisateur, et
linforme ensuite si ce nombre est positif ou ngatif (on laisse
de ct le cas o le nombre vaut zro).

ENSA Safi

103

Solution
variables n : Entier
Dbut
ecrire_ecran "Entrez un nombre : "
lire_clavier n
Si n > 0 Alors
ecrire_ecran "Ce nombre est positif "
Sinon
ecrire_ecran "Ce nombre est ngatif"
Finsi
Fin

ENSA Safi

104

Exercice 2
Ecrire un algorithme qui demande deux nombres lutilisateur
et linforme ensuite si leur produit est ngatif ou positif (on
laisse de ct le cas o le produit est nul). Attention toutefois :
on ne doit pas calculer le produit des deux nombres.

ENSA Safi

105

Solution
variables m, n : Entier
Dbut
ecrire_ecran "Entrez deux nombres diff de 0"
lire_clavier m, n
Si ((m > 0 ET n > 0) OU (m < 0 ET n < 0)) Alors
ecrire_ecran "Leur produit est positif"
Sinon
ecrire_ecran "Leur produit est ngatif"
Finsi
Fin

ENSA Safi

106

Exercice 3
Ecrire un algorithme qui demande trois noms lutilisateur et
linforme ensuite sils sont rangs ou non dans lordre
alphabtique.

ENSA Safi

107

Solution
variables a, b, c : Caractre
Dbut
ecrire_ecran "Entrez successivement trois noms : "
lire_clavier a, b, c
Si ((a < b) ET (b < c)) Alors
ecrire_ecran "Ces noms sont classs
alphabtiquement"
Sinon
ecrire_ecran "Ces noms ne sont pas classs"
Finsi
Fin

ENSA Safi

108

Exercice 4
Ecrire un algorithme qui demande un nombre lutilisateur, et
linforme ensuite si ce nombre est positif ou ngatif (on inclut
cette fois le traitement du cas o le nombre vaut zro).

ENSA Safi

109

Solution
variables n : Entier
Dbut
ecrire_ecran "Entrez un nombre : "
lire_clavier n
Si n < 0 Alors
ecrire_ecran "Ce nombre est ngatif"
Sinon si n = 0 Alors
ecrire_ecran "Ce nombre est nul"
Sinon
ecrire_ecran "Ce nombre est positif"
Finsi
Fin
ENSA Safi

110

Exercice 5
Ecrire un algorithme qui demande deux nombres lutilisateur
et linforme ensuite si le produit est ngatif ou positif (on inclut
cette fois le traitement du cas o le produit peut tre nul).
Attention toutefois, on ne doit pas calculer le produit !

ENSA Safi

111

Solution
variables m, n : Entier
Dbut
ecrire_ecran "Entrez deux nombres : "
lire_clavier m, n
Si m = 0 OU n = 0 Alors
ecrire_ecran "Le produit est nul"
Sinon si (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors
ecrire_ecran "Le produit est positif"
Sinon
ecrire_ecran "Le produit est ngatif"
Finsi
Fin
Si on souhaite simplifier lcriture de la condition lourde du SinonSi,
on peut toujours passer par des variables boolennes intermdiaires.
Une astuce de sioux consiste galement employer un Xor (c'est l'un
des rares cas dans lesquels il est pertinent)
ENSA Safi

112

Exercice 5
Ecrire un algorithme qui demande lge dun enfant
lutilisateur. Ensuite, il linforme de sa catgorie :
"Poussin" de 6 7 ans
"Pupille" de 8 9 ans
"Minime" de 10 11 ans
"Cadet" aprs 12 ans
Peut-on concevoir plusieurs algorithmes quivalents menant
ce rsultat ?

ENSA Safi

113

Solution
variables age : Entier
Dbut
ecrire_ecran "Entrez lge de lenfant : "
lire_clavier age
Si age >= 12 Alors
ecrire_ecran "Catgorie Cadet"
Sinon si age >= 10 Alors
ecrire_ecran "Catgorie Minime"
Sinon si age >= 8 Alors
ecrire_ecran "Catgorie Pupille"
Sinon si age >= 6 Alors
ecrire_ecran "Catgorie Poussin"
Finsi
Fin
On peut videmment crire cet algorithme de diffrentes faons, ne seraitce quen commenant par la catgorie la plus jeune.
ENSA Safi

114

Linstruction selon
exemple
selon abrviation
cas "M" :
ecrire_ecran " Monsieur "
cas "Mme" :
ecrire_ecran " Madame "
cas "Mlle" :
ecrire_ecran " Mademoiselle "
Autres :

Comparer:
si abrviation = "M alors
ecrire_ecran "Monsieur"
sinon si abrviation = "Mme alors
ecrire_ecran "Madame"
sinon si abrviation = "Mlle" alors
ecrire_ecran "Mademoiselle"
sinon
ecrire_ecran "Monsieur,Madame "

ecrire_ecran " Monsieur, Madame finsi


"
finselon

ENSA Safi

115

Exercice 6
Ecrire un algorithme qui demande loperation et 2 numero
lutilisateur. Ensuite, il affiche le resultat :
Peut-on concevoir plusieurs algorithmes quivalents menant
ce rsultat ?

ENSA Safi

116

Solution
variables nbr1,nbr2: Entier
o:charactere

Dbut
ecrire_ecran "Entrez 1er nbr et nbr2"
lire_clavier nbr1, nbr2

On peut videmment crire cet algorithme de


diffrentes faons, ne serait-ce quen
commenant par la catgorie la plus jeune.

ecrire_ecran "Entrez operation"


lire_clavier o
selon o
cas "+" :
res <-- nbr1 + nbr2
cas "-" :
res <-- nbr1 + nbr2
cas "*" :
res <-- nbr1 * nbr2
autres :
res <-- nbr1 / nbr2
fin_selon
ecrire_ecran res
Fin

ENSA Safi

117

Conditions composes
Si A ET B Alors
Instructions 1
Sinon
Instructions 2
Finsi
quivaut :
Si NON A OU NON B Alors
Instructions 2
Sinon
Instructions 1
Finsi
ENSA Safi

118

Exercice 1
Formulez un algorithme quivalent lalgorithme suivant :
Si Tutu > Toto + 4 OU Tata = "OK" Alors
Tutu Tutu + 1
Sinon
Tutu Tutu 1
Finsi

ENSA Safi

119

Solution
Aucune difficult, il suffit dappliquer la rgle de la
transformation du OU en ET vue en cours (loi de Morgan).
Attention toutefois la rigueur dans la transformation des
conditions en leur contraire...
Si Tutu <= Toto + 4 ET Tata <> "OK" Alors
Tutu Tutu - 1
Sinon
Tutu Tutu + 1
Finsi

ENSA Safi

120

Exercice 2
Cet algorithme est destin prdire l'avenir, et il doit tre
infaillible !
Il lira au clavier lheure et les minutes, et il affichera lheure
quil sera une minute plus tard. Par exemple, si l'utilisateur
tape 21 puis 32, l'algorithme doit rpondre :
"Dans une minute, il sera 21 heure(s) 33".
NB : on suppose que l'utilisateur entre une heure valide. Pas
besoin donc de la vrifier.

ENSA Safi

121

Solution
variables h, m : entier
Dbut
ecrire_ecran "Entrez les heures, puis les minutes : "
lire_clavier h, m
mm+1
Si m = 60 Alors
m0
hh+1
FinSi
Si h = 24 Alors
h0
FinSi
ecrire_ecran "Dans une minute il sera ", h, "heure(s) ", m, "minute(s)"
Fin

ENSA Safi

122

Exercice 3
De mme que le prcdent, cet algorithme doit demander une
heure et en afficher une autre. Mais cette fois, il doit grer
galement les secondes, et afficher l'heure qu'il sera une
seconde plus tard.
Par exemple, si l'utilisateur tape 21, puis 32, puis 8,
l'algorithme doit rpondre : "Dans une seconde, il sera 21
heure(s), 32 minute(s) et 9 seconde(s)".
NB : l encore, on suppose que l'utilisateur entre une date
valide.

ENSA Safi

123

Solution
variables h, m, s : entier
Dbut
ecrire_ecran "Entrez les heures, puis les minutes, puis les
secondes : "
lire_clavier h, m, s
ss+1
Si s = 60 Alors
s0
mm+1
FinSi
Si m = 60 Alors
m0
hh+1
FinSi
Si h = 24 Alors
h0
FinSi
ecrire_ecran "Dans une seconde il sera ", h, "h", m, "m et ", s, "s"
Fin
ENSA Safi

124

Exercice 4
Un magasin de reprographie facture 0,10 E les dix premires
photocopies, 0,09 E les vingt suivantes et 0,08 E au-del.
Ecrivez un algorithme qui demande lutilisateur le nombre de
photocopies effectues et qui affiche la facture
correspondante.

ENSA Safi

125

Solution
variables n : entier

p : reel
Dbut
ecrire_ecran "Nombre de photocopies : "
lire_clavier n
Si n <= 10 Alors
p n * 0,1
Sinon si n <= 30 Alors
p 10 * 0,1 + (n 10) * 0,09
Sinon
p 10 * 0,1 + 20 * 0,09 + (n 30) * 0,08
FinSi
ecrire_ecran "Le prix total est: ", p
Fin
ENSA Safi

126

Exercice 5
Les habitants de Zorglub paient limpt selon les rgles
suivantes :
les hommes de plus de 20 ans paient limpt
les femmes paient limpt si elles ont entre 18 et 35 ans
les autres ne paient pas dimpt
Le programme demandera donc lge et le sexe du
Zorglubien, et se prononcera donc ensuite sur le fait que
lhabitant est imposable.

ENSA Safi

127

Solution
variables sex : Caractre
age : entier
C1, C2 : Boolen
Dbut
ecrire_ecran "Entrez le sexe (M/F) : "
lire_clavier sex
ecrire_ecran "Entrez lge: "
lire_clavier age
C1 sex = "M" ET age > 20
C2 sex = "F" ET (age > 18 ET age < 35)
Si C1 ou C2 Alors
ecrire_ecran "Imposable"
Sinon
ecrire_ecran "Non Imposable"
FinSi
Fin
ENSA Safi

128

Exercice 6
Une compagnie d'assurance automobile propose ses clients quatre familles de tarifs
identifiables par une couleur, du moins au plus onreux : tarifs bleu, vert, orange et rouge. Le
tarif dpend de la situation du conducteur :
un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit
attribuer le tarif rouge, si toutefois il n'a jamais t responsable d'accident. Sinon, la
compagnie refuse de l'assurer.
un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plus
de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a
jamais provoqu d'accident, au tarif rouge pour un accident, sinon il est refus.
un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bnficie du tarif
vert s'il n'est l'origine d'aucun accident et du tarif orange pour un accident, du tarif rouge
pour deux accidents, et refus au-del
De plus, pour encourager la fidlit des clients accepts, la compagnie propose un contrat de
la couleur immdiatement la plus avantageuse s'il est entr dans la maison depuis plus d'un
an.
Ecrire l'algorithme permettant de saisir les donnes ncessaires (sans contrle de saisie) et
de traiter ce problme. Avant de se lancer corps perdu dans cet exercice, on pourra
rflchir un peu et s'apercevoir qu'il est plus simple qu'il n'en a l'air (cela s'appelle faire une
analyse !)

ENSA Safi

129

variables Age,Dperm, NbrACC, Niv : entier

Sinon si C3 ET NbrACC=1 Alors

AncCI C1,C2,C3 : Booleen

Niv3

DEBUT

Sinon si C3 ET NbrACC=2 Alors

ecrire_ecran " votre age, Durer permi, NbrACC,AncCI

lire_clavier Age,Dperm,NbrACC, AncCl

C1 age<25 ET Dperm<2

C2 (age <25 ET Dperm>2) OU (age >25 ET


Dperm<2)

C3 age >25 ET Dperm>2

Si C1 ET NbrACC!=0 Alors

Niv4
Sinon si C3 ET NbrACC>2 alors
Niv5
finsi
si AncCl Alors
NivNiv-1
finsi
si NIV=<1Alors

Niv5

ecrire_ecran " bleu

Sinon si C1 ET NbrACC=0 alors


Niv 4

si NIV =2 Alors
ecrire_ecran " vert

Finsi

si NIV =3 Alors

si C2 ET NbrACC=0 Alors

ecrire_ecran " Orange

Niv3

si NIV =4 Alors

Sinon si C2 ET NbrACC=1 Alors

ecrire_ecran " rouge

Niv4

Sinon

Sinon si C2 ET NbrACC>1 alors

ecrire_ecran " reffuser

Niv5

finsi

finsi
si C3 ET NbrACC=0 Alors
Niv2

FIN

Solution 2
Vous trouvez cela compliqu ? Oh, certes oui, a l'est ! Et d'autant plus qu'en lisant entre les lignes,
on pouvait s'apercevoir que ce galimatias de tarifs recouvre en fait une logique trs simple : un
systme points. Et il suffit de comptabiliser les points pour que tout s'claire... Reprenons juste
aprs l'affectation des trois variables boolennes C1, C2, et C3. On crit :
P0
Si Non(C1) Alors
PP+1
FinSi
Si Non(C2) Alors
PP+1
FinSi
P P + acc
Si P < 3 et C3 Alors
PP-1
FinSi
Si P = -1 Alors
situ "Bleu"
Sinon si P = 0 Alors
situ "Vert"
Sinon si P = 1 Alors
situ "Orange"
Sinon si P = 2 Alors
situ "Rouge"
Sinon
situ "Refus"
FinSi
ecrire_ecran "Votre situation : ", situ
Fin
ENSA Safi

131

Exercice 7
Les lections lgislatives, en Guignolerie Septentrionale, obissent la
rgle suivante :
lorsque l'un des candidats obtient plus de 50% des suffrages, il est lu ds
le premier tour.
en cas de deuxime tour, peuvent participer uniquement les candidats
ayant obtenu au moins 12,5% des voix au premier tour.
Vous devez crire un algorithme qui permette la saisie des scores de
quatre candidats au premier tour. Cet algorithme traitera ensuite le
candidat numro 1 (et uniquement lui) : il dira s'il est lu, battu, s'il se
trouve en ballottage favorable (il participe au second tour en tant arriv en
tte l'issue du premier tour) ou dfavorable (il participe au second tour
sans avoir t en tte au premier tour).

ENSA Safi

132

Solution
Cet exercice, du pur point de vue algorithmique, n'est pas trs mchant. En revanche, il reprsente
dignement la catgorie des noncs pigs.
En effet, rien de plus facile que d'crire : si le candidat a plus de 50%, il est lu, sinon s'il a plus de
12,5 %, il est au deuxime tour, sinon il est limin. H h h... mais il ne faut pas oublier que le
candidat peut trs bien avoir eu 20 % mais tre tout de mme limin, tout simplement parce que
l'un des autres a fait plus de 50 % et donc qu'il n'y a pas de deuxime tour !...
Moralit : ne jamais se jeter sur la programmation avant d'avoir soigneusement men l'analyse du
problme traiter.
variables A, B, C, D : entier

C1,C2,C3,C4 : Boolen
Dbut
ecrire_ecran "Entrez les scores des quatre prtendants :"
lire_clavier A, B, C, D
C1 A > 50
C2 B > 50 ou C > 50 ou D > 50
C3 A >= B et A >= C et A >= D
C4 A >= 12,5
Si C1 Alors
ecrire_ecran "Elu au premier tour"
Sinon si C2 ou Non(C4) Alors
ecrire_ecran "Battu, limin, sorti !!!
Sinon si C3 Alors
ecrire_ecran "Ballotage favorable"
Sinon
ecrire_ecran "Ballotage dfavorable"
FinSi
Fin

ENSA Safi

133

Les Boucles
TantQue boolen(vrai) faire

Instructions

FinTantQue
Pour Compteur := Initial Final par ValeurDuPas

Instructions

finpour
Ou
Pour Compteur Initial Final par ValeurDuPas

Instructions

Compteur suivant
ENSA Safi

134

Les Boucles

Choisir pour... Choisir tant que...


si le nombre ditrations est connu lavance,
choisir la boucle pour
si la boucle doit s'arrter quand survient un vnement ,
choisir la boucle tant que

ENSA Safi

135

Les Boucles
A ne pas faire
1- Des boucles peuvent donc tre imbriques ou successives Cependant, elles
ne peuvent jamais, au grand jamais, tre croises. Cela naurait aucun sens
logique, et de plus, bien peu de langages vous autoriseraient ne serait-ce
qu crire cette structure aberrante.

variables Truc, Trac : Entier


Pour Truc :=
instructions
Pour Trac :=
instructions
finpour (Truc Suivant)
instructions
finpour (Trac Suivant)

Truc=2,6,14,30,62,126,254,510,,
1022,2046,4094,8190,16382,
32766,-2,-2,-2,,,,,,,,,,,,

2- Vrification de condition d'arrt


variables Truc : Entier
Dbut
Pour Truc :=1 15 faire
Truc Truc * 2
ecrire_ecran "Passage numro : ", Truc
finpour
Fin
ENSA Safi

136

Les Boucles
La boucle tant que faire
amorage {initialisation de la (des) variable(s) de condition}
tant que<expression logique (vraie)> faire
traitement {suite dinstructions}
relance {r-affectation de la (des) variable(s) de condition}
FinTantQue
Fonction:-rpter une suite dinstructions tant quune condition
est remplie
remarque:
si la condition est fausse ds le dpart, le traitement nest
jamais excut
si vous oubliez la r-affectation de la (des) variable(s) de
condition la condition, le traitement ne sarrtera jamais .
ENSA Safi

137

Exercice 1
Ecrire un algorithme qui demande lutilisateur un nombre
compris entre 1 et 3 jusqu ce que la rponse convienne.

ENSA Safi

138

Solution
variables N : Entier
Debut
N0
ecrire_ecran "Entrez un nombre entre 1 et 3"
TantQue N < 1 ou N > 3 faire
lire_clavier N
Si N < 1 ou N > 3 Alors
ecrire_ecran "Saisie errone. Recommencez
FinSi
FinTantQue
Fin

ENSA Safi

139

Exercice 2
Ecrire un algorithme qui demande un nombre compris entre
10 et 20, jusqu ce que la rponse convienne. En cas de
rponse suprieure 20, on fera apparatre un message :
Plus petit ! , et inversement, Plus grand ! si le nombre
est infrieur 10.

ENSA Safi

140

Solution
variables N : Entier
Debut
N0
ecrire_ecran "Entrez un nombre entre 10 et 20"
TantQue N < 10 ou N > 20 faire
lire_clavier N
Si N < 10 Alors
ecrire_ecran "Plus grand !"
Sinon si N > 20 Alors
ecrire_ecran "Plus petit !"
FinSi
FinTantQue
Fin
ENSA Safi

141

Les Boucles
Smantique de la boucle pour
Implicitement,
linstruction pour:
-initialise une variable de boucle (le compteur)
-incrmente cette variable chaque pas
-vrifie que cette variable ne dpasse pas la borne
suprieure
Attention : -le traitement ne doit pas modifier le compteur de
boucle

ENSA Safi

142

Exercice 3
Ecrire un algorithme qui demande un nombre de dpart, et qui
ensuite affiche les dix nombres suivants. Par exemple, si
l'utilisateur entre le nombre 17, le programme affichera les
nombres de 18 27.

ENSA Safi

143

Solution
variables N, i : Entier
Debut
ecrire_ecran "Entrez un nombre : "
lire_clavier N
ecrire_ecran "Les 10 nombres suivants sont : "
Pour i := N + 1 N + 10
ecrire_ecran i
finpour
Fin

ENSA Safi

144

Exercice 4
Ecrire un algorithme qui demande un nombre de dpart, et qui
ensuite crit la table de multiplication de ce nombre, prsente
comme suit (cas o l'utilisateur entre le nombre 7) :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21

7 x 10 = 70

ENSA Safi

145

Solution
variables N, i : Entier
Debut
ecrire_ecran "Entrez un nombre : "
lire_clavier N
ecrire_ecran "La table de multiplication de ce nombre
est : "
Pour i := 1 10
ecrire_ecran N, " x ", i, " = ", n*i
finpour
Fin

ENSA Safi

146

Exercice 5
Ecrire un algorithme qui demande un nombre de dpart, et qui
calcule la somme des entiers jusqu ce nombre. Par
exemple, si lon entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
NB : on souhaite afficher uniquement le rsultat, pas la
dcomposition du calcul.

ENSA Safi

147

Solution
variables N, i, Som : Entier
Debut
ecrire_ecran "Entrez un nombre : "
lire_clavier N
Som 0
Pour i := 1 N
Som Som + i
finpour
ecrire_ecran "La somme est : ", Som
Fin

ENSA Safi

148

Exercice 6
Ecrire un algorithme qui demande un nombre de dpart, et qui
calcule sa factorielle.
NB : la factorielle de 8, note 8 !, vaut
1 x 2 x 3 x 4 x 5 x 6 x 7 x 8

ENSA Safi

149

Solution
variables N, i, F : Entier
Debut
ecrire_ecran "Entrez un nombre : "
lire_clavier N
F1
Pour i := 2 N
FF*i
finpour
ecrire_ecran "La factorielle est : ", F
Fin

ENSA Safi

150

Exercice 7
Ecrire un algorithme qui demande successivement 20
nombres lutilisateur, et qui lui dise ensuite quel tait le plus
grand parmi ces 20 nombres :
Entrez le nombre numro 1 : 12
Entrez le nombre numro 2 : 14
etc.
Entrez le nombre numro 20 : 6
Le plus grand de ces nombres est : 14
Modifiez ensuite lalgorithme pour que le programme affiche
de surcrot en quelle position avait t saisie ce nombre :
Ctait le nombre numro 2
ENSA Safi

151

Solution
variables N, i, PG : Entier
Debut
PG 0
Pour i := 1 20
ecrire_ecran "Entrez un nombre : "
lire_clavier N
Si i = 1 ou N > PG Alors
PG N
FinSi
finpour
ecrire_ecran "Le nombre le plus grand
tait : ", PG
Fin

En ligne 3, on peut mettre nimporte quoi


dans PG, il suffit que cette variable soit
affecte pour que le premier passage en
ligne 7 ne provoque pas d'erreur.
Pour la version amliore, cela donne :
variables N, i, PG, IPG : Entier
Debut
PG -32768
Pour i := 1 20
ecrire_ecran "Entrez un nombre : "
lire_clavier N
Si i = 1 ou N > PG Alors
PG N
IPG i
FinSi
finpour
ecrire_ecran "Le nbre le plus grand
tait : ", PG
ecrire_ecran "Il a t saisi en position ",
IPG
Fin

ENSA Safi

152

Exercice 8
Rcrire lalgorithme prcdent, mais cette fois-ci on ne
connat pas davance combien lutilisateur souhaite saisir de
nombres. La saisie des nombres sarrte lorsque lutilisateur
entre un zro.

ENSA Safi

153

Solution
variables N, i, PG, IPG : Entier
Debut
N1
i0
PG -32766
TantQue N <> 0
ecrire_ecran "Entrez un nombre : "
lire_clavier N
ii+1
Si i = 1 ou N > PG Alors
PG N
IPG i
FinSi
FinTantQue
ecrire_ecran "Le nombre le plus grand tait : ", PG
ecrire_ecran "Il a t saisi en position numro ", IPG
Fin

ENSA Safi

154

Exercice 9
lire la suite des prix (en euros entiers et termine par zro)
des achats dun client. Calculer la somme quil doit, lire la
somme quil paye, et simuler la remise de la monnaie en
affichant les textes "10 Euros", "5 Euros" et "1 Euro" autant de
fois quil y a de coupures de chaque sorte rendre.

ENSA Safi

155

Solution
variables somdue, M,PE, res, Nb10PE,
Nb5PE : Entier

TantQue res >= 10


Nb10PE<-- Nb10PE + 1

Debut

res <-- res - 10

PE<-- 1

FinTantQue

somdue <-- 0

Nb5PE<-- 0

TantQue PE<> 0

Si res >= 5

ecrire_ecran "Entrez le montant : "

Nb5PE<-- Nb5PE + 1

lire_clavier PE

res <-- res - 5

somdue <-- somdue + PE

FinSi

FinTantQue

ecrire_ecran "Rendu de la
ecrire_ecran "Vous devez :", somdue , monnaie :"
" euros"
ecrire_ecran "Billets de 10 E : ",
ecrire_ecran "Montant vers :"

Nb10PE

lire_clavier M

ecrire_ecran "Billets de 5 E : ",


Nb5PE

res <-- M - somdue


Nb10PE<-- 0

ENSA Safi

Fin

ecrire_ecran "Pices de 1 E : ", 156


res

Exercice 10
crire un algorithme qui permette de connatre ses chances de gagner au
tierc, quart, quint et autres impts volontaires.
On demande lutilisateur le nombre de chevaux partants, et le nombre de
chevaux jous. Les deux messages affichs devront tre :
Dans lordre : une chance sur X de gagner
Dans le dsordre : une chance sur Y de gagner
X et Y nous sont donns par la formule suivante, si n est le nombre de
chevaux partants et p le nombre de chevaux jous (on rappelle que le
signe ! signifie "factorielle", comme dans l'exercice 5.6 ci-dessus) :
X = n ! / (n - p) !
Y = n ! / (p ! * (n p) !)
NB : cet algorithme peut tre crit dune manire simple, mais relativement
peu performante. Ses performances peuvent tre singulirement
augmentes par une petite astuce. Vous commencerez par crire la
manire la plus simple, puis vous identifierez le problme, et crirez une
deuxime version permettant de le rsoudre..
ENSA Safi

157

Solution

Spontanment, on est tent d'crire l'algorithme suivant :


variables N, P, i, Num, Dno1, Dno2 : Entier
Debut ecrire_ecran "Entrez le nombre de chevaux partants : "
lire_clavier N
ecrire_ecran "Entrez le nombre de chevaux jous : "
lire_clavier P
Num 1
Pour i := 2 N
Num Num * i
finpour
Dno1 1
Pour i := 2 N-P
Dno1 Dno1 * i
finpour
Dno2 1
Pour i := 2 P
Dno2 Dno2 * i
finpour
ecrire_ecran "Dans lordre, une chance sur ", Num / Dno1
ecrire_ecran "Dans le dsordre, une sur ", Num / (Dno1 *
Dno2)
Fin

Cette version, formellement juste, comporte tout de mme deux


faiblesses.
La premire, et la plus grave, concerne la manire dont elle
calcule le rsultat final. Celui-ci est le quotient d'un nombre par
un autre ; or, ces nombres auront rapidement tendance tre trs
grands. En calculant, comme on le fait ici, d'abord le numrateur,
puis ensuite le dnominateur, on prend le risque de demander
la machine de stocker des nombres trop grands pour qu'elle soit
capable de les coder (cf. le prambule). C'est d'autant plus bte
que rien ne nous oblige procder ainsi : on n'est pas oblig de
passer par la division de deux trs grands nombres pour obtenir
le rsultat voulu.

La deuxime remarque est qu'on a programm ici trois boucles


successives. Or, en y regardant bien, on peut voir qu'aprs
simplification de la formule, ces trois boucles comportent le
mme nombre de tours ! (si vous ne me croyez pas, crivez un
exemple de calcul et biffez les nombres identiques au numrateur
et au dnominateur). Ce triple calcul (ces trois boucles) peut
donc tre ramen(es) un(e) seul(e). Et voil le travail, qui est
non seulement bien plus court, mais aussi plus performant :
variables N, P, i, O, F : Entier
Debut
ecrire_ecran "Entrez le nombre de chevaux partants : "
lire_clavier N
ecrire_ecran "Entrez le nombre de chevaux jous : "
lire_clavier P
A1
B1
Pour i := 1 P
A A * (i + N - P)
BB*i
finpour
ecrire_ecran "Dans lordre, une chance sur ", A
ecrire_ecran "Dans le dsordre, une chance sur ", A / B
Fin

ENSA Safi

158

Comparaison boucles pour et tant que


pour cpt 1 nbVal faire
ecrire_ecran "Donnez une valeur :"
lire_clavier valeur
totalValeurstotalValeurs+ valeur {cumul}
Finpour
. quivaut
cpt 0
tant que cpt <nbVal faire
ecrire_ecran "Donnez une valeur :"
lire_clavier valeur
totalValeurstotalValeurs+ valeur{cumul}
cpt cpt + 1 {compte le nombre de valeurs traites}
ENSA Safi
fintantque

159

Les Boucles rpterjusqu (suit)


La boucle rpter ... jusqu
Rpter
(r)affectation de la (des) variable(s) de condition
traitement {suite dinstructions}
jusqu <expression logique (faux)>
Fonction:
-excuter une suite dinstructions au moins une fois et la
rpter tant quune condition est pas remplie
Remarque: le traitement dans lexemple prcdent se limite la
r-affectation de la variable de condition

ENSA Safi

160

Les Boucles rpterjusqu (suit)


Comparaison boucles rpter et tant que (exemple exercice1)
Rpter
ecrire_ecran "Donnez une valeur positive paire :"
lire_clavier valeur
jusqu (valeur > 1 ET (valeur < 3) )
quivaut :
ecrire_ecran "Donnez une valeur positive paire :"
lire_clavier valeur
tantque (valeur < 1 ou (valeur > 3) ) faire
ecrire_ecran "Donnez une valeur positive paire:"
lire_clavier valeur
FinTantQue
ENSA Safi

161

Les Boucles rpterjusqu (suit)


Comparaison boucles rpter et tant que (suite)
boucle tant que
-condition vrifie avant chaque excution du traitement
-le traitement peut donc ne pas tre excut
-de plus : la condition porte surtout sur la saisie de nouvelles
variables (relance)
boucle rpter
-condition vrifie aprs chaque excution du traitement
-le traitement est excut au moins une fois
-de plus : la condition porte surtout sur le rsultat du traitement
Remarque: la boucle rpter est typique pour les saisies avec
vrification.
ENSA Safi

162

Choisir pour... tant que rpter

Traitement
excut au
moins une
fois ?

NON
Nombre
ditrations
connu ?

NON

Boucle tant que

OUI

Boucle rpter

OUI
Boucle pour

ENSA Safi

163

Les Tableaux
Un ensemble de valeurs portant le mme nom de variable et repres par
un nombre, sappelle un tableau, ou encore une variable indice.
Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappelle
lindice.
Chaque fois que lon doit dsigner un lment du tableau, on fait figurer le
nom du tableau, suivi de lindice de llment, entre [].

Syntaxe
variables T[1:4] : tableau de rel
T[2] 0
T[4] 0 est quivalent
i4
T[i] 0
ENSA Safi

164

Les Tableaux
Dfinition du type
Indice

nom du tableau
1

tab 12

-78

-21

Contenu du tableau
1

untab t

2
e

5
e

Remarques :
Indices : en gnral, dmarrage 1, mais en C++, dmarrage 0
Nombre doctets occups : dpend du type des valeurs enregistres
ENSA Safi

165

Exercice 1
Ecrire un algorithme qui dclare et remplisse un tableau de 7
valeurs numriques en les mettant toutes zro.

ENSA Safi

166

Solution
variables Truc [1:7] : tableau de rel
i : entier
Debut
Pour i := 1 7
Truc[i] 0
finpour
Fin

ENSA Safi

167

Exercice 2
Ecrire un algorithme qui dclare et remplisse un tableau
contenant les six voyelles de lalphabet latin.

ENSA Safi

168

Solution
variables Truc [1:6] : Tableau de Caractre
Debut
Truc[1] "a"
Truc[2] "e"
Truc[3] "i"
Truc[4] "o"
Truc[5] "u"
Truc[6] "y"
Fin

ENSA Safi

169

Exercice 3
Ecrire un algorithme qui dclare un tableau de 9 notes, dont
on fait ensuite saisir les valeurs par lutilisateur.

ENSA Safi

170

Solution
variables Notes [1:4] : Tableau de entier
i : entier
Debut
Pour i := 1 4
ecrire_ecran "Entrez la note numro ", i
lire_clavier Notes[i]
finpour
Fin

ENSA Safi

171

Exercice 4
Que produit lalgorithme suivant ?
variables Nb [1:6] : tableau de Entier
i : Entier
Dbut
Pour i := 1 6
Nb[i] i * i
finpour
Pour i := 1 6
ecrire_ecran Nb[i]
finpour
Fin
Peut-on simplifier cet algorithme avec le mme rsultat ?
ENSA Safi

172

Solution
Cet algorithme remplit un tableau avec six valeurs : 1, 4,
9, 16, 25,36.
Il les crit ensuite lcran. Simplification :
variables T[1:6] : tableau de Entier
i : Entier
Dbut
Pour i := 1 6
Nb[i] i * i
ecrire_ecran Nb[i]
finpour
Fin
ENSA Safi

173

Exercice 5
Que produit lalgorithme suivant ?
variables N[1:7]: tableau de Entier
i, k : Entier
Dbut
N[1] 1
Pour k := 2 7
N[k] N[k-1] + 2
finpour
Pour i := 1 7
ecrire_ecran N[i]
finpour
Fin
Peut-on simplifier cet algorithme avec le mme rsultat ?
ENSA Safi

174

Solution
Cet algorithme remplit un tableau avec les sept valeurs :
1, 3, 5, 7, 9, 11, 13.
Il les crit ensuite lcran. Simplification :
variables N[1:7]: tableau de Entier
k : Entier
Dbut
N[1] 1
ecrire_ecran N[1]
Pour k := 2 7
N[k] N[k-1] + 2
ecrire_ecran N[k]
finpour
Fin
ENSA Safi

175

Exercice 6
Que produit lalgorithme suivant ?
variables Suite [1:8]: tableau de Entier
i : Entier
Dbut
Suite[1] 1
Suite[2] 1
Pour i :=3 8
Suite[i] Suite[i-1] + Suite[i-2]
finpour
Pour i := 1 8
ecrire_ecran Suite[i]
finpour
Fin
ENSA Safi

176

Solution
Cet algorithme remplit un tableau de 8 valeurs : 1, 1, 2, 3,
5, 8, 13, 21

ENSA Safi

177

Exercice 7
Ecrivez la fin de lalgorithme 3 afin que le calcul de la
moyenne des notes soit effectu et affich lcran.

ENSA Safi

178

Solution
variables Notes [1:9]: tableau de Entier
S,i : Entier
Debut
s0
Pour i := 1 9
ecrire_ecran "Entrez la note n ", i
lire_clavier Notes[i]
s s + Notes[i]
finpour
ecrire_ecran "Moyenne :", s/9
Fin

ENSA Safi

179

Test
crire un algorithme qui trie 4 valeur saisie par lutilisateur par ordre
croissant ?
crire un algorithme qui affiche les 100 nombres premiers?
fonction Mod permet de rcuprer le reste de la division dun nombre par
un deuxime nombre. Par exemple :
A Mod(10,3)

A vaut 1 car 10 = 3*3 + 1

crire un algorithme qui demande lutilisateur les coordonnes dun


point X, et affich lcran la couleur de la zone o il est situ.
CHERCHE NUMERO DOUBLE DANS UN TABLEAU
CHERCHE LE NUMERO MANQUANT DANS UN TABLEAU

ENSA Safi

180

variables Num [1:10] : tableau de Entier


variables i,S,N : Entier
variables premier : booleen
Debut
N1

S1

Tantque N<=10
Premier vrai
Pour i := 2 S-1
si mod(S,i)=0 alors
Premierfaux
Finsi
finpour
si Premier alors
Num[N] S
NN+1
finsi
SS+1

fintantque
Fin

Tableaux Multidimensionnels
Tableaux deux dimensions
Exemple tableau 2 lignes et 7 colonnes
1
1 10
2 9

20

25

422

132

124

Dclaration
tableau[1:2, 1:7] dentiers
indices min
et max des
lignes

indices min
et max des
colonnes

ENSA Safi

182

Tableaux Multidimensionnels

REMARQUE ESSENTIELLE :
Il ny a aucune diffrence qualitative entre un tableau deux
dimensions ( i, j ) et un tableau une dimension ( i * j ). De mme que
le jeu de dames quon vient dvoquer, tout problme qui peut tre
modlis dune manire peut aussi tre modlis de lautre.
Simplement, lune ou lautre de ces techniques correspond plus
spontanment tel ou tel problme, et facilite donc (ou complique, si
on a choisi la mauvaise option) lcriture et la lisibilit de lalgorithme.
Syntaxe
variables Notes [1:9,1:9] : tableau de Entier
Notes[1, 8] 0

ENSA Safi

183

Exercice 1
crivez un algorithme remplissant un tableau de 6 sur 13,
avec des zros.

ENSA Safi

184

Solution
variables Notes [1:6,1:13] :tableau de Entier
i, j :entier

Debut
Pour i := 1 6
Pour j := 1 13
Truc[i, j] 0
finpour
finpour
Fin

ENSA Safi

185

Exercice 2
Quel rsultat produira cet algorithme ?
variables X[1:2,1:3] : tableau de Entier
i, j, val : Entier
Dbut
Val 1
Pour i := 1 2
Pour j := 1 3
X[i, j] Val
Val Val + 1
finpour
finpour
Pour i := 1 2
Pour j := 1 3
ecrire_ecran X[i, j]
finpour
finpour
Fin
ENSA Safi

186

Solution
Cet algorithme remplit un tableau de la manire suivante:
X[1, 1]= 1
X[1, 2] = 2
X[1, 3]= 3
X[2, 1]= 4
X[2, 2] = 5
X[2, 3]= 6
Il crit ensuite ces valeurs lcran, dans cet ordre.

ENSA Safi

187

Exercice 3
Quel rsultat produira cet algorithme ?
variables X[1:2,1:3] : tableau de Entier
i, j, val : Entier
Dbut
Val 1
Pour i := 1 2
Pour j := 1 3
X[i, j] Val
Val Val + 1
finpour
finpour
Pour j := 1 3
Pour i := 1 2
ecrire_ecran X[i, j]
finpour
finpour
Fin
ENSA Safi

188

Solution
Cet algorithme remplit un tableau de la manire suivante:
X[1, 1]= 1
X[1, 2] = 4
X[1, 3]= 2
X[2, 1]= 5
X[2, 2] = 3
X[2, 3]= 6
Il crit ensuite ces valeurs lcran, dans cet ordre.

ENSA Safi

189

Exercice 4
Quel rsultat produira cet algorithme ?
variables T[1:4,1:2] : tableau de Entier
k, m : Entier
Dbut
Pour k := 1 4
Pour m := 1 2
////T[k, m] (k + 1) + 4 * m
T[k, m] (2*(k-1))+m
finpour
finpour
Pour k := 1 4
Pour m := 1 2
ecrire_ecran T[k, m]
finpour
finpour
Fin
ENSA Safi

190

Solution
Cet algorithme remplit un tableau de la manire suivante:
T[1, 1] = 6
T[1, 2] = 10
T[2, 1] = 7
T[2, 2] = 11
T[3, 1] = 8
T[3, 2] = 12
T[4, 1] = 9
T[4, 2] = 13
Il crit ensuite ces valeurs lcran, dans cet ordre.

ENSA Safi

191

Exercice 5
Ecrire algorithme quivalent a exercice 4 en utilisant un tableau
unidimensionnel

ENSA Safi

192

variables T[1:8] : tableau de Entier


k, m,i : Entier
Dbut
Pour k := 1 4
Pour m := 1 2
/////T[k, m] k + m
i (2*(k-1))+m
/////T[k, m] (k + 1) + 4 * m
T[i] (k + 1) + 4 * m
finpour
finpour
Pour k := 1 4
Pour m := 1 2
i (2*(k-1))+m
ecrire_ecran T[i]
finpour
finpour
Fin

Exercice 6
Soit un tableau T deux dimensions (12, 8) pralablement
rempli de valeurs numriques.
crire un algorithme qui recherche la plus grande valeur
au sein de ce tableau.

ENSA Safi

194

Solution
variables i, j, iMax, jMax : entier
variables T[1:13,1:9] : tableau de Entier
Le principe de la recherche dans un tableau deux dimensions est strictement le mme que
dans un tableau une dimension, ce qui ne doit pas nous tonner. La seule chose qui
change, c'est qu'ici le balayage requiert deux boucles imbriques, au lieu d'une seule.
Debut
...
iMax 0
jMax 0
Pour i := 1 13
Pour j := 1 9
Si T[i,j] > T[iMax,jMax] Alors
iMax i
jMax j
FinSi
finpour
finpour
ecrire_ecran "Le plus grand lment est ", T[iMax,jMax]
ecrire_ecran "Il se trouve aux indices ", iMax, "; ", jMax
Fin

ENSA Safi

195

Procdures et Fonctions
Avantages:
Les procdures ou fonctions permettent de ne pas rpter plusieurs fois
une mme squence dinstructions au sein du programme.
La mise au point du programme est plus rapide en utilisant des
procdures et des fonctions. En effet, elle peut tre ralise en dehors du
contexte du programme.
Une procdure peut tre intgre un autre programme, ou elle pourra
tre range dans une bibliothque doutils ou elle pourra tre utilise par
nimporte quel programme.

Utilisation :
Lors de la conception dun programme deux aspects apparaissent :
- La dfinition de la procdure ou fonction.
- Lappel de la procdure ou fonction au sein du programme.
Lcriture de la procdure ou fonction seffectue en fonction de
paramtres formels utiliss dans la conception de celle-ci.
Par contre au moment de lutilisation de la procdure ou fonction, on
associera de vritables valeurs ces paramtres grce des paramtres
dappel ou paramtres effectifs.
ENSA Safi

196

Notion de fonction

ENSA Safi

197

Les Fonctions Prdfinies: Math


A Sin(35)
Une fonction est donc constitue de trois parties :
le nom proprement dit de la fonction. Ce nom ne sinvente pas ! Il doit
imprativement correspondre une fonction propose par le langage. Dans
notre exemple, ce nom est SIN.
deux parenthses, une ouvrante, une fermante. Ces parenthses sont toujours
obligatoires, mme lorsqu'on n'crit rien l'intrieur.
une liste de valeurs, indispensables la bonne excution de la fonction. Ces
valeurs sappellent des arguments, ou des paramtres. Certaines fonctions
exigent un seul argument, dautres deux, etc. et dautres encore aucun. A
noter que mme dans le cas de ces fonctions nexigeant aucun argument, les
parenthses restent obligatoires. Le nombre darguments ncessaire pour une
fonction donne ne sinvente pas : il est fix par le langage. Par exemple, la
fonction sinus a besoin dun argument (ce nest pas surprenant, cet argument
est la valeur de langle). Si vous essayez de lexcuter en lui donnant deux
arguments, ou aucun, cela dclenchera une erreur lexcution. Notez
galement que les arguments doivent tre dun certain type, et quil faut
respecter ces types.

ENSA Safi

198

Les Fonctions Prdfinies: Math


atn(p1)

arc tangente de p1

entier, rel

entier, rel

cos(p1)

cosinus de p1

entie r, rel

entier, rel

sin(p1)
tan(p1)
exp(p1)

sinus de p1
tangente de p1
exponentielle de p1

entier, rel
entier, rel
entie r, rel

entier, rel
entier, rel
entie r, rel

rac2(p1)
car(p1)

racine carre de p1
entier, rel
caractre ayant pour
car, chane
code ansi la valeur de p1

entier, rel
entier

chnombre(p1) convertit p1 en nombre

ENSA Safi

entier,rel

chane

199

Les Fonctions Prdfinies: numriques classiques


Une fonction extrmement rpandue est celle qui permet de
rcuprer la partie entire dun nombre :
Aprs : A Ent(3,228)

A vaut 3

Cette fonction permet de rcuprer le reste de la division dun


nombre par un deuxime nombre. Par exemple :
A 10 Mod 3

A vaut 1 car 10 = 3*3 + 1

B 12 Mod 2

B vaut 0 car 12 = 6*2

Cette fonction permet de rcuprer le quotion de la division


dun nombre par un deuxime nombre. Par exemple :
B 12 div 2

B vaut 6 car 12 = 6*2

Gnration de nombres alatoires


Aprs : Toto Alea()

On a :
ENSA Safi

0 =< Toto < 1


200

Les Fonctions Prdfinies: texte


Tous les langages, je dis bien tous, proposent les fonctions suivantes,
mme si le nom et la syntaxe peuvent varier dun langage lautre :
long(chane) : renvoie le nombre de caractres dune chane
milieu(chane,n1,n2) : renvoie un extrait de la chane, commenant au
caractre n1 et faisant n2 caractres de long.
Ce sont les deux seules fonctions de chanes rellement indispensables.
Cependant, pour nous pargner des algorithmes fastidieux, les langages
proposent galement :
gauche(chane,n) : renvoie les n caractres les plus gauche dans chane.
droite(chane,n) : renvoie les n caractres les plus droite dans chane
rang(chane1,chane2,p) : renvoie un nombre correspondant la position
de chane2 dans chane1 partir de la position p. Si chane2 nest pas
comprise dans chane1, la fonction renvoie zro.

ENSA Safi

201

long("Bonjour, a va ?")
long("")
milieu("Zorro is back", 4, 7)
milieu("Zorro is back", 12, 1)
gauche("Et pourtant", 8)
droite("Et pourtant", 4)
rang("Un pur bonheur", "pur",1)
rang("Un pur bonheur", "techno",1)
rang("Un pur bonheur", "ur",8)

vaut
16
vaut
0
vaut
"ro is b"
vaut
"c"
vaut
"Et pourt"
vaut
"t"
vaut
4
vaut
0
vaut
13

Exercice 1
crivez une fonction qui renvoie le nombre de voyelles
contenues dans une chane de caractres passe en
argument. Au passage, notez qu'une fonction a tout fait
le droit d'appeler une autre fonction.

Solution
Fonction NbVoyelles (e Mot : chaine):entier
variables i, nb : entier
debut
nb<--0
Pour i := 1 Long(Mot)
Si rang("aeiouy",Milieu(Mot,i,1),1) <> 0 Alors
nb <-- nb + 1
FinSi
finpour
valeur_retour <-- nb
finfonction
ENSA Safi

204

Exercice 2
Rcrivez la fonction Trouve, vue prcdemment, laide des
fonctions Mid et Len (comme quoi, Trouve, la diffrence de
Mid et Len, nest pas une fonction indispensable dans un
langage).

ENSA Safi

205

Solution
fonction foncrang(e aa,b:chaine ;e p:entier):entier
variables i , r :entier
dbut
i <-- p
TantQue (i < (long(aa) - long(b))) et (b <> Milieu(aa, i, Long(b)))
i <-- i + 1
FinTantQue
Si b <> Milieu(aa, i, Long(b)) Alors
var
r<-- 0
xx : entier
Sinon
f1, f2 :chaine
r<-- i
debut
f1 <--"bbb bonjoonur"
finsi
f2 <--"on"
valeur_retour <--r
xx <-- foncrang(f1,f2,7)
finfonction
ecrire_ecran xx
fin
ENSA Safi

206

Procdures et Fonctions
Le corps du programme sappelle alors la procdure principale, et ces
groupes dinstructions auxquels on a recours sappellent des fonctions et
des sous-procdures
Fonction s'crit toujours en-dehors au debut de la procdure principale( au
niveau declaration).
Dans une fonction ont peut appel une autre fonction mais on ne peut jamais
dfinir une autre fonction.
Diffrence entre fonction et procdure
Les fonctions ne sont qu'un cas particulier des sous-procdures : celui
o doit tre renvoy vers la procdure appelante une valeur et une seule.
et celle-ci doit appartenir un type de base du Pascal. C est dire un
nombre, un caractre ou une chane de caractr, boolean.
Les procdures dans tous les autres cas (celui o on ne renvoie aucune
valeur, comme celui ou en en renvoie plusieurs.
ENSA Safi

207

Procdures et Fonctions :Syntaxe


Declaration
Fonction RepOuiNon(e Msg : Caractre) : Caractre
arguments formelles

resultat

variables rsultat : caractre


.
valeur_retour rsultat qui indique quelle valeur doit prendre la fonction lorsqu'elle est utilise par
le programme.
finfonction

Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut

ecrire_ecran RepOuiNon("oui")
argument rel
.
finfonction
ENSA Safi

208

Procdures et Fonctions :Syntaxe


Declaration procedure
Procedure RepOuiNon(e Msg : Caractre)
arguments formelles
variables rsultat : caractre
.
finfonction

Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut

RepOuiNon("oui")
.
finfonction

ENSA Safi

209

Procdures et Fonctions : passage par valeur


Paramtre formel : variable utilise dans le corps du sousprogramme qui reoit une valeur de lextrieur (ils font parti
de la description de la fonction)
Paramtre effectif : Il s'agit de la variable (ou valeur)
fournie lors de l'appel du sous programme (valeurs fournies
pour utiliser la fonction et valeurs renvoyes)
Copie de la valeur du paramtre effectif vers le paramtre
formel correspondant lors de l'appel
Paramtres formel et effectif ont des noms diffrents

Procdures et Fonctions : passage par valeur


variables X : Entier
Fonction afficheecran(e k : entier)
ecrire_ecran k
fin

k=25

Dbut
X 25
afficheecran(X) X=25

Passage par valeur

Finfonction
Remarque: avec algoexe il faut
ajouter le mot e avant les argument
Exemple :
afficheecran(e k : entier)
ENSA Safi

211

Fonctions:Porte des variables


Si P1 reprsente le programme principal et P2, P3 deux
fonctions, le schma qui suit illustre le propos prcdent.
Dans P1 on dispose de
X,Y et Z
Dans P2 on dispose de
A,B et X
Dans P3 on dispose de
U,V,X et Y

variables X : Entier P1
Fonction P2(e A, B :
entier)
..
finfonction
variables Y : Entier
Fonction P3(e U, V :
entier)
..
finfonction

Remarque: avec algoexe il faut


ajouter le mot globale
Exemple :
variables globale x : entier

variables Z : Entier
Debut
Fin
ENSA Safi

212

Exemple de fonction
Bonne structure :

Mauvaise Structure :
...
ecrire_ecran "Etes-vous mari ?"
lire_clavier Rep1
TantQue Rep1 <> "Oui" et Rep1 <>
"Non"
ecrire_ecran "Tapez Oui ou Non"
lire_clavier Rep1
FinTantQue
...
ecrire_ecran "Avez-vous des
enfants ?"
lire_clavier Rep2
TantQue Rep2 <> "Oui" et Rep2 <>
"Non"
ecrire_ecran "Tapez Oui ou Non"
lire_clavier Rep2
FinTantQue
...

Fonction RepOuiNon() : caractre


variables truc : car
lire_clavier Truc
TantQue Truc <> "Oui" et Truc <>
"Non"
ecrire_ecran "Tapez Oui ou Non"
lire_clavier Truc
FinTantQue
valretTruc

finfonction
Debut
...
ecrire_ecran "Etes-vous mari ?"
Rep1 RepOuiNon()
...
ecrire_ecran "Avez-vous des
enfants ?"
Rep2 RepOuiNon()
...
ENSA Safi
213
Fin

Exercice 1
Quel rsultat produira cet algorithme ?
procedure echange (e a,b : rel)
variables c : rel
c a
ab
bc
finprocedure
variables x, y : rel
Debut
x2
y5
echange(x,y)
ecrire_ecran x,y
ENSA Safi

Fin

214

solution1
Quel rsultat produira cet algorithme ?

variables globale x, y : entier


Procedure echange
variables c : entier
debut
c <-- x
x <-- y
y <-- c
finprocedure

Debut
x <-- 2
y<-- 5
echange
ecrire_ecran x,y
Fin

ENSA Safi

215

Exercice 2
crivez une fonction qui renvoie la somme de cinq
nombres fournis en argument.

ENSA Safi

216

Solution
variables aa, bb, cc, dd, ee: entier
result :entier
Fonction Sum(e a1,b,c,d,e1: entier) : entier
debut
valeur_retour <-- a1+b+c+d+e1
finfonction
Debut
ecrire_ecran "entrer 5 nbrs"
lire_clavier aa,bb,cc,dd,ee
Result <-- Sum(aa,bb,cc,dd,ee)
ecrire_ecran "la som est",Result
fin

Exercice 3
crivez lalgorithme dune procdure permettant deffectuer la division euclidienne
de deux entiers a et b. On appellera q le quotient et r le reste de cette division. On
rappelle la formule de la division : a=b*q + r avec r < b.

ENSA Safi

218

solution
variables globale q, r : rels

variables v1, v2 : rels

Procedure division_euclidienne (e a,b :


entier)

Dbut
ecrire_ecran " premire valeur "

Prcondition : aucune

lire_clavier v1

Donnes : a et b

ecrire_ecran "euxime valeur"

Donnes / Rsultats : q et r

lire_clavier v2

Description : effectue la division


euclidienne de a par b

Division_euclidienne (v1,v2)
ecrire_ecran q, r

Variable locale : aucune


Fin

Dbut
q0
ra
Tantque r>=b
q q+1
r r-b
FinTantque
finprocedure

ENSA Safi

219

Exercice 4
crivez lalgorithme dune fonction perimetre_ rayon _cercle permettant de
retourner le rayon dun cercle en fonction de son primtre (pass en paramtre).
crivez ensuite une fonction rayon_aire_cercle permettant de retourner le aire dun
cercle en fonction de son rayon (pass en paramtre).
crivez ensuite une fonction perimetre_aire_cercle qui retourne laire dun cercle en
utilisant la fonction perimetre_ rayon _cercle susmentionnes.
On souhaite maintenant crire un sous-programme (qui utilise les deux fonctions
prcdentes) permettant partir du primtre dun cercle de calculer sa surface.
crivez lentte de ce sous programme de deux manires diffrentes.

ENSA Safi

220

solution
fonction perimetre_rayon_cercle(e p :
reel):reel
Dbut
valeur_retour <-- p/6.28
finfonction
fonction rayon_aire_cercle(e pp :
reel):reel

Dbut
ecrire_ecran "perimetre "
lire_clavier vp
vai<--rayon_aire_cercle(vp)
ecrire_ecran "aire",vai
Fin

variables r : reel
Dbut
r<--perimetre_rayon_cercle(pp)
valeur_retour <-- 3.14*r*r
finfonction
variables globale vp,vai : rels

ENSA Safi

221

Fonctions:rcursivit

Une fonction est dit rcursif s'elle


sappelle elle-mme
Un exemple classique:
La fonction factorielle
n! = 1 2 3 (n1) n
Dfinition rcursive:

1 si n 0
f (n)
f (n 1) sin on
ENSA Safi

222

Fonctions:Trace dune rcursion


Dfinition du fonction:
fonction factor(e n : entier) : rel
var
rsult : rel
dbut
si n = 0 alors
rsult <-- 1
sinon
rsult <-- n * factor(n-1)
finsi
valeur_retour <-- rsult
Finfonction

Trace:
Une bote pour chaque appel rcursif
Une flche pour chaque appel
Une flcheENSA
pourSafi
chaque retour dune
valeur

223

Exercice 5
crivez une fonction recursive qui envoi la puissance Xn
Fonction puissance (e x reel, n entier) : reel

ENSA Safi

224

Solution
fonction puissance(e x:reel;e n : entier) : rel
var
rsult : rel
dbut
si n = 0 alors
rsult <-- 1
sinon
rsult <-- x*puissance(x,n-1)
finsi
valeur_retour <-- rsult
finfonction

var
nombre: entier
xx:reel
globale r : rel
dbut
crire_cran "x et n "
lire_clavier xx
lire_clavier nombre
r := puissance(xx,nombre)
crire_cran "puis = ",r
fin

Donnes structures
Des types de variables personnaliss, composs dun collage de plusieurs types existants
(10 caractres, puis un numrique, puis 15 caractres, etc.). Ce type de variable s'appelle un
type structur.
Syntaxe
Dclaration
Type Bottin
Nom [1:20] : tableau de Caractre
Prnom [1:15]: tableau de Caractre
Tel [1:10] : tableau de Caractre
Mail [1: 20]: tableau de Caractre
Fintype
variables Individu : Bottin
affectation
Individu "Radouane", "chahin", "0348946532", "chahin@yahoo.com"
Ou
Individu.Nom "Radouane"
Individu.Prnom "chahin"
Individu.Tel "0348946532"
Individu.Mail "chahin@yahoo.com"
ENSA Safi

226

Exercice 1
En utilisant une structure point Ecrire un algorithme qui
calcul la distance entre 2 point A et B
Type point
X : reel
Y : reel
fintype

ENSA Safi

227

Solution
algo algo1
type copoint
x : reel
y : reel
fin_type
variables A1 : copoint
A2 : copoint
dx,dy,d:reel

dbut
ecrire_ecran "point A1"
lire_clavier A1.x
lire_clavier A1.y
ecrire_ecran "entrer cordoner du
point A2"
lire_clavier A2.x
lire_clavier A2.y
dx<--A2.x-A1.x
dy<--A2.y-A1.y
d<--rac2((dx*dx)+(dy*dy))
ecrire_ecran "distance",d
fin

Les Fichiers

Les Fichiers servent stocker des informations de


manire permanente, entre deux excutions dun
programme

ENSA Safi

229

Fichier Texte
Un premier grand critre, qui diffrencie les deux grandes catgories de
fichiers, est le suivant : le fichier est-il ou non organis sous forme de
lignes successives ? Si oui, cela signifie vraisemblablement que ce fichier
contient le mme genre d'information chaque ligne. Ces lignes sont alors
appeles des enregistrements.
Un fichier cod sous forme d'enregistrements est appel un fichier
texte.
Entre chaque enregistrement, sont stocks les octets correspondants
aux caractres CR (code Ascii 13) et LF (code Ascii 10), signifiant un
retour au dbut de la ligne suivante.
Le plus souvent, le langage de programmation, ds lors qu'il s'agit d'un
fichier texte, grera lui-mme la lecture et l'criture de ces deux
caractres chaque fin de ligne
Ce type de fichier est couramment utilis ds lors que l'on doit stocker
des informations pouvant tre assimiles une base de donnes.
ENSA Safi

230

Fichier Binaire
Il rassemble les fichiers qui ne possdent pas de structure de
lignes (d'enregistrement). Les octets, quels qu'il soient, sont
crits la queue.
Autre diffrence majeure entre fichiers texte et fichiers binaires
: dans un fichier texte, toutes les donnes sont crites sous
forme de texte, lors de la lecture du fichier, on devra convertir
ces chanes en nombre si l'on veut pouvoir les utiliser dans
des calculs.
Ceci a comme autre implication qu'un fichier texte est
directement lisible, alors qu'un fichier binaire ne l'est pas

ENSA Safi

231

Fichier : Structure des enregistrements


Savoir que les fichiers peuvent tre structurs en
enregistrements, c'est bien. Mais savoir comment sont leur
tour structurs ces enregistrements, c'est mieux. Or, l aussi,
il y a deux grandes possibilits. Ces deux grandes variantes
pour structurer les donnes au sein dun fichier texte sont la
dlimitation et les champs de largeur fixe.

ENSA Safi

232

Fichier : Structure des enregistrements


Carnet dadresses, avec dedans le nom, le prnom, le tlphone et l'email.
Les donnes, sur le fichier texte, peuvent tre organises ainsi :
La structure n1, est dite dlimite ; Elle utilise un caractre spcial,
appel caractre de dlimitation,
"Radouane";"Chahin";0142156487; chahin@yahoo.fr"
"Adil";"Mla";0456912347; adil@free.fr"
"Sarid";"Yousef";0289765194; sarid@free.fr"
"Amal";"Ben moussa";0149875231;"amal@aol.fr"
ou ainsi :
Structure n2, elle, est dite champs de largeur fixe.
Radouane
Chahin
0142156487
chahin@yahoo.fr
Adil
Mla
0456912347
adil@free.fr
Sarid
Youssef
0289765194
sarid@free.fr
Amal
Benmoussa
0149875231
amal@aol.fr
ENSA Safi

233

Fichier : Structure des enregistrements


Lavantage de la structure n1 est son faible encombrement en place
mmoire ; il ny a aucun espace perdu, et un fichier texte cod de cette
manire occupe le minimum de place possible. Mais elle possde en
revanche un inconvnient majeur, qui est la lenteur de la lecture. En effet,
chaque fois que lon rcupre une ligne dans le fichier, il faut alors
parcourir un par un tous les caractres pour reprer chaque occurrence du
caractre de sparation avant de pouvoir dcouper cette ligne en diffrents
champs.
La structure n2, linverse, gaspille de la place mmoire, puisque le
fichier est un vrai gruyre plein de trous. Mais dun autre ct, la
rcupration des diffrents champs est trs rapide. Lorsquon rcupre une
ligne, il suffit de la dcouper en diffrentes chanes de longueur prdfinie,
et le tour est jou.

ENSA Safi

234

Fichier : Types daccs


Laccs squentiel : on ne peut accder qu la donne suivant celle quon vient
de lire. On ne peut donc accder une information qu'en ayant au pralable
examin celle qui la prcde. Dans le cas d'un fichier texte, cela signifie qu'on lit le
fichier ligne par ligne (enregistrement par enregistrement).
Laccs direct (ou alatoire) : on peut accder directement lenregistrement de
son choix, en prcisant le numro de cet enregistrement. Mais cela veut souvent
dire une gestion fastidieuse des dplacements dans le fichier.
Laccs index : pour simplifier, il combine la rapidit de l'accs direct et la
simplicit de l'accs squentiel (en restant toutefois plus compliqu). Il est
particulirement adapt au traitement des gros fichiers, comme les bases de
donnes importantes.

A la diffrence de la prcdente, cette typologie ne caractrise pas la


structure elle-mme du fichier. En fait, tout fichier peut tre utilis avec lun ou
lautre des trois types daccs. Le choix du type daccs nest pas un choix qui
concerne le fichier lui-mme, mais uniquement la manire dont il va tre trait par
la machine. Cest donc dans le programme, et seulement dans le programme, que
lon choisit le type daccs souhait.
ENSA Safi

235

Fichier : Types daccs


Pour conclure sur tout cela, voici un petit tableau rcapitulatif :
Fichiers Texte
On les utilise pour stocker...
Ils sont structurs sous
forme de...

des bases de donnes

lignes (enregistrements)

Les donnes y sont crites...

exclusivement en tant que


caractres

Les enregistrements sont


eux-mmes structurs...

au choix, avec un sparateur ou


en champs de largeur fixe

Lisibilit

Lecture du fichier

Le fichier est lisible clairement


avec n'importe quel diteur de
texte
On ne peut lire le fichier que ligne
par ligne
ENSA Safi

Fichiers Binaires
tout, y compris des bases de
donnes.
Ils n'ont pas de structure apparente.
Ce sont des octets crits la suite
les uns des autres.
comme en mmoire vive
en champs de largeur fixe, s'il s'agit
d'un fichier codant des
enregistrements
Le fichier a l'apparence d'une suite
d'octets illisibles
On peut lire les octets de son choix
(y compris la totalit du fichier d'un
coup)
236

Fichier : Instructions (fichiers texte en accs


squentiel)
Si lon veut travailler sur un fichier, la premire chose faire est de louvrir.
Cela se fait en attribuant au fichier un numro de canal. On ne peut ouvrir
quun seul fichier par canal, mais quel que soit le langage, on dispose
toujours de plusieurs canaux. Cette canal est lie un variable de type
fichier.
Limportant est que lorsquon ouvre un fichier, on stipule ce quon va en
faire : lire, crire ou ajouter.
Si on ouvre un fichier pour lecture, on pourra uniquement rcuprer les
informations quil contient, sans les modifier en aucune manire.
Si on ouvre un fichier pour criture, on pourra mettre dedans toutes les
informations que lon veut. Mais les informations prcdentes, si elles
existent, seront intgralement crases Et on ne pourra pas accder
aux informations qui existaient prcdemment.
Si on ouvre un fichier pour ajout, on ne peut ni lire, ni modifier les
informations existantes. Mais on pourra, comme vous commencez
vous en douter, ajouter de nouvelles lignes (je rappelle qu'au terme de
lignes, on prfrera celui denregistrements.
ENSA Safi

237

Fichier : Instructions (fichiers texte en accs


squentiel)
Syntaxe
variables Truc, Nom, Prnom, Tel, Mail : Caractres
variables fichier F : texte
variables Truc : Caractre
Ouvrir "Exemple.txt" sur F en Lecture
Dbut
Tantque Non EOF(F)
LireFichier F, Truc
Nom Mid(Truc, 1, 20)
Prnom Mid(Truc, 21, 15)
Tel Mid(Truc, 36, 10)
Mail Mid(Truc, 46, 20)
FinTantQue
Fermer F
Fin
Pour crire dans le fichier :EcrireFichier F, Truc
ENSA Safi

238

Fichier : Stratgies de traitement


Il existe globalement deux manires de traiter les fichiers textes :
lune consiste sen tenir au fichier proprement dit, c'est--dire modifier
directement (ou presque) les informations sur le disque dur. Cest parfois
un peu acrobatique, lorsquon veut supprimer un lment dun fichier : on
programme alors une boucle avec un test, qui recopie dans un deuxime
fichier tous les lments du premier fichier sauf un ; et il faut ensuite
recopier intgralement le deuxime fichier la place du premier fichier
Ouf.
lautre stratgie consiste, comme on la vu, passer par un ou plusieurs
tableaux. En fait, le principe fondamental de cette approche est de
commencer, avant toute autre chose, par recopier lintgralit du fichier de
dpart en mmoire vive. Ensuite, on ne manipule que cette mmoire vive
(concrtement, un ou plusieurs tableaux). Et lorsque le traitement est
termin, on recopie nouveau dans l'autre sens, depuis la mmoire vive
vers le fichier dorigine.
ENSA Safi

239

Fichier : Stratgies de traitement


Les avantages de la seconde technique sont nombreux, et 99
fois sur 100, c'est ainsi qu'il faudra procder :
la rapidit : les accs en mmoire vive sont des milliers de fois
plus rapides (nanosecondes) que les accs aux mmoires de
masse (millisecondes au mieux pour un disque dur). En
basculant le fichier du dpart dans un tableau, on minimise le
nombre ultrieur d'accs disque, tous les traitements tant
ensuite effectus en mmoire.
la facilit de programmation : bien quil faille crire les
instructions de recopie du fichier dans le tableau, pour peu
quon doive tripoter les informations dans tous les sens, cest
largement plus facile de faire cela avec un tableau quavec
des fichiers.
ENSA Safi

240

Fichier : Donnes structures


Des types de variables personnaliss, composs dun collage de plusieurs types existants
(10 caractres, puis un numrique, puis 15 caractres, etc.). Ce type de variable s'appelle un
type structur.
Syntaxe
Dclaration
Structure Bottin
Nom [1:20] : tableau de Caractre
Prnom [1:15]: tableau de Caractre
Tel [1:10] : tableau de Caractre
Mail [1: 20]: tableau de Caractre
Fin Structure
variables Individu : Bottin
affectation
Individu "Radouane", "chahin", "0348946532", "chahin@yahoo.com"
Ou
Individu.Nom "Radouane"
Individu.Prnom "chahin"
Individu.Tel "0348946532"
Individu.Mail "chahin@yahoo.com"
ENSA Safi

241

Fichier : Donnes structures


Exemple lecture
Type Bottin
Nom [1:20] : tableau de Caractre
Prnom [1:15]: tableau de Caractre
Tel [1:10] : tableau de Caractre
Mail [1: 20]: tableau de Caractre
Fintype
variables tableau Individu[1:100] de Bottin
variables fichier F : texte
Dbut
Ouvrir "Exemple.txt" sur F en Lecture
i0
Tantque Non EOF(F)
ii+1
LireFichier F, Individu[i]
FinTantQue
Fermer F
Fin

ENSA Safi

242

Fichier : Donnes structures


Exemple ecriture
Type Bottin
Nom [1:20] : tableau de Caractre
Prnom [1:15]: tableau de Caractre
Tel [1:10] : tableau de Caractre
Mail [1: 20]: tableau de Caractre
Fintype
variables tableau Individu de Bottin
variables fichier F : texte
Debut
ecrire_ecran "Entrez le nom : "
lire_clavier Individu .Nom
ecrire_ecran "Entrez le prnom : "
lire_clavier Individu .Prnom
ecrire_ecran "Entrez le tlphone : "
Lire Individu .Tel
ecrire_ecran "Entrez le nom : "
lire_clavier Individu .Mail
Ouvrir "Adresse.txt" sur F en Ajout
EcrireFichier F, Individu
Fermer F
ENSA Safi
Fin

243

Fichier : Donnes structures


Lorsqu'on est amen travailler avec des donnes situes dans un fichier,
plusieurs choix, en partie indpendants les uns des autres, doivent tre faits :
sur l'organisation en enregistrements du fichier (choix entre fichier texte
ou fichier binaire)
sur le mode d'accs aux enregistrements du fichier (direct ou squentiel)
sur l'organisation des champs au sein des enregistrements (prsence de
sparateurs ou champs de largeur fixe)
sur la mthode de traitement des informations (recopie intgrale
pralable du fichier en mmoire vive ou non)
sur le type de variables utilises pour cette recopie en mmoire vive
(plusieurs tableaux de type simple, ou un seul tableau de type structur).
Chacune de ces options prsente avantages et inconvnients, et il est
impossible de donner une rgle de conduite valable en toute circonstance. Il
faut connatre ces techniques, et savoir choisir la bonne option selon le
problme traiter.

ENSA Safi

244

bibliographie
www.pise.info/algo
Cours algorithmique Universit Libre de Bruxelle
www.commentcamarche.net/
http://www.wikituto.org/index.php/Algorithme:Intro
http://www.iro.umontreal.ca/~hamelsyl/recursion.pdf

ENSA Safi

245

You might also like