2. LOGRO DE LA SESIÓN
Al finalizar la sesión el estudiante elabora
seudocódigo empleando módulos para resolver
problemas.
2
3. AGENDA
Pseudocódigo
Programación modular
Subprogramas
Ejemplo
Procedimiento
Declaración, Definición y Llamada
Ejemplo
Función
Declaración, Definición y Llamada
Ámbito de variables: local y global
Paso de parámetros: por valor y referencia
Ejercicios
3
4. 4
PROGRAMACIÓN MODULAR
La programación modular es una metodología de
programación que consiste en organizar un
programa en módulos.
En la etapa de diseño de un programa se aplica la
estrategia “Divide y vencerás”.
En la etapa de implementación, cada uno de los
subproblemas se implementa a través de un
módulo.
Los lenguajes de programación brindan diferentes
mecanismos para implementar módulos.
Los módulos más simples son los procedimientos y
funciones.
5. 5
SUBPROGRAMAS
Subprogramas: bloques de código que llevan a
cabo una tarea concreta (= resuelven un
subproblema concreto)
Tienen un propósito
Tienen unas precondiciones
Permiten reutilizar código de manera sencilla y segura
Pueden ser usados más de una vez en el programa principal
sin necesidad de reescribir todo (o copiar-pegar)
Ayudan a que el código del programa principal sea
Legible: Resulta más sencillo leer sólo el nombre del
subprograma que todo su código
Ordenado: Cada subprograma ocupa un lugar concreto
dentro de todo el código
7. SUBPROGRAMAS
7
Ejemplo: Podemos pensar en subprogramas
para…
Mostrar un menú de opciones
Pedirle datos al usuario
Calcular el máximo de 3 números
…
De hecho, ya conocemos (y hemos utilizado)
algunos subprogramas que no hemos
implementado nosotros
Para operar con números: sqrt, pow, …
Para operar con arreglos de caracteres: strcpy, …
9. SUBPROGRAMAS: EJEMPLO 1
9
Hallar el cociente y resto de una división
Acción division (entero n1, entero n2, entero &c, entero &r) //Prototipo
Acción Principal
DV
Entero num1, num2, coc, res
Inicio
leer(num1, num2)
division(num1,num2,coc,res) Llamada a procedimiento
escribir(coc,res)
Fin
Acción division (entero n1, entero n2, entero &c, entero &r)
Inicio
cn1 div n2
rn1 mod n2
FAcción
10. 10
PROCEDIMIENTO
Son subprogramas que realizan una tarea
determinada y devuelven 0 o más de un valor. Se
utilizan para estructurar un programa y mejorar su
claridad y generalidad.
Debido a que devuelven más de un resultado, NO
UTILIZAN la palabra reservada retornar, y los
parámetros pueden ser:
- de ENTRADA Sólo 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.
11. PROCEDIMIENTO: DECLARACIÓN, DEFINICIÓN,
LLAMADA
Declaración o prototipo
Acción identificador (lista de parámetros)
Definición
Acción identificador (lista de parámetros)
DV
//Variables locales
Inicio
sentencias
Facción
Llamada o Invocación
identificador (lista de parámetros)
11
12. SUBPROGRAMAS: EJEMPLO 2
12
Hallar el cuadrado de un número
Entero Acción cuadrado(Entero n) //Prototipo
Acción Principal
DV
Entero k, cuad //Variables locales a Principal
Inicio
Leer(k)
cuad cuadrado(k) Llamada a la función
escribir(“Cuadrado “, cuad)
Fin
Entero Acción cuadrado(Entero n)
DV
Entero c //Variable local a cuadrado
Inicio
cn*n
retornar c
FAcción
13. 13
FUNCIÓN
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 PARÁMETROS
son de ENTRADA.
14. FUNCIÓN: DECLARACIÓN, DEFINICIÓN Y
LLAMADA
14
Declaración o prototipo
tipo Acción identificador (lista de parámetros)
Definición
tipo Acción identificador (lista de parámetros)
DV
//Variables locales
Inicio
sentencias
retornar resultado
Facción
Llamada o Invocación
identificador (lista de parámetros) //Obs: retorna resultado
15. 15
EJEMPLO 3
Escribir subprograma para hallar el factorial
de un número
Entero Acción factorial (Entero num)
DV
Entero i, factor
Inicio
factor1
Para i de 1 a num hacer
factorfactor*i
Fpara
retornar factor
FAcción
16. ÁMBITO DE VARIABLES
El buen uso de la programación modular requiere
que los módulos sean independientes.
Esto se consigue intentando satisfacer dos
condiciones:
Cada módulo se diseña sin conocimiento del diseño de
otros módulos
La ejecución 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 código.
16
18. SOLUCIÓN
//Prototipo
Real Acción hallarDiscrim(real a, real b, real c)
Acción hallarRaices(real a, real b, real c, real &raiz1, real &raiz2)
Acción Principal
DV
Real coef1, coef2, coef3 //Entrada
Real r1, r2 //Salida
Inicio
Leer(coef1, coef2, coef3)
hallarRaices(coef1, coef2, coef3, r1, r2) Llamada a procedimiento
Escribir(r1, r2)
Fin
18
19. SOLUCIÓN
Real Acción hallarDiscrim(real a, real b, real c)
DV
Real d
Inicio
d b*b-4*a*c
retornar d
FAcción
Acción hallarRaices(real a, real b, real c, real &raiz1, real &raiz2)
DV
Real d
Inicio
d hallarDiscrim(a,b,c)
raiz1 (-b + d **0.5) / (2*a)
raíz2 (-b – d **0.5) / (2*a)
FAcción
19
20. ÁMBITO DE VARIABLES: VARIABLE LOCAL
Son aquellas que se declaran en el cuerpo de la
función. Solo son "visibles" o "usables" dentro de la
función 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.
20
21. ÁMBITO DE VARIABLES: VARIABLE LOCAL
Acción Principal
DV
Entero k Variable local a Principal
Inicio
k3
escribir(“Cuadrado “, cuadrado(k))
Fin
Entero Acción cuadrado(Entero n)
DV
Entero k Variable local a cuadrado
Inicio
kn*n
retornar k
FAcción
21
22. Es aquella que se define fuera del cuerpo de cualquier función,
normalmente al principio del programa y antes de cualquier
función (En C++ después de la definición de los archivos de
biblioteca (#include) y de la definición de constantes
simbólicas).
El ámbito de una variable global son todas las funciones que
componen el programa, cualquier función puede acceder a
dichas variables para leer y escribir en ellas. Es decir, se
puede hacer referencia a su dirección 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. 22
ÁMBITO DE VARIABLES: VARIABLE GLOBAL
24. PARÁMETROS ACTUALES O REALES
Son las variables de enlace definidas en el programa
principal y que se usan como argumentos dentro de los
paréntesis que posee una llamada a un subprograma.
Acción Principal
DV
Entero num1, num2, coc, res
Inicio
leer(num1, num2)
division(num1,num2,coc,res) Llamada a procedimiento
escribir(coc,res)
Fin
24
Parámetros actuales
25. PARÁMETROS FORMALES O FICTICIOS
Son las variables de enlace definidas en la entrada
de un subprograma, que aceptan los valores de los
parámetros actuales que se usan en la llamada al
subprograma y se comportan como otras variables
locales.
Entero Acción cuadrado(Entero n)
DV
Entero k //Variable local a cuadrado
Inicio
kn*n
retornar k
FAcción
25
Parámetro formal
26. 26
PASO DE PARÁMETROS: POR VALOR
El paso de parámetros por valor consiste en copiar
el contenido de la variable que queremos pasar en
otra dentro del ámbito local del subprograma. Se
tendrán dos valores duplicados e independientes,
con lo que la modificación de uno no afecta al otro.
28. 28
PASO DE PARÁMETROS: POR VALOR
Acción Principal
DV
Entero k, cuad //Variables locales a Principal
Inicio
Leer(k)
cuadcuadrado(k) k es parámetro real
escribir(“Cuadrado “, cuad)
Fin
Entero Acción cuadrado(Entero n) n es parámetro formal
DV
Entero c //Variable local a cuadrado
Inicio
cn*n
retornar c
FAcción
29. El paso de parámetros por referencia consiste en
proporcionar al subprograma al que se quiere
pasar el argumento, la dirección 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
acción sobre el parámetro se realiza sobre el
mismo dato en la memoria.
29
PASO DE PARÁMETROS: POR REFERENCIA
30. La variable X es en realidad una dirección de memoria que apunta a la
variable Y. Para poder usar X tendremos que anteponer siempre un &.
Todos los cambios que hagamos dentro del procedimiento “miProcedimiento”
sobre la variable X se reflejarán en el parámetro actual correspondiente, en
este caso Y.
30
PASO DE PARÁMETROS: POR REFERENCIA
Mi Procedimiento
void miProcedimiento (
miProcedimiento (
31. 31
PASO DE PARÁMETROS: POR REFERENCIA
Hallar el cociente y resto de una división
Acción division (entero n1, entero n2, entero &c, entero &r) //Prototipo
Acción Principal
DV
Entero num1, num2, coc, res
Inicio
leer(num1, num2)
division(num1,num2,coc,res)
escribir(coc,res)
Fin
Acción division (entero n1, entero n2, entero &c, entero &r)
Inicio
cn1 div n2
rn1 mod n2
FAcción
33. PROBLEMA
Use subprogramas y paso de parámetros para
hallar la suma de los n términos de
1 +
1
2!
+
1
3!
+
1
4!
+ ⋯
Usando subprogramas halle las raíces de la
ecuación cuadrática
33