Académique Documents
Professionnel Documents
Culture Documents
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:
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>
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.
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.
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
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;
}
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:
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;
}
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.
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
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;
}
}
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);
textbackground(RED);
//lineav(fila inicio, fila final, columna)
lineav(6,15,7);
gotoxy(2,23);
system("PAUSE");
return 0;
}