[ Foro de Pascal ]
Amigos estoy agregando esto a mi codigo original.
7: {Promedio Nomina Mayor}
begin
for i := 1 to capacidad do begin
if tra[i].salario > 1500 then
begin
acum := acum+ tra[i].sal_anual:4:2;
end;
writeln('Promedio Nomina Mayor es: ' acum/tra[cantidad].nombre:4:2);
end;
end;
esto me permite crear un promedio entre los trabajadores que ganan mas de 1500
8: {Promedio Nomina Menor}
begin
for i := 1 to capacidad do begin
if tra[i].salario <= 15 then
begin
acum := acum+ tra[i].sal_anu:4:2;
end;
writeln('Promedio Nomina Menor es: ' acum/tra[cantidad].nombre:4:2)
este me permite crear un promedio entre los trabajadores que ganan menos o igual a 1500
9: {Promedio general}
begin
for i := 1 to capacidad do begin
begin
sum := acum2+ acum;
end;
writeln('Promedio general es: ' sum/tra[cantidad].nombre:4:2);
end;
y este me permite crear un promedio entre todos los trabajadores.
el problema es que no me deja compilar ya que me aparecen estos errores:
Compiling prueba7.pas
prueba7.pas(309,5) Error: Label used but not defined "7"
prueba7.pas(309,5) Fatal: Syntax error, ";" expected but "BEGIN" found
Fatal: Compilation aborted
me gustaria saber porque sigue apareciendo este error y como solucionarlo ya que no me deja compilar el resto del codigo.
aqui escribo el codigo completo
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;
cedula :integer;
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;
acum :real;
acum2 :real;
sum : real;
{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('7- Promedio Nomina Mayor');
WriteLn('8- Promedio Nomina Menor');
WriteLn('9- Promedio General');
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
with tra[i] do begin
bono:=tra[i].salario*0.1;
utilidades:=tra[i].salario*2;
vacaciones:=tra[i].salario;
sal_mensual:=tra[i].salario+tra[i].bono;
sal_anual:=tra[i].sal_mensual*12+tra[i].vacaciones+tra[i].utilidades;
end;
end;
if tra[i].salario <= 1500 then
begin
cesta:=20;
with tra[i] do begin
vaca:=salario;
utili:=salario*4;
sal_men:=salario+cesta;
sal_anu:=sal_men*12+tra[i].vaca;
end;
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: {Borra un trabajador}
begin
write('Nombre a buscar: ');
readln(textoBuscar);
seBorro := false;
for i := 1 to capacidad do begin
{ReadLn(tra[cantidad].nombre);}
if (textoBuscar = tra[i].nombre) then
begin
seBorro := true;
with tra[i] do begin
nombre:='';
salario:=0;
sal_anu:=0.0;
sal_anual:=0.0;
sal_men:=0.0;
sal_mensual:=0.0;
utili:=0;
utilidades:=0;
vaca:=0;
vacaciones:=0;
bono:=0;
end;
end;
end;
7: {Promedio Nomina Mayor}
begin
for i := 1 to capacidad do begin
if tra[i].salario > 1500 then
begin
acum := acum+ tra[i].sal_anual:4:2;
end;
writeln('Promedio Nomina Mayor es: ' acum/tra[cantidad].nombre:4:2);
end;
end;
8: {Promedio Nomina Menor}
begin
for i := 1 to capacidad do begin
if tra[i].salario <= 1500 then
begin
acum := acum+ tra[i].sal_anu:4:2;
end;
writeln('Promedio Nomina Menor es: ' acum/tra[cantidad].nombre:4:2)
9: {Promedio general}
begin
for i := 1 to capacidad do begin
begin
sum := acum2+ acum;
end;
writeln('Promedio general es: ' sum/tra[cantidad].nombre:4:2);
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.
Esperando su pronta respuesta
muchisimas gracias
La línea que marca el error es ésta:
7: {Promedio Nomina Mayor}
que dice que está tomando como etiqueta, no como parte de la orden "case". La tabulación debería ayudarte a ver el problema: el "begin" que aparece tras ese "7" no queda debajo del último "end" que hay antes de ese caso 7. Te falta cerrar un "end;".
A partir de ahí te dará más problemas, por ejemplo en esta línea:
acum := acum+ tra[i].sal_anual:4:2;
que usa una variable "acum" que no tiene un valor previo, y usa una expresión de formato ":4:2 "que sólo puede ser parte de una orden "write", pero bueno... paso a paso...
muchas gracias me ha ayudado mucho y he logrado resolver los errores de compilacion antes mencionados pero al compilar los codigos para el promedio de la nomina mayor y menor
[code]7: {Promedio Nomina Mayor}
begin
for i := 1 to capacidad do begin
if tra[i].salario > 1500 then
begin
acum:=0;
acum:=acum+tra[i].sal_anual;
writeln('Promedio Nomina Mayor es:');
writeln('tra[i].acum/tra:4.2');
end;
end;
end;
8: {Promedio Nomina Menor}
begin
for i := 1 to capacidad do begin
if tra[i].salario <= 1500 then
begin
acum2:= acum+ tra[i].sal_anu;
writeln('Promedio Nomina Menor es:');
writeln('tra[i].acum2/tra:4:2');
end;
end;
end;[/code]
y el promedio general
[code]9: {Promedio general}
begin
for i := 1 to capacidad do begin
begin
sum:=0;
sum:=acum2+ acum;
writeln('Promedio general es:');
writeln('tra[i].sum/tra:4:2');
end;
end;
end;[/code]
me aparecen las siguientes notas:
Compiling prueba7.pas
prueba7.pas(45,2) Note: Local variable "bono" not used
prueba7.pas(49,2) Note: Local variable "seBorro" is assigned but never used
prueba7.pas(55,2) Note: Local variable "sum" is assigned but never used
Linking prueba7.exe
405 lines compiled, 0.5 sec, 44928 bytes code, 3332 bytes data
3 note(s) issued
La compilación ha terminado con éxito.
no entiendo porque aparecen.
ademas al ejecutar el programa cuando eligo las opciones de los promedios me aparece lo siguiente
promedio nomina mayor es
tra[i].acum/tra:4.2
tra[i].acum/tra:4.2
y no esta calculando dichos promedios, me gustaria saber porque no ocurre esto
esperando su pronta respuesta muchas gracias
(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.)