Vous êtes sur la page 1sur 44

Sous Programmes : Procdures

et Fonctions
Mme Saoussen Maloul

Chapitre II : Les structures simples


Une structure simple peut tre :
- Une entre ou lecture de donnes
- Une affectation
- Une sortie ou un affichage des rsultats

I- Les entres :
Cette opration permet de lire ou de saisir une valeur provenant du clavier ou un autre priphrique.
Analyse
Algorithme
Pascal
Syntaxe gnrale
Var= Donne
Lire (Var)
Readln(Var);Read(Var);
Exemple
X=Donne
Lire(X)
Readln(X); Read(X);
X, Y : Donne
Lire(X, Y)
Readln(X, Y); Read(X, Y);
Remarque : La lecture de plusieurs variables de type chane la fois est non fonctionnelle.

II-

Laffectation :

Cette opration consiste attribuer une valeur une variable. Cette valeur doit tre de mme type ou de type
compatible avec cette variable.
Analyse et Algorithme
Pascal
Syntaxe gnrale
Var
Valeur
Var := Valeur;
Exemple
Moy
(Dc+2*DS)/3
Moy:= (Dc+2*DS)/3;

III- Les sorties :


Cette opration permet dafficher ou dcrire
Analyse et Algorithme
Syntaxe
crire ( message )
gnrale
crire (Var)
Exemple
crire ( Bonjour )
crire (x)

IV-

le contenu dune variable ou la valeur dune expression.


Pascal
Writeln (message); Write (message);
Writeln (Var); Write (Var);
Writeln (Bonjour); Write (Bonjour);
Writeln (x); Write (x);

Formatage de laffichage :

Par dfaut, lcran est divis en colonnes de 10 caractres de largeur. Laffichage des nombres se fait partir
de la droite.
- Le type Entier:
Write (valeur_entire : n)
gauche sil y a peu de chiffres.
Exemple: Write (123 :5)

Affiche la valeur entire sur n positions. Donc insertion despacement


- -123

- Le type Rel:
* Write (valeur_relle)
Exemple: Write (124.568)
* Write (valeur_relle : n)
Exemple: Write (124.568 :7)
* Write (valeur_relle : n : d)
Exemple: Write (124.568 :6 :2)
Write (124.568 :5 :2)
Write (124.568 :7 :2)
* Write (valeur_relle : 0 : d)
Exemple: Write (124.568 :0 :4)

Affiche la valeur relle en notation scientifique.


1.2456800000E+02
Affiche la valeur relle en notation scientifique sur n positions.
1.2E+02
Affiche la valeur relle sur n positions avec d dcimale avec ajustement.
124.57
124.57
-124.57
Affiche la valeur relle avec d dcimale avec ajustement.
124.5680

- Le type chane de caractres:


* Write (chane : n)
Affiche la chane sur n positions. Donc insertion despacement gauche de la
chane sil y a peu de caractres sinon ajustement automatique.
Exemple: Write (Informatique:14)
- -Informatique
Write (Informatique:8)
Informatique

Anne Scolaire : 2010-2011

-1-

LPS- 4 Maths 3
-Pag | 1
e

Sous Programmes : Procdures


et Fonctions

Chapitre IV : Les structures de contrle itratives


On a deux types de structures itratives.
- Une structure itrative complte o le nombre ditrations est connu lavance.
- Une structure itrative condition darrt o le nombre ditrations est inconnu lavance.

I- La structure itrative complte:


La structure de contrle itrative complte permet un programme de rpter un traitement un nombre de
fois connu lavance.
Analyse
Algorithme
Pascal
[init] Pour compteur de Vi Vf Faire Init
;
Traitement
Pour compteur de Vi Vf Faire For Compteur := Vi TO Vf Do
Syntaxe
FinPour
Traitement
Begin
gnrale
FinPour
Traitement;
End;

Remarques :

Le compteur doit tre de type scalaire.


Si le compteur est de type caractre, alors le nombre de rptitions est E(Ord(Vf)-Ord(Vi)/pas) +1.
Lincrmentation du compteur est automatique avec un pas de 1 ou un pas de -1.
En pascal, le module rpter est dlimit par Begin et End sil est compos de plus quune instruction.
Si pas=-1 alors: For i :=Vf Downto Vi Do

II-La structure itrative condition darrt:


La structure de contrle itrative condition darrt permet un programme de rpter un traitement jusqu
rencontrer la condition darrt.

1- La structure Rpter Jusqu:


Cette structure est utilise dans le cas o le nombre de rptitions est inconnu lavance et dont larrt est
gr par une condition.
Analyse
Algorithme
Pascal
[init] Rpter
Init
;
Syntaxe
Traitement
Rpter
Repeat
gnrale
Jusqu Condition darrt
Traitement
Traitement;
Jusqu Condition darrt
Until Condition darrt

Remarques:

Le traitement est excut au moins une fois.


La condition darrt est une condition boolenne : la condition de sortie. Elle peut tre simple ou compose.
Cette structure est gnralement utilise dans le contrle de saisie.
Entre Repeat et Until, on ne met pas de Begin et End.

2- La structure Tant Que Faire:


Cette structure est utilise dans le cas o le nombre de rptitions est inconnu lavance et dont le traitement
peut ne pas tre excut.
Analyse
Algorithme
Pascal
[init] Tant Que Condition(s) Faire Init
;
Traitement
Tant Que Condition(s) Faire While Condition(s) Do
Syntaxe
Begin
FinTantQue
Traitement
gnrale
Traitement;
FinTantQue
End;

Remarques :

La condition est une expression boolenne. Cest une condition dentre.


Pag
e

Sous Programmes : Procdures


Fonctions
Le traitement nest excut que si la condition est vrifieet
donc
lexcution est de 0 plusieurs fois.

Anne Scolaire : 2010-2011


LPS- 4 Maths 3 -

-1-

Les Procdures & Les


Fonctions

Un sous-programme est une squence d'instructions dclare dans un


programme part et qui peut tre excute une ou plusieurs fois dans un
programme principal grce des appels.
L'appel d'un sous-programme dans le programme principal se fait simplement
par le biais de son propre nom.
Le programme principal s'appelle programme appelant
Le sous-programme s'appelle programme appel
Une variable locale est une variable dclare dans le sous-programme et
n'est utilisable qu' l'intrieur de celui-ci.
Une variable globale est dclare dans la partie dclaration du
programme principal et est utilisable par le programme principal et les
difrents modules (sous-programmes).
Un sous-programme est appel aussi une Procdure ? ou une Fonction ?
Remarque : En Turbo Pascal, la dclaration d'un sous-programme fgure
aprs la dclaration des variables globales du programme principal.
Utilit des sous-programmes :

Faciliter la tache de rsolution.


viter la rptition d'un mme traitement dans un programme.
Rutiliser des sous-programmes dj dfnis.
Faciliter la localisation des erreurs ainsi que leurs corrections.

1. Les Procdures :
Les procdures sont des sous-programmes qui peuvent avoir 0 ou plusieurs
rsultats de type simple ou compose.
En Analyse :
En pascal :
Def Proc nom_proc(pf1,pf2 : type1 ; var
Procedure nom_proc( pf1, pf2 : type1 ; var
pf3 :type2 ;) Rsultat = le(s) resultat(s) de
pf3 : type2 ; ) ;
la procdure (Les paramtres prcds par
Const
var)
..;
Traitement
Type
_1
...; Var
.
..;
Traitement
Function
_n
;
Fin nom_procedure
Procedure
..;
En algorithme utiliser le mme
Begi
entte suivi par lensemble des
n
traitements

Remarque :
; End ;
Une procdure paramtre est un sous-programme qui utilise des
paramtres pour faire passer des informations entre la procdure
appele et le programme appelant.
Les difrents types de paramtres :
Les paramtres formels : figurent dans l'en-tte de la dclaration de la
procdure et sont utiliss dans les instructions de la procdure et l
seulement. Ils correspondent des variables locales.
Pag
e

Sous Programmes : Procdures

Les paramtres effectifs : fgurent dans l'inet


strFonctions
uction d'appel de la
procdure et sont substitus aux paramtres formels au moment de l'appel
de la procdure.
Procedure Permut (var x,y :integer ) ;
Permut (T[i],T[j]) ;

Appel dune Procdure :


Les paramtres effectifs et les paramtres formels doivent
s'accorder du point de vue nombre, ordre et type.
En analyse : P_eff3 = Proc Nom_de_la_procdure (P_ef1,P_eff2,P_ef3)
Indiquer la ou les variables dans lesquelles la procdure renvoie les rsultats
En Algorithme : Proc Nom_de_la_procdure (P_eff1,P_ef2,P_ef3)
En Pascal : Nom_de_la_procdure (P_eff1,P_eff2,P_ef3) ;

Pag
e

L'appel d'une procdure est une instruction d'appel indpendante et ne


peut pas tre dans une expression comme c'est le cas pour les
fonctions.
Rle des paramtres :

Gnraliser une procdure et permettant la communication entre le


programme principal et la procdure.
Lors de l'appel d'une procdure, le programme principal passe les variables
la procdure sous forme de paramtres. La procdure les traite et renvoie les
variables avec leurs nouvelles valeurs au programme principal.
Passage des paramtres :
La substitution des paramtres effectifs aux paramtres formels sappelle
passage de paramtres, elle correspond un transfert de donnes entre le
programme principal (P.P) et la procdure, et linverse. On distingue deux modes
de passages :
Passage par
valeur :
Le passage de paramtres par valeur permet au programme appelant de
transmettre une valeur la procdure appele.
Le transfert dinformation est efectu dans un seul sens, du
programme principal vers la
procdure.
P.P
Procdure
Les paramtres formels ne sont pas prcds par le mot VAR.
Aprs avoir excut la procdure les paramtres effectifs sont inchangs.
Passage par variable :
Le passage de paramtres par variable permet au programme de transmettre
une valeur la procdure et vice - versa.

Le transfert dinformation est efectu dans les deux sens, du


programme principal
vers
la procdure et vice - versa.
P.P
Procdure
Les paramtres formels sont procds par le mot VAR.
Aprs avoir excut la procdure les paramtres efectifs procds par le
mot VAR changent et reoivent le contenu des paramtres formels.
2.

Les fonctions :

Une fonction est un sous-programme qui renvoie une valeur dun seul type. Ce
type sera celui de la fonction.
Def FN nom_fonction (pf1,pf2,
:type1 ;
pf3:type2 ;) : type
rsultat Rsultat =
nom_fonction
nom_fonctionRs

.
.
. Fin
nom_fonction

Function
nom_fonction
(pf1,pf2,
:type1 ;
pf1,pf2, :type2 ;) : type rsultat ;
{Dclaration des objets locaux}
Begin
. ;
Nom_fonction :
=rs ; End ;

Remarques :
Pour les fonctions on utilise uniquement le mode de passage par valeur
A la fn de la partie instruction il faut afecter le rsultat au nom de la

fonction
Les instructions sont excutes la demande de lappelant par une instruction
dappel.
Une fonction peut tre appele dans une :

App
el
Action dAfectation
Action dafichage
Instruction
Conditionnelle
Expression
Arithmtique

Algorithme
V FN nom_F(P_eff)
Ecrire (FN nom_F(P_eff))
Si FN nom_F(P_eff) <0
alors
V
FN nom_F(P_eff)*2

Pasc
al
V := nom_F(P_ef)
;
writeln (nom_F(P_ef)) ;
if nom_F(P_ef) <0 then
V := nom_F(P_eff)*2 ;

Exercice 1 :
Pour chacun des cas suivants donner lalgorithme et le code Pascal dun
sous programme qui permet de :
1) Saisir un caractre alphabtique.
2) Saisir une chane de caractre non vide et de longueur maximale
gale 20.
3) Vrifier est-ce quune chane de caractre donne est alphabtique ou
non.
4) Remplir un tableau T par N lments tris dans lordre croissant.
5) Remplir un tableau T par N lments dune manire alatoire (0 N
100).
6) Aficher un tableau T de N lments.
7) Compter l'occurrence (nombre d'apparition) d'un caractre dans une
chane.
8) Vrifier la prsence d'un caractre dans une chane.
9) Dterminer le maximum dun tableau.
10) Inverser une chane de caractre.

NB : Pour chacun des exercices la solution doit comporter au moins deux modules.

Exercice 2 :
Soit la fonction Traitement suivante crite en Pascal :
FUNCTION Traitement (d,f :integer;T:tab): ..;
VAR

. ;

BEGIN
Indmin: =d;
For i: = d+1 to f do
IF T[i] <
T[indmin]
THEN Begin
Indmin:
= i; End;
Traitement: = indmin;
END;
1.

Dterminer et complter le type de cette fonction ainsi que la


partie dclaration des variables locales.
2. Quelle est la valeur renvoye par la fonction Traitement si d=2, f=5
et le tableau contient les lments suivants :
T
-10
5
0
-6
1
13
i
1
2
3 0
4
5

3.

6
Quel est le rle de cette fonction ?

Exercice 3 :
Soit l'Algorithme suivant :
0)
1)

DEF FN Traitement (T : Tab ; N : Entier) : Entier


NB 0
Pour i de 1 N rpter
Si Non (majus (T [i]) dans ["A", "E", "O", "I", "U", "Y"])
alors
NB NB + 1
Fin si
Fin Pour
2) Traitement NB
3) Fin Traitement
1.

Prciser le rle de la fonction Traitement suite l'excution suivante :


T

2.

"T" "e" "c" "h" "n" "o"


1
2
3
4
10
11

"l" "o" "g"


5
6

"i" "e"
7
8

Transformer la fonction Traitement en une procdure

Exercice 4 :
Soit la fonction boolenne VERIF
suivante : FUNCTION VERIF (Ch:
string): ..; Var
.;
.;
Begin
Test: =
False; Vc:
= 0;
Repeat
Vc: = Vc+1;
If Not (Upcase (Ch [Vc] )in ['A'..'Z']) Then
Begin
Test: = True;
En
d;
Until (Test) or (Vc = Length (Ch));
. ;
End;
1. Complter les pointills par les donnes manquantes.
2. Quel est le rle de cette fonction ?

Exercice 5 :
Soit lalgorithme de la fonction suivante :
0)
1)

DEF FN Traitement (ch : .) : ..


P pos ( , ch), Nb 0
Tant que

(p<>0) faire
Eface (ch, p, 1)
...
...

Fin tant
que
2) Traitement ..
3) Fin Traitement
Cette fonction permet de calculer le nombre des mots dans
une phrase ch. On suppose que :
o La phrase ch ne commence pas par un espace
o La phrase ch ne se termine pas par un espace
o Entre deux mots de la phrase ch il y a un espace unique
a. Complter les points par le code convenable.
b. Transformer la fonction Traitement en une procdure Traitement.

Exercice 6 :
function inconnu (.........:..........;................):..................;
var
......................................;
......................................;
begi
tr:=(1=0) ; i:=0;
n
repeat
i:=i+1;
tr:=(ch[i]=c);
until (i=length(ch))
or (tr);
inconnu:=..........................
......; end;
1) complter les pointilles par les donnes marquantes.
2) dterminer le rsultat retourn par la fonction pour chacun des cas
suivants :
a. inconnu ('algorithme', 'g')
b. inconnu ( 'pascal' ,'H')
c. inconnu ( '1H5','5')
3) donner le rle de la fonction inconnu
4) convertir la fonction inconnue en une procdure
5) recopier et complter le tableau suivant sachant que lappel se
fait en utilisant une variable X:
Appel de la fonction
Appel de la procdure
inconnu
inconnu
.
.
.

Exercice 7 :
Ecrire un programme permettant dafficher tous les couples dentiers
(m,n) vrifiant la proprit suivante :
M [1,100] et n[2,15]
Et m figure dans lcriture du produit m.n
Exemples :
1- Si m = 20 et n= 6
Alors le produit m.n = 120 contient le nombre 20 dans ce cas le
couple (20,6) sera afich.
2- Si m = 20 et n = 12

Alors le produit m.n = 20 * 12 = 240 ne contient pas le nombre 20.

Exercic
e8:
Sur les touches (2, 3, 4, 5, 6, 7, 8 et 9) du clavier dun tlphone
portable, sont inscrites des lettres pour crire des messages en plus des
chiffres.
Par exemple, sur la touche 5 sont inscrites les
lettre J, K et L. Pour taper la lettre J on appuie
une seule fois.
Pour taper la lettre K on tape
deux fois.
Pour taper la lettre L on appuie
trois fois.
Ecrire un programme pascal permettant de dterminer et dafficher le
nombre total dappuies sur les touches du clavier dun tlphone portable
pour saisir un mot donn de N lettres, supposes non accentues.
(4<=N<=9).
Indicatio
n:
La figure suivante donne la rpartition des lettres sur les touches du
clavier dun tlphone portable.
1
2
3
AB
DE
C
F
4
5
6
GHI
JKL
MNO
7
8
9
PQR
TUV
WXY
S
Z
*
0
#
+

Exercice 9 :
Soit l'algorithme suivant :
0)
1)

DEF FN Somme (p : entier) : entier


S 0
Pour i de 1 (p div 2)
Rpter
Si (p mod i = 0)
Alors
S
S+i
FinSi
Fin
pour
2) Somme
S
3) Fin
Somme

1.
Excuter cet algorithme pour p=6 puis
donner son rle.
2. Transformer la fonction Somme en une
procdure.
3.
Ecrire un algorithme d'une procdure Saisie, permettant de saisir
deux entiers positifs non nuls.
4.
En utilisant les deux modules Somme et saisie, crire un
algorithme d'un programme intitul Amis, qui permet de saisir deux
entiers positifs non nuls et d'aficher s'ils sont amis ou non. Sachant que
deux entiers m et n sont dis amis, si la somme des diviseurs de n est
gal m et inversement.

Exercice 10 :
T tant un tableau de dimension N_MAX (N_MAX = 100), remplir par N
entiers (N N_MAX).
On vous demande dcrire un programme nomm ECLATEMENT qui
permet de:
Lire un entier N strictement positif (0 < N N_MAX).
Remplir le tableau T.
clater T en deux tableaux TN (contenant J lment
ngatifs de T) et TP
(contenant K lment positifs de T).
Aficher les deux tableaux TN et TP.

Exercice
11 :
Un nombre est dit parfait sil est gal la somme de ces diviseurs
(sauf lui mme). Exemple : 6=3+2+1.
Ecrire une analyse et un algorithme du programme intitul parfait qui
permet de saisir un
entier strictement positif puis il vrifie sil
est parfait.

Exercice
12 :
La multiplication Russe est une mthode particulire permettant
la multiplication de deux entiers A et B en utilisant seulement la
multiplication par 2, la division par 2 et laddition.
Exemple : pour A =17 et B = 19, le produit de A par B se
fait comme suit :
A
B
17
19
Le premier nombre est divis par 2 (division entire) et le deuxime est
multipli par 2 : on aura
8
38
Le processus se rpte jusqu avoir dans la
premire colonne 1 :
17
19
8
38
4
76
2
152
1

304
Le rsultat est la somme des nombres de la deuxime colonne qui sont en
face des nombres impairs de la premire colonne (donc les nombres de la
deuxime colonne qui sont en face des nombres pairs de la premire
colonne seront ignors).
17
8
4
2
1

19
38
76
152
304

Ignor

Ignor

Ignor

17 * 19 = 19 + 304
= 323
On veut crire un programme qui lit deux entiers positifs non nuls
et infrieur 100, calcule et affiche le produit de deux entiers par la
mthode Russe.
u T par N chanes des caractres tel que la taille de
chacune est dans [3..20].
Exercic
Chercher et afficher tous les chanes Totalogramme
e 13 :
contenue dans T.
Soit le
programm
Une chane de caractres est dite Totalogramme si elle
e intitul
commence et se termine par la mme lettre. (Sans
info qui
permet de
distinction entre majuscule et minuscule)
:
Exemple : Pour N=6 :

Bonjour
se s
elle
Saisir Samir syTstme
t
e
m
p
o
ra
i
re
m
en
1
2
3
la taille
N dun
4
5
6
tableau
Les mots totalogramme sont : temporairement, ses, elle
T, avec
(1<N<
Exercice 14 :
15).

Un texte est dit tautogramme si tous les mots commencent par


R
la mme lettre.
e
Exemple :
m
p
Mazarin, ministre malade, mditait mme moribond
l
malicieusement mille malttes On suppose que la phrase
i
r
est crite correctement. (Pas despace en double)
u
n
t
a
b
l
e
a

Ecrire un programme qui permet de vrifier si une chane de


caractre saisie au clavier est
tautogramme ou non.

Exercice 15 :
Ecrire un programme qui permet de dire si deux chanes
ch1 et ch2 (non vides) sont anagrammes ou non.

De
ux
ch
an
es
so
nt
dit
es
an

anagrammes.

E
x
e
r
c
i
c
e
1
6

agr
am

me

Ecrire un programme qui permet de remplir un tableau T par N


caractres alphabtique (2<=N<=10) puis dterminer et
aficher le nombre doccurrence dun caractre alphabtique
donne dans le tableau T.
E
x
e
m
p
l
e

s si
ell
es
so
nt
for
m
es
par
les
m
me
s
car
act
re
s.
Ex
em
ple
:
Chien
et Chine
sont

Tf

Si Car ="r" le programme afiche le caractre r existe


