You are on page 1of 23

Material Didctico de la Asignatura de Programacin I

IV Unidad: Arreglos
Elaborado: Msc Lesbia Valerio Lacayo

IV-Unidad: Arreglos

Contenido:

4.1. Introduccin
4.2 Arreglos
4.3 Declaracin de Arreglos
4.4 Tipos de arreglos
4.5 Como pasar arreglos a funciones
4.6 Bsqueda y ordenamiento en arreglos
4.6 Arreglos con mltiples subndices

Introduccin

Los arreglos son estructuras de datos consistentes en elementos de datos relacionados del mismo
tipo. Los arreglos y las estructuras son entidades estticas, debido a que se conservan del mismo
tamao a todo lo largo de la ejecucin del programa. Existen estructuras dinmicas de datos como
son listas, colas, pilas y rboles que pueden crecer o encogerse conforme los programas se
ejecutan.

Arreglos:

Un Arreglo es un grupo de posiciones en memoria relacionados entre si, por el hecho de que todas
tienen el mismo nombre y son del mismo tipo.

Para referirse a una posicin en particular o elemento dentro del arreglo especificamos el nombre
del arreglo y el nmero de posicin del elemento particular dentro del mismo.

Ejemplo:

Se muestra un arreglo de enteros llamado C, este arreglo contiene 12 elementos. Cualquiera de


estos elementos puede ser referenciado dndole el nombre del arreglo seguido por el nmero de
posicin de dicho elemento en particular encerrado entre parntesis cuadrados o [ ]. el primer
elemento de cualquier arreglo es el elemento cero. Entonces el primer elemento de un arreglo C
se conoce como c [0] , el segundo como c[1] , el sptimo como c[6] y en general el elemento de
orden i del arreglo c se conoce como c[i-1].

Los nombres de los arreglos siguen las mismas reglas convencionales que los dems nombres de
variable.
Declaracin de arreglos

Los arreglos ocupan espacio en memoria, el programador especifica el tipo de cada elemento y el
nmero de elementos requerido por cada arreglo, de tal forma que la computadora pueda
reservar la cantidad apropiada de memoria. Para indicar a la computadora que reserve 12 espacios
de memoria para el arreglo entero c.

int c[12];

la memoria puede ser reservada para varios arreglos dentro de una sola declaracin.

int b[100], x [25];

100 elementos del arreglo b, 25 elementos al arreglo x. En el ejemplo se puede ver un areglo de 12
elementos.

-45

10

25

47

36

45

58

78

98

32

El ndice indica la posicin numrica del elemento dentro del arreglo C.

El subndice debe ser un entero o una expresin entera. Si un programa utiliza una expresin,
como subndice entonces la expresin se evala para determinar el subndice.

Si a= 5 y b=6 entonces el enunciado c[ a + b ] += 2;


Aade 2 al elemento del arreglo c[11]. Note que un nombre de arreglo con subndice es un valor
que puede ser utilizado en el lado izquierdo de una asignacin.

Para imprimir la suma de los valores contenidos en los primeros tres elementos del arreglo C se
escribe:

printf( %d , c[0] + c[1] + c[2] );

Para dividir el valor del sptimo elemento del arreglo C entre 2 asignar el resultado a la variable x
escribiremos:

X= c[ 6 ] / 2;

Sptimo elemento tiene un subndice de 6

Elemento siete subndice 7 o sea es el octavo elemento.

Hay un error por diferencia de uno.

Los Arreglos pueden ser declarados para que contengan otros tipos de datos. Ejemplo un arreglo
del tipo char puede ser utilizado para almacenar una cadena de caracteres.

Ejemplo:

/* inicializando un arreglo por medio de una asignacin */

