[ Foro de Pascal ]
Buenas amigos me gustaría que me pudiesen ayudar con este programa en pascal que debo crear y me esta dando bastantes quebraderos de cabeza
Se me pide crear un programa que permita ingresar el nombre y el salario de los trabajadores de una empresa. así como también poder consultarlos y eliminarlos.
ya he creado una parte del código en geany:
program ACME;
type
tipoPersona = record
nombre: string;
salario: real;
sal_anu: real;
sal_anual: real;
sal_men: real;
sal_mensual: real;
utili, utilidades, vaca, vacaciones: real;
bono: real;
end;
const
capacidad = 1000;
var
tra: array[1..capacidad] of tipoPersona;
cantidad: integer;
opcion: integer;
i: integer;
textoBuscar: string;
encontrado: boolean;
bono: real;
cesta: integer;
seBorro:boolean;
{Cuerpo del programa principal}
begin
cantidad := 0;
repeat
WriteLn('***BIENVENIDO A ACME***');
WriteLn;
WriteLn('1- Agregar Trabajador');
WriteLn('2- Todos los trabajadores');
WriteLn('3- Buscar a un trabajador');
WriteLn('4- Reporte 1');
WriteLn('5- Reporte 2');
WriteLn('6- Eliminar Trabajador');
WriteLn('0- Salir');
Write('Escoja una opcion: ');
ReadLn(opcion);
WriteLn;
case opcion of
1: { Agregar trabajador }
if (cantidad < capacidad) then
begin
inc(cantidad);
WriteLn('Introduciendo al trabajador ', cantidad);
Write('Introduzca el nombre: ');
ReadLn(tra[cantidad].nombre);
Write('Introduzca Salario: ');
ReadLn(tra[cantidad].salario);
for i:=1 to cantidad do
begin
if tra[i].salario > 1500 then begin
tra[i].bono:=tra[i].salario*0.1;
tra[i].utilidades:=tra[i].salario*2;
tra[i].vacaciones:=tra[i].salario;
tra[i].sal_mensual:=tra[i].salario+tra[i].bono;
tra[i].sal_anual:=tra[i].sal_mensual*12+tra[i].vacaciones+tra[i].utilidades;
end;
if tra[i].salario <= 1500 then
begin
cesta:=20;
tra[i].vaca:=tra[i].salario;
tra[i].utili:=tra[i].salario*4;
tra[i].sal_men:=tra[i].salario+cesta;
tra[i].sal_anu:=tra[i].sal_men*12+tra[i].vaca;
end;
end;
end;
2: begin {Todos los trabajadores}
if cantidad = 0 then
WriteLn('No hay datos')
else
for i := 1 to cantidad do
WriteLn(i, ' ', tra[i].nombre, tra[i].salario:4:2);
WriteLn;
end;
3: {Buscar a un trabajador}
begin
Write('Escriba el nombre del trabajador ');
ReadLn( textoBuscar );
encontrado := false;
for i := 1 to cantidad do
if pos (textoBuscar, tra[i].nombre) > 0 then
begin
encontrado := true;
WriteLn( i,' - Nombre: ', tra[i].nombre,
', Salario: ', tra[i].salario:4:2);
end;
if not encontrado then
WriteLn('No se ha encontrado.');
WriteLn;
end;
4: {Reporte 1 }
for i := 1 to cantidad do
begin
if tra[i].salario > 1500 then
begin
writeln('Nombre del trabajador: ', tra[i].nombre);
WriteLn('Salario: ', tra[i].salario:4:2);
WriteLn('Bono: ', tra[i].bono:4:2);
WriteLn('Total: ', tra[i].sal_mensual:4:2);
end;
end;
5: { Reporte 2}
for i := 1 to cantidad do
begin
if tra[i].salario <= 1500 then
begin
writeln('Nombre del trabajador: ', tra[i].nombre);
WriteLn('Salario: ', tra[i].salario:4:2);
WriteLn('Cestaticket: ', cesta);
WriteLn('Total: ', tra[i].sal_men:4:2);
end;
end;
6: { Eliminar trabajador }
begin
seBorro := false;
for i := 1 to capacidad do
ReadLn(tra[cantidad].nombre);
if pos (textoBuscar, tra[cantidad].nombre) = tra[i].nombre then
begin
seBorro := true;
fillchar(tra[i].salario, tra[i].sal_anu, tra[i].sal_anual, tra[i].sal_men, tra[i].sal_mensual, tra[i].utili, tra[i].utilidades, tra[i].vaca, tra[i].vacaciones, tra[i].bono;),0);
end;
if seBorro = true then
writeln('El Trabajador indicado se ha borrado con exito')
end;
0: { salir}
begin
;
WriteLn;
WriteLn('Saliendo...');
WriteLn;
end;
else
begin
WriteLn;
WriteLn('Opción incorrecta!');
WriteLn;
end;
end; { Fin de "case" }
until opcion = 0;
end.
El problema surge cuando trato de crear el código para la eliminación del trabajador ya que tengo que borrar su nombre y todo lo relacionado con este. Pero al compilar me da estos errores:
prueba2.pas(267,10) Error: Incompatible types: got "LongInt" expected "ShortString"
prueba2.pas(273,177) Fatal: Syntax error, ")" expected but ";" found
Fatal: Compilation aborted
Ha fallado la compilación.
Creo que estoy haciendo algo mal en el codigo para la eliminacion (opcion 6)
begin
seBorro := false;
for i := 1 to capacidad do
ReadLn(tra[cantidad].nombre);
if pos (textoBuscar, tra[cantidad].nombre) = tra[i].nombre then
begin
seBorro := true;
fillchar(tra[i].salario, tra[i].sal_anu, tra[i].sal_anual, tra[i].sal_men, tra[i].sal_mensual, tra[i].utili, tra[i].utilidades, tra[i].vaca, tra[i].vacaciones, tra[i].bono;),0);
end;
if seBorro = true then
writeln('El Trabajador indicado se ha borrado con exito')
end;
me gustaría que me pudiera ayudar y explicar como resolverlo.
Muchas gracias
En un array sobredimensionado, como es tu caso, de cara a borrar, lo más importante no es vaciar ese registro, sino "mover hacia atrás" los que le siguen (y disminuir el contador).
Las ideas básicas (pero aplicadas a C#) las puedes ver en este video:
http://www.aprendeaprogramar.com/cursos/verApartado.php?id=4035
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)