dans le tableau .
Si Car="a" le programme afiche le caractre a nexiste
pas dans le tableau.

Les Procdures & Les


Fonctions
Un sous-programme est une squence d'instructions dclare dans
un programme part et qui peut tre excute une ou plusieurs fois
dans un programme principal grce des appels.
L'appel d'un sous-programme dans le programme principal se fait
simplement par le biais de son propre nom.
Le programme principal s'appelle programme appelant
Le sous-programme s'appelle programme appel
Une variable locale est une variable dclare dans le sousprogramme et n'est utilisable qu' l'intrieur de celui-ci.

Une
Utilit des sous-programmes :
variable
Faciliter la tache de rsolution.
globale
viter la rptition d'un mme traitement dans un
est
programme.
dclare
dans la
Rutiliser des sous-programmes dj dfnis.
partie
Faciliter la localisation des erreurs ainsi que leurs corrections.
dclarati
on
du
program
1. Les Procdures :
me
Les procdures sont des sous-programmes qui peuvent avoir 0 ou
principal
plusieurs rsultats de type simple ou compose.
et
est
utilisable
En Analyse :
En pascal :
par
le
program
Def Proc nom_proc(pf1,pf2 : type1 ; var
Procedure nom_proc( pf1, pf2 : ty
me
:type2 ;)
pf3 : type2 ; ) ;
principal
et
les
Rsultat
= le(s) resultat(s) de la procdure (Les
Const ..;
difrent
paramtres prcds par var)
s
Type ...;
modules
Traitement_1
(sousVar ..;
program
.
mes).
Function ;
Un sousTraitement_n
program
Procedure ..;
me Fin
estnom_procedure
Begin
appel
aussi En algorithme utiliser le mme entte
;
une suivi par lensemble des traitements
Procd
End ;
ure ? ou
une
Remarque :
Fonctio
n?
Une procdure paramtre est un sous-programme qui utilise
Remarque
des paramtres pour faire passer des informations entre la
: En Turbo
procdure appele et le programme appelant.
Pascal,
la
dclaration
Les difrents types de paramtres :
d'un
sousprogramme
Les paramtres formels : fgurent dans l'en-tte de la dclaration
fgure aprs
de la procdure et sont utiliss dans les instructions de la procdure
la
et l seulement. Ils correspondent des variables locales.
dclaration
Les paramtres effectifs : fgurent dans l'instruction d'appel de la
des
procdure et sont substitus aux paramtres formels au moment de
variables
l'appel de la procdure.
globales du
Procedur Permut
programme
e Permut (T[i],T[j]
principal.
(var
);
x,y :inte
ger ) ;

Appel dune Procdure :

Les
para
mtr
es
effect
ifs et
les
para
mtr
es
form
els
doive
nt
s'acc
order
du
point
de
vue
nomb
re,
ordre
et
type.
En
analyse :
P_ef3 =
Proc
Nom_de_la_
procdure
(P_ef1,P_ef
2,P_ef3)
In
di
q
u
e
r
la
o
u

les variables dans lesquelles la procdure renvoie les


rsultats
En Algorithme : Proc Nom_de_la_procdure (P_ef1,P_ef2,P_ef3)
En Pascal : Nom_de_la_procdure (P_ef1,P_ef2,P_ef3) ;
L'appel d'une procdure est une instruction d'appel
indpendante et ne peut pas tre dans une expression comme
c'est le cas pour les fonctions.
Rle des paramtres :
Gnraliser une procdure et permettant la communication entre le
programme principal et la procdure.
Lors de l'appel d'une procdure, le programme principal passe les
variables la procdure sous forme de paramtres. La procdure les
traite et renvoie les variables avec leurs nouvelles valeurs au
programme principal.
Passage des paramtres :
La substitution des paramtres efectifs aux paramtres formels
sappelle passage de paramtres, elle correspond un transfert de
donnes entre le programme principal (P.P) et la procdure, et linverse.
On distingue deux modes de passages :

Passage par valeur :


Le passage de paramtres par valeur permet au programme
appelant de transmettre une valeur la procdure appele.
Le transfert dinformation est efectu dans un seul sens, du
programme principal vers la procdure.
P.P
Procdure
Les paramtres formels ne sont pas prcds par le mot VAR.
Aprs avoir excut la procdure les paramtres efectifs sont
inchangs.
Passage par variable :
Le passage de paramtres par variable permet au programme de
transmettre une valeur la procdure et vice - versa.
Le transfert dinformation est efectu dans les deux sens, du
programme principal vers la procdure et vice - versa.
P.P
Procdure
Les paramtres formels sont procds par le mot VAR.
Aprs avoir excut la procdure les paramtres efectifs procds
par le mot VAR changent et reoivent le contenu des paramtres
formels.
2.

Les fonctions :

Une fonction est un sous-programme qui renvoie une valeur dun seul
type. Ce type sera celui de la fonction.

onctions on utilise uniquement le mode de passage par


Def FN
valeur
nom_fonction
A
la
fn
de
la partie instruction il faut afecter le rsultat au nom
(pf1,pf2, :typ
e1 ; pf3:type2 ; de la fonction
) : type
Les instructions sont excutes la demande de lappelant par une
rsultat
instruction dappel.
Rsultat =
nom_fonction
nom_fonction
Rs

..

P
o
u
r
le
s
f

Appel

Algorithme

. Action
dAfectatio
n

Fin
nom_fonction

Remarques
:

Une fonction peut tre appele dans une :


Pascal

V
FN V :=
nom_F(P_ef) nom_F(P_ef)
;

Action
daffichage

Ecrire
(FN writeln
nom_F(P_ef) (nom_F(P_ef)
)
);

Instruction
Conditionn
elle

Si
FN if
nom_F(P_ef) nom_F(P_ef)
<0 alors
<0 then

Expression
V
FN V :=
Arithmtiqu nom_F(P_ef) nom_F(P_ef)*
e
2;
*2

Exercice 1 :
Pour chacun des cas suivants donner lalgorithme et le code Pascal dun
sous programme qui permet de :

1) Saisir un caractre alphabtique.


0) Def Proc saisie
(var c :
caractre)
1) Rpter
Ecrire
(Donner un
caractre
alphabtique
)
Lire(c)
Jusqu'
majus(c)
dans
[A..Z]
2) Fin saisie

2) Saisir une

vrai

chane de
caractre
non vide
et de
longueur
maximale
gale
20.

Sinon
Test
faux
FinSi
i i+1

0) Def Proc
Jusqu'
saisie (var
i>long(ch)
ch :
ou
chaine)
test=faux
1) Rpter
Ecrire
2) Verif
(Donner
test
une
3) Fin Verif
chaine 4) Remplir un tableau T par N entiers tris dans lordre croissant.
non vide
0) Def Proc
de
tritab(var
longueur
t : tab, n :
max 20)
Lire(ch)

1)

Jusqu'
long(ch)
dans
[1..20]
2) Fin saisie

3) Vrifer
est-ce
quune
chane de
caractre
donne
est
alphabtiq
ue ou non.

2)
3)

entier)
Ecrire
(Donner
lment 1
du
tableau)
Lire(t[1])
Pour i de 2
a n faire
Rpter
Ecrire
(Donner
T[,i,]
suprieur
, t[i-1])
Lire(t[i])
Jusqu'
(t[i]>t[i-1])
FinPour
Fin TriTab

0) Def FN
Verif (ch
chaine)
boolen 4)
1) Rpter
Si
majus(ch[i
]) dans 5) Remplir un tableau T par N entiers positif dune manire
alatoire (0 < N 100).
[A..Z]
Alors
5) Def Proc
Test

Aleatoire(var

t : tab, var
Occ(c :
n : entier)
caractre,
6) Repeter
ch :chaine) :
Ecrire
entier
(Donner
1) n 0
0<n100) 2) Pour i de 1
Lire (n)
n faire
Jusqu' n
Si ch[i]=c
dans [1..100] alors
7) Pour i de 1
n n+1
n faire
Fin Pour
T[i]alea(253) Occ n
5)
4) Fin Occ
FinPour
8)Vrifer la prsence d'un caractre dans une chane.
8) Fin Aleatoire 0) Def FN
6)Afficher
Present
un tableau
(c :
T de N
caractr
lments.
e, ch :
0) Def
Proc
Affich
e (t :
tab,
n :enti
er)
1) Pour i
de 1 a
n faire
Ecrire
(t[i],
| )
Fin
Pour
2) Fin
Affich
e
7)Compter
l'occurrenc
e (nombre
d'apparitio
n) d'un
caractre
dans une
chane.
0) Def FN

1)
2)
3)

4)

chaine) :
boolen
Test
faux
i1
Repeter
Si
(ch[i]=c)
alors
Test
vrai
FinSi
i i+1
jusqu'
i>long(c
h) ou
test=vrai
present
test
Fin
Present

9)Dterminer le maximum dun tableau.

0) Def FN
max (t :
tab) :
entier
1) Mt[1]
2) Pour i
de 2 n
faire
Si
t[i]>m
alors
M
t[i]
FinSi
Fin Pour
3) Max
m
4) Fin Max
10) Inver
ser une
chane de
caractre.
0) Def
Proc
Invers
e (var
ch :
chaine
)
1) Pour i
de 1
n div 2
faire
X
Ch[i]
Ch[i]

ch[ni+1]
Ch[ni+1]
x
Fin
Pour
2) Fin
Invers

e
NB : Pour chacun des exercices la solution doit comporter au moins deux
modules.

Exercice 2 :
Soit la fonction Traitement suivante crite en Pascal :
FUNCTION Traitement (d,f :integer;T:tab): Integer;
VAR

indmin, i : integer ;

BEGIN
Indmin: =d;
For i: = d+1 to f do
IF T[i] < T[indmin] THEN
Begin
Indmin: = i;
End;
Traitement: = indmin;
END;
1. Dterminer et complter le type de cette fonction ainsi que la partie
dclaration des variables locales.
2. Quelle est la valeur renvoye par la fonction Traitement si d=2, f=5
et le tableau contient les lments suivants : Traitement = 4
- 1 1
T 1 5 0
6 0 3
0
i

2 3 4 5

3. Quel est le rle de cette fonction ?


Dtermine le minimum dune suite dlments successifs dans
un tableau T entre d et f

Exercice 3 :
Soit l'Algorithme suivant :
0) Def FN Traitement (T : Tab ; N : Entier) : Entier
1) NB 0
Pour i de 1 N Faire

Si
2) Traitement NB
3) Fin Traitement
No
n
T "T "e "c "h "n "o "l "o "g "i "e
" " " "
"
" " " " " "
1

1
11
0

1. Prciser le rle de la fonction


Traitement suite l'excution
suivante :

(m
aju
s
(T Dtermine de nombre de consonne dans un tableau de
[i]) caractres
da
ns 2. Transformer la fonction Traitement en une procdure
0) Def Proc Traitement (T : Tab ; N : Entier ; var nb:
["A
Entier)
",
1)
NB
0
"E"
Pour i de 1 N Faire
,
"O
Si Non (majus (T [i]) dans ["A", "E", "O", "I", "U",
",
"Y"]) alors
"I"
NB NB + 1
,
"U
Fin si
",
Fin Pour
"Y"
])
2) Fin Traitement
alo
rs Exercice 4 :
Soit la fonction boolenne VERIF suivante :
NB

NB
+
1
Fin
si
Fi
n
Po
ur

FUNCTION VERIF (Ch: string): Boolean;


Var test:boolean;
Vc:integer;
Begin
Test: = False;
Vc: = 0;
Repeat
Vc: = Vc+1;
If Not (Upcase (Ch [Vc] )in ['A'..'Z']) Then
Begin
Test: = True;
End;

U
n
t
i
l
(
T
e
s
t
)
o
r
(
V
c
=
L
e
n
g
t
h
(
C
h
)
)
;
V
e
r
i
f
:
=
t
e
s
t
;
End;

1. Complter les pointills par les donnes manquantes.


2. Quel est le rle de cette fonction ?
Vrifie est ce que une chaine contient des caractres qui ne
sont pas des lettres

Exercice 5 :
Soit lalgorithme de la fonction suivante :
0) Def FN Traitement (ch : chaine) : entier
1) P pos ( , ch), Nb 0
Tant que (p<>0) faire
Eface (ch, p, 1)
Nb nb+1
P pos ( , ch)
Fin tant que
2) Traitement nb+1
3) Fin Traitement
Cette fonction permet de calculer le nombre des mots dans une phrase
ch.
On suppose que :
o La phrase ch ne commence pas par un espace
o La phrase ch ne se termine pas par un espace
o Entre deux mots de la phrase ch il y a un espace unique
a. Complter les points par le code convenable.
b. Transformer la fonction Traitement en une procdure Traitement.
0) Def Proc Traitement (ch : chaine ; nb : entier)
1) P pos ( , ch)
2) Nb 0
3) Tant que (p<>0) faire
Efface (ch, p, 1)
nb nb+1
p pos ( , ch)
Fin Tant que
4) nb nb+1
5)Fin Traitement

Exercice 6 :

function
inconnu
(ch:string;
c:char):bo
olean;

rn par la fonction pour chacun des cas suivants :


a. inconnu ('algorithme', 'g') inconnu = vrai
b. inconnu ( 'pascal' ,'H') inconnu = faux
c. inconnu ( '1H5','5') inconnu = vrai
3) donner le rle de la fonction inconnu
la fonction inconnu permet de checher un caractre c
dans une chaine ch et renvoie sil existe ou non
4) convertir la fonction inconnu en une procdure
Procedure inconnu (ch:string;c:char,var tr:boolean);

var
i:inte
ger;

var

tr:bo
olean;

i:integer;
tr:boolean;

begin

begin

tr:=(1
=0) ; i:=0;

tr:=(1=0) ;

repe

i:=0;

at
i

repeat
i:=i+1;

:=i+1
;

tr:=(ch[i]=c);
t

r:=(ch
[i]=c);
until
(i=length(ch
)) or (tr);
inconnu:=tr
;
end;
1) comp
lter
les
pointi
lles
par
les
donn
es
marq
uant
es.
2) dter
mine
r le
rsult
at
retou

until (i=length(ch)) or (tr);


end;

5) recopier et complter le tableau suivant sachant que lappel se


