Vous êtes sur la page 1sur 12

Profesor: Balderas Lpez Fausto Antonio. Alumno: Nez Martnez Luis Enrique. Nmero de Control: 09071569.

Carrera: Ingeniera Industrial. Grupo: 7j2I Semestre: 2 Horario: Lunes, Martes, Mircoles, Jueves y Viernes.
14:00 - 15:00 hrs.

Materia: Algoritmos y Lenguaje de Programacin. Trabajo: Investigacin (Arreglos).

ARREGLOS (VECTORES O MATRICES)


Definicin
Un Arreglo (matriz o vector, llamados en ingls arrays) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lgico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). En principio, se puede considerar que todas las matrices son de una dimensin, la dimensin principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las ms fciles de imaginar son los de una, dos y tres dimensiones. Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sera ms adecuado utilizar una lista, ya que esta estructura puede cambiar de tamao fcilmente durante la ejecucin de un programa. Un arreglo: No es una variable; es un grupo de variables conocidas como elementos Cada elemento ocupa una posicin dentro del grupo Todos los elementos son del mismo tipo El nombre del arreglo indica donde se localiza el grupo en la memoria de la computadora Los arreglos se clasifican de acuerdo a las dimensiones que tengan Las dimensiones no tienen relacin con el plano Cartesiano; nada que ver con matemtica Las dimensiones indican como estn organizados los elementos dentro del grupo Los arreglos de dos dimensiones pueden visualizarse como tablas Los valores que se guarden en el arreglo se almacenan en los elementos ya que los elementos son las variables

ndice
Todo vector se compone de un determinado nmero de elementos. Cada elemento es referenciado por la posicin que ocupa dentro del vector. Dichas posiciones son llamadas ndice y siempre son correlativos. Existen tres formas de indexar los elementos de una matriz:

Indexacin base-cero (0): En este modo el primer elemento del vector ser la componente cero ('0') del mismo, es decir, tendr el indice '0'. En consecuencia, si el vector tiene 'n' componentes la ltima tendr como ndice el valor 'n-1'. El C es un ejemplo tpico de lenguaje que utiliza este modo de indexacin. Indexacin base-uno (1): En esta forma de indexacin, el primer elemento de la matriz tiene el indice '1' y el ltimo tiene el ndice 'n' (para una matriz de 'n' componentes). Indexacin base-n (n): Este es un modo verstil de indexacin en la que el ndice del primer elemento puede ser elegido libremente, en algunos lenguajes de programacin se permite que los ndices puedan ser negativos e incluso de cualquier tipo escalar (tambin cadenas de caracteres).

Declaracin de Arreglos
nombre_variable[ndice] = expresin del tipo <tipo>
Esta instruccin asigna el valor asociado de la expresin a la posicin ndice del arreglo nombre_variable. El ndice debe ser una expresin del tipo entero en el rango [0, longitud-1]. Cabe destacar que C++ no chequea que el valor de la expresin sea menor a longitud, simplemente asigna el valor a esa posicin de memoria como si formara parte del arreglo, pisando, de esta manera, otros datos que no forman parte del mismo, con lo que finalmente el programa no funciona correctamente. Declaracin en C/C++ de un arreglo esttico. int v[5]; int i; for (i=0 ; i<5 ; i++) { v[i] = 2*i; } Declaracin en C++ de un arreglo de STL:

#include <vector> vector<int> v; // Si no se especifica el tamao inicial es 0 for (int i=0 ; i<5 ; i++) { v.push_back(2*i); // inserta un elemento al final del vector } El ejemplo anterior est hecho para el lenguaje C++. En C, para crear arreglos dinmicos se tendran que utilizar las instrucciones malloc y realloc para reservar memoria de forma dinmica (ver librera stdlib.h), y la funcin por free para liberar la memoria utilizada.

Resultado:

0 1 2 3 4 0 2 4 6 8
El resultado de los dos ejemplos es el mismo arreglo

Forma de acceso al Arreglo

nombre_variable[ndice] es valor del tipo <tipo> que puede ser asignado a una variable, o pasado como parmetro, imprimirlo, etc. Aqu tambin vale la aclaracin de que el ndice debe estar dentro del rango de definicin del arreglo, C++ no chequear que esto sea cierto y devolver lo contenido en la posicin de memoria correspondiente a un arreglo de mayor longitud, el dato obtenido de esta manera es basura. La forma de acceder a los elementos de la matriz es directa; esto significa que el elemento deseado es obtenido a partir de su ndice y no hay que ir buscndolo elemento por elemento (en contraposicin, en el caso de una lista, para llegar, por ejemplo, al tercer elemento hay que acceder a los dos anteriores o almacenar un apuntador o puntero que permita acceder de manera rpida a ese elemento. Para trabajar con vectores muchas veces es preciso recorrerlos. Esto se realiza por medio de bucles. El siguiente pseudocdigo muestra un algoritmo tpico para recorrer un vector y aplicar una funcin 'f(...)' a cada una de las componentes del vector: i=0 mientras (i < longitud) #Se realiza alguna operacin con el vector en la i-sima posicin f(v[i]) i=i+1 fin_mientras

Notacin
La representacin de un elemento en un vector se suele hacer mediante el identificador del vector seguido del ndice entre corchetes, parntesis o llaves: Notacin vector[ndice_1,ndice_2...,ndice_N] vector[ndice_1][ndice_2]...[ndice_N] vector(ndice_1,ndice_2...,ndice_N) Ejemplos (Java, Lexico, Perl, etc.) (C, C++, PHP, etc.) (Basic)

Aunque muchas veces en pseudocdigo y en libros de matemtica se representan como letras acompaadas de un subndice numrico que indica la posicin a la que se quiere acceder. Por ejemplo, para un vector "A":

A0,A1,A2,... (vector unidimensional)

Arreglos dinmicos y estticos

Lo habitual es que un vector tenga una cantidad fija de memoria asignada, aunque dependiendo del tipo de vector y del lenguaje de programacin un vector podra tener una cantidad variable de datos. En este caso, se les denomina vectores dinmicos, en oposicin, a los vectores con una cantidad fija de memoria asignada se los denomina vectores estticos. El uso de vectores dinmicos requiere realizar una apropiada gestin de memoria dinmica. Un uso incorrecto de los vectores dinmicos, o mejor dicho, una mala gestin de la memoria dinmica, puede conducir a una fuga de memoria. Al utilizar vectores dinmicos siempre habr que liberar la memoria utilizada cuando sta ya no se vaya a seguir utilizando. Lenguajes ms modernos y de ms alto nivel, cuentan con un mecanismo denominado recolector de basura (como es el caso de Java) que permiten que el programa decida si debe liberar el espacio basndose en si se va a utilizar en el futuro o no un determinado objeto.

Arreglos multidimensionales
En Basic, Java y otros lenguajes es posible declarar matrices (arreglos) multidimensionales, entendindolas como un vector de vectores. En dichos casos en nmero de elementos del vector es el producto resultante de cada dimensin. Por ejemplo el vector (arreglo) v(4,1) tiene 10 elementos se calcula del siguiente modo: (0-4) * (0-1). Los elementos de la primera dimensin del vector (arreglo) contiene 5 elementos que van del '0' al '4' y la 2 dimensin tiene 2 elementos que van desde '0' a '1'. Los elementos seran accedidos del siguiente modo: Elemento 1: (0,0) Elemento 2: (0,1) Elemento 3: (1,0) ... Elemento 8: (3,1) Elemento 9: (4,0) Elemento 10: (4,1)

Explicacin
Para crear arreglos en C++, hay que indicar:

1. el tipo de los elementos (ejemplo, int, char, double, bool o un tipo definido por el programador) 2. el nombre del arreglo 3. la cantidad de dimensiones y sus tamaos; cada dimensin comienza con el signo [seguido por el tamao de la dimensin y termina con el signo ] Para crear un arreglo de una dimensin, el formato es el siguiente: <tipo de los elementos> <nombre del arreglo> [ <tamao primera dimensin> ] Para determinar la cantidad de elementos en un arreglo, hay que multiplicar el tamao de cada una de las dimensiones indicados en la declaracin. El tamao debe ser un literal de tipo entero o el nombre de una constante de tipo entero. Para nombrar un elemento en un arreglo hay que indicar el nombre del arreglo, seguido de tantas parejas de corchetes [ ] como dimensiones declaradas. Dentro de cada pareja de corchetes tiene que haber un ndice. La combinacin de los ndices indica la posicin del elemento dentro del grupo. El valor mnimo para un ndice es 0. El valor mximo es uno menos que el tamao de la dimensin correspondiente en la declaracin del arreglo.

Ejemplos
Ejemplo #1

Arreglo de una dimensin


Declaracin int a[3]; // forma una secuencia de tres elementos Nombre del grupo a Nombre de los elementos a[0] primer elemento a[1] segundo elemento a[2] tercer elemento

Ejemplo #2
Arreglo de dos dimensiones
Declaracin char m[2][3]; // forma una tabla de dos filas y tres columnas // cada fila es un arreglo de una dimensin // la declaracin indica que hay dos arreglos de una dimensin Nombre del grupo m indica la localizacin del grupo en la memoria Nombre de las filas m[0] primera fila indica la localizacin de la fila dentro del grupo m[1] segunda fila indica la localizacin de la fila dentro del grupo Nombre de los elementos m[0][0] primer elemento m[0][1] segundo elemento m[0][2] tercer elemento m[1][0] cuarto elemento m[1][1] quinto elemento m[1][2] sexto elemento

Ejemplo #3
Arreglo de tres dimensiones
Declaracin double w[2][2][3]; // forma dos tablas de dos filas y tres columnas // cada fila es una secuencia de tres elementos // cada fila es un arreglo de una dimensin // la declaracin indica que hay dos arreglos de dos dimensiones

// los arreglos de dos dimensiones tienen a su vez dos arreglos de una dimensin Nombre del grupo w indica la localizacin del grupo en la memoria Nombre de las tablas w[0] primera tabla indica la localizacin de la tabla dentro del grupo w[1] segunda tabla indica la localizacin de la tabla dentro del grupo Nombre de las filas w[0][0] primera tabla, primera fila w[0][1] primera tabla, segunda fila w[1][0] segunda tabla, primera fila w[1][1] segunda tabla, segunda fila Nombre de los elementos w[0][0][0] primer elemento w[0][0][1] segundo elemento w[0][0][2] tercer elemento w[0][1][0] cuarto elemento w[0][1][1] quinto elemento w[0][1][2] sexto elemento w[1][0][0] sptimo elemento w[1][0][1] octavo elemento w[1][0][2] noveno elemento w[1][1][0] dcimo elemento w[1][1][1] undcimo elemento w[1][1][2] duodcimo elemento

Ejemplo #4
int a[5]; // Definicin de un arreglo de 5 posiciones void main() { int i; // Pedimos el ingreso de 5 nmeros for(i=0; i<4; i++) //No olvidar que los arreglos van de 0 a longitud-1

{ cout << Ingrese el elemento Nro: << i <<endl; cin >> a[i]; } // Los imprimimos imprimir(a,5); } void imprimir(int b[], int tamano) { int i; for(i=0; i<tamano; i++) { cout << Nro: << i << <<b[i]<<endl; } } Notar que el parmetro b de la funcin imprimir es un arreglo, pero no se indica la longitud del mismo. Esto no es necesario ya que solo especificamos que recibiremos un arreglo sin importar su longitud (en este caso particular su longitud viene indicada en tamano). De esta manera la funcin imprimir funciona para arreglos de cualquier longitud.

Ejemplo #5
void main() { float a = 10, b = 20, c ; cout << a << b ; c = suma(a,b)

cout << A+B= << c; cout << A es << a; } Caso 1) Pasaje por Valor o Copia float suma(float a, float b) { a = a + b; return (a); } Veamos que sucede cuando ejecutamos el programa:

float a = 10, b = 20, c ;


a = 10 b = 20 c = ?

c = suma(a,b) Entramos a suma


a = 10 b = 20 c = ? asuma = 10 bsuma = 20

a = a + b;
a = 10 b = 20 c = ? asuma = 30 bsuma = 20

return (a); Desaparecen asuma y bsuma


a = 10 b = 20 c = 30 Como vemos en este caso los parmetros no se ven afectados ya que suma realiza copias de a y b Caso 2) Pasaje por Referencia Cambiemos la declaracin de suma declarando a a como referencia float suma(float & a, float b) Veamos que sucede cuando ejecutamos el programa:

float a = 10, b = 20, c ;


a = 10 b = 20 c = ?

c = suma(a,b) Entramos a suma


a = 10 b = 20 c = ? asuma = aref bsuma = 20

a = a + b;
a = 30 b = 20 c = ? asuma = aref bsuma = 20

return (a); Desaparecen asuma y bsuma


a = 30 b = 20 c = 30 Como vemos en este caso el parmetro a se ve afectado ya que suma utiliza una referencia a a Caso 2) Pasaje por Referencia Constante Cambiemos la declaracin de suma declarando a a como referencia constante float suma(const float & a, float b) En este caso el compilador devolver un error en la lnea

a = a + b;
ya que se esta intentando modificar una referencia constante.

Vous aimerez peut-être aussi