
Dudas ejercicio de archivos en pascal
Publicado por ariel (1 intervención) el 14/11/2013 23:27:35
hola,tengo el siguiente ejercicio:
Una empresa tiene organizado su archivo magnético de registro de ingreso y egreso de
personal de la siguiente manera:
ARCHIVO “INGRES.DAT”
NLE_IN Número de legajo (1000 - 1500)
AÑO_IN Año
MES_IN Mes
DIA_IN Día
TIPO_IN Tipo de registro: 1=entró - 2=salió
HORA_IN Hora de registro
MINU_IN Minutos de registro
El archivo se encuentra ordenado por número de legajo y, dentro de legajo, por fecha. Los
registros corresponden sólo al año 2012. Las entradas y salidas siempre se realizan en el
mismo día.
La empresa cuenta también con un archivo de personal, organizado eficientemente de la
siguiente manera:
ARCHIVO “PERSONAL.DAT”
NLE_PE Número de legajo (clave primaria)
APE_PE Apellido
NOM_PE Nombre
SECT_PE Sector en el que trabaja (1 - 10)
DNI_PE Número de D.N.I.
HSTRA_PE Total de horas trabajadas
a) Informar cuál es la cantidad total de tiempo trabajado por cada uno de los empleados
en el año.
b) En que sector de la empresa se trabajaron más horas durante el mes de junio.
c) Actualizar el archivo PERSONAL.DAT.
Restricción: el archivo INGRES.DAT puede leerse solamente una vez en todo el
programa.
Nota: Tener en cuenta que la estructura de los registros del archivo de personal es la
siguiente:
regEmpleados = record
Legajo: integer;
Apellido: string[20];
Nombre: string[20];
Nro_Sector: integer;
dni:string[10];
horas_trab:real;
end;
ahora mis dudas,dice que solo debo leer INGRES.dat solo una vez,entonces pensaba recorrer los registros del archivo e ir guardando en variables las horas (o en un nuevo registro),lo que tengo hasta ahora:
program tp_archivos;
uses crt;
type
str10=integer;
regempleado=record
legajo:integer;
apellido:string[20];
nombre:string[20];
nro_sector:integer;
dni:string[10];
horas_trab:real;
end;
regingreso=record
nle_in:integer;
anio_in:integer;
mes_in:integer;
dia_in:integer;
tipo_in:string [4];
hora_in:word;
minuto_in:word;
end;
reg_maestro=file of regingreso;
reg_detalle=file of regempleado;
var
reg_m:reg_maestro;
reg_e:reg_detalle;
principal:regingreso;
personas:regempleado;
temporal:regingreso;
horas_mensu,horas_an,minutos_sem,minutos_an:str10;
aux_leg:integer;
aux_mes,aux_dia:integer;
hora_ingreso,minu_ingreso:word;
hora_salida,minu_salida:word;
begin
assign (reg_m , 'C:\pro\ingres.dat');
reset (reg_m);
while (not eof (reg_m) ) do
begin
read (reg_m ,principal);
aux_leg:=principal.nle_in;
while (aux_leg=principal.nle_in) do
begin
aux_mes:=principal.mes_in;
while (aux_mes=principal.mes_in) do
begin
aux_dia:=principal.dia_in;
while (aux_dia=principal.dia_in) do
begin
if (principal.tipo_in='1') then
begin
hora_ingreso:=principal.hora_in;
minu_ingreso:=principal.minuto_in;
else
hora_salida:=principal.hora_in;
minu_salida:=principal.hora_in;
end;
y me encontre con varios problemas,como que necesitare mas variables y el programa sumaria todas las horas y no las de un mes.
Una empresa tiene organizado su archivo magnético de registro de ingreso y egreso de
personal de la siguiente manera:
ARCHIVO “INGRES.DAT”
NLE_IN Número de legajo (1000 - 1500)
AÑO_IN Año
MES_IN Mes
DIA_IN Día
TIPO_IN Tipo de registro: 1=entró - 2=salió
HORA_IN Hora de registro
MINU_IN Minutos de registro
El archivo se encuentra ordenado por número de legajo y, dentro de legajo, por fecha. Los
registros corresponden sólo al año 2012. Las entradas y salidas siempre se realizan en el
mismo día.
La empresa cuenta también con un archivo de personal, organizado eficientemente de la
siguiente manera:
ARCHIVO “PERSONAL.DAT”
NLE_PE Número de legajo (clave primaria)
APE_PE Apellido
NOM_PE Nombre
SECT_PE Sector en el que trabaja (1 - 10)
DNI_PE Número de D.N.I.
HSTRA_PE Total de horas trabajadas
a) Informar cuál es la cantidad total de tiempo trabajado por cada uno de los empleados
en el año.
b) En que sector de la empresa se trabajaron más horas durante el mes de junio.
c) Actualizar el archivo PERSONAL.DAT.
Restricción: el archivo INGRES.DAT puede leerse solamente una vez en todo el
programa.
Nota: Tener en cuenta que la estructura de los registros del archivo de personal es la
siguiente:
regEmpleados = record
Legajo: integer;
Apellido: string[20];
Nombre: string[20];
Nro_Sector: integer;
dni:string[10];
horas_trab:real;
end;
ahora mis dudas,dice que solo debo leer INGRES.dat solo una vez,entonces pensaba recorrer los registros del archivo e ir guardando en variables las horas (o en un nuevo registro),lo que tengo hasta ahora:
program tp_archivos;
uses crt;
type
str10=integer;
regempleado=record
legajo:integer;
apellido:string[20];
nombre:string[20];
nro_sector:integer;
dni:string[10];
horas_trab:real;
end;
regingreso=record
nle_in:integer;
anio_in:integer;
mes_in:integer;
dia_in:integer;
tipo_in:string [4];
hora_in:word;
minuto_in:word;
end;
reg_maestro=file of regingreso;
reg_detalle=file of regempleado;
var
reg_m:reg_maestro;
reg_e:reg_detalle;
principal:regingreso;
personas:regempleado;
temporal:regingreso;
horas_mensu,horas_an,minutos_sem,minutos_an:str10;
aux_leg:integer;
aux_mes,aux_dia:integer;
hora_ingreso,minu_ingreso:word;
hora_salida,minu_salida:word;
begin
assign (reg_m , 'C:\pro\ingres.dat');
reset (reg_m);
while (not eof (reg_m) ) do
begin
read (reg_m ,principal);
aux_leg:=principal.nle_in;
while (aux_leg=principal.nle_in) do
begin
aux_mes:=principal.mes_in;
while (aux_mes=principal.mes_in) do
begin
aux_dia:=principal.dia_in;
while (aux_dia=principal.dia_in) do
begin
if (principal.tipo_in='1') then
begin
hora_ingreso:=principal.hora_in;
minu_ingreso:=principal.minuto_in;
else
hora_salida:=principal.hora_in;
minu_salida:=principal.hora_in;
end;
y me encontre con varios problemas,como que necesitare mas variables y el programa sumaria todas las horas y no las de un mes.
Valora esta pregunta


0