Ejercicio 5. Límites

Escribe un programa que pida el limite inferior y superior de un intervalo.  Si el límite inferior es mayor que el superior lo tiene que volver a pedir.  A continuación se van introduciendo números hasta que introduzcamos el 0. 
Cuando termine el programa dará las siguientes informaciones:

  • La suma de los números que están dentro del intervalo (intervalo abierto).
  • Cuantos números están fuera del intervalo.
  • Informa si hemos introducido algún número igual a los límites del intervalo.

En este ejercicio vemos que se solicita una mayor cantidad de información con la que debemos trabajar, debemos hacer una lectura detallada para ir separando todo lo que nos piden y analizar y comprender cada una de las partes, ya que en este proceso se nos va una parte importante para poder afrontar su desarrollo en JAVA (o en cualquier otro lenguaje de programación).

Petición de límites

En primer lugar, el usuario debe introducir por teclado los límites en los que debemos trabajar, en esta ocasión nos solicitan que si al introducirlos, el límite inferior es mayor que el superior, automáticamente el programa vuelva a solicitarlos hasta que nos de un valor correcto.

Al ser un número indeterminado de veces las que se repetirá el ciclo descartamos el bucle for, y nos centraremos en trabajar con un while o un do-while. Como la petición debe realizarse al menos una vez, me he decantado por este último.

do {
Introduce límite inferior
Introduce límite superior
if (limite inferior > limite superior) {
Error, el límite inferior debe ser menor que el superior.
}
} while (limite inferior > limite superior);

Como vemos, para avisar del error al introducir los límites y que el usuario no se extrañe antes de que vuelvan a solicitarle los límites, incluimos un if que sólo se ejecutará en caso de que se vaya a cumplir el while y por tanto se vaya a repetir el bucle. Si el usuario introduce bien los datos desde la primera vez, el bucle sólo se recorrerá una vez.

Introducción de números hasta pulsar 0

Si seguimos desgranando el ejercicio, el siguiente punto a estudiar será la introducción de valores hasta que este sea 0. Para ello podemos basarnos también en un ciclo do-while, ya que al menos, solicitaremos que incluya un número el usuario.

do {
Inserta número:
} while (numero != 0);

Realización de cálculos

Tras la introducción de cada número, debemos realizar unos cálculos para que cuando terminemos podamos mostrar los resultados que nos solicita el ejercicio:

  • La suma de los números que están dentro del intervalo (intervalo abierto).
  • Cuantos números están fuera del intervalo.
  • Informa si hemos introducido algún número igual a los límites del intervalo.

En este caso, el primer concepto que tenemos que tener claro, es qué es un intervalo abierto, el cual se define como el rango de números que se encuentran entre dos números dados, sin incluirlos.

Para realizar esta operación utilizaremos una variable llamada suma, en caso de que el número introducido se encuentre entre los límites, se sumará el valor del número al total acumulado.

Si el número está fuera del intervalo, debe aumentar una variable que llamaremos contador, y que sumará 1 en cada ocasión que se cumpla esta condición.

Por último, debemos realizar un if a parte, en el que comprobemos si el valor del número coincide con alguno de los limites, en caso de que así sea, modificará el valor de una variable booleana que llamaremos esLimite (e iniciaremos en false) a true.

Con estas tres anotaciones, ya tendríamos almacenada toda la información necesaria, y en caso de que el usuario pulse 0, saldremos del bucle y debemos mostrarla en pantalla.

package estructurasRepetitivas;

/**
05 Ejercicios Estructuras Repetitivas en Java

Programa:
Escribe un programa que pida el limite inferior y superior de un intervalo. 
Si el límite inferior es mayor que el superior lo tiene que volver a pedir. 

A continuación se van introduciendo números hasta que introduzcamos el 0. 
Cuando termine el programa dará las siguientes informaciones:

- La suma de los números que están dentro del intervalo (intervalo abierto).
- Cuantos números están fuera del intervalo.
- Informa si hemos introducido algún número igual a los límites del intervalo.

@author: manolohidalgo_
@date: 10-11-19
*/

import java.util.Scanner;
// Inicio del programa y declaración de variables:
public class Ej05Limites {
  public static void main(String[] args){
    Scanner scanner = new Scanner(System.in);
    int inferior;
    int superior;
    int numero;
    int suma = 0;
    int contador = 0;
    boolean esLimite = false;

    // Inicio del programa, explicación al usuario
    System.out.println("El programa solicitará un límite inferior y superior de intervalo.");
    System.out.println("Después pedirá la introducción de números a analizar, para finalizar "
        + "de introducir números, pulsa 0");
    System.out.println("Mostrará la siguiente información: ");
    System.out.println("Suma de los números que están dentro del intervalo");
    System.out.println("Cuantos números están fuera del intervalo");
    System.out.println("Si se ha introducido alguno de los números que marcan los límites "
        + "de los intervalos");
    // Pedimos límites al usuario
    do {
      System.out.print("Introduce el límite inferior: ");
      inferior = scanner.nextInt();
      System.out.print("Introduce el límite superior: ");
      superior = scanner.nextInt();
      if (inferior > superior) {
        System.out.println("Error, el límite inferior debe ser que el superior. "
            + "Revisa los valores introducidos.");
      }
    } while (inferior > superior);
    
    // Pedimos al usuario insertar números
    do {
      System.out.println("Introduce un número: ");
      numero = scanner.nextInt();
      
      if (numero != 0) {
        if (numero > inferior && numero < superior) {
          suma += numero;
        } else if (numero <= inferior || numero >= superior) {
          contador++;
        }
        if (numero == inferior || numero == superior) {
          esLimite = true;
        }
      } 
    } while (numero != 0);
    
    // Al introducir 0, mostramos resultados
    System.out.println("El valor de la suma de los números introducidos en el rango " + inferior +"-" +superior +" es de " +suma);
    System.out.println("Se han introducido un total de " + contador + " números fuera del intervalo " + inferior+"-"+superior);
    if (esLimite){
      System.out.println("Alguno de los valores introducidos ha coincidido con alguno de los límites del intervalo");
    } else {
      System.out.println("No se ha introducido ningún valor igual a los límites del intervalo");
    }
  }
}

Puedes acceder a este ejercicio en GitHub en este enlace

Si tienes alguna duda al respecto, alguna sugerencia o algo que no te haya quedado claro, no tienes más que escribirme en los comentarios, estoy aquí para ayudarte y aprender, ¡Nos leemos!