Вы находитесь на странице: 1из 8

Universidad Nacional de Trujillo Informtica

Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

SUBPROGRAMAS: FUNCIONES Y PROCEDIMIENTOS

1. Divisin de programas complejos.

La mayor parte de los programas de cmputo que resuelven problemas de la vida real, son
mucho mayores que los programas presentados como ejemplos. La experiencia ha demostrado que la
mejor forma de desarrollar y mantener un programa grande es construirlo a partir de piezas menores
o mdulos, los cuales son implementados por medio de los subprogramas, siendo cada uno de ellos
ms fcil de manipular que el programa original. Esta tcnica se conoce como divide y vencers.

Un subprograma es un algoritmo diseado para efectuar una tarea particular, bajo la dependencia
de un algoritmo u otro subprograma que lo utiliza. De esta manera, el subprograma es diseado para
ser utilizado por otros procesos ms amplios, dentro de los cuales existe un flujo de entrada y salida
de informacin.

La utilizacin de subprogramas en la solucin de problemas grandes tiene muchas ventajas. Por


ejemplo, para tareas que deban efectuarse ms de una vez, la modularidad evita la necesidad de
programacin redundante, ya que un mdulo puede construirse e invocarse cada vez que se necesite
hacer la misma labor, por lo tanto, se logra que los programas sean ms cortos. De igual manera, la
fragmentacin en mdulos individuales proporciona claridad, facilidad de distribucin de trabajo en
equipo y, por ser algoritmos cortos, son ms fciles de escribir, corregir y su estructura lgica es ms
clara que la de los programas que no estn divididos en mdulos.

El subprograma, por ser un algoritmo, debe cumplir con las mismas caractersticas es ste y
hacer tareas similares como aceptar datos, escribir datos y hacer clculos; sin embargo, es utilizado
para un propsito especfico. El subprograma recibe datos del algoritmo o subalgoritmo que lo
invoca y ste le devuelve resultados. Su labor puede compararse con la de un jefe que le da
instrucciones a un empleado (subprograma), para que realice una determinada labor y as poder
continuar con su trabajo; se detiene mientras su subalterno realiza la tarea y cuando ste le devuelve
los resultados reanuda su labor. Asimismo, cuando un algoritmo invoca a un subprograma le cede el
control de ejecucin a ste, por lo tanto, detiene la ejecucin de la prxima instruccin hasta que el
subprograma se ejecute, le entregue resultados y le devuelva el control de ejecucin.

La comunicacin que se establece entre el algoritmo llamante y el subprograma se hace a travs


de variables denominadas parmetros, que hacen las veces de recipientes (para recibir los datos que
necesita conocer para realizar su trabajo). Un subprograma puede ser invocado tantas veces como se
necesite y, a su vez, los subprogramas pueden invocar a otros subprogramas, como puede verse en la
figura siguiente:

Instruccin_1
Pasa informacin, cede el control
Llamada a A Subprograma A
Instruccin_3 Instrucciones
Retorna control e informacin


cont, pot: enteros Pasa informacin, Cede el
enteros cede el control control
Llamada a B Subprograma B Subprograma C

Instruccin_k Instrucciones Instrucciones


Retorna
Retorna control control
e informacin

Instruccin_n

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -1-


Universidad Nacional de Trujillo Informtica
Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

2. Clasificacin de los subprogramas.

La divisin de los subprogramas se hace con base en el nmero o cantidad de valores que el
subprograma le enva al programa o subprograma llamante.

2.1. Procedimiento: Son subprogramas que devuelven cero valores al programa o subprograma
que lo invoca (utiliza) y retornan el control de ejecucin a la instruccin siguiente desde
donde se llaman.

2.2. Funciones: Son subprogramas que le devuelven al programa o subprograma que los invoca
un nico valor. El valor que stas devuelven lo hacen a travs de una variable involucrada en
una instruccin de retorno, dentro del conjunto de instrucciones, o en el nombre de sta. Las
funciones devuelven el control de ejecucin a la misma instruccin desde donde se llaman.

3. Definicin de subprogramas.

Se entiende por definicin de subprograma al grupo de instrucciones que se realizan cuando se


llama o invoca al subprograma. En la definicin, cada subprograma debe tener un nombre nico y el
nombre de ste debe tener relacin con la operacin que realiza.

La estructura de la definicin de un subprograma es la siguiente:

TipoDatoRetornado NombreDeSubprograma (ListaDeParmetros) {


<Instrucciones>
return DatoRetornado;
}

Donde:
TipoDatoRetornado: tipo de dato devuelto por el subprograma. Si es una funcin, el tipo de dato
retornado puede ser cualquiera de los que C proporciona: int, float, char, etc. Si es un
procedimiento, no retorna ningn valor y el tipo de dato es void.
NombreDeSubprograma: identificador o nombre que se le da al subprograma. El nombre dado
al subprograma debe cumplir con las normas para conformar nombres de variables y debe ser
nico (no pueden existir dos o ms subprogramas con el mismo nombre).
ListaDeParmetros: el subprograma puede o no tener parmetros. Los parmetros son una lista
de campos variables separados por comas y son utilizados para establecer la comunicacin entre
el mdulo que lo activa y el subprograma.
DatoRetornado: valor devuelto. Este valor va a la derecha de la palabra return. Si no retorna
un valor puede omitirse la palabra return.

Se denomina prototipo de un subprograma a la cabecera, el cual es especificado al inicio del


programa y puede omitirse en ellas los identificadores o nombres de los parmetros. El prototipo
permite al compilador separar memoria.

Ejemplo 1. Procedimiento que no recibe parmetros.

El prototipo del procedimiento sumar:

void sumar();

La implementacin del procedimiento se muestra a continuacin

void sumar() { // Cabecera de procedimiento.


int x=5, y=8, z;
z = x + y;
cout<<El valor de la suma es: <<z; // Muestra el resultado
}

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -2-


Universidad Nacional de Trujillo Informtica
Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

El procedimiento sumar no recibe ningn argumento (no se ha escrito nada entre los
parntesis). La variable z guarda el resultado de sumar los valores de x e y. Luego el resultado se
muestra a travs de la sentencia cout.

El tipo de dato retornado del procedimiento sumar es void, es decir que no devuelve ningn
valor, por lo tanto no se utiliza la palabra return.

Un programa llama a un subprograma mediante su identificador o nombre seguido de


argumentos separados por comas y entre parntesis. Estos argumentos son los valores que utiliza el
subprograma. Para que un subprograma pueda ser invocado, llamado o utilizado debe definirse
previamente.

La invocacin al procedimiento se hara de la siguiente manera:

void main() {
<Instrucciones>
sumar();
}

Cuando el subprograma es llamado o invocado se ejecutan las instrucciones de su definicin.


Cuando el subprograma termina de ejecutar las instrucciones de su definicin devuelve el control al
programa o subprograma que lo invoc.

4. Parmetros de un subprograma.

Cuando los subprogramas utilizan parmetros, debern especificar en la cabecera de su


definicin un nombre y un tipo nico para cada uno de ellos.

Cuando el programa invoca al subprograma, el programa compilador asignar los valores de la


invocacin (argumentos) a los parmetros de su definicin. Los argumentos y los parmetros debern
ser del mismo tipo.

Ejemplo 2. Procedimiento que recibe argumentos.

void sumar(int, int) // Prototipo del procedimiento.

A continuacin se muestra la implementacin del procedimiento.

void sumar(int x, int y) { // Cabecera de procedimiento.


int z;
z = x + y;
cout<<El valor de la suma es: <<z; // Muestra el resultado
}

El procedimiento sumar recibe como argumento dos variables de tipo int llamadas x e y
cuyo valor es enviado por el llamador.

La invocacin al procedimiento:

void main() {
int x=5, y=8;
<Instrucciones>
sumar(x, y);
}

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -3-


Universidad Nacional de Trujillo Informtica
Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

5. Enviar y Recibir valores a travs de una funcin.

Las funciones, aparte de realizar una tarea especfica, pueden retornar un valor. Esto determina
que en el lugar de la invocacin se tiene un valor similar a una variable.

Cuando se quiere que la funcin retorne un valor, en la cabecera de su definicin se antecede al


nombre de la funcin el tipo de dato del valor que se retorna, y dentro del cuerpo de la definicin se
utiliza la instruccin return.

Ejemplo 3. Funcin que recibe un argumento y retorna un valor.

int sumar(int, int) // Prototipo de la funcin.

A continuacin se muestra la implementacin de la funcin.

int sumar(int x, int y) { // Cabecera de la funcin.


int z;
z = x + y;
return z; // Devuelve el resultado
}

El tipo de dato retornado de la funcin sumar es int, es decir que devuelve el valor de la
variable z que tambin es del tipo int haciendo uso de la palabra return.

La invocacin a la funcin:

void main() {
int x=5, y=8, resultado;
<Instrucciones>
resultado = sumar(x, y);
cout<<El valor de la suma es: <<resultado;
}

6. Cmo llamar funciones: Llamada por Valor y Llamada por Referencia.

6.1. Llamada por Valor.

Cuando los argumentos se pasan en Llamada por Valor, se efecta una copia del valor del
argumento y sta se pasa a la funcin llamada. Las modificaciones a la copia no afectan al valor
original de la variable del llamador.

La Llamada por Valor debera ser utilizada siempre que la funcin llamada no necesite
modificar el valor de la variable original del llamador.

Ejemplo 4. El siguiente ejemplo ilustra una llamada por valor.

float incrementar(float) // Prototipo de la funcin

La implementacin de la funcin:

float incrementar(float num) {


num = num + 2;
return num;
}

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -4-


Universidad Nacional de Trujillo Informtica
Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

La invocacin a la funcin mediante una llamada por valor sera de la siguiente manera:

void main() {
float num, result;
num = 10.0;
result = incrementar(num);
cout<<Valor de num: <<num; // Muestra el valor 10.0
cout<<Valor de result. <<result; // Muestra el valor 12.0
}

Vemos que el incremento del valor de la variable num se realiza dentro de la funcin
incrementar. Al ser una llamada por valor, el valor de dicha variable no se modifica por lo
que al mostrar su valor este ser el mismo valor inicial de 10.0.

6.2. Llamada por Referencia.

Cuando un argumento es pasado en llamada por referencia, el llamador de hecho permite


que la funcin modifique el valor original de la variable.

Una referencia es un alias o segundo nombre de la variable. Para declarar e inicializar una
referencia se indica el tipo de variable, un ampersand (&), el alias y finalmente se asigna la
variable.

int &alias = variable; // Declaracin e inicializacin de una referencia.

El propsito fundamental de una referencia es cambiar los valores de los parmetros en


una funcin. En la cabecera de la definicin de una funcin, se coloca como parmetro una
referencia.

Estos parmetros constituyen los alias de las variables o de los valores de la invocacin
(argumentos). En el cuerpo de la funcin se hace referencia al alias (parmetro).

Ejemplo 5. A continuacin se ilustra una llamada por referencia.

float incrementar(float &); // Prototipo de la funcin

La implementacin de la funcin:

float incrementar(float &num) {


num = num + 2;
return num;
}

La invocacin a la funcin mediante una llamada por referencia:

void main() {
float num, result;
num = 10.0;
result = incrementar(num);
cout<<Valor de num: <<num; // Muestra el valor 12.0
cout<<Valor de result. <<result; // Muestra el valor 12.0
}

Al ser una llamada por referencia, el valor de dicha variable se modifica y al mostrar su
contenido este ser de 12.0 (el valor inicial de 10.0 incrementado en dos unidades).

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -5-


Universidad Nacional de Trujillo Informtica
Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

7. Funciones predefinidas.

Las funciones que a continuacin se listan se encuentran en el archivo Math.h

Funcin Descripcin Ejemplo


