Sunteți pe pagina 1din 16

Unidad 2 / Escenario 4

Lectura fundamental

Instrucciones condicionales

Contenido

1 Instrucciones condicionales

2 Árboles de decisión

3 La instrucción if-else

4 Ejemplos

5 Resumen

Palabras clave: algoritmo, programa, Java, árbol de desición, instrucción condicional.


1. Instrucciones condicionales
En los programas trabajados hasta este momento, las instrucciones y el orden en que son ejecutadas
cada vez que se corre el programa son siempre idénticos: no dependen de ninguna manera de la
interacción con el usuario o de otra fuente de información disponible en la máquina. Esto no siempre
es deseable ya que, en ocasiones, el comportamiento del programa deberá variar según su entorno.
Por ejemplo, el sistema operativo no lanza siempre los mismos programas, sino que actúa bajo la
demanda de su usuario.

En esta Lectura fundamental se introducirá un nuevo tipo de instrucción que le permite decidir
qué acciones debe realizar la máquina de acuerdo con la información del entorno del programa,
principalmente tomando en cuenta los datos ingresados por el usuario mediante el teclado. En
la primera parte se hace un breve repaso de los árboles de decisión, estudiados en el módulo de
Pensamiento Algorítmico. La parte dos se presenta la instrucción if-else, la cual le permitirá traducir
árboles de decisión a lenguaje Java. Finalmente, la última parte contiene un amplio conjunto de
ejemplos para su estudio y análisis por parte de los estudiantes.

2. Árboles de decisión
Los árboles de decisión son diagramas que le permiten definir qué acciones debe realizar a partir de
las respuestas de una sucesión de preguntas de tipo binario (su respuesta es verdadero o falso). Como
ejemplo, el siguiente diagrama ayuda a calcular el valor absoluto de un número n.

n<0
verdadero falso

abs -n abs n

Figura 1. Árbol de decisión para calcular el valor absoluto de un número n


Fuente: elaboración propia

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 2
A continuación, se explicará cada uno de los componentes del diagrama:

Corresponde a una pregunta, la cual siempre está encerrada


en un óvalo. Las preguntas siempre deberán representarse
n<0 mediante expresiones lógicas.

Las flechas y sus correspondientes etiquetas indican cuál es la


verdadero falso siguiente acción a realizar (preguntar o reportar solución) de
acuerdo con la respuesta a la pregunta de la que se desprenden.

Los rectángulos son usados para indicar la solución del

abs -n problema que resuelve el árbol. Estos siempre deben ser


puntos terminales del árbol.

Vea otro ejemplo:

Para decidir si un año será bisiesto o no (tendrá 366 días), se sigue la siguiente regla:

“Un año solamente puede ser bisiesto si es múltiplo de 4. De estos, solamente no serán bisiestos los
múltiplos de 100 con excepción de los múltiplos de 400.”

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 3
El siguiente árbol permite decidir si el año n es o no un año bisiesto:

n mod 4 = 0
V F

n mod 100 = 0 b falso


V
F

n mod 400 = 0 b verdadero


V F

b verdadero b falso

Figura 2. Árbol de decisión para decidir si el año n es o no bisiesto


Fuente: elaboración propia

Parta del árbol de decisión anterior para verificar si los años 2003, 2004, 1900 y 2000 son años bisiestos.

Año 2003

n mod 4 = 0
V F

n mod 100 = 0 b falso


V
F

n mod 400 = 0 b verdadero


V F

b verdadero b falso

Figura 3. Evaluación en el árbol de decisión para el valor n = 2003. El recorrido seguido en la evaluación se resalta en color
Fuente: elaboración propia

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 4
Dado que 2003 no es múltiplo de 4, el árbol permite inferir que 2003 no fue un año bisiesto.

Año 2004

n mod 4 = 0
V F

n mod 100 = 0 b falso


V
F

n mod 400 = 0 b verdadero


V F

b verdadero b falso

Figura 4. Evaluación en el árbol de decisión para el valor n = 2004. El recorrido seguido en la evaluación se resalta en color
Fuente: elaboración propia

Dado que 2004 es múltiplo de 4 y no lo es de 100, el árbol permite inferir que 2004 sí fue un año bisiesto.

Año 1900

n mod 4 = 0
V F

n mod 100 = 0 b falso


V
F

n mod 400 = 0 b verdadero


V F

b verdadero b falso

