Вы находитесь на странице: 1из 15

Programando Estructuras de Control

By Dr. Wayne Brown (traduccin libre A. Ramrez S)

Introduccin
Uno de los aspectos ms importantes de la programacin es el control en el orden de ejecucin
de las instrucciones. Las Estructuras de
Control/Enunciados de Control permiten a un
programador determinar el orden en el que se
ejecutan las instrucciones de un programa. Estas
Basic
estructuras de control permiten hacer dos cosas: 1)
Commands
Saltarse algunas instrucciones y ejecutar otras, y 2)
repetir una o ms instrucciones mientras se cumpla
cierta condicin.

Los programas de RAPTOR utilizan seis tipos de Flow of Control


instrucciones, como se puede ver en la figura de la Commands
derecha. En lecturas previas hemos aprendido los
cuatro comandos bsicos, En esta lectura
aprenderemos acerca de las instrucciones de
Seleccion y Loop.

1) Control Secuencial del Programa

Todos los ejemplos vistos en lecturas previas utilizan un control secuencial del programa. Por
secuencial queremos decir en secuencia, uno despus del otro. La lgica
secuencial es ms fcil de contruir y de entender. Esencialmente se coloca
cada instruccin en el orden que queremos que se ejecute y el programa
iniciar desde la instruccin Start hasta la instruccin End. Como puede
observarse en el programa de ejemplo de la figura a la derecha, las flechas
que enlazan las instrucciones indican el flujo de la ejecucin. Si el programa
incluye 20 comandos bsicos entonces se ejecutarn 20 instrucciones en ese
orden y el programa terminar.

Cuando estamos resolviendo un problema como programadores, debemos


determinar las insutrcciones que son necesarias para crear una solucin al
problema y el orden en el que dichas insutrcciones deben ejecutarse. Por
ejemplo, cuando se quiere obtener y procesar datos del usuario se emplea la
instruccin GET para obtenerlos del usuario, antes de que los podamos emplear. Cambiar el
orden de estas instrucciones producir un programa no-vlido.

El control secuencial es la forma de control por default, en el sentido de que cada instruccin
automticamente apunta a la siguiente de acuerdo al diagrama de flujo construido. No
necesitamos agregar indicaciones extras para obtener el control secuencial. Sin embargo, para la

1 of 15
mayora de los problemas del mundo real, el control secuencial por s solo no permite construir
soluciones, debido a que los problemas del mundo real incluyen condiciones que determinan el
paso siguiente. Por ejemplo, la frase Si es de noche, entonces prendes las luces de tu casa
requiere tomar una decisin de acuerdo a la hora del da. La condicin (la hora del da)
determina si la accin se debe realizar o no. Este tipo de instrucciones utilizan un control de
seleccin y lo describiremos en los siguientes prrafos.

2) Control por Seleccin

Es comn aplicar decisiones en funcin de los datos de un programa para determinar si se ejecuta
algn instruccin. Por ejemplo, si requerimos calcular la pendiente
de una recta mediante la instruccin pendiente dy/dx,
debemos asegurarnos de que el valor de dx no sea cero (la
divisin por cero est indefinida y produce un error de ejecucin
(run time error) . Debido a esto, se requiere plantear una
decisin en trminos de es dx cero?

Una instruccin de control por seleccin se basa en tomar una decisin en base a una condicin
establecida por los datos de tu programa entre
dos posibles rutas para la siguiente instruccin
a ejecutar. El cdigo de RAPTOR a la derecha
ilustra una instruccin de control por seleccin,
que se muestra con un diamante en los diagramas
de flujo . La decisin se establece como una
pregunta con respuesta yes/no. Cuando se
ejecuta el programa, si la respuesta a una
decisin es yes, entonces se elige la rama
izquierda del control. Si la respuesta es no,
entonces se elige la rama derecha. En el ejemplo
de la figura, se ejecutar una y solo una de las
instrucciones 2a y 2b. Como observar hay dos
posibles trayectorias en la ejecucin del
programa:
Posibilidad 1 Posibilidad 2
Instruccin 1 Instruccin 1
Instruccin 2a Instruccin 2b
Instruccin 3 Instruccin 3

2 of 15
Observa que las dos trayectorias de la instruccin de seleccin pueden contener cero o ms
instrucciones, pero sera inapropiado que ambas trayectorias estuvieran vacas o que tuvieran las
mismas instrucciones, porque entonces no tendra sentido tu decisin.

Expresiones de decisin
Las instrucciones de control por seleccin requieren de una expresin que pueda evaluarse como
Yes/No (o verdadero y falso). Una expresin de decisin es una combinacin de valores
(constantes y/o variables y operadores). Las siguientes reglas para construir expresiones de
decisin son muy importantes, as que revsalas con cuidado.

Como recordars de nuestra lectura anterior acerca de las expresiones de asignacin, una
computadora slo puede realizar una operacin a la vez. Cuando se evala una expresin de
decisin, las operaciones de la expresin no se evalan de izquierda a derecha simplemente, sino
de acuerdo a reglas de orden de precedencia pre-establecidas. El orden en que se interpretan
las operaciones puede hacer una diferencia radical en el valor final Yes/No que se calcule. En
caso de duda del orden de precedencia, es preferible emplear parntesis para agrupar las
expresiones. Puesto que las expresiones de decisin contienen clculos similares a los de las
expresiones de asignacin, el orden de precedencia incluye operadores de las expresiones de
asignacin.

El orden de precedencia para evaluar a las expresiones de decisin sigue las reglas siguientes:
1. calcular todas las funciones en primer lugar
2. calcular las expresiones que se encuentren entre parntesis
3. calcular las exponenciaciones (^,**), es decir, elevar un nmero a una potencia
4. calcular multiplicaciones y divisiones, de izquierda a derecha
5. calcular sumas y restas, de izquierda a derecha,
6. evaluar operadores relacionales (= != /= < <= > >=), de izquierda a
derecha,
7. evaluar operador lgico not, de izquierda a derecha,
8. evaluar operador lgico and, de izquierda a derecha,
9. evaluar operador lgico xor, de izquierda a derecha,
10. evaluar operador lgico or, de izquierda a derecha,

De esta lista, en las reglas 6 a 10 encontramos operadores relacionales y lgicos, que se explican
en la tabla siguiente:

Operacin Descripcin Ejemplo


= "es igual a" 3 = 4 es No(falso)
!= "no es igual a" 3 != 4 es Yes(verdad)
/= 3 /= 4 es Yes(verdad)
< "es menor que" 3 < 4 es Yes(verdad)
<= "es menor o igual a" 3 <= 4 es Yes(verdad)
> "es mayor que" 3 > 4 es No(falso)
>= "es mayor o igual a" 3 >= 4 es No(falso)

3 of 15
and Yes(verdad) si ambos son Yes (3 < 4) and (10 < 20)
es Yes(verdad)
or Yes(verdad) si cualquiera es (3 < 4) or (10 > 20)
Yes es Yes(verdad)
xor Yes(verdad) si los valores Yes xor No
"yes/no" no son iguales is Yes(verdad)
not Invierte el valor not (3 < 4)
Yes si No; No si Yes is No(falso)

Los operadores relaciones (= != /= < <= > >=), comparan dos valores del mismo tipo (ya
sean nmeros, textos o valores yes/no). Por ejemplo, 3 = 4 or "Wayne" = "Sam" son
comparaciones vlidas, pero 3 = "Mike" no es vlido.

Los operadores lgicos (and , or, xor), combinan dos valores Booleanos (verdad/falso) en un
nico valor Booleano. EL operador lgico not, convierte un valor Booleano en su valor
opuesto. Algunos ejemplos se muestran lneas abajo:

Ejemplo Vlido o No-Vlido?


(3<4) and (10<20) Vlido
(flaps_angle < 30) and Vlido, suponiendo que flaps_angle y
(air_speed < 120) air_speed son valores numricos
5 and (10<20) No vlido el valor del lado izquierdo "and" es un
nmero, no un valor Yes/No
5 <= x <= 7 No vlido, 5 <= x se evala como Yes/No y el
resultado se compara mediante un operador
relacional, yes/no <= 7, que es una expresin no-
vlida.

Ejemplos de Control por Seleccin

Para ayudar a clarificar las instrucciones de control


por seleccin, revisa los ejemplos siguientes. En el
primer ejemplo a la derecha, se trata de si un
esudiante obtiene calificacin aprobatoria, recibe un
mensaje de felicitacin; en caso contrario, no se
despliega algn mensaje (observa que en la
trayectoria del No est vaca)

4 of 15
En el ejemplo a la derecha, se despliega
siempre un texto de acuerdo a la
calificacin, cuyo valor determina cual
texto se muestra.

En el ejemplo siguiente, si el estudiante


no aprueba, entonces se despliegan dos
lneas de texto, pero solo una lnea de
texto si aprueba.

En el ltimo ejemplo a la derecha, la


lgica de la expresin de decisin est
invertida. Esto es perfectamente aceptable
si se est seguro de cubrir todos los casos
posibles. Nota que la inversin de mayor
o igual es simplemente menor que.

Instrucciones de Seleccin en Cascada

Una instruccin de control por seleccin toma una decisin entre dos opciones posibles. Si se
necesita crear una decisin mltiple que incluya ms de dos opciones, se requiere emplear varias
instrucciones de control por seleccin simple. Por ejemplo, si estamos asignando una calificacin
literal (A,B,C,D, o F) basados en una calificacin numrica, necesitamos seleccionar entre cinco
opciones, como se muestra en la figura de abajo. Esto se le denomina como control de seleccin
en cascada (por aquello de que el agua fluye sobre una serie de cadas de agua).

5 of 15
3) Control Iterativo (Loop)

Las instrucciones de control iterativo nos permiten repetir una o ms


instrucciones hasta que se cumpla alguna condicin (es decir, que la
condicin sea verdadera/yes). Este tipo de control permite ejecutar las
mismas instrucciones una y otra vez sin cansancio, y es lo que vuelve a
las computadoras herramientas valiosas para tareas repetitivas.

En RAPTOR se emplean los smbolos de elipse y de rombo para representar una iteracin
(loop), El nmero de veces que se ejecuta la iteracin depende de la expresin de decisin que
se encuentra escrita en el smbolo del rombo. En la ejecucin, si la expresin de decisin se
evala como no la ejecucin contina desde el inicio de la iteracin. Las instrucciones de la
iteracin se pueden colocar tanto antes como despus del smbolo de rombo.

Para comprender exactamente cmo funciona una


iteracin, estudiemos el ejemplo en RAPTOR que se
muestra a la derecha. Notamos lo siguiente:

La instruccin 1 se ejecuta exactamente una vez ya


que se encuentra antes que inicie la iteracin.
La instruccin 2 por encontrarse antes de la
decisin, se ejecutar al menos una vez.
Si la expresin de decisin se evala a yes,
entonces termina la iteracin y el control pasa a la
instruccin 4.
Si la expresin de decisin se evala a no,
entonces el control pasa a la Instruccin 3, que se
ejecuta y el control pasa al inicio de la iteracin
nuevamente.
Nota que la instruccin 2 siempre se ejecutar al
menos una vez y que la Instruccin 3 es posible que
nunca se ejecute.

Existen muchas posibilidades en la ejecucin de este programa de ejemplo para listarlas todas.
En la siguiente tabla se muestran algunas de ellas. Trata de visualizar el patrn de ejecucin en la
cuarta columna.

6 of 15

Statement3
Decision
Possibilidad 1 Possibilidad 2 Possibilidad 3 Possibilidad 4
Instruccin 1 Instruccin 1 Instruccint 1 (puedes ver el
Instruccin 2 Instruccin 2 Instruccin 2 patrn de cada
Decisin ("yes") Decisin ("no") Decisin ("no") posibilidad?)
Instruccin 4 Instruccin 3 Instruccin 3
Instruccin 2 Instruccin 2
Decisin ("yes") Decisin ("no")
Instruccin 4 Instruccin 3
Instruccin 2
Decisin ("yes")
Instruccin 4

En el programa RAPTOR de ejemplo, Instruccin 2 podra quitarse, con lo que la primera


instruccin sera la Decisin. O Instruccin 2 podra ser un bloque de instrucciones. En
cualquiera de los dos casos, la iteracin se ejecuta de la misma manera. Similarmente,
Instruccin 3 podra eliminarse o reemplazarse por un bloque de instrucciones. En resumen,
cualquiera de las instrucciones antes o despus de la Decisin podra ser otra instruccin de
iteracin! Si tenemos una iteracin dentro de otra iteracin, obtenemos lo que se denomina
iteraciones anidadas.

Es posible que la instruccin de Decisin nunca se evale a yes. En tal caso tenemos una
iteracin infinita que nunca se detendr. (Si llega a presentarse este caso, tendrs que detener
manualmente tu programa, seleccionando el cono de stop que aparece en la barra de
herramientas de RAPTOR). Realmente no es deseable tener esta situacin al programar por lo
que una (o ms) de las instrucciones dentro de la iteracin debe cambiar alguna de las variables
que aparezcan en la instruccin de Decisin para que eventualmente se evale a yes.

Iteracin de validacin de la Entrada

Un uso comn de las iteraciones son las validaciones de la entrada del usuario. Si deseas que
el usuario introduzca datos de entrada que cumplan ciertas restricciones, tal como la edad de una
persona, o introducir un nmero entre 1 y 10, se requiere validar la entrada de datos para
asegurarnos que las restricciones se cumplan antes de emplear dichos datos en tu programa. Los
programas que validan la entrada de datos del usuario y realizan algn otro tipo de deteccin de
posibles errores al ejecutarse, se les llama programas robustos.

Un error comn en los programadores novatos es validar la entrada de datos utilizando una
instruccin de seleccin. Esto puede fallar para detectar un dato no-vlido porque el usuario
puede ingresar otro dato no-vlido al segundo intento. Lo correcto es emplear una instruccin de
iteracin para esto.

Los dos ejemplos siguientes muestran la validacin de la entrada de datos del usuario.
Felizmente puede verse un patrn en su diseo: casi cualquier iteracin de validacin que t
escribas, contendr una instruccin de entrada, una decisin y un mensaje de error.

7 of 15
Los dos ejemplos siguientes muestran la validacin de la entrada del usuario. Felizmente puede
verse un partrn. Casi todos los ciclos de valicin que escribas incluyen una instruccin de
entrada, una decisin y un mensaje de error.

Iteraciones con Contador de Ciclos

Un uso comun de una iteracin es ejecutar un bloque de


instrucciones un nmero definido de veces. Este tipo de
iteracin es llamada iteracin con contador de ciclos
ya que requiere una variable que cuente uno a uno
cada ciclo de ejecucin. Por lo tanto, se requiere adems
una variable Count que es:
1. Inicializada antes de comenzar la
iteracin.
2. Modificada en su valor dentro de la
iteracin, y
3. Utilizada en la instruccin de decisin
dentro de la iteracin para detenerla.
Se recomienda emplear el acrnimo IPEM (Inicializa,
Prueba, Ejecuta y Modifica) para verificar si una
iteracin y su variable contador se emplean de forma
adecuada.

Un ejemplo de iteracin con contador de 100 ciclos se


muestra en la figura de la derecha. Observa los
siguientes puntos importantes:

8 of 15
En el ejemplo, se usa una variable contador que se llama Count. Podemos emplear
cualquier nombre para denotarla, pero se procura emplear un nombre descriptivo y
comprensivo de su papel en la iteracin.

Debemos asignar un valor inicial a la variable Count antes de comenzar la iteracin. Es


comn darle un valor inicial de uno (1), pero podramos darle un valor inicial de 20 y
contar hasta 119. Trata de emplear un valor inicial apropiado al problema que se busca
resolver.

Es preferible que la expresin de decisin que controla a la iteracin sea una desigualdad
como mayor o igual a. Esto es ms seguro que un igual a.

La variable Count de la iteracin se incrementa en uno en la iteracin. Se puede utilizar


otro valor de incremento, pero esto cambiar el nmero de veces que se repite la
iteracin.

Los siguientes programas en RAPTOR muestran errores comunes que se deben evitar cuando se
emplean iteraciones. Intenta encontrar los errores en cada programa (Al final de la pgina se
explican en caso de que no logres identificarlos). Estos tres ejemplos tienen iteraciones infinitas
es decir, que nunca terminan--.

2 3

1 Count nunca se modifica y seimpre es 1.


2 Count se inicializa a 1 en cada ciclo y por esto nunca es mayor o igual a 100.
3 La decisin nunca se evala a "yes"

9 of 15
Los siguientes seis programas de ejemplo, muestran posibles variantes de la iteracin con
contador de ciclos. Los seis ejemplos realizan lo mismo ejecutan el bloque de instrucciones
representados por la caja vaca un nmero Limit de veces. Puedes emplear la variante que
tenga ms sentido para t. En cada ejemplo, pon atencin a la inicializacin de Count y a la
expresin de Decisin.

10 of 15
Iteraciones de Entrada

Algunas veces se requerir en un programa que el usuario introduzca varios datos para
procesarlos. Hay dos tcnicas para lograrlo en forma adecuada. El primer mtodo consiste en
tener un valor especial que indique cuando se han terminado de introducir los datos. Un
segundo mtodo es preguntar antes al usuario sobre la
cantidad de datos que se van a introducir, utilizando
este valor para implementar una iteracin con contador
de ciclos. Estos dos mtodos se ejemplifican en los
siguientes dos diagramas de flujo. En ambos casos, los
rectngulos vacos significan el procesamiento de los
datos ingresados. Observa cmo se controla el ingreso
de los datos y no nos preocupemos por la forma en
que estos datos son procesados,

Iteraciones"Totalizadoras"

Otro uso comn de las iteraciones es calcular la suma


de una serie de valores que ingresa el usuario. Esto se
llama iteracin totalizadora o de suma. El
programa que se muestra produce una Suma de una
serie de valores ingresados por el usuario.

Para crear una suma se deben agregar dos


instrucciones adicionales a la iteracin:
Una instruccin para inicializar antes de la
iteracin, una variable Suma a zero (0)

11 of 15
Por ejemplo,
Suma 0
Una instruccin de asignacin dentro de la iteracin que agregue cada valor ingresado a
la variable totalizadora Suma.
Por ejemplo,
Suma Suma + Valor

Asegrate de comprender una asignacin como Suma Suma + Valor, que significa
calcular la expresin a la derecha de la flecha, tomando el valor actual de Suma y agregarle el
nuevo Valor ingresado. El resultado de la expresin registrarlo en la variable Suma.

El nombre Suma de la variable, no es mgico. Se puede emplear cualquier otro nombre, como
Total o Sumatoria.

Iteraciones ''De conteo''

Otro uso comn de las


iteraciones es para contar el
nmero de veces que
ocurre un evento. Por
ejemplo el programa de la
derecha. Nota las
similitudes con el ejemplo
anterior.

Estos dos ltimos ejemplos


nos muestran cmo el
mismo patrn de
instrucciones se presenta y
puede emplearse para
resolver problemas
similares. Al estudiar y
comprender estos ejemplos,
se pueden tener las bases
para resolver problemas
ms complejos..

12 of 15
Resumen
En estas notas hemos visto cmo escribir instrucciones de Seleccin y de Iteracin en
RAPTOR. Las instrucciones de Seleccin se emplean cuando se requiere elegir entre un dos
grupos de instrucciones a ejecutar. Las instrucciones de Iteracin se emplean para repetir un
bloque de instrucciones. Si tienes dudas para determinar entre usar una u otra podra serte til
responder a las siguientes preguntas:

Necesitas decidir entre hacer algo o no hacerlo ? (Seleccin)


Necesitas hacer una u otra instruccin (pero no ambas)? (Seleccin)
Necesitas elegir una opcin entre muchas otrass? (Seleccin de cascada)
Necesitas hacer alguna cosa ms de una vez? (Iteracin)
Conoces cantas veces debes repetir algo? (Iteracin con contador de ciclo)

Cuando se emplean instrucciones de Seleccin es til tener en mente las siguientes preguntas:
La expresin de decisin permite que se ejecuten las instrucciones correctas?
La expresin de decisin permite que se salten las instrucciones correctas?

Cuando se emplean instrucciones de Iteracin es til tener en mente las siguientes preguntas:
Qu instrucciones deben repetirse?
Se han inicializado las variables adecuadas anters de comenzar la iteracin?
La expresin de decisin se evala a "Yes" en algn momento de la ejecucin?
Si se trata de una iteracin con contador de ciclo, se repite el nmero correcto de veces?
(Un error comn en las iteraciones con contador de ciclo, es que si debe repetirse N
veces, se repita N-1 o N+1 veces)

13 of 15
What you have hopefully learned
The ordering of programming statements is a key part of program development.

There are 3 basic types of program flow: Sequential, Selection, and Loop (Iteration).

Decision expressions, which evaluate to a "Yes"/"No" (true/false) value are used to


determine the path a program takes to its "next instruction."

When to use Selection statements and/or Loop statements for a particular problem
solving task.

Selection statements are used to execute or skip one or more programming statements.

Loop statements are used when one or more programming statements must be repeated.

The difference between "counter-controlled loops," "input loops," and "running total"
loops.

Infinite loops are bad and special care should be used to make sure your loops always
terminate.

Reading Self-Check
Which control structure would be most appropriate for the following problems:
Sequential, Selection, Cascading Selection, or a Loop
____________ Printing an appropriate message for a cadets class year.
____________ Checking for a correct input and continually re-checking if incorrect.
____________ Computing the average GPA of your CS110 section.
____________ Determining the volume of a sphere given a radius.
____________ Initializing all of the variables at the beginning of a program.
____________ Determining whether a vowel, constant or digit has been typed in.
____________ Writing out a message if an integer variable contains a negative value.
____________ Writing Odd or Even depending on an integer variables value.
____________ Writing out the squares of the numbers 1 though 100.
____________ Reading in scores until a user enters a negative number.

Which of the following Decision expressions will always evaluate to "Yes", always evaluate to
"No", or could possibly be either "Yes" or "No"?

____________ GR_Score > 100 or GR_Score < 90.


____________ GR_Score > 100 and GR_Score < 90.
____________ GR_Score < 100 or GR_Score > 90.
____________ GR_Score < 100 and GR_Score > 90.

14 of 15
Write a series of RAPTOR statements that determines if X has the value 1, 2, or 3, and prints
out ONE, TWO, or THREE accordingly.

Write a complete program that converts between degrees Fahrenheit and Celsius. The user must
first enter the conversion that is desired (F to C or C to F) using any means you want and then
enter the value to be converted. The formulas for conversion are:
F = 9/5 C + 32 and C = 5/9 (F 32)

Write a complete program that plays the game of HI-LO. The program asks one user for a
number between 1 and 100 and verifies that such a number has been entered. It then asks a
second user for a guess and reads it in. If the guess is correct a congratulation message is
written to the screen and the program ends. Otherwise the message HI or LOW is displayed
(if the guess is higher or lower) and another guess is asked for and read in.

15 of 15

Вам также может понравиться