Vous êtes sur la page 1sur 9

7

Funciones

Hasta ahora, se han visto algunas funciones predefinidas por el lenguaje tales como las funciones printf y scanf. Además
de estas dos funciones, existen muchas otras que pueden ser utilizadas por el programador. Este tipo de funciones
predefinidas se denominan funciones de librería. Sin embargo, el programador puede necesitar definir sus propias
funciones o utilizar funciones implementadas por otros programadores. Estas funciones las denominaremos funciones de
usuario.

En la mayoría de los casos, las funciones requieren información para poder ejecutar la tarea para la cual fueron creadas.
Esta información se pasa a la función utilizando unos identificadores conocidos como parámetros.

Función
Una función se define como un conjunto de sentencias al cual se asigna un nombre y que realiza una tarea específica sobre
unos datos determinados. Algunos ejemplos de tareas que una función concreta puede realizar son los siguientes: leer
desde el teclado un carácter, calcular el factorial de un número, calcular la distancia entre dos puntos del plano, dividir
números complejos, etc.

Las funciones también sirven para facilitar la implementación de los programas ya que permiten descomponer el programa
original en tareas más sencillas. En definitiva, la utilización de las funciones de usuario permitirá construir programas bien
estructurados y, en consecuencia, hacer el código más legible, más fácil de depurar y menos costoso de mantener.
Adicionalmente, otras ventajas del uso de funciones es que permite reducir la extensión del código y facilita su reutilización.
La llamada a una función se puede efectuar desde cualquier parte del programa, ya sea desde el programa principal main
o desde cualquier otra función. Por ejemplo
double raiz;
raiz = sqrt(18.0);

La función sqrt calcula la raíz cuadrada del parámetro real 18.0 y devuelve un resultado que se almacena en la variable raiz.
La función sqrt es una función de la librería math.h.

Crear funciones

Para crear funciones propias, éstas deben definirse en el código. Los pasos para definir una función son:

• Crear una línea en la que se indica


el nombre de la función, el tipo de
datos que devuelve dicha función y los
parámetros que acepta.
• Los parámetros son los datos que
necesita la función para trabajar
Indicar las variables locales a la función
• Indicar las instrucciones de la
función
• Si es preciso, indicar el valor que
devuelve

tipo nombreDeLaFunción(parámetros){
definiciones
instrucciones
}
La primera línea de la sintaxis anterior es lo que se llama el prototipo o signatura de la función. Es la definición formal de la
función.
8

• tipo. Sirve para elegir el tipo de datos que devuelve la función. Toda función puede obtener un resultado. Eso se
realiza mediante la instrucción return. El tipo puede ser: int, char, long, float, double,.... y también void. Éste último se
utiliza si la función no devuelve ningún valor (a estas funciones se las suele llamar procedimientos).
• nombreDeLafunción. El identificador de la función. Debe cumplir las reglas ya comentadas en temas anteriores
correspondientes al nombre de los identificadores.
• parámetros. Su uso es opcional, hay funciones sin parámetros. Los parámetros son una serie de valores que la
función puede requerir para poder ejecutar su trabajo. En realidad es una lista de variables y los tipos de las mismas.
Son variables cuya existencia está ligada a la función
9

Funciones sin paso de parámetros: Son aquellas que no reciben parámetros o valores, ya que éstos se solicitan dentro
de la función, luego se realizan las instrucciones (cálculos u operaciones) y normalmente se imprime el resultado.

Ejemplo 5:

#include <iostream>
#include <stdlib.h>
#include <conio.h>

using namespace std;

void funcion_x( ){
cout <<"Programacion Modular\n\n";
cout <<"Las funciones son importantes\n";
}
int main(){
funcion_x( );
cout <<"y nos ayudan a programar con facilidad\n";
system("PAUSE");
return 0;
}

Ejemplo 6: Haga el programa principal y dos funciones sin paso de parámetros: a) sumar dos números enteros y b)
multiplicar dos números enteros.

using namespace std;


int n1,n2,res;
void sumar(){
res=n1+n2;
cout<<n1<<"+"<<n2<<"="<<res<<endl;
}
void producto(){
res=n1*n2;
cout<<n1<<"*"<<n2<<"="<<res<<endl;
}
int main(){
cout<<"Valor del primer numero "; cin>>n1;
cout<<"Valor del segundo numero "; cin>>n2;
sumar();
producto();
system("PAUSE");
return 0;
}
Funciones con paso de parámetros: Estas funciones son las más utilizadas en la programación ya que pueden recibir uno
o más valores llamados parámetros y regresan un solo valor de tipo entero, real o carácter. Los parámetros o valores son
enviados del programa principal o de otra función. Dentro de la función se realizan solamente las instrucciones (cálculos u
operaciones). Es importante revisar que el tipo de dato que regresará la función sea del mismo tipo que el valor declarado
en el encabezado de la misma.

Parámetros de una función: También son llamados argumentos y se corresponden con una serie de valores que se
especifican en la llamada a la función, o en la declaración de la misma, de los que depende el resultado de la función; dichos
valores nos permiten la comunicación entre dos funciones
10

Ejemplo 7: Crear un programa para calcular el precio de un producto basándose en el precio base del mismo y el impuesto
aplicable

//declaración
float precio(float base, float impuesto);
int main(){
float importe = 2.5;
float tasa = 0.07;
float valor= precio(importe, tasa)
cout<<"El precio a pagar es: $\n"<<valor<<endl;
system("PAUSE");
return 0;
}

//definición
float precio(float base, float impuesto) {
float calculo;
calculo = base + (base * impuesto);
return calculo;
}

El ejemplo anterior se compone de dos funciones, la función requerida main y la función creada por el usuario precio, que
calcula el precio de un producto tomando como parámetros su precio base y el impuesto aplicable. La función precio calcula
el precio de un producto sumándole el impuesto correspondiente al precio base y devuelve el valor calculado mediante la
sentencia return.

Una función en C++ sólo puede devolver un valor. Para devolver dicho valor, se utiliza la palabra reservada return cuya
sintaxis es la siguiente:
return <expresión>;
Donde <expresión> puede ser cualquier tipo de dato salvo un array o una función. Además, el valor de la expresión debe
coincidir con el tipo de dato declarado en el prototipo de la función.

Ejemplo 7: Realizar un programa calcula el cubo de los números del 1 al 5 utilizando una función definida por el usuario.

int cubo(int base);


int main(){
int i;
for(i=1; i<=5; i++){
cout<<"El cubo del número "<< i <<" es "<< cubo(i) <<endl;
}
system("PAUSE");
return 0;
}
int cubo(int base){
int potencia;
potencia = pow(base,3);// * base * base;
return potencia;
}

Paso de Parámetros
Las funciones pueden recibir datos como lo hemos observado, pero existen dos formas de enviar los datos hacia una
función por valor y por referencia, las cuales modifican en diferente forma el comportamiento del programa.

Por Valor: El paso por valor envía una copia de los parámetros a la función por lo tanto los cambios que se hagan en ella no
son tomados en cuenta dentro de la función main()
11

void sumar_valor(int numero); /* prototipo de la función */

int main(void){
int numero = 57; /* definimos numero con valor de 57*/
sumar_valor(numero); /* enviamos numero a la función */
cout<<"Valor de numero dentro de main() es " <<numero <<endl;
/* podemos notar que el valor de numero se modifica
* sólo dentro de la función sumar_valor pero en la principal
* número sigue valiendo 57 */
system("PAUSE");
return 0;
}

