Vous êtes sur la page 1sur 9

Série III

Exercice 1.
Soit T un tableau de N chaines de caractères non vides et dont la taille maximale est 5.
On se propose d’écrire un programme Pascal permettant de réaliser le traitement suivant :
 Remplir le tableau T par N chaines (n entre 2 et 20)
 Eliminer de chaque chaine tous les caractères non alphabétiques
 Convertir toutes les chaines non vides en majuscules
 Afficher toutes les chaines dont la taille est strictement supérieur à 2
Exemple : Pour N=4, soit le tableau suivant
aB*+y 23 ?uy 879 ! YHga
1 2 3 4
Alors le programme affiche :
ABY YHGA
program ex1;
uses wincrt;
type
tab=array[1..20]of string[6];
var
t:tab;
n:integer;

procedure saisie(var n:integer);


begin
repeat
writeln('Donner n entre 2 et 20');
readln(n);
until n in [2..20];
end;

procedure remplir(var t:tab; n:integer);


var
i:integer;
begin
for i:=1 to n do
repeat
writeln('Donner t[',i,']=');
readln(t[i]);
until length(t[i]) in [1..5];
end;

procedure elimine(var t:tab;n:integer);


var
ch,chx:string;
i,j:integer;
begin
for i:=1 to n do
begin
ch:=t[i];
chx:='';
for j:=1 to length(ch) do
if upcase(ch[j]) in ['A'..'Z'] then
chx:=chx+ch[j];
t[i]:=chx;
Série III
end;
end;

procedure convertir (var t:tab; n:integer);


var
i,j:integer;
ch:string;
begin
for i:=1 to n do
begin
ch:=t[i];
for j:=1 to length(ch) do
ch[j]:=upcase(ch[j]);
t[i]:=ch;
end;
end;

procedure affiche(t:tab;n:integer);
var
i:integer;
begin
for i:=1 to n do
if length(t[i])>2 then
write(t[i],' | ');
end;

begin
saisie(n);
remplir(t,n);
elimine(t,n);
convertir(t,n);
affiche(t,n);
end.

Exercice 2.
Ecrire un programme qui détermine la position de la 2ème voyelle d’un tableau T de N lettres Majuscules (N
entre 10 et 20). S’il y a moins que 2 voyelles, le programme affichera –1
program ex2;
uses wincrt;
type
tab=array[1..20]of char;
var
t:tab;
n:integer;

procedure remplissage(var t:tab;var n:integer);


var
i:integer;
begin
repeat
writeln('Donner n entre 10 et 20');
readln(n);
Série III
until n in [7..20];

for i:=1 to n do
repeat
writeln('Donner T[',i,']=');
readln(t[i]);
until t[i] in ['A'..'Z'];
end;

function nbvoy(t:tab;n:integer):integer;
var
i,x:integer;
begin
x:=0;
for i:=1 to n do
if t[i] in ['A','E','Y','U','I','O'] then
x:=x+1;
nbvoy:=x;
end;

function posvoy(t:tab;n:integer):integer;
var
pp,i:integer;
begin
pp:=0;
i:=1;
repeat
if t[i] in ['A','E','Y','U','I','O'] then
pp:=i
else i:=i+1;

until (pp<>0);

i:=pp+1;
pp:=0;
repeat
if t[i] in ['A','E','Y','U','I','O'] then
pp:=i
else i:=i+1;
until (pp<>0);

posvoy:=pp;
end;

begin
remplissage(t,n);
if nbvoy(t,n)<2 then
writeln('-1')
else
writeln('La position de la deuxiéme voyelle est ',posvoy(t,n));
end.
Série III
Exercice 3.
On se propose de simuler un jeu qui consiste à faire des lancées de deux dés, le score est calculé en
additionnant les points de chaque dé lors d’une lancée.
Le jeu se termine au bout de dix lancées au maximum.
Si le score du joueur atteint ou dépasse 50 points ou s’il obtient deux doublés successifs, il est déclaré
gagnant.
Ecrire le programme pascal permettant de simuler le jeu ci-dessus.
program jeu_de;
uses wincrt;

procedure saisie(var face:integer);


begin
randomize;
face:=random(6)+1;
end;

procedure jeu;
var
aux1,aux2,nb,s,d1,d2:integer;
double:boolean;
begin
saisie (d1);
writeln('Dés 1=',d1);
saisie (d2);
writeln('Dés 2=',d2);
nb:=1;
s:=d1+d2;
writeln('Lancée n° ',nb,' Score ',s);
repeat
randomize;
aux1:=d1;
aux2:=d2;
saisie (d1);
writeln('Dés 1=',d1);
saisie (d2);
writeln('Dés 2=',d2);
nb:=nb+1 ;
s:=s+d1+d2;
writeln('Lancée n° ',nb,' Score ',s);
double:=(d1=d2) and (aux1=aux2);
until (nb=10) or (double=true) or (s>=50);

if (s>=50) then
writeln ('Bravo gagnant avec un score de ',s,' points')
else if (double=true) then
writeln ('Bravo gagnant avec DEUX DOUBLées successifs')
else
writeln ('Echec');
end;
begin
jeu;
end.
Série III
Exercice 4.
Ecrire la traduction Pascal d’un programme qui permet de remplir un tableau T par N entiers (n dans 5..10)
sans doublons (l’élément doit exister une seul fois dans le tableau) puis insérer un élément donné X (sachant
que x n’existe pas dans le tableau) dans une position donnée ix. Enfin afficher Le tableau
Exemple :
Pour n =7, soit T :
1 55 7 99 22 33 54
Si x=10 et ix=5 alors le tableau devient :
1 55 7 99 10 22 33 54

