Pascal/Turbo Pascal - Problema en tiempo de ejecución

 
Vista:

Problema en tiempo de ejecución

Publicado por Baltazar (2 intervenciones) el 15/12/2007 17:18:38
Hola integrantes del foro, les comento que no puedo hacer funcionar un programa que necesito entregar para un tp, la compilación marca que está bien, ahora cuando lo ejecuto sale automaticamente(error en tiempo de ejecución). Les adjunto abajo el programa principal y el programa para llenar los archivos. Porai me pueden ayudar. Gracias. Usé el dev pascal por las dudas.

program reajuste;
uses crt;
type
s4=string[4];
s40=string[40];
s5=string[5];
treg1=record
codemp:s4;
rasocial:s40;
cantra_ase:word
end;
treg2=record
codemp:s4;
leg:s5;
fecha:longint;
diaslicen:word
end;
tarchemp=file of treg1;
tarchacci=file of treg2;
tvec=array [1..10] of treg1;
treg3=record
cont:word;
porce:real
end;
tvec2=array [1..10] of treg3;
treg4=record
leg:s5;
acumina:word
end;
tinfo=treg4;
tlista=^tnodo;
tnodo=record
info:tinfo;
sigu:tlista
end;
tveclista=array [1..10] of tlista;

var
archemp:tarchemp;
archacci:tarchacci;
vec:tvec;
vec2:tvec2;
veclista:tveclista;

procedure asignar_abrir_archivos
(var archemp:tarchemp;var archacci:tarchacci);

begin
assign(archemp,'arch1.dat');reset(archemp);
assign(archacci,'arch2.dat');reset(archacci);
end;

procedure copiar_archemp_en_vec
(var archemp:tarchemp;var vec:tvec);
var
i:byte; r:treg1;

begin
i:=0;
while not eof(archemp) do
begin
read(archemp,r);
inc(i);
vec[i].codemp:=r.codemp;
vec[i].rasocial:=r.rasocial;
vec[i].cantra_ase:=r.cantra_ase
end
end;

procedure inicializar_vec2
(var vec2:tvec2);
var
i: byte;

begin
for i:=1 to 10 do
begin
vec2[i].cont:=0;
vec2[i].porce:=0
end
end;

procedure crear_lista
(var veclista:tlista);

begin
veclista:=nil
end;

procedure leer_registro_del_archacci
(var archacci:tarchacci;var reg:treg2;var fin:boolean);

begin
if not (eof(archacci)) then
begin
read(archacci,reg);
fin:=false
end
else
fin:=true
end;

procedure bus_en_vector_empresas
(vec:tvec;reg:treg2;var pos:byte);
var
i:byte;
begin
i:=1;
while (vec[i].codemp <> reg.codemp) do
begin
inc(i);
end;
pos:=i;
end;

procedure insertanodo
(var veclista:tlista;regi:tinfo);
var
p,q:tlista;

begin
new(p);
p^.info:=regi;
if (veclista=nil) or (regi.leg<veclista^.info.leg) then
begin
p^.sigu:=veclista;
veclista:=p
end
else
begin
q:=veclista;
while (q^.sigu<>nil) and (regi.leg>q^.sigu^.info.leg) do
begin
q:=q^.sigu
end;
p^.sigu:=q^.sigu;
q^.sigu:=p
end;
end;

procedure recorrer_archivo_y_llenar_vec_y_veclista
(var archacci:tarchacci;vec:tvec;var vec2:tvec2;var veclista:tveclista);
var
i,pos:byte; reg:treg2; fin:boolean; regi:tinfo; clave:s5; acum,cont:word;

begin
for i:=1 to 10 do
begin
crear_lista(veclista[i])
end;

leer_registro_del_archacci(archacci,reg,fin);
while not fin do
begin
clave:=reg.leg;
acum:=0;
cont:=0;
bus_en_vector_empresas(vec,reg,pos);
while (not fin) and (clave=reg.leg) do
begin
acum:=(acum+reg.diaslicen);
leer_registro_del_archacci(archacci,reg,fin)
end;
inc(cont);
vec2[pos].cont:=vec2[pos].cont+cont;
regi.leg:=clave;
regi.acumina:=acum;
insertanodo(veclista[pos],regi)
end;

end;

function porcent(a,n: byte):real;

begin

porcent:=((n*100/a));

end;

procedure calcular_porcentaje_emitir_listado1
(vec:tvec; var vec2:tvec2);
var
a,n,i:byte;porc:real;

begin
randomize();
for i:=1 to 10 do
a:= random(100);
n:= random(100);
while (a<n) do
begin
a:= random(100);
n:= random(100);
end;
porc:= porcent(a,n);
writeln(' Empresa', vec[i].rasocial, 'Porcentaje', porc);
vec2[i].porce:=porc
end;

procedure obtener_mayor_porcentaje_emitir_listado2
(vec:tvec;vec2:tvec2;veclista:tveclista);
var
i,posi:byte; max:real; p:tlista;

begin
max:=vec2[1].porce;
for i:=2 to 10 do
begin
if vec2[1].porce>max then
begin
max:=vec2[i].porce;
posi:=i
end;
end;
p:= veclista[posi];
writeln('Empresa', vec[posi].rasocial);
while p<> nil do
begin
writeln('Legajo', p^.info.leg, 'Cantidad de inasistencias', p^.info.acumina);
p := p^.sigu
end;

end;

procedure cerrar_archivos
(var archemp:tarchemp; var archacci:tarchacci);

begin
close(archemp);
close(archacci)
end;

begin
clrscr;
asignar_abrir_archivos(archemp,archacci);
copiar_archemp_en_vec(archemp,vec);
inicializar_vec2(vec2);
recorrer_archivo_y_llenar_vec_y_veclista(archacci,vec,vec2,veclista);
calcular_porcentaje_emitir_listado1(vec,vec2);
obtener_mayor_porcentaje_emitir_listado2(vec,vec2,veclista);
cerrar_archivos(archemp,archacci)
end.

Programa para crear los dos archivos:


program cargarch;
uses crt;
type
ST4= string [4];
ST40= string [40];
ST5= string [5];
treg1= record
codemp: ST4;
rasocial: ST40;
cantra_ase: word;
end;
tarchemp= file of treg1;
treg2= record
codemp:ST4;
leg: ST5;
fecha:longint;
diaslicen:word;
end;
tarchacci= file of treg2;
var
r:treg1;
reg:treg2;
archemp : tarchemp;
archacci: tarchacci;
begin
assign(archemp, 'arch1.dat');
rewrite(archemp);
assign(archacci, 'arch2.dat');
rewrite(archacci);
writeln('Ingrese codigo de empresa para el archivo empresas finaliza con 0');
readln(r.codemp);
while r.codemp <> '0' do
begin
writeln('Ingrese razon social');
readln(r.rasocial);
writeln('cantidad de trabajadores asegurados');
readln(r.cantra_ase);
write(archemp,r);
writeln('Ingrese codigo de empresa para el archivo empresas finaliza con 0');
readln(r.codemp);
end;
writeln('Ingrese codigo de empresa para el archivo accidentes finaliza con 0');
readln(reg.codemp);
while reg.codemp <> '0' do
begin
writeln('Ingrese legajo');
readln(reg.leg);
writeln('fecha');
readln(reg.fecha);
writeln('cantidad de dias de licencia');
readln(reg.diaslicen);
write(archacci, reg);
writeln('Ingrese codigo de empresa para el archivo accidentes finaliza con 0');
readln(reg.codemp);
end;
close(archemp);
close(archacci);
repeat until keypressed;
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder