Você está na página 1de 6

5.

Control del flujo de programas (I): Condiciones


No siempre la solucin de un problema est dada por una secuencia sencilla de pasos que no tiene en
cuenta las condiciones de las variables involucradas. La mayora de las veces debemos ser muy especficos al
verificar condiciones para tomar decisiones adecuadas.

5.1

Definicin de condiciones

Para definir condiciones, lo primero que requerimos es construir una expresin booleana que defina lo que
queremos preguntar en la condicin. Posteriormente escribiremos la condicin en pseudocdigo1. Veamos un
ejemplo:
Un almacn de tiles escolares ofrece descuentos de acuerdo con el nmero de libros, lpices y cuadernos
que un cliente compre, de la siguiente manera:

Si un cliente lleva ms de 3 libros o ms de 6 cuadernos, recibe un descuento del 25% sobre el total de
la cuenta.
Si un cliente lleva uno o dos libros, tres cuadernos y por lo menos 4 lpices, recibe el 15% de
descuento.

Se requiere calcular el total a pagar despus de los descuentos efectuados (Tenga en cuenta que los dos
descuentos no son acumulables).
Lo primero que debemos hacer es modelar el problema:
Entradas: Nmero de libros (libros), nmero de cuadernos (cuadernos), nmero de lpices (lpices) y total
antes de descuentos (total).
Salidas: Total a pagar despus de descuentos (totalConDescuentos).
Posteriormente establecemos pre y poscondiciones a partir del proceso de especificacin:
Precondiciones: todas las cantidades de artculos y el valor a pagar deben ser valores positivos.
Poscondiciones: el total a pagar debe ser positivo y menor o igual que el total antes de descuentos.

5.2

Representacin de condiciones en pseudocdigo

Teniendo clara esta informacin, hablemos de la solucin del problema:


Para definir cul sera el valor total a pagar por la compra de los tiles escolares, debemos tener en cuenta
que si se llevan ms de tres libros o ms de seis cuadernos, el cliente recibir un
descuento del 25%...

ParalasintaxisdecondicionesenJava,consultaeldocumentoElementosformalesdellenguajeJava(II)
AdrianNicolsMalaver
Barrera

Sin darnos cuenta, hemos solucionado el problema. Hemos definido una decisin que se debe tomar bajo
ciertas condiciones que pueden ocurrir de acuerdo con el valor de las variables implicadas. Ahora solo falta
codificar la solucin que se ha identificado para formalizar el algoritmo. Para ello usaremos la siguiente
notacin:
Tabla 1. Notacin de condiciones en pseudocdigo

si (<Condicin>) entonces
instruccin 1
instruccin 2
.
.
.
instruccin n
fin_si

Condicin es una expresin booleana que tiene en


cuenta las variables que se requieren para tomar la
decisin que nos interesa.

Escribamos el bloque condicional que define la solucin al problema en cada caso:


Primera condicin
si (libros > 3 O cuadernos > 6) entonces
totalConDescuento total * 0.75
fin_si
Segunda condicin
si ((libros = 1 O libros = 2) Y cuadernos = 3 Y lapices >= 4 ) entonces
totalConDescuento total * 0.85
fin_si
Note que el flujo del algoritmo se altera, ejecutando las lneas en verde, solo si se cumple la condicin
definida.
Ahora, el algoritmo completo sera:
Algoritmo Descuentos
Entradas
libros, cuadernos, lapices: Entero
total: Real
Pre: {libros>=0 Y cuadernos>=0 Y lapices>=0 Y total>= 0}

Inicio
totalConDescuento total
si(libros>3 O cuadernos>6) entonces
totalConDescuento total*0.75
fin_si
si((libros=1 O libros=2) Y cuadernos=3 Y lapices>=4) entonces
totalConDescuento total*0.85
AdrianNicolsMalaver
Barrera

fin_si

Fin
Salidas

totalConDescuento: Real

Pos: {totalConDescuento >= 0 Y totalConDescuento <= total}


Inicialmente se define que totalConDescuento ser igual al total del que partimos; esto para definir que si no se
cumple ninguna de las dos condiciones, el total ser el mismo. Posteriormente se definen las condiciones
bajo las cuales el total se modificara.
Hasta aqu todo est bien, pero consideremos una ligera modificacin en la segunda condicin para definir
que para obtener el descuento del 15% un cliente debe llevar uno o dos libros, ms de tres cuadernos y por
lo menos 4 lpices. El algoritmo sera:
Inicio
totalConDescuento total
si(libros>3 O cuadernos>6) entonces
totalConDescuento total*0.75
fin_si
si((libros=1 O libros=2) Y cuadernos>3 Y lapices>=4) entonces
fin_si

totalConDescuento total*0.85

Fin
Este algoritmo funcionara bien? Aparentemente s, pero consideremos las siguientes entradas: libros = 2,
cuadernos = 7, lpices = 4.

Con estos valores de entrada, la ejecucin de la primera versin del algoritmo no tendra problemas; sin
embargo, Qu pasara en el segundo caso? Las dos condiciones se cumpliran y se aplicara el descuento
dos veces:
Primera condicin:
libros>3 O cuadernos>6
2 >3 O 7
>6
F
O V
V

Segunda condicin:
(libros=1 O libros=2) Y cuadernos>3 Y lapices >=4
(2 =1 O 2 =2) Y 7 >3 Y 4 >=4
( F O V )Y
V Y V
V
Y
V
V

AdrianNicolsMalaver
Barrera

En el primer caso todo funcionaba porque no existan valores para los cuales se cumplieran las dos
condiciones, en cambio, para el segundo caso, ya sabemos que el algoritmo fallara para ciertos valores de
las variables de entrada. Entonces Cmo lo solucionamos?
La idea es que las condiciones especificadas permitan realizar instrucciones si se cumple lo que dicen, pero
tambin permitan especificar qu debera suceder si no se cumple. Lo que haremos en casos como estos es
usar una definicin ms amplia de las condiciones de la siguiente manera:
Algoritmo Descuentos
Entradas

libros, cuadernos, lapices: Entero


total: Real
Pre: {libros>=0 Y cuadernos>=0 Y lapices>=0 Y total>= 0}

Inicio

totalConDescuento total
si(libros>3 O cuadernos>6) entonces
totalConDescuento total*0.75
sino

si((libros=1 O libros=2) Y cuadernos>3 Y lapices>=4) entonces

totalConDescuento total*0.85
fin_si

Fin
Salidas

fin_si

totalConDescuento: Real
Pos: {totalConDescuento >= 0 Y totalConDescuento <= total}

De esta forma sabremos que nunca se ejecutarn las dos lneas de las que hablamos antes. En general,
requerimos hacer esto cuando los casos o condiciones que se tienen en cuenta son excluyentes entre s, esto
es, la interseccin de los conjuntos que cumplen cada condicin, es vaca.

5.3 Qu son las condiciones en Java?


Una condicin en un lenguaje de programacin es un recurso que podemos usar para controlar el flujo de un
programa. Hasta ahora este flujo haba sido totalmente lineal; cada instruccin se ejecutaba detrs de otra
sin tener en cuenta nada ms. A partir de la definicin de condiciones es posible realizar la ejecucin de una
serie de instrucciones solo si se cumplen ciertas cosas. Por ejemplo, si se requiere hacer una divisin entre
dos variables enteras a y b, debera hacerse solo si el denominador es distinto de cero, dado que en otro
caso, incurriramos en un error.
Una condicin en el lenguaje de programacin Java se representa como una expresin booleana que
involucra las variables o constantes requeridas para verificar el estado del sistema en un momento
determinado, con el objetivo de tomar una decisin.

AdrianNicolsMalaver
Barrera

5.4

Seleccin mltiple

Observemos la siguiente situacin: Dados los valores de dos variables a y b, se requiere hacer una operacin
binaria (+,-.*,/) de acuerdo con un valor de seleccin (seleccion) que ser 1,2,3 o 4. Si la variable de
seleccin no corresponde a estos valores, el resultado ser 0. Es posible hacerlo con condiciones de la
siguiente forma:
si(seleccin = 1) entonces
resultado a + b
sino
si(seleccion = 2) entonces
resultado a - b
sino
si(seleccion = 3) entonces
resultado a * b
sino
si(seleccion = 4) entonces
resultado a / b
sino
resultado 0
fin_si
fin_si
fin_si
fin_si

Sin embargo, para un nmero mayor de casos, el cdigo se torna difcil de entender. Para casos como estos
se ha definido una estructura que complementa la funcionalidad de los bloques condicionales a travs del
uso de la seleccin mltiple. Para usar esta estructura, debemos tener en cuenta que requerimos de la
definicin de una expresin numrica entera que representa el valor que se quiere evaluar, y un conjunto de
casos, definidos por constantes numricas enteras, que representan lo que se debe hacer si se da uno de
dichos casos. Veamos cmo funciona:

seleccionar (<condicin>)
caso <valor constante 1>
instrucciones
caso <valor constante 1>
instrucciones
caso <valor constante 1>
instrucciones
en otro caso
instrucciones
fin_seleccionar
De acuerdo con esta estructura, el pseudocdigo presentado en el ejemplo puede convertirse en:

AdrianNicolsMalaver
Barrera

seleccionar (seleccion)
caso 1
resultado a + b
caso 2
resultado a b
caso 3
resultado a * b
caso 4
resultado a / b
en otro caso
resultado a + b
fin_seleccionar

Esta estructura es muy til, ya que nos permite disminuir el volumen del pseudocdigo de nuestros
algoritmos y entender mejor la lgica de las soluciones propuestas a problemas y ejercicios. Hay que tener
en cuenta algunas cosas:
La expresin que permite hacer la seleccin, siempre debe ser de tipo entero
Cada caso se representa con valores constantes
Debemos ser muy cuidadosos en la escritura de cada caso, ya que, como no se usan palabras como
inicio y fin, tenemos en cuenta las instrucciones que sern ejecutadas, de acuerdo con el nivel de
tabulacin.

En resumen
Es posible definir condiciones bajo las cuales se ejecuta o no una serie de instrucciones de un algoritmo a
travs de la definicin de expresiones booleanas que tienen en cuenta el valor de las variables involucradas
en el algoritmo.
Las condiciones son la primera estructura de control que nos permite alterar el flujo de los algoritmos que
definimos.
Adems, es posible usar la estructura de seleccin mltiple cuando queramos definir instrucciones que
suceden de acuerdo con el resultado entero de una variable o una expresin.

Para tener en cuenta:

Es muy importante escribir el cdigo de los algoritmos de forma ordenada, en este caso tabulando las
lneas de pseudocdigo para que sea ms fcil identificar qu instrucciones se ejecutarn si se cumple o
no se cumple una condicin.

Siempre que se defina el inicio de una estructura usando inicio_si o sino no debemos olvidar cerrar
el bloque usando fin_si.

AdrianNicolsMalaver
Barrera

Você também pode gostar