Pascal/Turbo Pascal - Ayuda con runtime error!!!

 
Vista:

Ayuda con runtime error!!!

Publicado por Juan (83 intervenciones) el 28/10/2007 08:01:44
Miren la cosa es así, tenía que hacer un tp, se tienen dos archivos uno de accidentes y otro de empresas. El programa saca 2 listados.
El tema es que los archivos los tenía que crear yo para lo cual usé 2 programas:

este es el que usé para crear el archivo de empresas:

Program crearchempre;

Type

Str4=string[4];

Str40=string[40];

REmp=record
CodEmp:str4;
RazSoc:str40;
CanTraAs:word
end;

AEmp=File of REmp;

Var
ArchEmp:AEmp;
RegEmp:REmp;
i:byte;

Begin

assign(ArchEmp,'Empresas.dat');
rewrite(ArchEmp);
for i:=1 to 3 do
begin
writeln('Ingrese c¢digo de la empresa(4 caracteres)');
readln(RegEmp.CodEmp);
writeln('Ingrese raz¢n social(40 caracteres)');
readln(RegEmp.RazSoc);
writeln('Ingrese Cantidad de trabajadores asegurados(3 digitos)');
readln(RegEmp.CanTraAs);
write(ArchEmp,RegEmp)
end;
close(ArchEmp)

end.

y este para el archivo de accidentes:

Program crearchaccidentes;

Type

Str4=string[4];

Str5=string[5];

RAcc=record
CodEmp:str4;
Leg:str5;
Fecha:Longint;
CantDiasLic:word
end;

AAcc=File of RAcc;

Var
ArchAcc:AAcc;
RegAcc:RAcc;
i:byte;
respuesta:char;

Begin

assign(ArchAcc,'Accidentes.dat');
rewrite(ArchAcc);
repeat
writeln('Ingrese c¢digo de la empresa(4 caracteres)');
readln(RegAcc.CodEmp);
writeln('Ingrese n£mero de legajo(5 caracteres)');
readln(RegAcc.leg);
writeln('Ingrese la fecha(6 digitos)');
readln(RegAcc.fecha);
writeln('Ingrese la cantidad de d¡as de licencia(3 d¡gitos)');
readln(RegAcc.CantDiasLic);
write(ArchAcc,RegAcc);
writeln('¨Desea agregar otro registro?(S o N)');
readln(respuesta)
until respuesta='N';

close(ArchAcc)

end.

Y bueno una vez que creé los archivos hice el programa para hacer todos los procesos necesarios para obtener los dos listados, el programa compila bien , este es el código:

Program TrabajoPractico;

Uses crt,dos;

Type

Str5=string[5];

Str4=string[4];

Str40=string[40];

REmp=record
CodEmp:str4;
RazSoc:str40;
CanTrabAs:word
end;

RAcc=record
CodEmp:str4;
Leg:str5;
Fecha:Longint;
CantDiasLic:word
end;

AEmp=File of REmp;

AAcc=File of RAcc;

RegVemp=record

Codemp:str4;
Razsoc:str40;
CanTrabAs:word;
Porc:byte

end;

TipoInfo=record

Leg:Str5;

CantDiasLic:byte

end;

Tipolista=^tiponodo;

Tiponodo=record

Info:TipoInfo;

Sgte:TipoLista

end;

TvecEmp=Array[1..100] of RegVemp;

TveCont=Array[1..100] of Word;

TvecLis=array[1..100] of TipoLista;


(*Desarrollo de Procedimientos*)

Procedure Abrir(var Empresas:AEmp;Var Accidentes:AAcc);

Begin

assign(Empresas,'Empresas.Dat');

Reset(Empresas);

assign(Accidentes,'Accidentes.Dat');

Reset(Accidentes)

end;

Procedure Inicializar(Var ContAcc:TVeCont;Var Veclis:TvecLis);

Var i:byte;

Begin

for i:=1 to 100 do

begin

ContAcc[i]:=0;

VecLis[i]:=nil

end

end;

Procedure Cargar_Vector(var Empresas:AEmp;Var VecEmp:TvecEmp);

Var i:byte;

Rempresas:Remp;

Begin

For i:=1 to 100 do

begin

read(Empresas,Rempresas);

VecEmp[i].CodEmp:=Rempresas.Codemp;

VecEmp[i].RazSoc:=Rempresas.Razsoc;

VecEmp[i].CanTrabAs:=Rempresas.CanTrabAs

end

end;

Procedure Leer(var Accidentes:AAcc;var RegAcc:RAcc;Var FinArch:boolean);

Begin

if not eof(Accidentes) then

begin

read(Accidentes,RegAcc);

FinArch:=false

end

else

FinArch:=true

end;

Procedure Bus_Lin_Vec(VecEmp:TvecEmp;cod:str4;var pos:word);

Var encontrado:boolean;

i:byte;

Begin

i:=1;
encontrado:=false;

while not (encontrado) do

begin

if VecEmp[i].CodEmp=cod then

begin

encontrado:=true;

pos:=i

end;
inc(i)
end

end;

Function Porcen(CantrabAs,cont:word):byte;

begin

Porcen:=random(100)

end;


Procedure Agregar_Nodo_Lista(var lista:tipolista;valor:tipoinfo);

var PtrN,PtrAux:TipoLista;

Begin

new(PtrN);

if lista<>nil then

begin

PtrAux:=lista;

while PtrAux<>nil do

PtrAux:=PtrAux^.sgte;

ptrn^.Info:=valor;

ptrAux^.sgte:=PtrN

end

else

Lista:=Ptrn

end;


Procedure Procesar(Var Accidentes:AAcc;Var VecEmp:TVecEmp;Var VContAcc:Tvecont;Var VecLIsEmp:TVecLis);

var i,DiasLic:byte;

clave:str5;

RInfo:TipoInfo;

RegAcc:Racc;

Pos:Word;

FinArch:boolean;

Begin

Leer(Accidentes,Regacc,FinArch);

while not FinArch do

begin

clave:=Regacc.Leg;

Rinfo.Leg:=Regacc.leg;

DiasLic:=0;

while (not FinArch) and (Regacc.Leg=clave) do

begin

DiasLic:=DiasLic+Regacc.CantDiasLic;

Leer(Accidentes,Regacc,FinArch)

end;

Bus_Lin_Vec(VecEmp,Regacc.CodEmp,Pos);

VContAcc[Pos]:=VContAcc[Pos]+1;

Rinfo.CantDiasLic:=DiasLic;

Agregar_Nodo_Lista(VecLisEmp[Pos],Rinfo)

end;

for i:=1 to 100 do

VecEmp[i].Porc:=Porcen(VecEmp[i].CanTrabAs,VContAcc[i])

end;


Procedure OrdenarMam(var VecEmp:TVecEmp;var VeclisEmp:TVecLis;Tope:byte);

var ordenado:boolean;

aux:RegVemp;

AuxLis:TipoLista;

i:byte;

Begin

Ordenado:=false;

while not ordenado do

begin

Ordenado:=True;

for i:=1 to tope-1 do

begin

if VecEmp[i].Porc<VecEmp[i+1].Porc then

begin

Aux:=VecEmp[i];

VecEmp[i]:=VecEmp[i+1];

VecEmp[i+1]:=Aux;

AuxLis:=VecLisEmp[i];

VecLisEmp[i]:=VecLisEmp[i+1];

VecLisEmp[i+1]:=AuxLis;

Ordenado:=False

end

end

end

end;

Procedure ListarPorc(VecEmp:TvecEmp);

Var i:byte;

Begin

for i:=1 to 100 do

begin

writeln('Empresa: ',VecEmp[i].RazSoc);

writeln('Porcentaje: ',VecEmp[i].Porc)

end

end;

Procedure Suprime_Nodo_Lista(var Lista:TipoLista;Var RInfo:TipoInfo);

Var PtrAux,PtrSgte:TipoLista;

Begin

PtrAux:=lista;

PtrSgte:=PtrAux^.Sgte;

Lista:=Ptrsgte;

RInfo:=PtrAux^.Info;

dispose(PtrAux)

end;

Procedure ListarTrabAcc(VecEmp:TVecEmp;VecLis:TVecLis);

Var Rinfo:TipoInfo;

Begin

writeln('Empresas: ',VecEmp[1].RazSoc);

writeln('Legajo del Trabajador Cantidad de Inasistencias');

while Veclis[1]<> Nil do

begin

Suprime_Nodo_Lista(VecLis[1],RInfo);

writeln(RInfo.Leg,' ',Rinfo.CantDiasLic)

end

end;

(*Variables Globales*)

Var

Empresas:AEmp;

Accidentes:AAcc;

Veclis:Tveclis;

CantAcc:TVeCont;

VecEmp:TVecEmp;

(*Bloque Principal*)

Begin

Abrir(Empresas,Accidentes);

Inicializar(CantAcc,VecLis);

Cargar_Vector(Empresas,VecEmp);

Procesar(Accidentes,VecEmp,CantAcc,VecLis);

OrdenarMam(VecEmp,VecLis,100);

ListarPorc(VecEmp);

ListarTrabAcc(VecEmp,VecLis);

Close(Empresas);

Close(Accidentes);

readkey

end.

Ahora el problema esta que cuando lo ejecuto me tira runtime error, yo sospecho que es alguna incompatibilidad entre los types, pero no se, les agradecería si alguno me puede decir cual puede ser el problema, estuve probando de todo pero no pude lograr ejecutarlo.
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

RE:Ayuda con runtime error!!!

Publicado por Diego Romero (996 intervenciones) el 28/10/2007 13:20:50
¿Qué error es (número) y en qué línea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con runtime error!!!

Publicado por juan (83 intervenciones) el 28/10/2007 17:44:32
exited with exit code=100

"Runtime error 100 at $00401105

$00401105
$00401995
$00401A4E

"

eso es todo el error que me tira
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con runtime error!!!

Publicado por Diego Romero (996 intervenciones) el 28/10/2007 18:44:21
¿¿mmm??, el error 100 se produce cuando la lectura en disco ha fallado, eso solo lo he visto cuando esa lectura la hace sobre un disquette, que son propensos a tener errores físicos. ¿Qué compilador estás usando?, me resisto a creer que tu disco rígido esté dañado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con runtime error!!!

Publicado por juan (83 intervenciones) el 28/10/2007 18:56:11
Estoy usando el Free pascal, no se, también probe con el dev pascal y pasa lo mismo, no puede ser por incompatibilidad de los types?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con runtime error, algo más...

Publicado por Diego Romero (996 intervenciones) el 28/10/2007 18:49:59
Ya.

No era eso, ahora lo veo.

En el programa que usas para rellenar el archivo de tipo AEmp escribes 3 registros consecutivos.

En el programa que usas para cargar ese mismo archivo, en el procedimiento Cargar_vector estás tratando de leer 100 registros de ese mismo archivo pero el archivo no tiene 3 registros. El error 100 indica también que estás tratando de leer el archivo más allá del final de éste.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con runtime error, algo más...

Publicado por juan (83 intervenciones) el 28/10/2007 19:07:24
sisi, eso ya lo arreglé, muchas gracias. La cosa es que ahora me tira runtime error 2. a que se deberá eso?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con runtime error, algo más...

Publicado por juanf (83 intervenciones) el 28/10/2007 19:10:37
ya arregle otro problema pero ahora sale runtime error 201, que cosa, me estoy volviendo loco con esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con runtime error, algo más...

Publicado por juan (83 intervenciones) el 28/10/2007 19:30:54
bue, ahora es el runtime error 216 y detecte que el modulo defectuoso es el "procesar". Segun lo que lei en internet es porque estoy leyendo un puntero vacio pero no se cual es el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Ayuda con runtime error, algo más...

Publicado por Mechanic (177 intervenciones) el 01/11/2007 23:20:44
Hola Juan.

Yo uso Turbo Pascal 7 y cuando corrí tu programa me dió un:
Disk read error.
Con este compilador cuando recibes un error, puedes presionar la tecla F1 para ver las posibles razones por las que esto sucedió.

Así me di cuenta de que era como dijo Diego Romero: por tratar de leer más alla del final de un archivo.

Porqué no vuelves a poner tu código otra vez ?
Pero ahora con los problemas que ya corregiste..

Antes de que te vuelvas loco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con runtime error, algo más...

Publicado por gaby (1 intervención) el 05/02/2013 05:36:38
hola, disculpa.. es urgente.. como solucionaste el error de runtime 2?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar