Tema 6- Estructuras Básicas

Anuncio
Tema 6
Estructuras básicas
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras básicas
6.1 Programación estructurada
A C C IO N
1
NO
Condicion
SI
NO
Condicion
C o n d ic io n
No
SI
Si
Accion
A C C IO N
Accion
Accion
2
A c c io n e s
A C C IO N
N
1
2
A c c io n e s
C o n d ic io n
SI
Computacion - FA.CE.NA.
No
Estructuras 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 > 0.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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 <condición_1> ENTONCES
< sentencias_1 >
SINO
SI <condición_2> ENTONCES
< sentencias_2 >
SINO
SI <condición_3> ENTONCES
< sentencias_3 >
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.
Computacion - FA.CE.NA.
Estructuras 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 > 100 ENTONCES
ESCRIBIR “Temperatura muy alta – Mal funcionamiento”
SINO
SI temperatura > 90 ENTONCES
ESCRIBIR “Rango normal”
SINO
SI temperatura > 50 ENTONCES
ESCRIBIR “Bajo el rango normal”
SINO
ESCRIBIR “Muy frío – Apague equipo”
FIN-SI
FIN-SI
FIN-SI
FIN
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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
Suma=0
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,...
Computacion - FA.CE.NA.
Estructuras 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:
Computacion - FA.CE.NA.
Estructuras 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
ESCRIBIR
[…]
ESCRIBIR
ESCRIBIR
FIN
2
4
96
98
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.
Computacion - FA.CE.NA.
Estructuras 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
Computacion - FA.CE.NA.
Estructuras 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 Otra opción sería:
ESCRIBIR k * 2
INICIO
FIN-PARA
PARA i DESDE 2 HASTA 98 INCREMENTO 2
FIN
ESCRIBIR i
FIN-PARA
FIN
Computacion - FA.CE.NA.
Estructuras 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
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras básicas
6.3 Estructuras de repeticion. Bucles
6.3.2 La estructura MIENTRAS (while…do) y la estructura
HASTA (repeat…until)
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.
Computacion - FA.CE.NA.
Estructuras básicas
6.3 Estructuras de repeticion. Bucles
6.3.2 La estructura MIENTRAS (while…do) y la estructura HASTA
(repeat…until)
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 <= 0
Computacion - FA.CE.NA.
FIN
Estructuras básicas
6.3 Estructuras de repeticion. Bucles
6.3.2 La estructura MIENTRAS (while…do) y la estructura HASTA
(repeat…until)
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 > 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
Computacion - FA.CE.NA.
Estructuras básicas
6.3 Estructuras de repeticion. Bucles
6.3.2 La estructura MIENTRAS (while…do) y la estructura HASTA
(repeat…until)
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
Computacion
- FA.CE.NA. utilizando tanto MIENTRAS
como HASTA.
Estructuras 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:
O utilizando HASTA:
INICIO
k = 1
MIENTRAS k <= 49
ESCRIBIR k * 2
k = k + 1
FIN-MIENTRAS
FIN
INICIO
k = 1
HACER
ESCRIBIR k * 2
k = k + 1
HASTA k > 49
FIN
Computacion - FA.CE.NA.
Estructuras 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 <= 0 INTERRUMPIR
suma = suma + número
LEER número
HASTA número > 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.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras 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.
Computacion - FA.CE.NA.
Estructuras básicas
6.5 Diseño de bucles. Bucles Anidados
P E R M IT ID A S Y P R O H IB ID A S
IN D E P E N D IE N T E S
S A LIR D E L B U C LE
A N ID A D A S
N ID O S C R U Z A D O S
E N T R A R A L B U C LE
Computacion - FA.CE.NA.
Estructuras básicas
6.5 Diseño de bucles. Bucles Anidados
Computacion - FA.CE.NA.
Descargar