La estructura mientras (“while”)

La estructura repetitiva mientras (en inglés while o do while: hacer mientras) es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condición. Cuando se ejecuta la instrucción mientras, la primera cosa que sucede es que se evalúa la condición (una expresión booleana).

Si se evalúa falsa, no se toma ninguna acción y el programa prosigue en la siguiente instrucción del bucle. Si la expresión booleana es verdadera, entonces se ejecuta el cuerpo del bucle, después

de lo cual se evalúa de nuevo la expresión booleana. Este proceso se repite una y otra vez mientras la expresión booleana (condición) sea verdadera.

La estructura hacer-mientras (“do-while”)

El bucle mientras al igual que el bucle desde que se verá con posterioridad evalúan la expresión al comienzo del bucle de repetición; siempre se utilizan para crear bucle pre-test. Los bucles pre-test se denominan también bucles controlados por la entrada. En numerosas ocasiones se necesita que el conjunto de sentencias que componen el cuerpo del bucle se ejecuten al menos una vez sea cual sea el valor de la expresión o condición de evaluación. Estos bucles se denominan bucles post-test o bucles controlados por la salida. Un caso típico es el bucle hacer-mientras (do-while) existente en lenguajes como C++, java o C#.

El bucle hacer-mientras es análogo al bucle mientras y el cuerpo del bucle se ejecuta una y otra vez mientras la condición (expresión booleana) es verdadera. Existe, sin embargo, una gran diferencia y es que el cuerpo del bucle está encerrado entre las palabras reservadas hacer y mientras, de modo que las sentencias de dicho cuerpo se ejecutan, al menos una vez, antes de que se evalúe la expresión booleana. En otras palabras, el cuerpo del bucle siempre se ejecuta, al menos una vez, incluso aunque la expresión booleana sea falsa.

REGLA: El bucle hacer-mientras se termina de ejecutar cuando el valor de la condición es falsa. La elección entre un bucle mientras. y un bucle hacer-mientras depende del problema de cómputo a resolver. En la mayoría de los casos, la condición de entrada del bucle mientras es la elección correcta. Por ejemplo, si el bucle se utiliza para recorrer una lista de números.(o una lista de cualquier tipo de objetos), la lista puede estar vacía, en cuyo caso las sentencias del bucle nunca se ejecutarán. Si se aplica un bucle hacer-mientras nos conduce o un código de errores.

Al igual que en el caso del bucle mientras la sentencia en el interior del bucle puede ser simple o compuesta. Todas las sentencias en el interior del bucle se ejecutan al menos una vez antes de que la expresión o condición se evalúe. Entonces, si la expresión es verdadera (un valor distinto de cero, en C/C + +) las sentencias del cuerpo del bucle se ejecutan una vez más. El proceso continúa hasta que la expresión evaluada toma el valor falso (valor cero en C/C + +). El diagrama de control del flujo se ilustra en la Figura 5.2, donde se muestra el funcionamiento de la sentencia hacer-mientras.

La estructura repetir (“repeat”)

Existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez antes de comprobar la condición de repetición. En la estructura mientras si el valor de la expresión booleana es inicialmente falso, el cuerpo del bucle no se ejecutará; por ello, se necesitan otros tipos de estructuras repetitivas.

La estructura repetitiva se ejecuta hasta que se cumpla una condición determinada que se comprueba al final del bucle.

El bucle repetir-hasta que se repite mientras el valor de la expresión booleana de la condición sea falsa, justo la opuesta de la sentencia mientras.

algoritmo repetir

var

real : numero

entero: contador

inicio

contador <-1

repetir

leer (numero)

contador <- contador+1

hasta que contador> 30

