Sie sind auf Seite 1von 10

Universidad Politcnica de San Luis Potos

Programacin 1
Roxana Georgina Herrera
Alonso Hernndez Luis Gerardo 140733

17/03/15

Parmetros
Paso por parmetros

Parmetros:

Son los datos que recibe o que se le envan a la funcin para que con ellos
posiblemente desarrolle algo que se necesite. Esto es opcional. Entonces, una
funcin para ingresar podra ser as:

void ingresar();

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

Un ejemplo de devolucin seria en una suma de enteros, ya que se le podra


enviar comodato los dos nmeros y la funcin hara internamente la suma
devolviendo la suma de dichos nmeros (si son todos enteros, devolvera un int. Si
son enteros y flotantes devolvera un float ), as:

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

Float suma_ nmeros (float ,float); // suma enteros o flotantes, devuelve un flotante

1. La definicin de la funcin: Sirve ya para desarrollar la funcin; 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 definicin), al compilar dar error y
dir que esa funcin no fue declarada, que no existe .La definicin es muy
similar a la declaracin, solo que esta vez lleva un ambiente (donde se va a
programar, es decir las llaves { } ),as:

Void ingresar ()

// Lo que deba hacer esa funcin

Tambin otra diferencia es que la declaracin lleva ; (punto y coma) al final, la


definicin no lo lleva.

La declaracin de una funcin debe estar siempre antes de la definicin, por eso
es recomendable que se la coloque al inicio del programa debajo de las libreras
.Ya que se cre una funcin 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 terminara y ella no realizara alguna accin .Para llamar o invocar
una funcin 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 funcin se coloca tal como fue declarada seguida del punto y
coma (no se le pone el prototipo), solo el nombre y los posibles parmetros que
lleve.

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

Qu es el paso por valor? Es enviarle un parmetro (variable, constante, entre


otros) a otra funcin que para resolver su contenido necesita obligatoriamente
recibir ese parmetro; es decir, la funcin depende de los parmetros para
funcionar.

Al pasar por valor los parmetros qu se hace en s? Se enva el contenido de


algo (ya sea una variable, constante) para que la funcin 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 enva una copia de ella a la cual si
se le aplican cambios sern alterados nicamente en ella, ms no en la original.

Cmo se declara una funcin que reciba parmetros por valor? La sintaxis sera
la siguiente:

prototipo_de_la_funcin nombre_de_la_funcin (tipo_de_dato del parmetro1,


tipo_de_dato del parmetro 2, );

Ejemplo: void suma (int, int); Se declara una funcin suma que va a recibir
dos parmetros que sern enteros porque el tipo de dato lo denota as. Aquellos
parmetros son por valor, lo denotamos por el hecho que nicamente va el tipo de
dato en los parntesis.

El prototipo de la funcin suma es void, es decir que no va a retornar valores,


ser un procedimiento. Si retornara un entero sera int el prototipo, un nmero con
decimales sera float el prototipo, entre otros.

Cmo se define una funcin que recibe parmetros por valor? La definicin
de la funcin suma:
Ejemplo:

void suma(int n1,int n2)

Donde n1 y n2 son variables formales.

31
Paso de parmetros
En la llamada a una funcin se pasan datos del programa principal a esa funcin
Cmo?
Se establece automticamente una correspondencia entre los parmetros de la
llamada (reales) y los de los subprogramas (formales).
Esta correspondencia est definida por la posicin
El primer parmetro real se corresponde con el primer parmetro formal; el
segundo parmetro real con el segundo formal y as sucesivamente Deben
coincidir en nmero y tipo de datos

Paso de parmetros por valor


La funcin recibe una copia de los valores de los parmetros reales
Esta copia queda almacenada en el parmetro formal (parmetro de la funcin
receptora)
La funcin trabaja sobre el parmetro formal.
Si se cambia el valor de un parmetro formal, el cambio slo es visible dentro de la
funcin y no tiene efecto fuera de ella
Se debe usar el paso de parmetros por valor siempre que los argumentos no se
van a modificar dentro de la funcin
Y si se quiere modificar el valor de los parmetros pasados a una funcin y
devolver este valor modificado?
Usar entonces paso por referencia

