"Es usted la mujer más bella que he visto en mi vida... lo cual no dice mucho en mi favor" (Groucho Marx)
Control de flujo de ejecución
Aquí es donde mucha gente suele atascarse (sobre todo los bucles resultan un poco complicados de entender), aunque la verdad no es que tenga mucha dificultad. Con control del flujo de ejecución nos referimos a realizar unas tareas u otras (es decir, ejecutar un código u otro) dependiendo de los valores de datos que se nos presenten en tiempo de ejecución. Esto es, no es lo mismo asignar valores estáticos, como por ejemplo
Código: Seleccionar todo
int edad = 5;
que recuperar valores dinámicos, que no podemos saber de antemano lo que valen, por ejemplo
Código: Seleccionar todo
scanf("%d", &edad);
Por lo tanto, un mecanismo que nos permita comprobar qué valores se han asignado a las variables sería muy útil para poder decidir por qué camino continuar.
Primero vamos a ver la sentencia if. If es si (condicional, como en "si haces esto te doy lo otro") en inglés. Nos permite comprobar si una expresión matemática es verdadera o falsa, y ejecutar un código u otro respectivamente. Veamos un ejemplo:
Código: Seleccionar todo
#include <stdio.h>
int main(int argc, char* argv[])
{
int edad;
printf("Por favor, introduzca su edad: ");
scanf("%d", &edad);
// Si la edad es mayor de 20
if (edad > 20)
printf("\nUn poco tarde para empezar, viejo!\n");
// Si no (la edad es igual o menor que 20)
else
printf("\nAnimo, que la practica hace la perfeccion ;)\n");
return 0;
}
Fijaos que de los dos printf del final, sólo se va a imprimir en pantalla uno de los dos. Jamás se imprimirán ambos. Esto es debido a que uno responde a una condición y el otro a la falta de dicha condición. Es como decir "si llueve coge el paraguas, si no, no lo cojas". Jamás se va a cumplir que llueva y no llueva a la vez
Ahora bien, si un if engloba más de una sentencia en su condición, debemos usar las llaves {} para englobar todo el código que deba ejecutarse en caso de que se cumpla la condición (igualmente para el else). Veamos otro ejemplo:
Código: Seleccionar todo
#include <stdio.h>
int main(int argc, char* argv[])
{
int numero_secreto = 5;
int numero_introducido;
// Recordad que no hace falta poner 2 printf para este tipo de salida, aunque es mejor hacerlo porque queda mejor
printf("Intenta adivinar el número secreto!!!\nIntroduce un número entre 0 y 9... ");
scanf("%d", &numero_introducido);
// Si el número es mayor...
if (numero_introducido > numero_secreto)
{
printf("\nTe has pasado tres pueblos...\n");
printf("Vuelve a intentarlo mas tarde.\n");
}
// Si no es mayor, si es menor...
else if (numero_introducido < numero_secreto)
printf("\nUf, no seas timido... Te has quedado corto!\n");
// Si no es ni mayor ni menor, si es igual...
else if (numero_introducido == numero_secreto)
{
printf("\nBuah, vaya crack!\n");
printf("Le lees la mente a los ordenadores, enhorabuena!\n");
}
return 0;
}
Aquí también he introducido el else if como podéis ver. Es como el else, sólo que incorpora una condición. Tened en cuenta que un else no se comprueba si un if anterior es verdadero. Además los más avispados habrán notado que la condición de número igual
Código: Seleccionar todo
else if (numero_introducido == numero_secreto)
sobra. Con un else a secas habría bastado:
Código: Seleccionar todo
// Si no es ni mayor ni menor entonces es igual
else
{
printf("\nBuah, vaya crack!\n");
printf("Le lees la mente a los ordenadores, enhorabuena!\n");
}
Como dice el comentario, si no es mayor ni menor, entonces es forzosamente igual. Este tipo de lógica siempre hay que tenerla en cuenta para hacer que los programas no realicen cálculos innecesarios, como volver a comparar numero_introducido con numero_secreto de una manera superflua, porque ya podemos deducir que va a ser siempre verdad
Para que asimiléis esto, os dejo que hagáis unos ejercicios para que practiquéis:
- Escribir un programa parecido al anterior ejemplo, sólo que el número secreto se debe introducir por teclado en vez de ser fijo. Sería un juego para dos jugadores: uno introduce el número secreto y otro intenta adivinarlo
- Codificar un programa que dados dos números enteros, nos diga cuál es mayor o si son iguales.
- Codificar un programa que dados dos números reales, nos diga cuál de los cuadrados (potencia de 2) es más grande.
- Codificar un programa que dado un número entero, nos diga si es par o impar (pista: el operador de módulo o resto de una división es % ).
Con dados, me refiero a introducidos por teclado. Nos vemos en la siguiente lección y no olvidéis practicar cuanto más mejor, que si no se olvida todo
EL PDF de esta lección para descargar (gracias a Kracker ):
<< Anterior Siguiente >>