Professional Documents
Culture Documents
algorithmique
Plan du cours
Introduction linformatique
Architecture dun ordinateur
Dcomposition fonctionnelle
Concepts cls
ENSA Safi
Introduction
Introduction
ENSA Safi
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
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
ENSA Safi
11
C++, Java
Pascal
C, Fortran
Assembleur
Langage machine
ENSA Safi
12
13
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
+ +
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
logarithmique
19
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
Illustrations
ENSA Safi
23
Arithmetic Unit
Control
Unit
Program Memory
Output Interface
Input Interface
Data Memory
Program Interface
24
Ordres de grandeur
K =Kilo
2^10 = 1 024
M= Mga
G= Giga
T=Tra
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
Les instructions
Les adresses
Unit de contrle / unit arithmtique et logique
Les registres
ENSA Safi
28
Les instructions
2.
3.
O ranger le rsultat ?
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
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
34
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
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
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
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
Exemples :
ENSA Safi
52
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
59
ENSA Safi
60
Premiers algorithmes
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
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
66
67
..
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
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
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
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
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
ENSA Safi
93
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
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 "
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
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
Niv3
DEBUT
C1 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
si NIV =2 Alors
ecrire_ecran " vert
Finsi
si NIV =3 Alors
si C2 ET NbrACC=0 Alors
Niv3
si NIV =4 Alors
Niv4
Sinon
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
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.
Truc=2,6,14,30,62,126,254,510,,
1022,2046,4094,8190,16382,
32766,-2,-2,-2,,,,,,,,,,,,
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
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
Debut
PE<-- 1
FinTantQue
somdue <-- 0
Nb5PE<-- 0
TantQue PE<> 0
Si res >= 5
Nb5PE<-- Nb5PE + 1
lire_clavier 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
ENSA Safi
Fin
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
ENSA Safi
158
159
ENSA Safi
160
161
162
Traitement
excut au
moins une
fois ?
NON
Nombre
ditrations
connu ?
NON
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)
ENSA Safi
180
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
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
ENSA Safi
198
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
ENSA Safi
entier,rel
chane
199
A vaut 3
B 12 Mod 2
On a :
ENSA Safi
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
resultat
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
Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.
Debut
RepOuiNon("oui")
.
finfonction
ENSA Safi
209
k=25
Dbut
X 25
afficheecran(X) X=25
Finfonction
Remarque: avec algoexe il faut
ajouter le mot e avant les argument
Exemple :
afficheecran(e k : entier)
ENSA Safi
211
variables X : Entier P1
Fonction P2(e A, B :
entier)
..
finfonction
variables Y : Entier
Fonction P3(e U, V :
entier)
..
finfonction
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
...
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 ?
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
Dbut
ecrire_ecran " premire valeur "
Prcondition : aucune
lire_clavier v1
Donnes : a et b
Donnes / Rsultats : q et r
lire_clavier v2
Division_euclidienne (v1,v2)
ecrire_ecran q, r
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
1 si n 0
f (n)
f (n 1) sin on
ENSA Safi
222
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
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
ENSA Safi
232
233
ENSA Safi
234
235
lignes (enregistrements)
Lisibilit
Lecture du fichier
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
237
238
239
240
241
ENSA Safi
242
243
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