Vous êtes sur la page 1sur 6

Correction Srie Tri & Recherche

Exercice 1.
Program exercice1;
uses wincrt ;
type
tab = array [1..20] of integer ;
var
t : tab ;
n , x , y : integer ;
procedure saisien(var n : integer ) ;
begin
repeat
writeln('Donner n entre 10 et 20 :');
readln (n) ;
until n in [10..20] ;
end;
procedure saisie (var m : integer );
begin
writeln('Donner un lment :');
readln(m);
end;
procedure remplissage (var t : tab ; n : integer );
var
i : integer ;
begin
for i:=1 to n do
begin
write('t[',i,'] = ');
readln (t[i]) ;
end;
end;
procedure affichage ( t : tab ; n : integer ) ;
var
i : integer ;
begin
for i:=1 to n do
write(t[i] , ' | ');
writeln ;
end;
procedure triInsert ( var t : tab ; n : integer );
var
i , j , tmp : integer ;
begin
for i:=2 to n do
begin
tmp:=t[i] ;
j:=i ;
while ((j-1)>=1) and (tmp<t[j-1]) do
begin
t[j] := t[j-1] ;
j:=j-1 ;
Lyce Pilote de Sousse 2015/2016
Mr. MANI Med Abdallah

Correction Srie Tri & Recherche


end;
t[j] := tmp ;
end;
end;
function rechercheSQ (n,m : integer ; t : tab ) : boolean ;
var
i : integer ;
exist : boolean ;
begin
i := 0 ;
repeat
begin
i:=i+1 ;
exist := t[i]=m ;
end;
until (i=n) or (exist=true) ;
rechercheSQ := exist ;
end;
function rechercheDI (t : tab ; n,m : integer ) : boolean ;
var
deb , fin , mil : integer ;
trouve : boolean ;
begin
deb :=1 ;
fin:= n ;
trouve:= false ;
repeat
begin
mil := (deb+fin) div 2 ;
if m=t[mil] then trouve := true
else if m<t[mil] then fin:= mil-1
else deb:= mil+1 ;
end;
until trouve or (deb>fin) ;
rechercheDI:=trouve ;
end;
begin
saisien(n);
remplissage (t,n);
affichage (t,n);
saisie(x);
if rechercheSQ(n,x,t) then writeln(x,' existe')
else writeln (x, ' n''existe pas');
triInsert (t,n);
affichage(t,n);
saisie(y);
if rechercheDI(t,n,y) then writeln(y,' existe')
else writeln(y,'n''existe pas') ;
end.

Exercice 2.
Program exercice2;
uses wincrt;
Lyce Pilote de Sousse 2015/2016
Mr. MANI Med Abdallah

Correction Srie Tri & Recherche


type
tab=array[1..20] of char;
var
t:tab;
n:integer;
procedure affiche (t:tab; n:integer);
var
i:integer;
begin
for i:=1 to n do
write(t[i],' | ');
writeln;
end;
procedure remplir(var t:tab;var n:integer);
var
i:integer;
begin
repeat
writeln('Donner n entre 10 et 20');
readln(n);
until n in [10..20];
for i:=1 to n do
repeat
writeln('T[',i,']=');
readln(t[i]);
until t[i] in ['A'..'Z'];
end;
Procedure permuter( var a:char; var b:char);
Var
P : char;
begin
p:=a;
a:=b;
b:=p;
end;
Procedure tric(var T:tab; n: integer);
Var
changer : boolean;
i: integer;
begin
repeat
changer:=false;
for i:=1 to n-1 do
if T[i] > T[i+1] then
begin
permuter (T[i] ,T[i+1]);
changer:=true;
end;
n := n-1 ;
until (n=1) or (changer = false);
end;
Lyce Pilote de Sousse 2015/2016
Mr. MANI Med Abdallah

Correction Srie Tri & Recherche


