Documentos de Académico
Documentos de Profesional
Documentos de Cultura
n
Pruebas = m + n
Pruebas = m*n
en lugar de todo el
No afecta al modulo
Afecta al modulo
UNI-FIIS L. P. ESTRUCTURADO
G. A. Salinas A.
FUNCIONES
Pag.
1 de 7
2. SUBPROGRAMAS.
Muchos problemas reales que se plantean tienen cierta complejidad y a veces son de gran tamao. Lo mas
adecuado es descomponer el problema en partes cuya solucin sea mas fcil y sencilla. La programacin de
cada una de estas partes se realiza independientemente de las otras, a veces por diferentes personas.
El DISEO DESCENDENTE o diseo TOP DOWN consiste en una serie de descomposiciones sucesivas del
problema inicial, que reciben el refinamiento progresivo de tal manera que cada parte sea suficientemente
reducida y sencilla para su DESARROLLO y MANTENIMIENTO.
La utilizacin de esta tcnica de diseo tiene los objetivos siguientes:
Simplificacin del problema y de los subprogramas resultantes de cada descomposicin
Las diferentes partes del problema pueden ser programadas de modo independiente e incluso por diferentes
personas.
El programa principal queda estructurado en forma de bloques o mdulos lo que hace sencilla su
mantenimiento y su lectura.
El subprograma recibe valores del subprograma que lo referencia, hace los clculos y los devuelve o retorna
los resultados al subprograma que lo llam
Para utilizacin de esta tcnica requiere el conocimiento y la aplicacin de los siguientes conceptos.
2.1 Definicin
Un subprograma es un modulo que ejecuta un algoritmo completo e independiente y que es utilizado a
travs de una instruccin de referenciado o llamada desde el Programa Principal (generalmente) o
desde cualquier otro Subprograma. Vase figura.
Subprograma: abstraccin de una unidad de programa representada por una unidad de ejecucin ms
simple. Los detalles irrelevantes se ocultan al usuario de la abstraccin
2.2 Programa Principal y Subprogramas
Con esta tcnica el programa quedar constituido por un Programa Principal y Subprogramas.
Programa Principal. Describe la solucin completa y consta principalmente de llamadas a
subprogramas. Estas llamadas son indicaciones al procesador de que debe continuar la ejecucin
del programa en el subprograma llamado (sede el control al subprograma), retornando al punto de
partida una vez que haya concluido. (Vase figura)
El programa principal puede contener adems, variables, instrucciones y estructuras de control.
Un programa principal tendr pocas lneas y en l se vern claramente lo que hace el programa en
diferentes pasos que ha de seguir para obtener los resultados deseados.
Solo son
llamadas los
subprogramas
referenciados
ACCION PPrincipal( )
...
...
f1( )
...
...
...
...
...
fn( )
...
...
FIN_ACCION
UNI-FIIS L. P. ESTRUCTURADO
G. A. Salinas A.
ACCION fl ( )
...
...
...
f12( )
...
...
...
FIN_ACCION
ACCION f12( )
...
...
...
FIN ACCION
ACCION f2( )
...
...
...
FIN_ACCION
ACCION fn1( )
...
...
...
FIN ACCION
ACCION fn ( )
...
fn1( )
...
FIN_ACCION
FUNCIONES
Son llamados o
referenciados desde
un Subprograma
Pag.
2 de 7
En C
Tipo_Retorno Nombre_Funcin (Lista de parmetros)
{
// Cuerpo de la funcin
}
Diagrama de Flujo
Nombre
Inicio
Inicio
...
Nombre
...
...
Fin
Fin
UNI-FIIS L. P. ESTRUCTURADO
G. A. Salinas A.
FUNCIONES
Pag.
3 de 7
Variables Locales. Son variables cuyo mbito est restringido slo al lugar donde fueron
declarados, por ejemplo las variables declaradas en una funcin o subprograma solo son validos
para ese subprograma fuera de l son desconocidos y su valor es indefinido.
Variables Globales. Son variables cuyo mbito se extiende al programa principal y a todos los
subprogramas. En C, C++ se declara antes del programa principal.
2.6 Parmetros (Variables de Enlace)
De acuerdo a los conceptos ya vistos, todos los programas utilizan datos entrada luego de procesarlos
producen resultados o datos de salida.
Los subprogramas tambin pueden realizar operaciones de entrada salida con los dispositivos estndar,
pero por lo general los datos de entrada provienen del programa llamante y los resultados o datos salida
son enviados al programa llamante, para realizar estas operaciones se utilizan parmetros, cada ves que
es llamado un subprograma los datos de entrada le son pasados por medio de variables denominados
parmetros de entrada y los resultados le son devueltos mediante las mismas u otras variables.
Parmetros Actuales o Reales. Son variables o datos enviados en cada llamada al subprograma
por el programa o subprograma llamante. Los parmetros actuales o reales pueden variar en cada
llamada.
Parmetros Formales. Son variables locales de un subprograma utilizados para el envi y la
recepcin de los datos. Los parmetros formales son siempre fijos para cada subprograma. Los
parmetros formales se comportan como variables locales, con la particularidad de que cada
llamada al subprograma se identifican con los parmetros actuales
En cualquier caso, debe haber una correspondencia entre los parmetros actuales y formales en
NUMERO, TIPO de DATO y la POSICIN que ocupan en la lista de parmetros. Osea que deben
cumplir las siguientes reglas:
El nmero de parmetros formales debe coincidir con el de parmetros reales.
El i-simo parmetro real se corresponde con el i-simo formal.
El tipo de dato del i-simo parmetro real debe ser igual que el del i-simo formal.
Los parmetros de un subalgoritmo pueden ser de cualquier tipo.
Los nombres de un parmetro formal y su correspondiente real pueden o noser diferentes.
2.7 Paso de Parmetros
El proceso de envi y recepcin de datos y de resultados mediante variables se denomina pase de
parmetros. El pase de parmetros puede realizar de dos manera, pase por valor y por referencia:
Pase por Valor (Parmetros de ENTRADA). Es la manera de suministrar datos de entrada al
subprograma. Un parmetro actual pasado por valor contiene el dato de entrada para el
subprograma, esta variable no puede ser modificada por el subprograma que copia su valor al
parmetro formal correspondiente para poder utilizarlo. Desde el punto fsico, en el paso por valor
no se proporciona la variable al programa, sino solamente su contenido, evitando as su
modificacin.
Pase por Referencia (Parmetros de Entrada y Salida o Parmetros de Salida). Es la manera de
suministrar datos de salida o de entrada y salida al subprograma. Un parmetro actual pasado
por referencia es una variable del programa o subprograma llamante, que PUEDE CONTENER o
NO datos para el subprograma llamado quien debe colocar el resultado en esa variable. Dicha
variable queda a disposicin del programa llamante una vez concluida la ejecucin del
subprograma.. Desde el punto fsico, en el paso por referencia se proporciona la direccin o
referencia de la variable, por lo que el programa lo utiliza como propia, modificndolo si es
necesario para depositar en ella los resultados.
Ventajas y Desventajas
Pase por:
VALOR
REFERENCIA
UNI-FIIS L. P. ESTRUCTURADO
VENTAJAS
Parmetros: Constantes y expresiones
Evita efectos laterales
Asla
Uso de Memoria Eficiente
G. A. Salinas A.
FUNCIONES
DESVENTAJAS
Uso de Memoria Ineficiente
Parmetros: Solo Variables
Efectos Laterales
Pag.
4 de 7
2.8 Subprogramas
Se conocen tres tipos, funciones, procedimientos y predicados. Es un conjunto de instrucciones que se
pueden llamar desde cualquier parte del un programa. Un subprograma no se puede declarar dentro de
una funcin, esto es, no se puede anidar. Formato:
La instruccin RETORNAR( ) termina la ejecucin del subprograma, retornando el control al programa
o subprograma que lo llam o referenci. Se muestra una correspondencia con el lenguaje C.
ACCION NombreFunc (Lista de parmetros)
//Declaracin de variables
//Cuerpo de la funcin
RETORNAR(Expresion)
FIN_ACCION
2.9 Recursividad.
Consiste en permitir que un subprograma se llame a si mismo para resolver una versin reducida del problema
original. La recursividad es una tcnica de programacin que se puede utilizar en lugar de la iteracin para
resolver determinados tipos de problemas.
Ejemplo 1. Ordenar 3 nmeros enteros
ACCION Principal ( )
VARIABLES:
REAL Num1, Num2, Num3, Temp.
Leer(Num1)
Leer(Num2)
Leer(Num3)
SI(Num1>Num2)
temp=Num1
Num1=Num2
Num2=Temp.
FIN_SI
SI(Num1>Num3)
temp=Num1
Num1=Num3
Num3=temp
FIN_SI
SI(Num2>Num3)
temp=Num2
Num1=Num3
Num3=Temp.
FIN_SI
Escribir(Num1,Num2,Num3)
FIN_ACCION
UNI-FIIS L. P. ESTRUCTURADO
G. A. Salinas A.
FUNCIONES
Pag.
5 de 7
#incluede <...>
int main( )
{
int Num1, Num2, Num3, Temp;
scanf(%d%d%d, &Num1, &Num2, &Num3);
Ordenar(Num1, Num2);
Ordenar(Num1, Num3);
Ordenar(Num2, Num3);
printf(%d%d%d, Num1, Num2, Num3);
}
int Ordenar (int *x, int *y)
{
int Aux;
if(x > y)
{
Aux *x ;
*x *y;
*y Aux;
}
}
Ejemplo 2 . Hallar el rea triangulo
Prototipos de Funcin
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main( )
{
float Base, H, Area;
LeerDatos(&Base, &H);
Area = CalcularArea(Base, H);
Mostrar(Area);
cout << "\n\n";
system("pause");
return(0);
}
void LeerDatos(float *B, float *H)
{
Implementacin de la Funcin
float Base, Altura;
cout <<"*** AREA DEL TRIANGULO ***\n\n";
cout <<"Ingrese la base ---> ";
cin >>Base;
Actualizando variables de salida
cout <<"Ingrese Altura ---> ";
cin >>Altura;
*B = Base;
*H = Altura;
}
Retorno de variable
float CalcularArea(float Vb, float Vh)
{
float Area;
Area = (Vb*Vh)/2;
return(Area);
}
void Mostrar(float Va)
{
printf("Area = %6.2f", Va);
}
UNI-FIIS L. P. ESTRUCTURADO
G. A. Salinas A.
FUNCIONES
Pag.
Variables de Salida
Variables de Entrada
Variables de Entrada
6 de 7
UNI-FIIS L. P. ESTRUCTURADO
G. A. Salinas A.
FUNCIONES
Pag.
7 de 7