Está en la página 1de 5

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

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[N], int i, float nro);

int main()
{
float lista[N];
float numero;
int i=0; //encontrado;
int posicion;
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: ";
do
{
cin>>resp;
}while(resp !='s' && resp !='n');
}while(resp=='s');

return 0;
}

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

Ejemplo 3.- 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 datos[F][C];

int main()
{
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; mat[11][13]=100;
for (int f=0;f<filas ;f++ )
for (int c=0;c<cols ;c++ )
if(mat[f][c]%2==0)
conta++;
}

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)


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

Problemas Propuestos:
1.- Hacer un programa que genere un vector de N elementos enteros y utilice funciones
para ordenar los elementos de menor a mayor.
2.- Modificar el ejemplo 2 para sumar a todos los elementos pares una unidad de tal modo
que todos los elementos sean impares. Mostrar estas dos matrices

Cuestionario:
1. ¿Se puede inicializar una variable referencia con una constante?
2. ¿Porque no se utiliza el operador & para referenciar arreglos?
3. ¿En qué casos se requiere utilizar el modificador const en los argumentos de una
función?
4. ¿Qué diferencia hay entre una variable puntero y una variable referencia?
5. ¿Cómo se genera una variable aleatoria en C++?

También podría gustarte