funciones con parametros en Dev-c++

Funciones con parámetros en Dev-C++

Introducción

Primeramente vamos a conocer y entender la parte teórica de este tema:

¿Qué es una función? Una función es un conjunto de instrucciones que se la puede llamar desde el programa principal o desde otras funciones. Las funciones sirven para desarrollar algo en especial cuando el programa así lo necesite .Para usar funciones, se deben tener en cuenta dos cosas que necesita:

  1. La declaración de la función: Esto sirve para que al compilar el programa, el compilador reconozca que esa función existe;  ya que si se llama desde alguna parte del programa sin haberla declarado o habiéndola declarado, se la declaró mal eso dará error .

Para declararla se sigue la siguiente sintaxis:

prototipo_de_funcion nombre_de_la_funcion( parametros opcionales );

¿Qué es prototipo y qué son parámetros? –

Prototipo de la función

: sirve para indicar que va a retornar la función, si va a retornar un entero, un double, un char, o simplemente no retorna nada (void). Esto es obligatorio.-

Parámetros:

son los datos que recibe o que se le envían a la función para que con ellos posiblemente desarrolle algo que se necesite. Esto es opcional.Entonces, una función para ingresar podría ser así:

void ingresar();

Donde se aprecia que no va a retornar nada (por ello tiene void); entonces, la función hace lo que tiene que hacer y termina, no devuelve nada.

Un ejemplo de devolución seria en una suma de enteros, ya que se le podría enviar comodato los dos números y la función haría internamente la suma devolviendo la suma de dichos números (si son todos enteros, devolvería un int. Si son enteros y flotantes devolvería un float ), así:

Int suma_enteros (int,int); // suma únicamente enteros, devuelve un entero

Float suma_ números (float ,float); // suma enteros o flotantes, devuelve un flotante

  1. La definición de la función: Sirve ya para desarrollar la función; es decir ya programar dentro de ella para que haga lo que se necesita. Como consecuencia de que ya está creada se puede usarla, pero si no se hubiese declarado y se desarrolla (hacemos la definición), al compilar dará error y dirá que esa función no fue declarada, que no existe .La definición es muy similar a la declaración, solo que esta vez lleva un ambiente (donde se va a programar, es decir las llaves “{ … }” ),así:

Void  ingresar ()

 {

………

 // Lo que deba hacer esa función

}

También otra diferencia es que la declaración lleva “;” (punto y coma) al final, la definición no lo lleva.

La declaración de una función debe estar siempre antes de la definición, por eso es recomendable que se la coloque al inicio del programa debajo de las librerías .Ya que se creó una función llamada “ingresar” para pedir los datos por medio de ella y no por medio del cuerpo principal main(), se debe llamar o invocar para que ejecute lo que tiene programado en su interior ya que por sí sola (sin ser llamada), el programa terminaría y ella no realizaría alguna acción .Para llamar o invocar una función lo único que se debe hacer es escribirla tal cual fue declarada sin alteraciones ya que las funciones son key sensitive, es decir que no es lo mismo:

void HOLA(); que void HoLa();

 Pues aunque son la misma palabra pero escrita diferente, para el compilador son dos funciones diferentes.

Para llamar a la función se coloca tal como fue declarada seguida del punto y coma (no se le pone el prototipo), solo el nombre y los posibles parámetros que lleve.

FUNCIONES EN DEV-C++ (PASO POR VALOR)

Las funciones no solamente son llamadas para que realicen cierta necesidad, sino que en algunas ocasiones para que la función desarrolle dicha necesidad necesita que se le envíen parámetros.

 Los parámetros que se le enviarán a la función para que ella pueda cumplir su papel correctamente, pueden ser enviados de dos maneras:

1) Pasar los parámetros por valor (paso por valor)

 2) Pasar los parámetros por referencia (paso por referencia)

 ¿Qué es el paso por valor? Es enviarle un parámetro (variable, constante, entre otros) a otra función que para resolver su contenido necesita obligatoriamente recibir ese parámetro; es decir, la función depende de los parámetros para funcionar.

¿Al pasar por valor los parámetros qué se hace en sí? Se envía el contenido de algo (ya sea una variable, constante) para que la función de destino la use y pueda completar con éxito su objetivo. Pero se debe tener en cuenta que al pasar por valor; la variable original no se altera, se envía una “copia” de ella a la cual si se le aplican cambios serán alterados únicamente en ella, más no en la original.

¿Cómo se declara una función que reciba parámetros por valor? La sintaxis sería la siguiente:

prototipo_de_la_función  nombre_de_la_función (tipo_de_dato  del parámetro1, tipo_de_dato  del parámetro 2, … );

Ejemplo:      void suma (int, int); Se declara una función “suma” que va a recibir dos parámetros que serán enteros porque el tipo de dato lo denota así. Aquellos parámetros son por valor, lo denotamos por el hecho que únicamente va el tipo de dato en los paréntesis.

 El prototipo de la función “suma” es void, es decir que no va a retornar valores, será un procedimiento. Si retornara un entero sería int el prototipo, un número con decimales sería float el prototipo, entre otros.

 ¿Cómo se define una función que recibe parámetros por valor? La definición de la función “suma”:

Ejemplo:   

  void suma(int  n1,int n2)

 {

….

 }

Donde n1 y n2 son variables formales.

¿Qué son variables formales? Son aquellas que se declaran en el momento de recibir el parámetro en la función de destino, tienen el contenido de una variable existente; pero no tiene necesariamente el mismo nombre. Por ejemplo, en éste código:

/ sueldo = 100. 

 // comision = 20. 

main()

 {  …………………

 ………….

 …….

suma ( sueldo, comision); 

 ….

……

  } 

void suma ( int n1,int n2)

 {  ….

  } 

Se observa que en el cuerpo principal (main), se hace un llamado a una función “suma” que recibe como parámetros dos números enteros. En éste caso será el sueldo y la comisión de un empleado. La función “suma” los recibe y con esos valores hará un proceso interno. Pero, al momento de llamar a la función “suma” se envía:

* sueldo ( variable entera )

 * comision ( variable entera )

Pero en la definición de la función “suma”, están dos variables en donde llega el contenido de sueldo y comisión; aquellas variables son,n1 y n2.Como se puede ver, no necesariamente la función debe tener en su definición el mismo nombre de la variable que le está pasando el dato, más bien se suele recomendar cambiar el nombre a las variables formales (las que se crean / se declaran en la definición de la función que recibe parámetros por valor). Lo que si interesa es que aquellas variables cual quiera que sea su nombre (en este caso n1y n2), reciben el contenido esperado. Es decir que:

 Si sueldo valía 100 como estaba previsto,n1 va a tener el valor de100en su contenido.

 Si comisión valía 20 como estaba previsto,n2 va a tener el valor de 20 en su contenido. 

Y si a n1 y n2 se le suman500 mas, ¿qué pasa?

Quedaría así:

n1 = 600 (es decir 100 + 500)

 n2 = 520 (es decir 20 + 500)

 Pero sueldo y comisión quedarían intactos, es decir:

sueldo = 100 

comision = 20

NO se alteran las variables originales en los pasos por valor como se había indicado anteriormente, pero si pasan su contenido exacto a las variables formales de la función destinada que recibe parámetros. Se crea una “copia” y esas copias pueden ser alteradas pero no se alterarán las originales.

El programa muestra los números que fueron ingresados, con el fin de reconocer que en el paso por valor NO se alteran las variables originales, ya que se visualizarán n1 y n2 con los valores originales a pesar de que hubo acciones aritméticas en su contenido (sumas, restas,..) pero esos cambios NO afectaron a las variables originales sino a las formales; pues esa es una de las características de pasar por valor los datos, se pasan copias.

Dev-c++, Funciones (paso por referencia)

Las funciones por lo general reciben parámetros, éstos hasta el momento fueron pasados a la función mediante el “paso por valor” que consiste en hacer una copia del argumento, para que la función trabaje con la copia y no con el argumento original. Esto significa que si la función modificara el valor, el original no se alteraría ya que se está manejando una copia.

Pero surgen dos problemas:

. Se podría querer modificar el argumento original y no una copia.

. Con gran cantidad de variables el paso por valor (copiando) puede resultar un gasto excesivo de memoria.

Para resolver estos problemas se cuenta con las referencias y los punteros. Una referencia a una variable es un “alias” de la variable. Para indicarle a C++ que estamos hablando de una referencia y no una variable anteponemos al nombre el carácter ampersand (&).

Por ejemplo una referencia llamada refPresupuesto apuntando a un valor double se escribiría así:

Doublé &refPresupuesto.

Ahora pasaremos a la parte práctica:

Primeramente

Abrimos el dev-c++/file/new/ proyect / console aplication / name /ok / guardar.

Image

Posteriormente pasamos a resolver de la siguiente manera:

Escribimos la codificación para un determinado problema.

Muchas veces es tedioso escribir el mismo código una y otra vez. Además esto hace más lento a nuestro programa. Para evitar esas incomodidades, existen las funciones. Agilizan el código, reduciendo el número de líneas y al mismo tiempo nos ayudan a escribir menos. 
En este tutorial veremos cómo hacer funciones en C++ que básicamente es igual en todos los lenguajes lo único que cambia de lenguaje a lenguaje es la forma de escritura (sintaxis). 
Si estas interesado en aprender… Sigue leyendo… 

Les pondré el código y lo iremos descomponiendo poco a poco para que lo entiendan. 

#include <iostream> //incluyendo la librería de entrada salida 
using namespace std; //cargando el namespace estándar 

int suma(int,int); //prototipo de funcion suma 
int resta(int,int);//prototipo de funcion resta 

int main(){ 
int num1,num2,opcion,resultado; 

cout<<“Ingrese el primer numero:”; 
cin>>num1; 
cout<<“Ingrese el segundo numero:”; 
cin>>num2; 
cout<<“Que desea hacer: \n1-Sumar \n2-Restar \nIngrese el numero de opcion y presione enter:\n”; 
// “\n” sirve como enter(salto de lina) (Pleca invertida) 
cin>>opcion; 

//dependiendo de la opcion insertada por usuario 
//se sumaran o restaran los 2 numeros 
switch(opcion){ 
case 1: 
resultado=suma(num1,num2); 
cout<<“El resultado es: “<<resultado; //usa la funcion e imprime el retorno 
//el retorno de suma(num1,num2) es la suma de los 2 numeros 
break; 
case 2: 
resultado=resta(num1,num2); 
cout<<“El resultado es: “<<resultado; //usa la funcion e imprime el retorno 
//el retorno de resta(num1,num2) es la resta de los 2 numeros 
break; 
default: 
cout<<“Esa opcion no es valida”; 
break; 

cin.ignore(); 
cin.get(); 
return 0; 

//definicion completa de los prototipos 
int suma(int x,int y){ 
return x+y; 

int resta(int x,int y){ 
return x-y; 
}

Pero hay que explicar algo importante. 
Las funciones en c++ primero se declaran. Esto es lo que vemos en la primera parte del código: 
int suma(int,int); //prototipo de funcion suma 
int resta(int,int);//prototipo de funcion resta

La sintaxis es la siguiente: 

<tipo de retorno> <nombre de funcion> (<tipo de parametro>…) 

Primero se pone el tipo de retorno. Estas 2 funciones devolverán números ENTEROS, por eso se usa int. Luego va el nombre de la función en este caso: suma y resta. Con el nombre llamaremos a las funciones. Luego vienen los parámetros. En el prototipo vale con solo poner el tipo de dato del parámetro, en este caso los 2 parámetros son Enteros, por eso pone (int,int). Y al final SIEMPRE! se pone un “;” (punto y coma) porque es un prototipo. 
Ahora debajo del main ya ponemos que hará nuestra función: 

int suma(int x,int y){ 
return x+y; 

int resta(int x,int y){ 
return x-y; 
}

Aquí los parámetros deben tener nombre. Ya no es solo el tipo de dato, sino que necesitamos un nombre para poder hacer referencia a ellos dentro de la función. Aquí ya no se pone un “;” como en el prototipo, aquí ya se abren los corchetes {} y dentro de los corchetes decimos que hará esa función. 
En estos casos sencillos, una función devuelve la suma de 2 números y la otra la resta de 2 números, que son pasados por parámetros. 
Para llamar una función simplemente ocupamos su nombre y rellenamos los parámetros: 
suma(5,6); //esto nos dará 11, simplemente llamamos la función con parámetros y listo. 

Finalmente copilamos y ejecutamos el programa, nos pedirá como datos un primer numero, un segundo numero, y un numero de opción entre(1-sumar,2-restar) posteriormente obtendrás un resultado.

Image

 

Bueno no se olviden de seguir practicando, y que solo tú tienes el poder de seguir innovando e ir progresando cada vez más en la vida, saludos.

Leave a comment