Tri d'un tableau de chaines de caracteres

Signaler
Messages postés
9
Date d'inscription
lundi 22 mai 2006
Statut
Membre
Dernière intervention
27 avril 2008
-
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
-
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

Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
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
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
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