Figura 5. Evaluación en el árbol de decisión para el valor n = 1900. El recorrido seguido en la evaluación se resalta en color
Fuente: elaboración propia

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 5
Dado que 1900 es múltiplo de 4 pero también lo es de 100 y no de 400, el árbol permite inferir que
1900 no fue un año bisiesto.

Año 2000

n mod 4 = 0
V F

n mod 100 = 0 b falso


V
F

n mod 400 = 0 b verdadero


V F

b verdadero b falso

Figura 6. Evaluación en el árbol de decisión para el valor n = 2000. El recorrido seguido en la evaluación se resalta en color
Fuente: elaboración propia

Dado que 2000 es múltiplo de 4 y también de 400, el árbol permite inferir que 2000 sí fue un año bisiesto.

3. La instrucción if-else
La instrucción if-else (Oracle Inc., 2015) permite implementar en lenguaje Java algoritmos
representados como árboles de decisión. Esto es, de acuerdo con una pregunta cuya respuesta es
verdadero o falso, la instrucción puede dirigir el flujo del programa hacia un conjunto de instrucciones
o hacia otro. La sintaxis de la instrucción if-else se presenta a continuación:
...
if (<condición>) {
       <instrucciones A>
}else {
            <instrucciones B>        
}
...

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 6
La interpretación de esta instrucción es la siguiente:

Al ejecutar la instrucción se evalúa la expresión booleana condición. Si el resultado de la evaluación


es verdadero (true), se ejecutará el conjunto de instrucciones A. En caso contrario (false), se
ejecutará el conjunto de instrucciones B. Por último, independientemente de cuál conjunto de
instrucciones fue ejecutado, se continúa el programa desde la instrucción que sucede el cierre de
llaves de else. A continuación se presentan los métodos correspondientes a las implementaciones
de los árboles de decisión expuestos anteriormente:

