Buscar este blog

jueves, 4 de noviembre de 2010

Tipos de Ciclos

BUCLE Ó  CICLO (Programación)
En programación, es una sentencia que se realiza repetidas veces a un trozo aislado de código, hasta que la condición asignada a dicho bucle deje de cumplirse.
Generalmente, un bucle es utilizado para hacer una acción repetida sin tener que escribir varias veces el mismo código, lo que ahorra tiempo, deja el código más claro y facilita su modificación en el futuro.
El bucle y los condicionales representan la base de la programación estructurada. Es una evolución del código ensamblador, donde la única posibilidad de iterar un código era establecer una sentencia jump (que en los lenguajes de programación fue sustituida por el "ir a" o GOTO).
Los tres bucles más utilizados en programación son el Ciclo while, el ciclo for y el ciclo repetir.
Ejemplo en código C de sentencias repetidas:
    int var=0;


      //código que puede ser sustituido por un bucle
      var = var + 2; //var igual a 2 (puede ser sustituído por var+=2)
      var = var + 2; //var igual a 4
      var = var + 2; //var igual a 6
      var = var + 2; //var igual a 8
      var = var + 2; //var igual a 10
      // Fin de código  que puede ser sustituido por un bucle

    printf("el resultado es %i", var );

Ejemplo con un bucle:

          int var=0;

          //Código para el bucle
          int i;
         
          // este es el Bucle for
          for(i=0;i<10;i+=2)
          {
             var += 2;         
          }

  
          printf("el resultado es %i", var);


Algunos lenguajes de programación tienen sentencias que permiten "escapar" de los bucles sin llegar a la condición de fin, como el romper o el devolver.
Ejemplo escapando de un bucle en Visual Basic 1:

     Dim h&, var&
     var = 0

     'Codigo del Bucle
     do
        var = var + 2

        if var = 10 then    'Codigo para salir del bucle
           goto escape
        end if
     loop

  escape:
     print "El resultado es " & var

Ejemplo escapando de un bucle en Visual Basic 2:
     Dim h&, var&
     var = 0

     'Codigo del Bucle
     do
        var = var + 2

        if var = 10 then    'Codigo para salir del bucle
           exit do
        end if
     loop

     print "El resultado es " & var

Ciclo while: es una estructura de la mayoría de los lenguajes de programación estructurados cuyo propósito es repetir un bloque de código mientras una condición se mantenga verdadera.
La sintaxis:en pseudocódigo es la siguiente:
Mientras-----condición-----hacer
Instrucciones
Fin mientras
La condición: ha de ser una sentencia que devuelva un valor booleano, y esta puede ser el valor booleano en sí, verdadero(true) si la condición se cumple, o falso si esta no se cumple(false). También puede contener el nombre de una variable booleana, y el valor de la expresión dependerá de su contenido. Se debe tener en cuenta que además de las variables también puede haber llamadas a funciones que devuelvan un valor.
Ejemplo (usando sintaxis de C)
 int Tecla = 0;
 while(Tecla == 0)
 {
      Tecla = readkey(); /* Intentamos leer una pulsación de tecla*/
 }
En este ejemplo el programa va a leer la pulsación de una tecla mientras su valor sea igual a cero, en el momento en el que se pulse una Tecla distinta, se detendrá.
Ejemplo (usando el lenguaje Lexico)
Genera y muestra los primeros 10 números naturales:
tarea
{
   el objeto número_natural es una cantidad
   copie 0 en número_natural
   mientras número_natural < 10 haga:
   {
       copie número_natural + 1 en número_natural
       muestre número_natural
   }
}
Ciclo for: es una estructura de control en la que se puede indicar el número máximo de iteraciones. Está disponible en casi todos los lenguajes de programación imperativos.
ELEMENTOS DEL CICLO
Para I-----xhasta ---n---a incrementos de ---s----hacer
Instrucciones
Fin para
  • 'Variable de control': prácticamente un mandato impuesto por el uso habitual es utilizar la letra i Iterador como variable de control, o bien sus sucesoras en caso de bucles anidados. El uso de esta letra críptica quizás a primera vista es sin embargo una excelente forma de aportar agilidad de lectura al código por su uso tan extensivo. Como raras veces los bucles anidados superan las tres dimensiones (por una sencilla cuestión de explosión exponencial), las letras i, j y k suelen ser las únicas relacionadas con este uso. En C se define en el primer parámetro de la instrucción junto con la inicialización (opcional).
  • Inicialización de la variable de control: en pseudolenguaje se pide explicitarlo (es la sección := ValorInicial), sin embargo, otros lenguajes más permisivos como C no lo requieren de forma obligatoria. De todos modos, la práctica de utilizar variables de control que no se inicializan en el bucle no es recomendada para la legibilidad del código. En C se define en el primer parámetro del bucle junto con la variable de control.
  • Condición de control: en pseudolenguaje se ve representado por el valor final que puede tomar la variable de control (la sección A ValorFinal). En C es el segundo parámetro y puede ser cualquier condición (ni siquiera es obligación que esté la vhariable de control, aunque una vez más, esto no se considera una buena práctica).
  • Incremento: en pseudolenguaje se toma por defecto el valor 1, aunque puede explicitarse por medio de la sentencia PASO = ValorPaso cualquier número entero (léase bien entero, o sea que técnicamente podemos decrementar). En C es el último parámetro.
  • Cuerpo: es lo que se hará en cada iteración, pueden ser una o más instrucciones. En pseudolenguaje pesa la restricción de no poder alterar el valor de la variable de control; esto no es requerido en C, pero no se considera una buena práctica.
  • USOS:
Su uso principal se orienta a los vectores, pudiendo modificar, agregar, eliminar o consultar datos que se encuentren según el índice. Por esto último, una condición mínima del vector es que debe ser ordenado, por que si se intenta leer un dato inexistente, esto genera un error de programación.

For en pseudolenguaje

La principal diferencia de un bucle PARA con respecto a los bucles MIENTRAS Y REPETIR, es que puede determinarse al comienzo del bucle cuántas veces se iterará el mismo, lo cual muchas veces puede redundar en una optimización del código por parte de los compiladores. Los condicionales constituyen junto con los bucles los pilares de la programación estructurada, y su uso es una evolución de una sentencia de lenguaje ensamblador que ejecutaba la siguiente línea o no en función del valor de una condición.
El ciclo PARA se ha convertido en el bucle más ampliamente utilizado en la programación, ya que con la evolución de los lenguajes la mayoría de las condiciones de fin
MIENTRAS NoFinDeTabla(tabla) HACER
 PróximoRegistro(tabla)
 HacerAlgo(ElementoActual(tabla))
FIN MIENTRAS
Es lo mismo decir:
PARA i := 0 a CantidadRegistros(tabla) - 1, PASO = 1
 PróximoRegistro(tabla)
 HacerAlgo(ElementoActual(tabla))
FIN PARA
Otro uso común es utilizar los bucles PARA para recorrer vectores de dos o más dimensiones, en cuyo caso se anidan estas iteraciones.
PSEUDOLENGUAJE
Vector a[3][4][2]. // Estamos indicando un vector de 3 dimensiones y 24 elementos en total.
PARA i:= 0 A 2 HACER
  PARA j:= 0 A 3 HACER
    PARA k:= 0 A 1 HACER
      HacerAlgo(a[i][j][k])
    FIN PARA
  FIN PARA
FIN PARA

Ejemplo de PARA en pseudolenguaje

PARA VariableControl := ValorInicial A ValorFinal, PASO = Incremento 
  Cuerpo
 FIN PARA
donde VariableControl, ValorInicial, ValorFinal y Paso son enteros. La(s) instrucción(es) del cuerpo se ejecutará(n) (ValorFinal - ValorInicial + 1) veces, o sea que va desde ValorInicial a ValorFinal inclusive.

Ejemplo en C

int main()
{
  int vector[10], i;
  for(i = 0; i < 10; i++)
  {
   vector[i] = i;
  }
}
En la definición del for, tenemos que la variable de control i se inicializa en un valor 0, luego se entrega la condición de control que debe ser falsa durante su ejecución, para completar el ciclo; y por último, tenemos el incrementador en una unidad.
Si por ejemplo en la condición colocamos i < 11, entonces el ciclo for se ejecutará desde [0...10], lo cual, al intentar acceder al elemento vector[10], esto generará error, ya que el vector (por definición) va desde [0..(n-1)].

Ejemplo anterior escrito en Lexico

tarea
{
los objetos vector[10], i son cantidades
variando i desde 0 hasta 9 haga
         copie i en vector[i]
}

Ciclo Por Cada (For Each)

Este bucle es una evolución del concepto del bucle Para en algunos lenguajes. Se utiliza para recorrer estructuras repetitivas de datos de forma más simple y ágil. El bucle For Each puede describirse genéricamente (en pseudolenguaje) de la siguiente manera:
POR CADA elemento DE tipo EN conjunto HACER
  Cuerpo
FIN FOR EACH
ciclo repetir: comprueba la condición de finalización al final del cuerpo del ciclo, y si ésta es cierta continua con el resto del programa, a veces esto resulta más adecuado

Sintaxis

La sintaxis en pseudocódigo es la siguiente:
Repetir
Instrucciones
Hasta que-----condición
En lenguajes de programación
En la mayoría de los lenguajes de programación seria:
REPEAT
  
  

UNTIL (condición)
Esta estructura de control siempre permite la ejecución del cuerpo del bucle cuando menos una vez, y lo finaliza cuando la condición es cierta.
Ejemplos
Una situación típica en la que resulta cómoda el empleo de esta sentencia es la que se produce cuando al finalizar cada iteración se pregunta al operador si desea continuar con otra nueva. En estos casos, el programa siempre realiza la primera iteración y según la condición de salida la repite. Otro caso también típico son los filtros de entrada de datos, donde se comprueba si el valor de la entrada esta en un rango de valores.
Admite un número del 3 al 7, si no pregunta de nuevo

 REPEAT
   WriteString(“Escribe el numero”)
   ReadInt(numero)
 UNTIL (numero >= 3) AND (numero <= 7)
Reemplazable en casi todos los casos
Dentro de la programación estructurada, el bucle repetir puede ser sustituido por un bucle mientras, del siguiente modo:
 Repetir
    (Cuerpo del bucle)
 Hasta que (condición)
Puede escribirse
 (Cuerpo del bucle)
 Mientras NO(condición)
    (Cuerpo del bucle)
 fmientras

No hay comentarios:

Publicar un comentario