Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol GnuCOBOL (OpenCOBOL)
GnuCOBOL (OpenCOBOL) El compilador gratuito y Open Source cada vez más popular.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Componente] Problemas con vbscript Fito PowerCOBOL (ActiveX, v4 - v11) 10 9 de marzo de 2022 11:42
[Compilador] Problemas con los *.SE/*.FD Socavi PowerCOBOL (ActiveX, v4 - v11) 8 23 de agosto de 2021 22:47
[Componente] Problemas Calendario Breew PowerCOBOL (ActiveX, v4 - v11) 9 24 de abril de 2016 12:32
[Compilador] Problemas con el DEBUG Josber PowerCOBOL (ActiveX, v4 - v11) 3 12 de abril de 2015 21:16
Problemas perdida licencia Kuk PowerFORM 0 3 de febrero de 2015 15:21

Respuesta

  #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
  #2
Antiguo 8 de agosto de 2022, 12:50
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@dariodr, yo creo que debes haces 2 cosas:
  1. Dar más detalles acerca de lo que no te sale. Lo de "no logco sacar saldo menor" no dice nada y obliga a que la gente estudie en detalle tu programa
  2. Pasar con el deburador (debugger)



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #3
Antiguo 8 de agosto de 2022, 18:16
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Echando un vistazo por encima, creo que debes cambiar en todos los bucles
Código COBOL:
  1. ...  UNTIL WS-J > WS-I

por

Código COBOL:
  1. ..... UNTIL WS-J = WS-I

Ya que "WS-I" es el elemento del array no rellenado todavia.

Y por consiguiente no te funcionaria ningun bucle, si alguno te funciona es porque el elemento "WS-I" evaluado está a cero y blanco y no te varia el resultado, pero en el "sueldo minimo" te saldra "cero" del trabajador " ".
JCantero is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:39.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.