Vous êtes sur la page 1sur 136

)~apitre7]3: www.BAC.org.

tn
Page. BAC-TUN\S\E
Tel: 25 361197 / 53 371 502

Le langage de programmation

un tn
ie
Pascal

- T rg.
is
Introduction
ac .o
Le Pascal est un langage de programmation denornme de la sorte
en l'honneur du mathernaticien Blaise Pascal ne au l 7eme siecle.
: B AC

Le l~ngage de programmation Pascal :

• est 'un langage de type imperatif adapte a l'enseignement car ii met en


a
B

'evidence des concepts communs taus Jes langages informatiques.


• possede des constructions qui facilitent l'ecriture des programmes.
ge w.

• possede des regles strictes empechant le programmeur d'ecrire de


mauvais code !
Pa w

l. Forme generale d'un programme Pascal Chaque programme


Pascal possede le merne format essentiel rnontre ci-dessous :
w

Program Nom_programme;
Uses Wincrt;

Zone de declaration
II I
Begin

Corps du programme
II I
End.
Le langage de programmation Pascal

~ Description :

a) Program : est le premier mot de chaque programme Pascal. C'est un


mot-cle indiquant le debut du programme.
b) Nom_programme est le 110111 du programme, C'est un
identificateur.
• Les identificateurs commencent par une lettre, suivie ensuite de
lettres, de chiffres ou de caracteres speciaux exemples : Factoriel,
Puiss2, ...

un tn
• Si l'identificateur est compose par plusieurs blocs ils doivent etre

ie
reunis par un tiret bas (la touche 8) exemples : Som deux,

- T rg.
Rech_imp ....

is
• Les identificateurs ne doivent pas contenir de caracteres accentues, ni
d'espace, ni de point et ni les caracteres suivants : @, $, &, #, +, -, *,
ac .o
/. De plus, Turbo Pascal ne differencie nullement !es majuscules des
minuscules.
a
: B AC

• Un identificateur ne peut pas etre un mot reserve du Turbo Pascal!

~ Quelques mots reserves du langage Pascal


AND, ARRAY, BEGIN, BOOLEAN, CASE, CHAR, CHR, CLRSCR,
B

CONST, COPY, CONCAT, DEC, DELETE, DIV, DO, DOWNTO,


ELSE, END, EOF, ERASE, FILE, FILEPOS, FILESIZE,
ge w.

FOR, FUNCTION, GOTOXY, IF, IN, INC, INSERT, INTEGER,


KEYPRESSED, LENGTH, MOD, NOT, ORD, OF, OR, PACKED,
POS, PRED, PROCEDURE, PROGRAM, RANDOM, RANDOMIZE,
READ, READLN, REAL, RECORD, REPEAT, ROUND, SEEK,
Pa w

SET, SHL, SHR, SQR, SQRT, STR, STRING, SUCC, THEN,


TO, TRUNC, TRUNCATE, TYPE, UNTIL, UPCASE, USES,
w

VAR, VAL, WHILE, WITH, WRITE, WRITELN, XOR .

c) Uses Wincrt : active la bibliotheque Wincrt contenant !es


programmes (mots reserves) utiles pour la bonne execution et
fonctionnement du programme. II faut signaler qu'il existe plusieurs
bibliotheques outre la bibliotheque WJNCRT, telles que :
WIN DOS, WINPROCS, WlNTYPES, WOBJECTS, ...
d) Zone de declaration: dans laquelle le programmeur doit declarer
tous !es objets utilises dans le corps du programme, en indiquant
pour chacun sa nature ( constante ou variable) et le type de valeurs
dont ii fait partie.
Toutefois, le programmeur a toujours la possibilite de declarer un
nouveau type qu'il utilisera pour declarer uncertain nombre d'objets.
Le lan~ge de programmation Pascal
~~~~~~~~~~~~~~~~~~~9

Exemple:
Program Excmp_Dccl;
Uses Wincrt;
Type
Chiff= 0 .. 9;
Const
K = 1000;
Var
X , Y : Integer;

un n
ie
C: Chiff;

t
- T rg.
e) Begin : precise le point de depart du corps du programme.

is
f) Corps du programm e : c'est !'ensemble des traitements assures par
un programme. II est compose d'un ensemble d'instructions resolvant
ac .o
un problerne donne.

Exemple:
: B AC

Begin
Write ('Donnez un ler entier: ');
Readln (a);
Write ('Donnez un Zeme entier : ') ;
B

Readln(b);
Write (' La somme des 2 entiers = ', a+b) ;
ge w.
Pa w

Instruction : une instruction du programme est une commande precisant


a l'ordinateur ce qu'il doit faire pour realiser une tache precise et qui doit
w

etre terminee par un point virgule. Les instructions du programme


precedant une instruction end ne necessitent pas le point-virgule.

g) End. : suivi d'un point doit toujours etre la derniere commande d'un
programme Pascal.

N.B : Begin et End delimitent un bloc de traitement et fournissent un


moyen de grouper Jes instructions. Toutes Jes instructions entre un
begin et un end sont considerees comme appartenant au rneme groupe
ou bloc.
10 Le langage de programmation Pascal

z. Cycle de vie d'un programme Pascal


Pour aboutir a un programme executable, le programmeur passe par
un certain nombre de phases. Le schema ci-dessous explique toutes Jes
phases necessaires partant de l'enonce d'un problerne arrivant a une
solution executable sur l'ordinateur <lit aussi programme executable:

Probleme Analyse

un n
ie
t
- T rg.
is
Mise a jour
& Modification Programme
source
ac .o
Solution du Programme
probleme executable
: B AC

Programme
Execution
objet
B

Cycle de vie d'un programme Pascal


ge w.

Ce qui nous interesse le plus dans ce rappel de cours, c'est Jes trois
versions par lesquelles un programmeur doit passer afin de creer un
Pa w

a
programme en Pascal savoir :
w

a) Programme source: (version programmeur)


C'est la premiere version du programme ecrite par le
programmeur en utilisant la syntaxe d'un langage de programmation
dans notre cas c'est le Pascal, le resultat alors est un fichier dont
!'extension est .Pas.

b) Programme Objet: (version ordinateur)


C'est la deuxieme version du programme, suite a la compilation
du programme source l'ordinateur genere apres la verification de
)'exactitude des instructions (syntaxe) une version du programme
comprehensible par l'ordinateur merne le resultat alors est un fichier
dont !'extension est .Bak.
Le !,mgage cle oroarammati'_: _on::_:__P.: :as:..:..c:__al ll

c) Programme executable: (version utilisateur)


Une foi:s \c progt"amme ob_iet est genere a
et suite une commande
d'execution dernandee par l'utilisateur, l'ordinateur genere de nouveau
un troisierne fichier dont l'extension est .Exe et dont le role est
l'execution des differentes instructions donnees a l'ordinateur.

3. Outils de base pour la manipulation du logiciel Turbo Pascal

un n
a) Chargement du logiciel Turbo Pascal :

ie
../ Cliquer sur le raccourci se trouvant sur le bureau ou

t
../ Programme Demarrer 7 Menu Programmes 7 Sous menu TPW 7

- T rg.
is
TPW
~ La fenetre Turbo Pascal s'affichera sur votre Ecran
ac .o
: B AC
B
ge w.
Pa w
w

b) Ouvrir un fichier existant :


../ Ouvrir le menu Fichier 7 Cliquer sur la commande Ouvrir ou
../ Cliquer sur l'outil Ouvrir se trouvant sur la barre d'outils standard
~ La boite de dialogue Ouvrir un fichier s'affichera sur la zone
de travail
--
12
Le langage de programmation Pascal

.H.om fichier j._liftt_._·


_· -----~~=·=!!
Chemin: c:\tpw

[ichier fteperloires
bonjour.pas [ .. )
[doc)
(docdemos)
[owl)
[owldemos)

un n
[pen)

ie
t
- T rg.
is
ac .o
I. Dans la zone Repertoires, cliquez sur le repertoire ou le dossier
contenant le fichier que vous voulez ouvrir.
: B AC

2. Dans la zone Fichier, cliquer sur le nom du fichier a ouvrir.


3. valider par le bouton Ok.
B

~,!VJJ!:iun fichier

~=~=I
ge w.

N_om fichier L.j ·_.p_a_s

Chemin: c:\bac2009
Pa w

[ichier f!eperloires
exJ_plag.pas [.. )
w

fact.pas [-a-)
fich.pas [-c-)
impair.pas [-d-)
, somimp.pas
somme.pas

Remarque : la zone Chemin indique le chemin d'acces actif.


Le langage de programmation Pascal 13

c) Ouvrir un nouveau fichier (page d'edition) :


../ Ouvrir le menu Fichier 7 Cliquer sur la commande Nouveau
~ La fenetre nonameOO.Pas s'affichera sur la zone de travail avec un
curseur clignotant sur une page vide.

Compiler Options Fenetre Aide

,1 IH ..J .. bQP. ..tPJc+,f;J:".'j('fi ~I ;i1e1

un tn
ie
- T rg.
is
ac .o
: B AC

1:1 ii---u,nserlion u-
B

d) Enregistrer un nouveau fichier :


../ Ouvrir le menu Fichier 7 Cliquer sur la commande Enregistrer ou
ge w.

../ Cliquer sur l'outil Enregistrer se trouvant sur la barre d'outils


~ La boite de dialogue Enregistrer sous un fichier s'affichera sur la
zone de travail
Pa w

EnregistrerSous un fichier

I 1. Dans la zone Repertoires,


w

.!!.om lichiet I nonameOO_pas .:JI cl iquez sur le repertoire ou


Chewlin : c:\tpw le dossier dans le quel vous
fl.epe,toi,eo voulez enregistrer le fichier.
[ tl
(doc) - 2. Dans la zone Norn Fichier,
[docde-•J - taper le nom du fichier a
I
,--·1
[owl)

[pen)
3.
enregistrer.
valider par le bouton Ok.

1110< I 1 ... 1 l?1ooe)


14 Le langage de programmation Pascal

Remarques:
v"La zone Chemin
indique le chemin
Enregistrer Sous un fichier _ £1
d'acces actif.
v"Le nom de fichier ne
I I
.M.om fichier ....F_ac_t_o,_ie_l.p_a_~-----=~=,

doit pas depasser huit Ctae.in: c:\bac2009


caracteres
8.epertoires
v"Le nom de fichier doit [.. )

un n
commencer par une [·a-)

ie
lettre et ne doit pas [·c·)

t
contenir des lettres [·d·)

- T rg.
is
generique telles que ?,
*, I et . ni du caractere
es pace.
ac .o
v" L'extension. pas sera
ajouter par le logiciel
: B AC

automatiquement.
v"Sur barre de titre (bleue) de l'interface du logiciel le chemin d'acces et
le nom du fichier seront affiches.
B

~ Turbo Pascal'- [c:\bac2009\f:fctti'rie~pas] - r:J )(


ge w.

Compiler Options Fenetre Aide

"°~

var
Pa w

n .. i:integer;
F : Longint;
begin
w

write ('saisir un entier;0:');


readln<n);
f': -1 ;
For i:= 1 ton do
F:=F•i;
write(n .. '! = ' . . ~);
end.

I 4:4 I odifie ll•nsertion


e) Compiler un programme:

../ Ouvri~ le menu Compiler 7 C/iquer sur Ia commande


Compiler ou
Le langage de programmation Pascal 15

../ Taper la touche de la fonction F9


~ Si le compilateur detecte une erreur syntaxique dans programme
source:
../ Une bande noire s'affiche sur la ligne contenant l'erreur ou la
ligne suivante
../ Un message d'erreur s'affiche sur la barre d'etat de l'interface.

l1!r Turbo Pascal · [c:\bac2009\factorie.pas) 1!11:JEJ

un tn
Compile, Options Fenetre Aide

ie
prografll f'act;

- T rg.
uses wincrt ;

is
var
n,.i:integer;
F : Longint;
begin
........-ite ('saisir un entier)0:');
reedln(n)
ac .o
For i:- 1 ton do
F:aF•i;
: B AC

write(n .. ' ! • 'if');


end.
B

11: _HModir,.\ iilnaertion


ge w.

Remarque : l'ordinateur ne corrige pas les erreurs detectees, mais au


programmeur de les corriger.
Pa w

~ Une fois toutes les erreurs sont corrigees, le compilateur genere la


version objet du fichier et affichera la boite de dialogue en face :
w

I Statut : T ermine avec succes

I
Fichiers
Principal :c:\bac2009\factorie.pas
Actif:

~S~t~ati=·~d=·~~s~~~~-T~ot==al~
-~~ Actif~~~·
Lignes: 15
16 Le langage de programmation Pascal

f) Executer un programme :
../ Ouvrir le menu Executer 7 Cliquer sur la commande Executer
OU
../ taper la combinaison de touches Ctrl+F9.

~ L'ordinateur genere un fichier executable d'extension .EXE portant le


merne nom de la version source et affichera une fenetre d'execution sur
votre ecran .

un tn
x

ie
• (lncJCtiveC:\BAC2009\FACTORIE.EXE) - Cl
saisir un entier>0:5
5! = 120

- T rg.
is
ac .o
: B AC
B
ge w.
Pa w
w

" Le travail de la pensee ressemble au forage d'un puit;


l'eau est trouble d'abord, puis elle se clarifie. "
Prnverhe f.hinois
Les structures de traitements simples 19

www.BACorg.tn Exercices
Page BAC-TUNISIE
Tel: 25 361197 / 53 371 502 II II
xercice n°1 :

