martes, 27 de mayo de 2014

Arreglos & Cadenas

Un arreglo es un tipo de dato estructurado que almacena en una sola variable un conjunto limitad de datos o elementos del mismo tipo. Es un conjunto de localidades de memoria contiguas, donde la dirección mas baja corresponde al primer elemento y la mas alta al ultimo. 
El tipo de elementos almacenados en el arreglo puede ser cualquier tipo de dato. 

Un arreglo se caracteriza por: 
  • Ser una lista de un numero finito de n elementos del mismo tipo 
  • Almacena los elementos del arreglo en memoria contigua 
  • Tener un único nombre de variable que representa a todos los elementos y estos a su vez se diferencian por un indice o sub-indice 
  • Acceder de manera directa o aleatoria a los elementos individuales del arreglo, por el nombre del arreglo y el indice o sub-indice 

Los arreglos se clasifican en: 
  • Unidimensionales  (vectores o listas)
  • Bidimensionales (tablas o matrices) 
  • Multidimensionales (mas de dos dimensiones)

Arreglos unidimensionales (vectores o listas)

Conjunto de n elementos del mismo tipo almacenados en memoria continua en un vector o lista. 

Declaración de un arreglo unidimensional 

tipo_dato identif_arreglo [tam_arreglo] 

donde: 
tipo_dato se refiere al tipo de dato de cada elemento del arreglo 
identif_arreglo es el nombre que representa a todo el arreglo 
tam_arreglo es la cantidad de elementos que contiene el arreglo 



Inicialización de arreglos unidimensionales 

En el momento de declarar el arreglo, se pueden especificar los valores. Ejemplo: 

     tipo_dato identif_arreglo [tam_arreglo] = { valores }; 
        int lista [5] = {10,4,6,7,3};

La asignación de los valores se realiza al declarar el arreglo mediante el operador de asignación ( = )  y los valores contenidos dentro de las llaves. 


Lectura e impresión de un arreglo 

Es fácil procesar los elementos de un arreglo mediante los ciclos repetitivos porque facilitan la lectura, impresión, consulta y modificación de los elementos del arreglo, reduciendo el trabajo a unas cuantas lineas bien empleadas. 
Cuando el compilador ejecuta un ciclo y la instrucción leer scanf  el programa almacena los valores de en la variable arreglo. Para utilizar ciclos repetitivos es necesario el uso de variable de apoyo; el siguiente ejemplo muestra la forma de pedirle 10 números al usuario e imprimirlos después, utilizando ciclos repetitivos for. 

#include <stdio.h> 
 main ()
{
     int lista [10], i ; 
     for ( i = 0 ;  i <10 ; i++)
     { 
              printf ("Dame el elemento");
              scanf ("%d", &lista[i]);  
     }
    
     printf (" Elementos del arreglo lista : ");
     for ( i = 0 ;  i <10 ; i++)
    {
              printf ("%d\n", lista [i] );
    }

system ("pause");

El programa utiliza la estructura de repetición para (for) y leer (scanf) para capturar los elementos  del arreglo con nombre lista, e imprime el arreglo mediante otro ciclo para (for) y el imprimir (printf), donde la instrucción desde recorre todas las posiciones del arreglo. Es importante mencionar que se debe respetar el tipo de dato del arreglo y también especificar la posición del arreglo en la que se quiere guardad el valor. 

Modificación de un elemento del arreglo 

Es posible modificar los elementos de un vector en cualquier momento durante el programa, solo es necesario especificar el nombre del arreglo, la posición y el nuevo valor. A continuación se muestra un ejemplo: 

tipo_dato identif_arreglo [posición] = nuevo_valor ; 
 int lista [3] = 18; 

En donde valor es un dato, el resultado de una llamada a función o de alguna operación lógica o aritmética. En este ejemplo, se asigna el valor de 18 al cuarto elemento del arreglo que se encuentra en la posición 3. 

Ordenación en Arreglos

Su finalidad es la clasificación de datos en arreglos o archivos en un orden ascendente o descendente mediante un criterio que puede ser numérico o alfabético o de algún otro tipo. 
De acuerdo con el tipo de elemento que se quiere, la ordenación puede ser: 
  • Interna: Los datos se encuentran en memoria (arreglos, listas etc) y pueden ser de acceso aleatorio o directo 
  • Externa: Los datos están en un dispositivo de almacenamiento externo (archivo) y su ordenación es mas lenta que la interna 

Ordenamiento por burbuja 

Consiste en comparar pares de elementos del arreglo e intercambiar las posiciones, comenzando por la casilla cero hasta haber acomodado el numero mas grande en la ultima posición. (orden ascendente). Se le llama "burbuja" porque en cada pasada brota el elemento mayor o menor hasta que queden todos los elementos ordenados. 
El problema de este algoritmo de búsqueda es que vuelve a comparar  los ya ordenados desde la posición cero, por lo que es el mas deficiente, sin embargo por su sencillez es el mas utilizado. 
El siguiente código es el ejemplo de la implementación del algoritmo de búsqueda burbuja: 


i <- 1 
mientras i < N haz 
 j <- N 
 mientras j > i haz 
 si arreglo[j] < arreglo[j-1] entonces 
 intercambia(arreglo[j],arreglo[j-1]) 
 j < j - 1 
 i <- i +1 

Arreglos de Caracteres (Cadenas) 

Los arreglos son necesarios para la implementación de las cadenas de caracteres. Una cadena de texto es un conjunto de caracteres. En el lenguaje C no existe el tipo de dato cadena (string) como en otros lenguajes de programación, por lo que se utiliza un arreglo de caracteres, para poder almacenar una cadena: 

                    char cad [ ]= "Hola" ; 

Una cadena de caracteres es un arreglo de caracteres que contiene al final el carácter nulo (\0);  por esta razón es necesario que al declarar los arreglos estos sean de un carácter mas que la cadena mas grande. El compilador inserta automáticamente un espacio nulo al final de la cadena, de modo que la secuencia real seria: 
  
                          char cad [ ]= "Hola" ; 

La cadena se almacenara de la siguiente forma: 


Contenido:       H         O           L          A      \0

Una opción para almacenar una cadena de caracteres es el uso de la palabra reservada scanf (variable)  pero si lo que se quiere es almacenar una cadena con espacios en blanco no lo podemos hacer con ella, sino que debemos utilizar la palabra reservada gets, que se encuentra dentro de la librería string.h; gets  solo se utiliza para leer cadenas de caracteres y scanf   para leer cualquier tipo de variable, de preferencia de tipo numérico. 

Gets 

Introduce una cadena de caracteres del teclado hasta que se encuentre un carácter \n ( nueva linea), dicho carácter no se añade a la cadena. Se agrega al final un carácter de terminacion NULL. 

No hay comentarios:

Publicar un comentario