sábado, 31 de mayo de 2008

unidad VI

UNIDAD VI. ESTRUCTURAS DE REPETICION.


Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando un esquema tan sencillo, en ocasiones es necesario repetir una misma acción un número determinado de veces o evaluar una expresión y realizar acciones diferentes en base al resultado de dicha evaluación.

Para resolver estas situaciones existen las denominadas estructuras de control que poseen las siguientes características:

• Una estructura de control tiene un único punto de entrada y un único punto de salida.
• Una estructura de control se compone de sentencias o de otras estructuras de control.

Tales características permiten desarrollar de forma muy flexible todo tipo de algoritmos aún cuando sólo existen tres tipos fundamentales de estructuras de control:

• Secuencial.
• Alternativa.
• Repetitiva.

A lo largo de esta lección se presentarán las distintas estructuras de control, la forma de representarlas en la notación algorítmica y las correspondientes sentencias FORTRAN para poder utilizarlas en nuestros programas.

Estructura repetitiva.

La estructura repetitiva o iterativa permite, como su propio nombre indica, repetir una acción (o grupo de acciones); dicha repetición puede llevarse a cabo un número prefijado de veces o depender de la evaluación de una expresión lógica. Existen tres tipos de estructuras repetitivas: desde-hasta, mientras y repetir-hasta.



6.1 REPETIR MIENTRAS.
En la solución de algunos problemas es necesario ejecutar repetidas veces una instrucción o un conjunto de instrucciones. El número de repeticiones se conoce con anterioridad, mientras que en otras depende de cálculos o estados de variables que se dan dentro de la solución del problema.
Para solucionar este tipo de problemas se utiliza un tipo de estructuras a las que se conocen como estructuras de repetición, bucles o ciclos. Un ciclo consiste en un grupo de acciones que se ejecutan repetidas veces dependiendo del cumplimiento de una condición.
Ciclo Mientras.- Este ciclo consiste en un conjunto de instrucciones que se repiten mientras se cumpla una condición. De igual manera que en los condicionales, la condición es evaluada y retorna un valor lógico, que puede ser verdadero o falso. En el caso del ciclo mientras las instrucciones contenidas en la estructura de repetición se ejecutarán solamente si al evaluar la condición se genera un valor verdadero; es decir, si la condición se cumple; en caso contrario, se ejecutará la instrucción que aparece después de Fin mientras.
A diferencia de otros ciclos, el ciclo mientras comienza evaluando la expresión condicional, si el resultado es verdadero se ejecutarán las instrucciones que estén entre el mientras y el fin mientras, al encontrarse la línea fin mientras se volverá a evaluar la condición, si se cumple se ejecutarán nuevamente las instrucciones y así sucesivamente hasta que la condición deje de cumplirse, en cuyo caso, el control del programa pasa a la línea que aparece después de fin mientras. Si en la primera pasada por el ciclo mientras la condición no se cumple las instrucciones que están dentro del ciclo no se ejecutarán ni una sola vez. En diagrama de Chapin (N-S), esta estructura tiene la presentación:
Ejemplos:
1. Un algoritmo para mostrar los números del 1 al 10.
Definición del problema Mostrar listado de números de 1 a 10. Análisis del problema Datos de entrada: ninguno Datos de salida: número Proceso: ninguno Diseño de la solución
Este es un algoritmo muy trivial pero permite revisar la aplicación de la estructura de repetición Mientras. Lo primero a tener en cuenta es la declaración e inicialización de la variable: num = 1. En este caso no solo se está declarando una variable de tipo entero, sino también se está asignando un valor inicial, que será el primer número mostrado. La condición o expresión relacional con la cual se implementa el ciclo es num <= 10, dado que num inicia en 1, la primera vez que se encuentra la instrucción mientras, la expresión es verdadera, por tanto se ejecutan las instrucciones que aparecen al interior del ciclo. Después de haber mostrado el contenido de la variable num, éste cambia, se incrementa en 1.
2. Leer n números y encontrar el valor promedio, el mayor y el menor.
Definición del problema Encontrar el promedio, el mayor y el menor de varios números Análisis del problema Para solucionar este problema, lo primero que hay que plantear es cómo se sabrá cuando terminar la lectura de datos, ya que no se especifica la cantidad de números que serán ingresados y en el planteamiento del problema no se da ninguna condición que permita saber cuando terminar el ciclo. Este tipo de problemas es muy común. Hay dos formas de abordar este ejercicio, la primera consiste en preguntar al usuario con cuantos números desea trabajar y guardar dicho valor en una variable que se utilizará para establecer el ciclo. La segunda consiste en preguntar después de leer cada dato, si se desea ingresar otro. En este ejercicio se utilizará la primera estrategia. Datos de entrada: cantidad de números, número Datos de salida: promedio, mayor y menor Procesos: suma = suma + número promedio = suma / cantidad de números Diseño de la solución
3. La serie Fibonacci comienza con los números: 0, 1, 1, 2, 3, 5, 8, 13, 21, …
Se requiere un algoritmo para generar los primeros 10 números. Definición del problema Generar los 10 primeros números de la serie fibonacci Análisis del problema La serie fibonacci se genera a partir de dos valores iniciales que son el 0 y el 1, que al sumarse dan como resultado 1. El siguiente número se obtiene sumando el último número obtenido con el anterior, en este caso 1 + 1 = 2, luego será 2 + 1 = 3 y así sucesivamente. Datos de entrada: ninguno Datos de salida: serie fibonacci Procesos: a = 0 b = 1 f = a + b Diseño de la solución


