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

Algoritmos multidimensional y unidimensional en arreglos y datos complejos.

Los arreglos permiten almacenar vectores y matrices. Un arreglo es una colección


ordenada de variables del mismo tipo.
Las variables que pertenecen a un arreglo se conocen por el nombre de elementos.
El término ordenado significa que en la colección hay un primer elemento, un
segundo elemento, un tercer elemento, y así sucesivamente. Además, los
elementos pueden a su vez organizarse en subgrupos llamadas dimensiones. El
subgrupo más pequeño posible se conoce como un arreglo de una dimensión. Un
arreglo de dos dimensiones se subdivide en arreglos de una dimensión. Un arreglo
de tres dimensiones se subdivide en arreglos de dos dimensiones los cuales a su
vez se dividen en arreglos de una dimensión. Un arreglo de cuatro dimensiones se
subdivide en arreglos de tres dimensiones los cuales a su vez se dividen en arreglos
de dos dimensiones los cuales a su vez se dividen en arreglos de una dimensión.
La misma idea se aplica en arreglos de más dimensiones.

 Definiciones de Arreglos:
◦ Unidimensional: Conjunto finito y ordenado de elementos
homogéneos
◦ Arreglos multidimensionales: En C, son posibles arreglos
multidimensionales, significando que la correspondencia con los
valores pueden realizarse por varios índices. Así, por ejemplo, si el
arreglo tiene 2 índices se dice que es bidimensional. Su declaración
es muy similar al de un arreglo unidimensional.
◦ Elementos de igual tamaño almacenados linealmente en posiciones
de memoria consecutivas
◦ El nombre del arreglo es visto como un puntero al primer elemento del
arreglo
 Operaciones Básicas
◦ Extracción: Función que toma un arreglo a y un índice i, y retorna un
elemento del arreglo: int x = a[i];
◦ Almacenamiento: Acepta un arreglo a, un índice i, y un elemento x, y
asigna a[i] = x;
◦ Para crear arreglos en C++, hay que indicar:
1.El tipo de los elementos (ejemplo, int, char, doublé ,bool o un tipo
definido por el programador).
2. El nombre del arreglo.
3. La cantidad de dimensiones y sus tamaños; cada dimensión
comienza con el signo [seguido por el tamaño de la dimensión y
termina con el signo].

 Declaración
 Tipo Nombre Arreglo [Número Elementos]
Ejemplos:
 float salarios[5];
 char alfabeto[30]; [0] [1] [2] [3] [4]

 Inicialización
 Por defecto: Cuando son creados, se aplica solamente a arreglos
globales y estáticos
 Explícita: Cuando son creados, suministrando datos de iniciación
 En ejecución: Durante ejecución, cuando se asignan o copian datos
al arreglo.
Ejemplos:
 double scores[5] = {5.5,
6.7, 9.8, 10.0, 8.7};
 int estado[3] = {-1, 0, 1};
 char alfabeto[] = {‘a’, ‘b’,
‘c’, ‘d’, ‘e’, ‘f’, ‘\0’};
 char vocales[10] = {‘a’,
’e’, ‘i’, ‘o’, ‘u’,’\0’};

El nombre del arreglo es la dirección de su primer elemento (base)


int v[50];
it *p;
p = v; // Equivalente a p = &v[0];
*p = 5; // Equivalente a v[0] = 5
p = p + 5; // Equivalente a p = &v[5]

*p = 9; // Equivalente a v[5] = 9;
Arreglos de caracteres (strings).
No existen Strings en C, son solamente arreglos de caracteres con la convención
que un carácter nulo (‘\0’) es almacenado al final del último carácter para marcar el
final de la cadena.
 Ejemplo: char *p = “ejemplo”;
La variable puntero p obtiene la dirección del primer elemento en el arreglo (e). El
compilador coloca un carácter null al final del arreglo:

P E P I T O 0 X X X

char
localnombre [10];

strcpy(localnombre,
“PEPITO”);
Copiamos la
constante de
caracteres en el
arreglo local.

Al revertir los valores de un arreglo ocurre lo siguiente:

Arreglos Multidimensionales.
 Por dimensión entendemos como el número de índices utilizados para referirse a
un elemento particular en el arreglo.
 Bidimensional: Type Array Name [numFilas] [numColumnas].
Ejemplo:

Inicializamos el array:
int fila, columna;
for(fila = 0; fila < numFilas; fila++)
for(columna = 0; columna<numColumnas;
columna++)
miarray[fila][columna] = 0;

Tipos de Datos Complejos: Registros (estructuras) en C/C++.

Un registro o estructura es un grupo de componentes en el cual cada componente


tiene su propio identificador, cada uno de los cuales se conoce como un elemento
(campo) de la estructura.
Es un grupo de variables (elementos) que pueden ser de diversos tipos sostenidas
agrupadas en una sola unidad. La unidad es la estructura.
Definición general:
struct type-name {elementos};
 Ejemplo:
struct {

char sexo;

int edad;

char primernombre[10];

char apellido[15];
} minombre;

La definición crea una variable minombre de tipo estructura con 3 campos.


La definición por sí misma no genera asignación de memoria, ésta se da únicamente
cuando variables del tipo de la estructura son instanciadas.
Puede declararse un arreglo de estructuras para agrupar información:
struct tiponombre nombres[100];
Esto crea un conjunto de 100 registros de tipo estructura. Para acceder a uno de los
registros se utilizan índices.
nombres[0].sexo = ‘M’;
nombres[0].edad = 5;

Debe tenerse bien presente que, al igual que en el caso de los arreglos
unidimensionales, el identificador asociado a un arreglo es realmente un puntero al
bloque de memoria donde se guardan los valores en el arreglo.
Continúa vigente la definición de la correspondencia. Es decir:
X[i][j] = *(&X[i] + j)
Aparentemente esta definición es contradictoria, pero no.
Sucede que para el cálculo de la dirección de X[i], el compilador tiene en cuenta la
longitud de la fila. De donde se llega a la conclusión anti intuitiva, que ¡la información
que emplea el compilador para localizar la posición de un valor está vinculada NO
al rango del primer índice, sino del segundo!
Esto puede resumirse en que el valor de &vals[1][0] - &vals[0][0] (diferencia de dos
punteros a double) es ¡8! porque el rango del segundo índice es 8.
El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir,
podemos acceder a cualquier elemento del arreglo sin tener que consultar a
elementos anteriores o posteriores, esto mediante el uso de un índice para cada
elemento del arreglo que nos da su posición relativa.
Para implementar arreglos unidimensionales se debe reservar espacio en memoria.
Los arreglos nos permiten hacer un conjunto de operaciones para manipular los
datos guardados en ellos, estas operaciones son: ordenar, buscar, insertar,
eliminar, modificar entre otras.

Bibliografía.
[1] The C Programming Language, Brian Kernighan / Dennis Ritchie
[2] Data Structures, Algorithms and Program Style Using C, James F. Korsh / Leonard J. Garrett

Вам также может понравиться