Programación General > Pascal
Informar los datos de una empresa
infolab:
necesito ayuda con lo siguiente, ya quede estancado y no se me ocurre como continuar:
Apartir de los datos de n trabajadores de una empresa,debo ingresar nombre,edad,sueldo,y sexo (M/F), y el programa debe mostrarme cantidad de mujeres,sueldo promedio de hombres,edad promedio de hombres,el nombre y el sueldo del trabajador con mayor sueldo:
el codigo que alcance a escribir es el sgte:
program ejer_seis;
uses
wincrt;
var
c,sum,mas,fem,t,e,sd:integer;
m,f,s,n:string[20];
p:real;
begin
writeln('ingrese cantidad trabajadores');
readln(t);
for t:=1 to t do
begin
writeln('ingrese el nombre');
readln(n);
writeln('ingrese la edad');
readln(e);
writeln('ingrese el sueldo');
readln(sd);
writeln('ingrese el sexo (M/F)');
readln(s);
end;
if (s='f') then
begin
fem:=t-mas;
end;
sum:=0;
c:=1;
if (s='m') then
begin
sd:=sd+c;
c:=c+1;
end;
p:=(sd/c);
writeln('las mujeres son',fem);
writeln('el sueldo promedio de los hombres',p:3:1);
end.
gothmog:
La verdad es que está muy confuso tu código. Trata de usar nombres de variables más identificativos, escribir 3 o 4 caracteres más no te va a suponer más que unos míseros segundos y aportarás mucha claridad.
Estaría bien que indicaras cuál va a ser la estrategia de trabajo, porque veo ahí unas restas que no entiendo qué quieres hacer.
Por último, tienes un error de sintaxis, no se puede poner esto:
--- Código: Text ---for t=1 to t do
porque estás asignando el valor 1 a la variable t, perdiendo el contenido que tuviera previamente.
akela:
te recomiendo que utilices listas para la inclusion de todos los datos lo cual es la parte mas importante luego que tengas eso si puedes comenzar a realizar las operaciones que te piden
jimmyg:
SALUDOS, buenos consejos los de los colegas, usar variables significativas y otra cosa, identar el codigo, que sea mas legible, eso facilita la lectura de un programa en el futuro, es una buena practica, al igual que documentar el codigo.
Bueno, aqui esta tu programa, espero que te sirva:
--- Código: Text --- program ejer_seis; {ESTE ES UN CODIGO ULTRA SENCILLO, LOGICAMENTE, SE PUEDE SUPER MEJORARPONERLE MARCOS, COLORES, BOTONES, UTILIZAR UN ARCHIVO PARA GUARDAR LOS DATOSEN FIN.... AL MENOS TE PUEDE SERVIR} uses crt; var hombres,mujeres,totaltraba : integer;nombre,nombremayor : string;sueldo,totalsueldo,sueldomayor : real;totalh,totalm,error,tempo,edad : integer;sexo,tecla : char; {leera el total de trabajadores,en formato string para poder capturar errores.TOTRAST = TO tal de TRA bajadores en ST ring}TOTRAST : string; {*******************************************************************}{CONVIERTE A MAYUSCULA UN STRING}procedure mayusc( var x : string);var i : integer;begin for i := 1 to length(x) do x[i] := upcase(x[i]);end; {*******************************************************************}{produce un sonidillo, nada mas eso, simple sonidillo}procedure bip;begin sound(4000); delay(100); nosound;end; {*******************************************************************}{Ubica el string TIRA en la posicion X,Y}procedure poner(x,y: integer; tira : string);begin gotoxy(x,y); write(tira);end; {**********************************************************}procedure errormsg;begin window(65,4,79,4); write(chr(7)); textbackground(lightgray);textcolor(red + blink); write (' ERROR '); window(1,1,80,25); textbackground(black);textcolor(white);end; {*************************************}{* BEGIN PRINCIPAL *}{*************************************} beginwhile true do begin repeat clrscr; textbackground(black);textcolor(white); poner(1,1,'ingrese cantidad trabajadores, <0> = salir '); {se lee string, para permitir que se digiten caracteres no numericos, despues se valida lo digitado} readln(tOTRAst); val(totrast,totaltraba,error); if error <> 0 then begin {Hay un error, algun caracter del string no se pudo convertir a numero} bip; errormsg; poner(1,3,'Digite un valor numerico.. Presione ENTER para seguir'); readln; end else if totaltraba = 0 then halt; until error = 0; for tempo := 1 to totaltraba do begin CLRSCR; poner(5,2,'CANTIDAD DE TRABAJADORES A INCLUIR:'); GOTOXY(43,2); WRITE(totaltraba); poner(5,3,'INCLUYENDO TRABAJADOR NUMERO:'); GOTOXY(39,3); WRITE(tempo); poner(3,5,'Nombre: '); poner(3,6,'Edad: '); poner(3,7,'Sueldo: '); poner(3,8,'Sexo (M/F): '); gotoxy(19,5); readln(nombre); {pasamos el nombre digitado a mayuscula} mayusc(nombre); poner(19,5,nombre); {OJO, AQUI SE DEBE PONER LA RUTINILLA PARA VERIFICAR QUE SOLO SE DIGITEN NUMEROS, IGUAL QUE EN CANTIDAD DE TRABAJADORES, SE PUEDE HACER UN PROCEDIMIENTO QUE SIMPLIFIQUE EL ASUNTO} gotoxy(19,6); readln(edad); {VALIDAR QUE LO DIGITADO SEA EFECTIVAMENTE UN NUMERO} gotoxy(19,7); readln(sueldo); repeat gotoxy(19,8); sexo := readkey; until upcase(sexo) in ['F','M']; poner(19,8,upcase(sexo)); {ESPERA DE UNOS SEGUNDOS PARA PEDIR EL OTRO NOMBRE} textbackground(lightgray);textcolor(red); PONER(20,12,'ESPERE UN MOMENTO, POR FAVOR'); textbackground(black);textcolor(white); delay(1000); {AQUI VIENEN LOS CALCULOS} {HAY UNA VARIABLE QUE SE LLAMA TOTALM, TENDRA EL TOTAL DE LAS MUJERES O SEA, CADA VEZ QUE SE ELIJA F COMO SEXO, ESA VARIABLE DEBE INCREMENTARSE EN UNO} if (sexo = 'F') or (sexo = 'f') then inc(totalm) else begin {SE DEBE HACER LO MISMO PARA LOS HOMBRES, CON EL FIN DE SACAR EL PROMEDIO DE SUELDO} inc(totalh); {SE LLEVA UNA SUMA DE LOS SUELDOS DIGITADOS, SOLO SI SON HOMBRES. ¨MACHISMO? NO SE, ASI DICE EL ENUNCIADO!! JEJE} totalsueldo := totalsueldo + sueldo; end; if tempo = 1 then {Es el primer trabajador, asi que guardamos los datos que pide el enunciado} begin nombremayor := nombre; sueldomayor := sueldo; end else begin {NO es el primer trabajador} {Comparamos el sueldo que se digita con el guardado, si el sueldo digitado es mayor que el guardado, actualizamos los datos guardados} if sueldo > sueldomayor then begin nombremayor := nombre; sueldomayor := sueldo; end end; end; textbackground(lightgray);textcolor(red + blink); PONER(20,12,' CAPTURA DE DATOS TERMINADA '); textbackground(black);textcolor(white); poner(3,19,'Total de Trabajadores:'); poner(3,20,'Cantidad de mujeres:'); poner(3,21,'Sueldo promedio de los hombres:'); poner(3,22,'Trabajador con sueldo mayor:'); poner(3,23,'Sueldo mayor:'); gotoxy(35,19); write(totaltraba); gotoxy(35,20); write(totalm); gotoxy(35,21); write(totalsueldo/totalh:12:2); gotoxy(35,22); write(nombremayor); gotoxy(35,23); write(sueldomayor:12:2); gotoxy(35,19); write(totaltraba); repeat poner(15,25,'Presione la tecla ESC para salir o ENTER para seguir'); tecla := readkey; until (tecla = char(13)) or (tecla = char(27)); if tecla = char(27) then halt;end;end.
Enko:
jimmyg:
Cuando peges tu código es bueno que lo encieres entre los tags:
[CODE*] [/CODE*]
el asterisco no se escribe, lo tuve que poner para que no los tome en serio y se obtenga esto
--- Código: Text ---
o bien uses el boton que está ariba del cuadro de texto que dice CODE.
Asi podes lograr este efecto
--- Código: ---
procedure mayusc( var x : string);
var
i : integer;
begin
for i := 1 to length(x) do x[i] := upcase(x[i]);
end;
--- Fin del código ---
:hola:
Navegación
[#] Página Siguiente
Ir a la versión completa