PROGRAM salario(input,output);
(*Programa para calcular el salario neto de un empleado en funcion de las horas trabajadas, restando los impuestos de seguridad social y el IRPF*)
CONST
precioord=5.68;
precioext=8;
ss=6;
VAR
nombre:string(40);
hordinarias:integer;
totalordinarias:real;
hextraacumula:integer;
hextratotal:integer;
hextra:integer;
totalextra:integer;
nocturnidad:integer; (*Si pongo la variable tipo char no me la lee al pedir datos!!!*)
plus:real;
salariobruto:real;
seguridadsocial:real;
irpf:real;
redondeo:integer;
hijos:integer;
salarioneto:real;
n:integer;
a:integer;
BEGIN
write('Nombre:');
read(nombre);
write('Número de horas ordinarias en el mes en curso:');
read(hordinarias);
write('Número de horas extraordinarias en el mes en curso:');
read(hextra);
write('Nocturnidad SI [1] NO [0]:');
read(nocturnidad);
write('Número de hijos a su cargo menores de 18 años:');
read(hijos);
IF hextra>30 THEN writeln('Número de horas extraordinarias mayor al permitido. Avisar al gerente.') ELSE
BEGIN
CASE hordinarias OF
0..160 : BEGIN
totalordinarias:=hordinarias*precioord;
hextratotal:=hextra;
totalextra:=hextratotal*precioext;
END;
161..190 : BEGIN
totalordinarias:=160*precioord;
hextraacumula:=hordinarias-160;
hextratotal:=hextraacumula+hextra;
totalextra:=hextratotal*precioext;
END;
OTHERWISE writeln('Número de horas extraordinarias mayor al permitido. Avisar al gerente.');
END;
CASE nocturnidad OF
1 : plus:=((totalextra+totalordinarias)*10)/100;
0 : plus:=(totalextra+totalordinarias)*0;
END;
salariobruto:=(totalordinarias+totalextra);
seguridadsocial:=(salariobruto*ss)/100;
redondeo:=round(salariobruto);
CASE redondeo OF
0..1000 :
BEGIN
IF (hijos<=5) THEN n:=12-hijos ELSE n:=7;
irpf:=(salariobruto*n)/100;
END;
1001..1250 :
BEGIN
IF (hijos<=5) THEN n:=15-hijos ELSE n:=10;
irpf:=(salariobruto*n)/100;
END;
1251..maxint :
BEGIN
IF (hijos<=5) THEN n:=18-hijos ELSE n:=13;
irpf:=(salariobruto*n)/100;
END;
OTHERWISE write('Error');
END;
salarioneto:=salariobruto-seguridadsocial-irpf;
writeln('');
writeln('----------------------- ------------ -------------------- ----------');
writeln(' Importe Unidad Total');
writeln('----------------------- ------------ -------------------- ----------');
writeln('Horas ordinarias',hordinarias:21,'',precioord:22:2,'',totalordinarias:12:2,'');
writeln('Horas Extra',hextratotal:26,'',precioext:22,'',totalextra:12,'');
writeln('Plus Nocturnidad',plus:55:2,'');
writeln('');
writeln('Salario BRUTO',salariobruto:58:2,'');
writeln('Retención IRPF',n:22,'%',irpf:34:2,'');
writeln('Cuota SS ',ss:27,'%',seguridadsocial:34:2,'');
writeln('-----------------------------------------------------------------------');
writeln('-----------------------------------------------------------------------');
writeln('Salario NETO',salarioneto:59:2,'');
writeln('Sr/a',nombre:68,'');
END;
REPEAT
writeln('Pulse 1 para finalizar');
read(a);
UNTIL a=1;
END.
Ejemplo de ejecución
Anterior
Suscribirse a:
Enviar comentarios (Atom)
¿Dani, si le pones nocturnidad 0 que pasa? porque en el código aparece esto:
ResponderEliminar" CASE nocturnidad OF
1 : plus:=((totalextra+totalordinarias)*10)/100;
0 : plus:=(totalextra+totalordinarias)*0;
END;"
si multiplicas por 0 un número da cero...
Pues en el caso de que introduzcas un 1 por teclado, al final del ejercicio en el apartado de plus de nocturnidad, te mostraría esa operación, pero si le introduces un o, te aparecería un plus de 0 , ya que establezco un 1 para si y un 0 para no.
ResponderEliminarjaja ya me di cuenta después jaja esque no me fijé en el plus:= toda la razón para ti
ResponderEliminar