25
ARRAYS Un array es una estructura homogénea, 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 más subíndices encerrados entre corchetes. La representación de los arrays se hace mediante variables suscritas o de subíndices y pueden tener una o varias dimensiones (subíndices). A los arrays de una dimensión se les llama también listas y a los de dos dimensiones, tablas. Desde el punto de vista matemático, en más de una ocasión necesitaremos utllizar variables, tales como: (En el caso de un subíndice) Y: (En el caso de dos subíndices) 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 identificarán de la siguiente forma:

Guia6LP

Embed Size (px)

Citation preview

  • 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
  • Una vez ledo el array lo visualizamos para comprobar el trabajo realizado. cout
  • 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; coutn; 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 { coutnalumnos; } while (nalumnos < 1 || nalumnos > 100);

  • Despus, almacenaremos en el array las notas introducidas desde el teclado. for (i = 0; i < nalumnos; i++) { cout
  • //* Entrada de datos */ for (i = 0; i < nalumnos; i++) { cout
  • 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 filas; } while (filas < 1 || filas > 2); do { coutcols; } 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

  • El programa completo //*******x* suma de las filas de un array bidimensional #include "stdafx.h" #include 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 filas; } while (filas < 1 || filas > 2); do { coutcols; } while (cols < 1 || cols > 2); // Entrada de datos for (fila = 0; fila < filas; fila++) { for (col = 0; col < cols; col++) { cout
  • } // Escribir la suma de cada fIa cout
  • Ingrese 12 nmeros en un arreglo bidimensional(Matriz) de 4x3 y obtenga la suma de cada columna

    #include "stdafx.h" #include 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

  • cout
  • 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 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //Variables int s = 0,i; //Arreglos int n[5]; //Entrada coutn[0]; coutn[1]; coutn[2]; coutn[3]; coutn[4]; //Proceso for(i = 0; i

  • 2. Dados 5 nmeros obtener el nmero mayor #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //Variables int m = 0,i; //Arreglos int n[5]; //Entrada coutn[0]; coutn[1]; coutn[2]; coutn[3]; coutn[4]; //Proceso for(i = 0; i m) m = n[i]; } //Salida cout
  • 3. Dados 5 nmeros y un divisor determinar cuntos nmeros mltiplos hay del divisor en los 5 nmeros ingresados

    #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) {

    //Variables int d,i,c=0; //Arreglos int n[5]; //Entrada coutn[0]; coutn[1]; coutn[2]; coutn[3]; coutn[4]; coutd; //Proceso for(i = 0; i

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

    #include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //Variables int c=0,i,j; bool flag; //Arreglos int n[5]; //Entrada coutn[0]; coutn[1]; coutn[2]; coutn[3]; coutn[4]; //Proceso for(i = 0; i

  • 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 #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //Variables int nb,p,i; string r = ""; //Arreglos int n[7]; //Entrada coutn[0]; coutn[1]; coutn[2]; coutn[3]; coutn[4]; coutn[5]; coutn[6]; coutnb; //Proceso r = "NO EXISTE"; p = -1; for(i = 0 ; i

  • //Salida cout
  • cout
  • 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.