unidad 5 arreglos
TRANSCRIPT
INSTITUTO TECNOLÓGICO SUPERIOR DE MARTÍNEZ DE LA TORRE
INGENIERÍA EN MECATRONICA
PROGRAMACION BASICA
LIC. ARMANDO HERNANDEZ BASILIO
ALUMNOS: No. CONTROL
DE LA ROSA MUÑOZ GUILLERMO 130I0188
ESPEJEL MORENO MARIA FERNANDA 130I0014
GONZALEZ MENDOZA INGRID MELISSA 130I0024
HERNANDEZ MALDONADO ANAHI 130I0037
PRIMER. SEMESTRE GRUPO: “A”
MARTINEZ DE LA TORRE VER, A 15 DE NOVIEMBRE DEL 2013.
Página 1
INDICE
Introducción…………………………………………………………………..……. 4
1. Arreglos………….………………………………………………………………5
1.1. Declaración de un Array………………………………………………….5
1.2. Almacenamiento en memoria de los Array…… …………………………..7
1.3. Tamaño de los Array………………………………………………………7
1.4. Inicialización de un Array………………………………………………………8
1.5. Arrays de caracteres y cadenas de texto………………………………………8
1.6. Array unidimensionales: los vectores……………………………………………9
1.7. Array bidimensionales (tablas/ matrices)………………………………………9
1.8. Array multidimensionales………………………………………………………10
1.9. Ordenamientos………………………………………………………………..11
1.9.1. Método de intercambio o de burbuja……………………………………..11
1.9.2. Ordenamiento por inserción……………………………………………….11
1.9.3. Ordenación por selección………………………………………………….12
1.9.4. Método de Shell……………………………………………………………..14
1.9.5. Ordenación rápida (quicksort)……………………………………………15
2. Archivos………………………………………………………………………….17
Página 2
2.1. Tipos de archivos……………………………………………………………..17
2.2. Operaciones generales que se realizan sobre un archivo……………….18
Conclusión…………………………………………………………………………..21
Fuentes de Consulta…………..…………………………………………………...22
Página 3
INTRODUCCION
A lo largo de nuestro curso de programación básica hemos aprendido algunas de las
características que tienen los distintos tipos de datos básicos y/o simples como lo son:
carácter, entero y coma flotante. También se ha podido comprender y definir tanto como
utilizar constantes símbolos utilizando const, #define y el tipo de num.
Los arreglos también los podríamos utilizar para poder almacenar un conjunto de variables,
que sean solo del mismo tipo de dato.
Para acceder al elemento de un arreglo es necesario tener en mente el índice, esto se debe
escribir entre paréntesis () cuadros []. por ejemplo para el arreglo A y la posición 5 se
escribiría A[5]
También se verá, comprenderá, analizara y se usara el concepto y tratamiento de los
ARREGLOS o ARRAYS estos son conjuntos de datos que se almacenan en memoria de
manera seguida con el mismo nombre, tales como veinte enteros, cincuenta números de
coma flotante o quince caracteres. Entonces con esto sabemos que los ARRAYS son muy
importantes por diversas razones. Una de las operaciones más importantes es almacenar
secuencias o cadenas de texto. Hasta el momento “C” proporciona datos de un solo
carácter; utilizando el tipo ARRAYS, se puede crear una variable que contenga un grupo
específico de caracteres.
Página 4
1. ARREGLOS
Un arreglo o array (en inglés) es un conjunto finito y ordenado de elementos homogéneos.
La propiedad “ordenado” significa que el elemento primero, segundo y tercero,…, enésimo
de un array puede ser identificado. Los elementos del array son homogéneos, es decir, del
mismo tipo de datos. Los array también se conocen como matrices-en matemáticas- y
tablas- en cálculos financieros.
El tipo de elementos almacenados en el array puede ser cualquier tipo de dato de C,
incluyendo estructuras definidas por el usuario. Normalmente el array se utiliza para
almacenar tipos tales como char, int o float.
En otras palabras un arreglo es una especie de variable que contiene muchos valores pero
cada uno con una posición diferente. Un arreglo puede ser unidimensional o vectorial,
bidimensional o matricial, o multidimencional.
1.1 DECLARACIÓN DE UN ARRAY
Al igual que con cualquier tipo de variable, se debe declarar un array antes de utilizarlo. Un
array se declara de modo similar a otros tipos de datos, excepto que se debe indicar al
compilador el tamaño o longitud del array. Para indicar al compilador el tamaño o longitud
del array se debe hacer seguir al nombre, el tamaño encerrado entre corchetes. La sintaxis
para declarar un array de una dimensión determinada es:
tipo nombreArray [numeroDeElementos] ;
Por ejemplo, para crear un array (lista) de diez variables enteras, se escribe:
int números [ 10 ] ;
Esta declaración hace que el compilador reserve espacio suficiente para contener diez
valores enteros. En C los enteros ocupan, normalmente, 2 bytes, de modo que un array de
diez enteros ocupa 20 bytes de memoria.
Se puede acceder a cada elemento del array utilizando un índice en el nombre del array.
Página 5
Por ejemplo:
printf ("%d \n",números [4] ) ;
Visualiza el valor del elemento 5 del array. Los arrays siempre comienzan en el elemento O.
Así pues, el array números contiene los siguientes elementos individuales:
números [ O ] números [ 1 ] números [ 2 ] números [ 3 ]
números [ 4 ] números [ 5 ] números [ 6 ] números [ 7 ]
números [ 8 ] números [ 9 ]
Si por ejemplo, se quiere crear un array de números reales y su tamaño es una constante
representada por un parámetro
#define N 20
float vector [N];
Para acceder al elemento 3 y leer un valor de entrada:
scanf (“%f 'I, &vector [ 2 ] ) ;
EJEMPLOS:
int edad[5] ; Array edad contiene 5 elementos: el primero, edad [ 0 ] y
el último, edad [ 4 ] .
int pesos [25] , longitudes [100] ; Declara 2 arrays de enteros.
float salarios [25] ; Declara un array de 25 elementos float.
double temperaturas[50]; Declara un array de 50 elementos double.
char letras [15] ; Declara un array de caracteres.
#define MX 120 Declara un array de caracteres de tamaño MX+1,
charbuffer[MX+1]; el primer elemento es buffer[O] y el último
buffer[MX].
Página 6
1.2 ALMACENAMIENTO EN MEMORIA DE LOS ARRAYS
Los elementos de los arrays se almacenan en bloques contiguos. Así, por
int edades [ 5 ] ;
char códigos [ 5 ] ;
se representan gráficamente en memoria en:
Los arrays de caracteres funcionan de igual forma que los arrays numéricos, partiendo de la
base de que cada carácter ocupa normalmente un byte.
1.3 TAMAÑO DE LOS ARRAYS
El operador sizeof devuelve el número de bytes necesarios para contener su argumento. Si
se usa sizeof para solicitar el tamaño de un array, esta función devuelve el número de
bytes reservados para el array completo. Por ejemplo, supongamos que se declara un array
de enteros de 100 elementos denominado edades; si se desea conocer el tamaño del array,
se puede utilizar una sentencia similar a:
n = sizeof(edades);
donde n tomará el valor 200. Si se desea solicitar el tamaño de un elemento individual del
array, tal como
n = sizeof(edades[6]);
n almacenará el valor 2 (número de bytes que contienen un entero).
Página 7
1.4 INICIALIZACIÓN DE UN ARRAY
Se deben asignar valores a los elementos del array antes de utilizarlos, tal como se asignan
valores a variables. Para asignar valores a cada elemento del array de enteros precios, se
puede escribir:
precios[0] = 10;
precios[1] = 20;
precios[3] = 30;
precios[4] = 40;
...
La primera sentencia fija precios [ 0 ] al valor 10, precios [ 1 ] al valor 20, etc. Sin embargo,
este método no es práctico cuando el array contiene muchos elementos. El método utilizado,
normalmente, es inicializar el array completo en una sola sentencia. Cuando se inicializa un
array, el tamaño del array se puede determinar automáticamente por las constantes de
inicialización. Estas constantes se separan por comas y se encierran entre llaves, como
en los siguientes ejemplos:
int números[ 6 ] = {10, 20, 30, 40, 50, 60} ;
int n[ ] = {3, 4, 5} / * Declara un array de 3 elementos * /
char c[ ] = {’L’,‘u’,’i’,’s’}; / * Declara un array de 4 elementos * /
El array números tiene 6 elementos, n tiene 3 elementos y el array c tiene 4 elementos.
1.5 ARRAYS DE CARACTERES Y CADENAS DE TEXTO
Una cadena de texto es un conjunto de caracteres, tales como «ABCDEFG». C soporta
cadenas de texto utilizando un array de caracteres que contenga una secuencia de
caracteres:
char cadena [ ] = "ABCDEFG" ;
Es importante comprender que las cadenas se deben almacenar en arrays de caracteres,
pero no todos los arrays de caracteres contienen cadenas.
Página 8
1.6 ARRAY UNIDIMENSIONALES: LOS VECTORES
El array unidimensional (matriz de una dimensión) es el tipo más simple. Un vector de una
dimensión denominado NOTAS que consta de n elementos se puede representar así:
NOTAS(1) NOTAS(2) . . . . . NOTAS(I) . . . . . NOTAS(N)
El índice de un array se denomina, con frecuencia, subíndice del array. El término procede
de las matemáticas, en las que un subíndice se utiliza para representar un elemento
determinado (1, 2,. . ., i, n) donde se designa su posición en la ordenación del vector.
El método de numeración del elemento i-ésimo con el índice o subíndice i-l se denomina
indexación basada en cero. Su uso tiene el efecto de que el índice de un elemento del
array es siempre el mismo que el número de <<pasos> > desde el elemento inicial a [ 0 ] a
ese elemento. Por ejemplo, a [ 3 ] está a 3 pasos o posiciones del elemento a [ 0 ].
1.7 ARRAY BIDIMENSIONALES (TABLAS/ MATRICES)
El array bidimensional se puede considerar como un vector de vectores. Por consiguiente,
un conjunto de elementos, todos del mismo tipo, en el cual el orden de los componentes es
significativo y en el que se necesita especificar los subíndices para identificar cada elemento
del array.
Si se visualiza un array unidimensional, se puede considerar como una columna de datos,
un array bidimensional es un grupo de columna.
Página 9
Fila 1Fila 2Fila 3Fila 4Fila 5
Columna 6 Columna 5 Columna 4 Columna 3 Columna 2Columna 1
1.8 ARRAY MULTIDIMENSIONALES
C proporciona la posibilidad de almacenar varias dimensiones, aunque raramente los datos
del mundo real requieren más de dos o tres dimensiones. El medio más fácil de dibujar un
array de tres dimensiones es imaginar un cubo tal como se muestra en la Figura 8.10.
Un array tridimensional se puede considerar como un conjunto de arrays bidimensionales
combinados juntos para formar, en profundidad, una tercera dimensión. El cubo se construye
con filas (dimensión vertical), columnas (dimensión horizontal) y planos (dimensión en
profundidad). Por consiguiente, un elemento dado se localiza especificando su plano, fila y
columna. Una definición de un array tridimensional equipos es:
int equipos[3] [15] [10] ;
Un ejemplo típico de un array de tres dimensiones es el modelo libro, en el que cada página
del libro es un array bidimensional construido por filas y columnas. Así, por ejemplo, cada
página tiene cuarenta y cinco líneas que forman las filas del array y ochenta caracteres por
línea, que forman las columnas del array. Por consiguiente, si el libro tiene quinientas
páginas, existirán quinientos planos y el número de elementos será 500 x 80 x 45 =
1.800.000..
Página 10
1.9 ORDENACIÓN DE LISTAS
La ordenación de arrays es otra de las tareas usuales en la mayoría de los programas. La
ordenación o clasificación es el procedimiento mediante el cual se disponen los elementos
del array en un orden especificado, tal como orden alfabético u orden numérico. Los
métodos de ordenación más directos son los que se realizan en el espacio ocupado por el
array. Los más populares son:
1.9.1. MÉTODO DE INTERCAMBIO O DE BURBUJA:
La ordenación por burbuja es uno de los métodos más fáciles de ordenación. El método
(algoritmo) de ordenación es muy simple. Se compara cada elemento del array con el
siguiente (por parejas), si no están en el orden correcto, se intercambian entre sí sus
valores. El valor más pequeño flota hasta la parte superior del array como si fuera una
burbuja en un vaso de refresco con gas.
50 15 56 14 35 1 12 9
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
Los pasos a dar son:
Comparar A[1] y A[2] si están en orden, se mantienen como están, en caso
contrario se intercambian entre si.
A continuación se comparan los elementos 2 y 3; de nuevo se intercambian si
es necesario.
El proceso continua hasta que cada elemento del vector ha sido comparado
con sus elementos adyacentes y se han realizado los intercambios necesarios.
1.9.2. ORDENAMIENTO POR INSERCIÓN
Consiste en insertar un elemento en el vector en una parte ya ordenada de este vector y
comenzar de nuevo con los elementos restantes. Por ser utilizado generalmente por los
jugadores de cartas se le conoce también por el método de la baraja.
Página 11
Por ejemplo, supóngase que se tiene la lista desordenada;
Para insertar el elemento 45, habrá que insertar entre 43 y 65, lo que supone desplazar a la
derecha todos aquellos números de valor superior a 45, es decir, saltar sobre 65 y 84.
El método se basa en comparaciones y desplazamientos sucesivos. El algoritmo de
clasificaciones de un vector X para N elementos se realiza con un recorrido de todo el vector
y la inserción del elemento correspondiente en el lugar adecuado. El recorrido se realeza
desde el segundo elemento al n-ésimo.
desde i 2 hasta N hacer
insertar X[ i ] en el lugar adecuado
entre x [ 1 ] . . x [ i – 1 ]
fin_desde
Esta acción repetitiva – insertar- se realiza más fácilmente con la inclusión de un valor
centinela o bandera. (SW).
1.9.3. ORDENACIÓN POR SELECCIÓN
Este método se basa en buscar el elemento menor del vector y colocarlo en primera
posición. Luego se busca el segundo elemento más pequeño y se coloca en la segunda
posición, y así sucesivamente.
Los pasos sucesivos a dar son:
Página 12
5 14 24 39 43 65 84 45
5 14 24 39 43 65 84 45
Seleccionar el electo menor del vector de n elementos.
Intercambiar dicho elemento con el primero.
Repetir estas operaciones con los n – 1 elementos restantes, seleccionando el
segundo elemento; continuar con los n – 2 elementos restantes hasta que solo
quede el mayor.
Ejemplo:
El arreglo a ordenar es:
a = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e'].
Se empieza por recorrer el arreglo hasta encontrar el menor elemento. En este caso el
menor elemento es la primera 'a'. De manera que no ocurre ningún cambio. Luego se
procede a buscar el siguiente elemento y se encuentra la segunda 'a'.
Esta se intercambia con el dato que está en la segunda posición, la 's', quedando el arreglo
así después de dos recorridos:
a = ['a','a','o','r','t','i','n','g','e','x','s','m','p','l','e'].
El siguiente elemento, el tercero en orden de menor mayor es la primera 'e', la cual se
intercambia con lo que está en la tercera posición, o sea, la 'o'. Le sigue la segunda 's', la
cual es intercambiada con la 'r'.
El arreglo ahora se ve de la siguiente manera: a = ['a','a','e','e','t','i','n','g','o','x','s','m','p','l','r'].
De esta manera se va buscando el elemento que debe ir en la siguiente posición hasta
ordenar todo el arreglo.
El número de comparaciones que realiza este algoritmo es :
Para el primer elemento se comparan n-1 datos, en general para el elemento i-ésimo se
hacen n-i comparaciones, por lo tanto, el total de comparaciones es: la sumatoria para i de 1
a n-1 (n-i) = 1/2 n (n-1).
Página 13
1.9.4. MÉTODO DE SHELL
Es una mejora del método de inserción directa que se utiliza cuando el número de
elementos a ordenar es grande. Nombrado así debido a su inventor Donald Shell. Ordena
subgrupos de elementos separados K unidades (respecto de su posición en el arreglo) del
arreglo original. El valor K es llamado incremento.
Después de que los primeros K subgrupos han sido ordenados (generalmente utilizando
INSERCION DIRECTA), se escoge un nuevo valor de K más pequeño, y el arreglo es de
nuevo partido entre el nuevo conjunto de subgrupos. Cada uno de los subgrupos mayores es
ordenado y el proceso se repite de nuevo con un valor más pequeño de K.
Eventualmente el valor de K llega a ser 1, de tal manera que el subgrupo consiste de todo el
arreglo ya casi ordenado.
Al principio del proceso se escoge la secuencia de decrecimiento de incrementos; el último
valor debe ser 1."Es como hacer un ordenamiento de burbuja pero comparando e
intercambiando elementos."
Cuando el incremento toma un valor de 1, todos los elementos pasan a formar parte del
subgrupo y se aplica inserción directa.
El método se basa en tomar como salto N/2 (siendo N el número de elementos) y luego se
va reduciendo a la mitad en cada repetición hasta que el salto o distancia vale 1.
Ejemplo:
Para el arreglo a = [6, 1, 5, 2, 3, 4, 0]
Tenemos el siguiente recorrido:
Recorrido Salto Lista Ordenada Intercambio
1 3 2,1,4,0,3,5,6 (6,2), (5,4), (6,0)
2 3 0,1,4,2,3,5,6 (2,0)
3 3 0,1,4,2,3,5,6 Ninguno
4 1 0,1,2,3,4,5,6 (4,2), (4,3)
5 1 0,1,2,3,4,5,6 Ninguno
Página 14
1.9.5. ORDENACIÓN RÁPIDA (QUICKSORT)
El método de ordenación rápida sirve para ordenar o clasificar un vector o lista de elementos
(array). Desarrollada por C.A.R. Hoare en 1960, se basa en el hecho de que es más rápido y
fácil ordenar dos listas pequeñas que una lista grande. Se denomina así, ya que en general,
puede ordenar una lista de datos mucho más rápidamente que cualquiera de los métodos
de ordenación anteriores.
Los pasos a seguir son:
Eliges un elemento de la lista. Puede ser cualquiera, lo llamaremos elemento de
división.
Buscas la posición que le corresponde en la lista ordenada (explicado más abajo).
Acomodas los elementos de la lista a cada lado del elemento de división, de manera
que a un lado queden todos los menores que él y al otro los mayores (explicado más
abajo también). En este momento el elemento de división separa la lista en dos
sublistas (de ahí su nombre).
Realizas esto de forma recursiva para cada sublista mientras éstas tengan un largo
mayor que 1. Una vez terminado este proceso todos los elementos estarán
ordenados.
Una idea preliminar para ubicar el elemento de división en su posición final sería
contar la cantidad de elementos menores y colocarlo un lugar más arriba. Pero luego
habría que mover todos estos elementos a la izquierda del elemento, para que se
cumpla la condición y pueda aplicarse la recursividad. Reflexionando un poco más se
obtiene un procedimiento mucho más efectivo. Se utilizan dos índices: i, al que
llamaremos contador por la izquierda, y j, al que llamaremos contador por la derecha.
El algoritmo es éste:
Recorres la lista simultáneamente con i y j: por la izquierda con i (desde el primer
elemento), y por la derecha con j (desde el último elemento).
Cuando lista[i] sea mayor que el elemento de división y lista[j] sea menor los
intercambias.
Repites esto hasta que se crucen los índices.
El punto en que se cruzan los índices es la posición adecuada para colocar el
elemento de división, porque sabemos que a un lado los elementos son todos
menores y al otro son todos mayores (o habrían sido intercambiados).
Página 15
Al finalizar este procedimiento el elemento de división queda en una posición en que todos
los elementos a su izquierda son menores que él, y los que están a su derecha son
mayores.
Un código en C sería:
Tabla de variables
Nombre Tipo Uso
lista Cualquiera Lista a ordenar
inf Entero Elemento inferior de la lista
sup Entero Elemento superior de la lista
elem_divEl mismo que los elementos de la
listaEl elemento divisor
tempEl mismo que los elementos de la
listaPara realizar los intercambios
i Entero Contador por la izquierda
j Entero Contador por la derecha
cont EnteroEl ciclo continua mientras cont tenga el valor
1
Página 16
2. ARCHIVOS
Los archivos también denominados ficheros (file); es una colección de información (datos
relacionados entre sí), localizada o almacenada como una unidad en alguna parte de la
computadora.
Los archivos son el conjunto organizado de informaciones del mismo tipo, que pueden
utilizarse en un mismo tratamiento; como soporte material de estas informaciones.
Las principales características de esta estructura son: independencia de las informaciones
respecto de los programas, la información almacenada es permanente, un archivo puede ser
accedido por distintos programas en distintos momentos, gran capacidad de
almacenamiento.
2.1. TIPOS DE ARCHIVOS
Los elementos de un archivo pueden ser de cualquier tipo, simples o estructurados o según
su función.
2.1.1 SEGÚN SU FUNCIÓN
Se define por:
2.1.1.1 Archivos Permanentes: Son aquellos cuyos registros sufren pocas o ninguna
variación a lo largo del tiempo, se dividen en:
a. Constantes: Están formados por registros que contienen campos fijos y campos de
baja frecuencia de variación en el tiempo.
b. De Situación: Son los que en cada momento contienen información actualizada.
Históricos: Contienen información acumulada a lo largo del tiempo de archivos que han
sufridos procesos de actualización o bien acumulan datos de variación periódica en el
tiempo.
Página 17
2.1.1.2. Archivos de Movimiento: Son aquellos que se utilizan conjuntamente con los
maestros (constantes), y contienen algunos campos comunes en sus registros con aquellos,
para el procesamiento de las modificaciones experimentados por los mismos.
2.1.1.3. Archivo de Maniobra o Transitorio: Son los archivos creados auxiliares creados
durante la ejecución del programa y borrados habitualmente al terminar el mismo.
2.1.2. SEGÚN SUS ELEMENTOS
Los principales archivos de este tipo son:
2.1.2.1. Archivo de Entrada: Una colección de datos localizados en un dispositivo de
entrada.
2.1.2.2. Archivo de Salida: Una colección de información visualizada por la computadora.
2.1.2.3. Archivo de Programa: Un programa codificado en un lenguaje especifico y localizado
o almacenado en un dispositivo de almacenamiento.
2.1.2.4. Archivo de Texto: Una colección de caracteres almacenados como una unidad en un
dispositivo de almacenamiento.
2.2. OPERACIONES GENERALES QUE SE REALIZAN SOBRE UN ARCHIVO
Las operaciones generales que se realizan son:
2.2.1. Creación: Escritura de todos sus registros.
Página 18
DATOS
Maestroordenado
CREACIÓNde un archivo
en disco
MAESTRO(desordenado)
Número de empleado
2.2.2. Consulta: Lectura de todos sus registros.
2.2.3. Actualización: Inserción supresión o modificación de algunos de sus registros.
Página 19
Proceso de consulta
Proceso de actualización
2.2.4. Clasificación: Reubicación de los registros de tal forma que queden ordenados según
determinados criterios.
2.2.5. Borrado: Eliminando total del archivo, dejando libre el espacio del soporte que
ocupaba.
Página 20
Clasificación
Clasificación Copia
Proceso de reorganización
CONCLUSION:
En conclusión se puede decir que los arreglos pueden variar dependiendo sus dimensiones
ya sea unidimensional, bidimensional o multidimensional. Con respecto a los archivos no se
requieren de un tamaño predeterminado; esto significa que se pueden hacer archivos de
datos más grandes o pequeños, según se necesiten. Las aplicaciones pueden ser infinitas,
ya que son utilizados en diferentes rutinas diarias, como por ejemplo, acceder a nuestro
expediente en la universidad, para consultar el estado de cuenta bancario, etc. La elección
del método de ordenamiento está directamente relacionada con la estructura de los registros
del archivo y del soporte utilizado. Un programa puede acceder directamente cualquier
registro sin tener que leer los registros previos
Página 21
FUENTES DE CONSULTA
http://webdia.cem.itesm.mx/ac/rtrejo/CompuII/S32.html
http://c.conclase.net/orden/quicksort.html
www.taringa.net/post/hazlo-tu-mismo/10110437/Saber-c-arreglos-vectores-matrices-
parte-6.html
http://es.wikipedia.org/wiki/Matriz_(matem%C3%A1tica)
JOYANES, Luis
Fundamentos de Programación
Editorial Lavel, 1996. España
P.p.205-321.
PRIETO, Alberto
Introducción a la Informática
Editorial Mc. Grauhill.1999. España
P.p.444-445.
Schildt Herbert, C++ Para programadores. McGraw-Hill. 1996.
Página 22