viernes, 13 de marzo de 2009

Arrays (arreglos)

Un arreglo es un conjunto de variables del mismo tipo que pueden ser referenciadas a través de un mismo nombre. La forma de identificar a un elemento determinado es a través de un índice.

La declaración

int Array[10];

instruye al compilador a que reserve una cantidad de memoria suficiente para almacenar 10 entidades enteras y referirse a esa memoria a traves del identificador Array. Dado que el número de elementos en un arreglo suele ser utilizado en distintos lugares de un programa, es buen estilo de programación el referenciarlo a través de una constante simbólica:

#define N 10
int Array[N];

Los elementos individuales del arreglo se comiena a numerar a partir del elemento 0, asi, Array[0] individualiza al primer elemento y Array[9] al último.

Los arreglos pueden ser multidimensionales, asi por ejemplo

double Matriz[10][20];

Define una region de memoria como para almacenar 200 reales en doble precisión. La forma en que se organizan en la memoria estos 200 elementos es la siguiente:

Matriz[0][0], Matriz[0][1], Matriz[0][2], ..., Matriz[1][0], Matriz[1][1],...,...,Matriz[9][19]

La inicialización de un arreglo puede realizarse a través de una lista, si la lista es mas corta que el numero de elementos en el arreglo, el resto de los elementos se inicializan a 0. Se puede obviar el tamaño de un arreglo al inicializarlo con una lista, el tamaño será el mismo que el de la lista en este caso. Ej:


float a[5] = {0.1, 1.2, 2.3, 3.4, 4.5};
double b[100] = {1.0}; /* los 99 restantes serán 0.0 */
int a[] = {2, 3, -5, 7}; /* equivale a a[4]={2,3,-5,7} */

Ejemplo:

/*
Utilización de arreglos.
Programa que cuenta cuántas veces se repite cada dígito,
cada carácter separador, y otros carácteres.
*/

#include
#define ND 10
int main()
{
int c, i, nWhite = 0, nOther = 0, nDigit[ND];

for(i = 0; i < ND; i++)
nDigit[i] = 0;

while((c = getchar()) != EOF)
if(c >= '0' && c <= '9')
nDigit[c - '0']++;
else
if
(c == ' ' || c == '\n' || c == '\t')
nWhite++;
else
nOther++;
for(i = 0; i < ND; i++)
printf("Dígito %d: %d\n",i,nDigit[i]);

printf("Caracteres separadores: %d\n",nWhite);
printf("Otros caracteres: %d\n",nOther);
return 0;
}

Puntos a Notar

  1. Declaración de un arreglo: int ndigit[10]. Declara un vector de 10 componentes del tipo entero. En C, todos los arreglos comienzan con el subíndice 0. Como índice, puede utilizarse una constante entera, una variable entera, o una expresión entera. Es importante notar que el lenguaje no realiza chequeos de rango, esto quiere decir que uno puede acceder y/o modificar componentes inexistentes del arreglo, referenciando componentes menores que 0, o mayores que el límite superior. Tener en cuenta que al empezar los índices a numerarse desde 0, un vector como el dado se referencia a través de índices que van desde el 0 al 9.
  2. Operaciones entre datos del tipo char y tipo int: Los char son convertidos a enteros.Por esta razón, c - '0' da el valor numérico del dígito.
  3. If anidados. Es la manera de implementar decisiones múltiples. Otra forma de realizar lo mismo esa través de bloque switch.

No hay comentarios:

Publicar un comentario