Title: Estructuras b
1Estructuras básicas
Tema 6
2Estructuras básicas
- TEMA 6
- Programacion estructurada. Estructura de
selección. Sentencias. Sentencias anidadas.
Casos particulares. Estructura de control.
Bucles. Tipo hacer mientras hacer hasta.
Incremento o decremento. Terminaciones anormales.
Diseño de bucles. Bucles anidados.
3Estructuras básicas
6.1 Programación estructurada
- La programación estructurada es una forma de
escribir programas de computadora deforma clara,
utilizando únicamente tres estructuras
secuencia, selección e iteración siendo
innecesario y no permitiéndose el uso de la
instrucción o instrucciones de transferencia
incondicional. - La programación estructurada surge a finales de
los años 1960 con el objetivo de realizar
programas confiables y eficientes, y que además
fueran escritos de manera de facilitar su
comprensión posterior. - Hoy en día las aplicaciones informáticas son
mucho más ambiciosas que las necesidades de
aquellos años, por lo que se desarrollaron nuevas
técnicas, tales como la programación orientada a
objetos y el desarrollo de entornos de
programación que facilitan la programación de
grandes aplicaciones. - De todas formas, el paradigma estructurado tiene
vigencia en muchos ámbitos de desarrollo de
programas y constituye una buena forma de
iniciarse en la programación de computadoras.
4Estructuras básicas
6.1 Programación estructurada
- El teorema del programa estructurado, de
Böhm-Jacopini, demuestra que todo programa puede
escribirse utilizando únicamente las tres
instrucciones de control siguientes - Secuencia
- Instrucción condicional.
- Iteración (bucle de instrucciones) con condición
al principio. - Solamente con estas tres estructuras o patrones
lógicos se pueden escribir todos los programas y
aplicaciones posibles. Si bien los lenguajes de
programación tienen un mayor repertorio de
estructuras de control, éstas pueden ser
construidas mediante las tres básicas.
5Estructuras básicas
6.1 Programación estructurada
6Estructuras básicas
6.1 Programación estructurada
- El flujo de control de un programa
- La expresión flujo de control hace referencia al
orden en el que se ejecutarán las instrucciones
de un programa, desde su comienzo hasta que
finaliza. El flujo normal de ejecución es el
secuencial. Si no se especifica lo contrario, la
ejecución de un programa empezaría por la primera
instrucción e iría procesando una a una en el
orden en que aparecen, hasta llegar a la última. - Algunos programas muy simples pueden escribirse
sólo con este flujo unidireccional. No obstante,
la mayor eficacia y utilidad de cualquier
lenguaje de programación se deriva de la
posibilidad de cambiar el orden de ejecución
según la necesidad de elegir uno de entre varios
caminos en función de ciertas condiciones, o de
ejecutar algo repetidas veces, sin tener que
escribir el código para cada vez. - Con frecuencia, el programador necesita que el
programa no se comporte sólo de modo secuencial.
Por ejemplo, calcular una funcion f(x) para los X
gt 0.
7Estructuras básicas
6.1 Programación estructurada
- El flujo de control de un programa
- También puede ocurrir que interese que un grupo
de instrucciones se ejecute repetidamente hasta
que se le indique que se detenga. Por ejemplo,
calcular el promedio de notas para cada uno de
los alumnos de un curso, o realizar algún cálculo
con cada uno de los elementos de un vector. - Para las dos situaciones planteadas existen dos
soluciones las sentencias de control selectivas
y las repetitivas. Éstas permiten que el flujo
secuencial del programa sea modificado. También
cumplen con este objetivo las sentencias
denominadas de invocación o salto. - Las sentencias alternativas también son conocidas
como sentencias selectivas porque permiten
seleccionar uno de entre varios caminos por donde
seguirá la ejecución del programa. En algunos
casos esta selección viene determinada por la
evaluación de una expresión lógica.
8Estructuras básicas
6.2 Estructura de selección. Sentencias anidadas.
- Según lo expresado, las estructuras de decisión
simple y doble permiten seleccionar entre dos
alternativas posibles. Sin embargo, la
instrucción SI-ENTONCES puede ser utilizada
también en casos de selección de más de dos
alternativas. Esto es posible anidando estas
instrucciones. Es decir, una estructura
SI-ENTONCES puede contener a otra, y esta a su
vez a otra. La representación en pseudocódigo es
la siguiente - SI ltcondición_1gt ENTONCES
- lt sentencias_1 gt
- SINO
- SI ltcondición_2gt ENTONCES
- lt sentencias_2 gt
- SINO
- SI ltcondición_3gt ENTONCES
- lt sentencias_3 gt
- SINO
- .
- .
- FIN-SI
- FIN-SI
- FIN-SI
Como se puede observar, el anidamiento de
instrucciones alternativas permite ir descartando
valores hasta llegar al bloque de instrucciones
que se debe ejecutar. En las instrucciones SI
anidadas, las instrucciones ENTONCES y FIN-SI se
aplican automáticamente a la instrucción SI
anterior más próxima. A fin de que las
estructuras anidadas sean más fáciles de leer, es
práctica habitual aplicar sangría al cuerpo de
cada una.
9Estructuras básicas
6.2 Estructura de selección. Sentencias anidadas.
- Ejemplo Un sensor toma (lee) la temperatura
ambiente y de acuerdo al rango en que se
encuentre, debe emitir un mensaje. La escala es
la siguiente - Mayor que 100 Temperatura muy alta Mal
funcionamiento - Entre 91 y 100 Rango normal
- Entre 51 y 90 Bajo el rango normal
- Menor que 50 Muy frío Apague el equipo
- ALGORITMO Sensor
- INICIO
- LEER temperatura
- SI temperatura gt 100 ENTONCES
- ESCRIBIR Temperatura muy alta Mal
funcionamiento - SINO
- SI temperatura gt 90 ENTONCES
- ESCRIBIR Rango normal
- SINO
- SI temperatura gt 50 ENTONCES
- ESCRIBIR Bajo el rango normal
- SINO
- ESCRIBIR Muy frío Apague equipo
10Estructuras básicas
6.2 Estructura de selección. Sentencias
anidadas. Casos Particulares
- La sentencia IR-A (go to)
- La sentencia GO TO pertenece a un grupo de
sentencias conocidas como sentencias de salto
(jump). La característica de este grupo es hacer
que el flujo de control salte a otra parte del
programa. Otras sentencias de este grupo son
interrumpir o romper (BREAK), continuar
(CONTINUE), volver (RETURN), lanzar (THROW). Las
dos primeras se utilizan generalmente con
sentencias de alternativa múltiple. Para retornar
de la ejecución de funciones o métodos se usa
RETURN. - La sentencia GO TO se utilizaba mucho en los
primeros lenguajes de programación porque era la
única manera de saltar de una instrucción del
programa a otra. - Esta instrucción consta de una sentencia IR_A y
una sentencia asociada con una etiqueta. - Cuando se ejecuta esta instrucción, se transfiere
el control del programa a la etiqueta asociada.
11Estructuras básicas
6.2 Estructura de selección. Sentencias
anidadas. Casos Particulares
- La sentencia IR-A (go to)
- La representación en pseudocódigo es la
siguiente - INICIO
- .
- .
- IR_A etiqueta_1
- .
- .
- FIN
- etiqueta_1
- . // El flujo salta aquí
- El efecto de esta instrucción es transferir sin
condiciones el control del programa a la etiqueta
especificada. Es una de las operaciones más
primitivas para traspasar el control de una parte
del programa a otra. Sin embargo, su uso produce
código inconsistente, incompleto o complicado de
mantener. Justamente por ello en los años 60 y
70, cuando surgió la programación estructurada,
la comunidad informática se expresó a favor de
otras sentencias de control (IF ó bucles FOR y
DO-WHILE) en lugar del GOTO.
12Estructuras básicas
6.2 Estructura de selección. Sentencias
anidadas. Casos Particulares
- La sentencia IR-A (go to)
- Tal creencia está tan arraigada que el GOTO es
muy criticado y desaconsejado por todos los que
se dedican a la enseñanza de la programación. - Si bien la instrucción GOTO puede parecer útil y
muy flexible, es precisamente en esa flexibilidad
donde radica su peligro y los motivos de su
obsolescencia.
13Estructuras básicas
6.3 Estructuras de Control. Bucles
- En muchas ocasiones la forma más apropiada de
expresar un algoritmo consiste en la repetición
de una misma instrucción de manera controlada,
una cantidad finita de veces determinada de
antemano (al diseñar el programa) o en tiempo de
ejecución (cada vez que se corre el programa). - Por ejemplo, podría ser necesario diseñar un
algoritmo similar al de los cajeros automáticos,
que solicite una clave al usuario y bloquee el
acceso en caso de no ingresar la contraseña
correcta luego de tres intentos. O bien, si se
desea procesar grupos de datos ingresados por
teclado o leídos desde un archivo, hasta que no
se encuentren más datos. - Las estructuras algorítmicas que permiten
realizar operaciones de este tipo se conocen con
el nombre de estructuras repetitivas o
iterativas. - Definicion Las estructuras que repiten una
secuencia de instrucciones un número determinado
de veces se denominan repetitivas o bucles y se
denomina iteración a la ejecución de cada
repetición.
14Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- Ejemplo
- Se desea sumar una lista de números que ingresa
desde teclado (por ejemplo, edades de los alumnos
de una clase). El algoritmo debería ingresar el
valor y sumarlo a una variable SUMA que contenga
las sucesivas sumas parciales. - ALGORITMO suma
- INICIO
- Suma0
- LEER número
- Suma suma número
- LEER número
- Suma suma número
- .
- FIN
- Como podemos observar, si no utilizamos alguna
instrucción de repetir, el algoritmo deberá
realizar tantas lecturas y sumas como alumnos se
procesen 10, 100, 1000,...
15Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- Es evidente que el método no es óptimo, pero el
ejemplo sirve para identificar las instrucciones
que se repiten. En este caso, el bucle está
formado por las instrucciones - LEER número
- suma suma número
- y la cantidad de iteraciones estará relacionada
con el número de alumnos que se procesen durante
la ejecución. - Entonces, las dos cuestiones importantes cuando
se utilizan estructuras repetitivas son qué
contiene el bucle? y cuántas veces se repite? - Las estructuras repetitivas se diferencian en la
forma en que se produce la condición de fin del
bucle y deberá utilizarse aquella más apropiada
al problema particular de que se trate. - A continuación, veremos las más usuales
16Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.1 La estructura PARA (for)
- Problema Se desea un programa que muestre en
pantalla los números pares entre 1 y 99. - INICIO
- ESCRIBIR 2
- ESCRIBIR 4
-
- ESCRIBIR 96
- ESCRIBIR 98
- FIN
- Se dijo que la computadora es muy hábil para
repetir tareas sencillas, como la del problema.
Cuando se necesita que la computadora repita una
operación, con una pequeña variación cada vez, se
deben identificar las condiciones para la
repetición, y expresar esta variación de una
forma comprensible para la máquina.
17Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.1 La estructura PARA (for)
- Problema Se desea un programa que muestre en
pantalla los números pares entre 1 y 99. - En este caso, lo que se desea es una secuencia de
números pares, que van desde 2 hasta 98. Estos
números pueden expresarse como 2 x k, siendo k un
entero que varía entre 1 y 98/2 49. - Cuando se conoce exactamente la cantidad de veces
que es necesario repetir una instrucción, la
estructura más apropiada para expresarlo como
algoritmo es la estructura PARA. En este caso se
puede escribir - INICIO
- PARA k DESDE 1 HASTA 49
- ESCRIBIR k 2
- FIN-PARA
- FIN
18Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.1 La estructura PARA (for)
- Problema Se desea un programa que muestre en
pantalla los números pares entre 1 y 99. - En este caso, lo que se desea es una secuencia de
números pares, que van desde 2 hasta 98. Estos
números pueden expresarse como 2 x k, siendo k un
entero que varía entre 1 y 98/2 49. - Cuando se conoce exactamente la cantidad de veces
que es necesario repetir una instrucción, la
estructura más apropiada para expresarlo como
algoritmo es la estructura PARA. En este caso se
puede escribir - INICIO
- PARA k DESDE 1 HASTA 49
- ESCRIBIR k 2
- FIN-PARA
- FIN
Otra opción sería INICIO PARA i DESDE 2 HASTA
98 INCREMENTO 2 ESCRIBIR i FIN-PARA FIN
19Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.1 La estructura PARA (for)
- Si ahora se solicita
- Problema Se desea un programa que muestre en
pantalla los números pares entre 1 y 200. - la solución mantiene su sencillez de expresión
- INICIO
- PARA N DESDE N HASTA 200 INCREMENTO 2
- ESCRIBIR i
- FIN-PARA
- FIN
20Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.1 La estructura PARA (for)
- La estructura PARA en forma general es
- PARA variable DESDE inicial HASTA final
INCREMENTO incremento - INSTRUCCIÓN
-
- INSTRUCCIÓN
- FIN-PARA
- Donde
- variable es el nombre de una variable de tipo
numérico, en particular entero, definida en el
programa, cuyos valores se irán modificando en
cada repetición. Es común utilizar como nombre de
esta variable i, que proviene de la palabra
índice (index en inglés), y si se utilizan varias
instrucciones PARA, emplear las letras siguientes
del abecedario j, k, l. - inicial es el valor que toma la variable en la
primera repetición. - final es el valor que toma la variable en la
última repetición. - incremento es el incremento que recibirá la
variable entre repeticiones, es decir, el valor
que se le sumará a variable cada vez que se
termine una repetición y antes de iniciar la
siguiente. Si se omite, se considera que vale 1.
También puede tomar valores negativos.
21Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.2 La estructura MIENTRAS (whiledo) y la
estructura HASTA (repeatuntil) - En algunos casos no se conoce de antemano la
cantidad de veces que será necesario repetir un
conjunto de instrucciones para solucionar el
problema, o bien es conveniente que estas
instrucciones sean repetidas hasta alcanzar una
determinada condición (llamada condición de
parada). En estas situaciones se emplean
estructuras repetitivas más generales que PARA,
como las estructuras - MIENTRAS y HASTA.
22Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.2 La estructura MIENTRAS (whiledo) y la
estructura HASTA (repeatuntil) - Problema Se desea un programa que calcule e
informe el precio de una llamada telefónica, a
partir del número de minutos ingresado por el
operador, sabiendo que el precio por minuto es de
0,23. Esta operación debe repetirse cada vez que
el operador ingrese una cantidad de minutos mayor
que 0, y detenerse en caso contrario. - Como se desconoce la cantidad de veces que se
repetirá el cálculo del precio, y tampoco puede
solicitarse al operador que indique este dato al
inicio del programa, la estructura PARA no es
apropiada para resolver el problema. - INICIO
- LEER minutos
- HACER
- precio minutos 0,23
- ESCRIBIR precio
- LEER minutos
- HASTA minutos lt 0
- FIN
23Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.2 La estructura MIENTRAS (whiledo) y la
estructura HASTA (repeatuntil) - Puede cuestionarse que si el operador ingresa un
número menor que 0 la primera vez, el programa
mostrará un valor incorrecto y solicitará un
nuevo dato antes de detenerse. - Una solución alternativa sería
- INICIO
- LEER minutos
- MIENTRAS minutos gt 0
- precio minutos 0,23
- ESCRIBIR precio
- LEER minutos
- FIN-MIENTRAS
- FIN
En este caso, el operador puede ingresar un
número menor o igual a cero la primera vez que el
programa le solicita un dato, y el programa se
detendrá sin informar un precio erróneo. Es
importante notar que las condiciones de parada
son diferentes. Existen muchas posibilidades para
expresar la solución a este problema
24Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- 6.3.2 La estructura MIENTRAS (whiledo) y la
estructura HASTA (repeatuntil) - La estructura MIENTRAS tiene la forma
- MIENTRAS condición
- INSTRUCCIÓN
-
- INSTRUCCIÓN
- FIN-MIENTRAS
- Al ejecutarse se evalúa condición, y en caso de
resultar verdadera se ejecutan las instrucciones
del bloque, mientras condición mantenga su valor
verdadero. - La estructura HASTA toma la forma
- HACER
- INSTRUCCIÓN
-
- INSTRUCCIÓN
- HASTA condición
- Se dice que MIENTRAS y HASTA son formas más
generales de iterar que PARA porque esta última
se puede expresar utilizando tanto MIENTRAS como
HASTA.
25Estructuras básicas
6.3 Estructuras de repeticion. Bucles
- Problema Se desea un programa que muestre en
pantalla los números pares entre 1 y 99. - que se resolvió utilizando PARA de la siguiente
manera - INICIO
- PARA k DESDE 1 HASTA 49
- ESCRIBIR k 2
- FIN-PARA
- FIN
- también puede expresarse utilizando
- MIENTRAS
- INICIO
- k 1
- MIENTRAS k lt 49
- ESCRIBIR k 2
- k k 1
- FIN-MIENTRAS
- FIN
O utilizando HASTA INICIO k 1 HACER ESCRIBIR
k 2 k k 1 HASTA k gt 49 FIN
26Estructuras básicas
6.4 Terminaciones Anormales
- Instrucción INTERRUMPIR (BREAK)
- Esta instrucción se utiliza cuando se desea
terminar un bucle en un lugar determinado del
cuerpo del bucle sin esperar a que este termine
de modo natural por su entrada o su salida. Esta
instrucción corta el ciclo de ejecución, debe ser
utilizada con precaución. - Ejemplo
- LEER número
- HACER
- IF número lt 0 INTERRUMPIR
- suma suma número
- LEER número
- HASTA número gt 100
- La instrucción Interrumpir sale del bucle HACER y
sigue con la instrucción siguiente a la
instrucción HASTA. - La sentencia INTERRUMPIR (BREAK) se utiliza
frecuentemente junto con una sentencia SI (IF)
actuando como una condición interna del bucle.
27Estructuras básicas
6.4 Terminaciones Anormales
- Instrucción CONTINUAR (CONTINUE)
- Esta instrucción hace que el flujo de ejecución
salte el resto de un cuerpo del bucle para
continuar con el siguiente bucle o iteración.
Esta característica suele ser útil en algunas
condiciones. - Ejemplo
- PARA i DESDE 0 HASTA 20
- SI (i mod 4 0 ) ENTONCES
- CONTINUAR
- FIN-SI
- ESCRIBIR i, ,
- FIN-PARA
- En este ejemplo, si el valor de i es múltiplo de
4, no escribe ese valor en la salida. - El resultado de este bucle será 1, 2, 3, 5, 6,
7, 9, 10, 11, 13, 14, 15, 17, 18, 19. - La sentencia CONTINUAR no afecta la cantidad de
veces que se debe ejecutar el bucle.
28Estructuras básicas
6.5 Diseño de bucles. Bucles Anidados
- En un algoritmo puede existir y es muy frecuente
que existan 2 o más bucles. Dependiendo de la
forma en que estén dispuestos, estos pueden ser
anidados o independientes. - Decimos que los bucles están anidados cuando
están dispuestos de forma tal que unos son
interiores a otros y los bucles serán
independientes cuando son extremos unos con
otros. - Así como se podían anidar estructuras de
selección, también es posible insertar un bucle
dentro de otro. Las reglas para construir
estructuras repetitivas anidadas son iguales en
ambos casos la estructura interna debe estar
incluida totalmente dentro de la externa y no
puede existir solapamiento.
29Estructuras básicas
6.5 Diseño de bucles. Bucles Anidados
30Estructuras básicas
6.5 Diseño de bucles. Bucles Anidados