Sei sulla pagina 1di 6

Programacin Estructurada Complementos de Informtica

Tema 2: Programacin Estructurada y Programacin Modular Conjunto de tcnicas para desarrollar algoritmos fciles de escribir, vericar, leer y modicar. Tcnicas utilizadas: Diseo descendente: los algoritmos se disean por etapas, de los conceptos generales a los detalles particulares. Recursos abstractos: la resolucin de un problema complejo se realiza suponiendo que los subproblemas en los que se descompone estn ya resueltos. Estructuras bsicas: los algoritmos se escriben utilizando nicamente las estructuras secuencial, selectiva y repetitiva.

lvaro Romero Jimnez


Departamento de Ciencias de la Computacin e Inteligencia Articial Universidad de Sevilla

2 / 23

Nmeros Amigos
Denicin
Dos nmeros se dice que son amigos si cada uno de ellos es igual a la suma de los divisores propios del otro. Por ejemplo, los nmeros 220 y 284 son amigos, ya que: Suma de divisores de 284: 1 + 2 + 4 + 71 + 142 = 220 Suma de divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 Problema: Encontrar y mostrar todas las parejas de nmeros amigos menores o iguales a uno dado.

Ejemplo de Algoritmo Estructurado I


Esqueleto del Algoritmo
algoritmo nmeros_amigos var natural : cota, num1, num2 inicio leer cota para num1 desde 1 hasta cota-1 hacer para num2 desde num1+1 hasta cota hacer si num1 y num2 son amigos entonces escribir num1, num2 n si n para n para n
3 / 23 4 / 23

Ejemplo de Algoritmo Estructurado II


Primer Renamiento
algoritmo nmeros_amigos var natural : cota, num1, num2 natural : suma1, suma2 # Guardarn la suma de los divisores inicio leer cota para num1 desde 1 hasta cota-1 hacer para num2 desde num1+1 hasta cota hacer suma1 suma de los divisores de num1 suma2 suma de los divisores de num2

Ejemplo de Algoritmo Estructurado III

si suma1 = num2 y suma2 = num1 entonces escribir num1, num2 n si n para n para n

5 / 23

6 / 23

Ejemplo de Algoritmo Estructurado IV


Segundo Renamiento
algoritmo nmeros_amigos var natural : cota, num1, num2 natural : suma1, suma2, nmero inicio leer cota para num1 desde 1 hasta cota-1 hacer para num2 desde num1+1 hasta cota hacer suma1 0 para nmero desde 1 hasta num1-1 hacer si nmero divide a num1 entonces suma1 suma1 + nmero n si n para
7 / 23

Ejemplo de Algoritmo Estructurado V


suma2 0 para nmero desde 1 hasta num2-1 hacer si nmero divide a num2 entonces suma2 suma2 + nmero n si n para si suma1 = num2 y suma2 = num1 entonces escribir num1, num2 n si n para n para n

8 / 23

Programacin Modular

Programacin Modular

Resolucin independiente de los subproblemas resultantes de la descomposicin de un problema. Completa y ampla el diseo descendente como mtodo de resolucin de problemas. Un problema ser resuelto por un algoritmo principal que transferir el control a los distintos mdulos o subalgoritmos, los cuales al terminar su tarea devolvern el control al algoritmo principal.

Algunas ventajas signicativas de la programacin modular: La independencia de los mdulos permite trabajar en ellos simultneamente. La modicacin de un mdulo no afecta a los dems. Los mdulos solo se escriben una vez, aunque se necesiten en distintas ocasiones.

9 / 23

10 / 23

Tipos de subalgoritmos
Funciones

Declaracin de funciones

Una funcin toma uno o ms valores, denominados argumentos o parmetros formales, y devuelve un resultado. Para invocar a una funcin se utiliza su nombre seguido por los parmetros actuales sobre los que aplicarla, escritos entre parntesis y separados por comas en una expresin. Cada lenguaje de programacin tiene sus propias funciones internas incorporadas. Si estas no permiten realizar el tipo de clculo deseado ser necesario declarar una funcin externa.

<tipo de dato> funcin <nombre de la funcin> (<parmetros formales>) const <declaracin de constantes> var <declaracin de variables> inicio . . . devolver <resultado> n

11 / 23

12 / 23

Tipos de Subalgoritmos
Procedimientos

Declaracin de procedimientos

Un procedimiento es un algoritmo que realiza una tarea especca, pero que generalmente no devuelve ningn resultado. La entrada de informacin se realiza a travs de los parmetros. En caso necesario la salida de informacin tambin se realiza a travs de los parmetros. Para invocar a un procedimiento se utiliza la instruccin llamar a seguida del nombre del procedimiento y de los parmetros actuales sobre los que aplicarlo, escritos entre parntesis y separados por comas.

procedimiento <nombre del procedimiento> (<parmetros formales>) const <declaracin de constantes> var <declaracin de variables> inicio . . . n

13 / 23

14 / 23

Tipos de Parmetros

Paso de Parmetros
Al invocar un procedimiento o una funcin se produce una correspondencia entre los parmetros formales y los parmetros actuales. Correspondencia posicional: los parmetros formales y los actuales se emparejan segn su posicin, en la denicin del procedimiento o funcin los primeros, y en la llamada realizada los segundos. Correspondencia por nombre: la correspondencia entre los parmetros formales y los actuales se indica explcitamente en la llamada al procedimiento o funcin.

Los parmetros se clasican segn la direccin del ujo de informacin como sigue: Parmetros de entrada (E): transmiten informacin desde el programa llamador al subprograma. Parmetros de salida (S): transmiten informacin desde el subprograma al programa llamador. Parmetros de entrada/salida (E/S): transmiten informacin tanto desde como hacia el programa llamador.

15 / 23

16 / 23

Paso de Parmetros
Segn el lenguaje de programacin utilizado, existen tres mtodos de transmisin de valores a los parmetros formales. Paso por valor: los parmetros formales reciben una copia de los valores de los parmetros actuales. Paso por valor resultado: los parmetros formales reciben una copia de los valores de los parmetros actuales y al nalizar la ejecucin del subprograma se realiza el proceso inverso. Paso por referencia: los parmetros formales reciben las direcciones de memoria que referencian a los valores de los parmetros actuales.

Variables Globales y Locales


Variable global: aquella tal que el mbito en el que se conoce su valor es el programa completo, includos los subprogramas. Variable local: aquella tal que el mbito en el que se conoce su valor es nicamente una parte del programa. Todas las variables usadas por un subprograma que no sean variables globales deben declararse como variables locales de ese subprograma. Los parmetros del subprograma tambin actan como variables locales. Se puede declarar una variable local con el mismo nombre que otra variable ya declarada. El valor asignado a la primera solo tendr vigencia para las expresiones incluidas dentro de su mbito.
17 / 23 18 / 23

Ejemplo de Algoritmo Modular I


algoritmo nmeros_amigos inicio # Este algoritmo no tiene variables globales procedimiento calcula_pares () var # Variables locales del procedimiento natural : cota, num1, num2 inicio leer cota para num1 desde 1 hasta cota-1 hacer para num2 desde num1+1 hasta cota hacer si son_amigos(num1, num2) entonces escribir num1, num2 n si n para n para n
19 / 23

Ejemplo de Algoritmo Modular II


lgico funcin son_amigos (E natural : num1, num2) var # Variables locales de la funcin natural : suma1, suma2 lgico : resultado inicio suma1 suma_divisores(num1) suma2 suma_divisores(num2) resultado suma1 = num2 y suma2 = num1 devolver resultado n

20 / 23

Ejemplo de Algoritmo Modular III


natural funcin suma_divisores (E natural : num) var # Variables locales de la funcin natural : suma, nmero inicio suma 0 para nmero desde 1 hasta num-1 hacer si divide_a(nmero, num) entonces suma suma + nmero n si n para devolver suma n n # Aqu acaba el algoritmo

Algoritmos Recursivos

Son aquellos que forman parte de s mismos o intervienen en su propia denicin. Resultan tiles para trabajar con problemas o estructuras denidos en modo recursivo. Todo algoritmo recursivo puede ser convertido en iterativo.

21 / 23

22 / 23

Ejemplo de Algoritmo Recursivo


La sucesin de Fibonacci se dene por recursin como sigue: b0 = 0, b1 = 1 bn = bn1 + bn2 , para todo n > 1 Funcin que calcula un trmino especicado de la sucesin. natural funcin b (E natural : n) var natural trmino inicio si n < 2 entonces trmino n si no entonces trmino b(n-1) + b(n-2) n si devolver trmino n
23 / 23

Potrebbero piacerti anche