[ Foro de Pascal ]

error Label used but not defined

07-Mar-2020 03:45
Miguel Castro
2 Respuestas

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


08-Mar-2020 11:44
Nacho Cabanes (+83)

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...


08-Mar-2020 23:29
Miguel Castro

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.)