miércoles, 26 de marzo de 2008

Sentencias: Simples y Estructuradas



Abajo

CLASE 3: Sentencias: Simples y Estructuradas.

Sentencias:

Las sentencias son acciones algorítmicas que pueden ser ejecutadas. Hay dos tipos principales de sentencias:



  • Sentencias simples
  • Sentencias estructuradas

Sentencias simples:

Una sentencia simple es una sentencia que no contiene a ninguna otra sentencia.



Sentencia de asignación:

Asignación interna: Es utilizada para almacenar valores en variables.



Referencia a variable representa una variable e Identificador de función el nombre de una función y expresión representa una constante o una variable o una expresión propiamente dicha. La flecha representa la asignación.
Se evalúa la expresión y el resultado es asignado a la variable o al identificador de la función ubicada en el miembro izquierdo de la asignación. Debe existir una correspondencia de tipos entre, el resultado de la expresión, y el tipo definido para la variable, caso contrario se generará un error de incompatibilidad de tipos. La expresión podrá estar formada por, una constante, una variable o una expresión propiamente dicha, en cambio en el miembro izquierdo de la asignación solo podrá especificarse un objeto variable o el nombre de la función dentro de su propio bloque. Cualquier valor previo que tuviera la variable en la parte izquierda de la asignación es reemplazado por el nuevo valor asignado, por lo tanto, la asignación es destructiva. Cualquier variable situada en la parte derecha de la asignación deberá tener un valor previamente asignado, debido a que deberá leerse su contenido.

Ejemplos:


a <-- 4; a toma el valor constante entero 4

b <-- a; b toma el valor de a

b <-- b + 3 b toma el valor de b + 3

ApeNom <-- ‘Perez Juan’ ApeNom toma el valor constante de cadena

x <-- sqrt(25) ¿de qué tipo definiría a x?

Car <-- ‘h’

Cociente <-- b div a

Resto <-- b mod a

existe <-- true existe y negativo son de tipo boolean.

Negativo <-- x MENOR 0


Sentencias de Procedimientos:


Una sentencia de procedimiento establece la activación del procedimiento indicado. Si la declaración del procedimiento correspondiente contiene una lista de parámetros formales, -los parámetros listados en la definición- entonces la sentencia de procedimiento debe tener una lista de parámetros actuales, -en la llamada a la sentencia-. Los parámetros actuales son pasados a los parámetros formales como parte de la llamada o invocación.




Asignación externa de entrada:


Var deberá ser una variable. El valor asignado a la variable indicada en el bloque se lee desde un dispositivo periférico, siendo el teclado el dispositivo por defecto. El dato a conocer puede ser leído desde otro dispositivo como ser un archivo en disco. En cualquier caso la ejecución del proceso entra en espera, a efecto de que pueda leerse el dato solicitado. Si la entrada es ingresada por teclado, luego de tipear el valor se deberá presionar la tecla ENTER tras lo cual se reanuda la ejecución del proceso con la próxima acción que continúa en la secuencia. Deberá existir coincidencia de tipos entre el valor leído y el tipo de la variable. Una cadena de caracteres o un carácter deberá ser ingresado sin apóstrofos. Si el ingreso es desde un archivo también existe una espera, solo que en estos casos dicha espera es menor, ya que el ingreso del dato se realiza electrónicamente y no requiere de la intervención manual del usuario. Los puntos suspensivos indican que se podrá escribir más de una variable separadas por comas. La ventaja de la asignación externa de entrada con respecto a la asignación interna, es que en distintas ejecuciones del programa podemos ingresar diferentes valores sin modificar el código.
Asignación externa de salida:

Exp puede ser una constante, una variable o bien una expresión propiamente dicha. El resultado de la expresión es enviado al dispositivo periférico que corresponda, por defecto la pantalla, otros dispositivos pueden ser archivos en disco, la impresora. Al igual que la asignación externa de entrada, también existe una espera, a efectos de dar tiempo a que se envíen los resultados, una vez que esto suceda, la ejecución del proceso continúa su marcha con la próxima acción de la secuencia. Se podrá enviar un valor constante, el contenido de una variable o bien el resultado de una expresión propiamente dicha. Los diferentes objetos van separados por comas. Si la salida va destinada a la pantalla, impresora o disco; el término empleado es emitir-mostrar, listar y grabar respectivamente.


