ALGORITMOS-BLOQUES CÍCLICOS
Con anterioridad hemos
tratado con algoritmos que permiten la solución de problemas que
requieren seguir una secuencia de pasos de forma lineal y rígida,
además hemos observado la forma que tienen algoritmos en los cuales
el proceso de solución exige la elección por parte del computador
de uno entre varios caminos posibles, en los cuales se utilizan bloques condicionales (Bloque SI-FINSI, SI-SINO-FINSI, Bloque DD);
pero ahora plantearemos otro tipo de problemas que puede ser muy difícil o imposible su solución bajo un esquema lineal rígido.
Por ejemplo: Por
definición matemática, el factorial de un número natural se define
como el producto que se obtiene de la multiplicación de los números
naturales que le anteceden, e inclusive el mismo número, así n!
= 1*2*3*4.......*n. Si se nos
solicita elaborar un programa que calcule el factorial de un número
natural cualquiera, debemos organizar el algoritmo, de forma lógica,
para lo mismo el computador necesita como entrada un dato o valor
correspondiente al número del cual se desea calcular el factorial
(valor de n) , y debe entregar como resultado o salida del proceso el
valor del factorial de n (n!), con lo que se ha observado hasta el
momento el algoritmo resultante sería algo así:
Usaremos
dos variables a saber: N para asignarle el valor del numero natural
(entrada)
F
para asignarle el valor que se va calculando y al final presenta el
factorial.
ALGORITMO
DEL FACTORIAL
Inicio
Lea “Digite
el numero”; N
F
←
1*2*3*4*5
Imprima
“El factorial es”; F
Fin
OBSERVEMOS:
¿que resultado entrega este algoritmo si el valor de N es 3?,
fallaría, puesto que debe entregar como resultado el número 6, que
es 3!, sin embargo nos muestra como resultado 120, que es 5!. para
que funcione con el 3 debemos entonces modificar la linea
F
←
1*2*3*4*5 de tal manera que quede F ←
1*2*3. A pesar que funciona, no es una situación ideal ni aceptable
dentro de las técnicas de programación; puesto que al ser los
computadores máquinas algebraicas, es necesario que se entreguen
soluciones generales a los problemas y no soluciones particulares, EL
PROBLEMA a solucionar es: elaborar
un programa que calcule el factorial de un número natural
cualquiera, y
no solamente el factorial de un número natural en particular,
imagínese usted que cada vez que usted necesitase utilizar un
software, debiera buscar al programador para que este lo altere o
modifique porque los datos han cambiado, es algo sencillamente
inaceptable.
Para
la solución de este tipo de problemas, entonces existe un tipo de
bloque que permite que el control de la ejecución se regrese a un
punto determinado bajo ciertas condiciones lógicas, a estos bloques
se les denomina BLOQUES REPETITIVOS, CÍCLICOS O ITERATIVOS, estos
bloques son usuales en la solución de problemas matemáticos donde
se incluyen sucesiones y progresiones, conjuntos y vectores, matrices
, además de problemas de diversa índole donde no se conoce de
antemano cuantas operaciones es necesario efectuar para llegar a la
solución del problema.
Los
bloques repetitivos son los siguientes:
BLOQUE
MIENTRAS QUE (Mq) o WHILE
En
este bloque se evalúa una condición al inicio del mismo, si esta
condición es verdadera, se procede a ejecutar las instrucciones
incluidas en el , al llegar el control al final del bloque, este
retorna nuevamente al inicio, solamente se rompe el ciclo cuando la
condición inicial es falsa, su estructura es la siguiente:
:
Mq
( CONDICIÓN) haga
: INSTRUCCIONES
A
: REPETIR
DENTRO DEL BLOQUE
:
Fin Mq
Revisemos
un ejemplo para ilustrar mejor el comportamiento del bloque, en este
primer caso para mejorar la explicación numeraremos las líneas del
algoritmo, aunque esta no es una práctica usual ni técnicamente adecuada.
1:
Inicio
2:
I←
1
3:
Mq
( I
< 4) haga
4: Imprima
I
5: I←
I
+
1
6:
Fin Mq
7:
Fin
En
este punto recomiendo al lector que procure iniciar a efectuar las
denominadas PRUEBAS DE ESCRITORIO, las cuales consisten básicamente
en efectuar el ejercicio en el papel, colocando hipotéticamente los
valores que van siendo asignados a cada variable en la medida que el
proceso avanza hasta finalizar con la entrega de resultados.
En
la línea 2, el procesador asigna a la variable I el valor de 1
por
lo tanto (I
=1)
En
la línea 3 inicia el bloque repetitivo Mq,
la proposición (I<4)
se evalúa, el procesador le asigna el valor de Verdadero, puesto que
reemplaza I
por 1, es decir (1<4)
es verdadero.
Por
lo tanto tiene vía libre para ingresar al bloque, es decir ejecutar
las instrucciones de las líneas 4 y 5.
En
la línea 4 muestra el valor que tiene asignada la variable
I en la pantalla ,
es decire el número 1
En
la línea 5 a la variable I
le asigna el valor
resultado de la adición de I+1,
es decir 1+1
por
lo tanto (I=2)
En
la línea 6, regresa el control a la línea 3 (inicio del bloque) y
se evalúa la condición (I<4)
lo cual es verdadero puesto que 2
es menor que 4, por lo tanto ingresa nuevamente al bloque (líneas 4
y 5).
En
la línea 4 muestra el valor que tiene asignada la variable I
en la pantalla , es decire el número 2
En
la línea 5 a la variable
I le asigna el
valor resultado de la adición de I+1,
es decir 2+1
por
lo tanto (I=3)
En
la línea 6, regresa el control a la línea 3 (inicio del bloque) y
se evalúa la condición (I<4) lo cual es verdadero puesto que 3
es menor que 4, por lo tanto ingresa nuevamente al bloque (líneas 4
y 5).
En
la línea 4 muestra el valor que tiene asignada la variable I
en la pantalla , es decire el número 3
En
la línea 5 a la variable I
le asigna el valor
resultado de la adición de I+1,
es decir 3+1
por
lo tanto (I=4)
En
la línea 6, regresa el control a la línea 3 (inicio del bloque) y
se evalúa la condición (I<4)
lo cual es FALSO puesto que 4
NO ES MENOR QUE 4, por lo tanto el control de la ejecución sale
del bloque repetitivo y continúa en la línea 7 que está después del Fin Mq
En conclusión podemos decir que este algoritmo Imprime la sucesión: 1,
2, 3
BLOQUE
HAGA HASTA (Hh) o REPEAT-UNTIL
Este
Bloque tiene un comportamiento parecido al bloque Mq,
pero con la diferencia que la condición se evalúa en la línea que
cierra el bloque ( es decir que las instrucciones que se encuentran
dentro del mismo se ejecutan por lo menos la primera vez, ya que la
condición se evalúa solo al final); en este caso el cíclo se
trunca cuando la condición es VERDADERA, debe tenerse en cuenta esto
en la formulación o elaboración de la condición, esta es
diametralmente contraria a la del bloque Mq
.
Su
estructura puede ser de dos formas:
Primera
forma:
:
Hh
( CONDICIÓN)
: INSTRUCCIONES QUE SE VAN A
: REPETIR
DENTRO DEL BLOQUE
:
Fin Hh
Segunda
forma:
:
Haga
: INSTRUCCIONES QUE SE VAN A
: REPETIR
DENTRO DEL BLOQUE
:
Hasta( CONDICIÓN )
Se
recomienda el uso de la segunda forma, ya que esta entrega mayor
claridad sobre el comportamiento del bloque; el Algoritmo
del ejemplo con el bloque Hh
quedaría así:
GENERA
LA SUCESIÓN 1,2,3
:
Inicio
:
I←
1
:
Haga
: Imprima
I
: I←
I
+
1
:
Hasta (I=4)
:
Fin
En
este algoritmo la variable I inicia con valor de 1(I=1), luego el
control ingresa al bloque repetitivo e imprime el número (1),
luego la variable se incrementa en 1, es decir queda (I=2);
llega
al fin del bloque y evalúa la condición la cual es falsa (2 no es
igual a 4), por lo tanto el control regresa a la linea de inicio del
bloque y ejecuta las instrucciones dentro del mismo,
imprime
el número (2)
y la variable se incrementa en uno nuevamente (I=2+1) es decir (I=3);
llega
al fin del bloque y evalúa la condición la cual es falsa (3 no es
igual a 4), por lo tanto el control regresa a la linea de inicio del
bloque y ejecuta las instrucciones dentro del mismo,
imprime
el número (3)
y la variable se incrementa en uno nuevamente (I=3+1) es decir (I=4);
llega
al fin del bloque y evalúa la condición la cual verdadera (4 es
igual a 4), por lo tanto el control sale del bloque repetitivo y
finaliza el proceso, el computador ha mostrado en pantalla los
valores 1,2
y 3.
BLOQUE
FOR-NEXT (PARA – FIN PARA)
Este
bloque permite repetir un conjunto de instrucciones de manera
cíclica, pero el contról de los ciclos se establecerá mediante la
evaluación de los valores que va asumiendo una variable de tipo
entero, la cual se va incrementando o decrementando en una cantidad
fíja con cada cíclo ( a manera de subindice), esta variable toma
valores en un intérvalo fijo; donde el valor del primer límite del
intervalo corresponde al primer valor de la variable dentro del ciclo
y el segúndo límite al último valor permitido dentro del ciclo;
veamos su estructura: las expresiones entre corchetes pueden variar.
.PARA
[SubIndice]:
[PrimerLimite],
[SegundoLímite],
[Paso]
. CONJUNTO DE
INSTRUCCIONES
. QUE SE REPETIRÁN
.FIN
PARA.
La
dinámica de este bloque repetitivo se puede observar en el ejemplo
de la sucesión 1,2,3.
GENERA
LA SUCESIÓN 1,2,3
.Inicio
.PARA
I=1,3
. Imprima
I
.FIN
PARA
.Fin
La
primera instrucción corresponde al inicio del bloque repetitivo, en
este punto el procesador asigna a la variable I, el valor del primer
límite que en este caso es 1, por lo tanto I=1; inmediatamente
evalúa si ese valor se pasa del segundo límite es decir Si (I>3);
si no se pasa, entonces pasa a ejecutar las instrucciones que se
encuentran dentro del bloque, es decir eneste caso
imprime el valor asignado a la
variable I, imprime 1
llega
al fin del bloque y regresa al inicio.
En
este punto se incrementa el valor de I en 1 y se compara con el
segundo límite; I=I+1, es decir I=1+1, es decir I=2; y se evalúa si
I>3, como esto es falso ejecuta otra vez la instrucción dentro
del bloque.
Imprime
el valor de I, es decir imprime 2
lega
al fin del bloque y regresa al inicio.
En
este punto se incrementa el valor de I en 1 y se compara con el
segundo límite; I=I+1, es decir I=2+1, es decir I=3; y se evalúa si
I>3, como esto es falso ejecuta otra vez la instrucción dentro
del bloque.
Imprime
el valor de I, es decir imprime 3.
lega
al fin del bloque y regresa al inicio.
En
este punto se incrementa el valor de I en 1 y se compara con el
segundo límite; I=I+1, es decir I=3+1, es decir I=4; y se evalúa si
I>3, como esto es verdadero, porque 4>3, salta a la instrucción
que se encuentra inmediatamente después del FIN PARA.
EJERCICIOS:
Elaborar
algoritmos que permitan solucionar los siguientes problemas.
- Generar la sucesión de los primeros N números naturales.
- Generar la sucesión de los primeros N pares positivos.
- Generar la sucesión de los números enteros impares en el intervalo [a,b], donde a y b son enteros.
- Dado un conjunto de N números naturales determinar:
- Cuantos son múltiplos de un número natural X
- Cuales son múltiplos de un número natural X
- Obtener la media aritmética de un conjunto de N números reales.
PRIMER TALLER DE PROGRAMACIÓN
https://docs.google.com/document/d/1jTZPZbHqmj3RCAUeaSjqo0KxpdS7CGDPau-TUD7nWGA/edit?usp=sharing
Comentarios
Publicar un comentario