Aide pr l'algorithme de hachage

Résolu/Fermé
Signaler
Messages postés
125
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
20 novembre 2014
-
Messages postés
125
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
20 novembre 2014
-
Bonjour,
j'ai un petit probléme avec le programme de hachage par chainage ouvert, c'est a dire que si la table dois contenir 5 mots alors au dernier mot le programme ne prend plus en compte la répétition des mot alors que le but de ce programme est justement de ne pas prendre en compte cette répetition
EX: normalement il ne dois pas charger la table avec ces donnés: (abcd ades derf abcd derf) mais malheuresement il la charge comme ca
aidez moi SVP car c'est un travail a remettre le plus vite possible. MERCI infiniment.
voici le programme écrit en pascal :

**********************************
program chainage_ouvert;
const n=5;
type cellule=record
cle:string;
link:integer;
end;
var v:array[0..n-1]of integer;
t:array[0..n-1]of cellule;
mot:string;
i,k,h,l:integer;
function hach(ch:string):integer;
var i,som:integer;
begin
som:=0;
for i:=1 to length(ch) do
som:=som+ord(ch[i]);
hach:=som mod n;
end;
procedure insert(var i:integer;y:integer);
var j,z:integer;
begin
if v[y]=-1 then
begin
t[i].cle:=mot;
v[y]:=i;
i:=i+1;
end
else
begin
if t[v[y]].cle=mot then
writeln('ce mot a deja ‚t‚ saisie')
else
begin
if t[v[y]].link=-1 then
begin
t[i].cle:=mot;
t[v[y]].link:=i;
i:=i+1;
end
else
begin
j:=v[y];
z:=1;
while (t[j].link<>-1) and (z=1) do
if t[j].cle<>mot then
j:=t[j].link
else
z:=0;
end;
if z=1 then
begin
t[i].cle:=mot;
i:=i+1;
end;
end;
end;
end;
BEGIN
h:=0;
for h:=0 to n-1 do
begin
v[h]:=-1;
t[h].link:=-1;
end;
i:=0;
while i<n do
begin
writeln('donnez un mot');
readln(mot);
if mot<>'' then
begin
k:=hach(mot);
insert(i,k);
end
else
begin
writeln('donnez un autre mot car ce que vous venez de taper n''est pas un caract‚re');
readln(mot);
end;
end;
l:=0;
while l<n do
begin
writeln(t[l].cle);
l:=l+1;
end;
writeln(' fin du programme hachage');
END.

2 réponses

Messages postés
125
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
20 novembre 2014
17
bonsoir;
quelqu'un peut m'aidé??? SVP
Messages postés
125
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
20 novembre 2014
17
bonsoir a tous,
finalement j'ai regler le probléme et le programme pascal correct est

program chainage_ouvert;
uses wincrt;
const n=5;
type cellule=record
cle:string;
link:integer;
end;
var v:array[0..n-1]of integer;
t:array[0..n-1]of cellule;
mot:string;
i,k,h,l:integer;
function hach(ch:string):integer;
var i,som:integer;
begin
som:=0;
for i:=1 to length(ch) do
som:=som+ord(ch[i]);
hach:=som mod n;
end;
procedure insert(var i:integer;y:integer);
var j,z,u:integer;
begin
if v[y]=-1 then
begin
t[i].cle:=mot;
v[y]:=i;
i:=i+1;
end
else
begin
if t[v[y]].cle=mot then
writeln('ce mot a deja ete saisie:')
else
begin
if t[v[y]].link=-1 then
begin
t[i].cle:=mot;
t[v[y]].link:=i;
i:=i+1;
end
else
begin
j:=v[y];
z:=1;
u:=1;
while u<>0 do
if (t[j].link<>-1) and (z=1) then
if t[j].cle<>mot then
j:=t[j].link
else
begin
writeln('ce mot existe deja:');
z:=0;
u:=0;
end
else
u:=0;
end;
if z=1 then
begin
if t[j].cle<>mot then
begin
t[i].cle:=mot;
t[j].link:=i;
i:=i+1;
end
else
writeln('ce mot existe deja:');
end;
end;
end;
end;
BEGIN
h:=0;
for h:=0 to n-1 do
begin
v[h]:=-1;
t[h].link:=-1;
end;
writeln(' PROGRAMME HACHAGE');
writeln;writeln;writeln;
i:=0;
while i<n do
begin
writeln('donnez un mot:');
readln(mot);
if mot<>'' then
begin
k:=hach(mot);
insert(i,k);
end
else
begin
writeln('le grogramme ne calcule pas son code ASCII,donnez un autre mot:');
readln(mot);
end;
end;
writeln;
writeln(' affichage de la table remplis,sans repetition de mots');
l:=0;
while l<n do
begin
writeln(t[l].cle);
l:=l+1;
end;
writeln(' fin du programme hachage ');
END.