Fundamentos de Programación I
3. Estructuras de control
Luís Rodríguez Baena (
[email protected])
Luis Rodríguez Baena (
[email protected])
Universidad Pontificia de Salamanca.
Universidad Pontificia de Salamanca
Escuela Superior de Ingeniería y Arquitectura
Escuela Superior de Ingeniería y Arquitectura
Programación modular
Dividir un programa en distintos componentes
independientes.
● Cada uno de esos componentes formaría un módulo.
Cada módulo se codificaría por separado y
realizaría una única tarea.
● Si la tarea es compleja se podrá dividir a su vez en
otros módulos.
Una vez finalizados, los módulos se integrarán
en un programa principal que indicará el orden
de ejecución.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
2
Programación estructurada
Conjunto de técnicas enunciadas por Edsger Dijkstra
● 1968: El GOTO como elemento perjudicial en la
programación (GOTOStatementConsideredHarmfull).
● Dijkstra y otros autores proponen un conjunto de
construcciones lógicas con las que puede construirse
cualquier programa.
Cada construcción tendrá una estructura lógica predecible con un único
punto de entrada y un único punto de salida.
Facilita el diseño del programa, minimiza la complejidad, reduce los
errores.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
3
Programación estructurada (II)
Teorema de la programación estructurada (teorema
de Bohm y Jacopini, 1966).
● Cualquier programa propio puede ser escrito utilizando únicamente
tres tipos de estructuras.
Secuenciales. Las instrucciones se ejecutan una única vez una a
continuación de otra y sin posibilidad de variar el orden de ejecución.
Repetitivas. Las instrucciones se ejecutan un numero determinado de
veces en virtud del valor de una expresión.
Alternativas. Se puede ejecutar una u otra instrucción en virtud del valor
de una expresión.
Nota: Un programa propio es aquel que:
● Posee un único punto de entrada y uno de salida.
● Existen caminos desde la entrada a la salida que se pueden seguir y que pasan
por todas las partes del programa.
● Todas las instrucciones son ejecutables y no existen lazos o bucles sin fin.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
4
Programación estructurada (III)
Supone diseñar los programa de acuerdo a las siguientes reglas:
● El programa debe tener un diseño modular.
Dividir el problema en pequeñas partes independientes que se desarrollan por separado
(módulos) y que luego se integran en una única aplicación.
● Diseñar los módulos de modo descendente (diseño top-down).
Diseñar cada módulo partiendo del problema general e ir descomponiéndolo en
subproblemas más simples mediante refinamientos sucesivos.
● Uso de recursos abstractos.
Complemento del diseño descendente.
Consiste en suponer en cada uno de los subproblemas ya está resuelto.
○ Más adelante, si es necesario, se resolverán.
● Limitar las construcciones lógicas del programa.
Utilizar únicamente tres tipos de estructuras:
○ Secuenciales
○ Alternativas
○ Repetitivas.
Esas estructuras están presentes con los lenguajes de alto nivel, por lo que si
se respetan, el paso del algoritmo a la codificación será mucho más simple.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
5
Control del flujo de un programa
Flujo de control.
● Orden en que se ejecutan las instrucciones dentro de un programa.
Proceso de ejecución de un programa.
● Carga del programa en memoria.
● Reserva de espacio en memoria para almacenar los datos.
● Ejecución de la primera sentencia.
● La ejecución continúa hasta llegar a la declaración de final del programa.
La ejecución se realiza de forma secuencial.
● Las instrucciones de control se encargan de variar esa ejecución secuencial.
Las instrucciones de control permiten desarrollar los tres tipos básicos
de construcciones lógicas propuestas por la programación estructurada.
● Desde el punto de vista del procesador, todas presentan alguna bifurcación
que permiten saltar de una instrucción a otra.
● Esas bifurcaciones o saltos se encapsulan en los lenguajes de programación
de alto nivel en lo que se llama estructuras de control.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
6
Estructura secuencial
Repite las instrucciones una detrás de otra sin posibilidad de
modificar el orden en que se ejecutan.
● La salida de una instrucción es la entrada de la siguiente.
Representación algorítmica.
instrucción 1
instrucción 2
instrucción n
…
En C, la estructura secuencial
estaría representada por los
bloques de instrucciones
delimitados por las llaves
{
instrucción 1;
instrucción 2;
…
instrucción n;
}
Diagrama de flujo
Pseudocódigo
C
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
7
Estructura secuencial (II)
Ejemplo 3.1.
Se desea calcular el capital final de una cantidad de euros
colocada en un banco a un interés compuesto determinado
durante un periodo de años. Tanto el capital inicial, como el
tipo de interés y el número de años se introducirán mediante
teclado.
● Análisis del problema
Datos de salida: Capital final (variable CFinal de tipo real)
Datos de entrada: Capital inicial (variable CInicial de tipo
real), interés (variable interés de tipo real) y el número de
años (variable años de tipo entero)
Para resolver el problema habrá que aplicar la fórmula:
CFinal = CInicial(1 + interés)años
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
8
Estructura secuencial (III)
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
9
Estructuras selectivas
Permiten ejecutar o no un conjunto de
sentencias según el valor de una expresión.
Dependiendo del número de conjuntos distintos
a ejecutar existirán:
● Estructura selectiva simple.
● Estructura selectiva doble.
● Estructura selectiva múltiple.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
10
Estructura selectiva simple
Evalúa una expresión lógica.
En función del valor de la expresión ejecuta o no una instrucción o grupo de
instrucciones.
Representación algorítmica.
si exp.lógica entonces
fin_si
instrucción/es
if (exp. lógica) {
}
bloque sentencias;
Diagrama de flujo
Pseudocódigo
C
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
11
Estructura selectiva simple (II)
Ejemplo 3.2.
Determinar si un número entero positivo es par sacando un mensaje en caso
afirmativo.
● Análisis del problema
Datos de salida: El dato de salida sería un mensaje indicando si el número es par.
Datos de entrada: El número a comprobar (variable num de tipo entero)
Un número es par si es divisible entre 2, por lo que habrá que utilizar el operador
mod y comprobar si el resto es 0.
algoritmo EsNúmeroPar
var
inicio
entero : num
leer(num)
si num mod 2 = 0 entonces
fin_si
escribir('es par')
fin
#include <stdio.h>
int main(void){
int num;
printf("Numero entero positivo: ");
scanf("%i",&num);
if(num % 2 == 0){
}
return 0;
printf("\nNúmero par");
}
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
12
Estructura selectiva doble
Evalúa una expresión lógica y selecciona entre dos grupos de
acciones en función del valor de la expresión.
instrucción 1
si exp.lógica entonces
si_no
fin_si
instrucción 2
bloque sentencias;
if (exp. lógica){
}
else{
}
bloque sentencias;
Diagrama de flujo
Pseudocódigo
C
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
13
Estructura selectiva doble (II)
Ejemplo 3.3.
Resolver una ecuación de primer grado ax + b = 0 para dos coeficientes
a y b introducidos por teclado. El algoritmo deberá devolver el valor de x
y tener en cuenta los casos en los que no tiene solución real (a = 0)
● Análisis del problema
Datos de salida: El valor de x (una variable real) o el mensaje cuando no hay
solución
Datos de entrada: Las variables a y b (de tipo entero)
El valor de x, siempre que a sea distinto de 0; vendrá determinado por
x
b
a
Si a es 0, sacará un mensaje indicando que no tiene solución real.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
14
Estructura selectiva doble (III)
//Ecuación de primer grado
#include <stdio.h>
int main(void){
int a,b;
float x;
printf("Primer número: ");
scanf("%i",&a);
printf("Segundo número: ");
scanf("%i",&b);
if(a!=0){
x = (float)-b /a;
printf("\nPara la ecuación %ix+%i=0"
" el valor de x es %f",a,b,x);
printf("\nPara la ecuación %ix+%i=0"
" el valor de x no tiene solución",a,b);
}else{
}
return 0;
}
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
15
Estructura selectiva doble
Estructuras selectivas anidadas
Ejemplo 3.4.
Determinar si un número entero es par, impar o 0.
● Análisis del problema
Datos de salida: El mensaje, una constante de cadena indicando si el número
es par, impar o 0.
Datos de entrada: Un número entero.
Proceso: Una vez que se ha determinado que el número es distinto de 0, se
comprueba si es par o impar mediante el operador de resto.
Universidad Pontificia de Salamanca. Escuela Superior de Ingeniería y Arquitectura
(CC) Luis Rodríguez Baena, 2012
16
Estructura selectiva doble
Estructuras selectivas anidadas (II)
Comentarios de: 3. Estructuras de control - Fundamentos de Programación I (0)
No hay comentarios