Está en la página 1de 27

Arreglos

Computcin

Definicin
Un arreglo es una coleccin de elementos del mismo tipo que
se reconocen por un solo identificador.
Para acceder a los elementos individuales de un arreglo se
utiliza un subndice que debe ser un nmero entero.
Arreglo con nombre a
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]

56
56
91
0
-3224
100
62
12

Nmero de la posicin 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 ubicacin 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 terminacin exitosa
} // fin de main

Inicializacin de un arreglo
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
int main()
{//utiliza una lista de inicializacin 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 terminacin exitosa
} // fin de main

Otra inicializacin
Variable constante
int main()
{ // la variable constante se puede utilizar para
//especificar el tamao 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 terminacin 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 terminacin 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 lnea de salida
} // fin de la estructura for externa
return 0; // indica terminacin exitosa
} // fin de main

La criba de Eratstenes
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 desviacin estandar de
un arreglo de valores.
n

x x

i 1

x
i 1

n 1

Paso de arreglos a funciones


Para pasar un arreglo a una funcin debemos conocer su tamao
para poder saber cuantos elementos se van a procesar.
Para esto declare la funcin con un parmetro extra para pasar el
nmero de elementos a la funcin

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;
}

Modificacin 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 funcin.
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;
}

Ordenacin
La operacin de ordenacin es de las ms comunes en
computacin.
#include <iostream.h>
#include <conio.h>
void Burbuja(int a[],int tam){
for(int i = 0; i< tam - 1 ;
i++)
for(int j = i; j< tam;j++)
if(a[i]>a[j]){
int temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}

int main(){
int b[20] =
{1,2,3,2,4,3,
5,6,3,7,8,9,
4,5,3,5,3,4,5,6};
Burbuja(b,20);
for(int i =0; i<20; i++)
cout << b[i] << endl;
getch();
return 0;
}

Bsqueda
Otra operacin importante es la bsqueda 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]

inicializacin
int a[5][4] = {{2,3,4,2},{2,0,6,1},
{3,5,5,0},{2,2,1,1},{3,2,5,6}};

inicializacin (cont.)
int a[5][4] = {{2,3},{1},
{3,5,5,0},{2},{3}};

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 lnea de salida
} // fin de la estructura for externa
} // fin de la funcin 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 terminacin exitosa
} // fin de main

Operaciones con matrices


Se puede utilizar la tcnica vista anteriormente para matrices de
tamao fijo.
Si las matrices que se van a manipular son de 3x3 la funcin para
sumar podra 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


impresin 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 funcin para obtener la
traspuesta de una matriz de 3x3.
Escriba una funcin que calcule la suma de
todos los elementos de una matriz de 3x3
Escriba una funcin que calcule la traza de
una matriz de 3x3
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),

4
8.7 6.3
5.6 2.3 3.4
6.5 8.7 5.4
7.5 0
6
12 9 2.3
4 5
0

Matrices de cualquier tamao


Es conveniente manejar las matrices de tamao arbitrario
mediante un vector de una sola dimensin.
La matriz que se pasa como parmetro se pasa como un
apuntador.
Las funciones para manipular matrices se definen para un
tamao mximo de elementos.

Ejemplo suma
Tamao real de las matrices

Debe especificarse mximo


tamao

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];
}
}

Impresin
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