martes, 26 de octubre de 2010

Flujo de Control

Laboratorio

El control de flujo se refiere al orden en que se ejecutan las instrucciones que tenemos en el programa.
El orden puede ser ascendente, descendente o podemos ejecutar un conjunto de instrucciones alguna determinada cantidad de veces en donde se modifique algunos valores y hasta que el valor cumple alguna condición se dejen de ejecutar esas instrucciones.
Determinar el orden de las instrucciones depende primordialmente de el algoritmo que queremos desarrollar en el programa.

Flujo secuencial
Se refiere a la ejecución de instrucciones una trás otra, es decir de una línea, a la siguiente sin saltarse ninguna, es en dónde la salida de una es la entrada de otra.
El flujo secuencial es casi inexistente, ya que en muchos programas se hacen llamadas a funciones y esto hace que no sea secuencial.
Función
Cuando se llama a una función se hace un salto ya sea condicional o incondicional, se ejecuta el "bloque de código" determinado, y cuando finaliza el bloque se regresa a la dirección que se guardado en la memoria antes de realizar el salto, la función hace que se regrese a esa dirección con la instrucción "volver". Esto es a lo que podemos llamar función, subrutinas o subprogramas.

Flujo alternativo
Es cuando el contador del programa no sigue la siguiente instrucción(como en el flujo secuencial) y se salta directamente a otra aunque este en una dirección de memoria más alejada, puede ser que se salte a otra linea incondicionalmente, es decir de manera obligatoria, o que se haga condicionalmente que es cuando alguna expresión cumple alguna determinada condición y se brinca a otra instrucción. También se pueden combinar los saltos condicionales e incondicionales, es decir que se haga un salto a un bloque de código si la expresión resultara ser verdadera o otro bloque si es falsa.
Para conseguir el flujo alternativo se debe calcular la dirección de la instrucción que sigue.

Flujo selectivo
Se utiliza cuando para realizar algún programa se tienen diferentes casos y que los podemos identificar con algún valor, este valor nos va a ayudar a saber si es cierto caso a que bloque de código se debe de brincar. Es como tener un tipo directorio en el que tenemos registrado el identificador del caso que puede ser un valor "x" con el correspondiente bloque de código que debe ejecutar.
Cuando se tienen muchos diferentes casos es más ventajoso utilizar el flujo selectivo que el flujo alternativo ya en el flujo alternativo seria ir checando si determinado valor coincide con cada uno de los bloques de código.

Flujo repetitivo
Por ejemplo cuando en un bloque de código se tiene una instrucción incondicional que salte al principio de ese bloque de código diríamos que estamos teniendo un flujo repetitivo aunque en este caso infinito, pero si en cambio tenemos nuestro bloque de código, con alguna variable que vaya cambiando su valor y al final una instrucción condicional en la que se finalice ese bloque de código si el valor de la variable cumple cierta condición y si no lo cumple se regrese al principio del bloque, entonces tenemos un flujo de control en el que el bloque del código se ejecuta al menos una vez. Podría ser distinto, hay algunas ocasiones en las que puede que no se ejecute ni una sola vez, esto se logra escribiendo la instrucción condicional al principio de la misma en donde el bloque se ejecuta siempre y cuando se cumpla con la condición.
En resumen el flujo repetitivo consiste en ejecutar cierto bloque de código hasta que se cierta una situación determinada.



Enlaces:
http://maxus.fis.usal.es/FICHAS_C.WEB/00xx_PAGS/0006.html
http://teleformacion.edu.aytolacoruna.es/PASCAL/document/flujo.htm#intro

5 comentarios:

  1. Que tal Sandra...

    Es muy interesante lo que mencionas aquí, muy recordatorio diría yo. Genial.

    Pero me llamo mucho la atención algo que vi al principio de la entrada, donde mencionas que el flujo puede ser ascendete y descente. Lo que me llamo la atención es que dices que puede ser "ASCENTE".

    Solía creer que por lo común es descendente, es decir, que el código se ejecute de arriba hacia abajo.

    Ahora bien, tal vez me estoy confundiendo, no lo se. Quizas se considera flujo ASCENDENTE por el hecho de manejar algun DO-WHILE,FOR o WHILE, por decir algo. O cuando nos vamos a alguna subrutina que se encuentra arriba de nuestra función principal.

    No se que me puedas decir para disiparme ese pensamiento mio.

    Saludos. Me gusto el contenido.

    ResponderEliminar
  2. Hola yo creo que a lo que se refiere el orden es según el lenguaje, por ejemplo en Lisp, una suma seria así.

    (+ 2 3)

    Siendo en C algo así

    R = 2 + 3;

    Si estoy mal espero que me corrijanme :)

    ResponderEliminar
  3. :) Hasta conversación hay aquí. Tres puntos para Cecy en el lab. Un punto para cada Roberto por participación en la clase.

    ResponderEliminar
  4. Ah, y debería ser "Flujo de control", no "Control de flujo" :P En inglés se dice "Control flow" y se refiere a la manera en que "fluye" el control dentro del programa.

    ResponderEliminar
  5. Excelente post, me ayudo mucho en la tarea

    ResponderEliminar