Paso de parmetros por referencia


Se pasa a la funcin una referencia a la direccin de memoria en la que est
almacenado el dato que se quiere modificar (puntero a la variable)
Y no una nueva variable con una copia del parmetro real como se hace en el
paso por valor
Despus de la llamada a la funcin, los valores se habrn modificado en el
programa principal
Decimos que son parmetros de salida, la funcin devuelve resultados al
programa principal a travs de esos valores
El paso por referencia se usa al escribir funciones que devuelven ms de un valor
al programa principal
Con return se puede devolver un nico valor de retorno

Paso de parmetros por referencia: Sintaxis


En el programa principal (llamada):
El parmetro real va precedido por el operador direccin, indicando que pasamos
un puntero a ese parmetro:
&var1
En el prototipo de la funcin, en el encabezado y en el cuerpo de la funcin:
El parmetro formal va precedido por el operador indireccin, indicando que
accedemos al contenido de ese parmetro <tipo *param1> (*param1)

Resumen:
Paso de parmetros por valor:
El valor del parmetro real se copia en el parmetro formal
Los cambios efectuados sobre el parmetro formal (dentro de la funcin) no
quedan reflejados en el parmetro real (fuera de la funcin)

Paso de parmetros por referencia:


Los parmetros formales se declaran como punteros y reciben la direccin de
memoria en la que se almacena el correspondiente parmetro real para ello se
usa el operador de direccin &
Cualquier modificacin sobre el parmetro formal que se realice en la funcin
se mantendr una vez que termine la funcin
El paso de parmetros por referencia permite que una funcin pueda modificar
ms de un valor.

Ejemplos

24.) Hacer un programa, que reciba en una funcion dos valores enteros
pero un dato que sea pasado por referencia y otro sea pasado por valor

#include <iostream.h>
#include <conio.h>

void referencia ( int&, int );

int A,B;

main()

{
cout<<\n Ingrese un valor para A: ;
cin>>A;
cout<<\n Ingrese un valor para B: ;
cin>>B;

cout<<\n ;
cout<<\n valor inicial de A: <<A;
cout<<\n direccion inicial de A: <<&A;
cout<<\n valor inicial de B: <<B;
cout<<\n direccion inicial de B: <<&B;
cout<<\n \n\n\n;

referencia(A,B);

getch();

void referencia ( int &vieneA, int vieneB )

{
cout<< [ PRUEBA 1 ] \n;

cout<<\n\n valor de *vieneA* = <<vieneA<<\n


<< direccion de *vieneA* = <<&vieneA<<\n
<< valor de *A* = <<A<<\n
<< direccion de *A* = <<&A<<\n\n
<<\n\n valor de *vieneB* = <<vieneB<<\n
<< direccion de *vieneB* = <<&vieneB<<\n
<< valor de *B* = <<B<<\n
<< direccion de *B* = <<&B<<\n
<< ______________________________________\n;
getch();

cout<< [ PRUEBA 2 ] \n;


vieneA = 10;

cout<<\n\n valor de *vieneA* = <<vieneA<<\n


<< direccion de *vieneA* = <<&vieneA<<\n
<< valor de *A* = <<A<<\n
<< direccion de *A* = <<&A<<\n\n
<<\n\n valor de *vieneB* = <<vieneB<<\n
<< direccion de *vieneB* = <<&vieneB<<\n
<< valor de *B* = <<B<<\n
<< direccion de *B* = <<&B<<\n
<< ______________________________________\n;
getch();

cout<< [ PRUEBA 3 ] \n;


vieneB = 1200;

cout<<\n\n valor de *vieneA* = <<vieneA<<\n


<< direccion de *vieneA* = <<&vieneA<<\n
<< valor de *A* = <<A<<\n
<< direccion de *A* = <<&A<<\n\n
<<\n\n valor de *vieneB* = <<vieneB<<\n
<< direccion de *vieneB* = <<&vieneB<<\n
<< valor de *B* = <<B<<\n
<< direccion de *B* = <<&B<<\n
<< ______________________________________\n;
getch();

cout<< [ PRUEBA 4 ] \n;


A = 44;

cout<<\n\n valor de *vieneA* = <<vieneA<<\n


<< direccion de *vieneA* = <<&vieneA<<\n
<< valor de *A* = <<A<<\n
<< direccion de *A* = <<&A<<\n\n
<<\n\n valor de *vieneB* = <<vieneB<<\n
<< direccion de *vieneB* = <<&vieneB<<\n
<< valor de *B* = <<B<<\n
<< direccion de *B* = <<&B<<\n;
getch();
}

Programa que suma 2 matrices usando funciones.

//Jorge Saravia Sanchez


//Universidad Privada del Norte
//Trujillo - Per
#define FIL 100
#define COL 100
#include <iostream.h>

using namespace std;

void leer(int, int, int[][COL],int [][COL]);


void calc(int, int, int[][COL],int [][COL], int[][COL]);

void main (void)


{
int a1[FIL][COL], a2[FIL][COL], a3[FIL][COL],f,c;
cout<<"Ingrese el numero de filas:";cin>>f;
cout<<"Ingrese el numero de columnas:";cin>>c;
leer(f,c,a1,a2);
calc(f,c,a1,a2,a3);
}

void leer (int c, int f, int a1[FIL][COL], int a2[FIL][COL])


{
int i,j;
cout<<endl<<"Elementos de la Matriz A:"<<endl;
for(i=0; i<f; i++)
{
for(j=0; j<c; j++)
{
cout<<"Leer Elemento ["<<i<<";"<<j<<"]:";cin>>a1[i][j];
}
}
for (i=0 ; i<f; i++)
{
for(j=0; j<c; j++)
cout<<a1[i][j]<<" ";
cout<<endl;
}
cout<<endl<<"Elementos de la Matriz B:"<<endl;
for(i=0; i<f; i++)
{ for(j=0; j<c; j++)
{
cout<<"Leer Elemento ["<<i<<","<<j<<"]:";cin>>a2[i][j];
}
}
for(i=0; i<f; i++)
{for(j=0; j<c; j++)
cout<<a2[i][j]<<" ";
cout<<endl;
}
}
void calc(int f, int c, int a1[FIL][COL], int a2 [FIL][COL],int
a3[FIL][COL])
{
int i,j;
cout<<endl<<"Elementos de la Matriz C:"<<endl;
for(i=0; i<f; i++)
{for(j=0; j<c; j++)
{
a3[i][j]=a1[i][j]+a2[i][j];
cout<<"El elemento ["<<i<<";"<<j<<"];";
cout<<a3[i][j]<<endl;
}
}
cout<<endl<<"La Matriz Resultante es:"<<endl;
for(i=0; i<f; i++)
{for(j=0; j<c; j++)
cout<<a3[i][j]<<" ";
cout<<endl;
}
}
Paso Parmetros por valor

#include <iostream>
void sumar(int);
int main()
{
int n = 4;
sumar(n);
std::cout << n << std::endl;
system("pause");
return 0;
}
void sumar(int x)
{
x++;
std::cout << x << std::endl;
}
Paso Parmetros por referencia
#include <iostream>
void sumar(int *);
int main()
{
int n = 4;
sumar(&n);
std::cout << n << std::endl;
system("pause");
return 0;
}
void sumar(int *x)
{
*x = *x + 1;
std::cout << *x << std::endl;
}
Bibliografa
https://tarquequispej18.wordpress.com/2013/05/27/funciones-con-parametros-en-
dev-c/

http://ocw.uc3m.es/ingenieria-informatica/programacion-en-lenguaje-c-
2013/Tema5.pdf

http://www.c.conclase.net/?id=vercodigo

https://eperdomo89.wordpress.com/category/programando/dev-c/

http://www.genbetadev.com/cc/punteros-y-referencias

Das könnte Ihnen auch gefallen