Programación Estructurada: Tema 2. Estructuras de Control · Diagrama de flujo. 3.2 hacer-mientras...

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