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 :

[LG]tri alphabétique


Sujet :

Langage Pascal

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [LG]tri alphabétique
    bonjour,
    cette fois ci je bloque sur le tri alphabétique. Il s'agit toujours de la gestion d'un carnet d'adresse.

    je crée un carnet d'adresse, enregistré sur fichier. Il faut que je fasses une suppression d'un enregistrement qui se compose d'une variable de type structure ( nom, prénom ... ).

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Si j'ai bien compris en lisant ton post précédent, tu vas utiliser la méthode proposée par macluvitch pour supprimer un enregistrement dans un fichier.
    Et si je comprends bien ta question actuelle, tu cherches une méthode pour, justement, trouver cet enregistrement "n".

    Tu dois donc lire ton fichier depuis le début. Ton code devrait donner quelque chose comme ceci :
    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
    Assign(My_File,Nom_Du_Fichier);
    Reset(My_File);
    n:=0;
    Trouve:=False;
    while (not EOF(My_File)) and (not Trouve) do
      begin
        Read(My_File,Rec);
        if (Rec.Nom = Nom_A_Trouver) and 
           (Rec.Prenom = Prenom_A_Trouver)
           then
             Trouve:=True
           else
             Inc(n);
      end;
    if Trouve
       then
         Delete_Data(n)   {La procédure de suppression}
       else
         WriteLn('Enregistrement non trouvé');
    Close(My_File);
    Personnellement, je choisirais plutôt la méthode de Charly (tout charger en mémoire, faire les manipulations nécessaires et recréer le fichier) : les performances sont meilleures et cela peut s'appliquer à des gros fichiers.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    merci du conseil, mais voilà ce que je veux faire :

    je veux pouvoir classer mes enregistrements par ordre alphabétique, comme ça lorsque je voudrais chercher une fiche, il me suffira de faire une recherche dichotomique.

    Pour cela, je compte crée un second fichier contenant les enregistrements par ordre alphabétique

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Voilà, comme l'ont dit Alcatîz et Charly ( et moi précéedemment ), tu charges tout ton fichier dans un tableau ou une liste puis tu la tries et enfin tu la réécris.

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Membre du Club
    Inscrit en
    Avril 2003
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 37
    Points : 41
    Points
    41
    Par défaut OK
    Pour trouver l'enregistrment desire je te conseille la fonction suivante

    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
     
     
    Function Find_Data_Place(Var R : Rec; Var Name : string) : Boolean;
    Var 
        Found : Boolean;
        N        : Byte;
    Begin
      Found = FALSE;
      While Not EOF(MY_FILE) Do Begin
        Read(My_file,R);
        Inc(N);
        If R.Name = Name Then Begin
          Found = TRUE;
          Break
        End;
        If Found = FALSE Then Find_Data_Place = FALSE
        Else
          Find_Data_Place = N
    End;
    Ainsi En utilisant cette fonction tu peux trouver l'emplacement de l'enregistrment desire .

    Et si tu veux toujours utiliser la methode de charly je te conseille d'uitliser les listes chainees (linked list) ainsi tout deviendra facile (le tri biensur)

    Une autre methode consiste a loader les enregistrement dans la memoire a l'aide des linked list les trier et les afficher trieés sans avoire a les reecrire mais le seul inconvenient qui se represente c'est dans le cas de communiquer avec beaucoup de donnees ,cela devient lourd afin de les reecrire)

    Bon courage

    Si tu veux toujours un exemple n'hesite po a me mailer

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Avec une liste chaînée, le tri sera plus simple et moins lourd, mais c'est peut-être pas conseillé pour un débutant... Enfin, c'est beaucoup plus simple de déplacer des pointeurs que des enregistrements entiers !
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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