Está en la página 1de 27

Arreglos

Computción
Definición
Un arreglo es una colección de elementos del mismo tipo que
se reconocen por un solo identificador.
Para acceder a los elementos individuales de un arreglo se
utiliza un subíndice que debe ser un número entero.

Arreglo con nombre a


a[0] 56
a[1] 56
a[2] 91
a[3] 0
a[4] -3224
a[5] 100
a[6] 62
a[7] 12

Número de la posición de cada elemento


Ejemplo

int main(){
int n[ 10 ]; // n es un arreglo de 10 enteros
// inicializa los elementos del arreglo n en 0
for ( int i = 0; i < 10; i++ )
//establece el elemento de la ubicación i en 0
n[ i ] = 0;
cout << "Elemento" << setw(13)<< "Valor" << endl;
//despliega el contenido de un arreglo n
//en formato tabular
for ( int j = 0; j < 10; j++ )
cout <<setw(7)<<j<<setw(13)<<n[j] << endl;
return 0; // indica terminación exitosa
} // fin de main
Inicialización de un arreglo
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
int main()
{//utiliza una lista de inicialización para
//inicializar el arreglo n
int n[10]={32,27,64,18,95,14,90,70,60,37};
cout <<"Elemento"<<setw(13) << "Valor" << endl;
//salida del contenido del arreglo n en formato tabular
for ( int i = 0; i < 10; i++ )
cout<<setw(7)<<i<<setw(13)<<n[i]<<endl;
return 0; // indica terminación exitosa
} // fin de main
Otra inicialización
Variable constante
int main()
{ // la variable constante se puede utilizar para
//especificar el tamaño del arreglo
const int tamanoArreglo = 10;
int s[tamanoArreglo];//el arreglo s tiene 10 elementos
for (int i=0;i<tamanoArreglo;i++)//establece los valores
s[ i ] = 2 + 2 * i;
cout << "Elemento" << setw( 13 ) << "Valor" << endl;
// muestra el contenido del arreglo s en formato tabular
for ( int j = 0; j < tamanoArreglo; j++ )
cout << setw( 7 ) << j << setw( 13 ) << s[ j ] << endl;
return 0; // indica terminación exitosa
} // fin de main
Suma de un arreglo
Suma los elementos de un arreglo

int main()
{
const int tamanoArreglo = 10;
int a[tamanoArreglo] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int total = 0;
// suma el contenido del arreglo a
for ( int i = 0; i < tamanoArreglo; i++ )
total += a[ i ];
cout <<"El total de los elementos del arreglo es "<<
total << endl;
return 0; // indica terminación exitosa
} // fin de main
Histograma
int main()
{
const int tamanoArreglo = 10;
int n[tamanoArreglo] = {19,3,15,7,11,9,13,5,17,1};
cout << "Elemento" << setw( 13 ) << "Valor"
<< setw( 17 ) << "Histograma" << endl;
//para cada elemento del arreglo n, muestra una barra
//en el histograma
for ( int i = 0; i < tamanoArreglo; i++ ) {
cout << setw( 7 ) << i << setw( 13 )
<< n[ i ] << setw( 9 );
//despliega una barra
for ( int j = 0; j < n[ i ]; j++ )
cout << '*';
cout << endl; // inicia la siguiente línea de salida
} // fin de la estructura for externa
return 0; // indica terminación exitosa
} // fin de main
La criba de Eratóstenes
int main(){
int N = 10000,i,j;
int primo[N];
for(i = 0; i<N; i++)
primo[i] = 1;
for(i = 2; i<=N/2; i++){
for(j = 2; j<=N/i; j++)
if(i*j<N)
primo[i*j] = 0;
}
for(i = 0; i<N; i++)
if(primo[i])
cout << " " << i;
getch();
return 0;
}
Tarea
Haga un programa que calcule la desviaciòn estandar de
un arreglo de valores.
n

 x  x 
2
i
 i 1
n 1
n

x I
x i 1
n
Paso de arreglos a funciones
Para pasar un arreglo a una función debemos conocer su tamaño
para poder saber cuantos elementos se van a procesar.
Para esto declare la función con un parámetro extra para pasar el
número de elementos a la función
Ejemplo
#include <iostream.h>
#include <conio.h>

double promedio(double a[], int tamanio){


double suma = 0;
for(int i=0; i<tamanio; i++)
suma += a[i];
return suma/tamanio;
}

int main(){
double x[] = {3.5, 6.3, 4.5, 7.5, 5.4};
cout << promedio(x,5) << endl;
getch();
return 0;
}
Modificación de elementos mediante
funciones
En C los arreglos siempre se pasan por referencia de tal manera
que siempre es posible modificar los elementos dentro de una
función.
Ejemplo, inicia un arreglo con valores aleatorios entre 0 y 99.

void inicia(double a[], int tamanio){


for(int i=0; i<tamanio; i++)
a[i] = rand()%100;
}
Ordenación
La operación de ordenación es de las más comunes en
computación.
#include <iostream.h> int main(){
#include <conio.h> int b[20] =
{1,2,3,2,4,3,
void Burbuja(int a[],int tam){ 5,6,3,7,8,9,
for(int i = 0; i< tam - 1 ; 4,5,3,5,3,4,5,6};
i++) Burbuja(b,20);
for(int j = i; j< tam;j++) for(int i =0; i<20; i++)
if(a[i]>a[j]){ cout << b[i] << endl;
int temp = a[i]; getch();
a[i]=a[j]; return 0;
a[j]=temp; }
}
}
Búsqueda
Otra operación importante es la búsqueda de el valor de un
elemento dentro de un arreglo.

int BusquedaLineal(int a[],int b,int tam){


for(int i = 0; i< tam; i++)
if(a[i]==b)
return n;
return -1;
}
Arreglos de dos dimensiones
Los arreglos de dos dimensiones se declaran de acuerdo al
esquema
tipo variable[renglones][columnas];
Ejemplo
int a [5][4];
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
a[3][0] a[3][1] a[3][2] a[3][3]
a[4][0] a[4][1] a[4][2] a[4][3]
inicialización
int a[5][4] = {{2,3,4,2},{2,0,6,1},
{3,5,5,0},{2,2,1,1},{3,2,5,6}};

2 3 4 2
2 0 6 1
3 5 5 0
2 2 1 1
3 2 5 6
inicialización (cont.)
int a[5][4] = {{2,3},{1},
{3,5,5,0},{2},{3}};

2 3 0 0
1 0 0 0
3 5 5 0
2 0 0 0
3 0 0 0
ejemplo
Debe especificarse
void despliegaArreglo( int a[][ 3 ] ){
for ( int i = 0; i < 2; i++ ) {// for para cada fila
for ( int j = 0; j < 3; j++ )//despliega los valores de columnas
cout << a[ i ][ j ] << ' ';
cout << endl; // inicia una nueva línea de salida
} // fin de la estructura for externa
} // fin de la función despliegaArreglo
int main(){
int arreglo1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
int arreglo2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 };
int arreglo3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };
cout << "Los valores del arreglo1 por fila son:" << endl;
despliegaArreglo( arreglo1 );
cout << "Los valores del arreglo2 por fila son:" << endl;
despliegaArreglo( arreglo2 );
cout << "Los valores del arreglo3 por fila son:" << endl;
despliegaArreglo( arreglo3 );
return 0; // indica terminación exitosa
} // fin de main
Operaciones con matrices
Se puede utilizar la técnica vista anteriormente para matrices de
tamaño fijo.
Si las matrices que se van a manipular son de 3x3 la función para
sumar podría ser

void Suma(double a[][3],double b[][3],double c[][3]){


for(int i = 0; i< 3 ; i++)
for(int j = 0; j< 3 ; j++)
c[i][j] = a[i][j] + b[i][j];
}
Otras operaciones de matrices
void Resta(double a[][3],double b[][3],double
c[][3]){
for(int i = 0; i< 3 ; i++)
for(int j = 0; j< 3 ; j++)
c[i][j] = a[i][j] - b[i][j];
}

void Multiplica(double a[][3],double b[][3],double


c[][3]){
for(int i = 0; i< 3 ; i++)
for(int j = 0; j< 3 ; j++){
c[i][j] = 0;
for(int k = 0; k< 3 ; k++)
c[i][j] += a[i][k]*b[k][j];
}
}
Otras operaciones de matrices
impresión de una matriz de 3x3

void print(double a[][3]){


for(int i = 0; i< 3 ; i++){
for(int j = 0; j< 3 ; j++)
cout << a[i][j] << " ";
cout << endl;
}
cout << endl;
}
Tarea #10
Escriba una función para obtener la
traspuesta de una matriz de 3x3.  4 8.7 6.3
a   5.6  2.3 3.4
Escriba una función que calcule la suma de
 6.5 8.7 5.4
todos los elementos de una matriz de 3x3
7.5 0 6 
Escriba una función que calcule la traza de b   12 9  2.3
una matriz de 3x3  4  5 0 
Calcule con esta tarea y lo anterior lo
siguiente:
a + b, a - b, a * b, traspuesta(a),
traspuesta(b), traza(a), traza(b),
sumatotal(a), sumatotal(b),
Matrices de cualquier tamaño
Es conveniente manejar las matrices de tamaño arbitrario
mediante un vector de una sola dimensión.
La matriz que se pasa como parámetro se pasa como un
apuntador.
Las funciones para manipular matrices se definen para un
tamaño máximo de elementos.
Ejemplo suma
Tamaño real de las matrices Debe especificarse máximo
tamaño

void sumaMat(int nrRow,int nrCol, int maxCol,


float *mat1, float *mat2, float *mat3) {
int i, j;
for( i=0; i<nrRow; i++ )
for( j=0; j<nrCol; j++ )
mat3[i*maxCol + j] = mat1[i*maxCol + j] +
mat2[i*maxCol + j];
// o: mat3[i*maxCol + j] = *(mat1 + i*maxCol + j)
// + *(mat2 + i*maxCol + j)
}
producto

void prodMat(int nrRow,int nrCol,


int maxCol,float *mat1, float *mat2, float *mat3)
{
int i, j, k;
for( i=0; i<nrRow; i++ )
for( j=0; j<nrCol; j++ ){
mat3[i*maxCol + j] = 0;
for( k=0; k<nrCol; k++ )
mat3[i*maxCol + j] += mat1[i*maxCol + k]
* mat2[k*maxCol + j];
}
}
Impresión

void printMat(int nrRow,int nrCol,


int maxCol,float *mat) {
int i, j;
for( i=0; i<nrRow; i++ ){
for( j=0; j<nrCol; j++ )
cout << mat[i*maxCol + j] << " ";
cout << endl;
}
cout << endl;
}
Ejemplo de programa principal
int main(void) {
int row=4, col=4;
float add, maxRow;
float a[MAXROW][MAXCOL] =
{{1,2,3,4},{3,2,1,1},{4,3,7,6},{4,5,5,6}};
float b[MAXROW][MAXCOL] =
{{4,5,7,1},{2,4,8,9},{3,3,0,0},{2,1,1,1}};
float c[MAXROW][MAXCOL];
printMat(row,col,MAXCOL,(float *) a);
printMat(row,col,MAXCOL,(float *) b);
sumaMat(row,col,MAXCOL,(float *) a,(float *)
b,(float *) c);
printMat(row,col,MAXCOL,(float *) c);
getch();
return 0;
}

También podría gustarte