Ecrire un programme, en Turbo Pascal, permettant de convertir

un n
une somme d'argent donnee en D.T en une autre exprimee en Euro.

ie
t
Sachant que: I € = l .75 D.T.

- T rg.
is
ac .o
Ecrire un programme, en Turbo Pascal, permettant d'afficher le
nombre de caracteres se trouvant dans une chaine de caracteres (Ch),
saisie au clavier, ainsi que le premier et le demier caracteres de la chaine
: B AC

Ch.
B

Ecrire un programme, en Turbo Pascal, permettant de calculer le


volume (V) d'un cylindre.
ge w.

Sachant que : V = H * S, H= Hauteur du cylindre et S= Surface


de la base =IT * r2
Pa w

Exemple : Pour un cylindre de :


w

./ 2.5 cm de rayon et ~ Le volume = 3*(3.14 * 2.52)


./ 3 cm d'hauteur = 58,875 cm '

!IExercice n°4 :\I


Ecrire un programme, en Turbo Pascal, permettant de convertir
la I ere lettre d'une chaine de caracteres en majuscule.
Exemple : Si on tape la chaine = "fenetre'' l'ordinateur affichera
"Fenetre"
20 Les structures de traitements simples

xercice n°5 .

Ecrire un programme, en Turbo Pascal, permettant de permuter


les valeurs de deux entiers a et b, en utilisant une troisieme variable (c),

!IExercice n°6 :II


Ecrire un programme, en Turbo Pascal, permettant de permuter
Jes valeurs de deux entiers a et b. Essayer maintenant sans faire recours

un n
a la troisieme variable.

ie
:II

t
!IExercice n°7

- T rg.
is
Ecrire un programme, en Turbo Pascal, permettant de calculer le
quotient et le reste de la division entiere de deux entiers a et b (sans
ac .o
utiliser ni DIV ni MOD).
: B AC

xercice n°8 :

Ecrire un programme, en Turbo Pascal, permettant de calculer le


perirnetre (p) et la diagonale ( d) d'un rectangle de longueur a et de
B

largeur b.

~l(a I
ge w.

Sachant que : p = 2(a+b) & d= 2 + b2)


Pa w
w

!IExercice n°9 :II a

Ecrire un programme, en Turbo Pascal, permettant de convertir


une valeur horaire donnee en secondes en une valeur horaire exprirnee en
Heures, minutes et secondes.

Exemples: ra Pour 3667 s, l'ordinateur affichera lh: lmn: 7s


G1 Pour 7392 s, I' ordinateur affichera 2h : 311111 : I 2s
Les structures de traitements simples 21

!IExercice n°10 :II


Ecrire un programme, en Turbo Pascal, permettant d'afficher a
l'envers un nombre positif de trois chiffres donne par l'utilisateur.
Exemples : o<?. Pour I 04 on affiche 40 l
o<?. Pour 840 on affiche 048

:II

un tn
!IExercice n°11

ie
- T rg.
Ecrire un programme, en Turbo Pascal, permettant de saisir une

is
valeur horaire sous la forme hh:mm:ss et de la convertir en une seule
valeur en secondes.
ac .o
Exemples:
Q1 Pour O I h : 0 I mn : 07s l'ordinateur affichera 3667 s.
: B AC

Q1 Pour 02h : 03mn : l 2s I' ordinateur affichera 7392 s.

xercice n°12 :
B

Ecrire un programme, en Turbo Pascal, permettant de supprimer


ge w.

Jes deux parentheses ( ouvrante et ferrnante) et leur contenu, se trouvant


dans une chaine de caracteres.
Pa w

Exemple : Ch = "Internet (Reseau des reseaux) est un immense


reseau."
w

~ L'ordinateur affichera: "Internet est un immense reseau."

Exercice n°13 :

Ecrire un programme, en Turbo Pascal, permettant de remplir un


tableau T par trois entiers non nuls et d'afficher le quotient de la
division entiere de leurs produits par leurs sommes,
Exemple:

T I 3 I 20 I 5 Le produit =300, la somme = 28 et le quotient= 10


22 Les structures de traitements simples

ercice n°1

Ecrire un programme, en Turbo Pascal, permettant de remplir


un tableau Tl par trois entiers et un tableau T2 par le nombre de
chiffres de chaque entier dans T 1.
Exemple:
Tl I 23 2445 485 T2 L_I _2___,___4----'----I 3__JI

un tn
ie
Exercice n°1

- T rg.
is
Ecrire un programme, en Turbo Pascal, permettant de saisir un
nature! n de trois chiffres et d'afficher la racine carree de la partie
entiere de la division du nombre constitue par Jes chiffres des centaines
ac .o
et des unites den, par le chiffre des dizaines (non nu]) den.
Exemples:
: B AC

'4! 569 -+ 59/6 = 9,833 -+ fo -+ Resultat : 3,000


'4! 327 -+ 37/2 = 18,500 Jis -+ Resultat : 4,242
B

Exercice n°
ge w.

Ecrire un programme, en Turbo Pascal, permettant de


determiner l'entier x pair, strictement inferieur a
l'entier nature! et y
qui soit le plus proche.
Pa w

Exemples:
w

i Si y = 21 alors x =20
.&.. Si y = 22 alors x =20

xercice n°17 :

Ecrire un programme, en Turbo Pascal, permettant d'afficher


un caractere imprimable choisi au hasard par l'ordinateur.
Sachant qu'un caractere irnprimable est celui dont son code ASCII
E[33 .. 127).
Les structures de traitements simples 23

Corriges
I
!IExercice n°1 :II

un n
Program Conversion;

ie
Uses Wincrt;

t
Var

- T rg.
is
X, S: Real;
Begin
Write ('Saisir la somme d"argent en D.T: ');
ac .o
Readln(X);
S :=X/1.75;
: B AC

Write (X:2:3,' D.T ', S:2:3,' Euro');


End.
B

ercice n°2 :
ge w.

Program Affiche;
Pa w

Uses Wincrt;
Var
x : Integer;
w

Ch: String;
Begin

Write ('Saisir une chaine de caracteres: ') ;


Readln(Ch) ;
x := Length(Ch) ;
Writeln (x, ' est le nombre de caracteres dans la chaine saisie') ;
Writeln (Ch[ I], ' est le I er caractere de la chaine saisie') ;
Writeln (Ch[x], ' est le demier caractere de la chaine saisie') ;

End.
24 Les structures de traitements simples

!IExercice n°3 :JI


Program Volume;
Uses Wincrt;
Const
Pi=3.14;
Var
v, h,S,r :Real ;

un n
ie
Begin

t
- T rg.
Write ('Saisir le rayon : ') ;

is
Readln (r);

S :=Pi* r * r;
ac .o
Write ('Saisir !"hauteur:');
: B AC

Readln (h) ;

v := h* s;
Write ('Le volume du cylindre = ', v :2 :3, 'cm3');
B

End.
ge w.

xercice n°4 :
Pa w

Program Chaine;
Uses Wincrt;
w

Var
Ch : String ;
Begin
Write ('Taper une Chaine de caracteres : ') ;
Readln(Ch)

Ch[l] := Upcase(Ch[l]);
Write(' La nouvelle chaine : ', Ch ) ;
End.
Les structures de traitements simples 25

!IExercice n°5 :II


Program Permut;
Uses Wincrt;
Var
a , b, c : Integer;
Begin
Write(' a :');

un tn
ie
Readln(a);

- T rg.
is
Write(' b :');
Readln(b);
c:=a;
ac .o
a:= b;
b:= c;
: B AC

Write ('a= ',a,' b = ',b);


End.
B

Exercice n°6 :
ge w.

Program Permut;
Uses Wincrt;
Pa w

Var
a, b : Integer;
w

Begin
Write ('a : ');
Readln (a);
Write ('b : ');
Readln (b);
a:= a+ b;
b := a - b;
a:= a- b;
Write ( 'a = ' a ' b = ' b);
' ' ' '
End.
26 Les structures de traitements simples

IExercice n°7 :I

Program Division;
Uses Wincrt;
Var
q, r, a, b: Integer;
Begin
Write (' Saisir la dividende ') ;

un tn
ie
Readln (a);
Write (' Saisir le diviseur ') ;

- T rg.
is
Readln (b);
q := Trunc (a/b);
ac .o
r := a-(q*b);
: B AC

Write (' Le quotient = ' q ' et le reste = ' r) ·


' ' ' '
End.

!IExercice n°8 :II


B

Program RECT ANG;


ge w.

Uses Wincrt;
Var
P, d, a, b: Real ;
Pa w

Begin
w

Write (' Saisir la longueur du rectangle : ') ;


Readln (a);
Write (' Saisir la largeur du rectangle : ' ) ;
Readln (b);
P := 2*(a+b);
d:= SQRT(Abs(SQR(a)+SQR(b)));
Write ('Le perimetre =' , P :2 :3,' cm et la diagonale = ', d :2:3, 'cm') ;
End.
Les structures de traiternents simples 27

!IExercice n°9 :II

Program Heure;
Uses Wincrt;
Var
x, y, z, h : Integer;
Begin
Write(' Saisir I "heure en secondes ') ;

un tn
Readln (h);

ie
x := h DIV 3600;

- T rg.
y := (h MOD 3600) DIV 60 ;

is
z := h MOD 60;

Write ('l"heure =' ,x, ' :h' ,y, ' :mn' ,z,' :s');
ac .o
End.
: B AC

Exercice n°10 :
Program Envers;
Uses Wincrt;
B

Var
x : Integer;
ge w.

ch: string[3];
Begin
Write(' Saisir un entier de trois chiffres : ') ;
Pa w

Readln (x);
w

STR (x, ch);


ch:= ch[3] + ch[2] + ch[l];
Write (x, 'a l"envers est ', ch );
End.

Exercice n°11 :
Program Seconde;
Uses Wincrt;
Var
Heure, ss, mm, hh : String ;
e, sec, h, m, s : Integer;
Begin
Write (' Saisir l"heure sous la forme hh:mm:ss : ');
28 Les structures de traiternents simples

Readln (Heure);

hh := Copy (Heure, 1,2); On suppose que


111111 := Copy (Heure,4,2) ; l'utilisateur respecte
ss := Copy (Heu re, 7 ,2) ; correctement le format
de l 'heure a saisir
Val (hh,h,e);
Val (111111,111,e) ;
Val (ss,s,e);

un tn
ie
Sec := h * 3600 + 111 * 60 + s;

- T rg.
is
Write ('la valeur horaire en seconde = ',sec,' s') ;
End.
ac .o
!IExercice n°12 :II
: B AC

Program Parenthese;
Uses Wincrt;
B

Var
CH: String;
ge w.

PI, P2 : Integer;

Begin
Pa w

Write (' Saisir une chaine ') ;


Readln (CH) ;
w

PI:= POS ('(',CH) ;


P2:= POS (')',CH) ;

Delete (Ch, Pl,P2-Pl+I);

Write (CH);
End.
Les structures de traiternents simples 29

Exercice n°13 :

Program Quotient;
Uses Winett;
Var
Q: Integer;
T: Array [1..3] Of Integer;
Begin

un tn
Write ('Taper le I er entier : ')

ie
Readln (T[I]);

- T rg.
is
Write ('Taper le Zeme entier : ')
Readln (T[2]) ;
Write ('Taper le 3eme entier : ')
ac .o
Readln (T[3]) ;
* *
: B AC

Q := (T[l] T[2] T[3]) DIV (T[I] + T[2] + T[3]);


Write (Q);
End.
B

!IExercice n°14 :II


ge w.

Program Nb_ chiff;


Pa w

Uses Wincrt;
Var
w

T 1 : Array [ l..3] Oflnteger;


T2: Array [1..3] Of Integer;
El, E2, E3 : String;
Begin
Write ('Taper le I er entier : ')
Readln (TI [ 1]) ;
Write ('Taper le Zeme entier : ')
Readln (Tl [2]);
Write ('Taper le Jerne entier : ')
Readln (Tl [3]);
STR (ABS (Tl[l]), El);
STR (ABS (TI [2]) , E2);
STR (ABS (TI [3]), E3);
30 Les structures de traitements simples

T2[ I] := Length (EI);


T2[2] := Length (E2);
T2[3] := Length (£3);

Writeln ('Le nombre de chiffres de l"entier n° I= ',T2[1]);


Writeln ('Le nombre de chiffres de l"entier n° 2 = ',T2[2]);
Write ('Le nombre de chiffres de l"entier n° 3 = ',T2[3]);
End.

un tn
ie
Exercice n°15 :

- T rg.
is
Program Operat;
Uses Wincrt;
Var
ac .o
CU, D, C, U, N: Integer;
Begin
: B AC

Write(' Saisir un entier de 3 chiffres ' ) ;


