Saltar a contenido

Estructuras de repetición

Permiten ejecutar de forma repetida un bloque específico de instrucciones. Las instrucciones se repiten mientras o hasta que se cumpla una determinada condición. Esta condición se conoce como condición de salida. Tipos de estructuras repetitivas:

  • Ciclo while.
  • Ciclo do – while.
  • Ciclo for.

Bucle while

Bucle while

Las instrucciones se repiten mientras la condición sea cierta. La condición se comprueba al principio del bucle por lo que las acciones se pueden ejecutar cero o más veces. La ejecución del bucle while sigue los siguientes pasos:

  1. Primero se evalúa la condición.
  2. Si el resultado es false, las instrucciones no se ejecutan y el programa sigue ejecutándose por la siguiente instrucción a continuación del while.
  3. Si el resultado es true, se ejecutan las instrucciones del while y se vuelve al paso 1.
/* Programa que lee números hasta que se lee un negativo y muestra la * suma de los
números leídos */
import java.util.Scanner;
public class Ejemplo1While {
    public static void main(String[] args) {
        int suma = 0, num;
        Scanner sc = new Scanner(System.in);
        System.out.print("Introduzca un número: ");
        num = sc.nextInt();
        while (num >= 0){
            suma = suma + num;
            System.out.print("Introduzca un número: ");
            num = sc.nextInt();
        }
        System.out.println("La suma es: " + suma );
    }
}

Bucle do-while

Bucle do-while

Las instrucciones se ejecutan mientras la condición sea cierta. La condición se comprueba al final del bucle, por lo que el bloque de instrucciones se ejecutará al menos una vez.