#include <stdio.h>
main ( )
{
int n[10], i:

for (i=0 ; i <= 9 ; i++)


n[i ]= 0;

printf( %s %13 s \n , Elemento , Valor );


for (i=0 ; i <= 9 ; i++)
printf( %7s %13d \n , i, n[i ] );

getch();
return 0;

Salida :
Elemento Valor
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0

Inicializa los elementos de un arreglo entero de diez elementos n a cero e imprime el arreglo en
formato tabular.

Los elementos de un arreglo tambin pueden ser inicializados en la declaracin del arreglo mismo,
haciendo seguir a la declaracin con el signo igual y una lista separada por comas (encerradas
entre llaves) de inicializadores.

El programa siguiente utiliza una inicializacin de un arreglo entero con diez valores e imprime el
arreglo en formato tabular.

Si dentro del arreglo existe un nmero menor de inicializadores que de elementos, los elementos
restantes son inicializados a cero de forma automtica.

Ejemplo : Los elementos del arreglo n podran haber sido inicializados a cero con la

declaracin:

int n[10] = {0};

con lo que de manera explcita se inicializa el primer elemento a cero y por lo dems, los 9
elementos restantes se inicializan automticamente a cero, porque existe menos inicializadores
que elementos del arreglo.
Es importante recordar que los arreglos no son de forma automtica inicializados a cero. El
programador debe por lo menos inicializar el primer elemento a cero, para que los dems queden
automticamente inicializados a cero.

Este mtodo utilizado de inicializar los elementos del arreglo a 0 se ejecuta en tiempo de
compilacin.

Ejemplo:

/* inicializando un arreglo por medio de una declaracin */

#include <stdio.h>
main ( )
{
int n[10]= { 32,27,64,18,95,14,90,70,60,37};
int i;
printf( %s %13 s \n , Elemento , Valor );
for (i=0 ; i <= 9 ; i++)
printf( %7s %13d \n , i, n[i ]);

getch();
return 0;
}

Salida :
Elemento Valor
0 32
1 27
2 64
3 18
4 95
5 14
6 90
7 70
8 60
9 37

/* inicializar un arreglo por medio del teclado */


Error: Olvidar inicializar los elementos de un arreglo cuyos elementos deben de estar
Inicializados.

int n[5] = {32,27,64,18,95,14};

Generara un error de sintaxis, porque en el arreglo existen 6 inicializadores y nicamente 5


elementos.

El proporcionar ms inicializadores en una lista inicializadora de arreglos que elementos existan


dentro del mismo constituye un error de sintaxis.

Si de una declaracin con una lista inicializadora se omite el tamao del arreglo, el nmero de
elementos en el arreglo ser el nmero de elementos incluidos en la lista inicializadora.

Ejemplo: int n[ ] = {1,2,3,4,5};

Creara un arreglo de cinco elementos.

En el siguiente programa inicializa los elementos de un arreglo s de diez elementos a los valores 2,
4, 6, .20 e imprime el arreglo en formato tabular. Los valores se genera multiplicando el contador
del ciclo por 2 y aadiendo 2.

En el programa se define una constante simblica cuyo valor es 10 esta es un identificador que se
reemplaza con texto de reemplazo en el programa C, antes de que el programa sea compilado.

El uso de constantes simblica para especificar tamaos de arreglo hacen que los programas sean
ms dimensionables. En el ejemplo el primer ciclo for podra llenar un arreglo de 1000 elementos
solo modificando el valor de size de la directiva #define de 10 a1000.

Las constantes simblicas no es una variable. El compilador no reserva espacios para ella como
hace con la variable que contiene valores durante la ejecucin.

Ejemplo:

#include <stdio.h>
#define SIZE 10
main ( )
{
int s[SIZE], j;
for (j=0 ; j <= SIZE-1 ; j++)
s[j]= 2 + 2 * j;

printf( %s %13s \n , Elemento, Valor);


for (j=0 ; j <= SIZE-1 ; j++)
printf( %7d %13d \n , j, s[j]);
}

Salida

Elemento Valor
0 2
1 4
2 6
3 8
4 10
5 12
6 14
7 16
8 18
9 20

Como generar los valores a colocarse en los elementos de un arreglo.

El siguiente programa suma los valores contenidos en un arreglo entero a de 12 elementos. El


enunciado del cuerpo del ciclo for se ocupa de la totalizacin.

#include <stdio.h>
#define SIZE 12

main ( )
{
int a[SIZE]= { 1, 3 ,5 , 4, 7, 2, 99, 16, 45, 67, 89, 45};
int i, total= 0;

for (i=0 ; i <= SIZE-1 ; i++)


total+=a[i];

printf( total de los elementos del arreglo es %d , total);

getch();
return 0;
}

Salida: 383

Los arreglos son capaces de contener datos de cualquier tipo. Ahora analizaremos el
almacenamiento de cadenas en arreglos de caracteres.

Los arreglos de caracteres tienen varias caractersticas nicas. Un arreglo de caracteres puede ser
inicializado utilizando una literal de cadena.

Ejemplo: char string [ ] = primero;

Inicializa los elementos de la cadena string a los caracteres individuales de la literal de cadena
primero. El tamao del arreglo string en la declaracin anterior queda determinada por el
compilador, basado en la longitud de la cadena.

Es importante hacer notar que la cadena primero contiene 5 caracteres, ms un carcter especial
de terminacin de cadena conocido como carcter nulo, entonces el arreglo string de hecho
contiene 6 elemento.

La presentacin de la constante de caracteres del carcter nulo es \0. En C todas las cadenas
terminan con este carcter.

Un arreglo de caracteres representando una cadena debera declararse siempre lo suficiente


grande para contener el nmero de caracteres de la cadena incluyendo el carcter nulo de
terminacin.

Los arreglos de caracteres tambin pueden ser inicializados con constantes individuales de
caracteres en una lista de inicializacin.

char string1[ ] = { p , r , i , m , e , r , o , \0};

Se puede tener acceso directo a los caracteres individuales de una cadena:

string [ 0 ] es el carcter f

string [ 3 ] s

Tambin se puede introducir desde el teclado directamente una cadena en un arreglo de


caracteres, utilizando scanf y la especificacin de conversin %s.

Ejemplo: char string [20];


Crea un arreglo de caracteres capaz de almacenar una cadena de 19 caracteres y un carcter nulo
de terminacin.

El enunciado scanf (%s, string2);

Lee una cadena del teclado y la coloca en string2. Note que el nombre del arreglo se pasas a scanf
sin colocar el & precedente, que en otras variables se utiliza. El & es utilizado por lo general para
darle a scanf una localizacin de variable en memoria a fin de que se pueda almacenar un valor
ah.

El nombre de un arreglo es la direccin del inicio del arreglo y por lo tanto & no es necesario. Un
arreglo de caracteres que represente a una cadena puede ser sacado utilizando printf y el
especificador de conversin %s. El arreglo string2 se imprime utilizando el enunciado:

printf (%s\n , string2)

a printf al igual qua a scanf no le importa que tan grande es el arreglo de caracteres. Los caracteres
de la cadena sern impresos hasta que un carcter de terminacin nulo sea encontrado.

En el ejercicio se muestra la inicializacin de un arreglo de caracteres con una literal de caracteres,


la lectura de una cadena a un arreglo de caracteres , la impresin de un arreglo de caracteres como
una cadena y el acceso a caracteres individuales de una cadena.

#include <stdio.h>
main()
{

char cadena1[20], cadena2[ ]= cadena literal;


int i;

printf( Deme una cadena: );


scanf(%s, &cadena1);
printf( cadena1 es : %s\n cadena2 es %s\n cadena1 con espacios entre caracteres
es : \n cadena1, cadena2);

for (i=0 ; cadena1[i] != \0 ; i++)


printf (%c, cadena1[ i ]);
printf( \n);

getch();
return 0;
}
Salida:

Deme una cadena : Hola


cadena1 es: hola
cadena2 es: cadena literal
cadena con espacios entre caracteres es : H o l a

En el programa se usa el for para ciclar a travs del arreglo cadena1 y visualizar los caracteres
individuales por separados. La condicin en la estructura for,

cadena1 != \0 es verdadera en tanto dentro de la cadena, el carcter de terminacin no se


encontrado.

Como pasar Arreglos a Funciones

La clase de almacenamiento static o esttico(variable local static) , en una definicin de funcin,


existe durante la duracin del programa, pero resulta solo visible en el cuerpo de la funcin.
Podemos aplicar static a una declaracin del arreglo local, de tal manera que el arreglo no sea
creado e inicializado cada vez que se llame a la funcin y el arreglo no se destruya cada vez que en
el programa la funcin termine.

Esto reduce tiempo de ejecucin del programa, en particular en el caso de programas con
funciones de llamada frecuente y que contengan arreglos extensos.

Ejemplo: variables globales, funciones.

Los arreglos que se declaran static son inicializados de forma automtica una vez en tiempo de
compilacin. Si un arreglo static no se inicializa de manera explcita por el programador este
quedar inicializado a cero por el compilador.

Para pasar cualquier argumento de arreglo a una funcin, especifique el nombre del arreglo sin
corchete alguno.

Ej: Si el arreglo horatemp ha sido declarado como :

int horatemp [24];

el enunciado de llamada de funcin es: modificacion(horatemp, 24);


pasa el arreglo horatemp y su tamao a la funcin modificacin. Al pasar un arreglo a una funcin,
el tamao del arreglo a menudo se pasa a la funcin de tal forma que pueda procesar el nmero
especfico de elementos incluidos en este arreglo.

#include <stdio.h>

void arregloUno (void);


void arregloDos(void);

main( )
{
printf ( Primer llamada a cada funcin: \n);
arregloUno( );
arregloDos( );
printf (Segunda llamada a cada funcin: \n);
arregloUno();
arregloDos();
getch();
return 0;
}

/* Funcin del arreglo local esttico */

void arregloUno(void)
{
static int a[3];
int i;

printf( Valores del arreglo esttico: );

for (i=0; i<= 2; i++)

printf(Arreglo [%d ] = %d, i, a[i]);


printf (Valores existentes);
for (i=0; i<= 2; i++)
printf(Arreglo [%d ] = %d, i, a[i] +=5);
}

/* Funcin del arreglo local automtico */


void arregloDos(void)
{
int a[3]= {1,2,32};
int i;

printf( Valores del arreglo automtico: \n );

for (i=0; i<= 2; i++)

printf(Arreglo [%d ] = %d, i, a[i]);


printf (Valores existentes);
for (i=0; i<= 2; i++)
printf(Arreglo [%d ] = %d, i, a[i] +=5);
}

Salida:

Primer llamada a cada funcin:

Valores del arreglo esttico

Arreglo[0]=0 Arreglo[1]= 0 Arreglo[2 ] = 0

Valores existentes

Arreglo[0]= 5 Arreglo[1]= 5 Arreglo[2]= 5

Valores del arreglo Automtico

Arreglo[0]=1 Arreglo[1]= 2 Arreglo[2 ] = 3

Valores existentes

Arreglo[0]= 6 Arreglo[1]= 7 Arreglo[2]= 8

Segunda llamada a cada funcin:

Valores del arreglo esttico


Arreglo[0]=5 Arreglo[1]= 5 Arreglo[2 ] = 5

Valores existentes

Arreglo[0]= 10 Arreglo[1]= 10 Arreglo[2]= 10

Valores del arreglo Automtico

Arreglo[0]=1 Arreglo[1]= 2 Arreglo[2 ] = 3

Valores existentes

Arreglo[0]= 6 Arreglo[1]= 7 Arreglo[2]= 8

La funcin arregloUno es llamada dos veces, el arreglo local static en la funcin es inicializado a
cero por el compilador.

La funcin visualiza el arreglo, aade 5 a cada uno de los elementos y lo vuelve a visualizar.

La segunda vez que la funcin es llamada el arreglo esttico contiene los valores almacenados
durante la primera llamada de la funcin.

La funcin arregloDos tambin es llamada dos veces. Se inicializan los elementos del arreglo local
automtico en la funcin con los valores 1, 2 y 3.

La funcin visualiza el arreglo, aade 5 a cada elemento y los vuelve a imprimir.

La segunda vez que se llama a la funcin los elementos el arreglo estn otra vez inicializados a 1,2 y
3 porque el arreglo tiene una duracin de almacenamiento automtico.

C pasa de forma automtica los arreglos a las funciones utilizando simulacin de llamadas por
referencia. Las funciones llamadas pueden modificar los valores de los elementos en los arreglos
originales de los llamadores. El nombre del arreglo de hecho es la direccin del primer elemento
del arreglo. Dado que ha sido pasada la direccin inicial del arreglo, la funcin llamada sabe
precisamente donde est el arreglo almacenado. Por lo tanto, cuando en su cuerpo de funcin, la
funcin llamada modifica los elementos del arreglo, est modificando los elementos reales del
arreglo en sus localizaciones de memoria originales.
%p es un especificador de conversin que da por lo regular salida a direcciones como nmero
hexadecimales.

Los arreglos se pasan simulando llamadas por referencia por razones de rendimiento. Si los
arreglos fueran pasados por valor se pasara una copia de cada uno de los elementos en arreglos
grandes consume gran cantidad de espacio de almacenamiento para las copias de los arreglos.

Se pasan arreglos completos simulando llamadas por referencia, los elementos individuales del
arreglo se pasan en llamadas por valor de la misma forma que se pasan las variables
simples(escalares)

No es necesario indicar el tamao del arreglo dentro de los corchetes del arreglo. El compilador lo
ignora.

Para pasar un elemento de un arreglo a una funcin utilice como argumento en la llamada a la
funcin el nombre con subndice del elemento del arreglo.

Para que una funcin reciba un arreglo a travs de una llamada de funcin, la lista de parmetros
de la funcin debe especificar que se va a recibir un arreglo.

modificar(nota[4]) pasando un solo elemento.

Encabezado de la funcin modifica:

void modifica (int b[ ] , int size)

Indicar que modifica es para recibir un arreglo de enteros en el parmetro b y un cierto nmero de
elementos de arreglo en el parmetro size.

int horatemp[24];

modifica (horatemp, 24)

Pasar arreglos y elementos individuales de arreglo a funciones:

Diferencia de pasar un arreglo completo y pasar un elemento de un arreglo a funciones.

#include <stdio.h>
#define SIZE 5
void modificaArreglo (int [ ] , int);
void modificaElemento(int);

main( )
{
int a[ SIZE] = { 0, 1, 2, 3, 4 };
int i;

printf (Efecto de pasar un arreglo entero en llamada por referencia);


printf( Los valores originales del arreglo son:);

for (i=0; i<= SIZE -1 ; i++)


print(%3d, a[i]);
modificaArreglo (a, SIZE);

printf (Los valores modificados del arreglos son: \n );

for (i=0; i<= SIZE -1 ; i++)


print(%3d, a[i]);

printf( Efecto de pasar elemento del arreglo en llamada por valor);


printf(El valor de a[3] es %d \n, a[3]);
modificaElemento(a[3]);
printf(El valor de a[3] es %d\n, a[3]);

void modificaArreglo (int b[ ], int size)


{
int j;

for (j=0; j<= size-1; j++)


b[j] *=2;
}

Void modificaElemento(int e)
{
printf(El valor en modificaElemento es %d\n, e*=2);
}
El valor de a[3] no ha sido modificado porque los elementos individuales del arreglo han sido
pasados en llamada por valor.

Llamada por valor y llamada por referencia:

Valor: Se efecta una copia del valor del argumento y esta se pasan a la funcin
llamada.. Las modificaciones a la copia no afectan al valor original de la variable
del llamador.

Referencia: Cuando un argumento es pasado en llamada por referencia, el llamador de


hecho permite que la funcin llamada modifique el valor original de la
variable.

En C todas las llamadas son por valor. Por referencia debe ser utilizada en funciones llamadas
confiablemente, que necesiten modificar la variable original.

Salida

Efecto de pasar un arreglo entero en llamada por referencia


Los valores originales del arreglo son:

0 1 2 3 4

Los valores modificados del arreglo son:

0 2 4 6 8

Efecto de pasar elemento del arreglo en llamada por valor:

El valor de a[3] es 6
El valor en modificaElemento es 12
El valor de a[3] es 6

Nota:

El calificador const puede ser aplicado a un parmetro de arreglo en una definicin de funcin para
impedir que en el cuerpo de la funcin el arreglo original sea modificado. Las funciones no deben
tener, ni se les dar capacidad de modificar un arreglo a menos de que sea en lo absoluto
necesario.

Arreglos con mltiples subndices

En C los arreglos pueden tener mltiples subndices. Una utilizacin comn de los arreglos con
mltiples subndices es la representacin de tabla de valores (filas, columnas)

Para identificar un elemento particular de la tabla, se debe especificar dos subndices; el primero
identifica la fila del elemento, el segundo identifica la columna del elemento.

Tabla o arreglos que requieren dos subndices (arreglo de doble subndice). Arreglos de mltiples
subndices pueden tener ms de dos subndices. ANSI indica que un sistema ANSI C debe soportar
por lo menos 12 subndices de arreglo.

Ejemplo: Un arreglo a. El arreglo contiene 3 filas y 4 columnas por lo que se dice que se trata de
un arreglo de 3 x 4 mxn

Cada uno de los elementos en el arreglo a est identificado por un nombre de elementos de la
forma a[i][j]; a es el nombre del arreglo, i, j son los subndices que identifican en forma nica a
cada elemento dentro de a.

Los nombres de los elementos en el primer rengln, todos tienen un primer subndice de 0; los
nombres de los elementos en la cuarta columna, todos tienen un segundo subndice de 3.

Cada elemento del arreglo individual es referido especificando el nombre del arreglo seguido por
uno o ms ndices, con cada ndice encerrado entre parntesis cuadrado.

X[0], X[1], X[2], X[3]

Referencia un elemento de arreglo de doble subndice como a[x,y] error a[x][y] un arreglo de
mltiple subndice puede ser inicializado en su declaracin en forma similar a un arreglo de un
subndice.

Ej: b{2] [2] podra ser declarado e inicializado con int b[2][2] = { {1,2} , {3,4}};

Los valores se agrupan por renglones entre llaves. Por lo tanto 1 y 2 inicializan b[0][0] y b[0][1], 3 y
4 inicializan b[1][0] y b[1][1] . Si para un rengln dado no se proporcionan suficientes
inicializadotes los elementos restantes de dicho rengln se inicializarn a 0 automticamente por lo
tanto la declaracin int b[2][2] = {{1] , {3,4}};
Inicializar b[0][0] a 1, b[0][1] a 0, b[1][0] a 3 y b[1][1] a 4.
Arreglo de doble subndice con 3 filas y 4 columnas.

Columna 0 Columna 1 Columna 2 Columna 3


Fila 0 a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
Fila 1
a[2][0] a[2][1] a[2][2] a[2][3]

Como inicializar arreglos multidimensionales

#include <stdio.h>

void printArray (int [ ][ 3]); Cuando se recibe un arreglo de un subndice como


argumento a una funcin, los corchetes del arreglo
estn vacos en la lista de parmetros de la funcin.
main()
{
int arreglo1 [2][3] = {{1,2,3} , {4,5,6}};
int arreglo2 [2][3] = {1,2,3,4,5};
int arreglo3 [2][3]= {{1,2}, {4}};

printf( Valores en arreglo1 por fila son:\n};


printarray(arreglo1);

printf( Valores en arreglo2 por fila son:\n};


printarray(arreglo2);

printf( Valores en arreglo3 por fila son:\n};


printarray(arreglo3);
}
void printarray (int a[ ] [3])
{
int i, j;

for (i=0; i <= 1; i++)


{
for ( j=0 ; j <= 2; j++)
print (%d, a[i][j]);
print(\n);
}
}

Salida

Valores en arreglo1 por fila son:


1 2 3
4 5 6

Valores en arreglo2 por fila son:

12 3
45 0
Valores en arreglo3 por fila son:

1 2 0
4 0 0

Los arreglos multidimensionales son definidos prcticamente de la misma manera que los arreglos
unidimensionales, excepto que se requiere un par separado de corchetes para cada ndice, as un
arreglo bidimensional requerir dos pares de corchetes, un arreglo tridimensional requerir tres
pares de corchetes y as sucesivamente.

0 1
0 b[0][0] b[0][1]
1 2
1 b[1][0] b[1][1]
3 4

b[2][2] = {{1} , {3,4}}


0 1
0 b[0][0] b[0][1]
1 0
1 b[1][0] b[1][1]
3 4

Cuando se recibe un arreglo de un subndice como argumentos a una funcin, los corchetes del
arreglo estn vacos en la lista de parmetros de la funcin.
El primer subndice de un arreglo de mltiples subndices tampoco se requiere, pero todos los
dems subndices son requeridos.

El compilador utiliza estos subndices para determinar las localizaciones en memoria de los
elementos en arreglos de mltiples subndices.

Todos los elementos del arreglo son almacenados en memoria de forma consecutiva,
independiente de nmero de subndices.

Proporcionar los valores de subndice en una declaracin de parmetro le permita al compilador


indicarle a la funcin como localizar un elemento del arreglo.

Para localizar un elemento en un rengln en particular el compilador debe saber con exactitud
cuntos elementos existen en cada rengln, de tal forma que pueda saltar la cantidad apropiada
de posiciones de memoria para llegar al arreglo.

Ejemplo: Para tener acceso a [1][2] en el ejemplo el compilador sabe que debe saltarse los tres
elementos del primer rengln en la memoria para obtener el segundo rengln, a continuacin, el
compilador llega al tercer elemento de dicho rengln (elemento 2).

Muchas manipulaciones comunes con arreglos utilizan estructuras de repeticin for.

Ejemplo: La siguiente estructura define todos los elementos en el tercer rengln a a 0.

for (columna= 0 ; columna<= 3; columna ++)


a[2] [columna]= 0;

Especificamos el tercer rengln por lo tanto, se sabe que el primer subndice ser siempre 2 (0 es el
primer rengln y 1 el segundo). El ciclo for vara solo en el segundo subndices (es decir el
subndice de columna). La estructura for anterior es equivalente a los enunciados de asignacin
siguiente:

a[2][0] = 0;
a[2][1] = 0;
a[2][2] = 0;
a[2][3] = 0;

En el arreglo a, la siguiente estructura for anidada determina el total de todos los elementos.

total=0;
for (fila=0 ; fila <= 2; fila ++)
for (columna=0 ; columna <= 3; columna ++)
total += a[fila][columna];

Totaliza los elementos del arreglo, rengln por rengln. La estructura externa for empieza
estableciendo fila (es decir, el subndice de rengln) a 0, de tal forma que los elementos del
segundo rengln sean totalizado por ltimo, la estructura externa for incrementa fila a 2 para que
se totalicen los elementos del tercer rengln. El resultado se imprime cuando la estructura for
anidada termina.

Ejemplo:

/* programa que permite leer varios nmeros enteros y almacenarlos en una matriz, luego los
enva a pantalla */

# incluye <stdio.h>
main()
{
int arreglo[3][4];
int filas[3];
int columna[4];
int sumfila, sumcol;
int i,j;
clrscr();

for (i=0; i<=2; i++)


{
sumfila=0;

for(j=0: j<=3; j++)


{
printf( [%d] [%d] = , i, j);
scanf(%d , &arreglo[i][j]);
sumfila+= arreglo[i][j];
}
filas[i]=sumfila;
}
for(j=0: j<=3; j++)
{
sumcol=0;
for(i=0; i<=2; i++)
sumcol+=arreglo[i][j];
columna[j]=sumcol;
}
printf(\n\n);
for(i=0; i<=2; i++)
{
for( j=0; j<=3; j++)
printf(%4d ,arreglo[i][j]);
printf(%4d ,filas[i]);
printf(\n);
}

for( j=0; j<=3; j++)


printf(%4d , columna[j]);
getch();
return 0;
}

Como ordenar Arreglos

La ordenacin de datos(ascendente o descendente) es una de las aplicaciones ms importantes de


la computacin.

Por ejemplo ordenar de forma ascendente los valores de los elementos de un arreglo a de 10
elementos. La tcnica que se utiliza es la ordenacin tipo burbuja o hundimiento porque los
valores ms pequeo de forma gradual flotan haca la parte superior del arreglo, como suben las
burbujas de aire en el agua, en cambio que los valores ms grandes se hunden hacia el fondo del
arreglo. Es el esquema ms simple de ordenacin conocido. La tcnica consiste en llevar a cabo
varias pasada a travs del arreglo. En cada pasada, se comparan pares sucesivos de elementos. Si
un par est en orden creciente (menor a mayor)( o son idnticos sus valores) dejamos los valores
tal y como estn. Si un par aparece en orden decreciente (mayor a menor) sus valores en el arreglo
se intercambian de lugar.

En una pasada un valor grande puede pasar haca abajo en el arreglo muchas posiciones. Un valor
pequeo puede moverse haca arriba en una posicin. Es fcil de programar pero su ejecucin es
lenta. Mtodo de burbuja.

Bsqueda en Arreglos

Cuando se trabaja con grandes cantidades de datos almacenados en arreglos. Puede resultar
necesario determinar si un arreglo contiene un valor que coincide con algn valor clave o buscado.
El proceso de encontrar en un arreglo un elemento en particular se llama bsqueda.
Hay dos tcnicas:

Tcnica simple bsqueda lineal: Compara cada uno de los elementos del arreglo con el del valor
buscado. Dado que el arreglo no est en ningn orden en particular, existe la misma posibilidad de
que el valor se encuentra en el primer elemento como en el ltimo. Por tanto en promedio, el
programa tendr que comparar el valor buscado con la mitad de los elementos del arreglo.

La bsqueda lineal funciona bien para arreglos pequeos para arreglos no ordenados, para
bsqueda de arreglos extensos, el sistema lineal en ineficiente si el arreglo est ordenado se puede
utilizar otra tcnica de alta velocidad.

Bsqueda Binaria

Esta tcnica despus de cada una de las comparaciones elimina la mitad de los elementos en el
arreglo bajo bsqueda. El programa localiza el elemento medio del arreglo y lo compara con el
valor buscado. Si son iguales la clave de bsqueda ha sido encontrada y se regresa el subndice del
arreglo correspondiente a dicho elemento. Si no son iguales el problema se reduce a buscar en una
mitad del arreglo. Si el valor buscado es menor que el elemento medio del arreglo se seguir
buscando en la primera parte del arreglo, de lo contrario se busca en la segunda parte.
Si el valor buscado no se encuentra, el algoritmo se repite en una cuarta parte del arreglo original
la bsqueda continua hasta que el valor buscado es igual al elemento del medio del subarreglo o
hasta que el subarreglo ha quedado reducido a un elemento diferente a el valor buscado( es decir,
el valor buscado no ha sido encontrado).

Si el valor buscado es menor que el elemento medio, el subndice high se define como middle-1 y
la bsqueda se contina sobre los elementos desde low hasta middle-1.
Si el valor buscado es mayor que el elemento medio, el subndice low se define como middle+1 y la
bsqueda se contina sobre los elementos desde middle+1 hasta high.
La bsqueda binara es mucho ms rpida, tiene un incremento tremendo en rendimiento en
comparacin con la bsqueda lineal. El programa utiliza la funcin printheader para sacar los
subndices del arreglo y la funcin printrow para sacar cada subarreglo durante el proceso de
bsqueda binaria. El elemento medio de cada subarreglo queda marcado con un asterisco(*) para
indicar cual es el elemento con el cual el valor buscado se compara.

La funcin recibe 4 argumentos, un arreglo entero b, un entero clave, el subndice del arreglo low y
el subndice de arreglo high. Si el valor buscado no coincide con el elemento medio de un
subarreglo, el subndice low o subndice high es modificado de tal forma que puede buscarse en un
subarreglo ms pequeo.

You might also like