Dev-C++, Clase17 – Funciones (paso por valor)

Hola a todos/as,

En la clase anterior (clase16), vimos los conceptos e implementaciones de las funciones en si en c++, vimos lo que era la definicion y declaracion de la funcion en el cuerpo del programa, cómo se debia hacer, dónde se debia hacer, su estructura, etc.. Ahora asi mismo, las funciones no solamente son llamadas para que realicen cierta necesidad, si no que en algunas ocaciones para que la funcion desarrolle dicha necesidad necesita que se le envien parametros.

En la clase anterior vimos que eran los parametros y para que servian, ademas de como denotarlos; asi que si no sabes que son parametros de funcion, puedes ir a la clase anterior y revisarlo para no tener confusiones.

Bien ahora esos parametros que se le enviarán a la funcion para que ella pueda cumplir su papel correctamente, pueden ser enviados de dos maneras:

1) Pasar los parametros por valor ( paso por valor )

2) Pasar los parametros por referencia ( paso por referencia )

Aquella manera de pasar los datos mencionada anteriormente es diferente una de la otra, es decir no es lo mismo pasar datos por valor que pasarlos por referencia. En la programacion depende del ejercicio o de la ocacion para implementar o pensar en como seria mejor que pase el parametro. En la clase de hoy vamos a ver el paso por valor y en la siguiente veremos por referencia.

¿ Qué es el paso por valor ?

Es enviarle un parametro ( variable,constante,etc.. ) a otra funcion que para resolver su contenido necesita obligatoriamente recibir ese parametro, es decir la funcion depende de los parametros para funcionar.

¿ Al pasar por valor los parametros que hago en si ?

Estas enviando el contenido de algo ( ya sea una variable, constante, etc.. ) para que la funcion de destino la use y ahi pueda completar con exito su objetivo. Pero se debe tener en cuenta que al pasar por valor; la variable original no se altera, se envia una “copia” de ella a la cual si se le aplican cambios serán alterados unicamente en ella, más no en la original.

¿ Como declaro una funcion que reciba parametros por valor ?

La declaracion de una funcion que recibe parametros es casi igual a la que vimos en la clase anterior en una funcion “en general”, la sintaxis seria la siguiente para una funcion que reciba parametros por valor:

prototipo_de_la_funcion nombre_de_la_funcion ( tipo_de_dato del parametro1 , tipo_de_dato del parametro 2 , … );

Ejemplo:

void suma ( int , int );

Como vemos en el ejemplo anterior, está declarada una funcion “suma” que va a recibir dos parametros que serán enteros porque el tipo de dato lo denota asi. Aquellos parametros son por valor , lo denotamos por el hecho que unicamente va el tipo de dato en los parentesis.

El prototipo de la funcion “suma” es void, es decir que no va a retornar valores, será un procedimiento. Si retornara un entero sería int el prototipo, un numero con decimales seria float el prototipo, etc..

¿ Cómo defino una funcion que recibe parametros por valor ?

La definicion es la misma que la anterior, solo que no lleva punto y coma (;) al final, puesto aqui es un ambiente que se va a programar mas no una declaracion, tendremos algo asi como definicion de la funcion “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 parametro en la funcion de destino, tienen el contenido de una variable existente; pero no tiene necesariamente el mismo nombre. Por ejemplo si éste es mi codigo:

// sueldo = 100.

// comision = 20.

main()

{

…………………

………….

…….

suma ( sueldo, comision );

….

……

}

void suma ( int n1, int n2 )

{

….

}

Ahi lo que pueden observar es que en el cuerpo principal ( main ), se hace un llamado a una funcion “suma” que recibe como parametro dos numeros enteros. En éste caso será el sueldo y la comision de un empleado, la funcion “suma” los recibirá y con esos valores hara un proceso interno.. Pero vemos que al momento de llamar a la funcion “suma” le enviamos:

* sueldo ( variable entera )

* comision ( variable entera )

Pero en la definicion de la funcion “suma”, están dos variables en donde llega el contenido de sueldo y comision, aquellas variables son: n1 y n2.

Como pueden ver, no necesariamente la funcion debe tener en su definicion el mismo nombre de la variable que le está pasando el dato, mas bien se suele recomendar cambiar el nombre a las variables formales ( las que se crean / se declaran en la definicion de la funcion que recibe parametros ya sea por valor o por referencia, pero estamos viendo por valor en ésta clase ).

Lo que si nos importa es que aquellas variables cualquiera que sea su nombre ( en nuestro caso n1 y n2 ), reciben el contenido esperado. Es decir que:

Si sueldo valia 100 como estaba previsto, n1 va a tener el valor de 100 en su contenido.

Si comision valia 20 como estaba previsto, n2 va a tener el valor de 20 en su contenido.

Y si a n1 y n2 le sumamos 500 mas, ¿ que pasa ?

Lo que pasa es que quedaria asi:

n1 = 600 ( es decir 100 + 500  )

n2 = 520 ( es decir 20 + 500  )

Pero sueldo y comision quedarian intactos, es decir:

sueldo = 100

comision = 20

NO se alteran las variables originales en los pasos por valor como ya habia indicado al inicio de la clase, pero si pasan su contenido exacto a las variables formales de la funcion destinada que recibe parametros. Como dije se crea una “copia” y esas copias pueden ser alteradas pero no se alterarán las originales.

Bien, ahora que sabemos como declarar y definir una funcion que reciba parametros por valor, ademas de tener claros muchos conceptos base para el manejo de funciones, ya podemos realizar un ejemplo de como usariamos en la practica el paso por valor en un programa que nos lo pida. Veamos:

23.) Hacer un programa que haga las veces de calculadora entre dos números, es decir que el usuario ingresará dos números y luego el programa por medio de funciones recibirá los números y mostrará su resultado en: suma, resta, multiplicacion y division. Luego tambien mostrará cuales fueron los números ingresados.

Por favor antes de ver ésta entrada recomiendo ver la entrada:

” Uso de la aplicacion

ATENCION: en las clases anteriores he explicado las lineas y que hace cada una, entonces les sugiero que vean las entradas anteriores para entender las lineas de las que no voy a hacer mucha enfasis.

Las lineas que ya hayamos visto, les colocaré ” *** “  al final para que sepan que ya lo hemos visto con anterioridad ( entiendase como “anterioridad” a la/las clases anteriores ademas de sus correspondientes entradas en la seccion “General” del mapa de sitio ).

Bien hay diferentes maneras de hacerlo, pero vamos a verlo de manera individual es decir que voy a realizar una funcion para cada caso: suma,resta,multiplicacion y division. De esta manera entenderán mejor como va el paso por valor en funciones, comencemos:

#include <iostream.h>

#include <conio.h>

void suma(float,float);

void resta(float,float);

void multiplicacion(float,float);

void division(float,float);

main()

{

float n1,n2;

cout<<“\n -Operaciones aritmeticas basicas- \n”

<<“\n Ingrese cantidad 1:”;

cin>>n1;

cout<<“\n Ingrese cantidad 2:”;

cin>>n2;

suma(n1,n2);

resta(n1,n2);

multiplicacion(n1,n2);

division(n1,n2);

cout<<“\n\n Los numeros ingresados fueron: “<<n1<<” y “<<n2;

getch();

}

void suma(float x,float y)

{

cout<<“\n La suma = “<<(x+y);

}

void resta(float x,float y)

{

cout<<“\n La resta = “<<(x-y);

}

void multiplicacion(float x,float y)

{

cout<<“\n La multiplicacion = “<<(x*y);

}

void division(float x,float y)

{

cout<<“\n La division = “<<(x/y);

}

– linea 1 – 2: la cabecera y libreria ***

– linea 3 – 6: declaración de funciones que vamos a usar ***

– linea 7: función principal ***

– linea 8 – 21: inicio – fin del programa ***

– linea 9: declaramos variables tipo flotantes ***

– linea 10 – 11: recurso cout ***

– linea 12: recurso cin ***

– linea 13: recurso cout ***

– linea 14: recurso cin ***

– linea 15 – 18: llamamos a las funciones

Aquí lo que estamos haciendo es llamar a cada función: suma,resta,multiplicacion,division. Como la función necesita de los numeros ingresados anteriormente ( n1 y n2 ) para calcular su respectiva suma ó resta ó multiplicacion ó division, entonces debemos enviarle como parametros aquellos datos. Pero debes tener en cuenta lo siguiente:

– La declaración de la función debe ser acorde a la definición de la misma función [ ver declaracion y definicion ( clase16 ) ]

es decir que, no podemos entrar en contradicciones por ejemplo al declarar:

void suma();

y luego al momento de usar la funcion ( ó al definirla ) colocar:

int suma ( x,y,z )

{

}

Eso conyeva a errores de compilacion, porque como ya he dicho el lenguaje es “key sensitive”; osea que no es lo mismo suma que: Suma ó suMA ó summa, etc..

En nuestro caso, como declaramos una función void ( ésto quiere decir que no retorna valores ), mas abajo al momento de realizar la programación debemos definirla de igual manera como void, NO como int ni float ni double, etc..

También con los parametros, si la declaramos como void que no recibe parametros; NO debemos despues definirla como void que si reciba parametros, por más que este bien escrito el nombre y el prototipo, no coincide a la hora de ser llamada la función por el simple hecho de que no es lo mismo:

void resta (); -> declaracion

void resta ( n1,n2 ) -> definicion

{

}

Como pueden ver, el n1 y n2 están de más por así decirlo, en todo caso el programa lo que interpretaría es que esa función resta(n1,n2) es otra función diferente a resta() por el simple hecho de que no coinciden completamente. Así que mucho ojo con eso😉

– linea 19: recurso cout ***

Lo que hacemos aquí es mostrar los numeros que fueron ingresados, con el fin de reconocer que en el paso por valor NO se alteran las variables originales, ya que mostraremos 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 caracteristicas de pasar por valor los datos, se pasan copias.

– linea 20: pausamos el programa ***

– linea 22 – 25: funcion suma

Aqui esta la definicion de la funcion suma, que como vemos:

no retorna valores ( void )

recibe dos parametros flotantes ( x,y )

y lo que hace en su ambiente es mostrar mediante el recurso cout: “la suma es” y hacer un calculo matematico (x+y), que lo que hará es mostrar en pantalla la suma de ambas variables.

– linea 22 – 25: funcion resta

Hace lo mismo que la suma, solo que el calculo matematico cambia (x-y)

– linea 26 – 29: funcion multiplicacion

Hace lo mismo que las anteriores, solo que el calculo matematico cambia (x*y)

– linea 29 – 32: funcion division

Hace lo mismo que las anteriores, solo que el calculo matematico cambia (x/y)

Y eso es todo, podemos ver que mostramos los valores calculados y el contenido de las variables orginales, con ésto podemos tener una buena nocion de como son y para que sirven las funciones con paso por valor.

Saludos!, cualquier duda o sugerencia comenten serán bienvenidos! (:

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: