Sie sind auf Seite 1von 2

Subprogramas o subrutinas

Conjunto de declaraciones y sentencias independiente al programa principal identificable con un


nombre y que es “llamado” por el programa principal o por otros subprogramas o subrutinas.

Sintaxis general de la definición de subprogramas


subrutina|sub <nombre> ( [<lista_parametros>] ) [ retorna <tipo_dato> ]
[var
<dec_var> ] // Declaracion de variables de la subrutina
[const
<dec_const>] // Declaracion de constantes de la subrutina
inicio
<sentencias> // Cuerpo de la subrutina
[ retorna <expr> ] // Si es una función debe terminar con retorna
fin

• El nombre debe respetar la formación de identificadores


• La subrutina puede colocarse en cualquier orden pero luego del programa principal
• Puede haber cualquier número de subrutinas
• Las variables allí declaradas son locales a la subrutina

Observaciones sobre subprogramas

• Cuando un subprograma es llamado por otro subprograma o por el programa principal, el


control de la ejecución pasa al subprograma “llamado” que cuando termina pasa de vuelta el
control al “llamador”.
• Cuando un subprograma retorna un valor se denomina función y cuando no tiene valor de
retorno se denomina procedimiento.
• Una función puede invocarse dentro de “expresiones”.
• En SL existen varias funciones y procedimientos predefinidos (por ejemplo cos(), sqrt(),
int() son funciones; leer() e imprimir() son
• procedimientos – Revisar el manual de referencia).

• Objetivos principales del uso de subprogramas


• Modularización de programas: facilita la resolución de subproblemas en forma
independiente al programa principal.
• Evita la repetición de código: permite parametrizar soluciones comunes. Se ahorra espacio
de memoria para datos (variables) y para
• código.
• Permite ordenar códigos extensos de manera a facilitar sobre todo la lectura y el
mantenimiento de los programas.
Ámbito de variables
El ámbito define el conjunto de instrucciones en la que una variable puede ser utilizada, es decir
puede ser referenciada.

Variables globales: declaradas en el programa principal. Tienen vida durante la ejecución de todo
el programa. Son accesibles desde el
programa principal y desde cualquier subprograma.

Variables locales: declaradas en el subprograma. Solo tienen vida durante la ejecución del
subprograma y son visibles solo en el subprograma donde fueron declaradas.
En SL se tiene solo dos posibles ámbitos, global o local.

Precedencia de “resolución de nombre de variables” : cuando existe declaración de una variable con
el mismo nombre en el
programa principal (variable global) y en el subprograma (variable local), siempre se toma aquella
cuya definición este más cerca del
lugar de referencia, en general tiene precedencia la variable definida en el subprograma.

Paso de parámetros
El proceso de paso de parámetros ocurre cuando se asocia las variables o valores en el momento de
la llamada con las variables nombradas en la declaración del subprograma. Los parámetros que se
usan al momento de la llamada se denominan parámetros reales y los que definidos en la
declaración del programa se denominan parámetros formales. De esta forma se puede pasar datos a
un subprograma .

Por ejemplo: al llamar sqrt(100) , 100 es el parámetro real.

En la definición de sqrt se tendría sub sqrt ( n : numerico ) retorna numérico,


en este caso n sería el parámetro formal.

Por valor: el valor del parámetro real se copia en la dirección del parámetro formal.
El parámetro formal tiene su propia dirección de memoria por lo tanto no interfiere con el valor del
parámetro real. El parámetro real puede ser un expresión cualquiera.

Por referencia: no se hace la copia del parámetro real al formal sino lo que se pasa es la dirección
del parámetro real. El parámetro formal hace referencia a la misma dirección del parámetro real, por
lo que si se altera el valor de una variable, que es un parametro pasado por referencia, en el
subprograma el valor del parametro real en el llamador queda tambien alterado. No se puede pasar
como parámetro real una expresión, sino que debe ser una variable “direccionable” en memoria.

Para indicar que se quiere este tipo de paso de parámetro se indica antes del nombre del parametro
la claúsula ref.

Ejemplo:

subrutina intercambiar ( ref a, b : numerico )


subrutina incrementar (ref N : numerico; inc_en: numerico ) retorna numerico

Ver página 18 del Manual de SL, para observar un cuadro comparativo.

Das könnte Ihnen auch gefallen