Funciones Propias con C++ (funciones definidas por el usuario) Jorge A. Martel Torres Programación para ingeniería Jorge A. Martel Torres 1 Introducción • Nace del principio divide y vencerás, que consiste en dividir el problema en pequeños problemas a fin de que se simplifique la complejidad de problema. • La función es un algoritmo que realiza una determinada tarea. • Cualquier tipo de función prototipo en C/C++ se podría considerar un algoritmo (programa) interdependiente. Programación para ingeniería Jorge A. Martel Torres 2 Declaración y definición de las funciones propias • Las funciones se declaran en la cabecera del programa(debajo de los include). Programación para ingeniería Jorge A. Martel Torres 3 Declaración y definición de las funciones propias • Las funciones pueden ser de alcance private (modular) o public (pública). • Existe dos formas de declarar y definir la función: Programación para ingeniería private void fncPresenta() { int agno = 2010; cout << “Presentando” << agno; cout << “Jorge Martel \n”; cout << “Recordando” << endl; } public float fncCalcularArea (x, y, z) x { float A; y A = 2*((x * y) + (x* z) + (y* z)); z return A; } Jorge A. Martel Torres A 4 Formas de declaración y definición #include <librería.h> void fncPresenta() ; void fncSumarVariables(int X, int Y); float fncHipo01(); float fncHipo02(float fa, float fb); main() { instrucciones; } void fncPresenta() { instrucciones de la funcion; } void fncSumarVariables(int X, int Y) { instrucciones de la funcion; } float fncHipo01() { instrucciones de la funcion; } float fncHipo02(float fa, float fb) { instrucciones de la funcion; } Programación para ingeniería #include <librería.h> void fncPresenta() { instrucciones de la funcion; } void fncSumarVariables(int X, int Y) { instrucciones de la funcion; } float fncHipo01() { instrucciones de la funcion; } float fncHipo02(float fa, float fb) { instrucciones de la funcion; } main() { instrucciones; } Jorge A. Martel Torres 5 Tipos de funciones propias Jorge A. Martel Torres Programación para ingeniería Jorge A. Martel Torres 6 Tipos de funciones propias Sin Parametro(s) • Sin retorno o tipo Void: – También conocidos como sub programas. – Si la función es de tipo void, estas solo ejecutan un conjunto de instrucciones. – Las funciones de tipo void pueden tener paràmetros. – Por medio de sus parámetros podrán recoger valores – los parámetros serán las entradas (inputs) de la función. Programación para ingeniería void fncPresenta ( ) { int agno = 2010; cout << “Presentando” << agno; cout << “Jorge Martel \n”; cout << “Recordando” << endl; } Jorge A. Martel Torres Con Parametro(s) void fncSumarVariables (int X, int Y) { int S = 0; x S = X + Y; y cout << S << endl; } 7 Tipos de funciones propias float x = 1; y = 2; z =3; • Con retorno o tipo Tipo dato – También ejecutan un conjunto de instrucciones. – Las TD devuelven UN resultado a quien lo invoque. – Si la función es de TIPO DATO [tipo fundamental (int, float, bool, etc.) o tipo_definido por el usuario], quiere decir que estas si devuelven UN RESULTADO al cumplir su tarea. – Para que la función devuelva el resultado, usa la palabra reservada return. – return permite que la función genere o produzca UNA salida ( output ). Programación para ingeniería float fncCalcularVolumen ( ) { float v; v = x * y * z; return v; } v float fncCalcularArea (int x, int y, int z) { x float A; y A = 2*((x * y) + (x* z) + (y* z)); return A; z } Jorge A. Martel Torres A 8 • Los (input(s)) parámetros – Si la función tiene parámetros, entonces las funciones tienen la capacidad de recoger valores a través de ellos(los parámetros). void fncCalcularVolumen (int x, int y, int z) { y float v; v = x * y * z; z } x • Return (output) – Por medio de return la función devuelve UN resultado a quien lo invocó. Programación para ingeniería float fncCalcularArea (int x, int y, int z) x { float A; y A = 2*((x * y) + (x* z) + (y* z)); return A; z } Jorge A. Martel Torres A 9 Tipos de funciones propias-síntesis Tipo dato Void Sin parámetros Con parámetros void fncNombreFuncionA ( ) { Declaración de variables locales de A instruccion1; ... instruccion2; } void NombreFuncionB ( TD1 v1, TD2 v2 ) { Declaración de variables locales de B instruccion1; ... instruccion2; } TipoDato fncNombreFuncionC ( ) { Declaración de variables locales de C instruccion1; ... instruccion2; return NombreVariable ; TipoDato fncNombreFuncionD ( TD1 v3, TD2 v2 ) { Declaración de variables locales de D instruccion1; ... instruccion2; return NombreVariable ; } } Programación para ingeniería Jorge A. Martel Torres 10 Tipos de funciones propias - ejemplos Tipo dato Void Sin parámetros Con parámetros void fncPresenta ( ) { int agno = 2010; cout << “Presentando” << agno; cout << “Jorge Martel \n”; cout << “Recordando” << endl; } void fncSumarVariables (int X, int Y) { int S = 0; S = X + Y; cout << S << endl; } float fncHipo01 ( ) { float H; H = sqrt ((a*a) + (b*b)); return H; } double fncHipo02 (float fa, float fb) { double HH; HH = sqrt ((fa*fa) + (fb*fb)); return HH; } Programación para ingeniería Jorge A. Martel Torres 11 Invocación a las funciones propias • Las funciones se invocan: – por su nombre y desde cualquier otra función propia o desde la función main(). • Para invocar a las funciones propias, estas previamente deben existir (quiero decir que deben haber estado declarado y construido). • Se invocan considerando el tipo de función propia ya descrita: float fncCalcularArea ( int x, int y, int z ) { float A; A = 2*((x * y) + (x* z) + (y* z)); return A; } x y A z main() { float mv; mv = fncCalcularArea (2, 3, 4); cout << mv; } Programación para ingeniería Jorge A. Martel Torres 12 – void: es suficiente con invocarlos por el nombre de la función para pasar el control. • Ejemplos: – fncPresenta ( ); // invoca void sin parámetros – fncSumarVariables (7, 3); // invoca void con parámetros Programación para ingeniería Jorge A. Martel Torres 13 – Tipo dato: se hace necesario que se use un recipiente. El recipiente puede ser una variable o instrucción: • Una variable: El tipo de dato de la variable debe coincidir con el tipo de dato que devuelva la función. – Ejemplo: » double MS1, MS2; » MS1 = fncHipo01(); » MS1 = fncHipo02(3, 12); » cout << “Resultado de MS1 = ” << MS1 << endl; » cout << “Resultado de MS2 = ” << MS2 << endl; • Una instrucción: puede ser cout, printf, … – Ejemplo: » cout << “Otro Resultado es “ » << (fncHipo01()/3) + (2* fncHipo02(3, 12)) << endl; Programación para ingeniería Jorge A. Martel Torres 14 Ejemplos de invocaciones • • • • • • • • • • • • • • • main() { //invoca funciones de tipo void fncPresenta (); // invoca void sin parámetros fncSumarVariables(7, 3); // invoca void con parámetros cout << “El valor de S = ” << S << endl; //invocando funciones tipo dato MS1 = fncHipo01(); MS1 = fncHipo02(3, 12); cout << “Resultado de MS1 = ” << MS1 << endl; cout << “Resultado de MS2 = ” << MS2 << endl; cout << “Otro Resultado es “ << (fncHipo01()/3) + (2* fncHipo02(3, 12)) << endl; getch(); } Programación para ingeniería Jorge A. Martel Torres 15