Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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.
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:
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:
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.
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)
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.
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
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.
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.
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.
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.
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
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"
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.
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:
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).
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"?
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