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;