program ex4;
uses wincrt;
type
tab=array[1..11]of integer;
var
t:tab;
n:integer;

procedure saisie(var n:integer);


begin
repeat
writeln('Donner n entre 5 et 10');
readln(n);
until n in [5..10];
end;

function existe(x:integer;t:tab;ind:integer):boolean;
var
j:integer;
test:boolean;
begin
j:=1;
repeat
test:=t[j]=x;
j:=j+1;
until (test) or (j>ind);
existe:=test;
end;

procedure remplir(var t:tab; n:integer);


var
i:integer;
begin
writeln('Donner T[1]=');
readln(t[1]);
for i:=2 to n do
repeat
writeln('Donner t[',i,']=');
readln(t[i]);
until existe(t[i],t,i-1)=false;
end;
Série III
procedure decalage(var t:tab;n:integer;ind:integer);
var
i:integer;
begin
for i:=n downto ind+1 do
t[i]:=t[i-1];
end;

procedure inser(var t:tab;var n:integer);


var
x,ix:integer;
begin
repeat
writeln('Donner l''entier ');
readln(x);
writeln('Donner la position d''insertion');
readln(ix);
until (ix in [1..n]) and (not(existe(x,t,n)));
n:=n+1;
decalage(t,n,ix);
t[ix]:=x;

end;

procedure affiche(t:tab;n:integer);
var
i:integer;
begin
for i:=1 to n do
write(t[i],' | ');
end;

begin
saisie(n);
remplir(t,n);
inser(t,n);
affiche(t,n);
end.

Exercice 5.
On se On se propose d'écrire un programme permettant de remplir deux tableaux V1 et V2 respectivement
par N et M entiers (avec N et M deux entiers de l'intervalle [2..20] et les éléments de V1 et V2 sont saisis dans
un ordre strictement croissant), puis de fusionner les éléments de ces deux tableaux dans un tableau V3 en
éliminant les redondances et en gardant l'ordre croissant des éléments. Enfin, le programme affichera les
éléments du tableau V3. Exemple : Si N =5, M = 7 et les éléments des deux tableaux V1 et V2 sont:

Alors le tableau V3 contiendra les éléments suivants:


Série III
program fusion_tab;
uses wincrt;
type
tabd= array[1..20] of integer;
tabr= array[1..20] of integer;
var
k,n,m:integer;
v1,v2:tabd;
v3:tabr;

procedure saisie (Var Nb : integer ; Var T :Tabd);


var
i:integer;
begin
repeat
writeln('Donner La taille du tableau :');
readln(nb);
until nb in [2..20];

writeln('Donner Elément° 1');


readln(t[1]);

for i:=2 to nb do
repeat
writeln('Donner Elément° ',i);
readln(t[i]);
until t[i]>t[i-1];

end;

procedure fusion (n,m:integer;v1,v2:tabd;var k:integer;var v3:tabr);


var
i,j,c:integer;
begin
i:=1;
j:=1;
k:=0;
repeat
k:=k+1;
if v1[i]<v2[j] then
begin
v3[k]:=v1[i];
i:=i+1;
end
else if v1[i]=v2[j] then
begin
v3[k]:=v1[i];
i:=i+1;
j:=j+1;
end
else
begin
Série III
v3[k]:=v2[j];
j:=j+1;
end;
until (i>n) or (j>m);

if j>m then
for c:=i to n do
begin
k:=k+1;
v3[k]:=v1[c];
end
else
for c:=j to m do
begin
k:=k+1;
v3[k]:=v2[c];
end;

end;

procedure affiche(nb:integer;t:tabr);
var
i:integer;
begin
for i:=1 to nb do
write(t[i],' | ');
end;

begin
Saisie (N, V1);
Saisie (M, V2);
Fusion (N, M, V1, V2, K, V3);
Affiche (K, V3);
end.

Exercice 6.
On se propose de saisir N entiers différents entre 1 et 100 (N étant un entier naturel compris entre 10 et 50)
puis afficher la plus longue séquence croissante tout en précisant la position du premier nombre de cette séquence.
Exemple : Pour N=15
1 2 3 1 2 3 4 5 6 7 8 2 3 4 5
Le programme affiche :
La plus longue séquence est 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * qui débute à la position 4 et elle est de longueur 7
program long_seq;
uses wincrt;
type tab=array[1..50]of integer;
var
lpls,ppls,n,h:integer;
t:tab;
procedure saisie ( var n:integer ;var t:tab);
var i:integer;
begin
Série III
repeat
write('Donner le nombre d''elements ');
readln(n);
until n in [10..50];

for i :=1 to n do
repeat
write('Entrer élément n° ',i,' ');
readln(t[i]);
until t[i] in [1..100];
end;

procedure position (n:integer;t:tab; var lpls,ppls:integer);


var
i: integer;
ls:integer;
db:integer;
begin
db:=1; ls:=1;
ppls:=1; lpls:=1;
for i :=2 to n do
if t[i]>t[i-1] then ls:=ls+1
else begin
if ls >lpls then begin
ppls:=db;
lpls:=ls;
end;
ls:=1;
db:=i;
end;

end;

begin
saisie(n,t);
position (n,t, lpls,ppls);
writeln('Longueur de la séquence croissante la plus longue= ', lpls);
writeln('Position de la séquence croissante la plus longue= ', ppls);
for h:=ppls to ppls+lpls-1 do
write(t[h],' * ');
end.