Programa de pascal

Necesito ayuda para un programa de pascal que tengo que entregar el día jueves 29/7/04 si puedes ayudarme te lo agradecería.
Hacer un programa que muestre el detalle de los empleados dando subtotal por sucursal, dentro de sucursal dar subtotal por departamento y dentro de departamento dar subtotal por almacen.
Dar total de sueldos a calcular por la compañía.
Debe estar ordenado en forma ascendente por sucursal departamento y almacen.
Tiene que tener una patalla de menu que diga:
Cargar datos
Listado
Salir
Son 3 estructuras de control

3 Respuestas

Respuesta
1
A ver, vamos por partes. El programa tiene varios errores de concepto. Creo que hay bastantes cosas que no tienes claras. Para poder ayudarte tendría que rehacer el programa por completo y no dispongo de tiempo para eso, así que trataré de orientarte un poco.
La estructura do repeat until no existe en pascal. Lo que si existe es lo siguiente:
Repeat
Instrucción 1
Instrucción 2
...
Instrucción n
until condicion.
No he continuado examinando el programa porque como te decía no dispongo de mucho tiempo, pero podrías empezar por corregir eso.
Bueno acá te mando el código me da un error en la line 113 no se porque si puedes ayudarme te lo agradecería ya que es mi trabajo final para poder aprobar la materia y como me a costado
Gracias.
Program control_empleados;
Uses Crt,Dos,Printer;
Type
Cadena=string;
Empresa=Record
Nombre:string[40];
Sucursal:Integer;
Departamento:Integer;
Almacen:Integer;
Sueldo:Integer;
DelimitadorReg:boolean;
End;
Fichero=File of Empresa;
Var
Archivo:Fichero;
opcion:char;
desactivarcontrol:boolean;
(**************************************************************************)
procedure pulsarunatecla;
var
car:char;
begin
gotoxy(25,23);
write('Pulse una tecla cuando este listo...');
car:=UpCase(ReadKey);
ClrScr;
end;
(*************************************************************)
procedure activar(var f:Fichero);
var
resultado:integer;
begin
ClrScr;
(*$i-*)
Reset(f);
Resultado:=ioresult;
if resultado <> 0 then
rewrite(f);
close(f);
end;
(****************************************************************************)
procedure leerRegistro(var e:empresa);
var beta,alfa:integer;
cad:string;
begin
with e do
begin
gotoxy(20,15);write('Nombre: ');
Readln(nombre);
gotoxy(20,16);write('Sucursal: ');
Readln(sucursal);
gotoxy(20,17);write('Departamento: ');
Readln(departamento);
gotoxy(20,18);write('Almacen: ');
Readln(almacen);
gotoxy(20,19);write('Sueldo: ');
Readln(sueldo);
Pulsarunatecla;
end;
(*********************************************************************)
procedure listadototal(var f:Fichero);
var
e:empresa;
sucaux,subtotalsuc,depaux,subtotaldep,subtotalalm,almaux,totalgeneral:integer;
Begin
reseat(f);
eof="no"
do repeat until eof="si" or sucursal<>sucaux
depaux:=departamento
subtotaldep=0
do repeat until eof=si or sucursal<>sucaux or depaux<>departamento
subtotalalm=0
almaux=almacen
do repeat until eof=si or sucursal<>sucaux or depaux<>departamento or almaux<>almacen
write "Nombre Empleado" nombre;
write "Sueldo" sueldo;
subtotalalm:=subtotalalm+sueldo
read(f)
end;
write "almacen" almaux;
write "subtotal almacen" subtotalalm;
subtotaldep:=subtotaldep+subtotalalm;
end;
write "departamento" depaux;
write "subtotal departamento" subtotaldep;
subtotalsuc:=subtotalsuc+subtotaldep;
end;
write "Sucursal" sucaux;
write "subtotal sucursal" subtotalsuc;
totalgeneral:=totalgeneral+subtotalsuc
end;
write "totalgeneral:" totalgeneral;
end;
close(f);
End;
(********************************************)
procedure ampliar(var f:fichero);
var
r,e:empresa;
i:integer; (*posicion del registro en el archivo*)
opcion:char;
begin
clrscr;
gotoxy(25,2);
write('ESTAS EN LA OPCION DE "ALTAS"');
reset(f);
gotoxy(25,4);
write('Pulse cualquier tecla excepto - n ¢ N -');
while Upcase(ReadKey) <> 'N' do
begin
gotoxy(20,13);
write('Introduzca Datos del Nuevo Usuario: ');
LeerRegistro(e);
i:=posicion(e.nombre,f);
if i=-1 then
begin
i:=filesize(f);
seek(f,i);
write(f,e);
end
else
begin
seek(f,i);
read(f,r);
if r.DelimitadorReg then
begin
gotoxy(20,21);
write('El Elemento ya Existe');
sound(450);
delay(500);
nosound;
end
else
write(f,e);
end;
gotoxy(20,21);
write('Pulse - n ¢ N - si quiere Salir de Altas');
end;
close(f);
End;
(********************************************)
procedure menu(var f:fichero);
var
opcion:char;
begin
repeat
clrscr;
gotoxy(23,2);write('Menu Principal');
gotoxy(20,4);write('1.- Altas.');
gotoxy(20,6);write('2.- Listado total.');
gotoxy(20,8);write('3.- Salir');
repeat
opcion:=UpCase(ReadKey);
until opcion In ['1'..'3',#27];
clrscr;
Case opcion of
'1': Ampliar(f);
'2': ListadoTotal(f);
End; (*End del Case*);
Until (opcion='3') or (opcion=#27);
close(f);
textcolor(white);
textbackground(black);
Normvideo;
end;
(****************************************************************************)
(* Programa Principal *)
(****************************************************************************)
Begin
Clrscr;
textcolor(white);
textbackground(black);
desactivarcontrol:=false;
checkbreak:=desactivarcontrol;
setcbreak(desactivarcontrol);
Assign(archivo,'agenda.dat');
Activar(archivo);
Menu(archivo);
textcolor(white);
textbackground(black);
Normvideo;
clrscr;
End.
Ok gracias ya me pongo a trabajar en ello
Con gusto te ayudaré, pero no resuelvo ejercicios completos, sólo dudas concretas, así que deberás enviarme lo que ya hayas avanzado en el código para corregirlo y aumentarlo si es necesario. Si estás aprendiendo y yo te resuelvo el ejercicio no conseguirás aprender nada, así que será mejor que primero lo intentes por tu cuenta.
Bueno gracias por tu respuesta te cuento ya tengo creada la estructura del programa los menús y el registro pero no se como es el procedimiento para ordenarlo de sucursal a departamento almecen en forma ascendente y me de el total
Ok, edita el código que ya tengas echo con un editor como el bloc de notas, por ejemplo, cópialo y pégalo aquí para que yo pueda cogerlo y probarlo. Una vez que lo tenga trataré de resolver lo que te falte.
Respuesta
1
Pero de verdad estoy sumergido en mi trabajo ahora y me es imposible ayudarte, tal vez si hubiese sido con más anticipación lo hubiese hecho.
Atentamente.
Ing. Gustavo Gonzalez.
Linux User: 342.219.
Maracaibo - Venezuela
Respuesta
1
Por cuestión de tiempo no he podido responderte, ya que en la red de por acá, se introdujo un Virusin, estuvo difícil erradicarlo, anduve como pirinola. Mil millones de disculpas per sigo a tus ordenes
Atentamente. Linkus

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas