Exercice corrigé Bac 2009 Pratique: Tri par bloc (info)
Forum INFOMATH :: Enseignement de l'informatique :: Informatique - Collège & Lycée :: Exercices Pascal
Page 1 sur 1
Exercice corrigé Bac 2009 Pratique: Tri par bloc (info)
Exercice BAC INFO (pratique) 19 MAI 2009
*** pour les section maths, sciences, technique... ***
T un tableau de N lettres minuscules (6 <= N <= 100).
D et N deux entiers vérifiant :
Condition 1) D est un entier diviseur de N, D>1.
Condition 2) N est un entier tel que N = M * D
On se propose de trier les D éléments des M blocs disjoints qui constituent
le tableau T.
Écrire un programme :
1) lire les deux entiers N et D répondant aux conditions 1) et 2)
2) remplir le tableau T par N lettres minuscules
3) trier dans l'ordre croissant les éléments de chaque bloc de T
4) afficher le tableau T après le tri.
Voir la solution :
*** pour les section maths, sciences, technique... ***
T un tableau de N lettres minuscules (6 <= N <= 100).
D et N deux entiers vérifiant :
Condition 1) D est un entier diviseur de N, D>1.
Condition 2) N est un entier tel que N = M * D
On se propose de trier les D éléments des M blocs disjoints qui constituent
le tableau T.
Écrire un programme :
1) lire les deux entiers N et D répondant aux conditions 1) et 2)
2) remplir le tableau T par N lettres minuscules
3) trier dans l'ordre croissant les éléments de chaque bloc de T
4) afficher le tableau T après le tri.
Voir la solution :
- Code:
program tri2009;
uses wincrt;
type
TAB = array [1..200] of char;
var
T: TAB;
N, D: integer;
procedure afficher(T:TAB; N: integer);
var
i: integer;
begin
for i:=1 to N do
writeln('T[',i,'] = ',T[i]);
end;
procedure saisir(var N: integer; var D: integer);
begin
repeat
write('N = ');
readln(N);
write('D = ');
readln(D);
until (N mod D = 0) and (D > 1);
end;
procedure remplir(var T: TAB; N: integer);
var
i: integer;
begin
for i:=1 to N do
begin
repeat
write('Donner une lettre miniscule (n°',i,'): ');
readln(T[i]);
until (T[i] in ['a'..'z']);
end;
end;
procedure trier_bloc(deb: integer; fin: integer; var T:TAB);
var
i,j,pmin: integer;
aux: char;
begin
for i:=deb to fin-1 do
begin
pmin := i;
for j:=i+1 to fin do
if (T[j] < T[pmin]) then
pmin := j;
aux := T[i];
T[i] := T[pmin];
T[pmin] := aux;
end;
end;
procedure tri_global(var T:TAB; N,D: integer);
var
M,i,deb,fin: integer;
begin
M := N div D;
deb := 1;
fin := D;
for i:=1 to M do
begin
trier_bloc(deb, fin, T);
deb := deb + D;
fin := fin + D;
end;
end;
{ programme principal }
BEGIN
saisir(N,D);
remplir(T,N);
afficher(T,N);
tri_global(T,N,D);
writeln('après tri: ');
afficher(T,N);
END.
Dernière édition par nabiL le Dim 23 Mai - 22:24, édité 1 fois (Raison : Erreur détectée par Mlle FARAH & EMNA)
Napoléon- Admin
-
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7875
Date d'inscription : 19/03/2007
Feuille de personnage
Capacité linguistique:
(999/1000)
Sujets similaires
» Exercice corrigé Bac 2009 Pratique: Somme de blocs de nombres d'un tableau
» Exercice de révision BAC PRATIQUE 2012 + corrigé
» Exercice:Bac Pratique:Section info: Nombres super premiers
» Exercice corrigé : manipulation des diviseurs d'un nombre
» Corrigé bac pratique 2011 Sciences Informatique (8h 30 minute)
» Exercice de révision BAC PRATIQUE 2012 + corrigé
» Exercice:Bac Pratique:Section info: Nombres super premiers
» Exercice corrigé : manipulation des diviseurs d'un nombre
» Corrigé bac pratique 2011 Sciences Informatique (8h 30 minute)
Forum INFOMATH :: Enseignement de l'informatique :: Informatique - Collège & Lycée :: Exercices Pascal
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum