Nuestros últimos programas ya tenían más forma, pero seguramente te diste cuenta de que se quedaban cortos, no eran lo suficientemente eficientes para lograr algo más complejo. Alégrate, aún hay más que aprender. Los bucles y sentencias son parte importantísima en cualquier lenguaje de programación. Regulan el flujo de información, haciéndonos la vida más fácil.
En este tutorial aprenderemos los bucles más importantes: While y For. También estudiaremos los condicionales: If, else, else if. Como ya es costumbre, no veo motivos para extenderme en la teoría. Vamos al laboratorio.
Empecemos por aprender el bucle While. Es muy simple, y muy útil si está bien aplicado. Citaré el clásico ejemplo a la hora de explicar los bucles. Si dijera "Haz un programa que imprima 5 <<Holas>> en pantalla". Lo primero que se te pasaría por la cabeza, seguramente, sería: Escribir 5 printfs. ¿Y si dijera "Haz un programa que imprima 5000 <<Holas>> en pantalla"? La cosa cambia. No creo que te atrevas a escribir cinco mil printfs. Aquí es donde adorarás los bucles, vamos a materializar el ejemplo, vamos a imprimir 5000 veces "Hola".
#include <stdio.h>
int main()
{
int timer;
timer = 0;
while (timer < 5000)
{
++timer;
printf("Hola %i\n",timer);
}
printf("Presiona ENTER para continuar");
getchar();
return 0;
}
Vamos al grano:
Nada del otro mundo (Tal vez sí, pero ya lo sabes usar) declaramos una variable del tipo int y le asignamos el valor 0. Está parte es importante, y si no se lleva a cabo puede ser una fuente difícil de identificar de errores extraños. Vamos a enriquecer nuetsros conocimientos con un dato: Si no le asignaramos 0 a timer, el programa se asignaría a sí mismo un valor aleatorio, el resultado sería una cuenta incompleta a la hora de usar el While.
Y he aquí al protagonista de esta sección: el famosísimo While. Vamos a estudiarlo minusiosamente.
Podemos apreciar que para iniciar un bucle del tipo While, basta con poner esa misma palabra (sin mayúsculas). Después, escribimos entre paréntesis la condición; es decir, el bucle se ejecutara, mientras esa condición sea verdadera; en este caso, estamos diciendo que el bucle se ejecute una y otra vez hasta que timer sea igual a 5001.
Después podemos ver, que al igual que las funciones (me refiero a int main()) delimitamos una serie de tareas mediante las llaves, el final del bucle está justo en la llave de cierre }. Dentro de estas llaves tenemos lo siguiente:
++timer es lo mismo que timer = timer + 1. Es decir que la variable se sumara a sí misma la unidad por tiempo indefinido (en este caso las veces las delimita timer). En otras palabras ++timer es una manera más corta de hacer lo msimo. al sumar 1 a timer por cada vez que se ejecute el bucle, aseguraremos que éste se ejecutara sólo (Sí, nada más) 5000 veces.
Después tenemos un printf que imprimirá Hola, seguido del número almacenado en timer. Lo último con el fin de comprobar que en realidad el bucle se está repitiendo 5000 veces.
Fíjate que las tareas las estamos separando, al igual que fuera de un bucle, con un ;. También es un error común saltarse los punto y coma.
Finalmente le damos un poco de estilo al programa e imprimimos un mensaje de salida.
Compila el código, verás que sí, se imprimen 5000 Holas sin mucho esfuerzo.
Ahora vamos a repetir el ejemplo, pero usando otro método: el bucle For.
#include <stdio.h>
int main()
{
int a;
for (a = 0; a <= 5000; a ++)
{
printf("Hola %i\n",a);
}
printf("Presiona Enter para salir");
getchar();
return 0;
}
Vamos directo a la función principal.
Declaramos, primeramente, la variable a del tipo int. Fíjate que ahora no es necesario que le asignemos un valor al momento de ser declarada. Esto viene en "combo" con el bucle for.
Y ahora presente a otra estrella de los premios osCar: For.
La estructura es muy similar a While. Fíjate cómo se declara y cómo se finaliza. Ambos utilizan las llaves y llevan una condición, o más entre paréntesis. Vamos a estudiar estas condiciones.
Primero, le asignamos un valor a a, en este caso 0; igualmente le podríamos asignar libremente un 5 o un 2543636, pero esta vez alteraría el resulatdo deseado.
Después, establecemos la condición principal: El bucle se repetirá una y otra vez, miestras a sea menor o igual que 5000; esta condición es similar a la ya estudiada. Y por último está un tercer argumento, aquí establecemos que se le sumará la unidad a a; si pusieramos un a = a + 2, obtendríamos una cuenta de 2 en 2, y por lo tanto, sólo 2500 impresiones.
Después, sólo hacemos uso de printf.
Para terminar, la frase de cierre.
Haz la prueba. Obtendrás el mismo resultado que con While.
Juega con ambos bucles. Cambia el valor de las variables, las sumas de for, en fin... experimenta todo lo que se te ocurra.
¿Ya jugaste un rato? Perfecto, vamos a divertirnos un poco más con los condicionales.
¿Qué es un condicional? Seguramente fue la primera pregunto que se e ocurrió. Un condicional es una sentencia que si es verdadera, realizará una acción determinada por el autor. La práctica hace al maetsro, mejor te daré un ejemplo, y seguramente te quedará más claro el concepto.
/*Sentencias: if*/
Vamos al grano, todo lo que no explique, doy por hecho que ya lo sabes.
Ésta es la estructura básica de un condicional, fíjate que es muy parecidaa la de un bucle. Entre parentesis tenemos la condición, si ésta es verdadera, se ejecutará la acción entre llaves.
En este caso estamos diciendo que si a (previamente declarado, y modificado en scanf) es mayor o igual a 100 mostrará un mensaje en pantalla.
Compila el programa y fíjate cómo funciona.
If se puede complicar un poquito más, existen las sentencias else y else if. Lo que hacen es duplicar la funcionalidad de if. Vamos a hacer más complejo el ejemplo con ayuda de estas extensiones.
#include <stdio.h>
int main()
{
int a;
printf("Introduce un número entero mayor o igual que 100: ");
scanf("%i",&a);
getchar();
if (a >= 100)
{
printf("Perfecto, el número %i es mayor o igual que 100.",a);
}
else
{
printf("El número %i es menor que 100.",a);
}
printf("\n\nPresiona ENTER para salir.");
getchar();
return 0;
}
Aquí está la parte importante, en realidad es muy simple, se declara una sentencia como ya lo vimos y se establece la acción a realizar en caso de que el condicional sea verdadero. Pero, al finalizar las llaves de if, escribimos la palbra else y su "acción".
Else, podríamos decir que significa "si no" o "en caso de que no". Así podemos traducir C al Castellano de la siguiente forma:
Si a es mayor o igual a 100 escribe "Perfecto, el número %i es mayor o igual que 100." en caso de que no, escribe "El número %i es menor que 100."
Con esto debería de quedarte más claro como funciona.
Compílalo y ejecútalo.
En el programa anterior, si escribíamos un número menor que 100 simplementelo ignoraba y finalizaba el programa. Esta vez, intenta escribir un 12 por ejemplo y fíjate como muestra el segundo mensaje por que la primera aseveracíon fue falsa.
Para terminar vamos a ver el tercer brazo de los condicionales: el elseif.
#include <stdio.h>
int main()
{
int a;
printf("Introduce un número entero mayor o igual que 100: ");
scanf("%i",&a);
getchar();
if (a > 100)
{
printf("Perfecto, el número %i es mayor que 100.",a);
}
else if (a == 100)
{
printf("Perfecto, introduciste un %i.",a);
}
else if (a < 100)
{
printf("Muy mal, el número %i es menor que 100.",a);
}
printf("\n\nPresiona ENTER para salir.");
getchar();
return 0;
}
Vamos a lo que nos interesa:
Todo el condicional. Fíjate que el principal es el que se encuentra al principio. Se declara de la misma forma. Al terminar sus llaves declaramos un else if, que sigue la misma morfología. En total son dos else if.
Un else if es como decir: "si no se cumple y..." Como lo hice antes, vamosa traducir el C a Español:
Si a es mayor a 100 escribe "Perfecto, el número %i es mayor que 100." Si no es mayor a 100, pero es igual a éste, "Perfecto, introduciste un 100". Si ninguno de los anteriores es verdadero y a es menor a 100, "Muy mal, el número %i es menor que 100."
Es simple entenderlo si ya tienes las bases (ya las tienes, sino, lee el tutorial completo).
A diferencia de else, else if brinda más posibilidades.
Compila el programa, ejecútalo y observa los resultados.
Con esto doy por terminado este capítulo. Disfrútalo y repásalo las veces que sean necesarias. Nos leemos en el siguiente.
Comentarios
impresionante
haber si te animases un dia y te montas otro cacho de manual pero esta vez para windows
hacer bucles con las ventanas y esas cosas,
gracias por el tutorial, un saludo
(lo he conseguido hacer, pero a lo sucio, mucho copy paste)XD
si hubiera otra formula de hacerlo si repetir muchas veces las lineas agradeceria la explicacion
Mirar , aqui podeis
Mirar , aqui podeis descargar unas librerias que no se como se usan pero tienen buena pinta:
http://www.sitiosargentina.com.ar/software%20DLLS.htm
Saludos
SKA-P Al poder !!!!!!!!!!!!!!!!!!!!!!!!!
Programar , un hobbie que nunca acaba.
Si no sabes
Para que sirve, entonces para que las presentas?.
O por lo menos di el nombre de esas libreria.
psp.scenebeta.com más que una web una comunidad unida.
Quiero una DS!!!!!!!!!!!
Perfecto tutorial
Igual o mejor explicado que mi profesor de fundamentos de programacion en la U, solo que usamos en c++ la libreria "iosteam", aunque al final todo viene a ser lo mismo, ya se donde revisar para adelantarme cuando no pueda ir a clases, Exitos y nos leemos en otros posts.
excelente!!
de perlas!!, todo muy bien, ya he logrado asimilar los tutos anteriores, y este no es la excepcion, hasta el momento no tengo ningun problema con lo que se ha visto, gracias por todo( ya saben a quien me refiero heheheh) saludos!.
estare pendiente de lo que siga.
Tanos, el master
No hay ni una pizca de confusión o duda.
Tanos. Es el MASTER (masta).
Otra vez nos deleita con sus magníficos tutoriales.
Ni un error. Todo perfectamente bien explicado.
Paso a paso.
Es un honor leer tus líneas.
Gracias Tanos.
ARTUROPICAZO
Muy bien
Treas semanas largas y duras, pude terminar este capítulo. Disfrútenlo. Está hecho en 3 semanas con unos cuantos minutitos diarios :P.
Saludos
Llamado a los interesados en Lua: Terminemos juntos este proyecto.
Lo tengo dominado
Ya domino todo (o casi todo) lo que explicaste en todos los tutoriales, y juntandolos todos, que surge??
Una calculadora de "usar y tirar" (osea, que solo permite un uso) Que funciona a base printf's, scanf's(como no), variables (generalmente de tipo int, ya que el float me da numeros de mas, el double no lo entiendo y el char saca ASCII),tres if, dos else(creo) y tre esle if.
Ademas la programe para que en las restas y divisiones coloque los numeros de mayor a menor, por si hay algun despistado, y asi evitar numeros negativos o raros.
Aun espero el siguiente, que me pregunto de que ira. Si me pudieses dar un adelanto, te lo agradeceria ;-)
Tambien podria postear el codigo, aunque si teneis imaginacion, lo podreis hacer vosotros solos.
Salu2 de Fausto
¡Excelente!
Debo decir que estoy dos días seguidos en esta web y me sentido encantado de encontrar tantos "tesoros" aquí. También he estado revisando el Tutorial de programación C y debo decir que está excelente, sobretodo para dar comienzo a una nueva filosofía: Software Libre.
Thanks!