Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FUNCIONES
Las funciones son un conjunto de instrucciones que realizan una tarea especfica. Son
bsicas en el desarrollo de un programa cuyo tamao sea considerable, puesto que permiten
dividir el cdigo en fragmentos pequeos que realicen una accin en especfico, facilitando
su comprensin y la correccin de errores. A estas divisiones de cdigo tambin se les
conoce como mdulos o subprogramas. El cdigo de las funciones se pueden escribir dentro
de la funcin main() o fuera de ella.
Una vez que tenemos escrita una funcin es necesario ejecutarla. Comnmente se dice
llamar a la funcin y para llamarla se puede hacer desde la funcin principal main() o
desde cualquier otra funcin del programa.
Al igual que con las variables, las funciones pueden declararse y definirse. Una declaracin
es simplemente una presentacin, una definicin contiene las instrucciones con las que
realizar su trabajo la funcin.
Funciones 2013
2. Prototipos de funcin
Un prototipo es una declaracin de una funcin. Consiste en una definicin de la funcin sin
cuerpo y terminado con un ";". La estructura de un prototipo es:
<tipo> func(<lista de declaracin de parmetros>);
Por ejemplo: int Mayor(int a, int b);
Los prototipos sirven para indicar al compilador los tipos de retorno y los tipos de los
parmetros de una funcin, de modo que compruebe si son del tipo correcto cada vez que se
use esta funcin dentro del programa, o para hacer las conversiones de tipo cuando sea
necesario. Los nombres de los parmetros son opcionales, y se incluyen como
documentacin y ayuda en la interpretacin y comprensin del programa. El ejemplo de
prototipo anterior sera igualmente vlido y se podra poner como: int Mayor(int,int);
Funciones 2013
Esto slo indica que en algn lugar del programa se definir una funcin "Mayor" que admite
dos parmetros de tipo "int" y que devolver un valor de tipo "int". No es necesario escribir
nombres para los parmetros, ya que el prototipo no los usa. En otro lugar del programa
habr una definicin completa de la funcin.
Normalmente, las funciones se declaran como prototipos dentro del programa, o se incluyen
estos prototipos desde un archivo externo, (usando la directiva "#include").
La definicin de la funcin se hace ms adelante, lo habitual es hacerlo despus de la
funcin "main".
Forma de llamarla
nombre_funcin( );
resultado = nombre_funcin( );
nombre_funcin(valor1, valor2, ... );
resultado = nombre_funcin(valor1, valor2, ... );
Al llamar a una funcin se puede hacer la llamada por valor o por referencia. Cuando
pasamos parmetros por valor a una funcin, sta realiza una copia de los valores de
stos en una zona de la memoria, con lo cual la funcin trabaja con estas copias de los
valores y no hay peligro de que se modifique la variable original con la que llamamos a la
funcin.
NOTA: El caso de paso de valores por referencia ser analizado en el siguiente curso de
programacin.
Funciones 2013
Estatuto return
La devolucin se realiza mediante el estatuto return, que adems de devolver un valor hace
que la ejecucin del programa vuelva al cdigo que llamo a esa funcin. En este tipo de
funciones siempre se debe indicar el tipo de valor que se va a devolver poniendo delante del
nombre de la funcin el tipo de dato. En este caso la funcin es como si fuera una variable,
pues toda ella equivale al valor que devuelve.
#include <stdio.h>
int suma(void);
void main(void){
int total;
printf(Suma valores \n);
total = suma( );
printf(\n %d,total);
}
Funciones 2013
int suma(void){
int a, b, total_dev;
printf(Dame los valores:);
scanf(%d%d,&a,&b);
total_dev = a + b;
return total_dev;
}
5. Paso de parmetros
Las palabras parmetro y argumento, aunque de significado similar, tiene distintas
connotaciones semnticas: Se denominan parmetros los tipos declarados en el prototipo de
la funcin y se le llama argumentos a los "valores" que se pasan de una funcin a otra.
Aunque por lo general siempre les llamamos igual.
Funciones 2013
Funciones 2013
FUNCIONES Y PASO DE PARAMETROS (Resumen)
Las palabras parmetro y argumento, aunque de significado similar, tiene distintas
connotaciones semnticas: Se denominan parmetros los tipos declarados en el prototipo de
la funcin y se le llama argumentos a los "valores" que se pasan de una funcin a otra.
Aunque por lo general siempre les llamamos igual
Una vez que entendimos que es un parmetro o argumento (le puedes decir como quieras)
vamos a enfocarnos a ver como se manejan las funciones y el paso de valores (parmetros)
en el lenguaje ANSI C.
Funciones
Una funcin es una pequea parte de cdigo que se encarga de realizar una sola tarea, de
tal forma que nuestro programa puede estar formado por cualquier nmero de funciones,
donde cada una hace algo distinto, y todas en conjunto se encargan de resolver un
problema.
Por ejemplo, el cuerpo humano tiene distintas partes, cada una se encarga de una actividad
diferente (ojos, corazn, boca, odos, etc.) pero si juntamos cada parte, logramos que una
persona pueda vivir. As pasa con un programa: cada funcin hace algo y todas logran un
resultado.
tipo_devuelto
Si el tipo_devuelto es void, se considera que la funcin no devuelve ningn valor, por lo
tanto, no debe escribirse la palabra return.
Si el tipo_devuelto es cualquiera de los siguientes:
char
float
struct
short
int
long
unsigned
double
union
enum
auto
extern
static
register
Entonces se debe escribir la palabra return junto con el valor que se desea retornar.
! Recuerda: si vas a devolver un valor, ste debe ser del mismo tipo de dato que la
funcin va a devolver (tipo_devuelto).
nombre_funcin
El nombre de la funcin debe ser de acuerdo a lo que esa parte de cdigo va a realizar, as
que es importante que no inventes nombres y que escribas el nombre lo ms parecido
posible a lo que esa funcin hace. El nombre siempre debe comenzar con una letra
minscula y si est formado por dos o ms palabras, la segunda palabra y debe comenzar
con una letra mayscula. Por ejemplo:
Funciones 2013
captura
//nombre sencillo y comienza con minscula
mostrarDatos
//nombre compuesto y comienza con minscula y luego mayscula
calcularSueldoNeto //nombre compuesto y comienza con minscula y luego mayscula
(parmetros_cada_uno_con_su_tipo_de_dato)
Los parmetros son los nombres de las variables que la funcin va a recibir para trabajar con
ellos. Ms adelante veremos que los parmetros se pueden recibir por valor o referencia. !
Recuerda: cada parmetro debe ir junto con su tipo de dato.
void nombre_funcion( ){
// cdigo de la funcin
}
Ejemplo:
tipo_devuelto nombre_funcion( ){
// cdigo de la funcin
return valor;
}
Ejemplo:
void captura( ){
int id;
printf(Dame tu id);
scanf(%d,&id);
}
int captura( ){
int id;
printf(Dame tu id);
scanf(%d,&id);
return id;
}
Para llamar a este tipo de funcin:
void main( ){
captura( );
}
void main( ){
int res;
res = captura( );
}
Funciones 2013
SI recibe
valores
parmetros
TIPOS DE FUNCIONES
NO retorna SI recibe
valores
// cdigo de la funcin
}
parmetros
SI
retorna
// cdigo de la funcin
return valor;
Ejemplo:
}
Ejemplo:
float prom;
prom = (calif1 + calif2) / 2;
return prom;
//prom es del mismo tipo que devuelve la funcin
}
Para llamar a este tipo de funcin:
void main( ){
float calif1 = 8.5, calif2 = 9.4, res;
res = calcularPromedio(calif1, calif2);
}
Paso de parmetros
Los parmetros se pasan normalmente por valor, pero tambin se pueden pasar por
referencia. El paso de parmetros por referencia admite dos tipos de sintaxis: escribiendo el
operador & antes del nombre del parmetro y otro caso es escribiendo el operador *
(asterisco) antes del nombre del parmetro (esto lo analizaremos cuando veamos
apuntadores).
Paso de parmetros es por valor:
int funcion1 (int x, int y)
Esto quiere decir que la funcin1 recibir nicamente el valor de los dos parmetros, x e y.
Podr utilizar esos valores dentro de su cdigo, e incluso podr cambiarlos. Pero cualquier
cambio en x e y no afectar a los parmetros actuales, es decir, a los parmetros del
programa que llam a funcin1.
Llamada a la funcin:
resultado = funcion1 ( x, y);
Funciones 2013
FORMA DE RECIBIRLO
Por valor:
mostrar(id, prom, gpo);
Por referencia:
mostrar(&id,
&gpo);
&prom,
10
Funciones 2013
El siguiente ejemplo ilustra la manera en que se realiza el paso de parmetros en C++:
#include <iostream>
using namespace std;
void cambio( int , int * , int &); /* El primer argumento ser pasado por
valor, el siguiente por referencia y el ltimo por referencia de alias */
int main()
{
int A = 5, B = 7, C = 10; // A vale 5, B vale 7 y C vale 10
cout << "valores antes de la llamada \n"
<< "A = "<< A <<" B = "<< B << " C = "<< C << endl;
/* A es pasada por valor, mientras que B y C se van por referencia */
cambio( A, &B, C ); /* despus de la llamada a cambio, A sigue
valiendo 5, B vale 9 y C vale 32 */
cout << "valores despus de la llamada \n"
<< "A = "<< A <<" B = "<< B << " C = " << C << endl;
}
/* valor copia nicamente el valor de la variable A, mientras que ref recibe la direccin de B,
y la variable C es recibida como referencia de "sobrenombre o alias" en alias */
void cambio( int val, int *ref, int &alias )
{
val += 7; // val <-parmetro por valor
(*ref) += 3; // ref <-parmetro por referencia
alias += val + (*ref)--; //alias <-parmetro por referencia alias
}
valores antes de la llamada
A=5 B=7
C = 20
valores despus de la llamada
A=5 B=9
C = 32
Direcciones y valores de las variables en la funcin main antes de la llamada a cambio()
Valores en la funcin cambio() antes de finalizar su ejecucin, es decir las variables locales a
cambio(). La variable val recibe el valor de A (5) y se suma 7, se crea un puntero ref que
apunta a la direccin de B (7) e indirectamente le agrega 3 y se le resta 1. Finalmente la
variable alias que en esencia se trata de la misma variable C, note como se tiene la misma
direccin de memoria que C, o sea que se trata de la misma variable, no se cre ninguna
variable local en la funcin cambio(), solo se recibe la referencia directa de la misma
variable.
11
Funciones 2013
Los valores en la funcin main despus de la llamada a cambio() note como A nunca cambio
su valor, mientras que las otras dos s.
12
Funciones 2013
Ejemplo:
#include <stdio.h>
13
Funciones 2013
4- pasan
5- seis,
6- parmetros
Se ha dicho que argv es un puntero a matriz de punteros, y en el ejemplo hemos utilizado la
expresin argv[i], algo que a primera vista puede chocar, ya que argv no es una matriz. En
realidad la declaracin completa: char* argv[] significa puntero-a-matriz-de-caracteres, para
distinguirlo de char* argv que sera simplemente puntero-a-carcter.
Los argumentos anteriores son recogidos por el sistema en forma de sendas variables
globales _argc y _argv definidas en la cabecera <dos.h>. A continuacin se expone una
variacin del programa anterior que utiliza estas variables:
#include <iostream>
using namespace std;
#include <dos.h>
// necesario para _argc y argv
int main (int argc, char* argv[]) {
cout << "Se han pasado " << _argc << " argumentos:" << endl;
for (int i = 0; i < _argc; ++i)
cout << " " << i << "- " << _argv[i] << endl;
return 0;
} //La salida es la misma que en el caso anterior.
Restricciones
La funcin main adolece de ciertas limitaciones que la diferencian del resto de funciones
C++:
No puede ser invocada explcitamente a lo largo del programa, es invocada de forma
automtica por el mdulo de inicio
No puede obtenerse su direccin, por lo tanto no pueden declararse punteros a ella:
int (* pmain)() = &main; // Error!!
No puede ser sobrecargada
No puede ser declarada como inline
main debe estar en el espacio global de una de las unidades de compilacin del
programa, lo que significa que no puede pertenecer a una clase.
14