Cargando

viernes, 28 de diciembre de 2012

Más teoría: For (Bucles)

Espero que hayan pasado una buena Navidad (PD: ¿Les gusta el pequeño cambio de look navideño?), ya nos estamos acercando a un nuevo año y espero que ustedes estén satisfechos con la página hasta ahora. ¿Recuerdan el uso de if/else (si/sino) y de switch-case? Pues ahora aprenderemos un poco de for, while y aleatorios. Como a mí me gusta siempre decirles qué va a venir para que más o menos tengan un cierto control con las lecciones, aquí viene:

Continuando con lo dicho anteriormente, se darán cuenta que he tocado lo más básico, tanto de hardware como de programación hasta ahora. Por lo tanto, terminando los números aleatorios, veremos hardware de nuevo, de manera menos superficial, luego por fin aprenderás a programar realmente con un lenguaje de programación y veremos lo que te he subrayado en las primeras lecciones: bases de datos, sistemas operativos y muchas cosas más.

Haruhi navidad
¡Terminemos de una vez con for, while y aleatorios para empezar un nuevo año con nuevas lecciones!


¿For?
Pues sí, lo que pasa es muy buena parte del código que vas a aprender para programar está en inglés. Pero tranquilo, a programar con un lenguaje de programación (¡duh!) lo vas a aprender después de año nuevo, más adelante. Por ahora, concéntrate en el pseudocódigo. (Como te expliqué anteriormente, el pseudocódigo lo usan bastante para centrarse únicamente en el buen desarrollo de la lógica del programa, en vez de estar perdiendo el tiempo tratando de recordar cómo era la sintaxis del código del lenguaje con el que vas a hacerlo, ya que sabes tantos lenguajes de programación que a veces te puedes enredar).

¿Entonces, espera, qué es For?

Ah sí, es verdad, aún no te he explicado, es sencillamente para lograr hacer un ciclo (bucle), y en este caso, lo usaremos en español "para". Para empezar, ¿Sabes lo que es un ciclo?

Esto es muy importante, porque en la programación de programas se ha llegado a una conclusión, de que cualquier problema, cualquier programa que desees crear, el 90% se logra usando secuencias (Orden, primero hacer el paso 1, luego luego el paso 2, y así sucesivamente), decisiones (si/sino, ya que todos los problemas y todo en nuestra vida está llena de decisiones) y ciclos (Permiten repetir instrucciones bajo ciertas condiciones, lo cual genera una mayor calidad y menos redundancia de código).

Estructura de un for:

Para(inicialización de variables a usar; intervalo que se debe cumplir; incrementos o decrementos) 
secuencia de instrucciones (Cuerpo del For)
Fin_Para

Un poco de explicación:

Como puedes apreciar, hay ciertas condiciones que se deben cumplir antes de realizar un ciclo. En realidad el For envuelve al While, ya que con los dos se puede hacer lo mismo, lo único que cambia es la sintaxis. Por lo tanto, depende de ti cuál te gusta usar más; te voy a enseñar los dos, en donde te darás cuenta que son usados para las mismas circunstancias y luego tú decides.

La primera sentencia dentro del paréntesis es la declaración de variables, generalmente ahí se declara una sola variable que servirá como contador. Pero, ese no siempre es el caso. Ten en cuenta, que en las tres sentencias, si necesitas tener más de una sola condición o variable o incremento, solo debes separarlos por comas. (Justamente por esa opción de tener múltiples, se separan las sentencias principales con punto y coma ";").

Orden según lo que la computadora ejecuta y entiende:

1. Lee y crea las variables que has escrito en la primera sentencia.
2. Si o Mientras cumpla con el intervalo, desarrolla todas las instrucciones que estén en el cuerpo del For.
3. Al terminar con ello, se realizan los incrementos.
4. Si al incrementar la variable sigue estando dentro del intervalo, entonces regresar al paso 2.
5. Una vez la variable ya no se encuentre dentro del intervalo, entonces Fin_Para y acaba todo.

Espero que se haya entendido, para aclarar más las cosas, vamos a ver un ejemplo.

Ejemplos simples para entender For (En forma ascendente)

Veamos, qué tal si te han regañado y quieren, como castigo, que escribas en una hoja cien veces "No debo comportarme así" y que lo entregues al día siguiente.

Es uno de los ejemplos más básicos que te puedo mostrar para que veas mejor la estructura y funcionamiento de For (Para)

cadena mensaje = "No debo comportarme así"
Para (entero i = 1; i<=100; i++)
imprimir cadena
Fin_Para

En este ejemplo, usamos For y además un contador. ¿No les enseñé contadores ni acumuladores? Vaya, pues yo siempre trato de enseñarles de la manera más fácil posible. Contadores y acumuladores no es difícil. Miren:

¿Qué hace un contador? Se encarga de contar. Almacena en variables y gracias a un switch-case o un For o un While logra su propósito, ya que solito no puede contar nada. Lo mismo pasa con un acumulador, solo que éste acumula en una variable.

La estructura de ambos es así: (Supongamos que la variable en la que queremos almacenar es la "i", lo cual es muy típico).

Contador:
i++
i--
Acumulador:
i+=otraVariable
i-=otraVariable
i*=otraVariable (Menos usada que las anteriores)

¿A qué se refiere i++? Ya lo verán cuando les explique el For que hicimos hace poco, que es lo siguiente que voy a hacer:

La condición o el intervalo que requiere nuestro ciclo para que se imprima la cadena previamente declarada es que el contador que hemos creado (Como está dentro del For, no se necesita declararlo como hicimos con la cadena) sea menor o igual a 100, ya que queremos que lo imprima 100 veces.

Veamos el orden según este caso:

1. Crea la variable mensaje de tipo cadena ya inicializada (Ya posee un valor).
2. Pasa a la siguiente línea (es una secuencia, como vimos arriba) y se encuentra con un For (Un ciclo). Crea el contador "i" y lo inicializa en uno.
3. Lee el intervalo o condición. ¿Uno es menor o igual a 100? Como la respuesta es sí, desarrolla el cuerpo del For. Imprime (OJO: Una sola vez) el mensaje.
4. Va a la tercera parte (i++). Entonces, el "i" que valía "uno", ahora va a valer "dos" (Ya que i++ solo se encarga de incrementar en uno en valor que tenga la variable).
5. Como "dos" es menor o igual a 100, entonces sigue dentro de la condición para permancer en el ciclo. Por lo tanto, imprime por segunda vez el mensaje.
6. El valor de "i" que vale "dos", ahora va a ser "tres".
7. Y así sucesivamente hasta que llegue a 101, como no cumple con el intervalo. Ahí acaba el For y ya no imprime nada más.

NOTA:
Si te confunde un poco que empiece en "uno", entonces inicializa el contador en cero, pero en el intervalo ya no lo iguales, sino imprimirá 101.

cadena mensaje = "No debo comportarme así"
Para (entero i = 0; i<100; i++)
imprimir cadena
Fin_Para


Espero que se haya entendido el ejemplo, recuerda que si tienes dudas puedes dejarme un comentario, en caso no tengas ninguna cuenta, puedes simplemente comentar con tu nombre o como anónimo.

Pasemos al segundo ejemplo:

¿Qué tal que se sumen números desde el 1 hasta un número cualquiera que el usuario ingrese?

entero num, suma =0
leer num
Para(entero i=1;i<=num;i++)
suma += i
Fin_Para
imprimir suma

Para entender mejor el código, hagamos una pequeña prueba de escritorio, ¿De acuerdo?. Recuerden que "suma += i" suma es un acumulador.

Supongamos que el número que han ingresado es 3 (Un número pequeño, solo para probar el código, ¿No queremos probar cómo funciona hasta el 50, o sí?).

Entonces:

Contador "i":1
suma = 0+1 = 1
(i++) i = 2
suma = 1+2 = 3
(i++) i = 3
suma = 3+3 = 6
(i++) i = 4

Pero 4 se sale del intervalo, porque en esta prueba el número ingresado es 3 (i<=3). Por lo tanto, termina el for y se va a la siguiente línea e imprime la suma. Como ven, la suma quedó resultando "6" . ¡Lo cual es correcto!, ya que sumamos del 1 al 3:

1+2+3 = 6

Las pruebas de escritorio se pueden hacer de diversas formas, si tú quieres lo puedes hacer de manera gráfica en un papel. Dibujas cómo quedaría tu programa y un botón que diga calcular o algo así. El asunto es que te salga el mismo resultado y trates de seguir línea por línea tu código y respetar las condicionales como si fueras una computadora.


Haruhi lección while
Ya se ha vuelto muy largo, nos vemos en la siguiente lección: While y aleatorios.


No hay comentarios:

Publicar un comentario