Lectura 2 - Control Del Flujo de Programas I - Condiciones

download Lectura 2 - Control Del Flujo de Programas I - Condiciones

of 6

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”.