miércoles, 19 de noviembre de 2014

CLASES DE ESTRUCTURAS REPETITIVAS

Hemos dicho que este tipo de estructuras marcan como orden de ejecucion la reiteracion de una serie de acciones basandose en un bucleUn BUCLE (loop, en inglés) es un trozo de algoritmo cuyas instrucciones son repetidas un cierto número de veces, mientras se cumple una cierta condición que ha de ser claramente especificada. La condición podrá ser verdadera o falsa, y se comprobará en cada paso o iteración del bucle.

Básicamente, existen tres tipos de estructuras repetitivas; los bucles "mientras..." (o "while"), los bucles "repetir... mientras que" (o "do... while") y los bucles "desde" (o "bucles for"). Vamos a verlas todas dentro de un ejemplo para clarificar los dos párrafos iniciales, que quedan tan bonitos como oscuros para quien nunca ha visto un bucle (ni es verde ni tiene antenas, lo siento %-D ).

Sólo un poco de teoría más antes de pasar a los ejemplos para cada una de las estructuras repetitivas; hay que hacer notar que todo bucle consta de tres partes básicas, a saber:
Decisión: donde se evalúa la condición y, en caso de ser cierta, se ejecuta el...
Cuerpo del bucle: son las instrucciones que queremos ejecutar repetidamente un cierto número de veces.
Salida del bucle: es la condición que dice cuándo saldremos de hacer repeticiones ("mientras protestes, seguirás fregando platos", en cuanto dejas de protestar, se acabó fregar más platos).

Una forma de controlar un bucle es mediante una variable llamada CONTADOR, cuyo valor se incrementa o decrementa en una cantidad constante en cada repetición que se produzca.

También, en los bucles suele haber otro tipo de variables llamadas ACUMULADOR, cuya misión es almacenar una cantidad variable resultante de operaciones sucesivas y repetidas. Es como un contador, con la diferencia que el incremento/decremento es variable.

Es sobre contadores, acumuladores donde incrementamos la cantidad de ejercicios. Pero  además incluimos otro tema el cual es el de los switches (interruptores) he aquí el concepto:
Un Siwtch permite que un bucle que permanezca dando vueltas o iterando hasta que el swtich cambia de estado veamos el caso siguiente:

Hacer un programa que lea números y los acumule hasta que se ingrese cero. Mostrar cuanto acumulo (es decir la suma de todos ellos)

Inicio
            Switch = 1
            Acumulador = 0
            Mientras Switch = 1 hacer
                        Leer Numero
                        Si Numero = 0 entonces
                                    Swtich = 0
                        Si no
                                    acumulador = acumulador + Numero
                        Fin_si
            Fin_mientras
            Escribir “La suma de todos ellos es :”, acumulador
Fin

Observe que:
            1.- El numero de vueltas no se conoce
            2.- En cada vuelta acumulador acumula lo que tiene la variable numero
            3.- el ejemplo puede quedar de la siguiente forma tambien:

Inicio
            numero  = 1
            Acumulador = 0
            Mientras numero  <> 0  hacer
                        Leer numero  
                        acumulador = acumulador + Numero
                        Fin_si
            Fin_mientras
            Escribir “La suma de todos ellos es :”, acumulador
Fin

En este caso la variable numero hace de switch y las vueltas son controladas por la variable numero cuando se tenga que numero vale cero dejará de dar vueltas.

Ejercicios resueltos:

Ejercicio 1)
Hacer un programa que lea los resultados de los partidos de un equipo de futbol ante sus adversarios y diga cuanto puntaje acumuló, cuantos goles a favor tiene y cuantos goles en contra tiene:

Inicio
            Switch = 1
            Golesfavor = 0
            Golescontra = 0
            Puntos = 0
            PartidosJugados = 0
            Mientras Switch = 1 hacer
                        Escribe “Desea Registrar un partido (digite 1 para si  o 0  para no)”
                        Leer Switch
                        Si Switch = 1 entonces
                                    Escribir “Introduce el resultado del partido:”
                                    Leer Golesmiequipo,Golesdeladversario
                                    Si Golesmiequipo = Golesdeladversario entonces
                                                Escribe “Empate”
                                                Puntos = Puntos + 1
                                    Fin_Si
                                    Si Golesmiequipo > Golesdeladversario entonces
                                                Escribe “Ganamos”
                                                Puntos = Puntos + 3

                                    Fin_Si
                                    Si Golesmiequipo < Golesdeladversario entonces
                                                Escribe “Perdimos”
                                    Fin_Si
                                    Golesfavor = Golesfavor + Golesmiequipo
                                    Golescontra = Golescontra + Golesdeladversario
                                    PartidosJugados = PartidosJugados + 1
                        Fin_si
            Fin_Mientras
            Escribe Puntos,Golesfavor,GolesContra
Fin

Recomiendo:
Haga un seguimiento de este ejercicio con variables y valores

Ejercicio 2 )
Hacer un algoritmo que realice las 50 primeras potencias de 5.

Inicio
   desde n=1 hasta 50 hacer
      Escribe 5^n
   fin_desde
Fin


Ejercicio 3 )
Realizar un algoritmo que obtenga la suma de los números pares hasta 100. 

Inicio
   suma = 0
   numero = 2
   mientras numero <= 100 hacer
      suma = suma + numero
      numero = numero + 2
   fin_mientras
Fin

Ejercicio 4)
Hacer una tabla del multiplicador en forma creciente.
Inicio
   Leer n
   x = 1
   mientras x <= 12 hacer
      R = n * x
      Escribe n, x, R
      x = x + 1
   fin_mientras
Fin

Ejercicio 5)
Hacer un programa que calcule el factorial de un número.

Inicio
   Leer n
   i = 1
   X = 1
   mientras X = 1 hacer
      X = i * X
      i = i + 1
   fin_mientras
   Escribir X
Fin

Ejercicio 6)
Hacer un programa que calcule la suma y el producto de los
números pares comprendidos entre 20 y 400 ambos inclusive.

Inicio
   S = 0
   P = 1
   X = 20
   mientras X <= 400 hacer
      S = S + X
      P = P * X
      X = X + 1   
   fin_mientras
   Escribir S, P
Fin

Estructuras Repetitivas (Bucles)

Un bucle o lazo (Loop)  es un segmento de un algoritmo o programa, cuya instrucciones se repiten un número determinado de veces mientras se cumple una determinada condición (existe o es verdadera la condición). SE debe establecer un mecanismo para determinar las tareas repetitivas. Este mecanismo es una condición que puede ser verdadera o falsa y que se comprueba una vez a cada paso o iteración del bucle (total de instrucciones que se repiten en el bucle).
Un bucle consta de tres partes:
  •  decisión,
  •  cuerpo del bucle,
  •  salida del bucle.
El bucle de la siguiente figura  es infinito, ya que las instrucciones (1), (2) y (3) se ejecutan indefinidamente, pues no existe salida del bucle, al no cumplirse una determinada condición.



Si tras la lectura de la variable N se coloca una condición, el bucle dejará de ser infinito y tendrá fin cuando la condición sea verdadera.

El diagrama de flujo escrito en pseudo código es aproximadamente el siguiente:
Inicio
    SUMA 0
    1: leer N
    Si N = 0 entonces
        Escribir SUMA
        Ir_a fin
    Si_no
        Suma suma + N
    FIN_SI
    IR_A 1
FIN


BUCLES ANIDADOS
Un bucle puede anidarse dentro de otro como se vio en clase con los condicionales anidados (un si fin_si dentro de otro si Fin_si)

Contadores

Un contador es una variable cuyo valor se incrementa o decremento en una cantidad constante en cada vuelta.
La siguiente figura 
contar del 1 al 50

presenta un diagrama de flujo para un algoritmo que se desea repetir 50 veces; el contador se representa en este ejemplo con la variable CONT. La instrucción que representa a un contador es la asignación CONT CONT + 1.
La siguiente figura

Decrementar desde N hasta 0

es otro ejemplo de un diagrama de flujo con contador; es este caso, negativo. Se dice también descontar.
El contador puede ser positivo (incrementos, uno en uno) o negativo (decrementos, uno en uno).

Importante acerca de incrementos y decrementos:
En la primera Figura el contador cuenta desde 1 al 50 y deja de contar cuando la variable CONT toma el valor 51 y se termina el bucle.

En la segunda Figura el contador cuenta negativamente, o lo que es lo mismo, descuenta o decrementa; comienza a contar en n y se decrementando hasta llegar a cero, en cuyo caso se termina el bucle y se realiza la acción escribir.

Como se vio anteriormente la condición permite terminar el bucle cuando ésta es verdadera (si) 
ahora veremos las estructuras repetitivas que se usarán en el curso de algoritmos:

Tipos de estructuras repetitivas

Mientras Condicion Hacer
Fin_mientras

Desde Variable=inicio  Hasta Variable=Final  hacer
Fin_desde

(La anterior también puede ser usada con la palabra PARA en vez de DESDE ejemplo:
    PARA Variable=inicio  Hasta Variable=Final  hacer
    Fin_PARA)

Repetir
Hasta Condicion
Hemos visto que las Estructura repetitivas son aquellas en las que especialmente se diseña para todas aquellas
aplicaciones en las cuales una operación o conjunto de ellas deben repetirse muchas veces.
asi los Bucles (lazos o LOOPs) Son estructuras que repiten una secuencia de instrucciones un numero determinado de veces.

Interacción: Es el hecho de repetir la ejecución de una secuencia de acciones; en otras palabras el algoritmo repite muchas veces las acciones.

Al utilizar un bucle para sumar una lista de números, se necesita saber cuantos números se han de sumar, para poder detenerlo en el momento preciso; las dos principales preguntas ha realizarse en el diseño de un bucle son:
¿Que contiene el bucle? y ¿Cuántas veces se debe repetir?

Casos Generales de Estructuras repetitivas
1) La condición de Salida del bucle se realiza al principio del bucle (estructura mientras) también llamada PRE-CONDICIONAL
2) La condición de Salida se origina al final del bucle; el bucle se verifica hasta que se verifique una cierta condición
también llamada POST-CONDICIONAL (estructura Repetir Hasta).
3) La condición de salida se realiza con un contador que cuente el numero de interacciones. ( i es un contador que cuenta desde el valor inicial (vi.) hasta el valor final (vf) con los incrementos que se consideren.) (estructura DESDE o PARA)

Estructura mientras ("while")
Es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condición. Cuando se ejecuta la acción  mientras, la primera cosa que sucede es que se evalúa la condición (una expresión booleana que devuelve Verdadero o Falso), si se evalúa falsa ninguna acción se tomara y el programa en la siguiente instrucción del bucle; si la expresión booleana es verdadera, entonces se ejecuta el cuerpo del bucle, depuse del cual se evalúa de nuevo la expresión booleana.
Esta expresión booleana se repite una y otra vez mientras la expresión booleana (condición) sea verdadera

Estructura repetir ("repeat").
Si el valor de la expresión booleana es inicialmente falso, el cuerpo del Bucle no se ejecutara, por ello se necesitan de otros tipos de estructurasDicha estructura se ejecuta hasta que cumpla una condición determinada que se comprueba hasta el final del bucle

Diferencias entre las estructuras mientras y repetir
  • La estructura mientras termina cuando la condición es falsa, mientras que repetir termina cuando la condición es verdadera.
  • En la estructura repetir el cuerpo del bucle se ejecuta siempre al menos una sola vez; por el contrario mientras es mas general y permite la posibilidad de que el bucle pueda no ser ejecutado.
  • Para usar la estructura repetir debe estar seguro de que el cuerpo del bucle se repetirá al menos una sola vez.
Estructura desde/para ("for").
Son el numero total de veces que se desea ejecutar las acciones del Bucle (numero de interacciones fijo), este ejecuta las acciones del cuerpo o del Bucle un numero especifico de veces y de modo automático controla el numero de Interacciones o pasos a través del cuerpo del bucle.
  

No hay comentarios:

Publicar un comentario