Programación Modular, una manera de organizar las funciones ordenadamente.
Size: 552.66 KB
Language: es
Added: Apr 28, 2024
Slides: 34 pages
Slide Content
PROGRAMACIÓN Y FUNDAMENTOS
DE ALGORÍTMICA
PROGRAMACIÓN MODULAR
SUBPROGRAMAS
Pablo Romero
LOGRO DE LA SESIÓN
Al finalizar la sesión el estudiante elabora
seudocódigo empleando módulos para resolver
problemas.
2
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
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
subproblemasse 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
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
6
SUBPROGRAMAS
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, …
SUBPROGRAMAS
8
SUBPROGRAMAS: EJEMPLO1
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 modn2
FAcción
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.
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
SUBPROGRAMAS: EJEMPLO2
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)
cuadcuadrado(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
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.
FUNCIÓN: DECLARACIÓN, DEFINICIÓNY
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
EJEMPLO3
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 numhacer
factorfactor*i
Fpara
retornar factor
FAcción
ÁMBITODEVARIABLES
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
SUBPROGRAMAS: EJEMPLO
Hallar las raíces de una ecuación cuadrática
17
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
SOLUCIÓN
Real Acción hallarDiscrim(real a, real b, real c)
DV
Real d
Inicio
db*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
dhallarDiscrim(a,b,c)
raiz1(-b + d **0.5) / (2*a)
raíz2(-b –d **0.5) / (2*a)
FAcción
19
ÁMBITODEVARIABLES: VARIABLELOCAL
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
ÁMBITODEVARIABLES: VARIABLELOCAL
Acción Principal
DV
Entero kVariable 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
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
ÁMBITODEVARIABLES: VARIABLEGLOBAL
23
ÁMBITODEVARIABLES: VARIABLEGLOBAL
PARÁMETROS ACTUALESOREALES
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
PARÁMETROS FORMALESOFICTICIOS
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
PASODEPARÁMETROS: PORVALOR
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.
27
PASODEPARÁMETROS: PORVALOR
= Z
28
PASODEPARÁMETROS: PORVALOR
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
El paso de parámetros por referencia consiste en
proporcionar al subprograma al que se quiere
pasar el argumento, la dirección de memoriadel
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
PASODEPARÁMETROS: PORREFERENCIA
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
PASODEPARÁMETROS: PORREFERENCIA
Mi Procedimiento
voidmiProcedimiento(
miProcedimiento(
31
PASODEPARÁMETROS: PORREFERENCIA
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 modn2
FAcción
PREGUNTAS
32
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
RESUMEN
Subprogramas
Tipos
Diferencias
Parámetros
Tipos
Paso de parámetros
34