You are on page 1of 8

Arreglos En Lenguaje C

Arreglo.- Es una coleccin de variables del mismo tipo que se referencian utilizando un
nombre comn. Un arreglo consta de posiciones de memoria contigua. La direccin ms
baja corresponde al primer elemento y la ms alta al ltimo. Un arreglo puede tener una o
varias dimensiones. Para acceder a un elemento en particular de un arreglo se usa un ndice.
Arreglos unidimensionales y multidimensionales. En el lenguaje C++ un arreglo se le
conoce como un tipo de dato compuesto. Los arreglos pueden tener una o varias
dimensiones.

ndice de un arreglo
Todo arreglo esta compuesto por un numero de elementos. El indice es
un numero correlativo que
indica la posicion de un elemento del arreglo. Los indices en C++ van
desde la posicion 0 hasta la
posicion tamano 1.
Elemento de un arreglo
Un elemento de un arreglo es un valor particular dentro de la estructura
del arreglo. Para acceder a un
elemento del arreglo es necesario indicar la posicion o indice dentro del
arreglo. Ejemplo:
arreglo[0] //Primer elemento del arreglo

Arreglo Unidimensional o VECTOR


Es un arreglo de una sola dimensin, para indicar a qu elemento nos referimos, se necesita
especificar un slo nmero o ndice, que corresponde a la posicin relativa de dicho
elemento dentro del arreglo.
Los arreglos, al igual que las dems variables deben declararse antes de poder
utilizarlas, y cumplen con las mismas reglas de alcance y vida.

Los arreglos de una sla dimensin reciben tambin el nombre de vectores. La sintaxis de
la declaracin de un arreglo unidimensional es la siguiente:
tipo-base identificador[NumElementos] ;

Observaciones:

El tipo-base puede ser cualquiera de los tipos bsicos del lenguaje, o


incluso algunos complejos como estructuras. Cada elemento del arreglo
ser del tipo definido aqu.
El identificador es el nombre que distinguir el arreglo.
Los corchetes [] son obligatorios.
El trmino NumElementos determina el tamao del arreglo, es decir, la
cantidad de elementos del tipo base que contendr. Dichos elementos
estarn numerados consecutivamente, empezando en 0.

Es posible declarar un arreglo unidimensional y al mismo tiempo inicializar sus


elementos con valores del tipo base. La sintaxis para hacer esto es la siguiente:
<tipo-base> <identificador>[<NumElementos>] = { valor1,
valor2, ... };

Observaciones:

Con los valores indicados entre llaves {} se inicializarn los elementos


del arreglo.

Los valores deben ser del <tipo-base> del arreglo.


Si se incluyen menos valores que elementos en el arreglo, los
ltimos sern inicializados en cero.

Si se hace inicializacin, es posible omitir el tamao del arreglo y dejar que el


compilador lo deduzca a partir de los valores asignados. Ver ejemplo ms
abajo.

La declaracin de estructuras complejas, como los arreglos, se hace a partir de tipos


existentes, por lo que es posible declarar variables de un tipo simple y arreglos con ese tipo
como base, en una misma lnea. Por ejemplo, en la siguiente declaracin se est definiendo
una variable entera, llamada numero, y al mismo tiempo un arreglo con 100 enteros,
numerados de 0 a 99, y llamado vec:
int numero, vec[100];

Se accede a los elementos del arreglo por medio de ndices. En el lenguaje C todos los
arreglos empiezan por 0 (cero); esto quiere decir que si se quiere acceder al primer
elemento de un arreglo se utiliza 0 para el ndice.
Para asignar un valor a un elemento del arreglo, se coloca el arreglo del lado izquierdo de la
asignacin:
X[8] = 12;

EJEMPLO:
El siguiente programa realiza la lectura de 10 datos y calcula la suma de los mismos:
#include <stdio.h>
#include <conio.h>
main()
{
int i,sum,x[9];
sum=0;
for (i=0; i<10; i++)
{
printf ("INTRODUCE EL DATO % d : ", i);
scanf ("%d", &x[i]);
sum = sum + x[i];
}
printf ("\nEL VECTOR ORIGINAL ES :");
for (i=0; i<10; i++)
{
printf ("\n%d ", x[i]);
}
printf ("\n\n LA SUMA DEL VECTOR ES : % d", sum);
getch();
}

Bidimensionales (tablas o matrices)


Una tabla bidimensional es una matriz de datos del mismo tipo. La siguiente
instruccin declara datos como una tabla de enteros de dimensin 2x3:
int datos [2][3];
Podemos pensar en datos como en una matriz con dos filas y tres columnas.
El programa de abajo suma dos matrices de dimensin 2x3 y escribe el

resultado en la pantalla del ordenador. Las matrices se leen de un archivo de


