You are on page 1of 25

ARRAYS

Un array es una estructura homognea, compuesta por varios


elementos, todos del mismo tipo y almacenados consecutivamente en
memoria. Cada elemento puede ser accedido directamente por el
nombre de la variable array seguido de uno o ms subndices
encerrados entre corchetes.

La representacin de los arrays se hace mediante variables suscritas o
de subndices y pueden tener una o varias dimensiones (subndices).
A los arrays de una dimensin se les llama tambin listas y a los de
dos dimensiones, tablas.
Desde el punto de vista matemtico, en ms de una ocasin
necesitaremos utllizar variables, tales como:

(En el caso de un subndice)
Y:

(En el caso de dos subndices)
En C++ , tendremos que recurrir a los arrays que se acaban de definir.

Por ejemplo, supongamos que tenemos un array unidimensional de
enteros llamado datos, el cual contiene tres elementos. Estos elementos
se identificarn de la siguiente forma:


Observe que los subndices son enteros consecutivos, y que el primer
subndice vale 0. Un subndice puede ser cualquier expresin entera.
As mismo, un array de dos dimensiones se representa mediante una
variable con dos subndices (filas, columnas); un array de tres
dimensiones se representa mediante una variable con tres subndices
etc.
El nmero mximo de dimensiones o el nmero mximo de elementos
para un array depende de la memoria disponible.


DECLARACION DE UN ARRAY
La declaracin de un array especifica el nombre del array, el nmero de
elementos del mismo y el tipo de stos. Segn su dimensin, cabe
distinguir entre arrays unidimensionales y arrays multidimensionales.

Arrays unidimensionales
La declaracin de un array de una dimensinse realiza de la siguiente
forma:
tipo nombre [tamao];
tipo nombre [ ];

donde tipo indica el tipo de los elementos del array, los cuales pueden
ser de cualquier tipo excepto void; nombre es un identificador que
nombra al array; y tamao es una constante entera que especifica el
nmero de elementos del array. Los corchetes modifican la
definicin normal del identificador para que sea interpretado por el
compilador como un array.
El tamao puede omitirse cuando se inicializa el array, cuando se
declara como un parmetro formal en una funcin o cuando se hace
referencia a un array declarado en otra parte del programa.

Ejemplos:

int lista[100]; // definicin del array lista con 100 elementos.

El ejemplo anterior declara una variable array denominada lista con 100
elementos (subindicados del o al 99), cada uno de ellos de tipo int.
El primer elemento es lista[o] (se lee lista sub-cero), el segundo lista[1]
etc.

char nombre[40]; /* definicin del array nombre con 40 elementos.

Este otro ejemplo declara una variable array denominada nombre con
40 elementos (subindicados del 0 al 39), cada uno de ellos de tipo char.
Un array puede ser inicializado en el momento de su definicin de la
siguiente forma:

int vector [5] = {10 , 20, 30, 40, 50};

o de esta forama:

int vector[] = {10, 20, 30, 40, 50};

La diferencia entre las definiciones anteriores est en que en la ltima,
no se ha indicado explcitamente el nmero de elementos. En este caso
el compilador lo calcula por el nmero de valores especificados.

La figura anterior nos dice algo ms; vector, que es el nombre del array,
es la direccin simblica donde se localiza el array en memoria. Para
acceder a un elemento se utiliza un subndice que le indica al
compilador cuntos elementos a partir de vector hay que desplazarse
para localizar dicho elemento. As, para acceder al elemento vector[0]
hay que desplazarse 0 elementos a partir de vector, para acceder
avector[l] hay que desplazarse un elemento a partir de vector, y as
sucesivamente.
El nombre de un array se corresponde con la direccin de comienzo del
array.
Un elemento de un array se puede utilizar exactamente igual que una
variable.
Por ejemplo, en las operaciones que se muestran a continuacin
intervienen variables subindicadas; esto es, elementos de un array:

int lista[100], k = 0, a = 0;
a = lista [1] + lista [99] ;
k = 50;
lista[k] += 1;
lista[k+1] = lista[k];

Observe que para referenciar un elemento de un array se puede
emplear como subndice una constante, una variable o una expresin
de tipo entero.

Realizar un programa que asigne datos a un array unidimensional a de
10 elementos y, a continuacin, escriba el contenido de dicho array.


La solucin ser como sigue:
Introducir los valores del arrav.
a[0]= 1
a[1] =2
a[2]= 3

1
2
3 ...

Fin del proceso.


Declaramos el array a y el subndice i para acceder a los elementos del
array.

int a[10];
int i = 0 //subndice

El paso siguiente es asignar un valor desde el teclado a cada elemento
del array.
for (i = 0; i < 10;i++)
{
cout<<"a[" <<i <<"]= ";
cin >>a[i];
}


Una vez ledo el array lo visualizamos para comprobar el trabajo
realizado.
cout<<"\n\n";
for (i = 0; i < 10; i++)
{
cout<<a[i] <<"\n";
}

El programa completo se muestra a continuacin

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int a[10]; // array a
int i = 0; // subndice
cout <<"Introducir los valores del array"<<"\n";
for (i = 0; i < 10;i++)
{
cout<<"a[" <<i <<"]= ";
cin >>a[i];
}

// Salida de datos
cout<<"\n\n";
for (i = 0; i < 10; i++)
{
cout<<a[i] <<"\n";


}
cout<<"Fin del proceso";
system("pause");
return 0;
}

Cuando definimos un arrray, el nmero de elementos del mismo
tiene que ser especificado por una constante entera y no por una
variable. Esto es, un intento de definir una array como se indica a
continuacin dara lugar a un error:
int n=0;
cout<<Numero de elementos del array;
cin>>n;
int a[n];

Error 1: Las declaraciones tienen que ir al principio
Error 2: n tienen que ser una constante entera



Ejemplo realizar un programa que lea las notas correspondientes a los
alumnos de un determinado curso, las almacene en un array y d como
resultado la nota media del curso.
Igual que hemos visto en los programas anteriores, en primer lugar
definiremos el array con un nmero mximo de elementos. En este caso
nos interesa que el array sea de tipo float para que sus elementos
puedan almacenar un valor real.
Tambin definiremos un ndice para acceder a los elementos del array,
una variable que contenga el nmero de alumnos y otra para almacenar
la suma total de todas las notas.

float notas[100]; //* array notas
int i = 0; /* ndice */
int nalumnos = 0; // nmero de alumnos
float suma = 0; // suma total de todas las notas */


A continuacin preguntamos al usuario del programa por el nmero de
alumnos y obligamos a que este valor sea mayor que cero y menor o
igual que el nmero mximo de elementos del arrav.
do
{
cout<<"Nro de alumnos: ";
cin>>nalumnos;
}
while (nalumnos < 1 || nalumnos > 100);
Despus, almacenaremos en el array las notas introducidas desde el
teclado.
for (i = 0; i < nalumnos; i++)
{
cout<<"Alumno nro,nota final: [ " << i+1 <<"] ";
cin>> notas [i] ;
}
El paso siguiente es sumar todas las notas. Utilizaremos para ello la
variable suma. Una variable utilizada de esta forma recibe el nombre
de acumulador. Es importante que observe que inicialmente su valor
es cero.

for (i = 0; i < nalumnos; i++)
{
suma += notas[i];
}

Por ltimo, calculamos la media y la visualizamos.

cout<<"\n" <<"Nota media de1 curso "<<suma/nalumnos
<<"\n";
El programa completo se muestra a continuacin.


#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
float notas[100]; //* array notas
int i = 0; /* ndice */
int nalumnos = 0; // nmero de alumnos
float suma = 0; // suma total de todas las notas */
do
{
cout<<"Nro de alumnos: ";
cin>>nalumnos;
}
while (nalumnos < 1 || nalumnos > 100);
//* Entrada de datos */
for (i = 0; i < nalumnos; i++)
{
cout<<"Alumno nro,nota final: [ " << i+1 <<"] ";
cin>> notas [i] ;
}

//* Sumar las notas */
for (i = 0; i < nalumnos; i++)
{
suma += notas[i];
}
//* Escribir resultados * /
cout<<"\n" <<"Nota media de1 curso "<<suma/nalumnos
<<"\n";

system("pause");
return 0;
}


Arrays multidimensionales
Un array multidimensional, como su nombre indica, es un array de dos
o ms dimensiones.
La declaracin de un array de varias dimensiones se hace as:
tipo nombre [expr-cte-1] [expr-cte-2] . . .;
tipo nombre [] [expr-cte]...;
El nmero de elementos de un array multidimensional es el producto de
las dimensiones indicadas por expr-cte-1, expr-cte-2,
Desde nuestro punto de vista, cuando se trate de arrays de dos
dimensiones, es ms fcil pensar en ellos como si de una tabla de m
fllas por n columnas se tratara.
Por ejemplo,



Para acceder a los elementos del array c, puesto que se trata de un
array de dos dimensiones, utilizaremos dos subndices, el primero
indicar la fila y el segundo la columna donde se localiza el elemento.
Segn esto, los elementos del affay c son:


Anlogamente a lo expuesto para los arrays unidimensionales, para
acceder a un elemento en un array de dos dimensiones, se utiliza un
subndice que le indica al compilador cuntas filas hay que desplazarse,
y otro que le indica cuntos elementos hay que avanzar en la fila actual,
para situarse en dicho elemento. As, para acceder al elemento c[1][2]
hay que desplazarse a partir de c 1 fila, y avanzar 2 elementos sobre la
fila actual. En definitiva, el clculo que hace el compilador para saber
cuntos elementos tiene que avanzar para acceder a un elemento
cualquiera c[fila][col] en un array de dos dimensiones es:
fila x elementos por fila + col

Como ejemplo de aplicacin de arrays multidimensionales, vamos a
realizar un programa que asigne datos a un array c de dos dimensiones
y a continuacin escriba las sumas correspondientes a las filas del
array. La ejecucin del programa presentar el aspecto siguiente:


Nmero de fila del array: 2
Nmero de columnas del array 2
c[0][0] = 2
c[0] [1] = 5
c[1] [0] =3
c[1] [1] =6

Fila 0, suma = 2
Fila 1, suma = 9

Para ello, en primer lugar definimos como constante el nmero
mximo de filas y de columnas del array.

float c[2] [2];

A continuacin declaramos las variables:

float sumafila; // suma de los elementos de una fila
int filas, cols; //Filas y columnas del array de trabajo
int fila, col; //Fila y columna del elemento accedido

Despus, leemos el nmero de filas y de columnas que en realidad
vamos a utilizar, comprobando que estos valores estn dentro del
rango permitido; esto es:
do
{
cout<<"Numero de filas del array: ";
cin>> filas;
}
while (filas < 1 || filas > 2);

do
{
cout<<"Nmero de columnas del array:";
cin>>cols;
}
while (cols < 1 || cols > 2);


El paso siguiente es asignar un valor desde el teclado a cada
elemento del array.

for (fila = 0; fila < filas; fila++)
{
for (col = 0; col < cols; col++)
{
cout<<fila <<col ;
cin>>c[fila][col];
}
}
Una vez ledo el array lo visualizamos para comprobar el trabajo
realizado.
// Escribir la suma de cada fIa
cout<<"\n";
for (fila = 0; fila < filas; fila++)
{
sumafila =0;
for (col = 0; col < cols; col++)
{
sumafila += c[fila] [col];
}
cout<<"fila" <<fila <<"\t"<<"suma =" <<sumafila <<"\n";

}




El programa completo
//*******x* suma de las filas de un array bidimensional

#include "stdafx.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
float c[2] [2]; //array c de dos dimen.
float sumafila; // suma de los elementos de una fila
int filas, cols; //Filas y columnas del array de trabajo
int fila, col; //Fila y columna del elemento accedido

do
{
cout<<"Numero de filas del array: ";
cin>> filas;
}
while (filas < 1 || filas > 2);

do
{
cout<<"Nmero de columnas del array:";
cin>>cols;
}
while (cols < 1 || cols > 2);



// Entrada de datos
for (fila = 0; fila < filas; fila++)
{
for (col = 0; col < cols; col++)
{
cout<<fila <<col ;
cin>>c[fila][col];
}
}

// Escribir la suma de cada fIa
cout<<"\n";
for (fila = 0; fila < filas; fila++)
{
sumafila =0;
for (col = 0; col < cols; col++)
{
sumafila += c[fila] [col];
}
cout<<"fila" <<fila <<"\t"<<"suma =" <<sumafila <<"\n";

}

system ("pause");
return 0;
}



Ingrese 12 nmeros en un arreglo bidimensional(Matriz) de 4x3 y
obtenga la suma de cada columna


#include "stdafx.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
//Variables
int s0=0,s1=0,s2=0,i,j;

//Arreglos
int n[4][3];

//Entrada

for(i = 0; i<=3; i++)
{
for (j = 0; j<=2; j++)
{
cout<<"Numero ["<<i<<"]" <<"["<<j<<"]"<<"=";
cin>>n[i][j] ;
}
}


//Proceso
for(i = 0; i<=3; i++)
{
s0 += n[i][0];
s1 += n[i][1];
s2 += n[i][2];

}


//Salida
cout<<"\n";
cout<<"Suma Col. 0: "<<s0<<"\n";
cout<<"Suma Col. 1: "<<s1<<"\n";
cout<<"Suma Col. 2: "<<s2<<"\n";
system ("pause");
return 0;
}





















En conclusion:

Arrays (Arreglos)
Es un conjunto finito (tamao fijo) y ordenado (usa un ndice) de datos
homogneos (datos del mismo tipo)
Los arreglos pueden ser de una dimensin (vector), dos dimensiones
(matriz) y n dimensiones (multidimensional).
En todo los lenguajes de programacin los arrays usan un ndice
numrico para cada elemento que contiene que por lo general inician
con el ndice 0, llamado Limite Inferior(LI) y el ltimo elemento tendr el
ndice llamado Limite Superior (LS), que en si es la cantidad de
elementos del array menos 1.



Arreglo de una dimensin
(Vector de 5 items)


0 1 2 3 4
15 12 18 14 12



LI 0 15
1 12 5 elementos (tems)
INDICE 2 18
3 14
LS 4 12










Arreglo de dos dimensiones
(Matriz de 3x4)




LI 2da Dimensin LS
(Columnas)



0 1 2 3
LI 0 25 10 15 32
1ra D 1 52 10 4 18
(Fila) 2 18 22 3 9
LS





Operaciones con Arrays

Las operaciones son el procesamiento y el tratamiento individual de
los elementos del attay que son:
Asignacin
Lectura/escritura
Recorrido
Actualizacin (insertar, borrar, modificar)
Ordenacin
Bsqueda




Ejercicios

1. Dado 5 nmeros obtener la suma

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//Variables
int s = 0,i;

//Arreglos
int n[5];

//Entrada
cout<<"Numero 1: "; cin>>n[0];
cout<<"Numero 2: "; cin>>n[1];
cout<<"Numero 3: "; cin>>n[2];
cout<<"Numero 4: "; cin>>n[3];
cout<<"Numero 5: "; cin>>n[4];

//Proceso
for(i = 0; i <= 4; i++)
s += n[i];

//Salida
cout<<"\n";
cout<<"Suma: "<<s<<"\n";
system("pause");
return 0;
}


2. Dados 5 nmeros obtener el nmero mayor

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//Variables
int m = 0,i;

//Arreglos
int n[5];

//Entrada
cout<<"Numero 1: "; cin>>n[0];
cout<<"Numero 2: "; cin>>n[1];
cout<<"Numero 3: "; cin>>n[2];
cout<<"Numero 4: "; cin>>n[3];
cout<<"Numero 5: "; cin>>n[4];

//Proceso
for(i = 0; i <= 4; i++){
if(n[i] > m)
m = n[i];
}

//Salida
cout<<"\n";
cout<<"Mayor: "<<m<<"\n";

system("pause");
return 0;
}




3. Dados 5 nmeros y un divisor determinar cuntos nmeros
mltiplos hay del divisor en los 5 nmeros ingresados

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//Variables
int d,i,c=0;

//Arreglos
int n[5];

//Entrada
cout<<"Numero 1: "; cin>>n[0];
cout<<"Numero 2: "; cin>>n[1];
cout<<"Numero 3: "; cin>>n[2];
cout<<"Numero 4: "; cin>>n[3];
cout<<"Numero 5: "; cin>>n[4];
cout<<"Divisor: "; cin>>d;

//Proceso
for(i = 0; i <= 4; i++){
if(n[i] % d == 0)
c += 1;
}

//Salida
cout<<"\n";
cout<<"Cantidad: "<<c<<"\n";


system("pause");
return 0;
}



4. Dados 5 nmeros obtener la cantidad de nmeros primos
ingresados

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//Variables
int c=0,i,j;
bool flag;
//Arreglos
int n[5];
//Entrada
cout<<"Numero 1: "; cin>>n[0];
cout<<"Numero 2: "; cin>>n[1];
cout<<"Numero 3: "; cin>>n[2];
cout<<"Numero 4: "; cin>>n[3];
cout<<"Numero 5: "; cin>>n[4];
//Proceso
for(i = 0; i<= 4; i++){
flag = true;
for(j = 2; j<=n[i]/2; j++){
if(n[i] % j == 0){
flag = false;
break;
}
}
if(flag)
c += 1;
}
//Salida
cout<<"\n";
cout<<"Cantidad: "<<c<<"\n";
system("pause");
return 0;
}
5. Busque un nmero en 7 nmeros ingresados, determine la posicin
y si existe o no el nmero buscado, use el mtodo de bsqueda
secuencial.
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//Variables
int nb,p,i;
string r = "";

//Arreglos
int n[7];

//Entrada
cout<<"Numero 1: "; cin>>n[0];
cout<<"Numero 2: "; cin>>n[1];
cout<<"Numero 3: "; cin>>n[2];
cout<<"Numero 4: "; cin>>n[3];
cout<<"Numero 5: "; cin>>n[4];
cout<<"Numero 6: "; cin>>n[5];
cout<<"Numero 7: "; cin>>n[6];
cout<<"Numero a buscar: "; cin>>nb;

//Proceso
r = "NO EXISTE";
p = -1;
for(i = 0 ; i <=6; i++) {
if(n[i] == nb){
r = "EXISTE";
p = i;
break;
}
}


//Salida
cout<<"\n";
cout<<"Respuesta: "<<r<<"\n";
cout<<"Posicion: "<<p<<"\n";
system("pause");
return 0;
}



6. Lea 4 nmeros y almacnelos en un vector llamado a y otros 4
nmeros en un vector llamado B determine cuntos nmeros de A
se encuentran en B.

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
//Variables
int c=0,i,j;

//Arreglos
int a[4];
int b[4];

//Entrada
cout<<"Arreglo A \n";
cout<<"========== \n";
cout<<"Numero 1: "; cin>>a[0];
cout<<"Numero 2: "; cin>>a[1];
cout<<"Numero 3: "; cin>>a[2];
cout<<"Numero 4: "; cin>>a[3];
cout<<"\n";
cout<<"Arreglo B \n";
cout<<"========== \n";
cout<<"Numero 1: "; cin>>b[0];
cout<<"Numero 2: "; cin>>b[1];
cout<<"Numero 3: "; cin>>b[2];
cout<<"Numero 4: "; cin>>b[3];


//Proceso
for(i = 0;i <=3; i++)
{
for(j = 0; j <=3; j++)
{
if(a[i] == b[j])
c += 1;
}
}

//Salida
cout<<"\n";
cout<<"Cantidad: "<<c<<"\n";

system("pause");
return 0;
}





Ejercicios propuestos:

1. Ingrese 6 nmeros en un arreglo de dos dimensiones (matriz) de
3x2 y obtenga la suma de los nmeros ingresados.

2. Almacene en una matriz de 3x2, 6 nmeros y obtenga la
cantidad de pares e impares.

3. Busque un nmero dentro de una matriz de 4x3 y determine la
posicin y si existe o no el nmero buscado, use el mtodo de
bsqueda secuencial

4. Dada la matriz A de 2x2, la matriz B de 2x2, obtenga la suma de
dichas matrices.