Readln (n);
{On suppose que l'utilisateur saisi un entier de trois chiffres}
B

U := n MOD 10;
C := n DIV I 00 ;
ge w.

D := (n DIV 10) MOD 10;


CU:= C*IO + U;
Pa w

Write ('Le resultat = ',SQRT(INT(CU/D)));


w

End.

!!Exercice n°16 :!I


Program Proche_pair;
Uses Wincrt;
Var x, y : Integer;
Begin
Write (' Saisir un entier : ' ) ;
Readln (y);
x := y-2 + (ABS(y) MOD 2) ;
Write ('L"entier pair strictement inferieur et le plus proche de ',y
'f = ', x);
End.
Les structures de traitements simples 31

!IExercice n°17 :II

Program Code;
Uses Wincrt;
Var C, x, Ch : String;
Begin
Write ('Taper une chaine de caracteres : ') ;
Readln (Ch);

un tn
STR (Length(ch),x);

ie
C := Ch[I]+ Ch[Length(Ch)] + x;
Write ('Le code constitue = ', C) ;

- T rg.
is
End.

ercice n°18:
ac .o
Program Hasard;
: B AC

Uses Wincrt;

Begin
Randomize;
B

Write ('Le caractere choisi par l"ordinateur au hasard est ', CHR
(Random(95)+33));
ge w.

End.
Pa w
w

~t
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
Les structures de traitements conditionnelles 35

www.BACorg.tn
Page BAC-TUNISIE Exercices
Tel: 25 361197 I 53 371 502
I I
xercice n°1 :
Ecrire un programme, en Turbo Pascal, permettant de calculer la

un n
racine carree d'un nombre donne. (Faire le contr6le necessaire pour eviter

ie
le blocage du cornpilateurl)

t
- T rg.
is
Exemples:
~ Si x = 9 l'ordinateur affichera la racine carre de 9 =3,000000
ac .o
~ Si x = -9 l'ordinateur n'affichera rien et surtout ii ne se blogue pas!
: B AC

Ecrire un programme, en Turbo Pascal, permettant de convertir


une lettre, donnee en majuscule, en une lettre en minuscule.
B

Exemple : ~ Si Lettre= "N" l'ordinateur affichera "n"


ge w.

!JExercice n°3 :JI


Ecrire un programme, en Turbo Pascal, permettant de verifier si
Pa w

un entier positif donne est un multiple de trois et se termine par deux ou


non.
w

Exemples:
~ Si x = 42 l'ordinateur affichera : 42 verifie les deux conditions
~ Si x = 30 l'ordinateur affichera : 30 ne verifie pas Jes deux conditions

Exercice n°
Ecrire un programme, en Turbo Pascal, permettant d'afficher le
plus grand entier parmi deux entiers (supposes differents), a et b.
Proposer deux solutions : la I ere utilisant une structure conditionnelle
complete et la 2•rne utilisant une structure conditionnelle reduite!
36 Les structures de traitements conditionnelles

Ecrire un programme, en Turbo Pascal, permettant de, comparer


deux reels a et b.

"Touche a qui?"

un n
ie
Parfois, lorsque deux personnes veulent prendre une decision

t
particul iere, elles laissent le hasard choisir laquelle d'entre ell es aura cette

- T rg.
is
faveur!
Le principe de ce jeu (populaire) appele aussi "Frouda I Zouaz"
(Impair/Pair) est comme suit : Jes deux personnes X et Y se cachent une
ac .o
main derriere le dos, chacune choisit de tendre, discreternent, un certain
nombre de doigts de O a 5 et au merne temps Jes deux personnes se
: B AC

montrent la main. Si le nombre (la somme) de doigts montres est pair la


personne qui a choisi pair (Zouaz) est gagnante, mais s'il est impair, la
personne qui a choisi (Frouda) remporte le jeu,
Supposant que la personne X choisira (Zouaz) et Y choisira
B

(Frouda), Ecrire un programme, en Turbo Pascal, simulant ce jeu et


ge w.

decidant le quel des deux joueurs est le gagnant.

ercice n°7:
Pa w

Ecrire un programme, en Turbo Pascal, permettant de saisir deux


w

entiers x et yet d'afficher leur somme s'ils sont de meme signe ou leur
produit dans le cas contraire.
Exemples:
14 et 20 7 34 , -2 et -5 7 - 7 , -10 et 5 7 -50 , 18 et -3 7-54

!IExercice n°8 :II


Ecrire un programme, en Turbo Pascal, permettant de calculer la
somme de deux entiers s'ils ont la meme parite et leur produit dans le cas
contraire.
Exemples : 5 et 7 7 12 , 8 et 40 7 48 , 2 et 9 7 18 , 7 et 2 7 14
Les structures de traiternents conditionnelles 37

j!Exercice n°9 :!I


Ecrire un programme, en Turbo Pascal, permettant de verifier si
un entier nature! n, saisi au clavier, est un carre parfait ou non.
N.B: nest un carre parfait s'il existe un entier k tel que n=k2.
Exemples : 0, 1, 4, 9, 25, 36, 49, I 00 ce sont des carres parfaits (par
exemple 36 = 62).

un tn
ie
Exercice n°10:

- T rg.
is
On desire calculer le montant de la facture de I'electricite d'un
abonne sachant qu'il paye des frais fixe d'abonnement de 1.700 D.T,
puis ii paye sa consommation selon un tarif a tranches :
ac .o
0.135 D.T I KWH pour !es 100 premiers KWH
0.180 D.T /KWH pour !es 150 KWH suivants
: B AC

0.210 D.T I KWH pour la fraction de consommation qui excede


La consommation d'electricite d'un abonne depend de la relevee du
compteur en saisissant l'ancien indice (Al) et le nouvel indice (NI).
B

Ecrire un programme, en Turbo Pascal, permettant de calculer et


d'afficher la somme a payer (SP).
ge w.
Pa w

Ecrire un programme, en Turbo Pascal, permettant de resoudre une


w

equation de second degre.


Remarque:
Une equation de second degre est de la forme ax2 + bx+ c = 0.

j!Exercice n°12 :II


Ecrire un programme, en Turbo Pascal, perrnettant d' afficher la
mention d'un eleve, sachant que la mention d'un eleve est determinee sur
la base de sa moyenne generale MG.
38 Les structures de traitements conditionnelles

xercice n°13 :
Ecrire un programme, en Turbo Pascal, permettant d'afficher
l'intitule d'un jour suite a la saisie de son numero d'ordre n, dans la
semarne.
Exemples : Si n = 1 alors le jour a afficher est le Lundi
Sin= 4 al ors le jour a afficher est le Jeudi

:II

un tn
!IExercice n°14

ie
- T rg.
Ecrire un programme, en Turbo Pascal, permettant d 'afficher

is
l'intitule d'une saison (Automne, Hiver, Printemps ou Ete) suite a la
saisie du numero d'un mois (nm) qui en fait partie.
/
a afficher
ac .o
Exemples : Si nm = 1 alors la saison est l'hiver
Si nm= 4 alors la saison a afficher est le printemps
: B AC

!IExercice n°15 :II


Ecrire un programme, en Turbo Pascal, permettant :
B

~ De saisir deux entiers a et b non nuts,


ge w.

~ D'afficher a l'utilisateur le menu des operateurs ci-dessous et


~ D'afficher le resultat de l'operation, effectuee sur les entiers a
et b, choisie par l'utilisateur .
Pa w

./ A - Addition
w

./ S - Soustraction

./ M - Multiplication

./ D - Division Euclidienne
./ Q - Quotient de la division entiere

./ R - Reste de la division entiere


Exemple:
a= 18 et b = 4, si le choix est M alors l'ordinateur affichera 18 * 4 = 72,
si le choix est R alors l'ordinateur affichera 18 MOD 4 = 2 ...
Les structures de traitements conditionnelles 39

Ecrire un programme, en Turbo Pascal, permettant d'afficher le


type d'un caractere (C), imprimable et saisi au clavier. Un caractere
imprimable peut etre : une lettre en majuscule, une lettre en minuscule,
un chiffre, un signe de ponctuation ou un caractere special.
N.B : un caractere non imprimable ( espace, Entree, les touches de

un tn
controle, .... ) ayant un code ASCII compris entre O et 32.

ie
- T rg.
:JI

is
jJExercice n°17

Nous considerons les mois dont les ordres sont I, 3, 5, 7, 8, 10 et


ac .o
12 correspondant a un mois de 31 jours ; les mois dont les ordres sont 4,
6, 9 et 11 correspondant a 30 jours et le mois 2 est de 28 ou 29 jours si
l'annee est bissextile.
: B AC

Ecrire un programme, en Turbo Pascal, permettant d'afficher le


nombre de jours d'un mois donne (rn), suite a la saisie de son numero
d'ordre dans l'annee.
B
ge w.
Pa w
w
un tn
ie
- T rg.
is
Important
ac .o
Nous portons a la connaissance de nos chers lecteurs que les
: B AC

exercices proposes dans ce manuel sont tous corriges, testes et


executes convenablernent. Comme nous avons le grand plaisir de
Yous informer que les deux etapes : Analyse et Algorithme de
B

tous ces exercices sont proposees, conformement au programme


officiel des sections scientifiques, dans un i'mc manuel s'intitulant
ge w.

"Programmation : Analyse et Algorithme" de la rnerne


collection "Essentiel lnformatique".
Pa w

Que la paix soit avec Yous tout au long de votre parcours.


w
Les structures de traitements conditionnelles 41

Corriges
II II

!IExercice n°l :II


Program Racine_carre;

un n
Uses Wincrt;

ie
Var

t
- T rg.
x: Real;

is
Begin
Write (' Saisir une valeur ') ;
ac .o
Readln (x);
Ifx >= 0
: B AC

Then
Write ('La racine carree de' .x :2 :3 ,' =' , SQRT(x):2:6);
End.
B

Exercice n°2 :
ge w.

Program Minus;
Pa w

Uses Wincrt;
Var
w

L: Char;
Begin
Write (' Saisir une lettre en majuscule : ') ;
Readln (L);
If L In ['A' . .'Z']
Then
L:= CHR(ORD(L) + 32);
Write ('La conversion en minuscule donne: ', L);
End.
42 Les structures de traitements conditionnelles

!IExercice n°3 :II


Program Mult3 _ter2;
Uses Wincrt;
Var
x: Integer;
Begin
Write (' Saisir un entier : ') ;

un n
Readln (x);

ie
t
Ifx>=O

- T rg.
then

is
If (x MOD 3 = 0) And (x MOD 10 = 2)
Then
ac .o
Write ('l"entier ', x , ' verifie les deux conditions')
Else
: B AC

Write ('l"entier ', x, ' ne verifie pas les deux conditions')


Else
Write ('l"entier saisi est negatif ! ');
B

End.
ge w.
Pa w

1 ere Solution : utilisant la structure conditionnelle complete


w

Program Supl;
Uses Wincrt;
Var a, b : Integer ;
Begin
Write ('Saisir une l ere valeur: ');
Readln(a);
Write ('Saisir une Zeme valeur : ') ;
Readln(b);
Ifa>b
Then
Write (a,' est le plus grand entier ')
Else
Write (b,' est le plus grand entier ') ;
End.
Les structures de traitements conditionnelles 43

i""'e Solution: utilisant la structure conditionnelle reduite

Program Sup2;
Uses Wincrt;
Var
a, b, max : integer ;
Begin
Write ('Saisir une l ere valeur :');

un tn
Readln(a);

ie
Write ('Saisir une Zeme valeur :') ;

- T rg.
Readln(b) ;

is
max:= a;
Ifb > a
ac .o
Then
max:= b;
: B AC

Write (max,' est le plus grand entier ');


End.
B

!IExercice n°5JI
ge w.

Program Comparaison;
Pa w

Uses Wincrt;
Var
w

a, b: Real;
Begin
Write ('Saisir une l ere valeur : ') ;
Readln(a);
Write ('Saisir une Zeme valeur : ') ;
Readln (b);
Ifa > b
Then Write (a :2:3,' est le plus grand')
Else
Ifa< b
Then Write (b :2:3, 'est le plus grand')
Else Write (a :2:3,' est egale a ', b :2 :3) ;
End.
44 Les structures de traitements conditionnelles

Exercice n°6 :

Program Frouda _ zouaz;


Uses Wincrt;
Var
d 1, d2, S : Integer;
Begin
Randomize;

un tn
ie
d 1 :=Random (6);

- T rg.
d2 := Random (6) ;

is
S:=dl+d2;
If S Mod 2 = 0
ac .o
Then
Write (' Le joueur X est le gagnant ')
: B AC

Else
Write (' Le joueur Y est le gagnant ') ;
End.
B

!IExercice n°7 :II


ge w.

Program Som_prod;
Pa w

Uses Wincrt;
Var
w

x, y : Integer ;
Begin
Write(' Saisir un I er entier : ');
Readln (x);
Write(' Saisir un Zeme entier : ' );
Readln (y);
lfx *y >=0
Then
Write ('La somme = ', x+y )
Else
Write ('Le produit = ', x*y) ;
End.
Les structures de traitements conditionnelles 45

Exercice n°8 :
Program Som _J)rod;
Uses Winert;
Var
x, y: Integer;
Begin
Write(' Saisir un I er en tier : ');

un tn
Readln (x);

ie
Write(' Saisir un Zeme entier : ' );

- T rg.
is
Readln (y);
If(x Mod 2 = 0) XOR (y Mod 2 = 0)
Then
ac .o
Write ('Le produit de ',x,' et de ',y,' = ',x*y
Else
: B AC

Write ('La somme de ',x,' et de ',y,' = ',x+y );


End.

!IExercice n°9 :II


B
ge w.

Program earre_parfait;
Uses Winert;
Var n, k: Integer;
Pa w

Begin
w

Write(' Saisir un entier naturel : ');


Readln (n);

Ifn>=O
Then
Begin
k := Trune (SQRT(n));
Ifn=SQR(k)
Then
Write ('l"entier ', n , ' est un carre parfait')
Else
Write ('l"entier ', n,' n"est pas un carre parfait');
End
Else
Write(' Erreur: Vous devez taperun entier nature!!!!');
End.
46 Les structures de traitements conditionnelles

!JExercice n°10 :II


Program Facture;
Uses Wincrt;
Var
C, NI, Al : Integer;
SP: Real;
Begin

un tn
Write ('Tapez le nouvel indice du compteur : ') ;

ie
Readln (NI);

- T rg.
is
Write ('Tapez l"ancien indice du compteur : ') ;
Readln (Al) ;
ac .o
SP:= 1.700;
If (NI >=O) And (Al >=O) And (Nl>=Al)
: B AC

Then
Begin
C := Nl-AI;
If (C <= 100)
B

Then
ge w.

SP:= SP+ C*0.135


Else
If (C <= 250)
Pa w

Then
SP:= SP+ 13.500 + (C-100) * 0.180
w

Else
SP := SP+ 40.500 + (C-250) * 0.21 O;

Write ('Le montant a payer est ', SP:2:3,' D.T');


end
Else
Write ('Erreur de saisie des indices!!!') ;

End.
Les structures de traitements conditionnelles 47

Exercice n°11 :

Program Sec_ Deg;


Uses Wincrt;
Var a, b, c, d : Real ;
Begin
Write (' a = ');
Readln (a);

un tn
Write (' b =

ie
');
Readln (b);

- T rg.
Write (' c =

is
');
Readln (c);
Ifa = 0
Then
ac .o
Begin
Writeln ('**** Equation de premier degre ***** ');
: B AC

Ifb<>O
Then
Write ('La solution est x = ',-c/b:2:3)
Else
B

If c = 0
Then Write ('La solution est R')
ge w.

Else Write ('Solution impossible dans R');


End
Else
Pa w

Begin
d := SQR(b)-4*a*c;
w

If d < 0
Then
Write ('Solution impossible dans R')
Else
If d = 0
Then
Write ('Solution double x I = x2 = ',-b/2*a:2:3)
Else
Begin
Writeln (' xl = ', (-b- SQRT(d))/(2*a):2:3);
Write (' x2 = ', (-b+ SQRT(d))/(2*a):2:3);
End;
End;
End.
48 Les structures de traitements conditionnelles

!IExercice n°12 :II


Program Mention;
Uses Wincrt;
Var Mess: String;
MG: Real;
Begin
Write ('Saisir la moyenne generale de l"eleve : ') ;

un tn
ie
Readln (MG);

- T rg.
is
If (MG >20) OR(MG<O)
Then
Mess := 'Erreur la moyenne doit etre entre O et 20'
ac .o
Else
Begin
Mess := 'La mention de cet eleve est : ' ;
: B AC

If MG>= 18
Then
Mess:= Mess + 'Excellent'
Else
B

If MG>= 16
ge w.

Then
Mess:= Mess +' T.Bien'
Else
Pa w

If MG>= 14
Then
w

Mess := Mess + 'Bien'


Else
If MG>= 12
Then
Mess:= Mess + 'A.Bien'
Else
If MG >=10
Then
Mess := Mess +' Passable'
Else
Mess := 'Pas de mention' ;
end;
Write (Mess);
End.
Les structures de traitements conditionnelles 49

J Exercice n°13 :JI


Program Jour;
Uses Wincrt;
Var mess : String;
n : Integer;
Begin
Write (' Saisir le numero du jour ');

un tn
Readln (n);

ie
Case n Of

- T rg.
I :
mess := ' Lundi' ;

is
2 :
mess :=' Mardi ';
3 :
mess:=' Mercredi';
4 :
mess :=' Jeudi ' ;
ac .o
5 :
mess :=' Vendredi ' ;
6 : mess := ' Samedi ' ;
: B AC

7 : mess := ' Dimanche ' ;


Else mess := ' Erreur : Deso le le numero du jour doit etre entre I et 7' ;
End;
B

Write (mess);
End.
ge w.

!JExercice n°14 :JI


Pa w

Program Saison;
Uses Wincrt;
w

Var nm: Jnteger;


Begin
Write(' Saisir un numero de mois :' ) ;
Readln (nm);
Case nm Of
9 .. 11 : Write ('La saison correspondante est l"automne ' ) ;
12, 1,2 : Write ('La saison correspondante est l"hiver ' ) ;
3 .. 5 : Write ('La saison correspondante est le printemps ' ) ;
6 .. 8 : Write ('La saison correspondante est l"ete ' ) ;
Else Write ('Erreur ce numero ne correspond a aucun mois !' );
End;
End.
50 Les structures de traitements conditionnelles

!IExercice n°15 :II


Program Calcul;
Uses Wincrt;
Var op : Char;
a, b : Integer ;
Begin
Write (' I er operande ') ;
Readln (a);

un tn
ie
Write (' Zeme operande ') ;

- T rg.
Readln (b);

is
Writeln ('A - Addition ');
Writeln ('S - Soustraction');
ac .o
Writeln ('M - Multiplication');
Writeln ('D - Division Euclidienne') ;
: B AC

Writeln ('Q - Quotient de la division entiere') ;


Writeln ('R - Reste de la division entiere') ;

Write ('Faites votre choix :') ;


B

Read In (op);
ge w.

lfa*b<>O
Then
Pa w

Case Upcase(op) Of
w

'A' · Write ('La somme de' a ' et de' b' =' a+b ) ·,
. ' ' ' ' '
'S' · Write ('La difference entre 'a 'et ' b' =' a-b ) ·
. ' ' ' ' ' '
'M' · Write ('Le produit de' a 'et de' b' =' a*b ) ·
. ' ' ' ' ' '
'D' : Write ('La division de ',a, ' par ',b,' =' , alb :2 :3 ) ;
'Q' : Write ('Le quotient de la division de ',a, ' par ',b,' = ' , a
orv b ) ;
'R' Write ('Le reste de la division de ',a, ' par ',b,' = ' , a
MOD b );
Else
Write ('Erreur ii faut taper une lettre parrni la liste !');
End
Else
Write ('Erreur : ii ne faut pas entrer des valeurs nulles !' );
End.
Les structures de traitements conditionnelles 51

jJExercice n°16 :JI


Program Type_ carac;
Uses Wincrt;
Var
C: Char;

un n
Begin

ie
Write ('Tapez un caractere : ') ;

t
Readln ( C);

- T rg.
is
Case C Of
CHR(O) .. CHR(32) : Write ('Le caractere tape n"est pas imprirnable') ;
ac .o
'A'.. 'Z': Write (C, 'est une lettre en majuscule');
: B AC

'a'.. 'z' : Write (C, 'est une lettre en minuscule');


'0'.. '9' : Write (C , ' est un chiffre ') ;
',','.',';','!','?' ,':' : Write (C, 'est un signe de ponctuation ');
B

Else
Write (C , ' est un caractere special ') ;
ge w.

End;
End.
Pa w
w
52 Les structures de traitements conditionnellcs

!IExercice n°1iJI
Program Nb_jours;
Uses Wincrt;
Var mess: String;
rn, a : Integer ;
Begin
Write(' Saisir le numero du mois ');
Readln (rn) ;

un n
ie
t
Case m Of

- T rg.
is
l , 3 , 5 , 7 , 8 , IO, I 2 : mess :=' Ce rnois est de 3 l jours' ;
4 , 6 , 9 , l 1 : mess := ' Ce mois est de 30 jours' ;
2: Begin
ac .o
Write ('Saisir le numero de l'annee : ') ;
Readln (a);
If a MOD 4 =O
: B AC

Then
mess :=' Ce mois est de 29 jours'
Else
B

mess :=' Ce mois est de 28 jours' ;


End;
ge w.

Else
mess := Erreur : Desole le numero du mois doit etre entre I et 12' ;
I

End;
Pa w

Write (mess);
w

End.

"La tbeorie, c'est quand on sait tout et que rien ne


fonctionne. La pratique, c'est quand tout fonctionne et que
personne ne sait pourquoi.
lei, nous avons reuni theorie et pratique Rien ne
fonctionne . . et personne ne sait pourquoi!"
llllf'rl 1-:in,lo•in
Les structures de traitements repetitives 55

www.BACorg.tn
Page BAC-TUNISIE Exercices
Tel: 25 361 197 / 53 371 502

!JExercice n°1 :II


Ecrire un programme, en Turbo Pascal, permettant d'afficher le

un tn
nombre d'operateurs arithrnetiques utilises dans une expression

ie
mathernatique.

- T rg.
is
Exemple: 2*a + 4*b - 8/c =O 7 le nombre d'operateurs utilises= 5

!JExercice n°2 :II


ac .o
Ecrire un programme, en Turbo Pascal, permettant d'afficher le
: B AC

nombre d'occurrences de chaque operateur arithmetique utilise dans une


expression rnathernatique.
Exemple : 2*a + 4*b - 8/c =O Le resultat est :
B

2 fois "*", lfois "+", I fois "-" et lfois "/"


ge w.

Exercice n°3 :

Ecrire un programme, en Turbo Pascal, permettant de convertir


Pa w

une chaine de caracteres en majuscule.


w

Exemples:
I. "informatique" 7 "INFORMATIQUE"
2. "lundi 15 janvier 2005" 7 "LUNDI 15 JANVIER 2005"

Exercice n°4:

Ecrire un programme, en Turbo Pascal, permettant de convertir


une chaine de caracteres en minuscule.
Exemples:
I. "lNFORMA TI QUE" 7 "informatique"
2. "SAMEDI 27 JANVIER 2007" 7 "samedi 27 janvier 2007"
56 Les structures de traitement repetitives

!IExercice n°5 :ii


Ecrire un programme, en Turbo Pascal, qui pennet d'inverser
une chaine A dans une chaine B.
Exemple: A= "souris" Resultat ~ B= "siruos"

xercice n°6 :

un tn
Ecrire un programme, en Turbo Pascal, permettant d'afficher

ie
tous Jes entiers de deux chiffres, dont la somme = dix. Exemples : 19,
28, 64, 91 etc.

- T rg.
is
Exercice n°7 :
ac .o
Soit l'algorithme suivant :
0) Debut quoi
: B AC

I) Ecrire ("saisir un entier :"), Lire (n)


2)s~o
Pour i de I a n faire
S ~ S+ i
B

Fin pour
3) Ecrire ("le resultat est= ",S)
ge w.

4) Fin quoi
I. Traduire cet algorithme, en Turbo Pascal, et Ecrire sous forme d'un
commentaire le role de ce programme.
Pa w

2. Afin de n'accepter qu'une valeur n > 0, que faut-il faire au niveau de


la I ere sequence?
w

3. Remplacer si c'est possible la 2"'11" sequence par la structure iterative


Repeter .. jusqu'a
4. Remplacer si c'est possible la 2cinc sequence par la structure iterative
Tantque .. Faire

Exercice n°8 :

Ecrire un programme, en Turbo Pascal, permettant d'afficher la


table de multiplication d'un chiffre donne.
Exemple:
Six =2 l'ordinateur affichera:
0*2 = 0 1 *2 = 2 2*2 = 4 3*2= 6 .... 10*2 = 20
Les structures de traitements repetitives 57

!IExercice n°9 :II


Ecrire un programme, en Turbo Pascal, permettant d'afficher un
triangle isocele d'hauteur n lignes, avec n E[2 .. 24]. Exemple: Sin= 6,
L'ordinateur affichera un triangle isocele de six lignes :

*
***
*****

un tn
*******

ie
*********
***********

!IExercice
- T rg. :II

is
n°10

Ecrire un programme, en Turbo Pascal, permettant d'afficher le


ac .o
nombre doccurrences d'un caractere (C) dans une chaine de caracteres
(CH) dont la taille est comprise entre 4 et 60.
: B AC

Exemple: Le nombre d'occurrences du caractere "a" dans la


cha\'ne" la date d'anniversaire de Abdallah est 23/05/2005" est= 7 fois.

!IExercice n°11 :II


B

Ecrire un programme, en Turbo Pascal, permettant de calculer la


ge w.

valeur d'un entier x relatif eleve a la puissance de y (yest un entier relatif


aussil).
Pa w

Exemples : 3~ =81 -33 = -27

!IExercice n°12 :II


w

Ecrire un programme, en Turbo Pascal, permettant de calculer la


factorielle d'un entier nature! x.
Exemples: 5! = I *2*3*4*5 =120 8!=1 *2*3*4*5*6*7*8= 40320

!IExercice n°13 :JI


Ecrire un programme, en Turbo Pascal, permettant de calculer le
reste et le quotient de la division entiere des deux entiers a et b sans
utiliser Jes operateurs DIV et MOD ni aucune fonction predefinie
(Trone, Ent, ... ) .
58 Les structures de traitement repetitives

Ecrire un programme, en Turbo Pascal, permettant d'afficher le


nombre d'eleves d'une classe au secondaire (une classe est de 40 eleves
au maximum), ayant une moyenne generale superieure OU egale a J 4.

xercice n°15 .

Ecrire un programme, en Turbo Pascal, permettant d'afficher ill

un n
ie
plus grande valeur ainsi que la_Qosition de la plus_Qetite valeur_se trouvant

t
dans une liste de n entiers, avec n est un entier naturel non nul et inferieur

- T rg.
a

is
OU egal 50.

xercice n°16 :
ac .o
Ecrire un programme, en Turbo Pascal, qui pennet de remplir un
: B AC

tableau T par 20 chaines de caracteres au maximum, chacune de taille


comprise entre 2 et 20, et d'afficher la plus longue chaine d'entre elles.