static int valorAbsoluto(int n) {

       int abs;

       if (n < 0){

             abs = -n;

       }       

       else {

             abs = n;

       }

       return abs;

}      

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 7
static boolean bisiesto(int n) {

       if (n % 4 == 0) {

             if (n % 100 == 0) {

                   if (n % 400 == 0) {

                        return true;

                   } else {

                        return false;

                   }

             } else {

                   return true;

             }

       } else {

             return false;

       }

3.1. Omisión del bloque else

Con alguna frecuencia, desea que los programas realicen un conjunto de acciones solamente si se
cumple una condición particular y que no hagan nada cuando esta no se cumple. En estos casos, el
bloque else de la instrucción condicional permanecerá vacío:

static int valorAbsoluto(int n) {

       if (n < 0){

             n = -n;

       }       

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 8
       else {

       }

       return n;

}      

En estas situaciones es posible omitir el bloque else de la instrucción, por lo que el método podría
reescribirse como:

static int valorAbsoluto(int n) {

       if (n < 0){

             n = -n;

       }       

       return n;

}      

La omisión del bloque else hace más corto y simple el código y, por tanto, facilita su comprensión y
lo hace menos propenso a errores.

3.2. Omisión de llaves

Cuando el contenido del bloque if o del bloque else contiene una única instrucción es posible omitir
las llaves que encierran dicho bloque. El código para decidir si un año es bisiesto podría escribirse
entonces como:

static boolean bisiesto(int n) {

       if (n % 4 == 0)

             if (n % 100 == 0)

                   if (n % 400 == 0)

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 9
                        return true;
                   else
                        return false;
             else
                   return true;
       else
             return false;

No obstante, se recomienda que mientras se está aprendiendo siempre sean incluidas las llaves en cada uno
de los bloques de código. Esto reduce el número de errores que se cometen al escribir los programas.

4. Ejemplos
A continuación se presenta un conjunto de problemas y sus correspondientes soluciones en lenguaje Java
usando la instrucción if-else. Léalos detenidamente hasta tener una comprensión total de ellos.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 10
Problema:

Se desea determinar si un triángulo, dadas las longitudes de sus lados, es equilátero, isósceles o escaleno.

Solución:
static void tipo_de_triangulo(double a, double b, double c) {
  if (a==b && a==c)
        System.out.println(“Equilátero”);
  else
        if (a==b || a==c || b==c)
              System.out.println(“Isósceles”);
        else
              System.out.println(“Escaleno”);
}

Problema:

Juan y David empezaron a correr una maratón al mediodía. Juan terminó a las h1 horas, m1 minutos y s1 segundos,
mientras que David lo hizo a las h2 horas, m2 minutos y s2 segundos. ¿Quién fue el ganador de la carrera?

Solución:

static void ganador(int h1, int m1, int s1, int h2, int m2, int s2) {

  int tiempoJuan = h1 * 3600 + m1 * 60 + s1;

  int tiempoDavid = h1 * 3600 + m1 * 60 + s1;

  if (tiempoJuan < tiempoDavid)

    System.out.println(“Juan es el ganador.”);

  else

    if (tiempoJuan > tiempoDavid)

          System.out.println(“David es el ganador.”);

    else

          System.out.println(“Empate.”);

}     

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 11
Problema:

Juan y David empezaron a correr una maratón al mediodía. Juan terminó a las h1 horas, m1 minutos y s1 segundos,
mientras que David lo hizo a las h2 horas, m2 minutos y s2 segundos. ¿Quién fue el ganador de la carrera?

Solución:

static void ganador(int h1, int m1, int s1, int h2, int m2, int s2) {

  int tiempoJuan = h1 * 3600 + m1 * 60 + s1;

  int tiempoDavid = h1 * 3600 + m1 * 60 + s1;

  if (tiempoJuan < tiempoDavid)

    System.out.println(“Juan es el ganador.”);

  else

    if (tiempoJuan > tiempoDavid)

          System.out.println(“David es el ganador.”);

    else

          System.out.println(“Empate.”);

}     

Problema:

Juan está aprendiendo a jugar ajedrez. El día de hoy está estudiando el alfil, para lo cual ha creado el
siguiente ejercicio:

1. Ubica un alfil en la posición (f1, c1)

2. Selecciona una segunda posición (f2, c2)

3. Mueve el alfil a la posición (f2, c2), buscando usar la menor cantidad posible de movimientos

Juan practica muchas veces, pero en algunas ocasiones no está seguro de estar usando la menor
cantidad de movimientos posible.

Escriba un método que reciba los valores f1, c1, f2 y c2, y calcule la menor cantidad de movimientos que necesita
un alfil para moverse de una posición a la otra. En caso de no ser posible, el método debe retornar -1.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 12
Solución:
static int mov_alfil(int f1, int c1, int f2, int c2) {

  // Es la misma posición

  if (f1 == f2 && c1 == c2) {

        return 0;

  } else {

        // Están en la misma diagonal

        if (f1 + c1 == f2 + c2 || f1 - c1 == f2 - c2) {

              return 1;

        } else {

// Si es imposible

              if ((f1 + c1 + f2 + c2) % 2 == 1) {

                    return -1;

              } else {

                    // En otro caso, siempre se necesitan dos pasos

                    return 2;

              }

        }

  }

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 13
5. Resumen
Con frecuencia, requerirá que el conjunto de instrucciones que ejecute un programa dependa de
su entorno, i.e., de la interacción con el usuario o de la información disponible en la máquina. La
instrucción if-else le permite indicar el conjunto de instrucciones a ejecutar en una situación dada
representada por una sucesión de expresiones booleanas.

Los árboles de decisión son diagramas que sirven para trazar de manera simple algoritmos que, en
lenguaje Java, se implementan con instrucciones if-else. Dada la naturaleza gráfica de estos
árboles, es más fácil diseñar el algoritmo sobre ellos y posteriormente sí hacer la traducción al lenguaje
de programación.

En ocasiones se requerirá que un conjunto de instrucciones sea ejecutado al cumplirse una condición
y que ninguna acción sea realizada al no cumplirse. En este caso, es posible omitir el bloque else
de la instrucción, que de lo contrario quedaría vacío. En el mismo espíritu de reducir el número de
líneas de código y lograr programas más simples, el lenguaje también permite omitir las llaves de las
instrucciones if o else cuando el bloque de código correspondiente consista de una única línea. No
obstante, se recomienda incluir todas las llaves durante el proceso de aprendizaje, ya que su omisión
es una fuente regular de errores en el código.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 14
Referencias
Oracle Inc. (2015). Language Basics. The Java ™ Tutorials. Oracle Inc. Recuperado de https://docs.
oracle.com/Javase/tutorial/Java/nutsandbolts/if.html

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 15
INFORMACIÓN TÉCNICA

Módulo: Programación de Computadores


Unidad 2: Herramientas de desarrollo, modelado y
especificación de problemas
Escenario 4: Instrucciones condicionales

Autor: Edwin Andrés Niño Velásquez

Asesor Pedagógico: Jeiner Velandia


Diseñador Gráfico: Kelly Yohana Valencia Forero
Asistente: Ginna Quiroga

Este material pertenece al Politécnico Grancolombiano.


Prohibida su reproducción total o parcial.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 16

S-ar putea să vă placă și