Ver Mensaje Individual
  #1
Antiguo 8 de agosto de 2022, 11:44
dariodr
Forero
Última Actividad 20.09.2026 10:04
Posts Posts: 57
Likes enviados Enviados: 17
Likes recibidos Recibidos: 11
Pregunta Problemas de lógica en el código
0 Inactivo Inactivo

Hola, pido ayuda a ustedes. Tengo este codigo de empleados de una empresa, todo esta bien lo que no logro es mostrar el sueldo menor.
Salu2.
NOTA: Codigo en OpenCobol

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. empresa.
  3.  
  4.        DATA DIVISION.
  5.        FILE SECTION.
  6.        WORKING-STORAGE SECTION.
  7.        01  EMPRESA.
  8.            03 EMPLEADOS OCCURS 100 TIMES.
  9.               05 NOMBRE      PIC A(15).
  10.               05 SUELDO      PIC 9(6).
  11.               05 CATEGORIA   PIC 9.
  12.        77  WS-I      PIC 999 VALUE 1.
  13.        77  MAS-DATOS PIC A.
  14.        77  WS-J      PIC 999.
  15.        77  NOMBRE1   PIC A(15).
  16.        77  NOMBRE2   PIC A(15).
  17.  
  18.       * Contadores para la categorias
  19.        01  WS-A           PIC 999 VALUE 0.
  20.        01  WS-B           PIC 999 VALUE 0.
  21.        01  WS-C           PIC 999 VALUE 0.
  22.        01  WS-D           PIC 999 VALUE 0.
  23.      *Variables auxiliares
  24.        01  MAS-2000       PIC 999.
  25.        01  CAT1-MAS-1000  PIC 999.
  26.        01  MAYOR          PIC 9(6).
  27.        01  MENOR          PIC 9(6).
  28.  
  29.        PROCEDURE DIVISION.
  30.        MAIN-PROCEDURE.
  31.            PERFORM INGRESO-DATOS.
  32.            PERFORM EMPLEADOS-CATEGORIA.
  33.            PERFORM MAS-DE-2000.
  34.            PERFORM CATEGORIA-1-MAS-1000.
  35.            PERFORM SUELDO-MAYOR.
  36.            PERFORM SUELDO-MENOR.
  37.            STOP RUN.
  38.  
  39.        INGRESO-DATOS.
  40.            PERFORM UNTIL MAS-DATOS = 'N'
  41.                DISPLAY "Nombre del empleado: " NO ADVANCING
  42.                ACCEPT NOMBRE(WS-I)
  43.                DISPLAY "Sueldo del empleado: " NO ADVANCING
  44.                ACCEPT SUELDO(WS-I)
  45.                DISPLAY "Categoria (1-4): " NO ADVANCING
  46.                ACCEPT CATEGORIA(WS-I)
  47.                ADD 1 TO WS-I
  48.                DISPLAY " "
  49.                DISPLAY "Agregar otro empleado [S/N]: " NO ADVANCING
  50.                ACCEPT MAS-DATOS
  51.            END-PERFORM.
  52.      *
  53.        EMPLEADOS-CATEGORIA.
  54.            PERFORM VARYING WS-J FROM 1 BY 1 UNTIL WS-J > WS-I
  55.                EVALUATE CATEGORIA(WS-J)
  56.                    WHEN 1 ADD 1 TO WS-A
  57.                    WHEN 2 ADD 1 TO WS-B
  58.                    WHEN 3 ADD 1 TO WS-C
  59.                    WHEN 4 ADD 1 TO WS-D
  60.                END-EVALUATE
  61.            END-PERFORM.
  62.            DISPLAY " ".
  63.            DISPLAY "Empleados en categoria 1: " WS-A.
  64.            DISPLAY "Empleados en categoria 2: " WS-B.
  65.            DISPLAY "Empleados en categoria 3: " WS-C.
  66.            DISPLAY "Empleados en categoria 4: " WS-D.
  67.      *
  68.        MAS-DE-2000.
  69.            PERFORM VARYING WS-J FROM 1 BY 1 UNTIL WS-J > WS-I
  70.                IF SUELDO(WS-J) > 2000
  71.                    ADD 1 TO MAS-2000
  72.                END-IF
  73.            END-PERFORM.
  74.            DISPLAY " ".
  75.            DISPLAY "Empleados que cobran mas de 2000: " MAS-2000.
  76.  
  77.       * EMPLEADOS DE LA CATEGORIA 1 CON SUELDO MAYOR A $1000
  78.        CATEGORIA-1-MAS-1000.
  79.            PERFORM VARYING WS-J FROM 1 BY 1 UNTIL WS-J > WS-I
  80.                IF CATEGORIA(WS-J) = 1 AND SUELDO(WS-J) > 1000
  81.                    ADD 1 TO CAT1-MAS-1000
  82.                END-IF
  83.            END-PERFORM.
  84.            DISPLAY " ".
  85.            DISPLAY "Categoria 1 que cobran mas de 1000: " CAT1-MAS-1000.
  86.  
  87.       * CALCULO DEL SUELDO MAYOR
  88.        SUELDO-MAYOR.
  89.            MOVE 0 TO MAYOR.
  90.            PERFORM VARYING WS-J FROM 1 BY 1 UNTIL WS-J > WS-I
  91.                IF SUELDO(WS-J) > MAYOR
  92.                    MOVE SUELDO(WS-J) TO MAYOR
  93.                    MOVE NOMBRE(WS-J) TO NOMBRE1
  94.                END-IF
  95.            END-PERFORM.
  96.            DISPLAY " ".
  97.            DISPLAY "El empleado con mayor sueldo es: " NOMBRE1.
  98.            DISPLAY "Y su sueldo es: " MAYOR.
  99.  
  100.       * Calculo del sueldo menor
  101.        SUELDO-MENOR.
  102.            MOVE SUELDO(1) TO MENOR.
  103.            PERFORM VARYING WS-J FROM 2 BY 1 UNTIL WS-J > WS-I
  104.                IF SUELDO(WS-J) < MENOR
  105.                    MOVE SUELDO(WS-J) TO MENOR
  106.                    MOVE NOMBRE(WS-J) TO NOMBRE2
  107.                END-IF
  108.            END-PERFORM.
  109.            DISPLAY "El empleado con menor sueldo es: " NOMBRE2.
  110.            DISPLAY "El sueldo minimo es : " MENOR.
dariodr is offline   Responder Con Cita