!IExercice n°17 :II


B

Ecrire un programme, en Turbo Pascal, permettant d'afficher Jes


ge w.

caracteres, occupant un rang pair, se trouvant dans une liste L de n


caracteres avec n E ] 1..30].
Pa w

Exemple:
IM I El-1Rljlcl5II
w

L 8
2 3 4 5 6 7 8 9 10 30

La liste des caracteres a afficher est :M ERC I

Ecrire un programme, en Turbo Pascal, permettant de saisir une


suite de n lettres (avec n E [5 .. 20]) et de supprimer les voyelles se
trouvant dans cette suite.
Les structures de traitements repetitives 59

Corrlges

xercice n°1 :

Program Nb_ op;


Uses Wincrt;

un tn
Var

ie
x, i : Integer ;

- T rg.
Exp : String;

is
Begin
Write ('Saisir une expression mathernatique :') ;
ac .o
Read In (Exp);
: B AC

x := O;
For i := 1 To Length(Exp) Do
If Exp[i] In['+','-','*','/']
Then x := x+ l ;
B

Write ('Le nombre d"operateurs arithmetiques = ',x);


End.
ge w.

Exercice n°2 :
Pa w
w

Program Nb_ occ;


Uses Wincrt;
Var
x I, x2, x3, x4, i : Integer;
Exp : String;

Begin
Write ('Saisir une expression mathernatique :') ;
Readln (Exp);
xi:= 0;
x2 := 0;
x3 := 0;
x4 := O;
60 Les structures de traitement repetitives

For i := I To Length(Exp) Do
Case Exp[i] Of
'+' : x I := x I+ I
'-' : x2 := x2+1;
'*'. x3 := x3+1 ;
'/': x4 := x4+1 ;
End;
Write (x I, ' fois +, ', x2,' fois -, ', x3,' fois * et', x4,' fois I') ;
End.

un tn
ie
!!Exercice n°3 :II
- T rg.
is
Program Conv_Maj;
Uses Wincrt;
ac .o
Var i : Integer;
ch : String ;
: B AC

Begin
Write ('Saisir une chaine de caracteres : ') ;
Readln (ch);
For i := I To Length(ch) Do
B

ch[i] := Upcase(ch[i]);
ge w.

Write (ch);
End.

:II
Pa w

jjExercice n°4
w

Program Conv _Minus;


Uses Wincrt;
Var i: Integer;
ch : String ;
Begin
Write ('Saisir une chaine de caracteres : ') ;
Readln (ch);

For i := I To Length(ch) Do
If ch[i] In ['A' .. 'Z']
Then Ch[i] :=CHR(ORD(ch[i])+32);

Write (ch);
End.
Les structures de traitcments repetitives 61

Exercice n°5 :

Program Inverse;
Uses Wincrt;
Var
i: Integer;
A, B : String ;
Begin

un tn
ie
Write ('Saisir une chaine de caracteres : ') ;
Readin (A);

- T rg.
is
B ·="·
. '
For i := Length (A) Downto l Do
B := B + A[i]; ~------------~
ac .o
N.B : Rernarquez que dans !es exercices
anterieurs ( de I a 5) la structure iterative For
Write (B);
: B AC

ne contient qu'une seule instruction, pour


End. cette raison on n'a pas mis !es delirniteurs
Begin et End.
B

!IExercice n°6 :II


ge w.

Program Somme_dix;
Uses Wincrt;
Pa w

Var
x, a, b : Integer;
w

Begin
Writein ('Les entiers verifiant cette propriete sont : ') ;
For x := IO To 99 Do
Begin
a:= x DIV IO; N.B : Remarquez que dans ce cas de
b := x MOD IO; traitement la structure iterative For
If a+ b =IO contient plusieurs instructions, pour
Then cette raison on a mis Jes delimiteurs
Write (x, ' '); Begin et End pour qu'elle soit
fonctionnelle sur l'ensernble
End;
d'instructions qu'elle renferme.
End.
62 Les structures de traitement repetitives

xercice n°7 :

I- Traduction de l'algorithme du programme Suite:


Program Suite;
Uses Wincrt;
Var n, i, S :Integer;
Begin
Write ('saisir un entier : ');
Readln (n);

un tn
ie
S:=O;

- T rg.
Fori := 1 Ton Do

is
s := s + i;
Write ('le resultat est= ',S)
ac .o
End.
Commentaires : Ce programme permet de calculer la somme des n
: B AC

premiers entiers (de I an).

Exemple si n = 5 Alors S = I + 2 + 3 + 4 + 5 = 15
B
ge w.

2- N'accepter qu'une valeur n > 0.

Program Suite;
Pa w

Uses Wincrt;
Var r
'
w

n, i, S : Integer;
Begin N.B : Remarquer que la
Repeat structure iterative
Write ('saisir un entier : '); Repeat n'a pas besoin
Readln (n); des delimiteurs Begin et
Until n >O; End l'ensernble
d'instructions qu'elle
S:=O; contient est deli mite
For i := I Ton Do implicitement. Elle est
s := s + i; consideree comme une
seule instruction.
Write ('le resultat est= ',S)
End. -, J
Les structures de traitements repetitives 63

a. Remplacant maintenant la 2"111e sequence par la structure


iterative: Repeter .. jusqu'a :
Program Suite;
Uses Wincrt;
Var n, i, S :Integer;
Begin
Repeat
Write ('saisir un entier : ');
Readln (n);

un n
Until n >O;

ie
S:=O;

t
i:= O;

- T rg.
is
Repeat
i:= i+l;
s s
:= + i;
ac .o
Until i = n;
: B AC

Write ('le resultat est= ',S)


End.

b. Remplacant maintenant la Zeme sequence par la structure


B

iterative Tantque .. Faire :


ge w.

Program Suite;
Uses Wincrt;
Var n, i, S :Integer;
Pa w

Begin
w

Repeat
Write ('saisir un entier : ');
Readln (n);
Until n >O;

S:=O;
i:=O;
While i< n Do
Begin
i:= i+l;
S :=S+ i;
End;
Write ('le resultat est= ',S)
End.
64 Les structures de traitement repetitives

!IExercice n°8 :II


Program Tab_Mult;
Uses Wincrt;
Var
x, i :Integer;
Begin
Repeat

un n
Write ('Saisir un chiffre :');

ie
Readln (x);

t
Until x In [0 .. 9];

- T rg.
is
For i := 0 To IO Do
Writeln (x,' * ',i,' = ', x*i);
ac .o
End.
: B AC

xercice n°9 :

Program Triangle;
B

Uses Wincrt;
Var
ge w.

n, i,j, c: Integer;
Begin
Repeat
Pa w

Write(' Ecrire !"hauteur du triangle : ') ;


Readln (n);
w

Until n In [2 .. 24];
c := 40;
For i := 1 Ton Do
Begin
Gotoxy (c-i, i);
For j := l To 2*i- I Do
Write('*')
End;
End.
Les structures de traitements repetitives 65

)Exercice n°10 :J

Program Occurrence;
Uses Wincrt;
Var
c: Char;
x, i : Integer ;
ch: String;

un tn
ie
Begin
Repeat

- T rg.
is
Write(' Ecrire une chaine de caractere : ') ;
Readln(ch);
Until Length (ch) In [4 .. 60];
ac .o
Write(' Tapez un caractere :') ;
: B AC

Readln (c);

x := 0;
For i := I To Length (ch) Do
B

If Upcase (ch[i]) = Upcase (c)


Then
ge w.

x :=x+l;

Write ('Le nombre d"occurrences du caractere « ',c ,' » dans cette


Pa w

chaine est : ', x,' fois') ;


w

End.

!IExercice n°11 :JI


Program Puissance;
Uses Wincrt;
Var x, i, y: Integer;
p: Real;
Begin
Write ('Saisir un entier :') ;
Readln (x) ;

Write ('Saisir l"exposant :') ;


Read\n (y);
66 Les structures de traitement repetitives

P:= I;
For i := 1 To Abs(y) Do
P:= P*x '•'
'
\
Ify <O
Then p := 1/p

Write (x, ' Exposant ', y ,' =' , P:2:2);


End.

un tn
ie
- T rg.
Program Factoriel;

is
Uses Wincrt;
Var
x, i : Integer;
ac .o
f: Longlnt;
: B AC

Begin
Repeat
Write ('Donnez un entier : ') ;
Readln (x);
B

Until x >= O;
f:= I;
ge w.

For i := I To x Do
f:= f * i;
Pa w

Write (x, '! =', f);


End.
w

xercice n°13 :

Program Produit;
Uses Wincrt;
Var a, b, R, Q: Integer;

Begin
Write ('Saisir un I er en tier : ') ;
Readln (a);

Write ('Saisir un Zeme entier : ');


Readln (b) ;
Les structures de traitements repetitives 67

Q :=O;
R := Abs(a);
While (R >= Abs(b)) AND (a*b<>O) Do
Begin
R := R-Abs(b);
Q:=Q+l;
End;
lfa*b < 0

un tn
Then Q:= -Q;

ie
!fa< 0

- T rg.
is
Then R:= -R;
If b = 0
Then Write ('Forme indeterminee ! ! !')
ac .o
Else Write ('Le quotient de la division de ' a' par' b '=' Q ' et le
' ' ' ' ' '
reste = ', R) ;
: B AC

End.

llExercice n°14 :II


B

Program Moy_sup_l 4;
ge w.

Uses Wincrt;
Var
x, n, i : Integer;
Pa w

MG: Array [1..401 Of Real;


w

Begin

Repeat
Write(' Ecrire le nombre des moyennes des eleves a saisir :') ;
Readln (n);
Until n In [1 . .40];

For i := I To n Do
Repeat
Write ('Ecrire la moyenne generate de l"eleve 11° ', i , ' : ') ;
Readln (MG[i]) ;
Until (MG[i]>=O) AND (MG[i]<=20);
68 Les structures de traitement repetitives

x := 0 ;
For i := 1 Ton Do
If MG[i] >= 14
Then
x := x+l;

Write ('Le nombre deleves ayant une moyenne generate > = 14 est ',
x);

un tn
ie
End.

- T rg.
is
xercice n°15 :
ac .o
Program Max_min;
Uses Wincrt;
: B AC

Var
Posmin, max, i, n : Integer ;
T: Array [l..50] Of Integer;
B

Begin
Repeat
ge w.

Write ('Saisir le nombre de valeurs : ') ;


Readln (n);
Pa w

Until n In [l..50];
w

Fori:=l Ton Do
Begin
Write ('Saisir une valeur : ') ;
Readln ( T[i] );
End;

max:= T[i];
For i := 2 Ton Do
If T[i] > max
Then max := T[i]
Les structures de traitements repetitives 69

Posmin:= l
For i := 2 Ton Do
If T[i] < T[Posmin]
Then Posmin := i;

Write ('Le plus grand entier est ', max ,' et la position du plus petit
entier est', Posmin) ;

End.

un tn
Exercice n°16 :

ie
- T rg.
is
Program Long_chaine;
Uses Wincrt;
Var
ac .o
T : Array [ 1 .. 20] Of String[20];
i, n : Integer;
: B AC

max : String(20];
Begin
Repeat
B

Write ('Saisir le nombre de chaines a ecrire: ') ;


Readln (n);
ge w.

Until n In (1..20];
For i := I To n Do
Pa w

Repeat
Write ('Saisir une chaine de caracteres: ') ;
w

Readln ( T[i] ) ;
Until Length(T[i]) In [2 .. 20];
max:= T[l];
For i := 2 To n Do
If Length(T[i]) > Length(max)
Then max := T[i];

Write(' La plus Longue chaine est= ',max);


End.
70 Les structures de traitement repetitives

Exercice n°17:

Program Aff_Pair;
Uses Wincrt;
Var
L : Array [ 1 . 30) Of Char;
i.n : Integer;
Begin
Repeat

un tn
a saisir

ie
Write ('Tapez le nombre de caractcres (entre 2 et 30): ');
Readln (n );

- T rg.
is
Until n In [2 .. 30);

Fori := I Ton Do
ac .o
Begin
Write ('Saisir le caractere n° ', i,': ');
Readln (L[i]) ;
: B AC

End;

Write ('La liste des caracteres occupant un rang pair est :')
B

For i := I Ton Do
ge w.

If i mod 2 = 0
Then
Write (L[i],' '); n peut remplacer la
Pa w

End. derniere sequence par


!'instruction suivante:
w

i :=2;
Repeat
Write (Llil,'
i:=i+2;
!IExercice n°18:II Until i >n;

Program Sup_ voy;


Uses Winett;
Var
T : Array [ I .. 21] Of Char;
i, j, s, n, 111 : Integer;
Les structures de traitements repetitives 71

Begin
Repeat
Write ('Tapez le nombre de lettres a saisir ( entre 5 et 20) :') ;
Readln (n );
Until n In [5 .. 20];
For i := I Ton Do
Repeat
Write ('Saisir le caractere n° ' ' i ' ' ·. ') ·'
Readln (T[i]) ;

un tn
ie
Until Upcase(T[i]) In ['A' . .'Z'];

- T rg.
is
s := O;
For i := 1 Ton Do
If Upcase(T[i]) In ['A','E','Y','U','f','O']
ac .o
Then
Begin
: B AC

For j := i To n Do
Tu] := T[j+ I];
B

i := i-1;
s := s+l;
ge w.

End;
Pa w

m := 11-S;
Ifm =O
w

Then
write ('le tableau est vide ! ! !')
Else
For i := I Tom Do
Write (T[i], ' ');
End.

" 11 ne suffit pas de dire : Je me suis trompe; il faut dire


comment on s'est trompe. "
l:laude ll~rnard
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
Les sous programmes
&U4FA 5 77

Exercices
II I
N.B : Pour chacun des exercices suivants faire, proposez une
solution modulaires.

un n
:II

ie
!IExercice n°l

t
- T rg.
is
Soit l'algorithme du programme Prod suivant :
0) Debut Prod
www.BACorg.tn
ac .o
I) Ecrire (" Saisir deux en tiers : ")
Page. BAC-TUNISIE
Lire (x,y)
Tel: 25 361197 I 53 371 502
: B AC

2) p~ 0
Pour i de I a Abs(x) faire
Pour j de I a Abs(y) faire
P ~P+l
B

FinPour
FinPour
ge w.

Si (x < 0) OUex (y < 0)


Al ors
Pa w

p~ -P Ou bien Si (x*y) < 0 ~


Finsi Seulement l'un des deux
w

est negatif,
3) Ecrire (P)
4) Fin Prod