fait en utilisant une variable X:
Appel de la
Appel de la
fonction
procdure
inconnu
inconnu
X :=inconnu(
ch,c) ;

Inconnu(ch,
c,x) ;

Exercice 7 :
Ecrire un programme permettant dafficher tous les couples dentiers
(m,n) vrifant la proprit suivante :
M [1,100] et n[2,15]
Et m fgure dans lcriture du produit m.n
Exemples :
1- Si m = 20 et n= 6
Alors le produit m.n = 120 contient le nombre 20 dans ce cas le
couple (20,6) sera affich.

2- Si m
= 20
et n =
12
Alors le
produit
m.n = 20
* 12 =
240 ne
contient
pas le
nombre
20.

end;
procedure couple(m,n:byte);
var
chm, chp:string;
p:byte;
begin
str(m,chm) ;
str(n*m,chp);

program
Welcome;
uses
WinCrt;
var
m,n,i,j:byt

p:=pos(chm,chp);
if p<>0 then
writeln(m,',',n,'Le couple verifie les proprits')
else
writeln('Le couple ne vrifie pas les proprits');

e;
procedure
saisie(var
m,n:byte);
begin
repeat
writeln('Do

end;
begin
saisie(m,n);
couple(m,n);
end.

nner m dans
[1..100]');
readln(m);
until m in
[1..100];

Exercice 8 :
Sur les touches (2, 3, 4, 5, 6, 7, 8 et 9) du clavier dun tlphone
portable, sont inscrites des lettres pour crire des messages en plus des
chifres.

repeat
writeln('Do
nner n dans
[2..15]');
readln(n);
until n in
[2..15];

Par exemple, sur la touche 5 sont inscrites les lettre J, K et L.


Pour taper la lettre J on appuie une seule fois.
Pour taper la lettre K on tape deux fois.
Pour taper la lettre L on appuie trois fois.
Ecrire un programme pascal permettant de dterminer et dafficher le
nombre total dappuies sur les touches du clavier dun tlphone

procedure rempli(var n:byte;var ch:string);

portable
pour saisir
un mot
donn de N
lettres,
supposes
non
accentues.
(4<=N<=9)
.

var
i:byte;
test:boolean;
begin
repeat

Indication :

writeln('Donner une chaine sans caracteres accentus') ;

La fgure
suivante
donne la
rpartition
des lettres
sur les
touches du
clavier dun
tlphone
portable.
1

readln(ch);
n:=length(ch);
i:=0;
test:=true;
repeat
i:=i+1;

if not(upcase(ch[i]) in ['A'..'Z']) then

ABC
4

GHI

JKL

PQR
S

TUV

*+

test:=false;
until (test=false) or (i=n);
until (n in [4..9]) and test;
end;
procedure appui (ch:string;var nbr:byte;n:byte);
WXY
var

program caract;
uses WinCrt;
var
nbr,n:byte;
ch:string;

i:byte;
begin

nbr:=0;
for i:=1 to n do
begin
case upcase(ch[i]) of
'A','D','G','J','M','P','T','W':nbr:=nbr+1;

1) S 0
'B','E','H','K','N','Q','U','X':nbr:=nbr+2;

Pour i de 1 (p div 2) faire

'C','F','I','L','O','R','V','Y':nbr:=nbr+3;

Si (p mod i = 0) Alors

'S','Z':nbr:=nbr+4;

S S+i

end;

FinSi

end;

Fin pour

end;

2) Somme S
3) Fin Somme

begin
rempli(n,ch);

1. Excuter cet algorithme pour p=6 puis donner son rle.


Pour p=6 la somme est gale 6 la fonction permet de calculer
la somme des diviseurs

appui(ch,nbr,n);

writeln(nbr);

2. Transformer la fonction Somme en une procdure.


0) DEF Proc Somme (p :entier ; var s :entier)
1) S 0
2) Pour i de 1 (p div 2) faire
Si (p mod i=0) alors
S s+i

end.

FinSi
FinPour

Exercice
9:
Soit
l'algorithme
suivant :
0)DE
F
FN
So
m
m
e
(p
:
en
tie
r)
:
en
tie
r

3) Fin Somme
3. Ecrire un algorithme d'une procdure Saisie, permettant de saisir
deux entiers positifs non nuls.
0) DEF Proc saisie (var x,y : entier)
1) Rpter
Ecrire (Donner deux entiers x et y positifs et non nuls)
Lire (x,y)
Jusqu' (x0) ET (y0)
2) Fin Saisie
4. En utilisant les deux modules Somme et saisie, crire un algorithme
d'un programme intitul Amis, qui permet de saisir deux entiers positifs
non nuls et d'afficher s'ils sont amis ou non. Sachant que deux entiers m
et n sont dis amis, si la somme des diviseurs de n est gal m et
inversement.
0) Debut Amis
1) Proc Saisie(m,n)
2) Sn somme(n)
3) Sm somme(m)
4) Si (sm=n) ET (sn=m) alors

Ecrir
e (m,
et
,n,
sont
deux
nomb
res
amis
)

On vous demande dcrire un programme nomm ECLATEMENT qui


permet de:

Sino
n

uses WinCrt;

Ecrir
e (m,
et
,n,
ne
sont
pas
deux
nomb
res
amis
)
FinSI
5) FIN
Amis

Lire un entier N strictement positif (0 < N N_MAX).


Remplir le tableau T.
clater T en deux tableaux TN (contenant J lment ngatifs
de T) et TP (contenant K lment positifs de T).
Afficher les deux tableaux TN et TP.
program Welcome;

const
nmax=100;
type
tab=array[1..nmax] of integer;
var
t,tn,tp:tab;
n,nn,np:byte;
procedure saisie (var n:byte);
begin
repeat
writeln('Donner n la taille du tableau');

Exercice
10 :
T tant un
tableau de
dimension
N_MAX
(N_MAX =
100),
remplir par
N entiers
(N
N_MAX).

readln(n);
until (n in [1..nmax]);
end;
procedure rempli(var t:tab;n:byte);
var
i:byte;
begin
for i:=1 to n do
begin
writeln('Donner lment T[',i,']=');

readln(t[i]);
end;

var
i:byte;

end;

begin

procedure

for i:=1 to n do

eclat
(t:tab;n:byte;
var
tn,tp:tab;var

write (t[i],' | ');


writeln;

nn,np:byte);

end;

var

begin

i:byte;

saisie(n);

begin

rempli(t,n);

nn:=0;

eclat(t,n,tn,tp,nn,np);

np:=0;

affiche (t,n);

for i:=1 to n

affiche(tn,nn);

do

affiche(tp,np) ;
if

t[i]<0

then

end.

begin
nn:=nn+1;

Exercice 11 :

tn[nn]:=t[i];

Un nombre est dit parfait sil est gal la somme de ces diviseurs (sauf
lui mme).

end

Exemple : 6=3+2+1.

else

Ecrire une analyse et un algorithme du programme intitul parfait qui


permet de saisir un entier strictement positif puis il vrife sil est
parfait.

begin
np:=np+1;

program nb_parfaits;

tp[np]:=t[i];

uses wincrt;

end;

var x:longint;

end;

procedure saisie(var x:longint);

procedure

begin

affiche
(t:tab;
:byte);

repeat

writeln('Sur
quel entier
naturel
voulez-vous
effectuer le
test du
nombre
parfait?');
readln(x);

writeln(x,' Nombre non parait');


end;
begin
saisie(x);
parfait(x);
end.

until (x>0);

Exercice 12 :

end;

La multiplication Russe est une mthode particulire permettant


la multiplication de deux entiers A et B en utilisant seulement la
multiplication par 2, la division par 2 et laddition.

procedure
parfait(x:lon
gint);

Exemple : pour A =17 et B = 19, le produit de A par B se fait comme


suit :

var
s,d:longint;

17

19

Le premier nombre est divis par 2 (division entire) et le deuxime est


multipli par 2 : on aura

begin
s:=0;
for d:=1
to (x div 2)

Le processus se rpte jusqu avoir dans la premire colonne 1 :

do
if x
mod d=0
then

s:=s+d;
if s=x
then

parfait')
else

17

19

38

76

152

304

Le rsultat est la somme des nombres de la deuxime colonne qui sont


en face des nombres impairs de la premire colonne (donc les nombres
de la deuxime colonne qui sont en face des nombres pairs de la
premire colonne seront ignors).

writeln(x,'
Nombre

38

1
7

19

38

Ignor

76

Ignor

15
2

30
4

Ignor

a,b:byte;
r:longint;

procedure saisie (var a,b : byte);

17 * 19
19 = +
30
4

On
veut
crire
un
progr
amm
e qui
lit
deux
entier
s
positif
s non
nuls
et
infri
eur
100,
calcul
e
et
affich
e
le
produ
it de
deux
entier
s par
la
mth
ode
Russe
.
progr
am
Russe
;
uses
wincr
t;
var

=
323

begin
repeat
writeln('Donner deux entiers a et b entre 1 et 99');
readln(a,b);
until (a in [1..99]) and (b in [1..99]);
end;

procedure mult (a,b:byte; var r :longint);


var
x,y:longint;
begin
x:=a;
y:=b;
repeat
x:=x div 2;
y:=y*2;
until (x=1);
r:=b+y;
end;
begin
saisie(a,b);
mult(a,b,r);
writeln(a, ' * ', b ,' = ',r);
end.

Exercice 13
:
Soit le
programme

Une chane de caractres est dite Totalogramme si elle commence et


se termine par la mme lettre. (Sans distinction entre majuscule et
minuscule)
Exemple : Pour N=6 :

intitul info
qui permet

Samir systme

de :
Saisir
la
taille
N
dun
tablea
u T,
avec
(1<N
<15).
Rempl
ir un
tablea
uT
par N
chan
es
des
caract
res
tel
que la
taille
de
chacu
ne est
dans
[3..20
].
Cherc
her et
affich
er
tous
les
chan
es
Totalo
gram
me
conte
nue
dans
T.

temporairem
ent

Bonjou
r

ses

elle

Les mots totalogramme sont : temporairement, ses, elle

program info;
uses wincrt;
type
tab=array[1..14] of string[20];
var
n,i:byte;
t:tab;

procedure saisie (var n : byte);


begin
repeat
writeln('Donner N la taille du tableau entre 2 et 14');
readln(n);
until (n in [2..14]);
end;

procedure
remplir
(n:byte;

var

t:tab);

if t[i][1]=t[i][length(t[i])] then
write(t[i],' | ');
end;

begin
for i:=1 to n
do
repeat
writeln('Donn
er la chaine
de la case ',
i);
readln(t[i]);
until
(length(t[i]) in
[3..20]) ;
end;

begin
saisie(n);
remplir(n,t);
totalo(n,t);
end.

Exercice 14 :
Un texte est dit tautogramme si tous les mots commencent par la
mme lettre.
Exemple :
Mazarin, ministre malade, mditait mme moribond malicieusement
mille malttes
On suppose que la phrase est crite correctement. (Pas despace en
double)

procedure
totalo
(n:byte;
t:tab);
begin
writeln('Les
chaines
totalogramm
es sont:');
for i:=1 to n
do

Ecrire un programme qui permet de vrifer si une chane de caractre


saisie au clavier est tautogramme ou non.
program Welcome;
uses WinCrt;
var
ch:string;
procedure saisie (var ch:string);
begin
repeat

writeln('Donn
er

une

chaine');

else
tauto:=true;
end;

readln(ch);

begin

until(pos('
',ch)=0);

saisie(ch);

end;

if tauto(ch) then

function

writeln( ch , ' est un tautogramme')

tauto
(ch:string):bo

else
writeln(ch, ' n''est pas un tautogramme');

olean;

end.

var
c:char;

Exercice 15 :

p:byte;

Ecrire un programme qui permet de dire si deux chanes ch1 et ch2 (non
vides) sont anagrammes ou non.

begin

Deux chanes sont dites anagrammes si elles sont formes par les

c:=ch[1];

mmes caractres.

repeat

Exemple : Chien et Chine sont anagrammes.

p:=pos('
',ch);

program Welcome;
uses WinCrt;

delete(ch,1,
p);

var
ch1,ch2:string;

until
(c<>ch[1])

or

procedure saisie(var ch1,ch2: string);

(p=0);

begin

if

repeat

c<>ch[1]

then
tauto:=false

writeln('Donner ch1 non vide');


readln(ch1);

writeln('Do
nner

ch2

non vide');
readln(ch

until (i>length(ch1)) or (p=0);


if p=0 then
test :=false;
anag:=test;

2);
until
(length(ch1)<
>0)

and

(length(ch2)<
>0)

and

end;
begin
saisie(ch1,ch2);
if anag(ch1, ch2) then

(length(ch1)=
length(ch2));
end;
function
anag(ch1,

writeln(ch1,' et ', ch2,' sont anagrammes')


else
writeln(ch1,' et ', ch2,' ne sont pas anagrammes')
end.

ch2:string):b
oolean;
var
i,p:byte;
test:boole

Exercice 16 :
Ecrire un programme qui permet de remplir un tableau T par N
caractres alphabtique (2<=N<=10) puis dterminer et afficher le
nombre doccurrence dun caractre alphabtique donn par lutlisateur
dans le tableau T.
Exemple :

an;

Af r A

W c

begin
test:=true;
i:=1;

Si Car ="r" le programme affiche le caractre r existe dans le


tableau .
Si Car="a" le programme affiche le caractre a nexiste pas

repeat
p:=pos(ch
1[i],ch2);
i:=i+1;

dans le tableau.
program Welcome;
uses WinCrt;
type

for i:=1 to n do
tab=array[1..
10] of char;
var

repeat
writeln('Donner un caractre');
readln(t[i]);

m,n,i,j:byte;

until upcase(t[i]) in ['A'..'Z'];

t:tab;

end;

c:char;

function occ(t:tab;n:byte;c:char):byte;

procedure

var

saisie(var
n:byte);
begin
repeat

i,oc:byte;
begin
oc:=0;
for i:=1 to n do

writeln('Donn
er n dans

if t[i]=c then
oc:=oc+1;

[2..10]');
occ:=oc;
readln(n);
end;
until n in
[2..10];
end;
procedure
rempli(var
t:tab; n:byte);
var
i:byte;
begin

begin
saisie(n);
rempli(t,n);
writeln('Donner le caractre recherch');
readln(c) ;
if occ(t,n,c)<>0 then
writeln('le caractre ',c,' existe dans le tableau et apparait ',occ(t,n,c),'
fois')

else

writeln('le caractre ',c,' n''existe pas dans le tableau');


end.

La structure : Tant que faire


La structure itrative condition darrt : tant que faire est utilis e
lorsque la condition doit tre teste avant lexcution du traitement
rpter.
Structure utilise lorsque le nombre de traitement nest pas connu
lavance.

Vocabulaire et
syntaxe :

Au niveau de
lanalyse et
lalgorith
me
R=[init]Tant que
(condition) faire
Instruction
1

Instruction
n
Fin tant que

Au niveau pascal
While (condition)
do
Begi
n
Instruction 1 ;

Instruction
n; End;

Les instructions seront excutes au


moins zro fois
Si la valeur de la condition est vraie, l'ordinateur doit excuter
les instructions 1 n.
Si la valeur de la condition est fausse, l'excution des
instructions 1 n s'arrte et l'ordinateur passe l'excution de
l'instruction qui se trouve juste aprs fin tant que
La boucle tant que nest utilise si la condition nest pas vrifie ds la
premire fois.
Activit
1.
Ecrire une analyse un algorithme puis un programme pascal intitul
SOMME qui permet dafficher la somme dune liste dentiers saisie. La
liste se termine par 0 qui ne fera pas partie de la somme.
Exempl
e:
5, -3, 7, 0 =>
S=9
Activit
2.
Ecrire une analyse, un algorithme et sa traduction en PASCAL d'un
programme qui permet de :
_ Saisir un entier N (avec

2N20)
_ Charger un tableau T par N
entiers.
_ Afficher lindice ind du premier
nombre pair.
Activit
3.
On se propose de calculer le PGCD de deux entiers positifs en
utilisant la mthode de diffrence : Le plus grand des entiers A et B
reoit la valeur de la diffrence des entiers jusqu A = B.
Activit
4.
Ecrire un programme intitul PALINDROME, qui permet de lire un mot M
qui ne dpasse pas
15 caractres et de vrifier sil est palindrome ou non. (Un mot
palindrome se lit dans les deux sens tel que les mots RADAR, ELLE,KAYAK,
).
Activit 5.
Un nombre Armstrong est un nombre dont la somme des cubes des chiffres le
composant vaut ce nombre.
3
3
3
Exemple : 371 = 3 + 7 + 1
Les nombres d'Armstrong trois chifres sont : 0, 1, 153, 370, 371 et 407.

La structure : Tant que faire


Dfinition :
La structure itrative condition darrt : tant que faire est utilis lorsque la condition
doit tre teste avant lexcution du traitement rpter et le nombre de traitement
nest pas connu lavance.
Vocabulaire et syntaxe :
Au niveau de lanalyse
et lalgorithme
Tant que (condition) faire
Instruction 1

Instruction n
Fin tant que

Au niveau pascal
While (condition) do
Begin
Instruction 1 ;

Instruction n;
End;

Les instructions seront excutes au moins zro fois


Si la valeur de la condition est vraie, l'ordinateur doit excuter les instructions 1 n.
Si la valeur de la condition est fausse, l'excution des instructions 1 n s'arrte et
l'ordinateur passe l'excution de l'instruction qui se trouve juste aprs fin tant que
La boucle tant que peut ne pas tre utilis si la condition nest pas vrife de la
premire fois.
Activit 1.
Ecrire une analyse un algorithme puis un programme pascal intitul SOMME qui permet
dafficher la somme dune liste dentiers saisie. La liste se termine par 0 qui ne fera pas
partie de la somme.
Exemple :
5, -3, 7, 0 => S = 9
program somme;
uses wincrt;
var
som, n:integer;
begin
writeln('Donner un nombre:');
readln(n);
som:=0;
while(n<>0) do
begin
som:=som+n;
writeln('Donner un nombre:');
readln(n);
end;
writeln('La somme =');
end.
Activit 2.
Ecrire une analyse, un algorithme et sa traduction en PASCAL d'un programme qui
permet de :
_ Saisir un entier N ( avec 2<N<20 )

_ Charger un tableau T par N entiers.


_Afficher lindice ind du premier nombre pair.

program pair;
uses wincrt;
var
t:array[1..20]of integer;
som, n,i, ind:integer;
begin
repeat
writeln('Donner n la taille du
tableau entre 2 et 2:');
readln(n);
until n in [2..20];
for i:=1 to n do
begin
writeln('T[',i,']=');
readln(t[i]);
end;
i:=1;
ind:=0;
while (ind=0) and (i<=n) do
begin
if (t[i] mod 2 = 0) then
ind:=i
else
i:=i+1;
end;
if ind=0 then
writeln('Pas de nombre pair dans le
tableaux')
else
writeln('Premier nombre pair dans la
position suivante :', ind);
end.

Activit 3.
On se propose de calculer le PGCD de deux entiers positifs en utilisant la mthode de
difrence : Le plus grand des entiers A et B reoit la valeur de la difrence des entiers
jusqu A = B.
rsultat : ecrire("Le PGCD est : ", A)
A=[ ] Tantque A B faire
Si A > B alors
A <-- A - B

program PGCD;
uses wincrt;
var
a,b:integer;

sinon
B <-- B - A
Finsi
Fin Tantque
(A,B) = [ ] Rpter
A,B=donne("taper deux entiers
positifs")
Jusqu' (A>0) et (B>0)

begin
repeat
writeln('Donner deux entiers positifs
A et B :');
readln(a, b);
until (a>0) and (b>0);
while a<>b do
if a>b then
a:=a-b
else
b:=b-a;
writeln('Le PGCD :', a);
end.

Activit 4.
Ecrire un programme intitul PALINDROME, qui permet de lire un mot M qui ne dpasse
pas 15 caractres et de vrifer sil est palindrome ou non. (Un mot palindrome se lit
dans les deux sens tel que les mots RADAR, ELLE,KAYAK,).
program palindrome;
uses wincrt;
var
ch:string;
ig,id:integer;
palind:boolean;
begin
writeln('Donner
le
mot
:');
readln(ch);
palind:=true; ig:=1;
id:=length(ch);
while(ig<id) and palind do
if ch[ig]=ch[id] then
begin
inc(ig);
dec(id) ;
end
else
palind:=false;
if palind then
writeln(ch, ' est un palindrome')
else
writeln(ch,'
n''est
pas
un
palindrome');
end.
Activit 5.
Un nombre d'Armstrong est un nombre dont la somme des cubes des chifres le
composant vaut ce nombre.
Exemple : 371 = 3^3 + 7^3 + 1^3
Les nombres d'Armstrong trois chifres sont : 0, 1, 153, 370, 371 et 407.
program narcissique;
uses wincrt;

var
n,temp, r, som:integer;
begin
writeln('Donner un entier :');
readln(n);
temp:=n;
som:=0;
while n<>0 do
begin
r:=n mod 10;
r:=r*r*r;
som:=som+r;
n:=n div 10;
end;
if (som=temp) then
writeln(temp,' est un Nombre
Armstrong')
else
writeln(temp,' n''est pas un Nombre
Armstrong');
end.