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

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

Estas en el tema de Comenzando a programar: 7b- Secuencia de repetición FOR en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 11/11/2011, 06:33
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 13 años, 11 meses
Puntos: 21
Comenzando a programar: 7b- Secuencia de repetición FOR

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 original
  1. PROGRAM PrimerosPares;
  2.  
  3. Var
  4.      i, pares: integer;
  5. BEGIN
  6.  
  7.   write('¿Cuantos pares quieres visualizar? ');
  8.   readln(pares);
  9.  
  10.  writeln;
  11.  write('Los primeros ',pares,' pares son: ');
  12.  
  13.  pares:= pares*2;
  14.  
  15.  For i:=1 to pares do
  16.     If i mod 2= 0 then
  17.        write(i,' ');
  18. 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 original
  1. PROGRAM RangoDePares;
  2.  
  3. Var
  4.       i, inico, fin: integer;
  5. BEGIN
  6.  
  7.   write('Ingrese el rango numérico para visualizar pares: ');
  8.   readln(inicio,fin);
  9.  
  10.  writeln;
  11.  write('Los pares en el rango del ',inicio,' al ',fin,' son: ');
  12.  
  13.  For i:=inicio to fin do
  14.     If i mod 2= 0 then
  15.        write(i,' ');
  16.  
  17.  readln;
  18. 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 original
  1. PROGRAM Cuadrado;
  2.  
  3. Const
  4.     caracter= '*';
  5.  
  6. Var
  7.     i, j, lado: integer;
  8.  
  9. BEGIN
  10.  write('Ingresa el largo del lado: ');
  11.  readln(lado);
  12.  
  13.  writeln;
  14.  
  15.  For i:=1 to lado do
  16.  begin
  17.     For j:=1 to lado do
  18.        write(caracter);
  19.  
  20.     writeln;
  21.  end;
  22. 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.

Última edición por Kyshuo; 22/11/2011 a las 12:01 Razón: Mejorar las vistas de código fuente
  #2 (permalink)  
Antiguo 16/12/2011, 15:06
Avatar de ojodegato  
Fecha de Ingreso: noviembre-2011
Mensajes: 10
Antigüedad: 13 años
Puntos: 0
Respuesta: Comenzando a programar: 7b- Secuencia de repetición FOR

Hola. He iniciado el estudio de este curso y estoy encantada con él. Mi primera duda ha sido en este tema . Creo que no he comprendioo bien el uso anidado del FOR. ¿ Podría alguien explicarme la solución del ejercicio 1, del tema 7b, en concreto , el desarrollo de la opción a. Según lo que entendido, me salían igual todas las opciones: 122334, lo que ya he visto, es incorrecto. Muchas gracias
PD. ¿Es este la vía adecuada para exponer alguna duda?

Última edición por ojodegato; 16/12/2011 a las 15:13
  #3 (permalink)  
Antiguo 16/12/2011, 16:32
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Comenzando a programar: 7b- Secuencia de repetición FOR

El curso ha sido eliminado porque al igual que aquí lo publicaba en otras web para ayudar a mucha gente. Como la administración quería que esta fuera la única página en tener el curso lo quitaron.

Visita

http://www.foro.lospillaos.es/curso-...-0-vt7888.html

Y síguelo desde allí. Postea en esa comunidad para preguntar tus dudas.

Saludos.
  #4 (permalink)  
Antiguo 17/12/2011, 11:45
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 9 meses
Puntos: 1329
Respuesta: Comenzando a programar: 7b- Secuencia de repetición FOR

El curso no se ha eliminado, todos tus post están intactos: http://www.forosdelweb.com/search.ph...&starteronly=1

Saludos
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 22/12/2011, 08:13
Avatar de ARICARRARO  
Fecha de Ingreso: diciembre-2010
Ubicación: México
Mensajes: 227
Antigüedad: 14 años
Puntos: 10
Respuesta: Comenzando a programar: 7b- Secuencia de repetición FOR

Buen tutorial

Etiquetas: entrada, programa, secuencia, 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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 10:23.