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