
Instr. de Cálculo
Debido a que el lenguaje
Cobol fue concebido para la gestión de grandes cantidades de datos y a resolver problemas
de tipo comercial y de administración, no se incluyeron dentro de sus especificaciones
verbos que nos puedieran ayudar a resolver cálculos complejos como integrales,
trigonometría, raices cuadradas, etc..., sino simplemente las orientadas a los cálculos
básicos, suma, resta, multiplicación y división que son las que vamos a ver a
continuación:
ADD
, ésta es la instrucción que utilizaremos para
realizar sumas y tiene los siguientes formatos:
1.- ADD
variable ó literal variable ó
literal ... TO
variable (ROUNDED) (ON
SIZE ERROR ) instrucción
2.- ADD
variable ó literal variable ó
literal ...GIVING
variable (ROUNDED) (ON SIZE ERROR ) instrucción
3.- ADD CORR
variable TO
variable (ROUNDED) (
ON SIZE ERROR) instrucción
Para ver las explicaciones de cada uno de
los formatos partiremos de la misma WORKING
, y a continuación pondremos un ejemplo y su
explicación.
|
WORKING-STORAGE SECTION.
01 VALORES.
02 UNO PIC 99 VALUE 10.
02 DOS PIC 9(6) VALUE 280.
02 TRES PIC 9(4) VALUE 540.
01 OTROS
02 OTRO1 PIC 9.
02 DOS PIC 9(6) VALUE 110.
01 RESULTADO PIC S9(8) VALUE 10.
01 RESTO PIC 99.
PROCEDURE DIVISION.
INICIO. |
|
Formato 1: |
|
ADD UNO TRES 5 TO RESULTADO. |
|
Se sumarán todas las variables o literales numéricos
(cifras) al valor de la variable que se de a continuación del
TO,
guardandose el resultado también en ésta última.Por
tanto al realizar ésta operación el valor de la variable RESULTADO, será de: 10 (de la
variable UNO) + 540 (de la variable TRES) + 5 + 10 (de Resultado) = 565.
Como veis UNO + TRES + 5 suman 555 pero ésto se suma al valor que ya tenía la variable
RESULTADO, con lo que la suma total es de 565.
Este formato se usa mucho para hacer de contador y hacer
que una varable aumente en uno su valor poniendo:
ADD 1 TO
RESULTADO.
|
|
Formato 2: |
|
ADD UNO TRES 5 GIVING RESULTADO. |
|
En éste caso la variable RESULTADO tendrá el valor de
la suma de las variables anteriores, sin tener en cuenta su valor inicial, es decir, será
de: 10 (de la variable UNO) + 540 (de la variable TRES) + 5 = 555.
|
|
Formato 3: |
|
ADD CORR VALORES TO OTROS. |
|
Con éste formato conseguimos que las variables del
campo compuesto VALORES se sumen al valor de las variables con el mismo nombre del campo
compuesto OTROS, obteniendo como resultado: 280 (de la variable DOS del campo VALORES) +
110 (de la variable DOS del campo OTROS) = 390.
Si hubiera coincidido alguna variable mas con el mismo nombre en ambos campos también se
hubiese sumado.
|
|
Nota: Como habreis podido apreciar pueden coexistir variables con el mismo nombre
pero nunca al nivel 01 o 77, es decir nunca como variables independientes, pero si que
formen parte de otra, aunque yo personalmente nunca lo uso porque solo puede dar lugar a
confusiones. Si de todas formas lo utilizais, hay que tener en cuenta que para referirse a
éstas variables no solo bastará con poner su nombre, sino que además habrá que
especificar a que campo pertenece con la palabra IN u OF
. Esto se
explicará con mas detalle cuando veamos los verbos para manipular variables como MOVE. |
SUBTRACT
, ésta es la instrucción que utilizaremos para
realizar restas y tiene los siguientes formatos:
1.- SUBTRACT
variable ó literal variable ó
literal ... FROM
variable (ROUNDED) (ON
SIZE ERROR ) instrucción
2.- SUBTRACT
variable ó literal variable ó
literal ... FROM
variable ó literal GIVING variable (ROUNDED) (ON SIZE
ERROR) instrucción
3.- SUBTRACT CORR
variable FROM variable (ROUNDED) (ON SIZE
ERROR) instrucción
Para ver las explicaciones de cada uno de
los formatos partiremos de la misma WORKING
que hemos utilizado con la instrucción ADD, poniendo a continuación un ejemplo y su explicación.
|
Formato 1: |
|
SUBTRACT UNO
TRES 5 FROM RESULTADO. |
|
Se restarán todas las variables o literales numéricos
(cifras) del valor de la variable que se de a continuación del FROM,
guardandose el resultado también en ésta última.
Por
tanto al realizar ésta operación el valor de la variable RESULTADO, será de: -10 (de la
variable UNO) - 540 (de la variable TRES) - 5 + 10 (de Resultado) = -545.
Como veis se le han restado los valores de UNO, TRES y 5 que suman -555 pero como
RESULTADO valía +10, éste se suma y da un valor de -545.
Este formato lo podemos utilizar para hacer contadores en
retroceso, poniendo:
SUBTRACT 1 FROM RESULTADO.
|
|
Formato 2: |
|
SUBTRACT UNO 5
FROM TRES GIVING RESULTADO. |
|
Aquí lo que conseguiremos será restar el valor de la
variable UNO y 5 del valor de la variable TRES y el resultado guardarlo en la variable
RESULTADO, sin tener en cuenta su valor inicial, es decir, será de: 540 (de la variable
TRES) - 10 (de la variable UNO) - 5 = 525.
|
|
Formato 3: |
|
SUBTRACT CORR
VALORES FROM OTROS. |
|
Al igual que con la instrucción ADD, con éste formato
conseguimos que las variables del campo compuesto VALORES se resten al valor de las
variables con el mismo nombre del campo compuesto OTROS, obteniendo como resultado: 280
(de la variable DOS del campo VALORES) - 110 (de la variable DOS del campo OTROS) = 170.
Si hubiera coincidido alguna variable mas con el mismo nombre en ambos campos también se
hubiese restado.
|
|
Nota: Tened en cuenta que al utilizar restas el signo puede ser negativo y si no
tenemos bien declarada la variable que va a contener el resultado, ésta cojerá su valor
absoluto. |
MULTIPLY
, ésta es la instrucción que utilizaremos para
realizar multiplicaciones y tiene los siguientes formatos:
1.- MULTIPLY
variable ó literal BY variable (
ROUNDED) (ON SIZE
ERROR ) instrucción
2.- MULTIPLY
variable ó literal BY variable ó literal GIVING variable (ROUNDED) (ON SIZE
ERROR ) instrucción
Utilizando la misma WORKING que hemos utilizado con las instrucciones ADD y SUBTRACT, veremos a continuación unos ejemplos y su explicación.
|
Formato 1: |
|
MULTIPLY 5
BY RESULTADO. |
|
Multiplica el número 5 por el valor de la variable
RESULTADO, guardando en ésta misma el resultado de la operación que será: 5 x 10 (de la
variable RESULTADO) = 50.
|
|
Formato 2: |
|
MULTIPLY 5 BY
TRES GIVING RESULTADO. |
|
Aquí multiplicaremos el número 5 por el valor de la
variable TRES guardando el resultado en la variable RESULTADO, sin tener en cuenta su
valor inicial, es decir, será de: 5 x 540 (de la variable TRES) = 2700.
|
DIVIDE
, ésta es la instrucción que utilizaremos para
realizar divisiones y tiene los siguientes formatos:
1.- DIVIDE
variable ó literal INTO variable (ROUNDED) (ON SIZE
ERROR ) instrucción
2.- DIVIDE
variable ó literal (BY ó INTO)
variable ó literal GIVING variable (ROUNDED) (REMAINDER ) variable (ON SIZE ERROR
) instrucción
Utilizando la misma WORKING que hemos utilizado con las instrucciones ADD, SUBTRACT y MULTIPLY, veremos a continuación unos ejemplos y su explicación.
|
Formato 1: |
|
DIVIDE 10 INTO
TRES. |
|
Divide el valor de la variable TRES entre el número 10,
guardando el resultado en la variable TRES: 540 (de la variable TRES) / 10 = 54.
|
|
Formato 2: |
|
DIVIDE 7 INTO
TRES GIVING RESULTADO REMAINDER RESTO. |
|
Aquí dividiremos el valor del la variable TRES entre 7
guardando el resultado en la variable RESULTADO, sin tener en cuenta su valor inicial, y
además el resto de la operación lo guardará en la variable RESTO, quedando así: 540 /
7 = 77, pero como 7 x 77 son 539 el resto es 1 que será el valor de RESTO. Si en vez de utilizar INTO utilizamos BY cambia el
orden de los operandos, es decir en vez de dividir TRES entre 7 dividiríamos 7 entre
TRES.
La opción REMAINDER no es obligatoria, todo dependerá del uso que queramos hacer de la instrucción. La variable que iría a continuación guardará el resto de la división. |
|
COMPUTE
, con ésta orden podemos realizar todos los
cálculos aritméticos posibles en una sola instrucción, utilizando los operadores
+(suma) -(resta) *(multiplicación) /(división) **(potenciación), además de utilizar
paréntesis para especificar mejor la operación a realizar.
1.- COMPUTE
variable (ROUNDED) = expresión aritmética (ON SIZE ERROR) instrucción
Utilizando la misma WORKING que hemos utilizado anteriormente vamos a ver un ejemplo:
|
Formato 1: |
|
COMPUTE
RESULTADO = DOS OF VALORES * 16 / 100. |
|
El valor de la variable RESULTADO será de 44, obtenido
después de multiplicar 280 (de la variable DOS del grupo VALORES) x 16 y lo que de
dividido entre 100. En realidad si hacemos el
cálculo en una calculadora nos daremos cuenta que el resultado exacto es 44,80 pero como
la variable RESULTADO no la hemos definido con decimales éstos son depreciados por el
compilador.
Puesto que la variable DOS pertenece a dos grupos de
variables deberemos especificar a que grupo pertenece (OF VALORES).
Debemos de tener en cuenta que siempre tienen preferencia
los operadores que vayan entre paréntesis, a continuación los de multiplicación y
división (*) y (/) y por último los de suma y resta (+) y (-) y el orden en que va a ir
realizando las operaciones será de izquierda a derecha, por lo tanto:
|
|
COMPUTE
RESULTADO = 2 + 3 * 5. |
|
Esta operación daría como resultado 3*5=15+2=17. |
|
COMPUTE
RESULTADO = (2 + 3) * 5. |
|
En cambio ésta otra daría: 2+3=5*5=25.
Espero que hayais notado la diferencia y la podais aplicar a
vuestros casos en concreto. |
Para todas éstas instrucciones de cálculo que
hemos visto la opcion ROUNDED
significa lo mismo y quiere decir que fuerza al
redondeo del resultado para cada operación y siempre teniendo en cuenta la definición de
la variable que va a guardar ese resultado, por ejemplo si tras una operación resulta
18,76 éste podría quedar como sigue:
- 77 RESULTADO PIC 99V99. (valor = 18,76)
- 77 RESULTADO PIC 99V9. (valor sin redondeo = 18,7 -
valor con redondeo = 18,8)
- 77 RESULTADO PIC 99. (Valor sin redondeo = 18 -
valor con redondeo = 19).
Igual ocurre con la frase ON SIZE ERROR instrucción,
que propiciará que se ejecute la instrucción que pongamos a continuación cuando se
produzca un desbordamiento del campo que va a acoger el resultado, por ejemplo si el
resultado de una operación es 8.976.400 y la variable la hemos definido con PIC 9(6) y hemos especificado dicha opción se
ejecutará la instrucción especificada.
|
|