Lectura 2 - Control Del Flujo de Programas I - Condiciones
Transcript of Lectura 2 - Control Del Flujo de Programas I - Condiciones
-
8/18/2019 Lectura 2 - Control Del Flujo de Programas I - Condiciones
1/6
!"#$%& ($)*+,- .%+%/0#
1%##0#%
5. Contro l de l f lu jo de programas I) : Condic iones
No siempre la solución de un problema está dada por una secuencia sencilla de pasos que no tiene en
cuenta las condiciones de las variables involucradas. La mayoría de las veces debemos ser muy específicos al
verificar condiciones para tomar decisiones adecuadas.
5.1 Def in ic ión de condic iones
Para definir condiciones, lo primero que requerimos es construir una expresión booleana que defina lo que
queremos preguntar en la condición. Posteriormente escribiremos la condición en pseudocódigo1. Veamos un
ejemplo:
Un almacén de útiles escolares ofrece descuentos de acuerdo con el número de libros, lápices y cuadernos
que un cliente compre, de la siguiente manera:
• Si un cliente lleva más de 3 libros o más 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 lápices, recibe el 15% de
descuento.
Se requiere calcular el total a pagar después de los descuentos efectuados (Tenga en cuenta que los dos
descuentos no son acumulables).
Lo primero que debemos hacer es modelar el problema:
Entradas: Número de libros (libros), número de cuadernos (cuadernos), número de lápices (lápices) y total
antes de descuentos (total).
Sal idas: Total a pagar después de descuentos (totalConDescuentos).
Posteriormente establecemos pre y poscondiciones a partir del proceso de especificación:
Precondic iones: todas las cantidades de artículos y el valor a pagar deben ser valores positivos.
Poscondic iones:
el total a pagar debe ser positivo y menor o igual que el total antes de descuentos.
5.2 Representac ión de condic iones en pseudocódigo
Teniendo clara esta información, hablemos de la solución del problema:
Para definir cuál sería el valor total a pagar por la compra de los útiles escolares, debemos tener en cuenta
que s i s e l l e v a n m á s d e t r e s l i b r o s o m á s d e s e i s c u a d e r n o s , e l c l i e n t e r e c i b i r á u n
d e s c u e n t o d e l 2 5 ...
" #$%$ &$ '()*$+(' ,- ./),(.(/)-' -) 0$1$2 ./)'3&*$ -& ,/.34-)*/ 56&-4-)*/' 7/%4$&-' ,-& &-)83$9- 0$1$ :;;
-
8/18/2019 Lectura 2 - Control Del Flujo de Programas I - Condiciones
2/6
!"#$%& ($)*+,- .%+%/0#
1%##0#%
Sin darnos cuenta, hemos solucionado el problema. Hemos definido una decisión que se debe tomar bajo
ciertas condiciones que pueden ocurrir de acuerdo con el valor de las variables implicadas. Ahora solo falta
codificar la solución que se ha identificado para formalizar el algoritmo. Para ello usaremos la siguiente
notación:
Tabla 1. Notación de condiciones en pseudocódigo
s i () e n t o n c e s instrucción 1instrucción 2...instrucción n
f i n _ s i
Condición es una expresión booleana que tiene encuenta las variables que se requieren para tomar ladecisión que nos interesa.
Escribamos el bloque condicional que define la solución al problema en cada caso:
Primera condición
s i (libros > 3 O cuadernos > 6) e n t o n c e s
totalConDescuento ! total * 0.75
f i n _ s i
Segunda condición
s i ((libros = 1 O libros = 2) Y cuadernos = 3 Y lapices >= 4 ) e n t o n c e s
totalConDescuento ! total * 0.85
f i n _ s i
Note que el flujo del algoritmo se altera, ejecutando las líneas en verde, solo si se cumple la condición
definida.
Ahora, el algoritmo completo sería:
Algoritmo Descuentos Entradas
libros, cuadernos, lapices: Enterototal: Real
Pre: {libros>=0 Y cuadernos>=0 Y lapices>=0 Y total>= 0} Inicio
totalConDescuento! total
si(libros>3 O cuadernos>6) entoncestotalConDescuento! total*0.75
fin_si
si((libros=1 O libros=2) Y cuadernos=3 Y lapices>=4) entoncestotalConDescuento! total*0.85
-
8/18/2019 Lectura 2 - Control Del Flujo de Programas I - Condiciones
3/6
!"#$%& ($)*+,- .%+%/0#
1%##0#%
fin_si
FinSalidas
totalConDescuento: Real Pos: {totalConDescuento >= 0 Y totalConDescuento 3 O cuadernos>6) entoncestotalConDescuento! total*0.75
fin_si
si((libros=1 O libros=2) Y cuadernos>3 Y lapices>=4) entonces totalConDescuento! total*0.85fin_si
Fin
¿Este algoritmo funcionaría bien? Aparentemente sí, pero consideremos las siguientes entradas: libros = 2,
cuadernos = 7, lápices = 4.
Con estos valores de entrada, la ejecución de la primera versión del algoritmo no tendría problemas; sin
embargo, ¿Qué pasaría en el segundo caso? Las dos condiciones se cumplirían y se aplicaría el descuento
dos veces:
Primera condición:
libros>3 O cuadernos>6
2 >3 O 7 >6
F O V
V
Segunda condición:
(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
-
8/18/2019 Lectura 2 - Control Del Flujo de Programas I - Condiciones
4/6
!"#$%& ($)*+,- .%+%/0#
1%##0#%
En el primer caso todo funcionaba porque no existían valores para los cuales se cumplieran las dos
condiciones, en cambio, para el segundo caso, ya sabemos que el algoritmo fallaría para ciertos valores de
las variables de entrada. Entonces ¿Cómo lo solucionamos?
La idea es que las condiciones especificadas permitan realizar instrucciones si se cumple lo que dicen, pero
también permitan especificar qué debería suceder si no se cumple. Lo que haremos en casos como estos es
usar una definición más amplia de las condiciones de la siguiente manera:
Algoritmo Descuentos Entradas
libros, cuadernos, lapices: Enterototal: 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.75sino
si((libros=1 O libros=2) Y cuadernos>3 Y lapices>=4) entonces
totalConDescuento! total*0.85fin_si
fin_si
FinSalidas
totalConDescuento: Real Pos: {totalConDescuento >= 0 Y totalConDescuento
-
8/18/2019 Lectura 2 - Control Del Flujo de Programas I - Condiciones
5/6
!"#$%& ($)*+,- .%+%/0#
1%##0#%
5.4 Se lecc ión múl t ip le
Observemos la siguiente situación: Dados los valores de dos variables a y b, se requiere hacer una operación
binaria (+,-.*,/) de acuerdo con un valor de selección (seleccion) que será 1,2,3 o 4. Si la variable de
selección no corresponde a estos valores, el resultado será 0. Es posible hacerlo con condiciones de la
siguiente forma:
si(selección = 1) entoncesresultado! a + b
sinosi(seleccion = 2) entonces
resultado! a - bsino
si(seleccion = 3) entoncesresultado! a * b
sinosi(seleccion = 4) entonces
resultado! a / b
sinoresultado! 0
fin_sifin_si
fin_sifin_si
Sin embargo, para un número mayor de casos, el código se torna difícil de entender. Para casos como estos
se ha definido una estructura que complementa la funcionalidad de los bloques condicionales a través del
uso de la selección múltiple. Para usar esta estructura, debemos tener en cuenta que requerimos de la
definición de una expresión numérica entera que representa el valor que se quiere evaluar, y un conjunto decasos, definidos por constantes numéricas enteras, que representan lo que se debe hacer si se da uno de
dichos casos. Veamos cómo funciona:
s e l e c c i o n a r
()c a s o
instruccionesc a s o
instruccionesc a s o
instrucciones
e n o t r o c a s oinstruccionesf i n _ s e l e c c i o n a r
De acuerdo con esta estructura, el pseudocódigo presentado en el ejemplo puede convertirse en:
-
8/18/2019 Lectura 2 - Control Del Flujo de Programas I - Condiciones
6/6
!"#$%& ($)*+,- .%+%/0#
1%##0#%
seleccionar (seleccion)
caso 1resultado! a + b
caso 2resultado! a – b
caso 3resultado! a * b
caso 4resultado! a / b
en otro casoresultado! a + b
fin_seleccionar
Esta estructura es muy útil, ya que nos permite disminuir el volumen del pseudocódigo de nuestros
algoritmos y entender mejor la lógica de las soluciones propuestas a problemas y ejercicios. Hay que teneren cuenta algunas cosas:
• La expresión que permite hacer la selección, 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 serán ejecutadas, de acuerdo con el nivel de
tabulación.
En resumenEs posible definir condiciones bajo las cuales se ejecuta o no una serie de instrucciones de un algoritmo através de la definición de expresiones booleanas que tienen en cuenta el valor de las variables involucradasen el algoritmo.Las condiciones son la primera estructura de control que nos permite alterar el flujo de los algoritmos quedefinimos. Además, es posible usar la estructura de selección múltiple cuando queramos definir instrucciones quesuceden de acuerdo con el resultado entero de una variable o una expresión.
Para tener en cuenta :
• Es muy importante escribir el código de los algoritmos de forma ordenada, en este caso tabulando las
líneas de pseudocódigo para que sea más fácil identificar qué instrucciones se ejecutarán si se cumple ono se cumple una condición.
• Siempre que se defina el inicio de una estructura usando “inicio_si” o “sino” no debemos olvidar cerrarel bloque usando “fin_si”.