Programación Lógica
Programación Lógica
Subrutinas
Lección 2
Unidad IV
Programación Lógica – Unidad IV
Contenido
Subalgorítmos - Subrutinas ........................................................................................................ 2
Concepto ........................................................................................................................... 2
Declaración e invocación ..........................................................................................2
Variables locales y globales ......................................................................................3
Bibliografía consultada ............................................................................................................... 6
Material de Lectura Básico pág. 1
Programación Lógica – Unidad IV
Subalgorítmos - Subrutinas
Concepto
Aunque las funciones son herramientas de programación muy útiles para la resolución de
problemas, su alcance está muy limitado. Con frecuencia se requieren subprogramas que
calculen varios resultados en vez de uno solo, o que realicen la ordenación de una serie de
números, etc. En estas situaciones la función no es apropiada y se necesita disponer del otro
tipo de subprograma: el procedimiento o subrutina.
Un procedimiento o subrutina es un subprograma que ejecuta un proceso específico. Ningún
valor está asociado con el nombre del procedimiento; por consiguiente, no puede ocurrir en una
expresión. Un procedimiento se llama escribiendo su nombre, por ejemplo, SORT, para indicar
que un procedimiento denominado SORT (ORDENAR) se va a usar. Cuando se invoca el
procedimiento, los pasos que lo definen se ejecutan y, una vez finalizados se devuelve el control
al programa que lo llamó.
Comparando con la función
Los procedimientos y funciones son subprogramas cuyo diseño y misión son similares; sin
embargo, existen unas diferencias esenciales entre ellos:
1) Un procedimiento es llamado desde el algoritmo o programa principal mediante su
nombre y una lista de parámetros actuales, o bien con la instrucción llamar_a (call). Al
llamar al procedimiento se detiene momentáneamente el programa que se estuviera
realizando y el control pasa al procedimiento llamado. Después que las acciones del
procedimiento se ejecutan, se regresa a la acción inmediatamente siguiente a la que se
llamó.
2) Las funciones devuelven un solo valor, los procedimientos pueden devolver 0,1 o n
valores y en forma de lista de parámetros.
3) El procedimiento se declara igual que la función, pero su nombre no está asociado a
ninguno de los resultados que obtiene.
Declaración e invocación
Es similar a la de una función:
procedimiento nombre [(lista de parámetros formales)]
<acciones>
fin_procedimiento
Para llamarlo, se usa la instrucción:
llamar_a nombre [(lista de parámetros actuales)]
Dependiendo del lenguaje de programación la palabra clave llamar/call puede ser opcional. En
estos casos simplemente se escribe el nombre del procedimiento como si fuese una instrucción
cualquiera (y de aquí la importancia de darle un nombre único a los procedimientos – de esta
forma evitamos conflictos de nombre)
El ejemplo siguiente usa un procedimiento para dividir dos números y obtener su cociente y
resto:
Material de Lectura Básico pág. 2
Programación Lógica – Unidad IV
procedimiento división (E entero:Dividendo,Divisor; S entero: Cociente, Resto)
inicio
Cociente ← Dividendo DIV Divisor
Resto ← Dividendo - Cociente * Divisor
fin_procedimiento
Observemos que el procedimiento tiene dos enteros como parámetros de entrada (Dividendo y
divisor), y dos enteros como parámetros de salida (cociente y resto). En otras palabras, este
procedimiento recibe dos valores y devuelve también dos valores.
El algoritmo:
algoritmo ejemplo_division
var
entero: M, N, P, Q
inicio
leer(M, N)
llamar_a division (M, N, P, Q)
escribir(P, Q)
fin
Observemos que la llamada tiene cuatro parámetros, los cuales corresponden en orden a los
definidos en la declaración:
M corresponde a E entero: Dividendo, el primer parámetro
N corresponde a E entero: Divisor, el segundo parámetro
P corresponde a S entero: Cociente, el tercer parámetro
Q corresponde a S entero: Resto, el cuarto parámetro
De esta forma, el subalgoritmo toma M, N como entrada y sus salidas "Cociente y Divisor"
son asignadas a P y Q de nuestro programa llamador.
Variables locales y globales
Las variables utilizadas en los programas principales y subprogramas se clasifican en dos tipos:
• variables locales;
• variables globales.
Una variable local es aquella que está declarada y definida dentro de un subprograma, en el
sentido de que está dentro de ese subprograma y es distinta de las variables con el mismo
nombre declaradas en cualquier parte del programa principal. El significado de una variable se
confina al procedimiento en el que está declarada. Cuando otro subprograma utiliza el mismo
nombre se refiere a una posición diferente en memoria. Se dice que tales variables son locales
al subprograma en el que están declaradas.
Una variable global es aquella que está declarada para el programa o algoritmo principal, del
que dependen todos los subprogramas.
La parte del programa/algoritmo en que una variable se define se conoce como ámbito o alcance
(scope, en inglés). (Ver figura siguiente)
Material de Lectura Básico pág. 3
Programación Lógica – Unidad IV
Ilustración 1: Ámbitos
Fuente: Joyanes Aguilar, L. (2008). Fundamentos de Programación. Algoritmos y Estructuras de datos. Madrid, ES: McGraw Hill.
El uso de variables locales tiene muchas ventajas. En particular, hace a los subprogramas
independientes, con la comunicación entre el programa principal y los subprogramas
manipulados estructuralmente a través de la lista de parámetros. Para utilizar un procedimiento
sólo necesitamos conocer lo que hace y no tenemos que estar preocupados por su diseño, es
decir, cómo están programados.
Esta característica hace posible dividir grandes proyectos en piezas más pequeñas
independientes. Cuando diferentes programadores están implicados, ellos pueden trabajar
independientemente.
A pesar del hecho importante de los subprogramas independientes y las variables locales, la
mayoría de los lenguajes proporcionan algún método para tratar ambos tipos de variables.
Una variable local a un subprograma no tiene ningún significado en otros subprogramas. Si un
subprograma asigna un valor a una de sus variables locales, este valor no es accesible a otros
programas, es decir, no pueden utilizar este valor. A veces, también es necesario que una
variable tenga el mismo nombre en diferentes subprogramas.
Por el contrario, las variables globales tienen la ventaja de compartir información de diferentes
subprogramas sin una correspondiente entrada en la lista de parámetros.
En un programa sencillo con un subprograma, cada variable u otro identificador es o bien local
al procedimiento o global al programa completo. Sin embargo, si el programa incluye
procedimientos que engloban a otros procedimientos —procedimientos anidados—, entonces la
noción de global/local es algo más compleja.
El ámbito de un identificador (variables, constantes, procedimientos) es la parte del programa
donde se conoce el identificador. Si un procedimiento está definido localmente a otro
Material de Lectura Básico pág. 4
Programación Lógica – Unidad IV
procedimiento, tendrá significado sólo dentro del ámbito de ese procedimiento. A las variables
les sucede lo mismo; si están definidas localmente dentro de un procedimiento, su significado o
uso se confina a cualquier función o procedimiento que pertenezca a esa definición. La figura
siguiente muestra un esquema de un programa con diferentes procedimientos, algunas variables
son locales y otras globales. En la citada figura se muestra el ámbito de cada definición.
Ilustración 2: Ámbito de definición de variables
Fuente: Joyanes Aguilar, L. (2008). Fundamentos de Programación. Algoritmos y Estructuras de datos. Madrid, ES: McGraw Hill.
Material de Lectura Básico pág. 5
Programación Lógica – Unidad IV
Bibliografía consultada
• Joyanes Aguilar, L. (2008). Fundamentos de Programación. Algoritmos y Estructuras de
datos. Madrid, ES: McGraw Hill.
Material de Lectura Básico pág. 6