Está en la página 1de 28

Pseudocdigo

Programacin Modular
Subprogramas
Pablo Romero

AGENDA
Pseudocdigo

Programacin modular
Subprogramas
Ejemplo
Procedimiento
Declaracin, Definicin y Llamada
Ejemplo
Funcin
Declaracin, Definicin y Llamada
mbito de variables: local y global
Paso de parmetros: por valor y referencia
Ejercicios
2

PROGRAMACIN MODULAR
La programacin modular es una metodologa de
programacin que consiste en organizar un
programa en mdulos.
En la etapa de diseo de un programa se aplica la
estrategia Divide y vencers.
En la etapa de implementacin, cada uno de los
subproblemas se implementa a travs de un
mdulo.
Los lenguajes de programacin brindan diferentes
mecanismos para implementar mdulos.
Los mdulos ms simples son los procedimientos y
funciones.

SUBPROGRAMAS

Subprogramas: bloques de cdigo que llevan a


cabo una tarea concreta (= resuelven un
subproblema concreto)
Tienen un propsito
Tienen unas precondiciones
Permiten reutilizar cdigo de manera sencilla y segura

Pueden ser usados ms de una vez en el programa principal


sin necesidad de reescribir todo (o copiar-pegar)

Ayudan a que el cdigo del programa principal sea


Legible: Resulta ms sencillo leer slo el nombre del
subprograma que todo su cdigo
Ordenado: Cada subprograma ocupa un lugar concreto
dentro de todo el cdigo

SUBPROGRAMAS

SUBPROGRAMAS

Ejemplo: Podemos pensar en subprogramas


para
Mostrar un men de opciones
Pedirle datos al usuario
Calcular el mximo de 3 nmeros

De hecho, ya conocemos (y hemos utilizado)


algunos subprogramas que no hemos
implementado nosotros
Para operar con nmeros: sqrt, pow,
Para operar con arreglos de caracteres: strcpy,

SUBPROGRAMAS

SUBPROGRAMAS: EJEMPLO 1

Hallar el cociente y resto de una divisin

Accin division (entero n1, entero n2, entero &c, entero &r) //Prototipo
Accin Principal
DV
Entero num1, num2, coc, res
Inicio
leer(num1, num2)
division(num1,num2,coc,res)

Llamada a procedimiento

escribir(coc,res)
Fin
Accin division (entero n1, entero n2, entero &c, entero &r)
Inicio
cn1 div n2
rn1 mod n2
FAccin

PROCEDIMIENTO
Son subprogramas que realizan una tarea
determinada y devuelven 0 o ms de un valor. Se
utilizan para estructurar un programa y mejorar su
claridad y generalidad.
Debido a que devuelven ms de un resultado, NO
UTILIZAN la palabra reservada retornar, y los
parmetros pueden ser:

- de ENTRADA Slo se utilizan para que los subprogramas


que llaman al procedimiento le pasen datos al mismo.
- de ENTRADA/SALIDA Se utilizan por parte de los
subprogramas que llaman, para pasarle datos al
procedimiento, y por parte del procedimiento para pasar los
resultados obtenidos al subprograma que lo ha llamado.

PROCEDIMIENTO: DECLARACIN,
DEFINICIN, LLAMADA
Declaracin o prototipo
Accin identificador (lista de parmetros)
Definicin
Accin identificador (lista de parmetros)
DV
//Variables locales
Inicio
sentencias
fAccin
Llamada o Invocacin
identificador (lista de parmetros)

10

SUBPROGRAMAS: EJEMPLO 2

Hallar el cuadrado de un nmero

Entero Accin cuadrado(Entero n)

//Prototipo

Accin Principal
DV
Entero k, cuad //Variables locales a Principal
Inicio
k3
cuad cuadrado(k)

Llamada a la funcin

escribir(Cuadrado , cuad)
Fin
Entero Accin cuadrado(Entero n)
DV
Entero k //Variable local a cuadrado
Inicio
kn*n
retornar k
FAccin

11

FUNCIN
Son subprogramas que realizan una determinada
tarea y devuelven un nico resultado o valor. Se
utilizan para crear operaciones nuevas no incluidas en
el lenguaje.
El resultado devuelto se indica mediante la palabra
reservada retornar, y TODOS LOS PARMETROS
son de ENTRADA.

12

FUNCIN: DECLARACIN, DEFINICIN


Y LLAMADA
Declaracin o prototipo
tipo Accin identificador (lista de parmetros)
Definicin
tipo Accin identificador (lista de parmetros)
DV
//Variables locales
Inicio
sentencias
Faccin
Llamada o Invocacin
identificador (lista de parmetros) //Obs: retorna valor

13

EJEMPLO 3
Escribir subprograma para hallar el factorial
de un nmero
Entero Accin factorial (Entero num)
Entero i, factor1
Para i de 1 a num hacer
factorfactor*i
Fpara
retornar factor
FAccin
14

