Вы находитесь на странице: 1из 10

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

7. ALMACENAMIENTO
(ARRAYS)

DE DATOS EN ARREGLOS

Para resolver algunos problemas es necesario manejar datos del mismo tipo; los
arreglos nos permiten mantener en memoria datos sin necesidad de disponer de una
variable por cada elemento, adems almacenar y manipular grandes cantidades de
datos.
Los arreglos son un conjunto de variables que en la memoria ocupan posiciones
continuas de almacenamiento y que tienen un mismo nombre. El grupo de variables
que conforman un arreglo tienen las mismas caractersticas, es decir, son de la misma
clase (numrica o alfanumrica); y adems tienen el mismo tamao, luego es un
conjunto finito y ordenado de elementos homogneos.
El tipo de dato almacenado en un arreglo puede ser cualquiera: numrico, carcter o
lgico. Por ejemplo se puede almacenar en un arreglo los nombres de los estudiantes
de un curso, la temperatura mnima registrada en una ciudad durante una semana o las
coordenadas de una figura en el plano cartesiano.
Los arreglos pueden ser: unidimensionales, bidimensionales o multidimensionales. A
los arreglos de una dimensin se denominan listas o vectores, a los de dos dimensiones
se les llama tablas o matrices, a los de ms dimensiones se les denomina arreglos de n
dimensiones.

7.1 ARREGLOS UNIDIMENSIONALES


Los arreglos de una dimensin, llamados tambin listas o vectores, permiten almacenar
datos que tienen las mismas caractersticas. Se caracterizan por tener un solo subndice.
Por ejemplo: nombres, sueldos, edades, temperatura, talla, etc.
En general se puede visualizar un arreglo de una dimensin de la siguiente forma:
NOMBRE:
POSICION:

talla
0

1.35

1.45

1.65

1.23

1.66

1.42

1.50

1.75

CONTENIDO

1.65

ELEMENTO

talla[0] talla[1] . . .

1.60
Talla[9]

Esto es el arreglo talla tiene 10 elementos: talla[0] contiene 1.65, talla[1] contiene
1.35, talla[2] contiene 1.45, talla[3] contiene 1.65 y as sucesivamente, el ltimo
elemento, talla[9] contiene 1.60.
Si el nombre del arreglo es a, entonces a[0] es el nombre del elemento que est en
la posicin 1, a[1] es el nombre del elemento que est en la posicin 2.
En
general, el elemento i-simo, a[i], est en la posicin i+1. Estos nmeros se
denominan ndices o subndices del arreglo.

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

DECLARACIN DE UN VECTOR EN C++


Al igual que las variables, un arreglo se debe declarar antes de utilizarlo y se hace de
modo similar a las variables, con la precaucin de mencionar el nmero de elementos
que contendr el arreglo entre los corchetes cuadrados:
Sintaxis de la instruccin:
Tipo_de_dato nombre_del_arreglo[numero de elementos]
Por ejemplo, para crear una lista de diez datos enteros con el nombre edades se escribe:
int edades[10];
Esto hace que el compilador reserve espacio suficiente para contener diez valores
enteros, bajo el nombre edades. Los enteros ocupan 2 bytes, de modo que un arreglo
de diez enteros ocupara 20 bytes de memoria.
Se puede declarar uno o ms arreglos del mismo tipo en una misma instruccin as:
float b[10], c[7], d[4];

INICIALIZACIN DE UN VECTOR EN C++


Una vez declarado el arreglo y antes de utilizarlo, se le debe asignar valores a cada
elemento, esto es, proporcionarle los datos que almacenar al arreglo. Para asignar
estos valores podemos proceder de las siguientes tres maneras:

En la declaracin del arreglo, as:


int edades[10]={12,16,20,18,17,11,10,16,19,20};

En este caso cada uno de los 10 elementos del arreglo edades asume su valor. En el
caso de que le faltaran valores, los asumira con ceros; por el contrario si sobran
elementos, se produce un error.

Inicializar en ceros todo el arreglo:

int nota[8]={0};
En este caso cada uno de los 8 elementos del arreglo n asume valor 0.

Utilizando una estructura de repeticin como while, do-while o for:


for(i=0;i<=9;i++)
unos[i]=1;

En este caso cada uno de los 10 elementos del arreglo unos,

asume el valor de 1.

Ejemplo.
Definir un vector que contenga las edades de 10 alumnos. Calcular y escribir la cantidad
de alumnos mayores de edad y la cantidad de menores de edad.
2

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

Variables: EDAD: Vector


X: Sub-ndice
C1: Cantidad de mayores de edad
C2: Cantidad de menores de edad
PSEUDOCODIGO

CODIGO EN C++

Inicio
C1 0
C2 0
para X 0,9,1 hacer
leer EDAD[X]
si (EDAD[X] >= 18) entonces
C1 C1+1
sino
C2 C2 + 1
fin si
fin para
escribir C1,C2
Fin

//Cargar un vector con las edades de 10 alumnos


//calcula la cantidad de alumnos mayores y menores de edad
#include<iostream>
using namespace std;
int main()
{
int EDAD[10], c1=0, c2=0,x;
cout<<"Escriba la edad de los estudiantes :";
for(x=0; x<10; x++)
cin>>EDAD[x];
cout<<"\n\n";
for(x=0; x<10; x++)
{
cout<<" "<<EDAD[x]<<" ";
if(EDAD[x] >=18)
c1++;
else
c2++;
}
cout<<"\nMayores de edad "<<c1;
cout<<" Menores de edad "<<c2<<endl;
system("pause");
return 0;
}

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

7.2. ARREGLOS BIDIMENSIONALES


Los arreglos de dos dimensiones, llamados tambin tablas o matrices, se caracterizan
por tener dos ndices. Por ejemplo: nombres por dependencia, sueldos por
rangos, edades por estrato, temperatura por zonas, talla por edades, etc.
En el siguiente ejemplo: El nombre del arreglo es a, es un arreglo de cuatro filas por
tres columnas, para un total de doce elementos.

Cada uno de los elementos de a, est identificado por un nombre de elemento de la


forma: a[i],[j], donde i corresponde a la fila y j a la columna.
En el siguiente ejemplo:

Cada elemento representa el cdigo de un trabajador cualquiera. Si a este conjunto


de cdigos organizados por filas y columnas, se le asigna el nombre IDENTI, se puede
hacer referencia a cualquier elemento del arreglo bidimensional agregando al nombre
IDENTI, dos nmeros separados por una coma y encerrados entre parntesis
(subndices). El primer nmero indica siempre la fila a la cual se hace referencia, y el
segundo indica la columna.
IDENTI[2],[3] = 690
IDENTI[2],[0] = 300
IDENTI[3],[3] = 800
IDENTI[0],[3] = 280

7.2.1. DECLARACIN DE UNA TABLA EN C++


Los arreglos de dos dimensiones se deben declarar antes de ser utilizados,
con la precaucin de mencionar el nmero de elementos: renglones y
columnas,
entre corchetes cuadrados.
Sintaxis de la instruccin:
Tipo_de_dato nombre_del_arreglo[numero_de_renglones][numero_de_columnas]
Por ejemplo, para crear una tabla de tres renglones por diez columnas, de tipo
4

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

numrico real y de nombre datos se escribe:


float datos[3][10];

7.2.2. INICIALIZACIN DE UNA TABLA EN C++


Las tablas se inicializan usando alguna de las siguientes tres formas:

En la declaracin del arreglo:

int tabla[2][3]={51,21,26,18,20,30};
otra forma:
int tabla[2][3]={{51,21,26},{18,20,30}};

Mencionando los elementos por cada rengln y separndolos por comas o


especificando cada rengln en unas llaves. Si faltaran mencionar elementos, C++
llena los que faltaran con ceros.
De cualquier forma el arreglo anterior se
almacenara as:
tabla
51
18

21
20

26
30

Inicializar en ceros todo el arreglo:

float ventas[12][5]={0.0};

En este ejemplo se define un arreglo de 12 renglones por 5 columnas. Se coloca entre


llaves el valor cero punto cero, por ser de tipo float (cero enteros, cero decimales).

Utilizando una estructura de repeticin como while, do-while o for:


for(filas=0; filas<numerodefilas; filas++)
{
for(columnas=0;columnas<numerodecolumnas; columnas ++)
{
Procesar elemento[filas] [columnas]=expresin;
}

}
En esta sentencia se requiere utilizar dos instrucciones repetitivas anidadas,
se recomienda que sean for, de tal forma que la primera controla los renglones y la
segunda o ms interna, controla las columnas.
As cuando termine de llenar los
elementos del primer rengln, al hacer el recorrido por cada una de las columnas, se
pasa al segundo rengln, se inicia de nuevo el proceso de llenar todo el rengln y se
pasa al tercero y as sucesivamente hasta terminar toda la tabla.

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

Ejemplo.

Elaborar un algoritmo para guardar en la memoria las notas de 20 estudiantes de un


curso en las siete asignaturas que toman.
VARIABLES: NOTA: Arreglo bidimensional que almacena las notas de los 20
estudiantes del curso en las siete asignaturas.
J: Variable individual que se utiliza para modificar los sub-ndices que maneja las filas.
K: Variable individual que se utiliza para modificar los sub-ndices que maneja
las columnas.
PSEUDOCODIGO

Inicio
para J 0,19,1 hacer
para K 0,6,1 hacer
Leer NOTA[J],[K]
fin_para
fin_para
para J 0,19,1 hacer
para K 0,6,1 hacer
Escribir NOTA[J],[K]
fin_para
fin_para
fin

7.3.

CODIGO EN C++
//Programa que carga un vector con las edades de 10 alumnos
//calcula la cantidad de almnos mayores y menores de edad
#include<iostream>
using namespace std;
int main()
{
int J, K;
float NOTA[20][6];
//Captura de notas
for(J=0; J<=19; J++)
{
cout<<"\nEscriba las notas del estudiante " <<J+1<<endl;
for(K=0; K<=5; K++)
cin>>NOTA[J][K];
}
//Impresion de notas
cout<<endl<<endl;
for(J=0; J<=19; J++)
{
for(K=0; K<=5; K++)
cout<<"\n"<<NOTA[J][K];
cout<<endl;
}
system("pause");
return 0;
}

ARREGLOS MULTIDIMENSIONALES

C++ proporciona la posibilidad de definir arreglos de varias dimensiones o


multidimensionales,
as por ejemplo: Podemos pensar en un arreglo tres
dimensiones como un cubo que se
caracteriza por tener tres
ndices,
que se
construye con la dimensin vertical o filas, la dimensin horizontal o columnas
y la dimensin de profundidad o planos. Si lo comparamos con Excel, podramos
decir que un dato tiene direccin de columna, fila y hoja. Por ejemplo podemos tener
las ventas de una cadena de almacenes, donde las organizamos por sucursal, ciudad y
ao.
Para inicializar un arreglo tridimensional o de ms dimensiones, obramos de la misma
manera que con las tablas, utilizando una estructura de repeticin for, para inicializar
un arreglo de tres dimensiones, as:
6

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

for(pagina=0; pagina<numpaginas; paginas++)


{
for(filas=0; filas<numfilas; filas++)
{
for(columnas=0; columnas <numcolumnas; columnas ++)
{
Procesar elemento[i_pagina][i_filas][j_columnas]=expresin;
}
}
}
Por ejemplo podemos utilizar una estructura de repeticin for, para inicializar un
arreglo de tres dimensiones de tamao 2 x 3 x 5 y que llenamos con unos (1):
/*programa que llena de unos un arreglo de tres dimensiones*/
#include<iostream>
using namespace std;
int main()
{
int v[2][3][5],k,i,j;
//INICIALIZACION DEL ARREGLO
for(k=0;k<2;k++)
{
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
v[k][i][j]=1;
}
}
}
//IMPRESION DE LOS DATOS
for(k=0;k<2;k++)
{
cout<<"====="<<"DIMENSION "<<k<<" ==============="<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
cout<<v[k][i][j]<<" ";
cout<<"\n";
}
}
}
system("pause");
return 0;
}

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

Se declara un arreglo, de nombre v, de tamao 2 por 3 filas por 5 columnas.


La primera sentencia for, para el control de las 3 dimensiones del arreglo con el ndice
k. La segunda sentencia for externa, para el control de los renglones con el ndice i.
La tercera sentencia for interna, para el control de las columnas con el ndice ciclo j.
EJEMPLOS:
EJEMPLO 1
Una esfera es lanzada horizontalmente desde diferentes alturas: 15,25, 35, 49, 68,
80,99; calcular el tiempo que dura la esfera en el aire.

/*Una esfera es lanzada horizontalmente desde diferentes alturas:


15,25,35,49,68,80,99; calcular el tiempo que dura la esfera en el aire.*/
#include<iostream>
using namespace std;
int main()
{
double vector1[7]= {15,25,35,49,68,80,99};
double vector2[7];
int i;
for(i=0;i<7;i+)
{
vector2[i]=sqrt((2* vector1[i])/9.8);
}
cout<<"METROS"<<'\t'<<"TIEMPO DE CAIDA "<<'\n';
for(i=0;i<7;i++)
{
cout<<vector1[i]<<'\t'<<vector2[i]<<'\n';
}
system("pause");
return 0;
}
8

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

EJEMPLO 2
Hacer un programa en C++ que muestre el nmero de pasajeros que lleva un
avin. Cada avin tiene 50 filas de asientos por 6 columnas.
Para efectos de
sistematizacin, un asiento ocupado se representa mediante un uno y un asiento libre
con un cero.
/*PROGRAMA QUE MUESTRA EL NUEMRO DE PASAJEROS QUE LLEVA UN AVION EL AVION TIENE
50 FILAS DE ASIENTOS POR SEIS COLUMNAS UN ASIENTO OCUPADO SE
REPRESENTAMEDIANTE UN UNO Y UN ASIENTO LIBRE CON UN CERO*/
#include<iostream>
using namespace std; int
main()
{
int avion [50][6],o=0,d=0,i,j;
for (i=0; i<50; i++)
{
for(j=0; j<6; j++)
{
cout<<"INGRESE (1) SI EL ASIENTO ESTA OCUPADO Y (0) SI ESTA
DESOCUPADO"<<endl;
cout<<"de la fila "<<i+1<<" columna
"<<j+1<<endl;
cin>>avion[i][j];
if(avion[i][j]==1)
o++;
else
if(avion[i][j]==0)
d++;
}

}
for (i=0; i<50; i++)
{
for(j=0; j<6; j++)
{
cout<<avion[i][j]<<"\t";
cout<<"\n\n";
}
}
cout<<"EL NUMERO DE ASIETOS OCUPADOS ES "<<o<<endl;
cout<<"EL NUMERO DE ASIENTOS LIBRES ES "<<d<<endl;
system("pause");

return 0;
}

UNIVERSIDAD MILITAR NUEVA GRANADA

CENTRO DE SISTEMAS

10