07: Ejecución de bucles

Introducción

En todo el código que hemos visto hasta ahora, cada instrucción se ejecutaba solamente una vez. Siempre podríamos volver a ejecutar funciones llamándolas repetidamente [1].

//[1]
NSLog(@"Julia es mi actriz favorita.");
NSLog(@"Julia es mi actriz favorita.");
NSLog(@"Julia es mi actriz favorita.");

Pero eso requiere repetir la llamada cada vez. Como todos los lenguajes de programación, Objective-C ofrece varias formas de ejecutar un bucle de instrucciones.

for()

Si sabes el número de veces que quieres repetir la instrucción (o secuencia de instrucciones), puedes especificarlo en una sentencia for() tal como la que vemos en el ejemplo [2]. El número de repeticiones debe ser un número entero, ya que no se puede repetir una operación, por ejemplo, 2,7 veces.

//[2]
int x;
for (x = 1; x <= 10; x++)  //[2.2]
{
    NSLog(@"Julia es mi actriz favorita.");    //[2.4]
}
NSLog(@"El valor de x es %d", x);  //[2.6]

En el ejemplo [2], la cadena en [2.4] se va a imprimir 10 veces. En una sentencia for() vamos a encontrar entre los paréntesis tres secciones separadas por punto y coma (;). La secuencia es la siguiente:

 
[1] Se ejecuta la sección 1 del for
[2] Se evalúa la sección 2 del for
    Si es cierta, entonces,
        se ejecutan las instrucciones que hay dentro de las llaves
        se ejecuta la sección 3 del for
        se salta al paso [2]
    Si no es cierta:
       se sale del bucle for
 

Vamos a explicar la secuencia con el ejemplo [2]. Primero se asigna a x el valor 1. Después se evalúa la condición, que en este caso es x <= 10. La condición se cumple, ya que la primera vez x es igual a 1, por lo tanto se ejecutarán los comandos en el interior de las llaves del for(). Como la condición ha sido cierta, se ejecuta la sección 3, que en este caso incrementa el valor de x en 1 (eso es lo que significa x++). Así que ahora x es igual a 2 y se vuelve a evaluar la expresión x <= 10. Como sigue siendo cierta, se vuelven a ejecutar las instrucciones entre llaves y se vuelve a incrementar en 1 el valor de x. Así seguirá sucediendo hasta el momento en que x sea igual a 11. En este momento la condición no se cumplirá y saldremos del bucle for(). Hemos puesto la línea [2.6] para probar que cuando se llega ahí, x es igual a 11.

Habrá ocasiones en que necesitemos otros incrementos distintos de x++. En el ejemplo [3] vamos a convertir de grados Fahrenheit a Celsius.

//[3]
float celsius, tempEnFahrenheit;
for (tempEnFahrenheit = 0; tempEnFahrenheit <= 200; tempEnFahrenheit = tempEnFahrenheit + 20)
{
    celsius = (tempEnFahrenheit - 32.0) * 5.0 / 9.0;
    NSLog(@"%10.2f -> %10.2f", tempEnFahrenheit, celsius);
}

La salida del programa será:

0.00 -> -17.78
20.00 -> -6.67
40.00 ->  4.44
60.00 -> 15.56
80.00 -> 26.67
100.00 -> 37.78
120.00 -> 48.89
140.00 -> 60.00
160.00 -> 71.11
180.00 -> 82.22
200.00 -> 93.33

while()

En Objective-C encontramos también otras formas de repetir una serie de instrucciones:

while () { }

y

do {} while ()

El funcionamiento es básicamente idéntico al bucle for(): empieza evaluando una condición y en el momento en que esa condición sea falsa deja de ejecutar las instrucciones entre llaves.

//[4]
int contador = 1;
while (contador <= 10)
{
    NSLog(@"Julia es mi actriz favorita.\n");
    contador = contador + 1;
}
NSLog(@"El valor del contador es %d", contador);

El valor de contador al salir del bucle es 11.

La instruction do {} while () es ligeramente diferente, ya que las instrucciones entre llaves se va a ejecutar siempre al menos una vez. Eso es debido a que primero se ejecutan las instrucciones entre llaves y después de evalúa la condición entre paréntesis.

//[5]
int contador = 1;
do
{
    NSLog(@"Julia es mi actriz favorita.\n");
    contador = contador + 1;
}
while (contador <= 10);
NSLog(@"El valor del contador es %d", contador);

Podremos comprobar que el valor de contador al salir del bucle es 11.

Hemos aumentado nuestro nivel como programadores y es el momento de abordar un objetivo más alto. En el siguiente capítulo construiremos nuestro primer programa con Interfaz Gráfico de Usuario (GUI).

Post new comment

The content of this field is kept private and will not be shown publicly.
Enter the code shown in the image:

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
13 + 3 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.

Donate!





If you like what you find here and wish to support further development of this site, please donate via PayPal. No account required.

Syndicate

Syndicate content

User login

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
9 + 3 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.
Enter the code shown in the image: