Escolar Documentos
Profissional Documentos
Cultura Documentos
FUNCIONES
Al llegar a este tema, suponemos que es de nuestro conocimiento del entrenamiento lgico impartido
anteriormente, reconociendo y aplicando correctamente cada estructura de programacin de tal forma
que planteado un problema no tenga dudas en utilizarlas convenientemente, construyendo el algoritmo
que d solucin al problema.
Ahora de lo que se trata es de darle un entono, un ambiente, una forma, un lugar, a cualquier algoritmo
construido; al cual le llamaremos proceso o funcin (en otros lenguajes de programacin existen adems
de las funciones los procedimientos).
Definicin: Una funcin es un proceso que realiza una determinada tarea, por lo tanto tiene un nombre
y es capaz de recibir datos (entradas) y devolver resultados ( salidas ) a travs de variables especiales
que toman el nombre de parmetros e inclusive devolver el resultado de la tarea a travs de su propio
nombre.
En todo lenguaje de programacin ya existen una infinidad de funciones y/o procedimientos
(denominadas biblioteca/librera de funciones) que pueden ser utilizados por el programador. En el caso
de C++ los ms utilizados son los conocidos :
clrscr( ) : Cuya tarea es borrar pantalla.
getch( ) : Cuya tarea es esperar a que el usuario presione cualquier tecla. (en nuestro caso, pausa
para ver resultados).
Imagnese de no existir la funcin clrscr( ), el que limpia pantalla; entonces tendramos que programar
todas las veces que necesitemos borrar pantalla (esto significa doble trabajo). Como esta tarea es de
mucha demanda entonces la implementamos en una funcin y la REUTILIZAMOS cuantas veces sea
necesario (que es el objetivo principal de la creacin de funciones ).
Por lo tanto el programador debe implementar las funciones que no existan en la biblioteca de funciones
que viene con el propio lenguaje de programacin ( o simplemente si dichas funciones NO brindan
resultados que el programador desea )
Cabe mencionar que en C++ solamente existen funciones. Existen bsicamente dos tipos de funciones:
DECLARACION DE FUNCIONES
Ubicacin:
En C++ una de las tantas formas de estructura general de un programa es el siguiente:
66
Como podemos observar las funciones se ubican al final de todo el cuerpo de main.
Donde:
Tipo_de_dato_que_devuelve_la_funcin identifica el valor que la funcin retornar como
resultado a travs de su nombre, se refiere al tipo de dato de la variable que contiene el dato a
devolver (que va acompaada con la sentencia return). Si la funcin no devolviera un resultado
entonces este tipo de dato es void y no ser necesario incluir la sentencia return.
Nombre_de_la_funcin que identifica unvocamente a la funcin y debe empezar con una
letra.
Lista de parmetros son los datos (variables) de Entrada y/o Salida respecto a la funcin.
Ahora cmo diferenciar si un parmetro es una variable de Entrada o Salida ?
Gran dilema para uno que recin se inicia en usar funciones:
Pues la respuesta es muy sencilla: En C++ el parmetro que solamente RECIBE datos se declara
como una variable cualquiera( ejm. int x), en cambio el parmetro que DEVUVELVE resultados
o RECIBE o DEVUELVE a la vez va precedido con el smbolo & ( ejm. int &x )
Tambin se puede utilizar el * (asterisco), pero esto requiere un poco del conocimiento del
concepto de punteros o apuntadores).
En buena cuenta es importante sealar que en cualquier lenguaje de programacin a los
parmetros de Entrada se conocen como parmetros por valor, en cambio los parmetros de
Entrada y/o Salida son llamados como parmetros por referencia
Variable que contiene el dato a devolver que va acompaado con la sentencia return.
Por lo tanto hay dos posibilidades para devolver resultados (parmetros de salida y la
instruccin return)
MSc. Ing. Euler Tito Chura
67
Enunciado: Desarrollar una funcin que reciba un valor que represente cierta cantidad de horas y
devuelva su equivalente en minutos y segundos por separado.
Solucin:
Parmetros de Entrada/Salida:
Entrada: Horas (H) // parmetros por valor (variables de entrada)
Salidas: Minutos, Segundos (M, S) // parmetros por referencia (variables en este caso
slo de salida, por lo tanto irn precedidas por &).
Inplementacin:
void equivalente(float H, float &M, float &S)
{ // inicio de la funcin
M = H*60;
S = H*3600;
} // fin de la funcin
Importante:
Notar que la hora a convertir se recibe (Entrada) a travs de la variable H (parmetro por
valor).
Los resultados se devuelven (Salida) a travs las variables M y S (parmetros por referencia), es
decir su equivalente en minutos y segundos.
Enunciado: Desarrollar una funcin que determine la suma de los N primeros nmeros naturales, es
decir 1+2+3+4+...+N
Solucin:
Parmetros de Entrada/Salida:
Entrada: N // parmetros por valor (variables de entrada)
Salidas: Suma (Suma de los N primeros naturales) // parmetros por referencia
(variables en este caso slo de salida que ir precedida por &).
Inplementacin:
void Sumatoria (int N, int &Suma)
{ // inicio de la funcin
int x; // variable local de la funcin
Suma=0;
MSc. Ing. Euler Tito Chura
68
for (x = 1 ; x <= N; x = x + 1)
{
Suma = Suma + x;
}
} // fin de la funcin
Importante:
N es el parmetro de Entrada (parmetro por valor).
La suma se devuelve a travs del parmetro Suma ( por referencia y va acompaada por &).
....
void main( )
{
........
.........
.........
}
....
int main( )
{
...............
.............
...return( 0 );
}
Por lo tanto para invocar o llamar (requerir los servicios) a una funcin (de tipo void), es de la siguiente
manera:
Nombre_de_la_funcin ( Lista de parmetros );
Observaciones:
1.
2.
3.
4.
5.
69
//funcin principal
void main()
{ // inicio de main
float Minutos, Segundos;
clrscr( ); // borrar pantalla
sumatoria(Numero, SumaTotal);
cout << La suma total es: << SumaTotal << endl;
getch( );
} // fin de main
70
} // fin de la funcin
Observacin:
Todo lo anterior (es decir desde el primer #include ... etc.) se graba como un solo archivo *.cpp y de no
tener errores de sintaxis se ejecutar correctamente.
Enunciado: Implementar una funcin que devuelva el nombre correspondiente a un nmero de mes.
Entradas a la funcin:
nmero de mes ( NumMes )
Salida :
nombre del mes ( NombreMes )
Desarrollo:
char *NombreMes(int NumMes)
{ // inicio de la funcin
switch ( NumMes )
{
case 1 : return Enero;
case 2 : return Febrero;
case 3 : return Marzo;
case 4 : return Abril;
case 5 : return Mayo;
MSc. Ing. Euler Tito Chura
break;
break;
break;
break;
break;
71
break;
break;
break;
break;
break;
break;
break;
}
} // fin de la funcin
Observaciones:
Una funcin cuyo tipo de dato no sea void debe considerarse como un valor siempre; ya que de todas
maneras cuando se ejecute va a devolver un valor a travs de su nombre.
//como asignacin
int NumeroMayor;
cout << endl << Ingrese el primer nmero: ; cin >> Num1;
cout << endl << Ingrese el segundo nmero: ; cin >> Num2;
cout << endl << Ingrese el tercer nmero: ; cin >> Num3;
MSc. Ing. Euler Tito Chura
72
//como resultado
cout << endl << El mayor de los 3 nmeros es: << Mayor(Num1, Num2, Num3) << endl;
getch( ); // pausa para ver resultados
// invocacin a la funcin NombreMes
int mes;
char nombre[ 31]; // para almacenar el nombre del mes, es decir una cadena
clrscr( );
// como asignacin
cout << ingrese nmero de mes: ; cin >> mes;
strcpy(nombre, NombreMes( mes ) ); // asignacin de cadenas
cout << endl << El nombre del mes ingresado es: << nombre << endl;
getch( );
// como resultado
cout << endl << El nombre del mes ingresado es: << NombreMes( mes ) << endl;
getch( );
} // fin de main
break;
break;
break;
break;
break;
73
break;
break;
break;
break;
break;
break;
break;
}
} // fin de la funcin
Ntese que todas las llamadas a las funciones se han hecho desde la funcin principal (main); sin
embargo recuerde que tambin se puede hacer desde el desarrollo de cualquier funcin.
Ahora que ya sabemos ejecutar/invocar/llamar a una funcin, vimos que las funciones propias
implementadas por el programador que utiliza un programa pueden estar en el mismo programa (en un
solo archivo, como en los ejemplos anteriores) pero tambin pueden estar fuera del programa (es decir
en otros archivos) conformando as lo que se denominan Libreras o Bibliotecas (para luego ser
reutilizadas).
Entonces la pregunta es: Qu funciones deben estar en el mismo programa y qu funciones deben estar
en una librera/biblioteca?. La respuesta es que s las funciones van a poder ser utilizadas en otros
programas lo ms lgico y recomendable es que estn en una librera, en cambio si las funciones son
especficas y slo sirven a un programa pueden estar junto a todo el programa.
Cmo se construyen libreras/bibliotecas ?. Veremos en al apartado siguiente (PARTE TRES)
FUNCIONES PROPUESTAS
1.
2.
3.
4.
Funcin de nombre DIGITOS que reciba un nmero entero grande y devuelve el dgito mayor as
como el dgito menor contenido en dicho nmero.
Funcin de nombre SUMATORIA, que reciba un nmero entero y devuelva de los nmeros naturales
desde cero hasta el nmero dado.
Funcin de nombre BINARIO, que devuelva como cadena la representacin binaria de cualquier
nmero entero completado con CEROS a la izquierda, si fuera necesario, para que la cadena tenga
una longitud mltiplo de 8 de acuerdo al nmero recibido.
Funcin de nombre ALEATORIOENTRE, que reciba dos nmeros enteros que representan un rango
y devuelva un valor entero aleatorio comprendido en dicho rango.
74