IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Pascal Discussion :

Tri alphabétique


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Tri alphabétique
    bonjour
    c'est mon premier POST.
    j'ai realiser le programme ci-apres pour trier par ordre alphabetique 1 annuaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    Program Annuaire ;
    Uses Crt ;
    Const  max = 4 ;
    Type adressage = record
           Norue: byte ;
       adressRue: string [50] ;
          ville : string [20] ;
            BP  : byte ;
          end;
        Coordonnees = record
          Nom : string [30] ;
        Prenom: string [20] ;
      civilite: string [3] ;
      Ntelphon: byte ;
      adressEM: adressage ;
        end;
       Ensemblecoord = Array [1..max ] of coordonnees ;
       FF = file of ensemblecoord  ;
    VAR     Recueil : Ensemblecoord ;
            x       : ShortInt ;
            f       : FF;
     
    Procedure  affichage ( tab : ensemblecoord ) ;
        var i : byte ;
            s : ensemblecoord ;
            Begin
               reset (f) ;
               seek (f,filesize (f))  ;
              Repeat
              write(f,tab) ;
     
     
              until eof (f) ;
          end;
     
    Procedure trialpha (var coord : ensemblecoord) ;
      var  v1,v2 : byte;
           sn : ensemblecoord;
           n1,n2 : char ;
           I,J : ShortInt;
           permut: boolean;
           tab : Array [1..max] of integer;
           indmax : integer;
       BEGIN
     
                For i := 0 to max-1 do
                 begin
                    j:= max;
     
     
       	    	 	n1 := Coord[i].Nom[1] ;
       	    	 	Tab[i] := ord (n1);
                             writeln (Tab[i]);
     
       	    	 	 n2 := Coord[j].Nom[1] ;
       	    	 	 Tab[i + 1] := ord (n2);
                             writeln (TAb[i+1]) ;
     
     
                    For  indmax := i downto 1 do
                    	   begin
                    	   	 If tab[indmax] < max  then
                                     begin
                                      J:= indmax ;
                    	   	  end;
                                            tab[i] := tab[j] ;
     
     
                                          if ord (n2) < ord(n1) then
                                           begin
                                             sn[1] := coord[i] ;
                                             coord[i] := coord[i+1] ;
                                             coord[i+1] := sn[1];
                                            end
                                          else
                                              begin
                                              coord [i] := coord[i] ;
                                              coord[i+1] := coord[i+1] ;
                                              end;
                                           end;
     
     
       	    	 	          end;
     
     
     
       	End;
     
    Procedure   lecture (var reals : ensemblecoord );
        Var i : shortInt ;
       Begin
           For i := 1 to max do
            begin
             With reals[i],adressEm do
                begin
                  write ('Nom: ');
                   readln (nom); {
                  write ('Prenom: ');
                   readln (prenom);
                  write ('Civilite [Mr/Mme]: ');
                   readln (civilite);
                  write ('Nø Telephone : ');
                   readln;
                  write ('Nø Rue : ');
                   readln (NoRue);
                  write ('Adresse de la rue : ');
                   readln (adressrue);
                  write('Ville : ');
                   readln (ville);
                  write ('BP : ');
                   readln (BP);     }
                end;
             writeln;
           end;
       end;
     
    BEGIN
       clrscr ;
        lecture (recueil);
        Assign (f,'c:\tp\annuaire.dat');
        rewrite (f);
        trialpha (recueil);
        affichage (recueil);
       readln;
    END.
    voila le programme fonctionne pour max = 2 mais au dela le tri n'est pas efficace...
    sachant pour tester le programme j'utilise 2 methodes :
    supposons max = 4
    meilleur des cas = A ,B,C,D resultat = A,B,C,D bien rangés
    pire des cas = D,C,B,A resultat = C,D,A,B

    Donc comment faire pour ce dernier cas??


    ----------------------MERCI d'AVANCE..............................

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bonjour,

    Je n'ai pas regardé en détail le programme, mais quel algorithme avez-vous mis en oeuvre ?
    Il en existe plusieurs, plus ou moins performants. Le plus simple pour débuter est le tri à bulles, un des plus performants le QuickSort.

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    j'utilise l'algorithme de tri par selection dont le code ci -apres. cet algorithme
    permet de trier le tableau contenant les premiers characteres du variable nom .Ainsi indirectement s'effectue indirectement le tri de l'ensemble des coordonnées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    PRODECURE Tri_Selection (Tableau a[1:n])
      VARIABLE indice_max : ENTIER;
    	POUR i VARIANT DE 1 A n-1 FAIRE
    		indice_max <- i;
    		POUR j VARIANT DE i+1 A N FAIRE
    			SI a[j]<max ALORS indice_max <- j; 
    		FIN POUR
    		echanger a[i] et a[indice_max];
    	FIN POUR
    FIN PROCEDURE
    [/code]

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  3. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53
  4. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo