Está en la página 1de 30

Tema 6

Estructuras básicas
Estructuras básicas

•Unidad 6
Programación 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.
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.
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.
Estructuras básicas
6.1 Programación estructurada

A C C IO N 1
C o n d ic i o n No
NO Condicion SI NO Condicion SI

Si
Accion Accion Accion

A C C IO N 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 No

SI
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.
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.
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
Como se puede observar, el
< sentencias_1 > anidamiento de instrucciones
SINO alternativas permite ir descartando
SI <condición_2> ENTONCES valores hasta llegar al bloque de
< sentencias_2 > instrucciones que se debe ejecutar.
En las instrucciones SI anidadas, las
SINO instrucciones ENTONCES y FIN-SI se
SI <condición_3> ENTONCES aplican automáticamente a la
< sentencias_3 > instrucción SI anterior más próxima.
SINO 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.
FIN-SI
FIN-SI
FIN-SI
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
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.
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.
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.
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.
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,...
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:


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 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.
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
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 Otra opción sería:
FIN-PARA INICIO
FIN PARA i DESDE 2 HASTA 98 INCREMENTO 2
ESCRIBIR i
FIN-PARA
FIN
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
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.
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.
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
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 En este caso, el operador puede ingresar
MIENTRAS minutos > 0 un número menor o igual a cero la
precio = minutos * 0,23 primera vez que el programa le solicita
ESCRIBIR precio un dato, y el programa se detendrá sin
informar un precio erróneo.
LEER minutos
FIN-MIENTRAS Es importante notar que las condiciones
FIN de parada son diferentes. Existen
muchas posibilidades para expresar la
solución a este problema
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 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 INICIO
MIENTRAS k <= 49 k = 1
ESCRIBIR k * 2 HACER
k = k + 1 ESCRIBIR k * 2
FIN-MIENTRAS k = k + 1
FIN HASTA k > 49
FIN
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.
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.
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.
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 A N ID A D A S N ID O S C R U Z A D O S

S A L IR D E L B U C L E ENTRAR AL BUCLE
Estructuras básicas
6.5 Diseño de bucles. Bucles Anidados

También podría gustarte