Arreglo s programacion

38
A la hora de desarrollar aplicaciones necesitamos almacenar una gran cantidad de información, necesitamos también estructuras que recojan varios tipos de datos a la vez. C cuenta con varias herramientas para poder desarrollar todas estas funcionalidades. En éste capítulo veremos los Arrays simples y multidimensionales para poder almacenar una cantidad determinada de datos de un mismo tipo, acceder a ellos en cualquier momento y operar, también veremos los registros para poder trabajar con conjuntos de variables. Arrays Un array, vector, tabla o arreglo es una cantidad de valores de un determinado tipo colocados de manera secuencial e indexados, cuya forma de acceder a ellos es especificando la posición (o índice) donde se encuentre dentro del array. Declaración. Para declarar un array hay que seguir la siguiente estructura: Tipo_dato nombre_variable [longitud_array]; El tipo de datos puede ser cualquier de los vistos anteriormente, por ejemplo, un array de 20 enteros sería así: int num[20]; La declaración es exactamente igual que cuando declaramos variables normales, salvo que hay que añadir la longitud del array en cuestión. Una cosa importante que hay que tener en cuenta a la hora de trabajar con arrays en C es que la primera celda del array tiene el índice 0, por lo que el array anterior tendría las siguientes posiciones: num[0], num[1], num[2], num[3], num[4], num[5], num[6] … num[19]. En una misma fila de declaración se pueden declarar tanto varios arrays a la vez como variables normales. int num1,num2,num3[10],num4,num5[5]; ARREGLOS Y REGISTROS

description

arreglos

Transcript of Arreglo s programacion

ARREGLOS Y REGISTROS

A la hora de desarrollar aplicaciones necesitamos almacenar una gran cantidad de informacin, necesitamos tambin estructuras que recojan varios tipos de datos a la vez. C cuenta con varias herramientas para poder desarrollar todas estas funcionalidades. En ste captulo veremos losArrays simples y multidimensionalespara poder almacenar una cantidad determinada de datos de un mismo tipo, acceder a ellos en cualquier momento y operar, tambin veremos losregistrospara poder trabajar con conjuntos de variables.Arrays

Un array, vector, tabla o arreglo esuna cantidad de valores de un determinado tipo colocados de manera secuencial e indexados, cuya forma de acceder a ellos es especificando la posicin (o ndice) donde se encuentre dentro del array.

Declaracin.

Paradeclarar un arrayhay que seguir la siguiente estructura:

Tipo_dato nombre_variable [longitud_array];

Eltipo de datospuede ser cualquier de los vistos anteriormente, por ejemplo, un array de 20 enteros sera as:

int num[20];

La declaracin esexactamente igualque cuando declaramos variables normales, salvo que hay que aadir la longitud del array en cuestin.

Una cosa importante que hay que tener en cuenta a la hora de trabajar con arrays en C es quela primera celda del array tiene el ndice 0, por lo que el array anterior tendra las siguientes posiciones:

num[0], num[1], num[2], num[3], num[4], num[5], num[6] num[19].

En unamisma fila de declaracinse pueden declarar tanto varios arrays a la vez como variables normales.

int num1,num2,num3[10],num4,num5[5];

Tambin es posibledeclarar arrays prescindiendo del uso de nmerospara definir su tamao, aunque es necesario que tengamos en cuenta ciertos factores:

1 Para declarar un array usando identificadores slo se podr usarconstantesdefinidas mediante #define.

#define TAM 50

int main(void){ int a[TAM];}

2 No es correcto definir el tamao de un array convariables.

int main(void){ int tam=50; int a[tam];}

3 No es correcto definir el tamao de un array conconstantes declaradas mediante const. Esto es debido a que, a efectos del compilador, una constante declarada mediante const es una variable de slo lectura.

int main(void){ const int tam=50; int a[tam];}

Asignacin de valores e iniciacin de un array.

Cuando se declara un array las celdas de stecontienen valores completamente aleatorios, es necesario que le asignemos los valores con los que necesitamos trabajar, para esto hay varias posibilidades.

Asignacin directade un valor mediante el operador de asignacin =, hay que especificar mediante su ndice la celda concreta donde se va a almacenar. En el array anterior sera tal que as:

a[2] = 1;

Por lo general cuando comenzamos un programa se debeinicializar los valores de todo el array, es decir, tendremos que asignar valores en todos sus ndices, para ello lo mejor es recorrer el array completo mediante un bucle.

Elbucle fores perfecto para trabajar con arrays puesto que al tener controlados todos los elementos esenciales de un bucle podemos centrarnos en trabajar con el array directamente.

Un ejemplo deinicializacin de un arrayes el siguiente:

#include

#define TAM 20

int main(void){int x, a[TAM];

for (x = 0; x < TAM; x++){a[x]=0; }

return 0;}

Tambin es posibleinicializar un array en su propia declaracin, para ello debemos seguir la siguiente estructura:

Tipo_dato nombre_variable [longitud_array] = {valor0, valor1... valor_longitud_array};

Unejemploprctico sera el siguiente:

int num[10] = {0,0,0,0,0,0,0,0,0,0}:

as nos aseguramos de que tenemos el array convalores definidos por nosotrosdesde el principio del programa.

Recorrer un array.

Como hemos podido comprobar en el anterior apartado,un array se recorre mediante un bucle.

Se toma comoprimer valor el ceropuesto que la primera celda tiene ndice cero, por lo tanto la condicin para salir del bucle es el tamao menos uno. Si recorremos el array y nos pasamos, o bien hacemos referencia a una celda fuera del rango del array el programa dar errores.

Veamos unejemplodonde recorremos un array y mostramos su valor por pantalla:

#include

#define TAM 5

int main(void){int x,int a[TAM] = {0,0,0,0,0};

for (x = 0; x < TAM; x++){printf(%d,a[x]); }

return 0;}

Cadenas de texto o array de caracteres.

El tipo de dato String o Cadena no existe en Ccomo tal, en lugar de eso lo que tenemos a nuestra disposicin es el array de caracteres, la forma de tratarlo es exactamente igual que con los arrays de otros tipos de datos a excepcin de muchas instrucciones, entre ellas printf y scanf.

Consideraciones del array de caracteres

Definir unarray de caractereses sencillo, exactamente igual que con los otros tipos de datos, pero debemos tener en consideracin el trmino de la cadena.

En las variables de tipo entero todas las celdas del array se rellenan por defecto con valores aleatorios, en los arrays de caracteres pasa igual. Al introducir orellenar un array con caracteresno es necesario que lo rellenos al completo, no obstante hay que indicar cuando termina la cadena.

Para eso en C disponemos delcarcter especial \0, con ste le diremos al programa que tenga en cuenta dentro del array todos los caracteres hasta llegar al carcter \0.

El \0 cuenta como un carcter ms dentro del arrayy como tal ocupa una celda, es por eso que si definimos un array de 50 caracteres en realidad slo podremos rellenar los primeros 49, ya que siempre el carcter final es el \0.

HOLA\0

HAY\0

El carcter \0no tenemos por qu introducirlo nosotros, el programa puede encargarse, con que sepamos qu significa y cmo utilizarlo y controlarlo es suficiente.

Un truco para poder almacenar un nmero de caracteres en un array con el tamao de ese nmero esdefinir el array con un tamao igual y sumar una posicin:

#define TAM 5

int main(void){char a[TAM+1};return 0;}

Cadenas y printf

Para poderescribir un array de caracteres utilizamos la sentencia printfy la marca de formato %s

#include #define TAM 50

int main(void){char saludo[TAM +1] = "hola";

printf ("%s.\n", saludo);

return 0;}

No es necesario utilizar los buclesy recorrer celda a celda, aunque se puede, resulta trabajoso ya que a veces los arrays pueden ser bastante grandes.

Cadenas y scanf.

La instruccinscanf cumple con su cometido de leer una palabra, pero se presenta un problema y es el que acabo de decir, slo lee una palabra, no una frase completa.

Pero a eso le daremos solucin en el siguiente apartado, ahora veamos cmoutilizar la instruccin scanf:

#include #define TAM 50

int main(void){char saludo[TAM +1];

scanf(%s,saludo);

printf ("%s.\n", saludo);

return 0;}

Como se puede observarno es necesario de nuevo recorrer el array, la instruccin hace posible asignar los caracteres directamente en sus celdas.

Tambin si se observa el cdigo,en la instruccin scanf no he puesto un & delante del array, esto es debido a que hasta ahora hemos usado el scanf con & porque lo que scanf necesita es una direccin de memoria donde alojar el valor, cosa que hacamos con &, como los arrays son en si mismos direcciones de memoria indexados no es necesario colocar el &.

Prueba el cdigointroduciendo la siguiente cadena Hola buenos das y observa el resultado.

Cadenas y gets.

Para solucionar elproblema del scanfcon el array de caracteres tenemos dentro de la librera stdio.h la instruccingets

Con gets no es necesario utilizar una marca de formato, tan slo con especificar el array es suficiente, veamos un ejemplo:

#include #define TAM 50

int main(void){char saludo[TAM +1];

gets(saludo);

printf ("%s.\n", saludo);

return 0;}

Prueba ahora el cdigointroduciendo de nuevo la cadena Hola buenos das y observa el resultado.

Copiar cadenas.

El caso de necesitar hacer unacopia de cadenases una cosa que nos podemos encontrar perfectamente en un programa, hasta ahora todo parece que se puede realizar perfectamente mediante sentencias, por lo que copiar cadenas no debe ser muy distinto, veamos el siguiente ejemplo:

#include #define TAM 50

int main(void){char saludo[TAM +1] = "hola";char despedida[TAM +1];

despedida=saludo;

printf ("%s.\n", despedida);

return 0;}

Esto es incorrecto, elcompilador dar errory el programa no llegar ni a ejecutarse, esto es debido a que, recordemos, las cadenas son arrays, y los arrays son direcciones de memoria que una vez declarados no se pueden alterar, por lo que en el programa anterior lo que estaramos intentando hacer es asignar la direccin de memoria de otra direccin de memoria.

La copia de cadenas debe realizarse carcter a carcter, asignando los valores uno a uno en todas las posiciones implicadas, veamos el mismo ejemplo pero correctamente:

#include #define TAM 50

int main(void){char saludo[TAM +1] = "hola";char despedida[TAM +1];

for (x=0;x