Prof. Robert Espinoza Domínguez
Estructuras de control secuenciales y selectivas
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.
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.
Programación estructurada
La programación estructurada es una forma de escribir programas de computadora de forma clara utilizando únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario y no permitiéndose el uso de instrucciones de transferenciaa incondicional (por ejemplo: Go to). transferenci 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. (bucle de instrucciones) Iteración condición al principio
con
la
Programación estructurada
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.
Programación estructurada
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 de Control
Las estructuras de control tienen una finalidad bastante definida: señalar el orden en que tienen que sucederse o ejecutarse los pasos de un algoritmo o instrucciones en un programa. Pueden ser: Secuenciales Selectivas Iterativas
Estructuras secuenciales
Estructuras secuenciales
Son estructuras que obedecen la linealidad, es decir, no admiten saltos
A la ejecución de una instrucción le sigue otra instrucción y así sucesivamente. Mantiene la secuencia de acciones en el orden en el que aparecen las instrucciones. acción 1 acción 1
acción 2
acción 2
… acción n
acción n
Estructura secuencial Inicio
Ejemplo: Sumar y multiplicar 2 números.
Leer y, z
Inicio x, y, z, w: reales Leer y, x y + w y * Escribir
z; z; z; x, w;
x y+z
w y*z
Escribir x, w
Fin
Fin
Ejercicios 1.
El primer problema es determinar el alcance y el tiempo de vuelo de un proyectil lanzado con una velocidad inicial v0 y haciendo un ángulo de grados con la horizontal.
Ejercicios
2
R T
v0 sen 2
máximo alcance de un proyectil, g es la aceleración de la gravedad
g
2v0 sen
g
rad grados
tiempo de vuelo
180
para convertir entre grados y radianes
Ejercicios
Ejercicios 2. Parte del costo de producción de un producto se calcula por el tiempo de operación de una máquina utilizada. Se realizan pruebas para determinar este tiempo ingresando la hora de inicio de y de final de producción en el formato de horas, minutos y segundos registrados en la máquina. El costo está diferenciado por hora, minuto y segundo. Calcular dicho costo. Por ejemplo, se tienen los siguientes datos de entrada: Hora Inicio: 14:30:15 Hora final: 16:40:20 Costo por hora: 60 soles Costo por minuto: 2 soles Costo por segundo: 0,20 soles
Ejercicios 3. Estando en guerra, se necesita enviar a los aliados la cantidad de tanques disponibles en un valor encriptado, por lo que le encarga a usted dicha tarea. La encriptación se hace mediante el ingreso de 5 valores de 5 dígitos cada uno. Estos valores serán enviados a los aliados que ya tienen el programa hecho por usted. Por ejemplo podrían ser estos valores: Valor 1:
34571
Valor 2:
61254
Valor 3:
75120
Valor 4:
24712
Valor 5:
31652
Ejercicios Su sistema, ya disponible en los aliados, tomarán los dígitos según la figura, donde los dígitos de las diagonales se suman y estos 2 valores se multiplican, el resultado será la cantidad de tanques disponibles:
Suma de dígitos de primera diagonal: 8 Suma de dígitos de segunda diagonal: 14 Cantidad de tanques disponibles: 112
Otras estructuras
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 función f(x) para los X > 0.
Otras estructuras
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 o iterativas. Éstas permiten que el flujo secuencial del programa sea modificado. También cumplen con este objetivo las sentencias denominadas de invocación o salto.
Estructuras selectivas
Estructuras selectivas
Las estructuras selectivas permiten seleccionar uno de entre varios caminos por donde seguirá la ejecución del programa. Esta selección viene determinada por la evaluación de una expresión lógica o condición. Pueden ser: Simples Dobles Anidadas Múltiples
Estructura selectiva simple
Diagrama de Flujo
Pseudocódigo Si(condición) entonces
sentencias
V
Fin Si
Condición F
Sentencias En C++ if(condición){ sentencias; }
Estructura selectiva doble Pseudocódigo Diagrama de Flujo
Si(condición) entonces
sentencias 1 Sino
sentencias 2
V
F
Fin Si
condición sentencia1
sentencia2
En C++ if(condición){ sentencias; } else{ sentencias; }
Estructura selectiva anidada
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.
Estructura selectiva anidada Diagrama de Flujo F
V
cond F
F
cond
V
cond
V
Estructura selectiva anidada Pseudocódigo
En C++ if (condición1) {
Si (condición1) entonces Si (condición2) entonces
if (condición2) { bloque1
bloque1
} else {
Sino bloque2 Fin Si Sino Si (condición3) entonces
bloque2 } } else { if (condición3) {
bloque3
bloque3
Sino
}
bloque4
else {
Fin Si
bloque4
Fin Si
} }
Estructura selectiva anidada Ejemplo: Inicio edadJuan
20
edadJose
18
Si (edadJuan < edadJose) entonces
Escribir "Juan es mas joven que Jose" Sino Si (edadJuan > edadJose) Escribir "Juan es mayor que Jose"
Sino Escribir "Juan tiene la misma edad que Jose" Fin Si Fin Si
Fin
Estructura selectiva anidada 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”
Estructura selectiva anidada Solución: 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
Estructura selectiva múltiple
Cuando en una condición existen diversas posibilidades nos vemos obligados a utilizar estructuras selectivas anidadas, lo que complica la realización y depuración del código. Para facilitar esta situación se tiene la estructura selectiva múltiple que permite definir un número ilimitado de ramas basadas en una misma condición. En otras palabras la condición puede tomar más de dos valores y por cada valor que cumpla realizará una acción
Estructura selectiva múltiple Diagrama de Flujo
cond
Caso1
Caso2
CasoN …
Estructura selectiva múltiple Pseudocódigo
Según (condición) Hacer Caso1: Acción1 [salir] Caso2: Acción2 [salir] ....................... CasoN: AcciónN [salir] De otro modo: Acción por defecto Fin Según
Estructura selectiva múltiple (switch) En C++
switch (condición) { case caso1: acción1; [break;] case caso2: acción2; [break;] .................... case casoP: acciónP; [break;] default: acciónN; };
Estructura selectiva múltiple (switch)
La condición puede ser una expresión, siendo ésta una fórmula o una variable. Las sentencias de cada case se ejecutan secuencialmente incluyendo las de los otros casos, a menos que se use la sentencia break que es opcional. En la condicional sólo se permite char, int, byte, short. Omitir la sentencia break trae como consecuencia, ejecutar el siguiente case.