Beruflich Dokumente
Kultur Dokumente
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.
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.
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_n
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.
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.
void sumar();
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.
void main() {
<Instrucciones>
sumar();
}
4. Parmetros de un subprograma.
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);
}
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.
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;
}
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.
La implementacin de la funcin:
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.
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.
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).
La implementacin de la funcin:
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).
7. Funciones predefinidas.
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
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:
Fin
Inicio b, e, pot: enteros
pot potencia(b, e)
Escribir b, elevado a la, e, es:, potencia
Fin
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;
}
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;
}