sqrt(x) raz cuadrada de x sqrt(9.0) es 3.0
exp(x) funcin exponencial ex exp(1.0) es 2.718282
log(x) logaritmo natural de x (de base e) log(2.718282) es 1.0
log10(x) logaritmo de x (de base 10) log10(10.0) es 1.0
fabs(x) valor absoluto de x fabs(10) es 10
redondea a x al entero ms pequeo que no sea menor
ceil(x) ceil(9.2) es 10.0
que x.
floor(x) redondea a x al entero ms grande no mayor que x floor(9.2) es 9
pow(x, y) x elevado a la potencia y (xy) pow(2, 3) es 8
sin(x) seno trigonomtrico de x (x en radianes) sin(0.0) es 0.0
cos(x) coseno trigonomtrico de x (x en radianes) cos(0.0) es 1.0
tan(x) tangente trigonomtrica de x (x en radianes) tan(0.0) es 0.0

8. Ejercicios desarrollados.

8.1. Hacer un algoritmo que lea dos nmeros M y N (M < N) y calcule los mltiplos de M
comprendidos entre M y N. Utilice subprogramas.
a. Algoritmo:
Diagrama N-S:
multiplos (m:entero, n:entero)
validar(c:carcter, z:entero) Inicio cont, mult: enteros
Inicio x: entero
mult 1
Escribir Valor de , c, :
cont 1
Leer x mult m x cont
Mientras (x < z) mult <= n
V F
Devolver x
Escribir mult
Fin
cont cont + 1
Mientras (mult <= n)
Principal
Fin
Inicio n, m: enteros

m validar(M)
n validar(N)
multiplos(m,n)

Fin

b. Codificacin en C++:

#include iostream

int validar(char, int);


void multiplos(int, int);
void main();

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -6-


Universidad Nacional de Trujillo Informtica
Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

int validar(char c, int z) {


int x;
do {
cout<<Valor de <<c<<: ;
cin>>x;
}while(x<z);
return x;
}

void multiplos(int m, int n) {


int cont, mult;
cont = 1;
mult = 1;
do {
mult = m * cont;
if (mult <= n) {
cout<<mult;
}
cont = cont + 1;
} while (mult <= n);
}

void main() {
int n, m;
m = validar(M, 0);
n = validar(N, m);
cout<<endl<<Multiplos de M menores a N<<endl;
multiplos(m,n);
}

8.2. Empleando subprogramas, elaborar un algoritmo que permita leer dos nmeros enteros
positivos B y E, y que calcule el resultado de elevar el nmero B al exponente E.
a. Algoritmo:
Diagrama N-S:

potencia(b: entero, e:entero)


validar(c: caracter) Inicio cont, pot: enteros
Inicio x: entero
cont 0
Escribir Valor de , c, : pot 1
Leer x pot pot x b
Mientras (x < 0) cont cont + 1
Devolver x
Mientras (cont < e)
Fin Devolver pot

Fin
Inicio b, e, pot: enteros

Escribir Base (B)


b = validar(B)
Escribir Exponente (E)
e = validar(E)

pot potencia(b, e)
Escribir b, elevado a la, e, es:, potencia
Fin

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -7-


Universidad Nacional de Trujillo Informtica
Ingeniera de Sistemas Subprogramas: Funciones y Procedimientos

b. Codificacin en C++:

#include iostream

int validar(char);
int potencia(int, int);
void main();

int validar(char c) {
int x;
do {
cout<<endl<<Valor de <<c<<: ;
cin>>x;
} while(x < 0);
return x;
}

int potencia(int b, int e) {


int cont, pot;
cont = 0;
pot = 1;
do {
pot = pot * b;
cont = cont + 1;
} while(cont < e);
return pot;
}

void main() {
int b, e, pot;
cout<<endl<<Base (B);
b = validar(B);
cout<<endl<<Exponente (E);
e = validar(E);
pot = potencia(b, e);
cout<<b<< elevado al exponente <<e<< es: <<potencia<<endl<<endl;
}

Ing. Zoraida Yanet Vidal Melgarejo, Mg. -8-

Вам также может понравиться