|
Tri d'un tableau de caractères |
|
|
|
Written by Administrator
|
|
Friday, 06 March 2009 14:36 |
Enoncé de l'exercie Soit un tableau T1 contenant N lettres majuscule(de A à Z), n étant un entier compris entre 5 et 20. On désire triés en ordre croissant les éléments de T1 et les ranger dans un tableau T2 en utilisant le principe suivant : 1. chercher la lttre qui a le plus petit code ASCII dans T1. 2. a) ranger cette lettre dans T2. b) remplacer cette lettre par '*' dans T1. 3. répéter n fois les étapes 1 et 2. Ecrire un programme Pascal qui permet de : * saisir les éléments de T1. * trier les éléments de T1 et les ranger dans T2. * afficher les éléments de T2 Solution en Pascal { La résolution de ce problème demande : _ Deux tableaux de 20 caractères au max. _ Une procedure Saisie permettant de saisir le tableau t1 et sa dimension n. _ Une procedure Trier qui permet de remplir le tableau T2 avec les éléments de t1 triés dans l'ordre croissant. _ Une procedure Afficher qui affiche les éléments de T2 apres le tri. } program triage;
uses wincrt;
type tab= array[1..20] of char;
var t1,t2:tab; n:integer;
{ La fonction recherche cherche l'indice de l'élément de T1 qui a le plus petit code Accii .}
function recherche (t1:tab;n:integer):integer;
var i,ordmin,indmin:integer;
begin ordmin:=255; for i:=1 to n do if (t1[i] <> '*') and (ord(t1[i])< ordmin) then begin ordmin:=ord(t1[i]); indmin:=i; end; recherche:=indmin; end;
{ Procedure Trier }
procedure trier (var t1,t2:tab; n:integer); var i,indmin: integer; begin for i:=1 to n do begin indmin:=recherche(t1,n); t2[i]:=t1[indmin]; t1[indmin]:='*'; end; end;
{ Procedure saisie les éléments de T1 doivent être des lettres majuscules }
procedure saisie(var t1: tab ; var n: integer); var i:integer;
begin write('Donner la dimension de votre tableau :'); repeat read(n); until (n in [5..20]);
writeLN('Saisir maintenant des lettres majuscules :'); for i:= 1 to n do repeat read(t1[i]); until(t1[i] in ['A'..'Z']);
end;
{ Procedure Afficher }
procedure afficher (t2: tab; n: integer);
var i:integer;
begin writeLN('Les lettres Triées dans l''ordre croissant :'); for i:=1 to n do writeln(t2[i]); end;
{ Le programme principal }
begin
saisie(t1,n); trier(T1,T2,n); afficher(t2,n); end.
|