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

Turbo Pascal Discussion :

Fonction de hachage : Error 200 division par zero


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Fonction de hachage : Error 200 division par zero
    bonsoir pour tous le monde
    voila;
    j'ai un TP en pascal et pbl concernant Error 200: Division par zero
    et dans tous les cas voila le sujet de ce TP

    On souhaite gérer les informations concernant les employés d’une entreprise. Chaque employé est représenté par les informations suivantes :
    • - NumCCP (cle) : 12336625
    • - Cle CCP :65
    • - Nom ;
    • - Prénom ;
    • - Date de naissance ;
    • - Niveau (Terminal, Licence, Master, Ingénieur,…)
    • - Poste (Directeur, Agent, Sous-directeur,…)
    • - Paye.


    Pour accélérer la recherche des employés sur micro, vous allez utiliser la méthode de HashCoding utilisant le champ NumCCP comme clé d’accès et basée sur les listes linéaires chaînées pour la résolution des collisions. Cette méthode utilise une Table de 100 éléments et la fonction de hashage suivante :
    Nb- chiff
    H(cle) = Σ clé[ i ] * i mod 100
    I=1

    Exemple:
    H (12336625) = ( 1*1 + 2*2 + 3*3 + 3*4 + 6*5 + 6*6 + 2*7 + 5*8 ) mod 100
    144 mod 100 = 44
    Travail demandé:
    Réaliser en Pascal le programme permettant de:
    • - Recherche et Afficher les informations d’un employé sachant son numéro de CCP, avec le nombre d’accès effectués à la table.
    • - Ajouter un employé.
    • - Supprimer un employer.
    • - Donner le pourcentage des collisions par rapport au nombre total d’employés.
    • - Afficher tous les employés.
    Cette erreur s'affiche dans le fonction de pourcentage des collisions

    Je pense que vous n'avez pas besoin de mon travail de ce TP; mais je vais vous donner la fonction de hachage car cette erreur y réside:


    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
     
         function porcen:real;
         var
             nb_c, nb_t:integer;
         begin
              nb_t:=0;
              nb_c:=0;
              for i:=1 to 100 do
                 begin
                   p:=t[i];
                      while(p<>nil)do
                        begin
                          nb_t:=nb_t+1;    p:=p^.suiv;
                        end;
                          l:=p^.suiv;
                             while(l<>nil)do
                               begin
                                 nb_c:=nb_c; l:=l^.suiv;
                               end;
                 end;
                porcen:=(nb_c*100)/nb_t;  writeln(porcen);  writeln;
         end;

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Vea,

    Après une petite mise en forme
    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
    function porcen: real;
    var
      nb_c, nb_t : integer;
    begin
      nb_t := 0;
      nb_c := 0;
      for i := 1 to 100 do
      begin
        p := t[i];
        while (p <> nil) do
        begin
          nb_t := nb_t + 1;    
          p := p^.suiv;
        end;
        l := p^.suiv;
        while (l <> nil) do
        begin
          nb_c := nb_c; 
          l := l^.suiv;
        end;
      end;
      porcen := (nb_c * 100) / nb_t;  
      Writeln(porcen);  
      Writeln;
    end;
    ça devient plus lisible.

    Tu initialises nb_c à 0, et le seul endroit où cette valeur est changée est dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        while (p <> nil) do
        begin
          nb_t := nb_t + 1;    
          p := p^.suiv;
        end;
    car ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        while (l <> nil) do
        begin
          nb_c := nb_c; 
          l := l^.suiv;
        end;
    la valeur n'est pas modifiée.

    Donc, si tu te retrouves avec nb_c = 0 à la sortie, c'est que tu n'entres jamais dans cette fameuse boucle.

    Au passage, tu utilises des variables globales : a proscrire.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Floor / division par zero error
    Par Leclandestin dans le forum Langage
    Réponses: 5
    Dernier message: 05/03/2008, 19h38
  2. la division par zero pour effectuer un pourcentage dans une requete
    Par VIRGINIE87 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 24/05/2007, 22h44
  3. [BPW] Runtime error 200 (division par 0)
    Par dzeus dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 23/05/2007, 11h05
  4. Réponses: 3
    Dernier message: 25/09/2006, 16h39
  5. [Math][Info]division par zéro
    Par niko8181 dans le forum Général Java
    Réponses: 9
    Dernier message: 23/05/2005, 09h58

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