Procedure trid(var T:tab; n: integer);
Var
changer : boolean;
i: integer;
begin
repeat
changer:=false;
for i:=1 to n-1 do
if T[i] < T[i+1] then
begin
permuter (T[i] ,T[i+1]);
changer:=true;
end;
n := n-1 ;
until (n=1) or (changer = false);
end;
begin
remplir(t,n);
writeln('Tableau Avant Tri:');
Affiche(t,n);
Tric (t,n);
writeln('Tableau Aprs le Tri croissant :');
affiche(t,n);
Trid (t,n);
writeln('Tableau Aprs le Tri dcroissant :');
affiche(t,n);
end.

Exercice 3.
program exercice3;
uses wincrt;
type
tab=array [1..20] of string [10];
var
t:tab;
n,i:integer;
procedure saisie(var t:tab;var n:integer);
var
i,j:integer;
test:boolean;
begin
randomize;
n:=random(11)+10;
writeln('Le nombre de chaines est : ',n);
for i:=1 to n do
repeat
writeln('Donner la chaine [',i,'] minuscule dont la taille entre 3 et 10');
readln(t[i]);
j:=1;
repeat
test:=t[i][j] in ['a'..'z'];
j:=j+1;
until (test=false) or (j>length(t[i]));
until (test) and (length(t[i]) in [3..10]);
Lyce Pilote de Sousse 2015/2016
Mr. MANI Med Abdallah

Correction Srie Tri & Recherche


end;
procedure affiche (t:tab; n:integer);
var
i:integer;
begin
writeln;
for i:=1 to n do
write(t[i],' | ');
end;
procedure Tri (var t : tab; n:integer);
var
i,j:integer;
tmp:string;
begin
for i:=1 to n do
begin
tmp:=t[i];
j:=i;
while (j-1>=1) and (length(tmp)>length(t[j-1])) do
begin
t[j]:=t[j-1];
j:=j-1;
end;
t[j]:=tmp;
end;
end;
begin
saisie(t,n);
tri(t,n);
affiche(t,n);
end.

Exercice 4.
Program exercice4 ;
uses wincrt ;
Type
Tabm = Array [1..30] of Real ;
tabn = Array [1..30] of string[10] ;
var
N : integer ;
TN : tabn ;
TM : tabm ;
Procedure Saisie ( var TN : tabn ; var TM : tabm ; var n : integer ) ;
var
i , j : integer ;
test : boolean ;
Begin
Repeat
writeln('Donner le nombre d''lve entre 5..30') ;
readln(n) ;
until n in [5..30] ;
For i:= 1 to n do
Lyce Pilote de Sousse 2015/2016
Mr. MANI Med Abdallah

Correction Srie Tri & Recherche


Repeat
Writeln ( 'Nom[',i,']') ;
readln(TN[i]) ;
writeln('Moyenne[',i,']') ;
readln(TM[i]) ;
test := true ;
for j:= 1 to length(TN[i]) do
if not ( upcase(TN[i][j]) in ['A'..'Z']) then test := false ;
until (test ) and (length(TN[i])in [1..10]) and ( TM[i] <=20) and (TM[i]>=0);
end ;
Procedure Affiche ( TN : tabn ; TM : tabm ; n : integer ) ;
var
i : integer ;
begin
For i:= 1 to n do
Write(TN[i]:10,' | ');
writeln;
for i:= 1 to n do
write(TM[i]:10:2,' | ');
end ;
Procedure Tri ( var TN : tabn ;var TM : tabm ; n : integer ) ;
var
i , j , Pmax: integer ;
aux : real ;
aux1 : string ;
begin
for i:= 1 to n-1 do
begin
Pmax := i;
For j:= i+1 to n do
if TM[j]>TM[Pmax] then
Pmax := j ;
if Pmax <> i then
begin
aux := TM[Pmax] ;
TM[Pmax]:=TM[i];
TM[i]:=aux ;
aux1 := TN[Pmax] ;
TN[Pmax]:=TN[i] ;
TN[i]:=aux1 ;
end ;
end ;
end ;
Begin
Saisie ( TN , TM , N ) ;
Tri ( TN , TM , N ) ;
Affiche ( TN , TM , N );
end.

Lyce Pilote de Sousse 2015/2016


Mr. MANI Med Abdallah

Vous aimerez peut-être aussi