Foros del Web » Programación para mayores de 30 ;) » Programación General »

Comenzando a programar: 7a- Secuencia de repetición FOR

Estas en el tema de Comenzando a programar: 7a- Secuencia de repetición FOR en el foro de Programación General en Foros del Web. Lección 7: Secuencia de repetición FOR: Introducción: Antes que nada les diré que intentaré hacer estas lecciones un tanto menos densas que las anteriores porque ...
  #1 (permalink)  
Antiguo 11/11/2011, 06:31
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 13 años, 3 meses
Puntos: 21
Comenzando a programar: 7a- Secuencia de repetición FOR

Lección 7: Secuencia de repetición FOR:

Introducción:

Antes que nada les diré que intentaré hacer estas lecciones un tanto menos densas que las anteriores porque se que han sido largas y esto puede desanimar un poco. Sin embargo, ir tirando temas que no se terminen de dar no es mi estilo porque sino el conocimiento no se termina de arraigar. Lo mejor es, dado un tema, comenzarlo y terminarlo de entrada, excepto si este está constituido por muchos temas diferentes, en ese caso es mejor dar cada temita por separado para luego unir lo que haga falta. En esta lección tratamos el tema Repetición, sin embargo este abarca tres estructuras, en esta lección solo veremos una de ellas.

Hemos visto hasta ahora lo básico de la programación, como los tipos, las variables, las constantes y demás. Todos estos, aspectos necesarios para hacer funcionar un código. Ahora bien, lo que nos falta es controlar ese código a nuestro gusto, pudiendo optar por distintos caminos, ir y venir, etc.

La selección nos permite elegir un camino u otro en base a condiciones booleanas (verdaderas o faltas), las cuales pueden ser sumamente complejas. Esto lo permite la sentencia IF en todas sus variantes. Sin embargo no basta con solo elegir un camino u otro, sino que a veces necesitamos repetir tareas, entrando entonces en la repetición.

Por ejemplo, en nuestro programa que resuelve polinomios de segundo grado sería conveniente que si el usuario ingresa el coeficiente a nulo, además de mostrar el mensaje de error, el programa vuelva a pedir que se ingresen los coeficientes, o si en nuestro programa de la instrucción CASE el usuario ingresara una opción que no está en el menú además de notificárselo sería correcto volver a pedir que ingrese una.
Estas repeticiones son indefinidas, o sea, no sabemos cuando terminaremos de repetir lo mismo una y otra vez porque no sabemos cuantas veces se equivocarán los usuarios.

Para ser un poco más claro, una repetición consta justamente de repetir la ejecución de cierta parte de nuestro código fuente, o de todo el mismo. O sea, si nuestro programa debe volver a hacer exactamente lo mismo que ya hizo ¿por qué no usar el código ya escrito?
Aquí entramos entonces en los bucles de repetición. Un bucle es un bloque de código que, por lo general, delimitamos entre Begin y End tal como ya he explicado. Estos bloques de código están pensados para ejecutarse más de una vez para la realización de ciertas tareas que lo requieren.

Existen tres estructuras de repetición; la que vamos a ver a continuación llamada FOR, y otras dos que veremos luego llamadas WHILE…DO y REPEAT…UNTIL.

-------------------------------------------------------------------------------------

Sentencia FOR:

En los ejemplos que dí, como ya dije, hablé de repeticiones indefinidas, o sea que no sabíamos a priori cuántas veces debíamos repetir una misma tarea. Un ejemplo más común es este:
Un teléfono celular normalmente contiene un código PIN de 4 dígitos, el cual se ingresa al encender el teléfono. Por lo general tenemos 3 intentos posibles de ingreso del PIN, o sea, podemos equivocarnos un máximo de tres veces. Si eso sucede el chip SIM se bloquea y nos solicita el código PUK que es larguísimo y además rara vez funciona, pero eso no nos importa. Centrémonos en el hecho del ingreso sel PIN.

Si lo ingresamos bien de entrada, el teléfono inicia su sistema y listo. Si nos equivocamos, vuelve a solicitar el PIN además demostrarnos los intentos restantes que nos quedan. Si lo ingresamos bien, se inicia el sistema y sino, vuelve a solicitar.

Esta es un claro ejemplo de repetición indefinida, porque podemos repetir la misma tarea un máximo de 4 veces o ninguna. Entonces hay dos condiciones de salida: O ingresamos bien el código, o fallamos todas las veces posibles.
Este tipo de repeticiones es muy útil pero no la veremos todavía.

FOR (que en inglés significa PARA o POR) repite una tarea una cantidad específica de veces, ni mas ni menos. O sea que, una vez iniciada, repetirá el código tantas veces como se le haya estipulado, no pudiendo salirse antes. Entonces, esta estructura no sirve para el ingreso del PIN.

Veamos un ejemplo donde escribiremos en pantalla el número 1 diez veces seguidas, primero sin FOR, y luego con:

Código Pascal:
Ver original
  1. PROGRAM sinFOR;
  2.  
  3. BEGIN
  4.    write(1);
  5.    write(1);
  6.    write(1);
  7.    write(1);
  8.    write(1);
  9.    write(1);
  10.    write(1);
  11.    write(1);
  12.    write(1);
  13.    write(1);
  14.  
  15.    readln;
  16. END.
Este es un programa super básico, casi tan básico como el "Hola mundo". He agregado al final un procedimiento readln; para que el programa quede a la espera de un ENTER, así vemos el resultado de su salida.

Aquí hemos repetido lo mismo 10 veces. Entonces, veamos como utilizar FOR para lograrlo:

Código Pascal:
Ver original
  1. PROGRAM conFOR;
  2.  
  3. VAR
  4.    i: integer;
  5.  
  6. BEGIN
  7.    For i:=1 to 10 do
  8.       write(1);
  9.  
  10.    readln;
  11. END.
Como pueden ver, lo primero que hice a diferencia del ejemplo anterior ha sido declarar una variable i. Ahora veamos la siguiente línea

Código:
For i:=1 to 10 do
Esto es lo que llamamos encabezado del FOR. Comenzamos con la palabra reservada FOR. Luego indicamos una variable que debe estar declarada junto con todas las demás. Esta variable debe de ser de un tipo ordinal, por ejemplo, integer o char. Luego le asignamos el valor inicial desde el cual comenzaremos a contar las repeticiones a realizar, en este caso es el número entero 1 porque i es del tipo integer. Luego va la palabra reservada TO y luego el valor final de la variable que usamos antes. En este caso el entero 10. Finalmente va la palabra reservada DO seguida de la instrucción a realizar.

La variable i comenzará valiendo 1 (así lo asignamos nosotros), luego aumentará su valor a 2, luego a 3, a 4, y así hasta llegar a 10, donde terminará la ejecución del FOR.
Esta variable es llamada variable de control justamente porque controla al FOR indicando el tiempo de vida del mismo. Cada vez que la variable de control modifica su valor se sucede lo que se conoce como iteración.

En cada iteración el FOR realiza la instrucción que está luego de su encabezado (luego de DO), en este caso, write(1);
Noten que luego de la palabra DO no va punto y coma ya que esto quebraría el FOR y el compilador chillaría por no encontrar una instrucción a realizar.

Entonces, dado el FOR tal como lo escribí en este ejemplo:

Código:
For i:=1 to 10 do
      write(1);
la ejecución se sucede así:

Primero i comienza valiendo 1, entonces el FOR mira su instrucción y la realiza, en este caso, imprime un 1 en la salida.
Hecho esto el FOR vuelve a su encabezado y aumenta el valor de la variable de control en 1, o sea que ahora i vale 2. Se realiza nuevamente la instrucción, o sea, volvemos a imprimir un 1 en pantalla.
Volvemos al encabezado y el FOR aumenta en 1 la variable de control, o sea que ahora i vale 3. Realizamos la instrucción y repetimos esto.
Cuando i valga 10, el FOR terminará de iterar y pues, el programa continuará su curso.

La sintaxis general de un FOR es la siguiente:

Código:
FOR variable:= valor_inicial TO valor_final DO
Instrucción;
Por ejemplo, si quisiéramos imprimir la letra A unas 10 veces la declaración del FOR sería algo así:
Código:
For i:=1 to 10 do
   Write(‘A’);
En este caso veríamos una salida como esta: AAAAAAAAAA

NOTA: El valor final del encabezado del FOR debe ser del mismo tipo que el inicial, o sea, del mismo tipo que la variable de control (por ejemplo puede ser for i:= ‘a’ to ‘z’ do).

¿Resulta realmente útil poder repetir solo una única instrucción? Realmente NO, por lo tanto, si dentro de un FOR queremos realizar más de una cosa, debemos delimitar el bloque por Begin y End.
De este modo, la verdadera forma general de un FOR sería así:

Código Pascal:
Ver original
  1. FOR variable:= valor_inicial TO valor_final DO
  2. Begin
  3.    Instruccion1;
  4.    Instruccion2;
  5.    . . .
  6.    InstruccionN;
  7. End;

-------------------------------------------------------------------------------------

Uso de la variable de control:

Como he explicado, en cada iteración la variable de control va tomando valores, por lo tanto, muchas veces (y en general) se utiliza esta variable para realizar tareas dentro de un FOR, no solo para aumentar o disminuir. Veremos un ejemplo entonces donde, usando la variable de control del FOR imprimimos en pantalla los números del 1 al 10 separados por un espacio:

Código Pascal:
Ver original
  1. PROGRAM Del1al10;
  2.  
  3. VAR
  4.    i: integer;
  5.  
  6. BEGIN
  7.    FOR i:= 1 to 10 DO
  8.       write(i,' ');
  9.  
  10.    readln;
  11. END.

¿Se entiende? Esto no es nada complicado. Podemos usar la variable de control dentro del FOR para realizar cualquier tarea, incluso modificar su valor, sin embargo les diré esto

¡¡¡NUNCA MODIFICAR LA VARIABLE DE CONTROL DE UN FOR!!!

Si me hacen caso, se ahorrarán cientos de miles de dolores de cabeza.

Ahora veamos un ejemplo en el que imprimimos en pantalla los 10 primeros números pares. Por si no lo saben, decimos que un número es par si es divisible entre 2, o sea, si el resto de la división entera es igual a 0, lo que en Pascal equivale a decir que VALOR MOD 2= 0.

Imprimiremos en pantalla los 10 primeros número pares a partir del 0 sin incluir a este:
Código Pascal:
Ver original
  1. PROGRAM pares;
  2.  
  3. Var
  4.     i: integer;
  5.  
  6. BEGIN
  7.   write('Los 10 primeros pares son: ');
  8.  
  9.   For i:=1 to 20 do
  10.      If i mod 2= 0 then
  11.         write(i,' ');
  12. END.
El análisis continúa en la parte b de esta lección.

Última edición por Kyshuo; 17/11/2011 a las 10:48 Razón: Mejorar las vistas de código fuente

Etiquetas: entrada, programa, secuencia, sistema, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:52.