Esta es la diferencia fundamental con la instrucción while. Las instrucciones de un bucle while no ejecutaban si la condición inicialmente era falsa. La ejecución del bucle do - while sigue los siguientes pasos:

  1. Primero se ejecutan las instrucciones a partir de do{...
  2. Se evalúa la condición.
  3. Si el resultado es false, el programa sigue ejecutándose por la siguiente instrucción a continuación del while.
  4. Si el resultado es true, se vuelve al paso 1.
/* Programa que obliga al usuario a introducir un número menor que 100 */
import java.util.Scaner;
public class Ejemplo1DoWhile {
    public static void main(String[] args) {
        int valor;
        Scanner in = new Scanner(System.in);
        do {
            System.out.print("Escribe un entero < 100: ");
            valor = in.nextInt();
        }while (valor >= 100);
        System.out.println("Ha introducido: " + valor);

    }
}

Bucle for

La instrucción for hace que una instrucción o bloque de instrucciones se repitan un número determinado de veces mientras se cumpla la condición. La estructura general de una instrucción for en Java es la siguiente:

for(inicialización; condición; incremento/decremento){
    instrucción 1;
    ...........
    instrucción N;
}

A continuación de la palabra for y entre paréntesis debe haber siempre tres zonas separadas por punto y coma:

  • zona de inicialización.
  • zona de condición o evaluación.
  • zona de incremento o decremento.

Si en alguna ocasión no es necesario escribir alguna de ellas se pueden dejar en blanco, pero los dos punto y coma deben aparecer.

Inicialización: es la parte en la que la variable o variables de control del bucle toman su valor inicial. Puede haber una o más instrucciones en la inicialización, separadas por comas. La inicialización se realiza una sola vez.

Evaluación: es una expresión booleana que hace que se ejecute la sentencia o bloque de sentencias mientras dicha expresión sea cierta. Generalmente en la condición se compara la variable de control con un valor límite.

Incremento/decremento: es una expresión que decrementa o incrementa la variable o variables de control de bucle.

Bucle for

La ejecución de un bucle for sigue los siguientes pasos:

  1. Se inicializa la variable o variables de control (inicialización).
  2. Se evalúa la condición (evaluación).
    • Si la condición es cierta se ejecutan las instrucciones.
    • Si es falsa, finaliza la ejecución del bucle y continúa el programa en la siguiente instrucción después del for.
  3. Se actualiza la variable o variables de control (incremento / decremento).
  4. Se vuelve al paso 2.
/* programa que muestra los números del 1 al 10 */
public class Ejemplo0For {
    public static void main(String[] args) {
        int i;
        for(i = 1; i <= 10; i++){
            System.out.println(i + " ");
        }
    }
}

Actividades

  • AC 309 (RA3 / CE3b CE3g / IC1 / 3p) Se requiere un algoritmo para determinar, de N cantidades, cuántas son menores o iguales a cero y cuántas mayores a cero. Ten en cuenta que el valor N se solicita al usuario por entrada estándar (mediante la clase Scanner). Resuélvelo con la estructura de control While.

  • AC 310 (RA3 / CE3b CE3g / IC1 / 3p) Con un bucle imprime línea por línea los números de ordenadores de una clase de 6 ordenadores por fila, teniendo en cuenta que siguen la siguiente numeración fila.numOrdenador. Por ejemplo, el primer ordenador será 7.1 y el último 7.6.

  • AR 311 (RA3 / CE3b CE3g / IC1 / 3p) Desarrolla un programa utilizando un bucle do-while que imprima “Hola caracola” 5 veces.

  • AC 312 (RA3 / CE3b CE3g / IC1 / 3p) Escribe un programa que pida que se introduzcan dos números enteros N1 y N2 por teclado (mediante la clase Scanner) y muestre los números pares que hay entre ellos. N1 debe ser menor que N2. Si no es así se mostrará un mensaje indicándolo y se vuelven a introducir. Utiliza la estructura de control for.

  • AC 313 (RA3 / CE3b CE3g / IC1 / 3p) Genera un programa que permita seleccionar por teclado una opción de las que aparecen en el siguiente menú:

    1. Primera opción.
    2. Segunda opción.
    3. Tercera opción.
    4. Salir del programa.

Al escoger cualquiera de las opciones 1 a 3 mostrará por pantalla el texto: “Has escogido la opción 1”, “Has escogido la opción 2” ó “Has escogido la opción 3” y, tras ello, permitirá escoger de nuevo una opción. En caso de escoger la opción 4 el programa seguirá su ejecución y acabará. Utiliza la estructura de control Do..While.

  • AR 314 (RA3 / CE3b CE3g / IC1 / 3p) Utiliza un bucle for para escribir las siguientes secuencias.

    1. 1 3 5 7 9
    2. 1 2 4 8 16
  • AC 315 (RA3 / CE3b CE3g / IC1 / 3p) Crea un programa que lea una fecha representada por dos enteros solicitados al usuario, mes y año, y dé como resultado los días que tiene ese mes teniendo en cuenta el año. El programa finaliza tras mostrar un resultado.

    Hay que tener en cuenta que febrero puede tener 28 días, o bien 29 si el año es bisiesto. Un año es bisiesto cuando es múltiplo de 4 y no de 100 o cuando es múltiplo de 400.

    Por ejemplo, el año 2000 por las dos primeras condiciones no sería bisiesto, pero sí lo es porque es múltiplo de 400; el año 2100 no es bisiesto porque, aunque sea múltiplo de 4, también lo es de 100 y no es múltiplo de 400.

  • AP 316 (RA3 / CE3b CE3e CE3g / IC1 / 3p) Desarrolla un programa que pida al usuario introducir números por teclado, haga la suma de éstos y muestre el resultado al salir del programa. El usuario controla si desea continuar o no ingresando números, ya que si inserta un 0 sale del bucle, el mensaje que se muestra al usuario iterativamente es: “Inserta un número (0 para salir)”. Al finalizar se muestra: “La suma de los valores es X”, donde X es el total.

    Además de mostrar la suma de los valores introducidos por el usuario, muestra también el número de valores totales distintos de cero que se insertaron. Para ello, necesitarás agregar otra variable, llámala contador, y dado que cualquier número distinto de cero ejecutará el cuerpo del bucle, todo lo que necesitas hacer es contador++ en el cuerpo del bucle para contar. Muestra el recuento en la salida después de mostrar la suma.

    • Ejemplo. Usuario inserta 1 2 3 0.
    • Output: “La suma de los valores es 6. Total de número insertados 3”

    Agrega al programa anterior instrucciones para contar y mostrar también el número de valores de entrada que son impares. Para saber si el valor es impar, se comprueba si el resto es 1, valor % 2 = 1. Esto requerirá otra variable más para contar el número de entradas impares. Inicialízala a 0, y añade una sentencia if en el cuerpo del bucle para probar si el valor es impar e incrementar esta variable. Finalmente, muestra un mensaje al final, antes de mostrar la suma que diga el número de valores impares insertados.

    Agrega otra variable que se le solicitará al usuario antes del bucle y antes de pedirle los números. Este valor será almacenado en la variable y será un número objetivo. Con otra instrucción if en el cuerpo del bucle, comprueba si el valor de entrada o número es igual a este objetivo y, si es así, incrementa en uno otra variable de contador. Después del bucle, muestra tanto el valor objetivo como el número de veces que el usuario insertó ese valor objetivo.

    Ejemplo. Usuario entra 7 como número objetivo.

    • Usuario inserta 2 5 7 8 1 7 0
    • Output: “La suma de los valores es 30. Total de número insertados 6 .El número de valores impares es 4. El valor 7 se insertó 2 veces”

    Añade otra variable, max, inicializada a cero, para almacenar el valor más grande insertado. En el cuerpo del bucle, determine si el nuevo número o valor insertado por el usuario, es mayor que max (valor > max) y, si es así, establezca max en este nuevo valor. Añade max a la salida del programa.

    Ejemplo. Usuario entra 7 como número objetivo.

    • Usuario inserta 2 5 7 8 1 7 0
    • Output: “La suma de los valores es 30. Total de número insertados 6. El número de valores impares es 4. El valor 7 se insertó 2 veces. El máximo valor insertado es 8”
  • PR 317 (RA3 / CE3b CE3e CE3f CE3g / IC1 / 5p) Realiza un programa que solicite un número n y genere esta sucesión hasta n. Utiliza 3 procedimientos distintos para solucionarlo empleando los bucles for, while y do-while. Por ejemplo: -1 2 -3 4 -5 6 -7 8 -9 … n

  • PR 318 (RA3 / CE3b CE3e CE3f CE3g / IC1 / 5p) Crea un programa que pida por teclado la nota obtenida por cada alumno, de un total de n alumnos, en un examen, y calcule y muestre la nota media de la clase, la nota mayor y la nota menor.

  • PR 319 (RA3 / CE3b CE3e CE3f CE3g / IC1 / 5p) Crea un programa que pida por teclado el nombre de barcos de cada banda, de un total de n bandas, has de sacar la longitud media de los nombres, el de menor longitud y el de mayor longitud.

  • AP 320 (RA3 / CE3b CE3e CE3f CE3g / IC1 / 5p) Escribe un bucle for anidado por cada uno de los siguientes patrones:

    AP 320