Para pasar un array a una función:
-
En la función se debe declarar el parámetro como un array del tipo adecuado. En los arrays unidimensionales
no es necesario especificar el tamaño
por lo tanto aparecerán los corchetes vacíos.
-
En la llamada a
la función a la que se envía el array, el nombre del array aparecerá solo, sin corchetes
ni índices
Los arrays en C++ se pasan siempre
a las funciones por referencia. El
nombre de un array realmente es un puntero que contiene la dirección de memoria
donde comienza el array, o lo que es lo mismo, la dirección de memoria del
primer elemento. Cuando se pasa un array a una función, la función recibe la
dirección de memoria donde se encuentra el primer elemento del array. Por lo
tanto, la función trabaja sobre el array original.
No es
necesario utilizar el operador & en el paso de arrays a funciones para
indicar que se hace por referencia ya que siempre pasan por referencia.
Una función en C++ no puede devolver un array mediante la
instrucción return.
Ejemplo 1 de paso de arrays a funciones en C++:
función que recibe un array de
dos elementos e intercambia el contenido de estos dos elementos.
#include <iostream>
using namespace std;
void intercambia(int []); //declaración de la función.
//No es necesario
poner el nombre del array
int main()
{
int A[2]={3,5};
intercambia(A); //en la llamada sólo se escribe
el nombre
//del array, sin corchetes
cout
<< A[0] << " " << A[1] << endl; //muestra 5 3
system("pause");
}
void intercambia(int a[]) //definición de la función
{
int
c;
c=a[0];
a[0]=a[1];
a[1]=c;
}
Ejemplo 2 de paso de arrays a funciones en C++:
En este
ejemplo se leen las estaturas de los alumnos de una clase y se realizan con
ellos distintos cálculos.
Se utilizan
las siguientes funciones:
Función leer:
Lee por teclado las estaturas de los alumnos y las guarda en el array.
Función
estatura_media: recibe el array y calcula y devuelve la estatura media.
Función
max_min: Calcula y devuelve la estatura mayor y la menor. Recibe el array y los
dos parámetros donde devolver la estatura mayor y la menor.
Función
cuantos_mayor_menor_media: Calcula y devuelve cuantos alumnos hay con estatura
mayor que la media y cuántos con estatura menor. Recibe el array de estaturas,
la estatura media y los parámetros donde devolver los resultados.
Función mostrar_resultados:
recibe el array y todos los datos calculados y los muestra por pantalla. Solo
el array pasa por referencia (por defecto), los demás parámetros pasan por
valor.
#include
<iostream>
#include
<iomanip>
using namespace
std;
//declaración de
funciones
void leer(double []);
double estatura_media(double
[]);
void max_min(double [], double
&, double &);
void
cuantos_mayor_menor_media(double [], double, int &, int &);
void mostrar_resultados(double
[], double, double, double, int, int);
int main()
{
double estaturas[10], media, mayor, menor;
int
cont_mas = 0, cont_menos = 0;
leer(estaturas);
max_min(estaturas,mayor,menor);
media = estatura_media(estaturas);
cuantos_mayor_menor_media(estaturas,media,cont_mas,cont_menos);
mostrar_resultados(estaturas,media,mayor,menor,cont_mas,
cont_menos);
system("pause");
}
void leer(double a[])
{
int i;
cout << "Lectura de las
estaturas de los alumnos:" << endl;
for(i=0;
i<10; i++)
{
cout << "Alumno "
<< i+1 << ": ";
cin >> a[i];
}
}
double estatura_media(double
a[])
{
double media = 0;
int
i;
for(i=0; i<10; i++)
{
media = media + a[i];
}
media = media / 10;
return media;
}
void max_min(double a[], double
&max, double &min)
{
int i;
max = min = a[0];
for(i=1; i<10; i++)
{
if(a[i]>max)
max = a[i];
else
if(a[i]<min)
min = a[i];
}
}
void
cuantos_mayor_menor_media(double a[], double media,
int
&mayores_media, int &menores_media)
{
int i;
for(i=0; i<10; i++)
{
if(a[i]>media)
mayores_media++;
else if(a[i]<media)
menores_media++;
}
}
void mostrar_resultados(double
a[], double media, double mayor,
double menor, int
mayores_media, int menores_media)
{
int i;
system("cls");
cout << fixed <<
setprecision(2);
cout <<
"Estatura de los alumnos de la clase" << endl;
cout
<< "-----------------------------------" << endl;
for(i=0; i<10; i++)
{
cout << "Alumno "
<< setw(4) << i+1 << ": " << a[i] <<
endl;
}
cout << "Mayor estatura: "
<< mayor << endl;
cout << "Menor estatura: "
<< menor << endl;
cout << "Estatura media: "
<< media << endl;
cout << "Hay " << mayores_media
<< " alumnos con estatura ";
cout << "superior a la
media" << endl;
cout << "Hay " <<
menores_media << " alumnos con estatura ";
cout << "inferior a la
media" << endl << endl;
}
Ejemplo 3: pasar una matriz a una función en C++:
Cuando se pasa
una matriz (array bidimensional) a una función, en la función no es necesario
especificar el tamaño del primer índice (filas), por lo tanto, aparecerán los
corchetes correspondientes vacíos.
En la llamada a
la función a la que se envía el array, el nombre del array aparecerá solo, sin
corchetes ni índices
Programa que lee por teclado los elementos de dos matrices de enteros y
crea otra matriz con la suma de las dos. Se
usarán tres funciones.
Función leerMatriz que se usará dos veces para leer por teclado los
datos de cada matriz.
Función sumarMatrices que realiza la suma de las dos matrices.
Función mostrarResultado que se usa tres veces para mostrar por pantalla
las tres matrices.
#include
<iostream>
#include
<iomanip>
using
namespace std;
const int
MAXFIL = 20;
const int
MAXCOL = 30;
//declaración
de funciones
void leerMatriz(int
[][MAXCOL], int, int);
void sumarMatrices(int
[][MAXCOL], int [][MAXCOL],
int [][MAXCOL], int,
int);
void
mostrarResultado(int [][MAXCOL], int, int);
int main
()
{ int nfilas,ncols;
int matriz1[MAXFIL][MAXCOL];
int matriz2[MAXFIL][MAXCOL];
int matriz3[MAXFIL][MAXCOL];
do
{
cout<<"\nIntroduce numero de filas. Maximo
" << MAXFIL << ": ";
cin
>> nfilas;
}while(nfilas<=0 or nfilas >MAXFIL);
do
{
cout<<"\nIntroduce numero de
columnas. Maximo " <<MAXCOL<<": ";
cin >> ncols;
}while(ncols<=0 or ncols
>MAXCOL);
// Lectura de datos de la primera matriz
cout
<< "\n Introduce datos de la primera matriz ";
leerMatriz(matriz1, nfilas, ncols);
// Lectura de datos de la segunda matriz
cout << "\n Introduce datos de
la segunda matriz ";
leerMatriz(matriz2, nfilas, ncols);
// Calcular la suma de las dos matrices
sumarMatrices(matriz1, matriz2, matriz3, nfilas, ncols);
// Mostrar el resultado por pantalla
system("cls");
cout << "\nmatriz 1:" <<
endl;
mostrarResultado(matriz1, nfilas, ncols);
cout << "\nmatriz 2:" << endl;
mostrarResultado(matriz2, nfilas, ncols);
cout << "\nmatriz 3 = matriz1 + matriz2"
<< endl;
mostrarResultado(matriz3, nfilas, ncols);
system("pause");
}
void leerMatriz(int
matriz[][MAXCOL], int nf, int nc)
{
int fila, col;
for (fila=0; fila < nf; fila++ )
{
cout << "\nFila : "
<< fila+1 << endl;
for (col=0; col < nc; col++)
{
cout << "Elemento :
" << col+1 <<": ";
cin >> matriz[fila][col];
}
}
}
void sumarMatrices(int
matriz1[][MAXCOL], int matriz2[][MAXCOL],
int matriz3[][MAXCOL], int
nf,int nc)
{
int fila, col;
for (fila=0; fila < nf; fila++ )
{
for (col=0; col < nc; col++)
matriz3[fila][col]=matriz1[fila][col] + matriz2[fila][col];
}
}
void
mostrarResultado(int matriz[][MAXCOL], int nf, int nc)
{
int fila, col;
for (fila=0; fila < nf; fila++ )
{
for (col=0; col < nc; col++)
cout << setw(4)
<< matriz[fila][col];
cout << endl;
}
}
Muy bueno y didácticos tus códigos.. alguien me pregunto si existe la manera de pasar un array por valor. tendras idea? a mi lo unic que se me ocurre es copiar el array a otro y pasar el segundo array.. porque del resto no veo la manera
ResponderEliminarLos arreglos siempre pasan por referencia. Lo que se puede hacer para proteger el contenido, que es lo preocupante en algunos casos, es declarar el mismo como constante. De esta manera la función no podrá modificar el contenido de dicho arreglo.
EliminarGracias, esta publicación es muy buena me ayudo mucho
ResponderEliminargracias tarea y duda saldades
ResponderEliminar¿Existe alguna forma de pasar un arreglo bidimensional, sin tener que especificar el tamaño del segundo índice?
ResponderEliminarNo, no es posible.
EliminarBuenas, si se desea pasar en arreglo de cadenas, de que manera se lo debe realizar?
ResponderEliminarDe la misma manera q pasas una matriz numérica.
ResponderEliminarCómo guardo los valores proporcionados de una variable a un arreglo?
ResponderEliminarEJEMPLO:
Int edadList [2];
Int edad;
for (I=0; I < 2; I ++){
Cout << "Cuál es tu edad: ";
Cin >>edad;
}
Ahora como hago para pasar cada valor de la variable edad a el arreglo edadList?