MBITO DE VARIABLES
El buen uso de la programacin modular requiere
que los mdulos sean independientes.
Esto se consigue intentando satisfacer dos
condiciones:

Cada mdulo se disea sin conocimiento del diseo de


otros mdulos
La ejecucin de un subprograma particular no tiene por
que afectar a los valores de las variables de otros
subprogramas.

Dado que se permite el anidamiento en la llamada


a subprogramas, es necesario evitar problemas
con los identificadores definidos en varias partes
del cdigo.

15

MBITO DE VARIABLES: VARIABLE


LOCAL
Son aquellas que se declaran en el cuerpo de la
funcin. Solo son "visibles" o "usables" dentro de la
funcin donde se han declarado.
Dos funciones diferentes, pueden utilizar los
mismos nombres de variables sin "interferencias
ya que se refieren a posiciones diferentes de
memoria.

16

MBITO DE VARIABLES: VARIABLE


LOCAL
Accin Principal
DV
Entero k
Variable local a Principal
Inicio
k3
escribir(Cuadrado , cuadrado(k))
Fin
Entero Accin cuadrado(Entero n)
DV
Entero k
Variable local a cuadrado
Inicio
kn*n
retornar k
FAccin

17

MBITO DE VARIABLES: VARIABLE


GLOBAL

Es aquella que se define fuera del cuerpo de cualquier


funcin, normalmente al principio del programa y antes de
cualquier funcin (En C++ despus de la definicin de los
archivos de biblioteca (#include) y de la definicin de
constantes simblicas).
El mbito de una variable global son todas las funciones que
componen el programa, cualquier funcin puede acceder a
dichas variables para leer y escribir en ellas. Es decir, se
puede hacer referencia a su direccin de memoria en
cualquier parte del programa.
Al programar usando procedimientos y funciones, no
utilizaremos en nuestras aplicaciones las variables globales,
pues atenta contra la modularidad y el bajo acoplamiento que
son lo que deseamos.
18

MBITO DE VARIABLES: VARIABLE


GLOBAL

19

PARMETROS ACTUALES O REALES

Son las variables de enlace definidas en el programa


principal y que se usan como argumentos dentro de los
parntesis que posee una llamada a un subprograma.

Accin Principal
DV
Entero num1, num2, coc, res
Inicio

Parmetros actuales

leer(num1, num2)
division(num1,num2,coc,res)
escribir(coc,res)
Fin

Llamada a procedimiento
20

PARMETROS FORMALES O FICTICIOS

Son las variables de enlace definidas en la entrada


de un subprograma, que aceptan los valores de los
parmetros actuales que se usan en la llamada al
subprograma y se comportan como otras variables
locales.

Parmetro formal

Entero Accin cuadrado(Entero n)


DV
Entero k //Variable local a cuadrado
Inicio
kn*n
retornar k
FAccin

21

PASO DE PARMETROS: POR VALOR

El paso de parmetros por valor consiste en copiar


el contenido de la variable que queremos pasar en
otra dentro del mbito local del subprograma. Se
tendrn dos valores duplicados e independientes,
con lo que la modificacin de uno no afecta al otro.

22

PASO DE PARMETROS: POR VALOR

23

PASO DE PARMETROS: POR VALOR


Accin Principal
DV
Entero k, cuad //Variables locales a Principal
Inicio
k3
cuadcuadrado(k)

k es parmetro real

escribir(Cuadrado , cuad)
Fin
Entero Accin cuadrado(Entero n)

n es parmetro formal

DV
Entero k //Variable local a cuadrado
Inicio
kn*n
retornar k
FAccin

24

PASO DE PARMETROS: POR


REFERENCIA

El paso de parmetros por referencia consiste en


proporcionar al subprograma al que se quiere
pasar el argumento, la direccin de memoria del
dato. En este caso se tiene un nico valor
referenciado (o apuntado) desde dos puntos
diferentes, el programa principal y subprograma al
que se pasa el argumento, por lo que cualquier
accin sobre el parmetro se realiza sobre el
mismo dato en la memoria.

25

PASO DE PARMETROS: POR


REFERENCIA

La variable X es en realidad una direccin de memoria que apunta a la


variable Y. Para poder usar X tendremos que anteponer siempre un &.

Todos los cambios que hagamos dentro de la funcin miFuncion sobre la


variable X se reflejarn en el parmetro actual correspondiente, en este caso
Y.

26

PASO DE PARMETROS: POR


REFERENCIA

Hallar el cociente y resto de una divisin

Accin division (entero n1, entero n2, entero &c, entero &r) //Prototipo
Accin Principal
DV
Entero num1, num2, coc, res
Inicio
leer(num1, num2)
division(num1,num2,coc,res)
escribir(coc,res)
Fin
Accin division (entero n1, entero n2, entero &c, entero &r)
Inicio
cn1 div n2
rn1 mod n2
FAccin

27

EJERCICIOS

28