Programación General > Pascal

 Informar los datos de una empresa

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa