Continuamos entonces con el análisis del código de la parte a:
En la línea 7 mostramos al usuario un mensaje. En la novena línea comienza la declaración del FOR donde inicializamos
i en 1 y continuaremos hasta que valga 20. El IF en la línea 10 se encarga de ver si el valor actual de
i es par, o sea si el resto de dividirlo entre 2 es igual a 0. En ese caso imprimimos su valor y un espacio, sino no hacemos nada y esperamos la siguiente iteración.
Vuelvo a repetirles que al proceso de repetir varias veces un mismo segmento de código se lo llama iteración. Nuestro FOR iterará 20 veces.
Es importante jamás modificar la variable de control mientras se está ejecutando el FOR, o sea, no hacer por ejemplo
i:= 10 dentro del FOR ya que eso produce errores muy inesperados y dependen mucho del compilador usado para crear el programa. Puede usarse el valor de la variable de control para todo lo que se necesite, incluso incluirlo en expresiones y condiciones tal como en nuestro ejemplo, pero nunca modificarlo (¿se los tengo que gritar nuevamente jeje?.
Ahora veamos el mismo programa, pero solo que esta vez le pediremos al usuario que ingrese cuantos números pares quiere visualizar:
Código Pascal:
Ver originalPROGRAM PrimerosPares;
Var
i, pares: integer;
BEGIN
write('¿Cuantos pares quieres visualizar? ');
readln(pares);
writeln;
write('Los primeros ',pares,' pares son: ');
pares:= pares*2;
For i:=1 to pares do
If i mod 2= 0 then
write(i,' ');
END.
En la línea 8 mostramos el mensaje al usuario para, en la siguiente línea, pedirle que ingrese cuántos pares desea ver.
En la línea 11 usamos el procedimiento
writeln sin parámetros para que imprima una línea en blanco. En la línea 12 mostramos un mensaje al usuario.
En la línea 14 hay algo nuevo. A la variable
pares le asignamos su propio valor multiplicado por 2 ya que si el usuario desea ver, por ejemplo, los diez primeros pares nosotros deberíamos iterar del 1 al 20. Esto de asignar a una variable un valor que depende de su valor anterior es muy común en la programación. A dichas variables se las conoce como acumuladores. Esto lo veremos en más detalle cuando trabajemos con WHILE y REPEAT.
En la línea 16 cambiamos el valor final del encabezado del FOR por la variable
pares. Esto es lo más común en el uso de esta instrucción. No hace falta indicar un valor nosotros mismos, sino que podemos colocar nombres de variables, constantes o incluso expresiones matemáticas siempre y cuando el tipo de la variable de control y el del valor final sean el mismo y a su vez estos sean ordinales.
----------------
Veamos otro ejemplo sencillo, solo que ahora le diremos al usuario que indique el rango de números entre los cuales desea ver los pares, o sea, por ejemplo, si quiere ver los pares entre el 10 y el 30, que lo indique él mismo:
Código Pascal:
Ver originalPROGRAM RangoDePares;
Var
i, inico, fin: integer;
BEGIN
write('Ingrese el rango numérico para visualizar pares: ');
readln(inicio,fin);
writeln;
write('Los pares en el rango del ',inicio,' al ',fin,' son: ');
For i:=inicio to fin do
If i mod 2= 0 then
write(i,' ');
readln;
END.
En este caso vemos que hemos puesto variables como
valor_inicial y como
valor_final. Es posible colocar funciones, expresiones y demás.
-------------------------------------------------------------------------------------
Anidación del FOR:
Veamos un ejemplo donde el usuario ingresará un número que indicará el largo del lado de un cuadrado y dibujaremos este con el carácter
* (asterisco):
Código Pascal:
Ver originalPROGRAM Cuadrado;
Const
caracter= '*';
Var
i, j, lado: integer;
BEGIN
write('Ingresa el largo del lado: ');
readln(lado);
writeln;
For i:=1 to lado do
begin
For j:=1 to lado do
write(caracter);
writeln;
end;
END.
Lo interesante en este programa es analizar lo que sucede desde la línea 15 en adelante. Tenemos dos FOR, uno dentro de otro. Lo primero a resaltar es el uso de
dos variables de control diferentes, una para cada FOR. Si usáramos la misma variable para ambos uno modificaría la del otro y se ocasionaría un caos. Si quieren prueben este programa así como está y luego con la misma variable de control. Es probable que el compilador los regañe por eso y se produzca un error en tiempo de compilación.
Veamos, cuando
i vale 1 entramos al FOR principal. Allí tenemos otro FOR el cual se ejecutará hasta el final antes de volver al primer FOR. Cuando
j vale 1 imprimimos un
* (está definido en la constante
caracter). Luego
j vale 2 y se imprime un segundo
* en la misma línea ya que estamos usando un procedimiento
write. Así continuamos hasta que se imprimen tantos
* en una línea como lo indique la variable
largo. Ahora pasamos a la línea 20 del programa donde está
writeln para escribir una línea en blanco, o sea, para bajar un renglón.
Hemos vuelto al encabezado del FOR principal, ahora
i vale 2.
Volvemos a entrar en el FOR principal y el FOR de dentro vuelve a comenzar con
j en 1. Imprime los
*, se baja un renglón y así hasta que
i sea igual al valor de la variable
lado.
Notar que la instrucción
writeln de la línea 20 está dentro del FOR principal pero no forma parte del FOR interno.
-------------------------------------------------------------------------------------
FOR decreciente:
Otra forma del FOR es la siguiente:
Código:
For variable:=valor_inicial downto valor_final do
Instrucción;
Esto funciona exactamente igual a la forma anterior del FOR con la diferencia de que
valor_inicial es mayor que
valor_final. O sea que la variable de control irá decreciendo en vez de aumentando. Por ejemplo:
Código:
For i:=20 downto 1 do
Instruccion;
En este caso
i comenzará valiendo 20, luego 19, luego 18, y así hasta llegar al 1.
NOTAS: Nunca asuman el valor que tendrá la variable de control una vez finalizado el FOR. En este ejemplo de FOR que va de 20 a 1 uno podría decir que
i vale 1 al final, pero esto puede no ser así, depende del compilador.
Si van a volver a usar esta variable deberán inicializarla ustedes mismos con el valor apropiado.
A continuación les planteo una serie de ejercicios de aplicación del FOR y algunos temas ya vistos. Por favor, no continúen si no son capaces de resolver estos ejercicios. Todas las dudas postéenlas aquí.
P.D: Díganme si estoy yendo muy rápido.
-------------------------------------------------------------------------------------
Ejercicio 1: Determinen cuáles de los siguientes fragmentos de código producen la misma salida:
a)
Código:
FOR i:=1 TO 3 DO
FOR j:= i+1 TO 3 DO
write(i,j)
b)
Código:
FOR i:=1 TO 3 DO
write (i, i+1)
c)
Código:
FOR i:=1 TO 4 DO
IF (i=1) OR (i=4) THEN
write(i)
ELSE
write(i,i)
---------------------------------------------------------------- Ejercicio 2: Escriban un programa que lea desde el teclado un valor entero
n. A continuación, el programa deberá leer
n enteros y luego desplegar el mayor y el menor de ellos.
Ejemplo de entrada:
n=8
Ingrese 8 enteros: 5 12 36 4 21 95 12 18
Ejemplo de salida:
El mayor entero ingresado es: 95
El menor entero ingresado es: 4 ---------------------------------------------------------------- Ejercicio 3: Escriban un programa que lea de la entrada estándar 5 valores positivos, todos menores que 60 y produzca una gráfica de barras horizontales similar a la que se muestra en el ejemplo para estos datos:
Ejemplo de entrada:
Ingrese 5 valores: 5 12 17 35 8
Ejemplo de salida:
*****
************
*****************
***********************************
******** ---------------------------------------------------------------- Ejercicio 4: Escriban un programa que lea de la entrada estándar un carácter
c y un entero
n. El programa debe desplegar un triángulo de
n líneas formado por el carácter c según se muestra en el siguiente ejemplo:
Ejemplo de entrada:
n=8
c=$
Ejemplo de salida:
$$$$$$$$
$$$$$$$
$$$$$$
$$$$$
$$$$
$$$
$$
$
Mucha suete.