void sumar_valor(int numero){


numero++; /* le sumamos 1 al numero */
/* el valor de número recibido se aumenta en 1
* y se modifica dentro de la función sumar_valor() */
cout<<"Valor de numero dentro sumar_valor() es: "<< numero <<endl;
}
Ejemplo
float factorial(int num){
int i;
float f=1.0;
for(i=num; i>1; i--)
f = f*i;
return (f);
}
La función factorial recibe como parámetro un valor de tipo entero que almacena en el parámetro formal num y retorna un
valor de tipo float correspondiente al factorial de num. El cuerpo de la función está formado por la sentencia for, que calcula
el factorial de num y lo almacena en la variable local f. La sentencia return retorna el valor de f. Las variables locales i y f de
la función factorial, al igual que el parámetro formal num, se mantienen vivos mientras se ejecuta la función. Una vez
finalizada la ejecución de la función, estas variables y el parámetro desaparecen, y ya no se pueden manipular.

Por Referencia: El paso por referencia se hace utilizando apuntadores. Se envía la dirección de memoria de la variable, por
lo tanto los cambios que haga la función si afectan el valor de la variable. Ejemplo:

void sumar_referencia(int *numero); /* prototipo de la función */

int main(void){
int numero = 57; /* definimos numero con valor de 57*/
sumar_referencia(&numero); /* enviamos numero a la función */
cout<<"\nValor de numero dentro de main() es: " << numero <<endl;
/* podemos notar que el valor de numero se modifica
* y que ahora dentro de main() también se ha modificado
* aunque la función no haya retornado ningún valor. */
system("PAUSE");
return 0;
}

void sumar_referencia(int *numero){


*numero += 1; /* le sumamos 1 al numero */
/* el valor de numero recibido se aumenta en 1
* y se modifica dentro de la función */
cout<<"\nValor de numero dentro sumar_referencia() es: " << *numero;
}
12

Prototipo de una función


En la estructura de un programa, las definiciones de funciones de usuario pueden ir antes o después del main. En nuestro
caso se escribirán siempre después del main y se utilizarán prototipos de funciones para informar al compilador de la
existencia de éstas.
En concreto, los prototipos de las funciones sirven para indicar al compilador la cantidad de parámetros formales, el tipo
de dato de cada parámetro formal y el tipo del resultado de la función. De esta forma, el compilador puede comprobar si la
función es llamada correctamente dentro del programa, sin conocer la definición completa de esta. El prototipo de una
función contiene únicamente la cabecera de la función y el carácter punto y coma. En la estructura del programa, los
prototipos de las funciones se colocan justo antes del main y después de la definición de los tipos de datos

La sintaxis general del prototipo de una función es la siguiente:

tipo_result nombre_función(tipo1 pformal1,…, tipon pformaln);

donde el tipo_result, el nombre_función y la lista de parámetros (tipo1 pformal1, ..., tipon pformaln) son los mismos que
los indicados en la definición de la función.

Ejemplos:
A continuación, se muestran algunos ejemplos de prototipos de funciones y, para cada uno de ellos, se describe
brevemente lo que realiza la función.

void mostrar_tablas();
Esta función muestra en pantalla las tablas de multiplicar desde la tabla del 2 hasta la tabla del 10. La función
mostrar_tablas no tiene parámetros formales y no devuelve ningún resultado.

float factorial(int num);


Esta función recibe como parámetro un valor de tipo entero, que almacena en el parámetro formal num, y retorna el valor
real correspondiente al factorial de num.

char mayuscula(char c);


Esta función recibe como parámetro un carácter, que almacena en el parámetro formal c, y retorna el carácter
correspondiente al carácter almacenado en c en letra mayúscula.

double vol_cili (float r, float h);


Esta función recibe dos valores reales, que almacena en los parámetros formales r y h, que representan, respectivamente,
el radio (r) y la altura (h) de un cilindro. La función vol_cili retorna el valor real correspondiente al volumen del cilindro para
los parámetros recibidos.

La siguiente tabla muestra el prototipo y la llamada de cada una de las funciones anteriores, e indica en cada caso el tipo
de función que representa: función con parámetros, función sin parámetros, función que no retorna valor o función que
retorna valor.
13

Tipo de Función Prototipo de la función Llamada a la función


No retorna valor y no void mostrar_tablas(); int main(){
tiene parámetros mostrar_tablas();
return 0;
}
Retorna valor y tiene float factorial(int num); int main(){
parámetros int n=5;
float fac;
f ac= factorial(n);
return 0;
}
Retorna valor char mayuscula(char c); int main() {
y tiene parámetro char may,min='e';
may =
mayuscula(min);
return 0;
}
Retorna valor double vol_cili(float r, float h); int main(){
y tiene parámetros float r=3.4, h=5.3;
double vol;
vol = vol_cili(r,h);
return 0;
}

Obsérvese que en la tabla en la llamada a la función (v. tercera columna):


− En las funciones que retornan un resultado, este se asigna a una variable del mismo tipo que el que retorna la función.
− Las variables que aparecen en las expresiones de los parámetros reales han de estar inicializadas antes de realizar la
llamada a la función.

Ejercicios
1. Realizar una función que reciba dos parámetros de tipo entero y retorne el mayor de ellos
2. Realizar una función que retorne el valor absoluto de un número enviado como parámetro
3. Desarrollar una función que determine si el número enviado es par o impar. Debe retornar 1 si es par, 0 si es impar.
4. Desarrollar una función que reciba 3 valores como parámetros y retorne el promedio de los números enviados.
5. Escribir una función llamada "cantidad" que reciba como argumento un número entero y un string y que luego diga si
el string tiene la misma cantidad de letras que el número entero ingresado. Escribir un programa que pruebe la función.
6. Desarrollar un programa en c que permita obtener el perímetro y área de una figura de 4 lados y diga si es un cuadrado
o un rectángulo. Esto mediante funciones.
7. Escribir una función llamada "edades" que reciba 2 edades y decir cuál de ellas es la mayor y cuanto le falta a la menor
para llegar a la edad mayor.
14

/////////////////////////////////////////////////////////////////////////////
//Se debe guardar este archivo con el nombre de varios.h

#include <string.h>
using namespace std;
void cuadro(int col1,int fil1,int col2,int fil2,int color){
int i;
textcolor(color);
gotoxy(col1,fil1);cout<<(char)201;//╔
gotoxy(col2,fil1);cout<<(char)187;//╗
gotoxy(col1,fil2);cout<<(char)200;//╚
gotoxy(col2,fil2);cout<<(char)188;// ╝

for(i=col1+1;i<col2;i++) {
gotoxy(i,fil1);cout<<(char)205;//═
gotoxy(i,fil2);cout<<(char)205;
}
for(i=fil1+1;i<fil2;i++){
gotoxy(col1,i);cout<<(char)186;// ║
gotoxy(col2,i);cout<<(char)186;
}
}

void centrar(char titulo[80],char fila){


char col;
col=strlen(titulo);
col=(80-col)/2;
gotoxy(col,fila);cout<<titulo;
}

void letrero(int c, int f, char cad[80],int ct,int cf){


textcolor(ct);
textbackground(cf);
gotoxy(c,f);cout<<cad;
}

void lineav(int x_ini,int x_fin,int col){


int x;
for( x=x_ini;x<=x_fin;x++)
{
gotoxy(col,x);

cout<<(char)186;
}
}
15

////////////////////////////////////////////////////////////////
//Se crea un nuevo proyecto
#include <iostream>
#include <stdlib.h>
#include <conio.h>
//se incluye la librería creada anteriormente
#include <C:\carpeta\varios.h>
int main(){
textbackground(RED);
textcolor(WHITE);
clrscr();
//col1,fil1,col2,fil2,color
cuadro(1,1,80,24,15);
cuadro(20,9,60,20,7);

//texto, fila
centrar("Titulo Centrado",10);

//letrero (col,fil,texto,col texto, col fondo)


letrero(5,5,"Prueba de linea vertical",14,1);

textbackground(RED);
//lineav(fila inicio, fila final, columna)
lineav(6,15,7);
gotoxy(2,23);

system("PAUSE");
return 0;
}

Vous aimerez peut-être aussi