Sei sulla pagina 1di 8
POWER BUILDER – SESION III Estructuras de Control en Power Builder Los flujos de control

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 expresión 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 ejecución del código entre 2 caminos posibles dependiendo de la veracidad o no de una expresión condicional. El tamaño, en líneas de código, de los segmentos, 'verdadero' o 'falso' no tienen un limite.

Ejemplo:

If monto_cuota=13 Then nombre= 'Ramiro'

nombre= 'Francisco'

Else

End If También 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 ejecución del código entre múltiples caminos posibles; dependiendo de la veracidad o no de una

expresión condicional, principalmente una variable. El tamaño, en líneas de código, de los segmentos 1 tienen un limite. Ejemplo:

Choose case monto_cuota Case Is< 13: nombre='Ramiro' Case 16 To 48: nombre= 'Roberto' Else nombre= 'Francisco' End Cose

no

'n'

Cada Case puede tener los siguientes valores:

1

 Un valor POWER BUILDER – SESION III  Una lista de valores separados por

Un valor

POWER BUILDER SESION III

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

Una cláusula TO, desde hasta. (ej. 1 TO 30)

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

Cualquier combinación de lo anterior, implícitamente indica un OR. (ej.1, 3, 5, 7, 9, 27 TO 33, IS >42)

ITERATIVO Se refiere a la repetición 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 número definido anterior al comienzo de la ejecución de estas sentencias. El tamaño, en líneas de código, 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 iteración, 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 ejecución 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 iteración.

DO

UNTIL

| WHILE |LOOP

La sentencia „Do‟ es utilizada para repetir una(s) sentencia(s) un número no muy definido de veces. El número de veces es casi siempre definido por la comparación de una variable o expresión condicional. Dentro de esta sentencia existen variantes, cuya única diferencia es el momento cuando se evalúa la expresión que condiciona la ejecución del bloque.

2

POWER BUILDER – SESION III Ejemplo: integer A = 1, B = 1 //Emite un

POWER BUILDER SESION III

POWER BUILDER – SESION III Ejemplo: integer A = 1, B = 1 //Emite un pito

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

Observación

En ambos tipos de iteraciones se puede terminar la ejecución 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

3

POWER BUILDER – SESION III En ambos tipos de iteraciones se puede continuar la ejecución

POWER BUILDER SESION III

En ambos tipos de iteraciones se puede continuar la ejecución del bloque, desde el principio y no ejecutando las demás instrucciones del bloque.

Instrucciones para el control de los ciclos repetitivos EXIT Permite abandonar la ejecución de un bucle (For y Do Loop) ejecutando la siguiente instrucción después del bucle,

es decir que el control pasa a la sentencia que va a continuación 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 C++ A++

EXIT

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 continuación 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 sólo 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 función 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 función, 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 función regresa un valor, la sentencia

RETURN debe incluir el valor.

4

HALT POWER BUILDER – SESION III La sentencia HALT termina definitivamente la ejecución de una

HALT

POWER BUILDER SESION III

La sentencia HALT termina definitivamente la ejecución de una aplicación.

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))

APLICACIÓN COMPRAS:

En la siguiente aplicación 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 público sugerido (Precio de compra + Utilidad), Descuento (Precio de compra x Porcentaje de descuento / 100) y Precio con descuento (Precio público sugerido Descuento).

con descuento (Precio público sugerido – Descuento). Se han utilizado los siguientes controles: GroupBox,

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 Diseñar la siguiente ventana: (W_COMPRAS)

El Script es el siguiente:

AP_APLICACION2 OPEN: open(w_compras)

5

W_COMPRAS OPEN: sle_nombre.setfocus() PB_CALCULAR CLICKED: //Definición de variables POWER BUILDER – SESION III

W_COMPRAS OPEN: sle_nombre.setfocus()

PB_CALCULAR CLICKED:

//Definición de variables

POWER BUILDER SESION III

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 público 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 = ""

6

em_igv.text = "" em_precom.text = "" em_utilidad.text = "" em_ppsugerido.text = ""

em_igv.text = ""

em_precom.text = ""

em_utilidad.text = ""

em_ppsugerido.text = ""

em_descuento.text = ""

em_pdescuento.text = ""

sle_nombre.setfocus()

PB_SALIR CLICKED:

POWER BUILDER SESION III

integer n

n=messagebox("Confirme : ","Está seguro de salir",question!,yesno!)

if n=1 then halt

PROBLEMAS PROPUESTOS

Desarrollar una aplicación para cada uno de los casos presentados a continuación:

1. Suponga que un individuo desea invertir su capital en un banco y desea saber cuánto dinero ganará

después de un mes, si el banco paga a razón de 2% mensual.

2. Un vendedor recibe un sueldo base más un 10% extra por comisión de sus ventas, el vendedor desea

saber cuánto 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 cuánto

deberá pagar finalmente por su compra.

4. Un alumno desea saber cuál será su calificación final en la materia de Algoritmos. Dicha calificación se

compone de los siguientes porcentajes:

55% del promedio de sus tres calificaciones parciales.

30% de la calificación del examen final.

15% de la calificación de un trabajo final.

5. Calcular el precio de un boleto de viaje, tomando en cuenta el número de kilómetros que se van a

recorrer, sabiendo que el precio es de S/.10.00 por Km.

6. En un hospital existen 3 áreas: Urgencias, Pediatría y Traumatología. El presupuesto anual del hospital

se reparte de la siguiente manera:

3 áreas: Urgencias, Pediatría y Traumatología. El presupuesto anual del hospital se reparte de la siguiente

7

POWER BUILDER – SESION III Obtener la cantidad de dinero que recibirá cada área para

POWER BUILDER SESION III

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

8