Acciones
Nominadas
Acciones Nominadas (subprogramas
o módulos): representan porciones de código que comprenden una o
más acciones, que pueden ser llamados en el código principal y ser usados
tantas veces sea necesario sin necesidad de escribir las acciones nuevamente.
Establecen “paquetes o capsulas” de código que promueven la abstracción, la
reutilización de código y facilitación de depuración de soluciones de gran
tamaño. Son la base de la modularidad, que establece que un programa completo
se compone de un conjunto de módulos. Fomenta el pensamiento “divide y
vencerás”, que establece que la solución de un problema grande está compuesta
por la solución de diversos subproblemas mas pequeños. Es la base del Principio
de Optimalidad de Bellman que establece que la solución optima de un problema
se consigue descomponiendo el problema en pequeñas partes, y aplicando la
solución optima para cada parte implica la solución optima del problema
principal. Facilitan el trabajo en grupo y permiten abstraerse de ciertas cosas
a la hora de solucionar problemas puntuales. Se desarrollan bajo el enfoque de
“caja negra”, que representa una caja donde ocurre un procesamiento del cual no
estamos enterados del todo.
Se clasifican en:
Funciones:
representan subprogramas que reciben n parámetros (n >= 1) y retornan m
valores de salida (m > = 1). En algunos lenguajes, las funciones retornan
únicamente 1 valor de salida, que a demás debe ser primitivo (como es el caso
de C). En el pseudocodigo se cumple que deben recibir 1 o más valores de
entrada y deben arrojar una única salida primitiva.
Declaración:
Función id-función (lista de parámetros) : tipo de
retorno
Inicio
//declaración de variables locales
//acciones
Finfuncion
Ejemplo:
Var
a,b,c : entero
Función promedio (x : real, y : real, z: real) : real
Inicio
promedio, suma : real
suma ← (x + y + z)
promedio ← (suma/3)
retornar promedio
finfuncion //ejemplo de declaración
Inicio
leer (a)
leer (b)
leer (c)
escribir (“el promedio de los 3 números es:”,
promedio(a,b,c))
fin
Las funciones al ser llamadas bajo unos parámetros
determinados retornan valores, por esta razón es posible llamar a las funciones
al lado derecho de asignaciones (sería equivalente a asignarle a una variable
un valor, ese valor seria el retorno de la función), en operaciones de
escritura (sería equivalente a escribir un valor, siendo el valor el retorno de
la función), en expresiones (siendo la función un valor que sirve de operando,
siendo ese valor el retorno de la función) o como parámetro en la invocación de
otra función.
Procedimientos:
son comúnmente conocidos como funciones que no retornan valores. Reciben n
parámetros (n >= 0) y no retornan valores. Semánticamente, se puede usar un
procedimiento para retornar valores si se hace uso del paso de parámetros por
referencia, en donde aquellos parámetros pasados de esta forma podrían ser
modificados dentro del procedimiento y el cambio se vería reflejado fuera de él
cuando la subrutina termine. Como es posible pasar cualquier cantidad de
parámetros y estos pueden modificarse todos si se quiere, se puede ver como una
acción nominada que retorna múltiples valores.
Declaración:
proc id-procedimiento (lista de parámetros formales)
Inicio
//declaraciones locales
//acciones
finproc
Invocación:
id-proc (lista de parámetros actuales)
Como los procedimientos no retornan valores
directamente, no es posible invocarlos de la misma forma que las funciones.
Solo pueden ser invocados directamente como si fuese una acción más dentro de
la secuencialidad del algoritmo, es decir directamente en el cuerpo del
algoritmo. No pueden ser asignados a variables porque no retornan valores, así
como tampoco es posible llamarlos como parámetros actuales de funciones, ni
llamarlos en secuencias de escritura ni en expresiones.
Parámetros:
establecen la comunicación entre los subprogramas, y definen la entrada de
datos a los mismos. Con respecto a su ubicación se pueden clasificar como
parámetros formales (aquellos parámetros en la declaración del subprograma) o
parámetros actuales (aquellos usados en la invocación del subprograma). Cuando
se llama a una subrutina en el cuerpo principal del algoritmo, el control de
flujo se detiene momentáneamente para darle paso a la subrutina, que se
encargara de realizar las acciones que tiene programadas. Cuando esto ocurre,
se hace una sustitución entre los parámetros formales y los parámetros
actuales. Cuando se realiza una copia del contenido de la variable pasada como
parámetro actual al correspondiente parámetro formal del subprograma, entonces
se habla de paso de parámetros por valor. El subprograma en su flujo trabaja
sobre una copia del valor pasado como parámetro actual, mas no sobre el
parámetro actual como tal, de esta forma el valor original del parámetro actual
se preserva sin cambiarse. Cuando en la sustitución de parámetros, se trabaja
directamente sobre el valor pasado, se habla de paso de parámetros por
referencia. Bajo este paso de parámetros, se trabaja directamente sobre los
valores pasados y si estos son modificados el valor se ve reflejado fuera de la
subrutina cuando el control de flujo es regresado al cuerpo principal del
algoritmo. Cuando el subprograma trabaja sobre una copia, pero justo antes de
su salida de la subrutina hace la actualización del valor del parámetro formal
al valor del parámetro actual, hablamos de paso de parámetros por valor-resultado.
Bajo este enfoque, el valor original es alterado solo al final del flujo de
ejecución del subprograma, a diferencia del paso por referencia donde cada
modificación era contemplada directamente.
Regla de ámbito básica en el pseudoformal: toda variable
tiene alcance en el bloque donde fue declarada, y no fuera de él.
Ejemplos En Lenguaje C
//Función que retorna la suma de 2 numeros
int suma(int a, int b){
int c;
c = a+b;
return c;
}
//Procedimiento que intercambia el valor de 2 variables (paso referencia)
void exchange(int *a, int *b){
int c;
c = *a;
*a = *b;
*b = c;
}
Hola. ¿Sería posible si le cambiaras el fondo de pantalla, a uno más oscuro...?
ResponderEliminar