Вы находитесь на странице: 1из 15

Curso:

Introduccin a la
programacin en
RPG
Febrero 2015

Curso: Introduccin a la programacin en RPG

5. Funciones y operaciones aritmticas

5.1 Asignacin de valor numrico (Eval simple)

5.2 Uso de Eval en operaciones aritmticas

5.3 Overflow, Truncamiento y Redondeo

5.4 Uso de funciones incorporadas

10

Curso: Introduccin a la programacin en RPG

5.1 Asignacin de valor numrico (Eval simple)


La instruccin EVAL se describe como una expresin de
asignacin y consiste de 3 partes: la variable de resultado, el
operador de asignacin ( = ) y una expresin
Algunos ejemplos de Eval simples:
/Free
Contador = 0; // Inicializa un contador
TasaIVA = .16; // Asigna un valor positivo
CeroAbsoluto = -273.16; // Asigna un valor negativo
Importe = Saldo; // Asigna el valor de otro campo
VentasTotales = *Zeros;
Contador2 = *Loval;
/End-Free

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.2 Uso de Eval en operaciones aritmticas


En la expresin de un Eval puede incluir operadores
aritmticos: + (suma), - (resta), * (multiplicacin), /
(divisin), ** (elevar a una potencia). Tambin puede incluir
parntesis, smbolos relacionales (por ejemplo <, >),
operadores lgicos (por ejemplo *AND, *OR); as como
funciones nativas de RPG.
Algunos ejemplos:
/Free
Withhold = Fica + Statetax + Fedtax;
Netpay = Grosspay - Withhold;
Grossprofit = Cost * .6 * Qtysold;
Avgamount = Totamount / Counter;
Numsquared = Number ** 2;
/End-Free

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.2 Uso de Eval en operaciones aritmticas

Todos los valores usados en la expresin (derecha del


igual) deben ser variables literales o constantes numricas.
En caso de que se intente dividir entre cero, ocurrir un
error al momento de ejecucin.
Cuando una expresin contiene ms de un operador, la
computadora utiliza la regla de precedencia
para
determinar el orden en que realizar las operaciones. La
exponenciacin tiene la mayor precedencia, seguido de la
multiplicacin y divisin, y finalmente la suma y la resta.
Se pueden usar parntesis para cambiar el orden de
ejecucin de las operaciones.

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.2 Uso de Eval en operaciones aritmticas


En una expresin se pueden incluir los espacios en blanco que
uno quiera, y se puede continuar una o ms lneas, para
hacerlas ms entendibles, por ejemplo:
/Free
TotalImpuestos = (CuotaIMSS + CuotaISR + CuotaISN) *
Importe;
/End-Free

Ms ejemplos:
/Free
Contador = Contador + 1; // Incrementa un contador
Grantotal = Grantotal + Salario; // Acumula un total
CuentaRegresiva = CuentaRegresiva - 1;
Inventario = Inventario - CantidadOrdenada;
/End-Free

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.3 Overflow, Truncamiento y Redondeo


Al utilizar operaciones aritmticas, es responsabilidad del
programador el determinar la longitud y nmero de decimales
apropiada para las variables de resultado.
Si el valor a almacenar es demasiado grande en la parte
entera, se producir un error durante la ejecicin
Numeric overflowSi el valor a almacenar es demasiado grande en la parte de
los decimales, RPG truncar los dgitos.
Para redondear en la parte decimal, se usa Eval(H)
/Free
Eval(H) Interest = Rate * Loanamt;
Eval(H) Avgamount = Totamount / Counter;
/End-Free

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.3 Overflow, Truncamiento y Redondeo


Precisin de la instruccin EVAL
La operacin EVAL resuelve las expresiones de izquierda a
derecha y separa memoria de forma automtica para los
valores intermedios que requiere.
Estos valores intermedios estn limitados a 63 dgitos en
total, incluyendo dgitos a la derecha del punto decimal.
Por default, EVAL usa la regla de mximos dgitos para
determinar el nmero de enteros y decimales.
En operaciones complejas u operandos muy grandes, la
instruccin EVAL puede verse obligada a truncar decimales
para ajustar el campo a estos 63 dgitos. En estos casos se
le
puede indicar a RPG usar otra regla (la regla de
posiciones decimales en el resultado - result decimal
positions rule-), de modo que ningn valor intermedio
pueda tener menos decimales que el resultado final.
5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.3 Overflow, Truncamiento y Redondeo


Precisin de la instruccin EVAL
Hay 2 maneras de invocar la regla de posiciones decimales:
Usar el keyword Expropts (*Resdecpos) en la hoja H
Usar la extensin de operacin en EVAL (R)
Ejemplo:
Eval(HR) Pay = rate * 40 + 1.5 * rate * (Hoursworked - 40);

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.4 Funciones incorporadas (Built In Functions)


RPG IV soporta funciones (Built in Functions o BIFs) que se
pueden usar en instrucciones tipo free. Estas funciones
inician con el signo de porcentaje ( % ).
Enseguida veremos algunas funciones que se pueden usar en
clculos aritmticos:
%Abs (Valor absoluto)
Regresa el valor absoluto en una expresin numrica
(bsicamente, quita el signo a la variable en caso de tenerlo)
%Div (Dividir)
Realiza divisin entre dos nmeros, los cuales deben ser
enteros. El resultado de esta divisin siempre ser un nmero
sin decimales
5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.4 Funciones incorporadas (Built In Functions)


%Rem (Remanente)
Regresa el remanente de la divisin entre 2 nmeros.
%Sqrt (Square Root raz cuadrada)
Obtiene la raz cuadrada de una expresin numrica.
Ejemplos:
// In this example, Transtotal will be positive regardless of whether
// the expression results in a positive or a negative number.
Transtotal = %Abs(Debits - Credits);
// Convert total minutes to hours and minutes by dividing total minutes
// by 60 to get hours and then returning the remainder as Minutes.
Hours = %Div(Minutes:60);
Minutes = %Rem(Minutes:60);
Hypotenuse = %Sqrt(Length**2 + Width**2);

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.4 Funciones incorporadas (Built In Functions)


En RPG todos los operandos de una expresin deben ser de
tipos de datos compatibles; esto es, no se pueden mezclar
variables numricas y alfanumricas en la misma expresin.
Veremos algunas funciones de conversin de datos:
%Dec Convierte el resultado de una expresin de tipo
nmero, carcter o fecha a una de tipo decimal empacado
%Dech Similar a %Dec, pero aplica redondeo al final.
%Int Convierte a variable tipo entero con signo
%Inth Similar a %Int, pero redondea al final
%Uns Convierte a variable tipo entero sin signo
%Unsh Similar a %Uns, pero redondea al final
5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

5.4 Funciones incorporadas (Built In Functions)


Ejemplos de funciones de conversin de datos:
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+...
8
DName+++++++++++ETDsFrom+++To/Len+IDc.Keywords++++++++++++++++++++++++++++
+
D Char1 S 11 Inz(123.456789-)
D Char2 S 11 Inz( + 9 . 876 )
D Char3 S 11 Inz( - 3.14 e-1)
D Result S 9 5
/Free
Result = %Dec(Char1:5:2); // Result = -123.45000
Result = %Dech(Char2:5:2); // Result = 9.88000
Result = %Dech(Char2:5:2) / 3; // Result = 3.29333
Result = %Int(Char2:5:2); // Result = 9.00000
Result = %Inth(Char2:5:2); // Result = 10.00000
Result = %Uns(Char1:5:2); // Result = 123.00000
Result = %Float(Char3); // Result = 0.31400
/End-Free

5. Funciones y operaciones aritmticas

Curso: Introduccin a la programacin en RPG

EJERCICIO
Modificar el programa CUR009 (reporte de ventas),
agregando lo siguiente:
1. Una seccin de totales, la cual tendr el total de ventas y
el nmero de registros mostrados en el reporte
2. Incluir dos parmetros de entrada para indicar al reporte
que solo muestre un rango de account ID (ID inicial y ID
final)
3. Relacionado al punto anterior, incluir en el encabezado el
rango de ID de cuenta recibidos como parmetro.
4. Agregar una columna de impuesto sobre venta, que ser
el 10% de la venta YTD, redondeando a 2 decimales

5. Funciones y operaciones aritmticas

SQL Embebido en RPG ILE

9. Contacto
BSDEnterprise
Oficina Quertaro, Qro.
Prol. Tecnolgico #1007
Col. Balcn Campestre
Quertaro, Quertaro. CP 76159
Telfono: (442) 242 72 70

BSDEnterprise
Oficina Monterrey, N.L.

Av. Lzaro Crdenas 2400


Col. Residencial San Agustn
Edificio Losoles Oficina C-12, D-13, D-17
San Pedro Garza Garca, N.L. CP 66269
Telfono: (81) 83 63 89 39

www.bsdenterprise.com

Вам также может понравиться