You are on page 1of 5

Trabajo Práctico de

Hashing

Materia: Estructura y Base de Datos

Alumno: García Valiente Carlos Oscar


Program hashing;
uses
dos,crt;
type
Registro = record
Numero_reg : integer;
Numero_Cod : integer;
Nombre : string[10];
Status: boolean;
end;
const
N = 29;
{----------------------------------------------------------------------------}
Procedure Inicio(Var NomArchivo:String);

var F:file of Registro;


i:Integer;
r:registro;
begin
Assign(F, NomArchivo);
Rewrite(F);
for i:=0 to N do
Begin
r.status := false;
r.numero_reg := i;
r.numero_cod := 0;
r.nombre := '';

Write(F,r);
End;
Close(F);
end;
{----------------------------------------------------------------------------}
Procedure menu(var op:char);
begin
clrscr;
writeln(´ Programa de Hasing ´);
writeln;
writeln;
writeln(' 1 ------> Inicia el archivo ');
writeln;
writeLn(' 2 ------> Muestra secuencialmente ');
writeLn;
writeLn(' 3 ------> Ingreso de Clave con Hashing ');
writeln;
writeLn(' 4 ------> Consulta de datos por nombre ');
writeln;
writeln(' 0 ------> Salir ');
op := readkey;
end;

{----------------------------------------------------------------------------}
Function Mapeo(K:integer): integer;

begin
mapeo := k mod 20;
end;
{----------------------------------------------------------------------------}
var archivo : string;
r : registro;
F : file of registro;
op : char;
pos : integer;
cod : integer;
nom : string[10];

begin
clrscr;
repeat
Menu(op);
case op of
'1' :begin
clrscr;
WriteLn('Ingrese el nombre del Archivo: ');
ReadLn(archivo);
inicio(Archivo);
WriteLn('Ok. Archivo iniciado');
ReadKey;
end;

'2' :begin
clrscr;
WriteLn('Ingrese el nombre del Archivo: ');
ReadLn(archivo);
assign(F,archivo);
reset(f);
while not EOF(f) do

Begin
Read(F,r);
writeLn('status: ',r.status);
writeLn('Numero de Registro: ',r.numero_reg);
writeLn('Numero de Codigo: ',r.numero_cod);
writeLn('Nombre: ',r.nombre);
readKey;
End;
Close(F);
end;
'3' : begin
clrscr;
writeLn('Ingrese Nombre: ');
readLn(nom);
writeLn('Ingrese clave: ');
readLn(cod);
Pos := mapeo(cod);
assign(F,archivo);
reset(F);
seek(F,pos);
read(F,r);
if r.status = false then
begin
seek(f,pos);
r.nombre := nom;
r.numero_cod := cod;
writeln('Numero de Registro: ',r.numero_Reg);
writeLn('Nombre: ',r.nombre);
writeLn('Numero de Clave: ',r.numero_cod);
r.status := true;
Writeln('Status: ',r.status);
writeLn(pos);
write(f,r);
readkey;
end
else
begin
pos :=20;
seek(F,pos);
read(F,r);
while (r.status = true) and (not EOF) do
begin
pos := pos +1 ;
seek(F,pos);
read(F,r);
end;
seek(f,pos);
r.nombre := nom;
r.numero_cod := cod;
r.numero_reg := pos;
writeln('Numero de Registro: ',r.numero_Reg);
writeLn('Nombre: ',r.nombre);
writeLn('Numero de Clave: ',r.numero_cod);
r.status := true;
Writeln('Status: ',r.status);
write(f,r);
end;
end;
'4' : begin

clrscr;
WriteLn('Ingrese el nombre del Archivo: ');
ReadLn(archivo);
assign(F,archivo);
reset(f);
Writeln('Ingrese el nombre del Registro: ');
readLn(nom);
repeat
read(F,R);
if r.nombre = nom then
Begin
writeLn('status: ',r.status);
writeLn('Numero de Registro: ',r.numero_reg);
writeLn('Numero de Codigo: ',r.numero_cod);
writeLn('Nombre: ',r.nombre);
End;

until (EOF(f)) or (r.nombre = nom);


If EOF(f) then WriteLn('El nombre no se encuentra');
readkey;
Close(F);
end;

'0' :begin
clrscr;
WriteLn('Quit...');
end;
end;
until op = '0';

end.