AnteriorPosterior

4.4. break, continue, goto. Recomendaciones

Por: Nacho Cabanes
Actualizado: 20-04-2019 09:51
Tiempo de lectura estimado: 8 min.

 

C++

4.4. Sentencia break: termina el bucle

Podemos salir de un bucle “for” antes de tiempo con la orden “break”:

// Introducción a C++, Nacho Cabanes
// Ejemplo 04.08:
// "for" interrumpido con "break" 
 
#include <iostream>
using namespace std;
 
int main()
{
    int i;
 
    for (i=0; i<=10; i++)
    {
        if (i==5) break;
        cout << i << " ";
    }
 
    return 0;
}

El resultado de este programa es:

0 1 2 3 4

(en cuanto se llega al valor 5, se interrumpe el “for”, por lo que no se alcanza el valor 10).

Ejercicio propuesto:

  • (4.4.1) Crear un programa que pida un número al usuario (entre 1 y 100) y muestre tantas letras A como indique ese número, usando "break" para terminar.

4.5. Sentencia continue: fuerza la siguiente iteración

Podemos saltar alguna repetición de un bucle con la orden “continue”:

// Introducción a C++, Nacho Cabanes
// Ejemplo 04.09:
// "for" interrumpido con "continue"
 
#include <iostream>
using namespace std;
 
int main()
{
    int i;
 
    for (i=0; i<=10; i++)
    {
        if (i==5) continue;
        cout << i << " ";
    }
 
    return 0;
}

El resultado de este programa es:

0 1 2 3 4 6 7 8 9 10

En él podemos observar que no aparece el valor 5.

Ejercicio propuesto:

  • (4.5.1) Crear un programa que pida un número al usuario (entre 1 y 20) y muestre los números el 1 al 20, excepto el indicado por el usuario, usando "continue" para evitar ese valor.

Ejercicios resueltos:

¿Qué escribiría en pantalla este fragmento de código?

for (i=1; i<4; i++) cout << i << " ";

Respuesta: los números del 1 al 3 (se empieza en 1 y se repite mientras sea menor que 4).

¿Qué escribiría en pantalla este fragmento de código?

for (i=1; i>4; i++) cout << i << " ";

Respuesta: no escribiría nada, porque la condición es falsa desde el principio ("i" vale 1, que no es mayor que 4).

¿Qué escribiría en pantalla este fragmento de código?

for (i=1; i<=4; i++); cout << i << " ";

Respuesta: escribe un 5, porque hay un punto y coma después del “for”, de modo que repite cuatro veces una orden vacía, y cuando termina, “i” ya tiene el valor 5.

¿Qué escribiría en pantalla este fragmento de código?

for (i=1; i<4; ) cout << i << " ";

Respuesta: escribe “1” continuamente, porque no aumentamos el valor de “i”, luego nunca se llegará a cumplir la condición de salida.

¿Qué escribiría en pantalla este fragmento de código?

for (i=1; ; i++) cout << i << " ";

Respuesta: escribe números continuamente, comenzando en uno y aumentando una unidad en cada pasada, pero si terminar nunca.

¿Qué escribiría en pantalla este fragmento de código?

for ( i= 0 ; i<= 4 ; i++) 
{
    if ( i == 2 ) continue ; 
    cout << i << " ";
}

Respuesta: escribe los números del 0 al 4, excepto el 2.

¿Qué escribiría en pantalla este fragmento de código?

for ( i= 0 ; i<= 4 ; i++) 
{
    if ( i == 2 ) break ; 
    cout << i << " ";
}

Respuesta: escribe los números 0 y 1 (interrumpe en el 2).

¿Qué escribiría en pantalla este fragmento de código?

for ( i= 0 ; i<= 4 ; i++) 
{
    if ( i == 10 ) continue ; 
    cout << i << " ";
}

Respuesta: escribe los números del 0 al 4, porque la condición del “continue” nunca se llega a dar.

¿Qué escribiría en pantalla este fragmento de código?

for ( i= 0 ; i<= 4 ; i++) 
    if ( i == 2 ) continue ; 
    cout << i << " ";

Respuesta: escribe 5, porque no hay llaves tras el “for”, luego sólo se repite la orden “if”.

4.6. Sentencia goto

Los lenguajes C y C++ también permiten usar la orden “goto”, para hacer saltos incondicionales. Su uso indisciplinado está muy mal visto, porque puede ayudar a hacer programas llenos de saltos, difíciles de seguir. Pero en casos concretos puede ser muy útil, por ejemplo, para salir de un bucle muy anidado (un “for” dentro de otro “for” que a su vez está dentro de otro “for”: en este caso, “break” sólo saldría del “for” más interno).

El formato de “goto” es

goto donde;

y la posición de salto se indica con su nombre seguido de dos puntos (:)

donde:

como en el siguiente ejemplo:

// Introducción a C++, Nacho Cabanes
// Ejemplo 04.10:
// "for" y "goto"
 
#include <iostream>
using namespace std;
 
int main()
{
    int i, j;
 
    for (i=0; i<=5; i++)
        for (j=0; j<=20; j+=2)
        {
            if ((i==1) && (j>=7)) 
                goto salida;
            cout << "i vale " << i << " y j vale "
                << j << endl;
        }
    salida:
    cout << "Fin del programa" << endl;
 
    return 0;
}

El resultado de este programa es:

i vale 0 y j vale 0.  
i vale 0 y j vale 2.  
i vale 0 y j vale 4.  
i vale 0 y j vale 6.  
i vale 0 y j vale 8.  
i vale 0 y j vale 10.  
i vale 0 y j vale 12.  
i vale 0 y j vale 14.  
i vale 0 y j vale 16.  
i vale 0 y j vale 18.  
i vale 0 y j vale 20.  
i vale 1 y j vale 0.  
i vale 1 y j vale 2.  
i vale 1 y j vale 4.  
i vale 1 y j vale 6.  
Fin del programa

Vemos que cuando i=1 y j>=7, se sale de los dos “for” a la vez, tal y como indicaba la orden "goto".

4.7. Recomendación de uso de los distintos tipos de bucle

  • En general, nos interesará usar “while” cuando puede que la parte repetitiva no se llegue a repetir nunca (por ejemplo: cuando leemos un fichero, si el fichero está vacío, no habrá datos que leer).
  • De igual modo, “do...while” será lo adecuado cuando debamos repetir al menos una vez (por ejemplo, para pedir una clave de acceso, se le debe preguntar al menos una vez al usuario, o quizá más veces, si la teclea correctamente).
  • En cuanto a “for”, es equivalente a un “while”, pero la sintaxis habitual de la oren “for” hace que sea especialmente útil cuando sabemos exactamente cuantas veces queremos que se repita (por ejemplo: 10 veces sería “for (i=1; i<=10; i++)”).

Ejercicios propuestos:

  • (4.7.1) Crear un programa que dé al usuario la oportunidad de adivinar un número del 1 al 100 (prefijado en el programa) en un máximo de 6 intentos. En cada pasada deberá avisar de si se ha pasado o se ha quedado corto.
  • (4.7.2) Crear un programa que descomponga un número (que teclee el usuario) como producto de su factores primos. Por ejemplo, 60 = 2 · 2 · 3 · 5

1266 visitas desde el 20-04-2019

AnteriorPosterior