escribir('Numeros leidos 30’)

fin

Con una estructura repetir el cuerpo del bucle se ejecuta siempre al menos una vez. Cuando una instrucción repetir se ejecuta, lo primero que sucede es la ejecución del bucle y, a continuación, se evalúa la expresión booleana resultante de la condición. Si se evalúa como falsa, el cuerpo del bucle se repite y la expresión booleana se evalúa una vez. Después de cada iteración del cuerpo del bucle, la expresión booleana se evalúa; si es verdadera, el bucle termina y el programa sigue en la siguiente instrucción hasta que.

Diferencias de las estructuras mientras y repetir

La estructura 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 vez; por el contrario, mientras es más 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 -bajo cualquier circunstancia- se repetirá al menos una vez.

La estructura desde/para (“for”)

En muchas ocasiones se conoce de antemano el número de veces que se desean ejecutar las acciones de un bucle. En estos casos, en el que el número de iteraciones es fijo, se debe usar la estructura desde o para (for, en inglés). La estructura ejecuta las acciones del cuerpo del bucle un número especificado de veces y de modo automático controla el número de iteraciones o pasos a través del cuerpo del bucle. Las herramientas de programación de la estructura desde o para se muestran a continuación:

Que son subalgoritmos o subprogramas. Qué técnicas utiliza.

Un método ya citado para solucionar un problema complejo es dividirlo en subproblemas –problemas más sencillos- y a continuación dividir estos subproblemas en otros más simples, hasta que los problemas más pequeños sean fáciles de resolver. Esta técnica de dividir el problema principal en subproblemas se suele denominar «divide y vencerás» (divide and conquer). Este método de diseñar la solución de un problema principal obteniendo las soluciones de sus subproblemas se conoce como diseño descendente (top-down design). Se denomina descendente, ya que se inicia en la parte superior con un problema general y el diseño específico de las soluciones de los subproblemas. Normalmente las partes en que se divide un programa deben poder desarrollarse independientemente entre sí.

Estas partes independientes se denominan subprogramas o subalgoritmos si se emplean desde el concepto algorítmico.

El problema principal se soluciona por el correspondiente programa o algoritmo principal -también denominado controlador o conductor (driver)- y la solución de los subproblemas mediante subprogramas, conocidos como procedimientos (subrutinas) o funciones. Los subprogramas, cuando se tratan en lenguaje algorítmico, se denominan también subalgoritmos.

Un subprograma puede realizar las mismas acciones que un programa: 1) aceptar datos, 2) realizar algunos cálculos y 3) devolver resultados. Un subprograma, sin embargo, se utiliza por el programa para un propósito específico. El subprograma recibe datos del programa y le devuelve resultados. Haciendo un símil con una oficina, el problema es como el jefe que da instrucciones a sus subordinados -subprogramas-; cuando la tarea se termina, el subordinado devuelve sus resultados al jefe. Se dice que el programa principal llama o invoca al subprograma. El subprograma ejecuta una tarea, a continuación devuelve el control al programa. Esto puede suceder en diferentes lugares del programa. Cada vez que el subprograma es llamado, el control retorna al lugar desde donde fue hecha la llamada. Un subprograma puede llamar a su vez a sus propios subprogramas.

Existen -como ya se ha comentado- dos tipos importantes de subprogramas: funciones y procedimientos o subrutinas.

Qué son las funciones

Matemáticamente una función es una operación que toma uno o más valores llamados argumentos y produce un valor denominado resultado -valor de la función para los argumentos dados-.

Cada función se evoca utilizando su nombre en una expresión con los argumentos actuales o reales encerrados entre paréntesis.

Las funciones incorporadas al sistema se denominan funciones internas o intrínsecas y las funciones definidas por el usuario, funciones externas. Cuando las funciones estándares o internas no permiten realizar el tipo de cálculo deseado es necesario recurrir a las funciones externas que pueden ser definidas por el usuario mediante una declaración de función.

A una función no se le llama explícitamente, sino que se le invoca o referencia mediante un nombre y una lista de parámetros actuales. El algoritmo o programa llama o invoca a la función con el nombre de esta última en una expresión seguida de una lista de argumentos que deben coincidir en cantidad, tipo y orden con los de la función que fue definida. La función devuelve un único valor.

Las funciones son diseñadas para realizar tareas específicas: tomar una lista de valores –llamados argumentos- y devolver un único valor.

Declaración de funciones

La declaración de una función requiere una serie de pasos que la definen. Una función corno tal subalgoritmo o subprograma tiene una constitución similar a los algoritmos, por consiguiente, constará de una cabecera que comenzará con el tipo del valor devuelto por la función, seguido de la palabra función y del nombre y argumentos de dicha función, A continuación irá el cuerpo de la función, que será una serie de acciones o instrucciones cuya ejecución hará que se asigne un valor al nombre de la función. Esto determina el valor particular del resultado que ha de devolverse al programa llamador.

La declaración de la función será;

función (lista de parámetros)

(declaraciones locales)

inicio

l/cuerpo de la función

devolver «expresión»

fin_función

Sentencia devolver (return)

La sentencia devolver (return, volver) se utiliza para regresar de una función (un método en programación orientada a objetos); devolver hace que el control del programa se transfiera al llamador de la función (método). Esta sentencia se puede utilizar para hacer que la ejecución regrese de nuevo al llamador de la función.

Regla: la función devolver termina inmediatamente la función en la cual se ejecute.

Para que las acciones descritas en un subprograma función sean ejecutadas, se necesita que éste sea invocado desde un programa principal o desde otros subprogramas a fin de proporcionar los argumentos de entrada necesarios para realizar esas acciones.

Los argumentos de la declaración de la función se denominan parámetros formales, ficticios o mudos(«dummy»);son nombres de variables, de otras funciones o procedimientos y que sólo se utilizan dentro del cuerpo de la función. Los argumentos utilizados en llamada a la función se denominan parámetros actuales, que a su vez pueden ser constantes, variables, expresiones, valores de funciones o nombres de funciones o procedimientos.

Invocación a las funciones

Una función puede ser llamada de la forma siguiente:

Nombre_funcion (lista de parámetros actuales)

nombre_funcion: función que llama

lista de parámetros actuales: constantes, variables, expresiones, valores de funciones. nombre de funciones o procedimientos

Cada vez que se llama a una función desde el algoritmo principal se establece automáticamente una correspondencia entre los parámetros formales y los parámetros actuales. Debe haber exactamente el mismo número de parámetros actuales que de parámetros formales en la declaración de la función y se presupone una correspondencia uno a uno de izquierda a derecha entre los parámetros formales y los actuales.

Una llamada a la función implica los siguientes pasos:

  1. A cada parámetro formal se le asigna el valor real de su correspondiente parámetro actual.
  2. Se ejecuta el cuerpo de acciones de la función.
  3. Se devuelve el valor de la función al nombre de la función y se retorna al punto de llamada.

Qué son los procedimientos [subrutinas]. Cuáles son las diferencias con las funciones

PROCEDIMIENTOS (SUBRUTINAS)

Aunque las funciones son herramientas de programación muy útiles para la resolución de problemas, su alcance está muy limitado. Con frecuencia se requieren subprogramas que calculen varios resultados en vez de.uno solo, o que realicen la ordenación de una serie de números, etc. En estas situaciones la función no es apropiada y se necesita disponer de otro tipo de subprograma: el procedimiento o subrutina.

Un procedimiento o subrutinas es un subprograma que ejecuta un proceso específico. Ningún valor está asociado con el nombre del procedimiento; por consiguiente, no puede ocurrir en una expresión.

Un procedimiento se llama escribiendo su nombre, por ejemplo, SORT, para indicar que un procedimiento denominado SORT se va a usar. Cuando se invoca el procedimiento, los pasos que lo definen se ejecutan y a continuación se devuelve el control al programa que le llamó.

La declaración de un procedimiento es similar a la de funciones.

procedimiento nombre [(lista de parámetros formales))

<acciones>

Fin Procedimiento

Procedimiento o función

Los procedimientos y funciones son subprogramas cuyo diseño y misión son similares; sin embargo, existen unas diferencias esenciales entre ellos.

  1. Un procedimiento es llamado desde el algoritmo o programa principal mediante su nombre y una lista de parámetros actuales, o bien con la instrucción llamar a (call). Al llamar al procedimiento se detiene momentáneamente el programa que se estuviera realizando y el control pasa al procedimiento llamado. Después que las acciones del procedimiento se ejecutan, se regresa a la acción inmediatamente siguiente a la que se llamó.
  2. Las funciones devuelven un valor, los procedimientos pueden devolver 0, 1 con valores y en forma de lista de parámetros.
  3. El procedimiento se declara igual que la función, pero su nombre no está asociado a ninguno de los resultados que obtiene.