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

Pascal Discussion :

Comparaison de différents tris


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Par défaut Comparaison de différents tris
    Salut,
    Ce programme permet de faire une comparaison entre les differents tris
    Voici mon code:

    Lors de l'execution il m'affiche ce message: "Runtime error 006 at 0000:025E" , puis il met le curseur sur la procedure charger et affiche "Invalid file handle"

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Jao,

    Je n'ai pas lu en détail, mais j'ai eu le temps de remarquer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Procedure IntercMultiple(Nom:Ch ; Taille:Integer ; TypeTri:Integer);
    ...
    BEGIN
         {$i-}
               Assign(F1,Nom); Reset(F1);
               Assign(F2,'Nom2'); Rewrite(F2);
         {$i+}
         if (IOResult <> 0) then Begin
                                      Write('Erreur');
                                      Halt(1);
                                 End
    Il faut faire attention.

    Tu contrôles IOResult, c'est bien.

    MAIS chaque opération l'affecte. Donc dans le cas ci dessus, si Reset(F1) crée une erreur, mais que Rewrite(F2) se passe bien, tu n'intercepteras pas l'erreur.

    Sinon, à vue de nez, ça m'a paru plutôt compliqué. Mais il faudra que je lise en détails pour confirmer/infirmer cette impression.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Mei,

    Bien j'ai jeté un coup d'oeil:

    Il faut corriger la valeur de P en 5 au lieu de 10, car avec 10, MaxT = 2000, et tu utilises systématiquement des boucles de 4000 valeurs (on voit ici l'intérêt de définir des constantes, pour ne pas utiliser de valeurs "magiques" [en clair dans le code], et de les définir l'une par rapport à l'autre).
    Il y a de bonnes chances que ton problème vienne de là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const
      Max  = 20000;
      P    = 5; {10}
      MaxT = Max div P;
     
    type
      TFile = file of Integer;
      TInd  = array[1..P] of Integer;
      TTab  = array[1..MaxT] of Integer;
      Ch    = string[12];
    Plus loin, dans le programme principal, tu calcules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          T1 := HS + (S * 100) + (M * 100 * 60) + (H * 3600 * 100);
    avec T1 de type Word : trop petit, dès que H <> 0, on atteint déjà une valeur 360000, alors que Word n'autorise que 65535.

    Et ailleurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure IntercMultiple(Nom : Ch; Taille : Integer; TypeTri : Integer);
    ...
          if TypeTri = 1 then
            Tri_Permutation(T, Taille)
          else if TypeTri = 2 then
            Tri_Bulles(T, Taille)
          else if TypeTri = 3 then
            Tri_Insertion(T, T1, Taille)
          else if TypeTri = 4 then
            Tri_Quicksort(T, 1,Taille);
    tu as là l'occasion d'utiliser un joli Case of au lieu d'une cascade de if, et là encore, d'utiliser des constantes au lieu de valeurs magiques.

    Un reproche, le principal à mon avis : pourquoi avoir utilisé des fichiers binaires au lieu de texte, car pour vérifier leur contenu, il te faut écrire un programme pour les lire et les afficher.
    Lié à cela (avec les Seek), c'est effectivement bien compliqué dans ta manière de gérer tout ça.

    Je n'ai pas vérifié les procédures de tri.

  4. #4
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Par défaut
    j'ai remplacé le P par 5 comme tu as dis mais maintenant il met le curseur sur la procedure intercMultiple et m'affiche Error 202: Stack overflow error.
    Pour répondre à ton reproche, l'essentiel ce n'est pas de vérifier le contenu des fichiers mais de faire une comparaison entre les tris c'est a dire on veut afficher juste le temps que chaque tri met pour trier le même tableau.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Hai,
    Citation Envoyé par bob32 Voir le message
    j'ai remplacé le P par 5 comme tu as dis mais maintenant il met le curseur sur la procedure intercMultiple et m'affiche Error 202: Stack overflow error.
    Il faut augmenter la taille de la pile, ou gérer la mémoire autrement (pointeurs...)

    Citation Envoyé par bob32 Voir le message
    Pour répondre à ton reproche, l'essentiel ce n'est pas de vérifier le contenu des fichiers mais de faire une comparaison entre les tris c'est a dire on veut afficher juste le temps que chaque tri met pour trier le même tableau.
    Alors les fichiers ne servent à rien, sauf celui contenant les données de départ, pour tester les différents tris avec les mêmes données.

    A ce propos, il ne faut pas oublier que la performance des tris dépend des données de départ (déjà classées, éventuellement en ordre inverse, presque classées, en vrai désordre).

Discussions similaires

  1. Methode de comparaison et de Tri
    Par ScannerTahiti dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/06/2013, 21h20
  2. Réponses: 3
    Dernier message: 03/05/2012, 16h29
  3. Problème suite à différents tris
    Par Jojo66 dans le forum Excel
    Réponses: 8
    Dernier message: 04/07/2011, 17h43
  4. Réponses: 0
    Dernier message: 11/10/2008, 19h59
  5. comparaison de différents outils ETL
    Par ikuzar dans le forum Alimentation
    Réponses: 2
    Dernier message: 03/06/2008, 16h45

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