Una mañana me desperté y maté a un elefante en pijama. Me pregunto cómo pudo ponerse mi pijama (Groucho Marx)
Los que hayáis llegado hasta aquí y completado los anteriores ejercicios, podéis agarraros los cataplines porque aquí empieza lo interesante
Bucles
Llamamos bucles a las sentencias del lenguaje que nos permiten repetir un cierto bloque de código dependiendo de cierta condición, o bien un cierto número de veces.
El bucle while() es el más básico. Repite el bloque de código que especifiquemos hasta que se cumpla cierta condición (hasta que cierta expresión sea cierta). Por ejemplo:
Código: Seleccionar todo
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
// Sólo i es cero...
int limite, i = 0;
printf("Introduce el tope: ");
scanf("%d", &limite);
// Mientras i sea menor o igual que el limite especificado...
while(i <= limite)
{
// Imprime el valor de i
printf("%d ", i);
// Incrementa i en 1
i++;
sleep(1);
}
return 0;
}
Uno de los problemas más comunes de los bucles son los famosos bucles infinitos. Los bucles infinitos son bucles cuya condicion es errónea (o hay un error de lógica en el bloque que se repite), por ejemplo:
Código: Seleccionar todo
#include <stdio.h>
int main(int argc, char* argv[])
{
// Sólo i es cero...
int limite, i = 0;
printf("Introduce el tope: ");
scanf("%d", &limite);
// Mientras i sea menor o igual que el limite especificado...
while(i <= limite)
// Imprime el valor de i
printf("%d ", i);
return 0;
}
¡¡¡¡Flooooooood!!!! Si probáis esto veréis que el programa nunca llegará a detenerse (Ctrl-C para detenerlo). Esto es porque evidentemente i siempre tiene el mismo valor 0, por tanto la condición del bucle siempre será cierta. Es Windows 98 y anteriores un error como éste en VB y había que reinicar manualmente
Las expresiones que usamos en el bucle while son las mismas que en los if, como habréis podido comprobar. Veamos a ver más construcciones de expresiones condiciones con if (que igualmente se aplican a while y switch).
Código: Seleccionar todo
#include <stdio.h>
int main(int argc, char* argv[])
{
int numero;
printf("Introduce un numero: ");
scanf("%d", &numero);
printf("\n\n");
if (numero != 9)
printf("No es un nueve\n");
if (!(numero < 10))
printf("Es mayor o igual que 10\n");
if ((numero % 3 == 0) && (numero > 20))
printf("Es mayor que 20 divisible por 3\n");
if ((numero % 5 == 0) || (numero <= 100))
printf("Es múltiplo de 5 O es menor o igual que 100\n");
if (!(numero == 6) && (numero < 10))
printf("No es 6 Y es menor que 10\n");
if (!( (numero % 2 == 0) && (numero > 10)))
printf("Es impar o menor o igual que diez\n");
// Cuenta inversa...
while(numero >= 0)
// numero-- resta uno a numero, pero tras el printf. Son como 2 operaciones en una sentencia ;)
printf("%d ", numero--);
return 0;
}
Uf... ¿Cómo lo véis? Las expresiones lógicas pueden parecer un poco enrevesadas al principio, pero si las entendemos bien no habrá problemas. A ver un pequeño repaso:
- ! no (niega la expresión -> si es verdadera, la hace falsa y viceversa)
- == igual
- != no igual
- > mayo
- >= mayor o igual
- < menor
- <= menor o igual
- && Y lógico (AND) (sólo es verdadero si ambas expresiones son verdaderas)
- || Ó lógico (OR) (sólo es falso si ambas expresiones son falsas)
Veamos algunos ejercicios que podéis hacer para practicar esto:
- Dado un número entero evaluar si es menor que 20 y par (debe cumplir ambas condiciones).
- Dados dos números reales, evaluar si la media, la suma y la multiplicación son mayores que 20 (cada una de ellas).
- Dados dos números enteros, si la suma de ambos es par, imprimir todos los valores pares hasta el mayor de ellos. Si la suma no es par, imprimir los valores impares hasta la suma de ambos.
- Dado un número entero, verificar si el número es primo o no. Un número es primo si y sólo si es divisible por la unidad y por sí mismo.
- Crear un programa en el que un usuario A introduce un número secreto entre 0 y 10 y otro usuario B debe adivinarlo en 5 intentos máximo. El programa sólo se debe detener si el usuario B acertó o si ha gastado los 5 intentos de manera fallida.
Ay las mates xD Nos vemos en la siguiente
Descarga en PDF (por cortesía de Chacaritas)
<< Anterior Siguiente >>