domingo, 5 de diciembre de 2010

Arreglos



Arreglos 

Definición 1   Un arreglo se compone de elementos de igual tamaño almacenados linealmente en posiciones de memoria consecutiva.
Se puede acceder a cada elemento de datos individual utilizando un subíndice, o índice, para seleccionar uno de los elementos. En C/C++ , un arreglo no es un tipo de datos estándar; es un tipo agregado compuesto de cualquier otro tipo de datos.
Los arreglos se pueden definir usando tipos de datos mixtos debido a que se supone que todos los elementos son del mismo tamaño. Puesto que todos los elementos son del mismo tamaño y ya que este hecho se utiliza para ayudar a determinar cómo localizar un elemento dado, resulta que los elementos son almacenados en localidades de memoria contiguas.
Lo más importante a tener en cuenta es: El nombre de un arreglo es visto por el compilador como un puntero-constante al primer elemento del arreglo. Esto es muy importante: a) El nombre del arreglo es visto como un tipo puntero, y más específicamente, b) un puntero constante -significa una dirección de memoria bloqueada para el primer elemento de un arreglo-. Por ejemplo, aunque una declaración de arreglo toma la fórma genérica:
Tipo_ElementoArray NombreArray [ NumeroDeElementos ]
El compilador ve la declaración como
Tipo_ElementoArray * const NombreArray = &NombreArray[0];
Por esta razón, un identificador de arreglo no puede ser usado nunca como un valor-i (valor izquierdo). Los valores izquierdos representan variables que su contenido puede ser alterado por el programa; frecuentemente aparecen a la izquierda de las sentencias de asignación.
Si los nombres de arreglo fueran variables izquierdos permitidos, el programa podría cambiar sus contenidos.
float SalariosDeEmpleados[Max_empleados];
.
.
.
SalariosDeEmpleados = 45739.0;
El efecto haría cambiar la dirección inicial del propio arreglo.

Declaraciones de un arreglo

La sintaxis de declaración de arreglos es:
tipo nombre_arreglo [numero_de_elementos];
Los siguientes son dos ejemplos de declaraciones de arreglos válidas en C/C++ :
int CoordenadasDePantalla[5]; /*Un arreglo de 5 enteros */
char IDCompania[20];          /*Un arreglo de 20 caracteres */
Descripción: Image arreglo1
Arreglo CoordenadasDePantalla con índices de desplazamiento válido
En la figura 1 se muestra el primer arreglo que fue declarado con el tipo de números enteros, llamado CoordenadasDePantalla, ocupa en memoria 5 localidades de memoria contiguas, cada una de ellas capaz de almacenar un número entero. Actualmente es común que los números enteros sean de 32 bits, esto hace que el arreglo CoordenadasDePantalla ocupe Descripción: $ 32\times 5= 160$bits
No se permite utilizar nombres de variables dentro de los corchetes. Por esto no es posible evitar la especificación del tamaño del arreglo hasta la ejecución del programa. La expresión debe ser un valor constante, para que el compilador sepa exactamente cuánto espacio de memoria tiene que reservar para el arreglo.
Una buena práctica de programación es usar constantes predefinidas.
#define Coordenadas_Max 20
#define Tamano_MaX_Compania_Id 15
 
int CoordenadasDePantalla[Coordenadas_Max];
char IDCompania[Tamano_MaX_Compania_Id];
El uso de constantes predefinidas garantiza que futuras referencias al arreglo no excedan el tamaño del arreglo definido.

EJEMPLOS DONDE SE UTILIZAN ESTRUCTURAS DE DATOS

Ejemplos

1. Diseñar un algoritmo que ingrese 30 notas aprobados y que me muestre la nota mayor y el promedio de todas (Nota>=10.5 y Nota<=20)

Solución :

Inicio
nota[30], s, may, p : real
i : entero
s←0
para (i=1; i<=30; i++)
repetir
Ingresar nota [i]
hasta (nota[i]>=10.5) y (nota[i]<=20)
s ← s + nota[i]
si (i=1) entonces
may ← nota[i]
sino
si (nota[i]>may) entonces
may ← nota[i]
fin _ si
fin _ si
fin _ para
p ← s/30
mostrar "PROMEDIO TOTAL ES",p
mostrar "LA NOTA MAYOR ES",may
Fin

INTODUCCION A LA ESTRUCTURA DE DATOS


II. INTRODUCCIÓN
Como ya sabemos, las computadoras fueron diseñadas o ideadas como una herramienta mediante la cual podemos realizar operaciones de cálculo complicadas en un lapso de mínimo tiempo. Pero la mayoría de las aplicaciones de este fantástico invento del hombre, son las de almacenamiento y acceso de grandes cantidades de información.
La información que se procesa en la computadora es un conjunto de datos, que pueden ser simples o estructurados. Los datos simples son aquellos que ocupan sólo una localidad de memoria, mientras que los estructurados son un conjunto de casillas de memoria a las cuales hacemos referencia mediante un identificador único.
Debido a que por lo general tenemos que tratar con conjuntos de datos y no con datos simples (enteros, reales, booleanos, etc.) que por sí solos no nos dicen nada, ni nos sirven de mucho, es necesario tratar con estructuras de datos adecuadas a cada necesidad.
Las estructuras de datos son una colección de datos cuya organización se caracteriza por las funciones de acceso que se usan para almacenar y acceder a elementos individuales de datos.
Una estructura de datos se caracteriza por lo siguiente:
  • Pueden descomponerse en los elementos que la forman.
  • La manera en que se colocan los elementos dentro de la estructura afectará la forma en que se realicen los accesos a cada elemento.
  • La colocación de los elementos y la manera en que se accede a ellos puede ser encapsulada.
Ejemplo: Supongamos que nos enfrentamos a un problema como este: Una empresa que cuenta con 150 empleados, desea establecer una estadística sobre los salarios de sus empleados, y quiere saber cual es el salario promedio, y también cuantos de sus empleados gana entre $1250.00 y $2500.00.
Si tomamos la decisión de tratar este tipo de problemas con datos simples, pronto nos percataríamos del enorme desperdicio de tiempo, almacenamiento y velocidad. Es por eso que para situaciones de este tipo la mejor solución son los datos estructurados.
Identificar  y reconocer la importancia de los datos estructurados en la programación mediante la utilización de estructuras lógicas de datos que te permitan hacer un uso más eficiente del espacio de memoria, de minimizar los tiempos de acceso, así como de lograr formas más efectivas de inserción y eliminación de datos en estructuras de almacenamiento.