Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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
Inicio
totalConDescuento total
si(libros>3 O cuadernos>6) entonces
totalConDescuento total*0.75
sino
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.
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.
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