6.2 REPETIR...HASTA.
Una variante de la sentencia mientras, es la sentencia repetir. Una de las características de la sentencia mientras es que la condición lógica se evalúa al principio de cada iteración.
En particular, si la condición es falsa cuando la sentencia comienza, entonces el bucle no se ejecuta nunca.
La sentencia repetir-hasta especifica un bucle condicional que se repite hasta que la condición se hace verdadera.
Después de cada iteración el cuerpo del bucle evalúa la condición. Si la condición es verdadera, el bucle se termina y se sale de el, ejecutándose la siguiente sentencia. Si la condición es falsa el bucle se repite.
El pseudocódigo es el siguiente:
Repetir.Sentencias.Hasta (expresión lógica).

Ejemplo:
Volvamos a realizar el ejemplo anterior, donde se desea obtener la suma de tres números ingresados por el usuario. Para acortar, solo colocaré la parte donde se efectúa la suma:
Escribir ("Cuántos números desea ingresar")leer (Total_num)contador <-- 0suma <-- 0repetir leer (núm.) suma <-- suma + numero contador <-- contador + 1hasta (contador = Total_num).
En un bucle repeat...until, primero se ejecuta el bloque de instrucciones y, después, se evalúa la condición. En el caso de que ésta sea falsa, se vuelve a ejecutar el bloque de instrucciones. Y así sucesivamente, hasta que, la condición sea verdadera.Por consiguiente, cuando el flujo de un programa llega a un bucle repeat...until, existen dos posibilidades:
Se ejecuta el bloque de instrucciones y, después, si la condición se evalúa a verdadera, el bloque de instrucciones no se vuelve a ejecutar, de manera que, el bucle repeat...until finaliza, habiendo realizado una sola iteración.
Se ejecuta el bloque de instrucciones y, a continuación, si la condición se evalúa a falsa, el bloque de instrucciones se vuelve a ejecutar. Y así sucesivamente, hasta que la condición sea verdadera.
El de un bucle repeat...until puede ejecutarse una o más veces (iteraciones). También hay que prevenir que el bucle no sea infinito.Una instrucción repetitiva repeat...until permite ejecutar repetidamente (una o más veces) un bloque de instrucciones, hasta que, una determinada condición sea verdadera.Ejemplo 1: De modo que, utilizando un bucle repeat...until, 3.1 Repetitiva mientras, se puede resolver con el código:
program EJE13101;uses Crt;var Contador : Integer;begin ClrScr; GotoXY( 4, 2 ); Contador := 1; { Inicializacion del contador } repeat Write( Contador, ' ' ); { Salida } Contador := Contador + 1; { Incremento } until Contador > 10; { Condicion }end.

Programa (.PAS):
El bucle repeat...until puede iterar una o más veces, por tanto, cuando un bloque de instrucciones debe iterar al menos una vez, es mejor utilizar un bucle repeat...until que un bucle while.


6.3 REPETIR DESDE.

La estructura repetitiva desde (for) es aquella en que el número de iteraciones (repeticiones) del bucle se conoce de antemano y por ello no se precisa poner ninguna condición de salida para detener el bucle. En su lugar, un contador cuenta el número de iteraciones fijadas y se termina cuando llega al valor final.
La estructura for sirve para repetir un código dependiendo de un contador. Un ejemplo:int contador;for (contador = 1; contador<=10; contador++){ printf(“Repetición numero %d\n”, contador);};Primero se crea la variable contador de tipo entero (será la variable de control en el for). Luego se ejecuta la estructura for iniciando la variable contador en 1. Luego se verifica que se cumple la condición contador<=10 y se ejecuta el bloque dentro de la estructura, o sea, imprime en pantalla Repetición número 1.Luego la variable contador es incrementada en uno con la expresión contador++ y el ciclo se inicia otra vez. La variable contador ahora vale 2, por lo tanto se verifica la condición y se vuelve a ejecutar el código. Este proceso se ejecuta hasta que contador toma el número 11 y la condición se hace falsa y no ejecuta el bloque.
Este código imprimirá en pantalla lo siguiente:
Repetición numero 1Repetición numero 2Repetición numero 3Repetición numero 4Repetición numero 5Repetición numero 6Repetición numero 7Repetición numero 8Repetición numero 9 Repetición numero 10
Las tres expresiones que componen la estructura for en C son opcionales, por lo tanto se pueden omitir en ciertos casos. Si se omite la primera (la inicialización de la variable de control), significa que la variable se inicializa en otra parte del programa. Si se omite la segunda expresión, la estructura for entraría en un ciclo infinito, lo cual es considerado un error. Si se omite la tercera expresión significa que la variable de control es calculada dentro del bloque de for.La tercera expresión puede ser tanto un incremento como un decremento en uno o más. También puede ser más compleja agregando más instrucciones con el uso de la coma. Por ejemplo:for (contador = 1; contador<=10; suma += contador, contador += 2)La tercera expresión no sólo suma contador de dos en dos sino que además en cada repetición ejecuta la operación suma += contador.Índice - Anterior: Estructura de repetición while - Siguiente: Estructura de repetición do-while
El funcionamiento de la estructura es el siguiente:
• En primer lugar, se asigna a la variable índice el valor de inicio.
• El bucle se ejecuta mientras índice no alcance el valor de fin.
• En cada iteración el valor de índice es incrementado según el paso indicado y se ejecuta la acción o grupo de acciones encerrados en el bucle.
• En caso de que no se indique ningún paso el que se empleará será +1.

1. Las estructuras de control permiten alterar el flujo secuencial de los algoritmos que hemos visto hasta el momento.

2. Una estructura de control:
• Tiene un único punto de entrada y un único punto de salida.
• Se compone de sentencias o de otras estructuras de control.

3. Existen tres tipos fundamentales de estructuras de control:
• Secuencial.
• Alternativa.
• Repetitiva.

4. La estructura secuencial es una lista consecutiva de acciones donde el orden de aparición indica el orden de ejecución.

5. La estructura alternativa se presenta en tres formas:
• Simple.
• Doble.
• Multialternativa.

6. La estructura alternativa simple permite evaluar una expresión lógica y ejecutar una acción si dicha expresión es cierta.

7. La estructura alternativa doble permite evaluar una expresión lógica y ejecutar una acción si dicha expresión es cierta y otra acción si dicha expresión es falsa.

8. La estructura multialternativa consiste en una expresión selectora que puede tomar n valores diferentes y ejecuta una acción diferente por cada posible valor de la expresión selectora.

9. La estructura repetitiva se presenta en tres formas:
• Estructura desde-hasta
• Estructura mientras
• Estructura repetir-hasta

10. La estructura desde-hasta permite repetir la ejecución de una acción un número determinado de veces.

11. La estructura mientras repite una acción mientras una expresión lógica sea cierta; esta estructura puede ejecutarse 0 ó más veces.

12. La estructura repetir-hasta repite una acción hasta que una expresión lógica sea cierta; esta estructura siempre se ejecuta 1 vez al menos y no existe en el lenguaje FORTRAN aunque aparece en otros lenguajes de programación.

No hay comentarios: