Está en la página 1de 8

POWER BUILDER SESION III

Estructuras de Control en Power Builder


Los flujos de control permiten que las acciones a ser realizadas puedan ser bifurcadas a otra dependiendo de
alguna expresin condicional. Existen 2 tipos de flujos de control

CONDICIONAL
Se refiere a que el flujo de control es bifurcado desde una sentencia, o conjunto de estas, a otra, o conjunto de
estas. Existen 2 clases de Flujos de control condicionales

IF..THEN..ELSE
La sentencia 'IF' permite bifurcar la ejecucin del cdigo entre 2 caminos posibles dependiendo de la veracidad o
no de una expresin condicional. El tamao, en lneas de cdigo, de los segmentos, 'verdadero' o 'falso' no tienen
un limite.

Ejemplo:
If monto_cuota=13 Then nombre= 'Ramiro'
Else

nombre= 'Francisco'

End If
Tambin es posible anidar varios 'If..Then..Else' consecutivamente.

Ejemplo:
If monto_cuota=13 Then
nombre= 'Ramiro'
ElseIf monto_cuota=15 Then
nombre= 'Roberto'
Else
nombre= 'Francisco'
End If

CHOOSE
Permite bifurcar la ejecucin del cdigo entre mltiples caminos posibles; dependiendo de la veracidad o no de una
expresin condicional, principalmente una variable. El tamao, en lneas de cdigo, de los segmentos 1..'n' no
tienen un limite.
Ejemplo:
Choose case monto_cuota
Case Is< 13: nombre='Ramiro'
Case 16 To 48: nombre= 'Roberto'
Else
nombre= 'Francisco'
End Cose

Cada Case puede tener los siguientes valores:

POWER BUILDER SESION III

Un valor

Una lista de valores separados por coma. (ej. 2, 4, 6, 8)

Una clusula TO, desde hasta. (ej. 1 TO 30)

Una clusula IS seguida por un operador relacional y un valor a comparar. (ej. IS>5)

Cualquier combinacin de lo anterior, implcitamente indica un OR. (ej.1, 3, 5, 7, 9, 27 TO 33, IS >42)

ITERATIVO
Se refiere a la repeticin de una(s) sentencia(s) que son definidas dentro de un bloque clarificado por una
sentencia iterativa. Existen 2 clases de Flujos de control Iterativos.

FOR..NEXT..STEP
La sentencia for permite repetir una(s) sentencia(s) un nmero definido anterior al comienzo de la ejecucin de
estas sentencias.
El tamao, en lneas de cdigo, del segmento 1, no tienen un limite.
Ejemplo:
for i= 1 to 23
j= i + ( j * 1.2 )
next
La variable i se denomina "contador", el valor final de iteraciones no debe ser superior al rango definido para el
tipo de dato del contador. Si el valor de i es superior al valor final de iteracin, las sentencias no se ejecutan.
Ejemplo:
For n = 5 to 25 step 5
a = a+10
Next

En este ejemplo la sentencia se ejecutara cuando n>=5 y n<=25, y el valor inicial de n (5) se incrementa en 5 por
cada ejecucin de las sentencias del bloque dentro de la sentencia for. El valor de Step puede ser negativo, en
cuyo caso el valor inicial de la variable contador deber ser inferior al valor final de la iteracin.
DO..UNTIL | WHILE |LOOP
La sentencia Do es utilizada para repetir una(s) sentencia(s) un nmero no muy definido de veces. El nmero de
veces es casi siempre definido por la comparacin de una variable o expresin condicional. Dentro de esta
sentencia existen variantes, cuya nica diferencia es el momento cuando se evala la expresin que condiciona la
ejecucin del bloque.

POWER BUILDER SESION III

Ejemplo:
integer A = 1, B = 1 //Emite un pito por los parlantes hasta que la variable
DO UNTIL A > 15 // A sea mayor que 15.
Beep(A)
A = (A + 1) * B
LOOP

integer A = 1, B = 1 //Emite un pito por los parlantes mientras la variable


DO WHILE A <= 15 // A sea menor o igual a 15.
Beep(A)
A = (A + 1) * B
LOOP

Observacin
En ambos tipos de iteraciones se puede terminar la ejecucin del bloque utilizando la sentencia Exit.

Ejemplo:
integer A=1, B=1
DO WHILE A < 100
A = A+1
B = B+1
IF B > 3 THEN CONTINUE
MessageBox("Hola", "B es = " + String(B) )
LOOP

Ejemplo:
FOR contador = 1 to 10
IF vector1[Contador] = 0 THEN EXIT
NEXT

POWER BUILDER SESION III


En ambos tipos de iteraciones se puede continuar la ejecucin del bloque, desde el principio y no ejecutando las
dems instrucciones del bloque.

Instrucciones para el control de los ciclos repetitivos


EXIT
Permite abandonar la ejecucin de un bucle (For y Do Loop) ejecutando la siguiente instruccin despus del bucle,
es decir que el control pasa a la sentencia que va a continuacin del Loop. Una sentencia Exit se puede utilizar en
cualquier lugar de un bloque de sentencias
Ejemplo:
Integer A = 1, C = 0
Do While A < 20
If C > 15 Then EXIT
C++
A++
Loop
A=0
// La sentencia Exit pasa el control aqu
La sentencia Loop se ejecuta mientras el valor de A sea menor que 20. la sentencia IF del bloque de sentencias
ejecuta una sentencia EXIT cuando el calor de C se hace mayor que 15. Esto provoca que finalice la sentencia
LOOP y se pase el control a la sentencia que va a continuacin de ella.

CONTINUE
Cuando aparece una sentencia CONTINUE en una Do While Loop; el control pasa al Do While; las sentencias
existentes entre CONTINUE y Loop no se ejecutan. En una estructura Do While Loop anidada, una sentencia
CONTINUE slo afecta a la estructura Do While Loop en la que se encuentra.
En resumen esta sentencia permite volver a ejecutar el bucle sin necesidad que se ejecuten todas las instrucciones
que contiene.
La funcin MessageBox solo se muestra 2 veces
Int A = 1, B = 1
Do While A < 11
A++
B++
If B > 3 Then Continue
MessageBox(Valores, A = + String(A) + B= + String(B))
Loop

RETURN
La sentencia RETURN termina el script o funcin, devolviendo el control a quien lo llame. Si es un script de evento,
RETURN generalmente devuelve el control a Power Builder. Si el script o funcin regresa un valor, la sentencia
RETURN debe incluir el valor.

POWER BUILDER SESION III


HALT
La sentencia HALT termina definitivamente la ejecucin de una aplicacin.
Sintaxis : HALT
GOTO
Cambia el control de una sentencia a otra donde se especifica una etiqueta.
Int A = 1
Do While A < 11
A++
If A =6 Then GOTO Mensaje
MessageBox(Valores, A = + String(A))
Loop
Mensaje:
MessageBox(Salida, A = + String(A))

APLICACIN COMPRAS:
En la siguiente aplicacin se ingresa el
nombre de un producto, su valor de
compra, el porcentaje de utilidad y el
porcentaje de descuento.
Se debe calcular y mostrar los
siguientes resultados: IGV (19% del
valor de la compra), Precio de compra
(Valor de la compra + IGV), Utilidad
(Precio de compra x Porcentaje de
utilidad / 100), Precio pblico sugerido
(Precio de compra + Utilidad),
Descuento (Precio de compra x
Porcentaje de descuento / 100) y
Precio con descuento (Precio pblico
sugerido Descuento).
Se han utilizado los siguientes controles: GroupBox, StaticText, SingleLineEdit, EditMask.
Crear una carpeta: Aplicacion2, luego crear el WorkSpace: WS_APLICACION2 y Target (Application):
AP_APLICACION2 Disear la siguiente ventana: (W_COMPRAS)
El Script es el siguiente:
AP_APLICACION2 OPEN: open(w_compras)

POWER BUILDER SESION III


W_COMPRAS OPEN: sle_nombre.setfocus()
PB_CALCULAR CLICKED:
//Definicin de variables
Decimal vcompra, utiporc, descporc, igv, pcompra, utisoles
Decimal ppsugerido, descsoles, pcdescuento
vcompra = dec(em_valcom.text) //Valor de la compra
utiporc = dec(em_poruti.text) //Porcentaje de utilidad
descporc = dec(em_pordes.text) //Porcentaje de descuento

/* Obtener los resultados que se necesitan mostrar*/


igv = vcompra* 19/100 //Calculo del IGV
pcompra = vcompra + igv //Precio de compra
utisoles = pcompra * utiporc/100 //Utilidad en soles
ppsugerido = pcompra + utisoles //Precio pblico sugerido
descsoles = ppsugerido * descporc/100 //Descuento en soles
pcdescuento = ppsugerido - descsoles //Precio con descuento

//Mostrar los resultados


em_igv.text = string(igv,"###,##0.00")
em_precom.text = string(pcompra,"###,##0.00")
em_utilidad.text = string(utisoles,"###,##0.00")
em_ppsugerido.text = string(ppsugerido,"###,##0.00")
em_descuento.text = string(descsoles,"###,##0.00")
em_pdescuento.text = string(pcdescuento,"###,##0.00")
PB_NUEVO CLICKED:
sle_nombre.text = ""
em_valcom.text = ""
em_poruti.text = ""
em_pordes.text = ""

POWER BUILDER SESION III


em_igv.text = ""
em_precom.text = ""
em_utilidad.text = ""
em_ppsugerido.text = ""
em_descuento.text = ""
em_pdescuento.text = ""
sle_nombre.setfocus()
PB_SALIR CLICKED:
integer n
n=messagebox("Confirme : ","Est seguro de salir",question!,yesno!)
if n=1 then halt

PROBLEMAS PROPUESTOS
Desarrollar una aplicacin para cada uno de los casos presentados a continuacin:
1. Suponga que un individuo desea invertir su capital en un banco y desea saber cunto dinero ganar
despus de un mes, si el banco paga a razn de 2% mensual.
2. Un vendedor recibe un sueldo base ms un 10% extra por comisin de sus ventas, el vendedor desea
saber cunto dinero obtendr por concepto de comisiones por las tres ventas que realiza en el mes y el
total que recibir en el mes tomando en cuenta su sueldo base y comisiones.
3. Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente desea saber cunto
deber pagar finalmente por su compra.
4. Un alumno desea saber cul ser su calificacin final en la materia de Algoritmos. Dicha calificacin se
compone de los siguientes porcentajes:
55% del promedio de sus tres calificaciones parciales.
30% de la calificacin del examen final.
15% de la calificacin de un trabajo final.
5. Calcular el precio de un boleto de viaje, tomando en cuenta el nmero de kilmetros que se van a
recorrer, sabiendo que el precio es de S/.10.00 por Km.
6. En un hospital existen 3 reas: Urgencias, Pediatra y Traumatologa. El presupuesto anual del hospital
se reparte de la siguiente manera:

POWER BUILDER SESION III


Obtener la cantidad de dinero que recibir cada rea para cualquier monto presupuestal.

También podría gustarte