Questions :
a) Traduire cet algorithme en Turbo Pascal et ecrire, sous forme de
commentaire, le role de ce programme?
b) Extraire de cet algorithme un sous programme rernplacant la
sequence 2.
78 Les sous programmes

!IExercice n°2 :II


Ecrire un programme Nombre, en Turbo Pascal, utilisant une
fonction Nb_2Chiff pour calculer le nombre d'entiers de deux chiffres, se
trouvant dans un tableau T de type TAB et con tenant n en tiers.

Exercice n°3 :

un n
Soit l'algorithme du programme Puiss suivant:

ie
t
0) Debut Puiss

- T rg.
is
l) Ecrire (" Saisir un en tier : ")
Lire (x)
2) Ecrire (" Saisir un entier : ")
ac .o
Lire (y)
3) P~ l
: B AC

Pour i de I a Abs(Y) faire


p ~ p* x
FinPour
B

Si y < 0
Al ors
ge w.

P ~ 1/P
Finsi
4) Ecrire (P)
Pa w

5) Fin Puiss
w

Questions
a) Traduire cet algorithme en Turbo Pascal et ecrire, sous forme de
commentaire, le role de ce programme?
b) Reecrire le programme Puiss qui exploite une procedure rernplacant
la sequence I et 2 et une fonction rernplacant la sequence 3.
Les sous programmes 79

jjExercice n°4 :/I


Soit l'algorithme du programme Comp suivant:

0) Debut Comp
1) Repeter
Ecrire (" Saisir un entier: ")
Lire (a)

un tn
Jusqua a>O

ie
2) Repeter

- T rg.
Ecrire (" Saisir un en tier : ")

is
Lire (b)
Jusqu'a b>O
3) Sia>b
ac .o
Alors Ecrire (a, ">", b)
Sinon
: B AC

Sib> a
Alors Ecrire (b, ">", a)
Sinon Ecrire(a, "=",b)
Fin Si
B

FinSi
4) Fin Comp
ge w.

Questions
Pa w

a) Traduire cet algorithme en Turbo Pascal et ecrire, sous forme de


w

commentaire, le role de ce programme?


b) Reecrire le programme Comp qui exploite deux nouveaux
modules : une premiere procedure pour la lecture des variables et
une deuxieme pour la comparaison et l'affichage du resultat.
c) La 2'" procedure, celle de la comparaison, peut-elle etre definie
110

comme une fonction? Si oui reecrire le programme Comp


exploitant cette fonction? sinon pourquoi?
80 Les sous programmes

!IExercice n°5 :II


Ecrire un programme Commence, en Turbo Pascal, utilisant une
procedure Aff_let pour afficher; Jes chaines de caracteres, cornrnencant
par la lettre "A", se trouvant dans un tableau T de type TAB, remplit
par n Chaines de caracteres.

!\Exercice n° 6 :II

un tn
ie
Soit un tableau T de n entiers positifs, avec n E [5 .. 35]. Ecrire un

- T rg.
is
programme, en Turbo Pascal, qui permet de calculer le nombre
d'occurrences d'un entier (x) dans le tableau T ainsi que la position de sa
premiere occurrence, s'il existe.
ac .o
Exercice n° 7 :
: B AC

Soient T 1 et T2 deux tableaux contenant respectivement n et m


entiers avec n et m :::; 30.
Ecrire un programme, en Turbo Pascal, qui permet de calculer le nombre
B

d'entiers pairs se trouvant dans Tl et T2.


ge w.

!IExercice n° 8 :II
Ecrire un programme, en Turbo Pascal, qui permet de saisir les
Pa w

moyennes des el eves d'une classe, de rechercher la moyenne du I er et


celle du demier de la classe et de calculer la moyenne arithmetique des
w

eleves de cette derniere,

Exercice
Ecrire un programme, en Turbo Pascal, qui permet de saisir une
chaine de caracteres (ch) non vide, de calculer le nombre d'espaces
qu'elle contient initialement, d'effacer les espaces superflus (inutiles) et
d'afficher la nouvelle chaine ainsi que le nouveau nombre d'espaces
qu'elle contient finalement.
Les sous programmes 81

Exercice n° 10 :
Ecrire un programme, en Turbo Pascal, qui pennet de saisir une
chaine de caracteres (ch) non vide, de la purifier et de determiner la
surcharge de la chaine initiale.
Une chaine est dite pure si elle ne contient que des caracteres
alphabetiques et la surcharge d'une chaine est le nombre de caracteres
non alphabetiques,

un tn
ie
Exercice n° 11 :

- T rg.
is
Soit T un tableau contenant n entiers positifs et non nuls :::; 9999,
avec n:::; 100.
Ecrire un programme, en Turbo Pascal, permettant de calculer le
ac .o
nombre d'entiers d'un seul chiffre, de deux chiffres, de trois chiffres et le
nombre d'entiers de 4 chiffres se trouvant dans le tableau T.
: B AC

Exemple:
Soit T un tableau de 8 entiers :
T I I 00 3 75 90 I 2008 I 80 85 90 I
B

2 3 4 5 6 7 8 100
ge w.

Resultat : l entier d'un seul chiffre, 4 entiers de 2 chiffres, 2 entiers de 3


chiffres et I entier de 4 chiffres.
Pa w

!IExercice n° 12 :II
w

Soient TN, TP et TM trois tableaux contenant chacun n donnees


relatives aux candidats participant a un concours national, avec 200:::; n :::;
20000.
Le tableau TN contient les noms des candidats, TP contient leurs
prenorns et TM contient Jes moyennes generales des epreuves passees par
chacun des n candidats.
Ecrire un programme, en Turbo Pascal, qui permet d'afficher !es
noms, prenorns et Jes moyennes generates des candidats admis, sachant
qu'un candidat n'est admis que s'il a une moyenne generale > 12.
82 Les sous programmes

La direction du club d'informatique de votre lycee, dont vous etes


un membre, desire developper un programme, en Turbo Pascal, qui
permet de generer des adresses E-mail a tous les adherents au club (500
adherents au maximum).
'une adresse E-mail est composee d'un premier bloc identifiant
I 'adherent, compose des trois premiers caracteres du nom de I 'adherent,

un tn
Jes trois derniers caracteres de son prenorn suivis par son nurnero

ie
d'inscription au club (le rang de l'adherent dans le tableau) et d'un
deuxieme bloc contenant la chaine « @Club_info.org »,

- T rg.
is
Exemple:
Norn= Chaouch,
ac .o
Prenom = Esse et
Numero d'inscription = I 00
: B AC

Q Adresse E-mail=« Chasse I OO@Club _ info.org »

Rendez service, alors, a votre club en creant ce programme qui


B

permet de saisir les donnees necessaires, de creer les adresses E-mail de


tous Jes adherents au club et de Jes afficher.
ge w.

Exercice n° 14 :
Pa w

Ecrire un programme, en Turbo Pascal, qui permet d'afficher le


w

nombre de lettres en majuscule, en minuscule et le nombre de chiffres se


trouvant dans une chaine de caracteres non vide.
Exemple: Si la chaine =" Date de naissance: Mardi le 21 Juin 2005"
Le nombre de lettres en majuscule = 3, lettres en minuscule= 23 et
le nombre de chiffres = 6
N.B : Jes caracteres speciaux ne seront pas cornptes.

xercice n° 15 :

Ecrire un programme, en Turbo Pascal, qui pennet de verifier si un


nombre, positif et non nu!, est eguilibre ou non.
Les sous programmes 83

Un nombre, est dit "equllibre" si chacun de ses chiffres a la


merne parite que la position quil occupe. La position d'un chiffre est le
rang du chiffre occupe dans le nombre, de droite a gauche et commence
a partir de I.
Exemple: 6743 est un nombre equilibre 7 3 a la position I, 4 a
la position 2, 7 a la position 3 et 6 a la position 4.

!IExercice n° 16 :II

un n
ie
Ecrire un programme, en Turbo Pascal, qui permet d'eclater un

t
- T rg.
tableau T de n entiers positifs et non nuls, avec n E [5 .. 50] en deux

is
tableaux TP et Tl con tenant respectivement I' ensemble des en tiers pairs
et celui d'entiers impairs, se trouvant dans le tableau T.
ac .o
Exemple:
: B AC

T 12 4 5 100 I 58
I 2 3 4 5 6 50

Tl 5
B

2 50
ge w.

TP 12 4 100 58
I 2 3 4 50
Pa w

!IExercice n° 17 :II
w

Ecrire un programme, en Turbo Pascal, qui permet d'eclater un


tableau T contenant n caracteres imprimables, n E [5 .. 70], en deux
tableaux : TL contenant I'ensernble des lettres et TC contenant le reste
des caracteres non alphabetiques.
N.B: Un caractere imprimable est celui dont le code ASCII est
entre 33 et 127.
Exemple:

I * # z
4 5 6 7 70
84 Les sous programmes

TL IA IzI I z
l 2 3 4 70

TC II I* I #
2 3 70

IIExercice n° 18 :II

un n
Ecrire un programme, en Turbo Pascal, qui permet de fusionner le

ie
contenu des deux tableaux TL de n lettres

t
- T rg.
is
(n E [ I .. IO] ) et TC den chiffres positifs, dans un tableau T Jes n
lettres altemees avec les n chiffres.
Exemple:
ac .o
TL I h k p A
: B AC

2 3 4 5 10
TC I 2 8 9 6 5
l 2 3 4 5 10
Tl h
I 2
I k IsI I 9
I p
I6I A
I 10 5
B

2 3 4 5 6 7 8 9 20
ge w.

IIExercice n° 19 :II
Pa w

Ecrire un programme, en Turbo Pascal, permettant de verifier si un


w

tableau T de n entiers (0 < n <= I 00) est symetrique ou asymetrique.


Exemples:
T 12 56 -9 -9 56 12
2 3 4 5 6 JOO

7 Test un tableau symetrique

T 12 66 -9 -9 56 12
2 3 4 5 6 JOO

7 T est un tableau asymetrique


Les sous programmes 85

xercice n° 20 :

Soit un tableau T contenant n entiers (n :::;; 35). Ecrire un


programme, en Turbo Pascal, qui permet de supprimer un entier se
trouvant dans une case d'indice P du tableau T.
Exemple:
T I 12 I 56 -9 I 1 oo I 506 I 3 12 I 0

un tn
2 3 4 5 6 35

ie
7 T avant la suppression,

- T rg.
Si P = 4 alors

is
T I 12 I 56 -9 I 506 I 312 I 0
I 2 3 4 5 35
ac .o
7 T apres la suppression

:II
: B AC

!IExercice n° 21

Soit la suite U suivante :


B
ge w.

u Pour n > I
Pa w

Ecrire un programme, en Turbo Pascal, qui permet de remplir un


tableau T par Jes n premiers termes de la suite U et de Jes afficher avec n
w

E [2 .. 500).

cice n° 22:

Soit la suite de Fibonacci suivante definie par :

Pour n > 2

Ecrire un programme, en Turbo Pascal, permettant d'afficher les n


(n E [4 .. 30]) premiers termes pairs de cette suite et de verifier si un entier
x (x E [50 .. 1000]), saisi au clavier est un terme de la suite ou non.
86 Les sous programmes

!IExercice n° 23 :II
Soit Jes suites U et V definies comme suit :

u U n = 2*U n-1 +
v
_!!..=.!.. Pour n > I
2

un tn
ie
- T rg.
is
v Yn= 2*V11_1 + U,,
ac .o
Pour n > I
2
: B AC

Ecrire un programme, en Turbo Pascal, permettant d'afficher Jes n


termes de la suite U suivis par Jes n termes de la suite V, n E [2 . .40].
B

!IExercice n° 24 :!I
ge w.

Ecrire un programme, en Turbo Pascal, qui permet de determiner le


PGCD de n entiers positifs et non nuls, avec n E [2 .. 20].
Pa w

Exemple: Le PGCD( 15,6,9) = PGCD(PGCD(lS,6),9) = PGCD(J.,9) = 3


w

Indication :
Sachant que PGCD(a,b) = PGCD(d,b) si a >b avec d = a - b.
PGCD(a,b) = PGCD(a,d) si b >a avec d= b - a

Tant que la differenced entre a et best non nulle, on remplace a


par d ou b par d. La derniere difference d non nulle est consideree : le
PGCD des deux nombres.