Ejemplos de sentencias de procedimientos:

Llamada o invocación para que se ejecute

Imprimir
InterCambio(a, b)
Encontrar(Lista, Nombre, posic)

Estructuras de control de programas

Sentencias estructuradas
Las sentencias estructuradas son construcciones compuestas por otras sentencias que son ejecutadas en secuencia, condicionalmente o repetidamente.


Sentencia compuesta o de concatenación

La sentencia compuesta está constituida por un bloque, el cual es considerado como una unidad lógica de información. Esta estructura de control de programa es muy importante conocer, ya que, guarda una relación muy extrecha con las otras dos estructuras de control de programa: la selección y la repetición, debido a que el alcance de acción es de una sola setnencia, por lo cual si queremos que la lógica de un proceso incluya más de una acción dentro del alcance de la selección y/o la repetición, debemos encerrar estas acciones dentro de un bloque, es decir, la sentencia compuesta o de concatenación.

Sentencia condicional

Selección simple:


Luego de ejecutar la acción alfa, en el punto de entrada se evalúa la condición, si el resultado es verdadero, se ejecuta la acción indicada por la acción beta –rama izquierda- caso contrario, se ejecuta la acción gamma –rama derecha- en ambos casos luego en el punto de salida se ejecuta la acción delta. Si la acción gamma no está presente –se representa por una línea en diagonal- en ese caso, nada se ejecuta, nos encontramos con una selección simple incompleta, de lo contrario sera una selección simple completa.
Las acciones alfa y delta siempre se ejecutan por encontrarse fuera del alcance o ámbito de la estructura de control de programa. En cambio la acción beta solo se realizará si la condición resulta verdadera y gamma no se realizará. Por otro lado, solo se ejecutará la acción gamma si la condición resulta falsa en cuyo caso la acción beta no se realizará.

Ejemplo 1: Asumiendo que condición resulta verdadera entonces las acciones que se ejecutan son: alfa, beta y delta.

Ejemplo 2: Asumiendo que condición resulta falsa y gamma es vacía, entonces las acciones que se ejecutan son: alfa y delta.

Ejemplo 3: Asumiendo que condición resulta falsa y gamma no es vacía, entonces las acciones que se ejecutan son: alfa, gamma y delta.

Con este tipo de estructura es posible realizar cualquier grado de complejidad de alternativas o decisiones o selecciones.
Es válido armar alternativas encadenadas o alternativas dentro de alternativas –en estos casos se denominan selecciones anidadas-.


Ejemplo de selecciones anidadas y en secuencia:

Selección múltiple:


Luego de ejecutar la acción alfa en el punto de entrada se evalúa la expresión ordinal, el resultado es comparado por igual con cada uno de los valores constantes de izquierda a derecha, en cuanto ocurra la primera igualdad se ingresa por la rama correspondiente y se ejecuta la acción beta indicada por esa rama, en caso contrario, se ejecuta la acción gamma, en caso de estar presente. En todos los casos en el punto de salida se ejecuta la acción delta.
Esta estructura de control de programa está limitada a ciertos procesos, debido a que la expresión debe ser de tipo ordinal. Los valores constantes también deben ser del mismo tipo ordinal que el de la expresión.
Cada una de las Ctei puede adoptar la siguiente forma: Cte1,1,Cte1,2,Cte1,3..Cte1,4,...

Repetición pre-condición

Repetición 0-X, Mientras o Indefinido:




Luego de ejecutarse la acción alfa en el punto de entrada se evalúa la condición, si el resultado es verdadero se ingresa al ciclo y ejecuta la acción beta, luego en el punto de salida se vuelve otra vez a la cabecera para ser evaluada nuevamente la condición, en caso que resulte falsa se abandona el ciclo por el punto de salida y a continuación se ejecuta la acción delta. Puede ocurrir que en el punto de entrada la condición resulte falsa, en ese caso la acción beta jamás será ejecutada. Hay que asegurar que si se ingresa al ciclo lograr que la condición en algún momento se haga falsa, para poder abandonar la estructura cíclica. La condición podrá estar controlada por un contador, un sumador, un valor centinela, un valor boolean, una situación de fin de archivo, una condición compuesta, entre otras. Con este tipo de ciclo se pueden llevar a cabo cualquier complejidad de situaciones que requieran el uso de una estructura cíclica. Es válido construir estructuras cíclicas anidadas o en secuencia.
Repetición Exacta o Para ascendente:




Luego de ejecutarse la acción alfa, en el punto de entrada, se realizan por la propia estructura de control, las siguientes acciones; si el resultado de la expr.ini. es menor o igual al resultado de la expr.fin. entonces el resultado de la expr.ini. es asignado a var –variable de control, es una variable contadora del ciclo- y se ingresa al ciclo, ejecutándose la acción beta. En el punto de salida, se llevan a cabo las siguientes acciones, -también propias de la estructura de control- si la variable de control var es menor al resultado de la expr.fin., entonces var toma el valor ordinal sucesor del que contiene y se vuelve a ejecutar la acción beta. Se abandona el ciclo una vez que var haya alcanzado al valor de la expr.fin. ejecutándose la acción delta. Por otro lado, estando en el punto de entrada si el valor de la expr.ini. fuera mayor al valor de la expr.fin. directamente se busca el punto de salida y se ejecuta la acción delta. El tipo de var, la expr.ini. y la expr.fin. deben ser todas del mismo tipo ordinal.
Este tipo de ciclo es de uso limitado, ya que solo sirve para valores de tipo ordinal. De todas maneras en ciertos casos es más aconsejable su uso cuando se conozca de antemano, la cantidad de veces que deba ser ejecutado. Una de las ventajas es que no se debe llevar la cuenta del contador, ya que lo gestiona la propia estructura de control.
La cantidad de veces que se repetirán las acciones dentro del ciclo, queda establecida de la siguiente manera:

Cant.Rep.Desc. <-- valor expr.ini. – valor expr.fin. + 1

Repetición Exacta o Para descendente:





Luego de ejecutarse la acción alfa, en el punto de entrada, se realizan por la propia estructura de control, las siguientes acciones; si el resultado de la expr.ini. es mayor o igual al resultado de la expr.fin. entonces el resultado de la expr.ini. es asignado a var –variable de control, es una variable contadora del ciclo- y se ingresa al ciclo, ejecutándose la acción beta. En el punto de salida, se llevan a cabo las siguientes acciones, -también propias de la estructura de control- si la variable de control var es mayor al resultado de la expr.fin., entonces var toma el valor ordinal predecesor del que contiene y se vuelve a ejecutar la acción beta. Se abandona el ciclo una vez que var haya alcanzado al valor de la expr.fin. ejecutándose la acción delta. Por otro lado, estando en el punto de entrada si el valor de la expr.ini. fuera menor al valor de la expr.fin. directamente se busca el punto de salida y se ejecuta la acción delta. El tipo de var, la expr.ini. y la expr.fin. deben ser todas del mismo tipo ordinal.
Este tipo de ciclo es de uso limitado, ya que solo sirve para valores de tipo ordinal. De todas maneras en ciertos casos es más aconsejable su uso cuando se conozca de antemano, la cantidad de veces que deba ser ejecutado. Una de las ventajas es que no se debe llevar la cuenta del contador, ya que lo gestiona la propia estructura de control.
La cantidad de veces que se repetirán las acciones dentro del ciclo, queda establecida de la siguiente manera:

Cant.Rep.Desc. <-- valor expr.ini. – valor expr.fin. + 1


Repetición post-condición:

Repetición 1-X o Hasta:






