Se connecter / S'enregistrer
Votre question

En pascal: error 200: division par zero

Tags :
  • Programmation
Dernière réponse : dans Programmation
5 Mai 2009 00:15:06

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:



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;
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;

Autres pages sur : pascal error 200 division zero

5 Mai 2009 10:12:17

Bonjour,

L'erreur n'est pas due à une faute de programmation, mais plutôt à une incohérence au niveau des calculs.
Il arrive tout simplement un moment ou une division est faite avec une variable qui possède la valeur zéro, et divisier par zéro n'est comme chacun sait pas possible (pour un ordinateur en tout cas :)  ).

Au vu du code, je dirais sans avoir vérifié en détail que :
- L'erreur vient de la ligne porcen:=(nb_c*100)/nb_t; writeln(porcen); writeln;
- Au moment ou cette ligne est exécutée, la variable nb_t est à zéro
- L'initialisation de cette variable (ligne nb_t:=0; ) donne la valeur zéro à nb_t
- Donc le code :
while(p<>nil)do
begin
nb_t:=nb_t+1; p:=p^.suiv;
end;

Ne modifie pas la valeur de nb_t (sortie de boucle immédiate sans itération ?)

Deux possibilités pour résoudre le problème :
- Revoyez votre calcul, il est peut-être faux
- Initialisez nb_t à 1

Conseil : Aidez-vous d'un déboggeur !
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS