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".
/*Ejercicio de Bucles: While*/ #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:
int timer; timer = 0;
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.
while (timer < 5000) { ++timer; printf("Hola %i\n",timer); }
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; printf("Hola %i\n",timer);
++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.
/*Ejercicio de Bucles: 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*/ #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); } printf("\n\nPresiona ENTER para salir."); getchar(); return 0; }
Vamos al grano, todo lo que no explique, doy por hecho que ya lo sabes.
if (a >= 100) { printf("Perfecto, el número %i es mayor o igual que 100.",a); }
É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.
/*Sentencias: if segunda parte*/ #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; }
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); }
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.
/*Sentencias: if tercera parte*/ #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:
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); }
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
Hacedor de reglas
Hola a todos/as, estoy intentando hacer en c un programa que haga reglas de tres diferenciando entre si el valor que queremos encontrar es ya o yb,aqui lo dejo:
Me sale muy feo xD
Aver, stoy en la segunda parte de "if" cuande se incluye "else". Mi problema es que va todo muy bien, lo compilo y lo ejecuto sin problemas, pero cuando presiono ENTER, me sale esto:
Perfecto, el numero i 1,622509e-307s mayor o igual a 100
pulsa enter para salir.
Y cuando pongo un numero menor me pasa lo mismito pero diciendo que es menor.
Salu2 a tod@s
Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy
pon el codigo.
pon el codigo.
Hecho
Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy
te has percatado
de este error que tienes en una linea:
printf("El numero %i es menor a 100",a); 7/ si la condicion del if falla, se imprimira esto
El fallo de sige
El fallo de mostrar los codigos feos sigue, ya he corregido el fallo de inicio de comentario. Mi codigo sige así:
Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy
Fallo en el while (principio)
aqui dejo mi codigo:
Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy
Vas demasiado rapido
Vas demasiado rapido, tu error es que has puesto studio en vez de stdio
por fin
ag por fin lo veo. ah Dioni, ¿que me recomiendas para ir más despacio? ¿Hacer programas lo más completo posible con lo studiado en la página? así se practicaría.
Los comienzos son difíciles, pero cuando tu cuerpo supera su límite, la mente pide más. Recomiendo que se pasen todos por mi canal de youtube, en el cual pasarán un buen rato. Advierto que soy novato, asique por más razón pasense y dejen comentarios para que mejore. Mi canal se llama MrTalentCrazy
Hacer programas lo más completo posible con lo studiado en la pá
Hacer programas lo más completo posible con lo studiado en la página
Vale
^^ ok, ¿eso haces tú?
Si
Si
Es stdio.h no studio.h
Es stdio.h no studio.h
Yo también quise hacer un "adivina el numero"...
Pero el programa se cierra cada vez que encuentro el numero escondido (o al menos, supongo que eso es); cuando es mayor o menor funciona perfecto.
Además, no puedo hacer que vaya a la parte de "intentos" (aunque de todos modos he leído que el comando "goto" es bastante odiado, si también pueden darme alternativas se los agradecería muchísimo)
Este es el código:
EDIT: Olvidenlo, ya lo arregle con funciones :)
Lee las reglas
Lee las reglas, concretamente una parte: si lo has solucionado publica la solución. Las reglas: http://www.scenebeta.com/tutorial/normas-del-grupo-scenebeta-com
Hola¡¡¡ ¿alguien sabe si if,
Hola¡¡¡ ¿alguien sabe si if, if...else o if... else / if funciona con char? mi intención es dar por correcta una respuesta con carácteres alfanuméricos (P. Ej. : introducir "3/4 del radio" + intro y que salga: "tu respuesta es correcta." No sé a que valor atribuirlo. si tenéis un programilla (facilón) por ahí os agradecería el code. Un saludo.
¿Cual es mi error?
¿Cual es mi error?
Si saco:
Funciona
Tienes dudas, pasate por aquí
sentencias: if tercera parte
en este programa he notado que existe un error en el orden de las funciones if, else if, else if, pues es hecho conocido en la logica matematica que cuando un numero no es mayor y a su vez, tampoco es menor con respecto a otro entonces son iguales esto es: si (a<100) y (a>100) son proposiciones simultaneamnete falsas entonces (a = 100), asi que segun esto cuando (a = 100) esta asignacion se hace en el ultimo de los casos, por lo que solo tiene un error en el orde de las funciones, este programa. chequen como me ha quedado y si corre:
//sentencias: if tercera parte
#include <stdio.h>
int main()
{
int a;
printf ("Introduce un numero entero mayor o igual que 100. ");
scanf ("%i",&a);
getchar();
if (a > 100)
{
printf ("Perfecto, el numero %i es mayor que 100.\n",a);
}
else if (a < 100)
{
printf ("muy mal, el numero %i es menor que 100.",a);
}
else if (a = 100)
{
printf (" perfecto introduciste un %i.",a);
}
printf ("\n\nPresione ENTER para salir.");
getchar();
return 0;
}
espero que les aclare la duda y si en algo estoy mal haganmelo saber porfavor
no se que pasa
lo compila, introduzco un numero mas pequeño que 100 y me sale la frase de como si hubiera puesto un 100. En cambio si pongo un numero igual o un numero mayor sale la frase correspondiente. Dejo el código.
espero no causar molestias con mis dudas. Salu2
Mi historia, del principio al fin
==
Estás utilizando un = en logar de 2 (asignas en lugar de comparar).
Salu2
Anida bien las llaves porque
Anida bien las llaves porque eso cuesta de entender
Cada llave cerrada debe de estar en la misma columna que su abierta
duda
"else if" e "if", no tienen la misma funcion por lo que veo e hice, da el mismo resultado, cuales son las diferencias entre ellos ;$
muy buenos tutos =]
Salu2!
Creo que un "elseif" siempre
va después de un "if" y si se pudiera traducir al español una condición o sentencia podría ser así:
Si te fijas con el "if" se usan condiciones en este caso es "1 = 1" pero en "else" no se usan. Si se traduce sería:
Si 1 = 1 enconces
función
pero si 2 = 2 entonces
funcion
sino
terminar
Espero haberte ayudado y no confundido. Por cierto creo puedes usar un "if" y un "elseif" dentro de una misma condición pero no dos "if".
Saludos.
SceneBeta.com
Lamento contradecirte, pero
Lamento contradecirte, pero en tu explicación
pero si 2 = 2 entonces
Eso no es un "pero", sería un "si no": "si no, si 2 = 2 entonces".
Es decir Sólo evaluaría la condición si la anterior fue falsa. Un "pero si" haría un if normal independientemente de la evaluación anterior.
Resultado:
El color es rojo
Resultado:
Tiene poco brillo
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Exacto, es que no
encontraba la manera exacta de decirlo, pensé que si decia "si no, si" sería algo confuso, más de lo que ya es.
Saludos.
SceneBeta.com
xD
solo me confundieron mas xS, pero creo k ya entendi, else if = sino, esle = la contra de if, estoy correcto? y si estoy en lo cierto, esto no vendria a ser lo mismo? :o
Lo que pasa
es que debes entender primero "if" sería algo así:
if = Si
else if = si no, si
else = si no
aplicación:
esto comprobara y si 1 es igual a 1 escribirá 1, pero si 2 es igual a 2 escribirá 2, pero si no es ninguna de las anteriores, entonces escribirá "no es igual".
"Traducción":
Si 1 == 1 entonces
escribir "1"
Si no, si 2 = 2 entonces
escribir "2"
Si no
escribir "no es igual"
teminar.
Saludos
PD. si te fijas siempre que hay "if" y "else if" hay un "then", pero en un "else" no.
SceneBeta.com
creo
que ya entendi
gracias!
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
Esto me gusta
Esto no me gusta
Creadores de frases Facebook
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
¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.
Mi review: iPod Touch 4G
Si no sabes
Para que sirve, entonces para que las presentas?.
O por lo menos di el nombre de esas libreria.
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
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!
una duda
me gustaria saber para que sirve eso que se pone quando imprimes alguna cosa lo de "\n"
si alguien lo sabe que lo diga porfavora
los tutoriales estan muy bien todos me salen y los entiendo perfectamente la unico es que me pierdo con algunas palabras raras, es que hace muy poco que he empezado con esto del C.
"/n" es un retorno de linea.
"/n" es un retorno de linea.