Luego de ejecutar la acción alfa, en el punto de entrada se ingresa a la estructura cíclica, ejecutándose la acción beta, luego en el pié de la estructura se evalúa la condición, si el resultado es falso, permanece en el ciclo, volviéndose a ejecutar la acción beta, hasta que la condición cambie de estado, es decir, cuando su resultado se haga verdadero, abandona el ciclo y en el punto de salida se ejecute la acción delta. La condición podrá ser lo más compleja que se desee. Este tipo de ciclo requiere un uso específico ya que la acción beta se podrá ejecutar al menos una vez, por eso a este ciclo también se lo denomina ciclo 1-x. Existen casos puntuales para su uso, a saber, creación de menú de opciones, validación de datos, ordenamiento de burbuja optimizado, y otros casos especiales.

Luego de haber conocido cada una de la estructuras de control de programa, es de esperar que el alumno utilice la mejor herramienta para llevar a cabo el algoritmo. No siempre la forma en que el alumno ve la situación será la mejor de ellas, un cierto grado de experiencia va a afianzar más el criterio a adoptar en cada situación que se presente.
Cuando determinamos que hay que utilizar una estructura repetitiva, luego nos planteamos cuál de ellas es la más adecuada, hay casos por ejemplo que aparentemente en un primer momento creemos que es un ciclo exacto, entonces no dudamos y utilizamos el ciclo exacto, pero luego vemos que en realidad no estamos obligados a alcanzar la cantidad total de repeticiones debido a que existe una segunda condición que nos hará abandonar el ciclo antes de haber alcanzo el final máximo, ahora nos damos cuenta que el ciclo apropiado es un ciclo indefinido con dos condiciones, mientras no hayamos encontrado un valor que estamos buscando y mientras no hayamos alcanzado la cantidad de repeticiones máximas, si el valor no aparece.
En toda estructura de control condicional y repetitiva existen distintos momentos, un momento previo al punto de entrada, un momento durante entre los puntos de entrada y salida y un momento después del punto de salida. Si la estructura es repetitiva indefinida el momento previo es el de preparar acciones previas, inicializar variables, conocer primer dato; el momento durante es el de procesar los datos y conocer próximo dato y el momento después es el de terminar, emitir, cálculos a totales mayores, promedios, porcentajes, grabar, etc.. En cambio en una estructura repetitiva exacta, en el momento previo inicializamos variables pero no conocemos primer dato, sino que en el momento durante, primero conocemos dato y luego procesamos, y en el momento después realizamos las acciones de terminar. Cualquier variable que aparezca en la condición de un ciclo deberá tener un valor previamente asignado en un momento anterior.
Lo mismo puede suceder con las alternativas simples y múltiples para determinar cuál será la estructura condicional más conveniente bajo ciertas circunstancias.
¿Serán ciclos en secuencia, o anidados?. ¿Serán condiciones en secuencia o anidadas?. ¿Serán ciclos dentro de decisiones o decisiones dentro de ciclos?. ¿Las selecciones tendrán acciones por cada una de las ramas o solo en una de ellas?. Estas son tan solo algunas de las preguntas que nos debemos formular al momento de resolver un problema computacional.
Como vemos la forma de combinar estas pocas estructuras de control de programa es lo que nos da una gran diversidad de variantes, el esqueleto que formará nuestro algoritmo. No obstante, la forma esquelética de nuestros algoritmos se determinará en base a otro tipo de estructuras, las estructuras de datos, este será entonces nuestro primer paso, a partir de allí, pensaremos como han de ser las estructuras de control de programa. Finalmente decimos que las estructuras de control de programa esta determinada por las estructuras de datos.






Anterior: Metodología II

Siguiente: Funciones


Arriba


2 comentarios:

John Ortiz Ordoñez dijo...

¡Hola! Gracias por la información. La he visto útil. He logrado despejar una duda, o bueno responder a a este enunciado: Describa las dos formas en las que pueden combinarse las instrucciones de control. ¡Hasta pronto!

Solde9 dijo...

Muy buen tutorial!