You are on page 1of 4

FACULTAD NACIONAL DE INGENIERIA

INGENIERIA DE SISTEMAS E INGENIERIA INFORMATICA

METODOLOGIA DE LA PROGRAMACION II
LABORATORIO DE PROGRAMACION – SIS 2210
LABORATORIO NRO 2.

Tema: Funciones. Parámetros por Referencia

Objetivos:
 Comprender el concepto de referencia
 Modificar el valor de la variable parámetro
 Entender el concepto dirección de memoria

Fundamento Teórico:
Variable Referencia: Una referencia o variable referencia es simplemente otro nombre o alias de una
variable. Actúa igual que un puntero. No se puede modificar la variable a la que está asociada la referencia, pero
si se puede modificar el valor de la variable asociada. Las variables referencias se des-referencian
automáticamente cuando se utilizan
Tipo &var;
Se inicializa con el valor de otra variable asociada, nunca por si misma;
Ej: int i;
int &r = i; //es un alias de i
r=400; //i es 400
Parámetro por referencia: Cuando una función debe modificar el valor de la variable pasada como parámetro
y esa modificación retorne a la función llamadora, se debe pasar el parámetro por referencia. El compilador no
realiza una copia del parámetro sino pasa una referencia que indica a la función donde está la variable en
memoria. La referencia que una función recibe es la dirección de la variable.
La llamada a la función sería por ejemplo:
int x=10, y=5;
intercambiar ( x,y);
//solo se pueden pasar variables no se pueden pasar constantes ni expresiones

Alumno:………………………………………………………………………………………….. pág. 1
y la función de intercambio sería:
void intercambiar( int &a, int &b)
{
int aux;
aux=a;
a=b;
b=aux;
return;
}

Argumentos Array: Los arrays son los únicos argumentos que se pasan por referencia, sin tener que usar el
operador &. El nombre de un array es un puntero a su primer elemento
Modificador const: Se puede preceder a un tipo de argumento con el modificador const para indicar que ese
argumento no puede ser modificado de ningún modo.

Actividad de Clase:
Ejemplo 1: Buscar un elemento en un vector. El resultado da la posición del elemento en el vector o el
mensaje “No está en la lista”
#include <iostream>
using namespace std;
const int N=10;
int busquedaSecuencial(const float lista[], int i, float nro);

int main()
{
float lista[N];
float numero;
int i=0, encontrado;
char resp;
cout<<"Ingresar lista de numeros"<<endl;

while (i<N)
{
cin>>lista[i];
i++;
}

do
{
cout<<"indique el numero que desea buscar ";
cin>>numero;
encontrado=busquedaSecuencial(lista, i, numero);
if(!encontrado) cout<<"\nEste numero no esta en la lista \n";
else cout<<"\nEste numero esta en la posicion: "<<encontrado<<endl;
cout<<"\n\nDesea continuar? s/n: ";

Alumno:………………………………………………………………………………………….. pág. 2
do
{
cin>>resp;
}while(resp !='s' && resp !='n');
}while(resp=='s');

return 0;
}

//busqueda secuencial
int busquedaSecuencial(const float lis[], int i, float nro)
{
int encontrado=0, k=0;
while (!encontrado && k<i)
{
if(lis[k++]==nro) encontrado =k;
}
return encontrado;
}

Ejemplo 2.- Hacer un programa genere una matriz con elementos aleatorios comprendidos entre 0-99 y
cuente todos los elementos pares
#include <iostream>
#include<cstdlib>
#include<ctime>
#include<iomanip>
using namespace std;
const int F=6;
const int C=4;
void generarMatriz(int [][C], const int, const int);
void escribirMatriz(int [][C], const int, const int);
void elementosPares(int [][C], const int, const int, int &);
int main()
{
int datos[F][C];
srand(time(NULL));
int con;
generarMatriz(datos, F, C);
escribirMatriz(datos,F,C);
elementosPares(datos,F,C,con);
cout<< "Hay "<<con<< " elementos pares "<<endl;
return 0;
}

void elementosPares(int mat[][C], const int filas, const int cols, int &conta)
{
conta=0;
for (int f=0;f<filas ;f++ )
for (int c=0;c<cols ;c++ )
if(mat[f][c]%2==0)
conta++;
}

Alumno:………………………………………………………………………………………….. pág. 3
void generarMatriz(int M[][C], const int filas, const int cols)
{
for ( int f=0;f< filas;f++ )
for (int c=0;c<cols ;c++ )
M[f][c]=rand()%100;
}

void escribirMatriz(int M[][C], const int filas, const int cols)


{
// forma de elemento de matriz
//for ( int f=0;f< filas;f++ )
//{
// for (int c=0;c<cols ;c++ )
// cout<<setw(5)<< M[f][c];
// cout<<endl;
//
// }
cout<<endl;
// forma de puntero
for ( int f=0;f< filas;f++ )
{
for (int c=0;c<cols ;c++ )
cout<<setw(5)<< *(*(M+f)+c);
cout<<endl;
}

Alumno:………………………………………………………………………………………….. pág. 4

You might also like