Tri d'un tableau de chaines de caracteres

gabsia Messages postés 9 Date d'inscription lundi 22 mai 2006 Statut Membre Dernière intervention 27 avril 2008 - 27 avril 2008 à 21:57
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 28 avril 2008 à 09:44
salut,
le traitement c'est trier un tableau de chaines de caractères en ordre croissant :
le critere de tri c'est la longueur de la chaine, si 2 chaines ont la meme longueur  , on trie selon l'ordre alphabetique.
voici le code que j'ai fait en pascal:
Program Tri_methode_Par_selection ;
  uses wincrt;
Type Tab = ARRAY [1..30] Of string ;
Const NMAX=20;
Var T : Tab ; N:integer;
PROCEDURE Saisir ( Var N : Integer ; Var T : Tab ) ;
Var i : Integer ;
Begin
Repeat
     writeln ('donner N');
     readln(N);
until (N in [2..NMAX]);
For i:= 1 To N Do
    repeat
         writeln(' donner T[',i,']');
         Readln ( T[i] ) ;
    until (T[i]<>'');
End ;
PROCEDURE Tri_selection (Var T : Tab ;N : Integer);
Var  i, ppm : Integer ;
      PROCEDURE Permute ( Var A, B : string ) ;
        Var Aux : string;
Begin
Aux := B ;
B := A ;               
A := Aux ;
End ;
 FUNCTION ppminimum( T : Tab; M , F : Integer ) : Integer;
Var posmin, j : Integer;
Begin
posmin := M;
For j := M+1 To F Do
   begin
          If (length(T [posmin])) > length (T [j] ) Then
                   posmin:= j;
          If (length(T [posmin]))= length (T [j] )  then
                   IF (T[posmin]>T[j]) then
                           posmin:=i;
   end;
write('fin ppmax');
ppminimum := posmin;
End ;

Begin
For i := 1 To N-1 Do
    Begin
           ppm := ppminimum ( T,i,N );
           If T[ppm] <> T[i]    Then
                     Permute ( T[ppm], T[i] );  
    End;
End;
PROCEDURE Affiche (T : Tab ; N : Integer ) ;
Var i : Integer ;
Begin
For i := 1 To N Do
        Writeln ( 'l''élément n° ',i, '=  ' ,T[i] ) ;  
End ;
Begin
Saisir ( N , T );
 Tri_selection ( T , N );
Affiche ( T , N );

End.

mais le problème j'ai erreur lors de l'execution apres le remplissage du tableau, malgres que ma démarche est raisonable.
Est ce que vous pouvez m'aider , m'indiquer ou le problème dans mon code ou me donner autre démarche.
Merci d'avance.

2 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
28 avril 2008 à 09:37
Bonjour [auteur/GABSIA/780491.aspx gabsia,]

"le traitement c'est trier un tableau de chaines de caractères en ordre croissant :
le critere de tri c'est la longueur de la chaine, si 2 chaines ont la meme longueur  , on trie selon l'ordre alphabetique."

Ce souci s'appelle : tri alphabétique, c'est-à-dire le tri normal que tu peux retrouver par exemple sur EXCEL..

Il n'y a donc pas besoin d'écrire tout ce code..
il suffit pour toi d'utiliser une méthode déjà prévue par Delphi (Sort par exemple) et le résultat est immédiat.
Je n'ai pas testé ton code mais vu la longueur...

cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 14
28 avril 2008 à 09:44
Tu peux donc trier ta liste et ensuite renseigner ton tableau ou le trier directement en utilisant d'autres techniques (voir exemple déposé par [auteur/FLORENTH/316333.aspx florenth])

Bref, il y a plein de solutions plus simples..

cantador
0