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:          II + 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
:              II + 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.

  1. Generar la sucesión de los primeros N números naturales.
  2. Generar la sucesión de los primeros N pares positivos.
  3. Generar la sucesión de los números enteros impares en el intervalo [a,b], donde a y b son enteros.
  4. Dado un conjunto de N números naturales determinar:
    1. Cuantos son múltiplos de un número natural X
    2. Cuales son múltiplos de un número natural X
  5. 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

Entradas populares de este blog

Portafolio de evidencias digital

LENGUAJE DE PROGAMACIÓN JAVA- SUBPROGRAMAS Y PARÁMETROS.

ALGORITMOS – BLOQUES CONDICIONALES