miércoles, 16 de enero de 2019

Funciones de usuario

Una función de usuario, así como las funciones propias del lenguaje C++, son rutinas con parámetros establecidos, esta vez por el programador, que nos permiten realizar acciones y pueden o no devolver el resultado de esa acción. El valor que devuelve puede ser de tipo carácter, entero o flotante.

Estructura de una función de usuario

Declaración:

Tipo Nombre(Argumentos);

Nota: La declaración debe hacerse antes de la función principal main. Se debe especificar el tipo de cada argumento y una coma entre cada argumento.

Elaboración de la función

Tipo Nombre(Argumentos)
{
   Acciones.
  Operaciones.
  etc.
}

El tipo de la función nos indica que tipo de valor retornará
.
Nota: Se debe especificar el tipo de cada argumento y una coma entre cada argumento.

Llamando la función de usuario desde la función principal

int main()
{
  Nombre(valores o variables que se asignará a cada argumento);
}

Nota: En los argumentos se coloca el valor de cada uno, respetando la tipología con la que se declararon.

Ejemplo

#include <cstdlib>
#include <iostream>

using namespace std;
int suma(int a,int b);    //Declaración de función
int main()
{
    int x,y,R;
    cout<<"Suma de dos numeros enteros"<<endl;
    cout<<"Dame el valor de los numeros a sumar"<<endl;
    cout<<"x= ";cin>>x;
    cout<<"y= ";cin>>y;
    R=suma(x,y);           //Llamado de la función
    cout<<"Resultado: "<<R<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
int suma(int a,int b)     //Estructura de la función
{
    int suma;
    suma=a+b;
    return suma;
}

Clasificación de funciones

Función vacía:

Este tipo de función no requiere de ningún parámetro para ejecutarse. Puede retornar algún valor o no hacerlo según se desee, por ejemplo la función clrscr(); en lenguaje C es una función vacía que no retorna ningún valor y la función getch(); de igual modo es una función vacía pero que nos retorna el valor de la ultima tecla oprimida.

Ejemplo:

Mismo ejemplo, solo que esta vez usando una función vacía sin retorno. Como vemos la función no retorna ningún valor ya que dentro de la misma función se publica el resultado. En este caso habría un inconveniente si quisiéramos usar el resultado dentro de la función principal, puesto que las variables locales de la función suma solo se pueden ocupar dentro de esta misma, mientras esté en ejecución.

#include <cstdlib>
#include <iostream>

using namespace std;
void suma();                             //Declaración de la función
int main()
{
    cout<<"Suma de dos numeros enteros"<<endl;
    suma();                                                           //Llamando a la función
    system("PAUSE");
    return EXIT_SUCCESS;
}
void suma()                              //Estructura de la función
{
     int x,y,R;
    cout<<"Dame el valor de los numeros a sumar"<<endl;
    cout<<"x= ";cin>>x;
    cout<<"y= ";cin>>y;
    R=x+y;
    cout<<"Resultado: "<<R<<endl;
    return;                           //No retorna ningún valor
}

******************************************************************************

Esta vez al usar la función vacía con retorno podremos hacer uso del valor que nos retorna la función suma dentro de la función main. Para esto, dentro de la función main, debemos asignarle a una variable el valor que nos retornará la función suma de la siguiente manera: R=suma(); El tipo de la variable a retornar y el tipo de la variable a la que le asignará ese valor deben ser iguales.

#include <cstdlib>
#include <iostream>

using namespace std;
int suma();                         //Declaración de la función
int main()
{
    int R;
    cout<<"Suma de dos numeros enteros"<<endl;
    R=suma();                     //Llamada de la función asignando el valor retornado a la variable R 
    cout<<"Resultado: "<<R<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
int suma()                             //Estructura de la función
{
     int x,y,Res;
    cout<<"Dame el valor de los numeros a sumar"<<endl;
    cout<<"x= ";cin>>x;
    cout<<"y= ";cin>>y;
    Res=x+y;
    return Res;      //Retornar el valor de la variable Res
}

Función paso por valor

En esta función se definen los parámetros necesarios para que ésta se ejecute de la manera correcta, al igual que las funciones anteriores puede retornar un valor o no hacerlo.
El hacerlo con o sin retorno representa exactamente lo antes mencionado en los ejemplos anteriores, solo que esta vez, al ser paso por valor, los parámetros se requieren introducir desde la función principal, o en su caso desde otra función de ser necesario. 

Sin retorno:

#include <cstdlib>
#include <iostream>

using namespace std;
void suma(int a,int b);    //Declaración de función con sus parámetros
int main()
{
    int x,y;
    cout<<"Suma de dos numeros enteros"<<endl;
    cout<<"Dame el valor de los numeros a sumar"<<endl;
    cout<<"x= ";cin>>x;
    cout<<"y= ";cin>>y;
    suma(x,y);                          //Llamado de la función proporcionando los valores ingresados por el usuario
    system("PAUSE");
    return EXIT_SUCCESS;
}
void suma(int a,int b)     //Estructura de la función
{
    int R;
    R=a+b;
    cout<<"Resultado: "<<R<<endl;
    return;                      //no retorna ningún valor
}

******************************************************************************

Al hacer la función con retorno nos queda de la siguiente manera:

#include <cstdlib>
#include <iostream>

using namespace std;
int suma(int a,int b);    //Declaración de función
int main()
{
    int x,y,R;
    cout<<"Suma de dos numeros enteros"<<endl;
    cout<<"Dame el valor de los numeros a sumar"<<endl;
    cout<<"x= ";cin>>x;
    cout<<"y= ";cin>>y;
    R=suma(x,y);                            //Llamada de la función asignando el valor retornado a la variable R
    cout<<"Resultado: "<<R<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
int suma(int a,int b)     //Estructura de la función
{
    int suma;
    suma=a+b;
    return suma;
}

En este tipo de funciones se debe tener cuidado para no confundirse con las variables de la función suma (a.b) y las que el usuario ingresa (x,y). Al mandar llamar la función suma(x,y); lo que hacemos es lo siguiente: 
Le proporcionamos a la función los valores de x,y los cuales son copiados a las variables a y b que son los parámetros con los que se declaro la función, por lo tanto a=x, b=y por lo tanto al hacer las operaciones con a y b sería lo mismo que usar x, y.
En cada uno de los ejemplos se puede verificar que los resultados obtenidos son exactamente los mismos, solo queda decir que dependerá del programador y del objetivo del programa el tipo de funciones que se emplearán.

Paso por dirección o referencia, es otra clasificación de las funciones, el cual será explicado en otra publicación.

No hay comentarios.:

Publicar un comentario