Exemples:
1) PGCD(lS,15)=?
b d
I ts I 15 0
Q PGCD(15,15) = 15
Les sous programmes 87

2) PGCD(6,26)=?

a b d
6 26 20
6 20 14
6 14 8
6 8 2
6 2 4
4 2 2

un tn
2 2

ie
0

- T rg.
Q PGCD(6,26) = 2

is
Exercice n° 25 :
ac .o
Ecrire un programme, en Turbo Pascal, qui permet de faire une
rotation a droite, d'ordre K, de I' ensemble des n en tiers se trouvant dans
: B AC

un tableau T avec n E [5 .. 30] et K E [ I . n-1].


Indication :
Une rotation a droite d'ordre I des elements d'un tableau consiste a
a
B

deplacer chaque element vers la case droite adjacente, le dernier sera


deplace vers la premiere case.
ge w.

Exemple:
Soit T un tableau de 6 entiers :
Pa w

TI
w

12 56 -9 100 506 I 312 I


2 3 4 5 6 30
7 T avant la rotation,
Si k = 3 alors
T I I 00 I 506 I 3 12 I 12 I 56 I -9
I 2 3 4 5 6 30
7 T apres une rotation d'ordre k = 3
88 Les sous programmes

rcice n° 26:

Ecrire un programme, en Turbo Pascal, qui permet de convertir un


nombre decimal positif en un nombre binaire.
Exemples:
(12)10 = (1100)2 ' (85)10 = (1010101)2
Indication :

un tn
ie
Pour convertir un nombre decimal n en binaire on procede de la
maniere suivante :

- T rg.
is
1) On di vise n par 2
2) On garde le reste de la division a cote !
ac .o
3) On remplace n par le quotient de la division den par 2.
4) On repete les etapes I, 2 et 3 jusqu'a obtenir un quotient nu!.
: B AC

Le resultat de la conversion est la succession des restes determines


au paravent, ranges dans l'ordre inverse de leurs apparitions: le l " reste
apparu sera le chiffre des unites du nombre binaire.
B

Exemple:
ge w.

On desire convertir le nombre decimal n = (12)10 en un nombre binaire:


Pa w
w

2
0
des restes

I (12)10 = (1100)2
I
Les sous programmes 89

!IExercice n° 27 :II
Ecrire un programme, en Turbo Pascal, qui pennet de convertir un
nombre binaire en un nombre decimal.
Exemples: (10110)2=(22)10. (1100 too), = (100)10
Indication : Pour convertir un nombre binaire n en decimal on precede

un tn
de la maniere suivante :

ie
I) On attribue un rang pour chaque chiffre de n, en cornmencant par le

- T rg.
a

is
rang O et ceci de droite gauche,
2) On multiplie chaque chiffre du nombre n par 2 eleve a l'exposant du
rang qu'il occupe.
ac .o
C5? Le resultat de la conversion est Ia somme des produits.
: B AC

Exemple:
On desire convertir le nombre binaire n = (10110)2 en decimal:
B

n = ( 1 O I 1 0 )2 = (?)IO
ge w.

4 3 2 1 0
= ( I *24) + (0*23) + (1 *22) + (1 *i) + (0*2°)
Pa w

= 16+0+4+2+0
= (22)10
w

1 (10110)2 = (22)10 1

0
un tn
ie
- T rg.
is
Important
ac .o
: B AC

Nous portons a la connaissance de nos chers lecteurs que les


exercices proposes dans ce manuel sont tous corriges, testes et
executes convenablement. Comme nous avons le grand plaisir de
Yous informer que les deux etapes : Analyse et Algorithme de
B

tous ces exercices sont proposees, conforrnement au programme


officiel des sections scientifiques, dans un 2" manuel s'intitulant
ge w.

1110

"Programmat ion : Analyse et Algorithme" de la merne


collection "Essentiel lnformatique ".
Pa w

Que la paix soit avec Yous tout au long de votre parcours.


w
Les sous programmes 91

Corriges
II I

un tn
ie
- T rg.
is
a) Traduction en Turbo Pascal
ac .o
Program Prod ;
Uses Wincrt ;
Var x, y, p, i, j : Integer;
: B AC

Begin
Write(' Saisir deux entiers: ');
Readln (x, y) ;
B

p :=O;
For i := I To ABS (x) Do
ge w.

For j := I To ABS (y) Do


P :=P+l;
Pa w

IF (x < 0) XOR (y < 0)


Then P := -P;
w

Write ('Le produit de ces deux entiers = ', P);


End.
Le programme Prod perrnet de calculer le produit de deux entiers (x*y).

b) Le programme Prod utilisant une fonction Cale:

Program Prod ;
Uses Wincrt ;
Var x,y: Integer;

Function Cale (a, b: Integer): Integer;


Var
p, i, j : Integer;
92 Les sous programmes

Begin
p := 0;
For i := 1 To Abs(a) Do
For j := 1 To Abs(b) Do
P :=P+I;
IF (a< 0) XOR (b < 0) Then P := -P;

Cale:= P;
End;

un tn
ie
{Programme principal}
Begin

- T rg.
Write(' Saisir deux entiers : ') ;

is
Readln (x,y) ;
Write(' Le produit de ces deux entiers = ', calc (x,y));
ac .o
End.
: B AC

Program Nombre;
Uses Wincrt ;
Type
B

Tab = Array [ I.. I 00] of Integer;


ge w.

Var
T: Tab;
n, i: Integer;
Pa w

Function Nb_2Chiff (n: Integer; T: Tab): Integer;


Var
w

x, i : Integer;
Begin
x :=O;
For i := 1 Ton Do
If T[i] In [10 .. 99]
Then
x := x+I;
Nb_2Chiff:= x;
End;
Les sous programmes 93

{Programme principal}

Begin
Repeat
Write ('Saisir le nombre de valeurs : ') ;
Readln (n);
Untiln ln[I..100];

For i :=I Ton. Do


Begin

un tn
Write ('Saisir une valeur : ') ;

ie
Readln ( T[i] );
End;

- T rg.
is
Write ('le nombre d"entier de deux chiffres est=', Nb_2chiff (n,T));
End.
ac .o
!IExercice n°3 :II
: B AC

a) Traduction en Turbo Pascal


Program Puiss;
B

Uses Wincrt ;
Var x, y, p, i: Integer;
ge w.

Begin
Repeat
Write ('Saisir un entier: ');
Pa w

Readln (x);
Until x>O ;
w

Repeat
Write ('Saisir un exposant: ');
Readln (y);
Until y>O;
p :=I;
For i := I Toy Do
p := p*x;

Write (p);
End.

Le programme puiss permet de calculer (x") avec x > 0 et y >O


94 Les sous programmes

b) Le programme Puiss utilisant une procedure saisie et une fonction


Cale:

Program Puiss;
Uses Wincrt ;
Var x.y: Integer;

Procedure Saisie (Var n : integer);

un tn
Begin

ie
Repeat

- T rg.
Write ('Saisir un entier: ');

is
Readln (n) ;
Until n>O
ac .o
End;

Function Cale (a.b : Integer) : Integer;


: B AC

Var
p, i : Integer;
Begin
p :=I;
B

For i := I Toy Do
ge w.

p :=p*x;

Cale:= p;
Pa w

End;
( Programme principal)
w

Begin

Saisie (x) ;
Saisie(y) ;

Write (x,' exposant', y,' ' calc(x,y));


End.
Les sous programmes 95

!IExercice n°4 :II


a) Traduction en Turbo Pascal

Program Comp;
Uses wincrt ;
Var
a,b: r nteger;

un n
ie
Begin

t
- T rg.
Repeat

is
Write(' Saisir un entier : ') ;
Readln (a) ;
ac .o
Until a>O;

Repeat
: B AC

Write(' Saisir un entier: ');


Readln (b);
Until b>O;
B

Ifa > b
ge w.

Then
Write (a, '>', b)
Pa w

Else
Ifb > a
w

Then
Write(b, '>',a)
Else
Write (a, '=', b);
End.

Le programme Comp permet de comparer les deux entiers positifs et non


nuls a et b.
96 Les sous programmes

b) Le programme Comp utilisant deux procedures Saisir et Comparer:

Program Comp;
Uses wincrt ;
Var
a,b: Integer;

Procedure Saisir (Var x : Integer);


Begin

un n
ie
Repeat

t
Write (' Saisir un entier : ') ;

- T rg.
is
Readln (x) ;
Until x>O;
End;
ac .o
Procedure Comparer (a,b : [nteger);
: B AC

Begin
If a> b
Then
Write(a, '>',b)
B

Else
Ifb > a
ge w.

Then
Write(b, '>',a)
Pa w

Else
Write (a, '=', b);
w

End;

{ Programme principal}
Begin
Saisir (a);
Saisir (b );
Comparer (a,b);
End.
Les sous programmes 97

c) Le programme Comp utilisant la procedure Saisir et la fonction


Comparer:

Program Comp;
Uses wincrt ;
Var
a,b: Integer;

Procedure Saisir (Var x: Integer);

un tn
ie
Begin
Repeat

- T rg.
is
Write (' Saisir un entier : ') ;
Readln (x);
Until x>O;
ac .o
End;
Function Comparer (a,b: Integer): Char;
: B AC

Var c: char;
Begin
!fa> b
Then
B

c:='>'
Else
ge w.

Ifb > a
Then
Pa w

c:='<'
Else
w

c:='='
comparer := c;
End;

{ Programme principal}
Begin
Saisir (a);
Saisir (b);
Write (a, Comparer (a,b), b);
End.
98 Les sous programmes

Program Commence;
Uses Wincrt;
Type Tab= Array [1..50] ofString[lO];
Var
T: Tab;
n : Integer;

un tn
Procedure Saisie (Var x: Integer; Var T: TAB);

ie
Var
i : integer;

- T rg.
is
Begin
Repeat
Write (' Saisir le nombre de valeur a entrer : ') ;
ac .o
Readln (x);
Until x In [ I .. 50] ;
: B AC

For i := 1 To x Do
Begin
B

Write(' T[ ',i,' ] =' );


Readln (T[i]);
ge w.

End;
End;
Pa w

Procedure Aff_let (n : integer; T : TAB) ;


Var
w

i : Integer;
Begin

For i := 1 Ton Do
If T[i][l ]='A'
Then
Writeln (T[i]);
End;
{Programme principal}
Begin
Saisie (n, T) ;
Aff_let (n, T) ;
End.
Les sous programmes 99

!IExercice n°6 :II


Program Occurrence;
Uses Wincrt ;
Type
Tab= Array [1..35] of Integer;

un tn
Var

ie
T: Tab;

- T rg.
x, n, nb: Integer;

is
PROCEDURE Remp (VAR n: Integer; VAR T: TAB);
ac .o
Var i : Integer;
Begin
: B AC

Repeat
Write ('Saisir le nombre d"entiers a entrer : ') ;
Readln (n);
B

Until n In [5 .. 35];
ge w.

Fori := I Ton Do
Repeat
Pa w

Write ('Saisir I"entier n ° ', i,': ');


Readln (T[i]) ;
w

Until T[i]>= O;
End;
FUNCTION Position (x : Integer ; T:T AB): Integer;
Var
P : Integer;
Begin
P:-O;
Repeat
P := P+ I;
Until T[P] = x;

Position := P;
End;
100 Les sous programmes

\
FUNCTION Nornbre (n,x: Integer; T: TAB): Integer;
Var
i, nb : Integer;
Begin
nb:=0;
Fori :=lTonDo
lf T [i] = x
Then

un tn
ie
nb := nb +I ;

- T rg.
Nornbre := nb ;

is
End;
{ Programme principal}
ac .o
Begin
Remp (n,T);
: B AC

Write ('Saisir l"entier a rechercher: ') ;


Readln (x);
B

nb:= Nornbre (n, x, T) ;


If nb <> 0
ge w.

Then
begin
Writeln ('Le nornbre d"occurrences de ', x ,' dans cette liste
Pa w

d"entiers =' nb )·
' '
Writeln ('La premiere position est= ',Position ( x, T) );
w

end
Else Write (x, 'n"existe pas dans la liste d"entiers saisies! ! !');
End.

!IExercice n°7 :II


Program Pairs;
Uses Wincrt;
Type Tab= Array [ 1..30] of Integer;
Var Tl, T2: Tab;
n, rn : Integer;
Les sous programmes 101

PROCEDURE Remp (VAR n: Integer; VAR T: TAB);


Var
i : lnteger;
Begin
Repeat
Write ('Saisir le nombre d"entiers a entrer : ') ;
Readln (n);
Until n In [I .. 30];

un tn
ie
For i := I Ton Do
Begin

- T rg.
is
Write ('Saisir l"entier n ° ' ' i ' ' ·. ');'
Readln (T[i]) ;
End;
ac .o
End;
FUNCTION Compter (n: Integer; T: TAB) : Integer;
: B AC

Var
i, C : Integer;
Begin
B

C :=O;
For i := 1 To n Do
ge w.

ffT[i] MOD 2=0


Then
C:=C+l;
Pa w

Compter := C;
w

End;
{Programme principal}

Begin
Writeln ('**** Remplissage des entiers de la Jere liste ****');
Remp( n, TI);

Writeln ('**** Remplissage des entiers de la Zeme liste ****');


Remp (m, T2);

Write (' Le nombre d"entiers pairs se trouvant dans !es deux


tableaux = ', Compter (n, Tl) + Compter (m, T2));
End.
102 Les sous programmes

Program Moyenne;
Uses Wincrt ;
Type Moy= Array [ 1 . .40] of Real;

Var T: Moy;
n : Integer;

un tn
ie
PROCEDURE Rernp (VAR n: Integer; VAR T: Moy);

- T rg.
is
Var
i : Integer;
Begin
ac .o
Repeat
Write ('Saisir le nornbre d"eleves : ') ;
: B AC

Readln (n ) ;
Until n In [1 . .40];
For i := I Ton Do
B

Repeat
Write ('Saisir la rnoyenne de l"eleve n °', i,': ');
ge w.

Readln (T[i]) ;
Until (T[i]>= 0) AND (T[i]<=20);
End;
Pa w

FUNCTION Prem (n: Integer; T: Moy) : Real ;


w

Var
i : l nteger;
m : Real;
Begin
111:= O;
Fori := I Ton Do
lf'T[i]>m
Then
111 := T[i] ;
Prem := 111;
End;
Les sous programmes 103

FUNCTION Dern (n: Integer; T: Moy) : Real ;


Var i : Integer;
m: Real;
Begin
m:=20;
For i := I Ton Do
lfT[i] < m
Then m := T[i]
Dern:= m;

un tn
ie
End;
FUNCTION Arith (n: Integer; T: Moy): Real;

- T rg.
is
Var i : [nteger;
m: Real;
Begin
ac .o
m:=O;
For i := l Ton Do
: B AC

m:= m + T[i]/n;
Arith:= m;
End;
{ Programme principal}
B

Begin
Remp (n, T);
ge w.

Writeln ('La moyenne du premier = ', Prem (n,T) :2 :2 ) ;


Writeln ('La moyenne du dernier = ', Dern (n,T):2 :2 ) ;
Pa w

Write ('La moyenne arithrnetique = ', Arith (n,T):2 :2 ) ;


End.
w

Program Espaces;
Uses Wincrt ;
Var CH : String;
PROCEDURE Saisie (VAR CH : String) ;
Begin
Repeat
Write ('Saisir une chaine de caracteres non vide : ') ;
Readln (CH)
Until CH <> ";
End;
104 Les sous programmes

PROCEDURE Supp (VAR CH : String) ;


Begin
While POS (' ', CH)<> 0 Do
Delete (CH, POS (' ',CH), l);
End;

FUNCTION Nb_Esp (CH: String): Integer;


Var i, n: Integer;
Begin

un tn
ie
n :=O;
For i := I To Length (CH) Do

- T rg.
is
If CH[i]=' I

Then n := n+l;
Nb_Esp:=n;
ac .o
End;
{Programme principal}
: B AC

Begin
Saisie (CH) ;
Writeln ('Le nombre d"espaces initiaux = ', Nb_Esp (CH));
Supp (CH);
B

Writeln ('Le nombre d"espaces finaux = ', Nb_Esp (CH));


Write (CH);
ge w.

End.

:II
Pa w

!IExercice n°10
w

Program Pure;
Uses Wincrt;
Var CH : String;
L 1, L2 : Integer;
PROCEDURE Saisie (VAR CH : String) ;
Begin
Repeat
Write ('Saisir une chaine de caracteres non vide : ') ;
Readln (CH) ;
Until CH<>";
End;
Les sous programmes 105

PROCEDURE Supp (VAR CH : String) ;


Var i : Integer ;
Begin
i := l;
while (i<>O) AND (i<=length( ch) ) Do
IfNot (Upcase (CH[i]) In ['A' .. 'Z'])
Then Delete (CH, i,l)
Else i :=i+ 1;
End;

un n
ie
{Programme principal}

t
- T rg.
is
Begin
Saisie (CH);
LI:= Length (CH);
ac .o
Supp (CH);
L2 := Length (CH) ;
: B AC

Writeln ('La nouvelle chaine : ',CH) ;


Write ('Le nombre de caracteres non alphabetiques = ', Ll-L2);
End.
B

Exercice n°11 :
ge w.

Program Compter;
Pa w

Uses Wincrt;
Type
Tab= Array [1..100] of Integer;
w

Var
T: Tab;
n: Integer;
PROCEDURE Remp (VAR n : Integer; VAR T : TAB);
Var i : Integer;
Begin
Repeat
Write ('Saisir le nombre d"entiers a introduire : ') ;
Readln (n);
Until n In [1..100];
106 Les sous programmes

For i := 1 Ton Do
Repeat
Write ('Saisir l"entier nature) n° ', i, ' : ') ;
Readln (T[i])
Until (T[i]>= 0) AND (T[i]<=9999);
End;

PROCEDURE Compteurs (n: Integer; T: TAB) ;

un n
Var n 1, n2, n3, n4, i : Integer ;

ie
Begin

t
nl :=O;

- T rg.
is
n2:=0;
n3:=0;
n4:=0;
ac .o
For i := I Ton Do
: B AC

Case T[i] Of
0 .. 9 : nl :=nl+l;
10 .. 99 : n2 :=n2+1;
100 .. 999 : n3 :=n3+ 1 ;
B

Else
n4 := n4+1 ;
ge w.

End;
Pa w

Writeln ('Le nombre d"entiers de 4 chiffres = ', n4) ;


Writeln ('Le nombre d"entiers de 3 chiffres = ', n3) ;
w

Writeln ('Le nombre d"entiers de 2 chiffres = ', n2) ;


Write ('Le nombre d"entiers d" I seul chiffre = ', n 1) ;
End;
{Programme principal}
Begin
Remp(n,T);
Compteurs (n,T);
End.
Les sous programmes 107

Exercice n°12 :

Remarque : Afin que votre ordinateur soit capable dexecurer ce


programme on a reduit le nornbre de candidats a 20 et on a limite la taille
des noms et des prenorns a 15 caracteres maximum.

Program Admis;

un tn
Uses Wincrt ;

ie
Type

- T rg.
Tab I = Array [ 1..20] of String[ 15];

is
Tab2 = Array [ l..20] of Real;
Var
ac .o
TN, TP: Tabl;
TM: Tab2;
: B AC

n : Integer;
PROCEDURE Remp (Varn : Integer; Var T , TP : TAB I ; Var TM:
TAB2);
Var
B

i : Integer;
Begin
ge w.

Repeat
Write ('Saisir le nombre de candidats : ') ;
Pa w

Readln (n) ;
Until (n>= 2) AND (n<= 20);
w

For i := I Ton Do
Begin
Writeln ('Candidats n° ', i, ' : ' );

Repeat
Write ('Nom : ') ;
Readln (TN[i]);
Until TN[i][l] In ['A' .. 'Z'];

Repeat
Write (Prenorn : ') ;
Readln (TP[i]);
Until TP[i][l] In ['A' .. 'Z'];
108 Les sous programmes

Repeat
Write (' Moyenne generale : ') ;
Readln(TM [i]);
Until (TM[i]>=O) AND (TM[i]<=20);
End;
End;

PROCEDURE Affiche (n: Integer; TN, TP:TABI; TM: TAB2);

un tn
ie
Var
i : Integer;

- T rg.
is
Begin
Writeln ('La liste des candidats admis : ')
For i := 1 Ton Do
ac .o
IfTM[i]>=l 2 Then
Writeln (TN[i],' ', TP[i]);
: B AC

End;
{Programme principal}
Begin
B

Remp (n, TN, TP, TM);


Affiche (n, TN, TP, TM);
ge w.

End.

!IExercice :II
Pa w

n°13
w

Remarque : Afin que votre ordinateur soit capable dexecuter ce


programme on a reduit le nombre d'adherents a 50 et on a limite la taille
des noms, des prenorns et des adresses a 25 caracteres.

Program Club;
Uses Wincrt;
Type
Tab= Array [ 1 .. 50] of String[25];
Var
TE, TP, TN: Tab;
n : Integer;
Les sous programmes 109

PROCEDURE Remp (VARn: lnteger; VAR TN, TP: TAB);


Var i : Integer;
Begin
Repeat
Write ('Saisir le nombre dadherents : ') ;
Readln (n);
Until (n>= 1) AND (n<= 500);
For i := I Ton Do
Begin

un tn
ie
Writeln (Adherents n° ', i, ' : ');
Repeat

- T rg.
Write ('Norn : ') ;

is
Readln (TN[i]);
Until TN[i][I) In ['A' .. 'Z'];
Repeat
ac .o
Write (Prenom : ') ;
Readln (TP[i]);
: B AC

Until TP[i][l] In ['A' . .'Z'];


End;
End;
B

PROCEDURE E_mail (n: Integer; TN,TP: TAB; VAR TE:TAB);


Var i: Integer;
ge w.

c I , c2, c3 : String;
Begin
Fori := I Ton Do
Pa w

Begin
cl:= Copy (TN[i),1,3);
w

c2 := Copy (TP[i], Length(TP[i])-2,3);

STR(i,c3);

TE[i] :=cl+ c2 + c3 + '@Club_info.org';


End;
End;
PROCEDURE Affiche (n : Integer; TE : TAB);
Var i : Integer;
Begin
For i := I To n Do
Writeln (Adherent n° ' i ' · ' TE[i] )·
' ' . ' '
End;
110 Les sous programmes

{ Programme principal}
Begin
Remp (n, TN, TP);
E_mail (n, TN, TP, TE);
Affiche (n, TE);
End.

Exercice n°14 :

un tn
ie
Program Nombres;
Uses Wincrt ;

- T rg.
is
Var Ch : String;

PROCEDURE Saisie (VAR CH : String) ;


ac .o
Begin
Repeat
: B AC

Write ('Saisir une chaine de caracteres non vide : ') ;


Readln (CH)
Until CH<>";
End;
B

Function Compter (Ch: String; b I ,b2 :char) : integer;


Var i, nb: Integer;
ge w.

Begin
nb:=O;
For i := I To Length (ch) Do
Pa w

If Ch [i] in [bl .. b2]


Then
w

nb:=nb+I;

Compter := nb;
End;

{Programme principal}

Begin
Saisie (Ch);
Writeln ('Le nornbre de lettres en majuscule = ', Compter (Ch,'A','Z')
);
Writeln ('Le nombre de lettres en minuscule=', Compter (Ch,'a','z')
);
Write ('Le nornbre de chiffres = ', Compter (Ch,'0','9')
);
End.
Les sous programmes 111

!IExercice n°15 :II


Program Equilibre;
Uses Winett ;
Var n: lnteger;

PROCEDURE Saisie ( Var x: lnteger);


Begin

un n
ie
Repeat

t
Write(' Saisir un nombre >O : ' ) ;

- T rg.
is
Readln(x);
Until x >O;
End;
ac .o
FUNCTION Verif (n: Integer): Boolean;
: B AC

Var
i, x, d, e: Integer;
Ch: String;
v: Boolean;
B

Begin
STR (n, Ch);
ge w.

v := True ;
i := Length(Ch) +I;
Repeat
Pa w

i := i-1;
d := Length (Ch) -i+ I;
w

Val (Ch]d], x, ej ;
v := (x MOD 2 ) = ( i MOD 2 );
Until (v = False) OR (i = I);
Yerif := v;
End;
l Programme principal]
Begin
Saisie (n);
If Yerif(n)
Then Write (n,' est equilibre.')
Else Write (n,' n"est pas equilibre.'}:
End.
112 Les sous programmes

Program Eclatement;
Uses Wincrt;
Type
Tab= Array [ 1..50] oflnteger;
Var
T, Tl, TP: Tab;

un n
ie
n, ni, np : Integer;

t
- T rg.
is
PROCEDURE Remp (VAR n : Integer; VAR T : TAB);
Var
i : Integer;
ac .o
Begin
Repeat
Write ('Saisir le nombre d"entiers a introduire : ') ;
: B AC

Readln (n)
Until n In [5 .. 50];
B

Fori := I Ton Do
Repeat
ge w.

Write ('Saisir l"entier n°', i, ' : ') ;


Readln (T[i]) ;
Until T[i]> O;
Pa w

End;
w

PROCEDURE Eclat (n : Integer; T: TAB; Var np, ni : Integer; Var


TP,TI :TAB);
Var i : Integer;
Begin
np:=O;
ni := 0;

Fori :=l Ton Do


IJT[i] Mod 2 = 0
Then
Begin
np:= np + 1;
TP[ np] := T[i] ;
End
Les sous programmes 113

Else
Begin
ni := ni + J;
Tl[ni] := T[i] ;
End;
End;

PROCEDURE Affiche (n: Integer; T:T AB) ;


Var i : Integer;
Begin

un tn
ie
For i := I To n Do
Write (T [i], ' ');

- T rg.
End;

is
{ Programme principal}
ac .o
Begin
Remp (n,T);
Eclat (n,T,np,ni,TP,TI);
: B AC

Writeln ('La liste des entiers pairs : ') ; ·


Affiche (np, TP) ;
Writeln;
B

Writeln ('La liste des entiers impairs : ') ;


Affiche (ni, TI);
ge w.

End.

!!Exercice n°17 :II


Pa w
w

Program Eclatement;
Uses Wincrt ;
Type Tab= Array [1..70) of Char;
Var T, TL, TC: Tab;
n, nl, nc : [nteger;

PROCEDURE Rernp (VAR n: Integer; VAR T: TAB);


Var i : Integer ;
Begin
Repeat
Write ('Saisir le nombre de caracteres a introduire : ') ;
Readln (n);
Until n In [5 .. 70];
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un n t
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un n t
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie
w
Pa w
ge w.
B
: B AC
ac .o
- T rg.
un tn
is
ie