Curso de Cobol y PowerCobol

Operaciones matemáticas con verbos de COBOL

Capítulo 16: Operaciones aritméticas con diferentes verbos

En COBOL tenemos verbos dedicados a realizar las operaciones aritméticas que hemos realizado en capítulos anteriores con COMPUTE. Veamos cuales son y como se utilizan.

El verbo ADD para realizar sumas en COBOL

Para hacer sumas tenemos el verbo ADD que podemos traducir como adición (sinónimo de suma) en español.

Veamos como utilizarlo.

ADD añade o adiciona un valor numérico a otro. Así de simple.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99 VALUE 10.
           01 Numero2 PIC 99 VALUE 65.
      *> Variable para almacenar el resultado.
           01 Resultado PIC 99 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           ADD Numero1 TO Numero2.
      *> Muestra el resultado.
           DISPLAY Resultado.
       STOP RUN.
       END PROGRAM Capitulo16.
00

Nos aparece 00. Que raro, ¿no?

En realidad, no estoy asignando ningún valor a la variable resultado, con ADD, lo que le estoy diciendo que añada el valor de Numero1 (10) a la variable Numero2 (65). Esto no afecta en nada al valor de Resultado, que desde un principio, es ZEROES. Por otro lado, he sumado 10 al valor 65 de Numero2, que es el valor que tiene ahora 75.

Tenemos la constante ZERO para PICTURE de un dígito (0) y ZEROS o ZEROES para más de un cero. Esto no es obligatorio, pero es parte del sentido que tiene tener esta constante en singular o en plural. Es parte del acercamiento de COBOL al inglés.

¿Cómo se le puede decir a ADD que guarde la operación en la variable Resultado tal y como se hacía en COMPUTE?

Se hace de forma parecida con ADD como con los siguientes verbos, pero necesitamos un verbo extra, ya que operan de forma diferente.

Si queremos sumar de esta forma el valor de Numero1 en el de Numero2, lo haremos así:

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99 VALUE 10.
           01 Numero2 PIC 99 VALUE 65.
      *> Variable para almacenar el resultado.
           01 Resultado PIC 99 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           ADD Numero1 TO Numero2 GIVING Resultado.
      *> Muestra el resultado.
           DISPLAY Resultado.
           DISPLAY Numero2
       STOP RUN.
       END PROGRAM Capitulo16.

En la primera línea, tenemos el valor de Resultado. En la segunda, podemos ver, que de esta forma, no se ha guardado la operación en Numero2 como lo hizo anteriormente sin el GIVING.

75
65
Podemos traducir al español la frase COBOL anterior como: añade el valor de Numero1 a Numero2 dando el resultado.

Adición múltiple en COBOL

Vamos a hacer una adición múltiple con más de dos valores.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.

       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99V99 VALUE 10,55.
           01 Numero2 PIC 99V99 VALUE 0.
           01 Numero3 PIC 99V99 VALUE 0.
           01 Numero4 PIC 99V99 VALUE 0.
      *> Variable para almacenar el resultado.
           01 Resultado PIC S9999V99 VALUE ZEROS.

       PROCEDURE DIVISION.
       MuestraResultado.
      *> Adición múltiple de un mismo valor.
           ADD Numero1 TO Numero2, Numero3, Numero4.
      *> Muestra el resultado.
           DISPLAY Numero1.
           DISPLAY Numero2.
           DISPLAY Numero3.
           DISPLAY Numero4.
           STOP RUN.
       END PROGRAM Capitulo16.

Gracias a ADD, podemos además de sumar, realizar operaciones de asignación repetitivas en una sola línea de código.

10,55
10,55
10,55
10,55

La sustracción en COBOL

La sustracción es un sinónimo de restar. Adicionar era la acción de añadir algo, sustraer es lo contrario, la acción de quitar algo.

Podemos utilizar el verbo SUBTRACT para restar. Lo haremos de forma muy parecida a la de ADD.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99 VALUE 10.
           01 Numero2 PIC 99 VALUE 65.
      *> Variable para almacenar el resultado.
           01 Resultado PIC 99 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           SUBTRACT Numero1 FROM Numero2.
      *> Muestra el resultado.
           DISPLAY Resultado.
           DISPLAY Numero2
       STOP RUN.
       END PROGRAM Capitulo16.

Sustrae correctamente.

00
55

Para realizar la operación de sustracción o resta, ya has visto que se utiliza el verbo FROM en lugar de BY. Ya te he dicho que COBOL tiene un buen vocabulario y tiene palabras para todo.

Para almacenar el resultado en una tercera variable, utilizaremos también el verbo GIVING.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99 VALUE 10.
           01 Numero2 PIC 99 VALUE 65.
      *> Variable para almacenar el resultado.
           01 Resultado PIC 99 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           SUBTRACT Numero1 FROM Numero2 GIVING Resultado.
      *> Muestra el resultado.
           DISPLAY Resultado.
       STOP RUN.
       END PROGRAM Capitulo16.
55

Sustracción múltiple en COBOL

Tamibén puedes sustraer un valor a múltiples variables.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99 VALUE 10.
           01 Numero2 PIC 99 VALUE 50.
           01 Numero3 PIC 99 VALUE 78.
           01 Numero4 PIC 99 VALUE 80.
      *> Variable para almacenar el resultado.
           01 Resultado PIC 99 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           SUBTRACT Numero1 FROM Numero2, Numero3, Numero4.
      *> Muestra el resultado.
           DISPLAY Numero1.
           DISPLAY Numero2.
           DISPLAY Numero3.
           DISPLAY Numero4.
       STOP RUN.
       END PROGRAM Capitulo16.
10
40
68
70

Multiplicar en COBOL

Para la multiplicación en COBOL, se puede utiliza el verbo MULTIPLY.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99 VALUE 10.
           01 Numero2 PIC 99 VALUE 50.
      *> Variable para almacenar el resultado.
           01 Resultado PIC 9999 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           MULTIPLY Numero1 BY Numero2 GIVING Resultado.
      *> Muestra el resultado.
           DISPLAY Resultado.
       STOP RUN.
       END PROGRAM Capitulo16.
0500

Multiplicación múltiple en COBOL

También podemos multiplicar una variable por más de una a la vez.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 9999 VALUE 10.
           01 Numero2 PIC 9999 VALUE 50.
           01 Numero3 PIC 9999 VALUE 70.
           01 Numero4 PIC 9999 VALUE 90.

      *> Variable para almacenar el resultado.
           01 Resultado PIC 9999 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           MULTIPLY Numero1 BY Numero2, Numero3, Numero4.
      *> Muestra el resultado.
           DISPLAY Numero1.
           DISPLAY Numero2.
           DISPLAY Numero3.
           DISPLAY Numero4.
       STOP RUN.
       END PROGRAM Capitulo16.
0010
0500
0700
0900

La división en COBOL

La división la podemos hacer con DIVIDE.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
      *> Especificamos que el punto decimal es una coma.
           DECIMAL-POINT IS COMMA.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
           01 Numero1 PIC 99 VALUE 50.
           01 Numero2 PIC 99 VALUE 10.
      *> Variable para almacenar el resultado.
           01 Resultado PIC 9999 VALUE ZEROES.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
           DIVIDE Numero1 BY Numero2 GIVING Resultado.
      *> Muestra el resultado.
           DISPLAY Resultado.
       STOP RUN.

       END PROGRAM Capitulo16.

Asignación múltiple en divisiones

Con las divisiones también podemos asignar el resultado a múltiple variables de una vez.

⁠⁠       IDENTIFICATION DIVISION.
       PROGRAM-ID. Capitulo16.

       ENVIRONMENT DIVISION.
       DATA DIVISION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
      *> Variables de números.
       01 Numero1 PIC 9999 VALUE 50.
       01 Numero2 PIC 9999 VALUE 10.
       01 Numero3 PIC 9999 VALUE ZEROS.
       01 Numero4 PIC 9999 VALUE ZEROS.
       01 Numero5 PIC 9999 VALUE ZEROS.

      *> Variable para almacenar el resultado.
       01 Resultado PIC 9999 VALUE ZEROS.
       PROCEDURE DIVISION.
       MuestraResultado.
      *> Calcula el resultado.
       DIVIDE Numero1 BY Numero2 GIVING Numero3, Numero4, Numero5.
      *> Muestra el resultado.
       DISPLAY Numero1.
       DISPLAY Numero2.
       DISPLAY Numero3.
       DISPLAY Numero4.
       DISPLAY Numero5.
       STOP RUN.
       END PROGRAM Capitulo16.

Se divide el primer valor con el segundo, y ese mismo, se asigna a múltiples variables.

0050
0010
0005
0005
0005

Comentarios

Si te quedan dudas sobre el temario, sobre Cobol, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.