texto mediante bucles for anidados, es decir, uno dentro del otro.
Una forma sencilla de entender el funcionamiento de los bucles anidados es
pensar en ellos como en un cuenta kilmetros. Hasta que no da una vuelta el
contador de la derecha, no avanza el contador que est a la izquierda.
En el caso de los bucles, el bucle ms interno se corresponde con el contador
de la derecha. Por ejemplo, la siguiente instruccin
for (i=0; i<2; i++)
for (j=0; j<3; j++)
printf ("%d %d\n", i, j);
escribe lo siguiente en la pantalla
0
0
0
1
1
1

0
1
2
0
1
2

Las macros FILAS y COLUMNAS del programa permiten cambiar fcilmente la


dimensin de las matrices sin mucho esfuerzo. Todo el cdigo utiliza estas
macros en lugar de constantes que habra que cambiar a mano si quisiramos
adaptar el programa.

El lenguaje C permite el uso de matrices, es decir, arrays bidimensionales. En general, todo


lo que vamos a estudiar en esta seccin se puede extrapolar a arrays incluso ndimensionales (o tensores), aunque en la prctica el uso de arrays con ms de 2
dimensiones no es muy comn. La declaracin de una matriz o array bidimensional es:
tipo variable_matriz[N][M];

Donde N y M son el nmero de filas y de columnas respectivamente (la dimensin de la


matriz). Se ha escrito la dimensin con letras maysculas, ya que deben ser constantes, y al
igual que con vectores se suelen definir con constantes, por ejemplo:
#define N 4 //nmero de filas de las matrices que voy a declarar
#define M 5 //nmero de columnas de las matrices que voy a declarar
main()
{
double matriz1[N][M], matriz2[N][M];

int matriz_entera[N][M];
...

Multidimensionales (tres o ms dimensiones)


Es una estructura de datos estatica y de un mismo tipo de datos, y de longitud fija
que almacena datos
de forma matricial. De igual forma que los arreglos unidimensionales, el
almacenamiento de los datos
en la memoria se realiza de forma secuencial y son accedidos mediante indices.
Los arreglos
multidimensionales son tambien conocidos como matrices. Por lo tanto se llama
matriz de orden
"mn" a un conjunto rectangular de elementos dispuestos en filas "m" y en
columnas "n", siendo m y n
numeros naturales. Las matrices se denotan con letras mayusculas: A, B, C, ... y
los elementos de las
mismas con letras minusculas y subindices que indican el lugar ocupado: a, b,
c, ... Un elemento
generico que ocupe la fila i y la columna j se escribe i,j. Si el elemento generico
aparece entre
parentesis tambien representa a toda la matriz: A (i,j).
Una matriz de orden 3x4 se muestra a continuacion, siendo M una matriz de 3 filas
y 4 columnas, la representacion grafica de sus posiciones seria la siguiente:
M 3x4
Filas = 3, columnas = 4

Matrices cuadradas
Una matriz cuadrada es una matriz que tiene el mismo numero de filas y
columnas. La matriz que se

muestra a continuacion es de orden 3x3.

Declaracin de arreglos multidimensionales


La sintaxis es la siguiente:

tipo_dato identificador [dimensin1] [dimensin2] ... [dimensinN] ; Donde N


es un nmero
natural positivo.

Ejemplo Arreglo de dos dimensiones de orden 2x3.


char m[2][3] ;

Declaracion
char m[2][3]; // forma una tabla de dos filas y tres columnas
// cada fila es un arreglo de una dimensin

// la declaracion indica que hay dos arreglos de una dimension


Nombre del grupo
m indica la localizacion del grupo en la memoria
Nombre de las filas
Ejemplo 5. Llenado de un arreglo de enteros de dimension 3x2. En este
ejemplo el llenado lo realiza el
usuario, en otros ejemplos se vera como realizar llenado de matrices
mediante asignacion automatica,
calculos de operaciones, etc.
1.
2.
3.
4.

#include <iostream>
using namespace std;
int main()
{

5. int matriz [3][2];


6. int valor;
7. for(int i=0;i<3;i++) // Recorre las filas de la matriz
8. {
9. for(int j=0; j<2;j++) // Recorre las columnas de la matriz
10. {
11. cout<<"Ingrese el valor de la matriz en la posicion
["<<i<<","<<j<<"]"<<endl;
12. cin>>valor;
13. matriz[i][j] = valor;
14. }
15. }
16. // Imprimiendo el arreglo en formato matricial
17. for(int i=0;i<3;i++)
18. {
19. cout<<"|";
20. for(int j=0; j<2;j++)
21. {
22. cout<<"\t"<<matriz[i][j]<<"\t";
23. }
24. cout<<"|"<<endl;
25. }
26. return 7
27.}