Formas Avanzas de la Ejecución Condicional

Objetivos: Profundizar sobre la instrucción if e introducir más ejemplos.

Temas:


Ejercicio 1: desplegar el máximo entre a, b y c, sin usar max.

    print("El máximo es ");
    if (a>b) {
      if (a>c) {
        print(a);
      }
      else {
        print(c);
      }
    }
    else {
      if (b>c) {
        print(b);
      }
      else {
        print(c);
      }
    }
Problema: El programa que entrega el máximo de 4 o 5 números, podría ser demasiado grande.

Ejecución condicional sin else

En ocasiones, no hay nada que poner en la parte else. Entonces se puede suprimir. El problema anterior se puede reescribir como:

    int max= b;
    if (a>max) {
      max= a;
    }
    println(max);
(Si lo que sobra es la parte verdadera, se da vuelta la condición.)

Ejercicio 2: calcular el máximo entre a, b y c.

    int max= a;
    if (b>max) {
      max= b;
    }
    if (c>max) {
      max= c;
    }
    println(max);
Propuesto: el máximo entre a, b, c, d y e.


Condición compuesta

Determinar si una variable es positiva y menor que 10:

    if (a>=0. && a<10.0) {
      println("en el rango [0,10[");
    }
El símbolo && significa ``y-lógico''. Se pueden combinar varias condiciones utilizando operadores lógicos:

Ejemplos de condiciones compuestas que se pueden colocar en un if:

    a==0 || b==0 || c==0
    a!=0 && (b>0 || c==-1)

Diagramas de flujo de programas

El orden en que se ejecutan las instrucciones de un programa se puede graficar mediante diagramas de flujo. La siguiente figura muestra al lado izquierdo cómo se dibujan las instrucciones que se colocan en secuencia. Al lado derecho muestra la ejecución condicional mediante el if.

Por ejemplo, el programa que resuelve la ecuación de segundo grado (de la clase pasada) puede graficarse como:


Ejercicio 3:

Se desea indicar si el valor de una variable entera x es positivo, negativo o cero:

    if (x>0) {
      println("positivo);
    }
    else {
      if (x<0) {
        println("negativo");
      }
      else {
        println("cero");
      }
    }
Este programa tiene por diagrama:

Observe que el siguiente programa no entrega el resultado correcto:

    if (x>0) {
      println("positivo);
    }
    if (x<0) {
      println("negativo");
    }
    else {
      println("cero");
    }
El diagrama de este otro programa es completamente distinto, ya que los dos if están puestos en secuencia:

Siga la ejecución de ambos programas cuando x vale 1 y cuando x vale -2.


Selección múltiple

Aprovechando que los cambios de línea y espacios no alteran el funcionamiento del programa, la versión correcta del ejercicio anterior se puede reescribir como:

    if (x>0) {
      println("positivo);
    }
    else if (x<0) {
      println("negativo");
    }
    else  {
      println("cero");
    }
Este formato se prefiere cuando hay selecciones múltiples. En general se escribe:

    if (``condición 1'') {
      ``instrucciones 1''
    }
    else if (``condición 2'') {
      ``instrucciones 2''
    }
    ...
    else if (``condición n-1'') {
      ``instrucciones n-1''
    }
    else {
      ``instrucciones n''
    }
Lo que se dibuja como:


Ejercicio 4: calificación una nota.

Se desea calificar en palabras una nota, según el siguiente criterio:

El siguiente programa entrega la calificación de una nota n:

    if (6.0<=n && n<=7.0) {
      println("aprobado con distinción máxima");
    }
    if (5.0<=n && n<=5.9) {
      println("aprobado con distinción");
    }
    if (4.0<=n && n<=4.9) {
      println("aprobado");
    }
    if (1.0<=n && n<=3.9) {
      println("reprobado");
    }
Indique qué despliega el siguiente programa cuando n es 5.5:

    if (n >= 6.0) {
      println("__________");
    }
    if (n >= 5.0) {
      println("__________");
    }
    if (n >= 4.0) {
      println("__________");
    }
    if (n >= 1.0) {
      println("__________");
    }
Complete el siguiente programa, de modo que califique correctamente una nota:

    if (n ? ___) {
      println("__________");
    }
    else if (n ? ___) {
      println("__________");
    }
    else if (n ? ___) {
      println("__________");
    }
    else if (n ? ___) {
      println("__________");
    }

Ejercicios propuestos:

  1. Haga un programa que determine si un año es bisiesto: si es divisible por 4, pero no es divisible por 100 o si es divisible por 400:

        Año ? 1998       Año ? 1996
        no               si
    
        Año ? 1900       Año ? 2000
        no               si
    
  2. Suma de fracciones. Para sumar números racionales se usa la siguiente fórmula:

         a   c     ad + bd
         - + -  =  -------
         b   d       bd
    
    Haga un programa que dialogue para obtener a, b, c y d, y luego calcule la suma de las fracciones a/b y c/d. Si la división no se puede realizar porque el denominador es cero, despliega un mensaje que lo señale. Si el resultado es entero, despliega el valor entero. Si el resultado es una fracción, despliega la fracción (sin simplificarla).