Está en la página 1de 47

Programación Estructurada:

Tema 2. Estructuras de
Control
David Martínez Torres
Instituto de Computación
Universidad Tecnológica de la Mixteca
dtorres@mixteco.utm.mx
Oficina 37
Contenido

1. Secuencial
2. Selectivas
3. Iterativas
Introducción

Bohm y Jacopini [1][2][3] 1966,


demostraron que todos los programas
podrían ser escritos usando solo tres
estructuras de control con una sola entrada
y una sola salida:

• De secuencia
• De selección y,
• De repetición.
Introducción

Teorema de la programación estructurada:

• “Un programa propio es aquel que cumple el uso de las


estructuras de control: secuenciales, selectivas, y
repetitivas.”
• Posee un solo punto de entrada y salida.
• Se puede recorrer toda la estructura del programa
modular.
• Todas las instrucciones son ejecutables y no existen
bucles infinitos.
1. Estructura de control Secuencial

Son instrucciones que se ejecutan una detrás de otras. En


problemas complejos, también se pueden identificar estas
estructuras de control.

Ejemplo 1. Instrucciones secuenciales

int main(){
int cont;
printf(“Programa que calcula el promedio de calificaciones
introducidas por teclado”);

}
1. Estructura de control Secuencial

Ejercicio 1. Escriba un programa que dado el radio de un


círculo por teclado, calcule e imprima su correspondiente
área y perímetro.

area=pi*radio2
perimetro=2*pi*radio
2. Estructura de control Selectiva

Estructura de control que se utiliza cuando


se tiene que evaluar una expresión y el
resultado se ejecuta una sola vez
Se clasifican en: selectivas simples,
selectivas dobles(binarias) y,
selectivas múltiples.
2.1 Selectivas simples
Sintaxis

 Se utilizan cuando se tiene if(condControl)


que evaluar una expresión y sentencia 1;
solo tiene acciones en caso
que sea verdadera la O bien:
expresión.
if (condControl){
sentencia 1;
sentencia n;
}
2.1 Selectiva simple

 Ejercicio 2. Dado un número real por teclado,


determine si es positivo.

 Ejercicio 3. Dada una calificación de una materia de


un alumno, determinar si aprobó.
2.2 Selectiva doble

if (condControl){
 Se selecciona cuando se sentencia 1;
tiene que evaluar una sentencia n;
expresión y se colocan }
acciones tanto cuando la else {
expresión es verdadera o sentencia 1;
falsa. sentencia n;
}
2.2 Selectiva doble (binaria)

 Ejemplo 2: Programa que determina si un alumno aprobó un examen


 Seudocódigo
si calif>=6 y calif<=10 entonces
escribir(“Aprobaste el examen”)
sino
si calif>=0 y calif<6
escribir(“No aprobaste el examen”)
sino
escribir(“Calificación no válida”)
finSi
finSi

 Código …
Codificación del ejemplo de selectiva doble.
Ejemplo 3. Analizar los siguientes fragmentos de código.
2.2 Selectivas múltiples

 Ejercicios:
4. Dado un número entero por teclado, determine si es
número par o impar.
5. Dados tres números reales por teclado, determine cuál es
el mayor de todos.
6. En la UTM aprobar los niveles del idioma Inglés es
obligatorio, existen 7 niveles de Ingles que se deben
aprobar semestre a semestre durante los 5 años de
carrera. Dado por teclado el número de semestre y el nivel
de Inglés aprobado, encuentra e imprima los niveles de
inglés que le faltan por cursar y el número de semestres
que tiene disponibles para terminar en tiempo y forma; de
lo contrario imprima los niveles de inglés que le faltan por
cursar y el número de semestres que le faltarían para
terminar todos los niveles de inglés.
2.3 Selectivas múltiples

 Esta estructura de control se utiliza cuando se evalúa


una expresión entera o caracter y pueda tener mas de
dos alternativas.
 Es una alternativa de la estructura de control
selectiva doble.
 Se suele utilizar cuando la aplicación tiene menú de
opciones.
2.3 Selectiva múltiple (sintaxis en C)

switch (expresion){
case exp-const: sentencia 1;
sentencia n;
break;
case exp-const: sentencia 1;
sentencia n;
break;
default : sentencia 1;
sentencia n;
}
2.3 Selectiva múltiple (sintaxis en C)

 Ejercicio 7. Escribir un programa que realice


operaciones aritméticas utilizando la estructura de
control múltiple, considere las validaciones
principales.
2.3 Selectiva múltiple
 Ejemplo 3: Resolver ecuaciones de 2º grado por la formula general

−𝑏± 𝑏2 −4𝑎𝑐
𝑥1,2 =
2𝑎

 Este problema es recomendable el uso de estructuras de control


selectivas dobles, sin embargo, es una alternativa e involucra otros
elementos interesantes.
Ejemplo 4. Analice lo que hace el siguiente código.
3. Repetitivas

 Necesarias en gran parte de solución de problemas

 Ejecutan un conjunto de operaciones, un número


determinado o indeterminado de veces.

 Se clasifican en:

 while (mientras)

 do while (hacer-mientras)

 for (para)
3.1 while (mientras)

 Las sentencias que forman el cuerpo del bucle se ejecutan


0 o más veces.
 Bucle de PREPRUEBA.

 Condición seguirá ejecutando el


verdadero cuerpo

 Algunos ejemplos de bucles con nombre:


 Bucle controlado por contador
 Bucle controlado por centinela
 Bucle contador
3.1 while (mientras)

while (expresion) {
sentencia 1;
sentencia n;
}
3.1 while (mientras)

 Bucle controlado por contador


 Variable de control del ciclo
 inicialización, evaluación, incremento

 Ejemplo 5. Escriba un programa que calcule la suma n


números reales dados por teclado, donde n también
es dado por teclado.
 Posteriormente realice la prueba de escritorio
correspondiente.
 Ejemplo 6. Escriba un programa que calcule el
promedio de n calificaciones de un alumno, dadas por
teclado. Considere las validaciones necesarias.
 Posteriormente, realice la prueba de escritorio
correspondiente.
Código del problema anterior. Realiza una prueba de
escritorio.
3.1 while (mientras)

 Bucle controlado por centinela


 Centinela es un valor especial que controla el final del
bucle
 Ejemplo: –1 para terminar
 Lectura adelantada
 Es necesario actualizar el centinela en cada iteración
 Ejemplo 7. Escriba un programa que realice la suma
de n números enteros dados por teclado. El programa
finaliza cuando se teclea un numero -1 (valor
centinela).
Ejemplo 7. Bucle controlado por centinela.
i ←0
suma← 0
imprimir “Teclea una calificación (-1 para terminar)”
leer(calif) //lectura adelantada
Valor -1, es el valor centinela
mientras calif!=-1 seleccionado para este programa
si calif>=0 y calif<=10 entonces
suma ← suma+calif
i←i+1 //Incremento
finSi
imprimir “Teclea una calificación (-1 para terminar)”
leer(calif) //actualizar
finMientras
prom ← suma/i //validar que i>0
Codificación del seudocódigo ciclo while con centinela.
3.1 while (mientras)

 Bucle contador
 Se utiliza en combinación con el bucle centinela
 Útilcuando se quiere contar el número de veces que se
ejecuta el bucle.
 La expresión lógica no depende del contador
3.1 Ejemplo 6. Bucle contador.
cont ←0
total← 0
Imprimir “Programa que calcula el total de una compra”
imprimir “Teclea id del producto(menor que 1 para terminar)”
leer(id) //lectura adelantada
mientras id>0
imprimir “Teclea la cantidad de productos:”
leer(cantidad)
imprimir “Teclea el precio:”
leer(precio)
total ← total+cantidad*precio
cont ←cont+1
imprimir “Teclea id del producto(menor que 1 para terminar)”
leer(id) //lectura actualizada
finMientras
imprimir “Se compró”, cont, “tipos de productos”
imprimir “El total de la compra es:”, total
 Codificar el ejemplo anterior, e identificar el valor
centinela y el porque es un ejemplo de bucle
contador.
3.2 do while (hacer-mientras)

Diagrama de flujo
 Sintaxis :

hacer
Acciones
mientras CondControl
3.2 hacer-mientras en C

do {
sentencia 1;
sentencia n;
} while (expresion);
3.2 hacer-mientras (do-while)

 Condición de control del bucle = expresión lógica


 Las sentencias que forman el cuerpo del bucle se
ejecutan 1 o más veces.
 Bucle POSTPRUEBA.

 Condición verdadero seguirá ejecutando el


cuerpo

 Menos general que el bucle MIENTRAS.


3.2 hacer-mientras (do-while)

 Ejemplo 7. Escriba un programa que calcule el promedio de 4


calificaciones de un alumno de la UTM utilizando el ciclo mientras y
para la validación de las calificaciones un ciclo do-while.

//codificación
do {
printf(“Teclea una calificación:”);
scanf(“%f”, calif);
}while(calif<0 || calif>10);
3.2 hacer-mientras (do-while)

Ejemplo 8. Crear programas interactivos


int main(){
char opcion;
do {
//proceso del programa

printf(“Deseas repetir el programa [s/n]”);


fflush(stdin);
opcion=getchar();
}while(opcion==‘s’ || opcion==‘S’);
return 0;
}
3.3 para (for)

Diagrama de flujo
 Número de veces
determinado a priori.
 Sintaxis :

para i←vi hasta vf ( Paso p)


acciones
fin_para
3.3 para (for) en C
for (expr1;expr2;expr3){
sentencia 1;
sentencia n;
}

Donde:
expr1: variable de control de inicialización
expr2: condición de control
expr3: incremento o decremento
3.3 para (for) en C

 Ejemplo 9. Realice una prueba de escritorio cuando n=5

 Ejemplo 10. Realice una prueba de escritorio


Ejemplo del ciclo for con un do-while anidado

 Ejemplo 11. Realice una prueba de escritorio para n=3,


y calif: -2, 8.2, 9.5, 10.5, -0.2, 7.2, 13
Ejemplos

Recomendación, utilizar la definición


completa de las estructuras for,
while y do-while.
3.3 para (for)

 Escriba un programa que calcule el total de la compra


de n productos que realizó un cliente.

 Escribir los programas del 1erParcial ver homepage.


Variables de control

 Acumulador
 Contador
 Banderas
Variables de control

 Un Acumulador es una variable cuya misión es


almacernar cantidades distintas, resultantes de sumas
sucesivas.
 Un Contador es una variable cuyo valor se incrementa
o decrementa en una cantidad constante en cada
iteración.
 Una bandera (flag, Interruptor, conmutador) es una
variable que puede tomar diversos valores durante la
ejecución de un programa y que permite comunicar
información desde una parte a otra del mismo,
normalmente booleana.
Conclusiones

 El uso correcto de las tres estructuras de control,


definidas como la base de la programación
estructurada, en alguna de las herramientas de
diseño de algoritmos, permite la resolución de
problemas en computadora de forma fácil, entendible
y correcta.
 De ahí que hoy en día nuevas métodos de
programación se basan en la programación
estructurada.
Referencias

1. Joyanes Aguilar, Luis (1996) Fundamentos de


programación, Algoritmos y Estructura de datos.
McGraw-Hill, México.
2. Deitel  Deitel (2001) C++ Como programar en
C/C++. Prentice Hall
3. Kerrighan y Ritchie “El lenguaje de
programación”. Prentice Hall
4. Gottfried, Byron (1999) “Programación en C”
McGrawHill, México.
5. Levine Gutierrez, Guillermo (1990) Introducción a
la computación y a la programación estructurada.
McGraw-Hill, México.
6. Levine Gutierrez, Guillermo (1990) Introducción a
la computación y a la programación estructurada.
McGraw-Hill, México.

También podría gustarte