View
7
Download
0
Category
Preview:
Citation preview
Programación Estructurada:
Tema 2. Estructuras de
ControlDavid 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
Se utilizan cuando se tiene
que evaluar una expresión y
solo tiene acciones en caso
que sea verdadera la
expresión.
Sintaxis
if(condControl)
sentencia 1;
O bien:
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
Se selecciona cuando se
tiene que evaluar una
expresión y se colocan
acciones tanto cuando la
expresión es verdadera o
falsa.
if (condControl){
sentencia 1;
sentencia n;
}
else {
sentencia 1;
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
𝑥1,2 =−𝑏± 𝑏2−4𝑎𝑐
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 verdadero
seguirá ejecutando el 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
mientras calif!=-1
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
Valor -1, es el valor centinela
seleccionado para este programa
Codificación del seudocódigo ciclo while con centinela.
3.1 while (mientras)
Bucle contador
Se utiliza en combinación con el bucle centinela
Útil cuando 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)
Sintaxis :
hacer
Acciones
mientras CondControl
Diagrama de flujo
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.
Menos general que el bucle MIENTRAS.
Condición verdadero seguirá ejecutando el cuerpo
3.2 hacer-mientras (do-while)
//codificación
do {
printf(“Teclea una calificación:”);
scanf(“%f”, calif);
}while(calif<0 || calif>10);
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.
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)
Número de veces determinado a priori.
Sintaxis :
para i←vi hasta vf ( Paso p)
acciones
fin_para
Diagrama de flujo
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 esalmacernar cantidades distintas, resultantes de sumassucesivas.
Un Contador es una variable cuyo valor se incrementao decrementa en una cantidad constante en cadaiteración.
Una bandera (flag, Interruptor, conmutador) es unavariable que puede tomar diversos valores durante la ejecución de un programa y que permite comunicarinformació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.
Recommended