Complementos de InformáticaTema 2: Programación Estructurada y
Programación Modular
Álvaro Romero Jiménez
Departamento de Ciencias de la Computación e Inteligencia ArtificialUniversidad de Sevilla
Programación Estructurada
Conjunto de técnicas para desarrollar algoritmos fáciles deescribir, verificar, leer y modificar.
Técnicas utilizadas:
I Diseño descendente: los algoritmos se diseñan por etapas,de los conceptos generales a los detalles particulares.
I Recursos abstractos: la resolución de un problemacomplejo se realiza suponiendo que los subproblemas enlos que se descompone están ya resueltos.
I Estructuras básicas: los algoritmos se escriben utilizandoúnicamente las estructuras secuencial, selectiva yrepetitiva.
2 / 23
Programación Estructurada
Conjunto de técnicas para desarrollar algoritmos fáciles deescribir, verificar, leer y modificar.
Técnicas utilizadas:
I Diseño descendente: los algoritmos se diseñan por etapas,de los conceptos generales a los detalles particulares.
I Recursos abstractos: la resolución de un problemacomplejo se realiza suponiendo que los subproblemas enlos que se descompone están ya resueltos.
I Estructuras básicas: los algoritmos se escriben utilizandoúnicamente las estructuras secuencial, selectiva yrepetitiva.
2 / 23
Programación Estructurada
Conjunto de técnicas para desarrollar algoritmos fáciles deescribir, verificar, leer y modificar.
Técnicas utilizadas:
I Diseño descendente: los algoritmos se diseñan por etapas,de los conceptos generales a los detalles particulares.
I Recursos abstractos: la resolución de un problemacomplejo se realiza suponiendo que los subproblemas enlos que se descompone están ya resueltos.
I Estructuras básicas: los algoritmos se escriben utilizandoúnicamente las estructuras secuencial, selectiva yrepetitiva.
2 / 23
Programación Estructurada
Conjunto de técnicas para desarrollar algoritmos fáciles deescribir, verificar, leer y modificar.
Técnicas utilizadas:
I Diseño descendente: los algoritmos se diseñan por etapas,de los conceptos generales a los detalles particulares.
I Recursos abstractos: la resolución de un problemacomplejo se realiza suponiendo que los subproblemas enlos que se descompone están ya resueltos.
I Estructuras básicas: los algoritmos se escriben utilizandoúnicamente las estructuras secuencial, selectiva yrepetitiva.
2 / 23
Números Amigos
DefiniciónDos números se dice que son amigos si cada uno de ellos esigual a la suma de los divisores propios del otro.
Por ejemplo, los números 220 y 284 son amigos, ya que:Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 +
11 + 20 + 22 + 44 +55 + 110 = 284
Problema: Encontrar y mostrar todas las parejas de númerosamigos menores o iguales a uno dado.
3 / 23
Ejemplo de Algoritmo Estructurado I
Esqueleto del Algoritmo
algoritmo números_amigosvar
natural : cota, num1, num2inicio
leer cotapara num1 desde 1 hasta cota-1 hacer
para num2 desde num1+1 hasta cota hacersi num1 y num2 son amigos entonces
escribir num1, num2fin si
fin parafin para
fin4 / 23
Ejemplo de Algoritmo Estructurado II
Primer Refinamiento
algoritmo números_amigosvar
natural : cota, num1, num2natural : suma1, suma2 # Guardarán la suma de
los divisoresinicio
leer cotapara num1 desde 1 hasta cota-1 hacer
para num2 desde num1+1 hasta cota hacersuma1 ← suma de los divisores de num1suma2 ← suma de los divisores de num2
5 / 23
Ejemplo de Algoritmo Estructurado III
si suma1 = num2 y suma2 = num1 entoncesescribir num1, num2
fin sifin para
fin parafin
6 / 23
Ejemplo de Algoritmo Estructurado IVSegundo Refinamiento
algoritmo números_amigosvar
natural : cota, num1, num2natural : suma1, suma2, número
inicioleer cotapara num1 desde 1 hasta cota-1 hacer
para num2 desde num1+1 hasta cota hacersuma1 ← 0para número desde 1 hasta num1-1 hacer
si número divide a num1 entoncessuma1 ← suma1 + número
fin sifin para
7 / 23
Ejemplo de Algoritmo Estructurado V
suma2 ← 0para número desde 1 hasta num2-1 hacer
si número divide a num2 entoncessuma2 ← suma2 + número
fin sifin parasi suma1 = num2 y suma2 = num1 entonces
escribir num1, num2fin si
fin parafin para
fin
8 / 23
Programación Modular
Resolución independiente de los subproblemas resultantes de ladescomposición de un problema.
Completa y amplía el diseño descendente como método deresolución de problemas.
Un problema será resuelto por un algoritmo principal quetransferirá el control a los distintos módulos o subalgoritmos,los cuales al terminar su tarea devolverán el control alalgoritmo principal.
9 / 23
Programación Modular
Algunas ventajas significativas de la programación modular:
I La independencia de los módulos permite trabajar en ellossimultáneamente.
I La modificación de un módulo no afecta a los demás.I Los módulos solo se escriben una vez, aunque se
necesiten en distintas ocasiones.
10 / 23
Programación Modular
Algunas ventajas significativas de la programación modular:
I La independencia de los módulos permite trabajar en ellossimultáneamente.
I La modificación de un módulo no afecta a los demás.I Los módulos solo se escriben una vez, aunque se
necesiten en distintas ocasiones.
10 / 23
Programación Modular
Algunas ventajas significativas de la programación modular:
I La independencia de los módulos permite trabajar en ellossimultáneamente.
I La modificación de un módulo no afecta a los demás.
I Los módulos solo se escriben una vez, aunque senecesiten en distintas ocasiones.
10 / 23
Programación Modular
Algunas ventajas significativas de la programación modular:
I La independencia de los módulos permite trabajar en ellossimultáneamente.
I La modificación de un módulo no afecta a los demás.I Los módulos solo se escriben una vez, aunque se
necesiten en distintas ocasiones.
10 / 23
Tipos de subalgoritmosFunciones
Una función toma uno o más valores, denominadosargumentos o parámetros formales, y devuelve un resultado.
Para invocar a una función se utiliza su nombre seguido porlos parámetros actuales sobre los que aplicarla, escritos entreparéntesis y separados por comas en una expresión.
Cada lenguaje de programación tiene sus propias funcionesinternas incorporadas. Si estas no permiten realizar el tipo decálculo deseado será necesario declarar una función externa.
11 / 23
Declaración de funciones
<tipo de dato> función <nombre de la función>(<parámetros formales>)const
<declaración de constantes>var
<declaración de variables>inicio
...devolver <resultado>
fin
12 / 23
Tipos de SubalgoritmosProcedimientos
Un procedimiento es un algoritmo que realiza una tareaespecífica, pero que generalmente no devuelve ningúnresultado.
La entrada de información se realiza a través de losparámetros. En caso necesario la salida de informacióntambién se realiza a través de los parámetros.
Para invocar a un procedimiento se utiliza la instrucciónllamar a seguida del nombre del procedimiento y de losparámetros actuales sobre los que aplicarlo, escritos entreparéntesis y separados por comas.
13 / 23
Declaración de procedimientos
procedimiento <nombre del procedimiento>(<parámetros formales>)const
<declaración de constantes>var
<declaración de variables>inicio
...fin
14 / 23
Tipos de Parámetros
Los parámetros se clasifican según la dirección del flujo deinformación como sigue:
I Parámetros de entrada (E): transmiten información desdeel programa llamador al subprograma.
I Parámetros de salida (S): transmiten información desde elsubprograma al programa llamador.
I Parámetros de entrada/salida (E/S): transmiteninformación tanto desde como hacia el programallamador.
15 / 23
Paso de Parámetros
Al invocar un procedimiento o una función se produce unacorrespondencia entre los parámetros formales y losparámetros actuales.
I Correspondencia posicional: los parámetros formales y losactuales se emparejan según su posición, en la definicióndel procedimiento o función los primeros, y en la llamadarealizada los segundos.
I Correspondencia por nombre: la correspondencia entre losparámetros formales y los actuales se indicaexplícitamente en la llamada al procedimiento o función.
16 / 23
Paso de Parámetros
Al invocar un procedimiento o una función se produce unacorrespondencia entre los parámetros formales y losparámetros actuales.
I Correspondencia posicional: los parámetros formales y losactuales se emparejan según su posición, en la definicióndel procedimiento o función los primeros, y en la llamadarealizada los segundos.
I Correspondencia por nombre: la correspondencia entre losparámetros formales y los actuales se indicaexplícitamente en la llamada al procedimiento o función.
16 / 23
Paso de Parámetros
Al invocar un procedimiento o una función se produce unacorrespondencia entre los parámetros formales y losparámetros actuales.
I Correspondencia posicional: los parámetros formales y losactuales se emparejan según su posición, en la definicióndel procedimiento o función los primeros, y en la llamadarealizada los segundos.
I Correspondencia por nombre: la correspondencia entre losparámetros formales y los actuales se indicaexplícitamente en la llamada al procedimiento o función.
16 / 23
Paso de Parámetros
Según el lenguaje de programación utilizado, existen tresmétodos de transmisión de valores a los parámetros formales.
I Paso por valor: los parámetros formales reciben una copiade los valores de los parámetros actuales.
I Paso por valor resultado: los parámetros formales recibenuna copia de los valores de los parámetros actuales y alfinalizar la ejecución del subprograma se realiza el procesoinverso.
I Paso por referencia: los parámetros formales reciben lasdirecciones de memoria que referencian a los valores delos parámetros actuales.
17 / 23
Paso de Parámetros
Según el lenguaje de programación utilizado, existen tresmétodos de transmisión de valores a los parámetros formales.
I Paso por valor: los parámetros formales reciben una copiade los valores de los parámetros actuales.
I Paso por valor resultado: los parámetros formales recibenuna copia de los valores de los parámetros actuales y alfinalizar la ejecución del subprograma se realiza el procesoinverso.
I Paso por referencia: los parámetros formales reciben lasdirecciones de memoria que referencian a los valores delos parámetros actuales.
17 / 23
Paso de Parámetros
Según el lenguaje de programación utilizado, existen tresmétodos de transmisión de valores a los parámetros formales.
I Paso por valor: los parámetros formales reciben una copiade los valores de los parámetros actuales.
I Paso por valor resultado: los parámetros formales recibenuna copia de los valores de los parámetros actuales y alfinalizar la ejecución del subprograma se realiza el procesoinverso.
I Paso por referencia: los parámetros formales reciben lasdirecciones de memoria que referencian a los valores delos parámetros actuales.
17 / 23
Paso de Parámetros
Según el lenguaje de programación utilizado, existen tresmétodos de transmisión de valores a los parámetros formales.
I Paso por valor: los parámetros formales reciben una copiade los valores de los parámetros actuales.
I Paso por valor resultado: los parámetros formales recibenuna copia de los valores de los parámetros actuales y alfinalizar la ejecución del subprograma se realiza el procesoinverso.
I Paso por referencia: los parámetros formales reciben lasdirecciones de memoria que referencian a los valores delos parámetros actuales.
17 / 23
Variables Globales y Locales
Variable global: aquella tal que el ámbito en el que se conocesu valor es el programa completo, incluídos los subprogramas.
Variable local: aquella tal que el ámbito en el que se conoce suvalor es únicamente una parte del programa.
Todas las variables usadas por un subprograma que no seanvariables globales deben declararse como variables locales deese subprograma. Los parámetros del subprograma tambiénactúan como variables locales.
Se puede declarar una variable local con el mismo nombre queotra variable ya declarada. El valor asignado a la primera solotendrá vigencia para las expresiones incluidas dentro de suámbito.
18 / 23
Ejemplo de Algoritmo Modular I
algoritmo números_amigosinicio # Este algoritmo no tiene variables globales
procedimiento calcula_pares ()var # Variables locales del procedimiento
natural : cota, num1, num2inicio
leer cotapara num1 desde 1 hasta cota-1 hacer
para num2 desde num1+1 hasta cota hacersi son_amigos(num1, num2) entonces
escribir num1, num2fin si
fin parafin para
fin19 / 23
Ejemplo de Algoritmo Modular II
lógico función son_amigos (E natural : num1, num2)var # Variables locales de la función
natural : suma1, suma2lógico : resultado
iniciosuma1 ← suma_divisores(num1)suma2 ← suma_divisores(num2)resultado ← suma1 = num2 y suma2 = num1devolver resultado
fin
20 / 23
Ejemplo de Algoritmo Modular III
natural función suma_divisores (E natural : num)var # Variables locales de la función
natural : suma, númeroinicio
suma ← 0para número desde 1 hasta num-1 hacer
si divide_a(número, num) entoncessuma ← suma + número
fin sifin paradevolver suma
finfin # Aquí acaba el algoritmo
21 / 23
Algoritmos Recursivos
Son aquellos que forman parte de sí mismos o intervienen ensu propia definición.
Resultan útiles para trabajar con problemas o estructurasdefinidos en modo recursivo.
Todo algoritmo recursivo puede ser convertido en iterativo.
22 / 23
Ejemplo de Algoritmo RecursivoLa sucesión de Fibonacci se define por recursión como sigue:fib0 = 0, fib1 = 1fibn = fibn−1 + fibn−2, para todo n > 1
Función que calcula un término especificado de la sucesión.natural función fib (E natural : n)var
natural términoinicio
si n < 2 entoncestérmino ← n
si no entoncestérmino ← fib(n-1) + fib(n-2)
fin sidevolver término
fin23 / 23
Top Related