Professional Documents
Culture Documents
Arreglos unidimensionales y
multidimensionales
Los arreglos son una coleccin de variables del mismo tipo que se
referencian utilizando un nombre comn. Un arreglo consta de
posiciones de memoria contigua. La direccin ms baja corresponde al
primer elemento y la ms alta al ltimo. Un arreglo puede tener una o
varias dimensiones. Para acceder a un elemento en particular de un
arreglo se usa un ndice.
El formato para declarar un arreglo unidimensional es:
tipo nombre_arr [ tamao ]
Por ejemplo, para declarar un arreglo de enteros llamado listanum con
diez elementos se hace de la siguiente forma:
int listanum[10];
En C, todos los arreglos usan cero como ndice para el primer elemento.
Por tanto, el ejemplo anterior declara un arreglo de enteros con diez
elementos desde listanum[0] hasta listanum[9].
La forma como pueden ser accesados los elementos de un arreglo, es
de la siguiente forma:
listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/
num = listanum[2]; /* Asigna el contenido del 3er elemento a la variable num */
El lenguaje C no realiza comprobacin de contornos en los arreglos. En
el caso de que sobrepase el final durante una operacin de asignacin,
entonces se asignarn valores a otra variable o a un trozo del cdigo,
esto es, si se dimensiona un arreglo de tamao N, se puede referenciar
el arreglo por encima de N sin provocar ningn mensaje de error en
tiempo de compilacin o ejecucin, incluso aunque probablemente se
provoque el fallo del programa. Como programador se es responsable
de asegurar que todos los arreglos sean lo suficientemente grandes
para guardar lo que pondr en ellos el programa.
C permite arreglos con ms de una dimensin , el formato general es:
tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN];
Por ejemplo un arreglo de enteros bidimensionales se escribir como:
int tabladenums[50][50];
Observar que para declarar cada dimensin lleva sus propios parntesis
cuadrados.
Para acceder los elementos se procede de forma similar al ejemplo del
arreglo unidimensional, esto es,
tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3 fila y la 4 columna*/
num = tabladenums[25][16];
A continuacin se muestra un ejemplo que asigna al primer elemento de
un arreglo bidimensional cero, al siguiente 1, y as sucesivamente.
main()
{
int t,i,num[3][4];
}
En C se permite la inicializacin de arreglos, debiendo seguir el
siguiente formato:
tipo nombre_arr[ tam1 ][ tam2 ] ... [ tamN] = {lista-valores};
Por ejemplo:
int i[10] = {1,2,3,4,5,6,7,8,9,10};
int num[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
El lenguaje C++ permite, adems, construir estructuras ms complejas a partir de estos
tipos bsicos.
Una de las construcciones que podemos definir son los ARREGLOS.
Arreglo: Coleccin ordenada de elementos de un mismo tipo. Ordenada significa que cada
elemento tiene una ubicacin determinada dentro del arreglo y debemos conocerla para
accederlo.
Sintaxis:
Definicin de un arreglo:
<tipo> nombre_variable[longitud];
Con esto diremos que nombre_variable es un arreglo de longitud elementos del tipo
<tipo>. Cabe destacar que longitud debe ser cualquier expresin entera constante mayor
que cero.
Asignacin de un arreglo:
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.
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);
}
Pasaje de parmetros
En Gofer cuando pasamos parmetros a las funciones lo nico que podemos hacer es operar
con ellos para generar el resultado de la funcin, estos parmetros no se ven afectados ya
que simplemente son expresiones del tipo de la aridad de la funcin.
En C++ existen diferentes posibilidades en el pasaje de parmetros, ya que estos pueden ser
pasados por Valor o Copia o por Referencia, y cada uno tiene caractersticas diferentes.
Al declarar un parmetro por Valor, cuando la funcin es invocada, el valor del parmetro
es copiado al entorno de la funcin, creando una nueva variable en el mismo. De esta
forma la variable puede ser operada (cambiada) sin que esto afecte el valor de la variable en
el entorno de la funcin llamadora. Este es el procedimiento que se asemeja al
funcionamiento en Gofer.
De una manera grfica, quizs se entienda mejor la idea:
Copia de
Variable A
La variable A se
copia al entorno
de la funcin
llamada.
Se cambia el valor de
A dentro de la funcin
sin que afecta a la
variable original.
Referencia a
la Variable A
Se referencia a la
variable A del entorno
de la funcin
llamadora.
Si se cambia el valor
de A dentro de la
funcin, se refleja en
la variable original.
Cadenas
A diferencia de otros lenguajes de programacin que emplean un tipo
denominado cadena string para manipular un conjunto de simbolos, en C, se
debe simular mediante un arreglo de caracteres, en donde la terminacin de la
cadena se debe indicar con nulo. Un nulo se especifica como '\0'. Por lo
anterior, cuando se declare un arreglo de caracteres se debe considerar un
carcter adicional a la cadena ms larga que se vaya a guardar. Por ejemplo, si
se quiere declarar un arreglo cadena que guarde una cadena de diez caracteres,
se har como:
char cadena[11];
Se pueden hacer tambin inicializaciones de arreglos de caracteres en donde
automticamente C asigna el caracter nulo al final de la cadena, de la siguiente
forma:
char nombre_arr[ tam ]="cadena";
Por ejemplo, el siguiente fragmento inicializa cadena con ``hola'':
char cadena[5]="hola";
El cdigo anterior es equivalente a:
char cadena[5]={'h','o','l','a','\0'};
Para asignar la entrada estndar a una cadena se puede usar la funcin scanf
con la opcin %s (observar que no se requiere usar el operador &), de igual
forma para mostrarlo en la salida estndar.
Por ejemplo:
main()
{
char nombre[15], apellidos[30];
Problemas Prcticos
Que estructura de control debe aplicarse para la resolucin de cada uno de los siguientes
problemas, confeccione el programa que resuelva el mismo: