1. 1
ARREGLOS C++
1. DEFINICIÓN:
Un arreglo en C++ es un conjunto de datos que se almacenan en memoria de manera
contigua con el mismo nombre. Para diferenciar los elementos de un arreglo se utilizan
índices detrás del nombre del arreglo y encerrados por [].EJEMPLO: int vector [10]; //
array de 10 enteros: vector[0]..vector[9].
2. ARREGLOS DE UNA DIMENSIÓN(VECTORES)
Un arreglo de una dimensión es una lista de variables, todas de un mismo tipo a las que
se hace referencia por medio de un nombre común. Una variable individual del arreglo se
llama elemento del arreglo. Para declarar un arreglo de una sola dimensión se usa el
formato general:
Representación gráfica de un arreglo de una dimensión: float arreglo[6];
float Arreglo[6];
2
23
7
9
0
3
Representación gráfica de un arreglo de dos dimensiones: int arreglo[4][4]
Int Arreglo[ 4] [4] 0 1 2 3
2 4 7 9
1 2 3 4
4 5 6 7
8 90 3 4
0
1
2
3
Arreglo[0]
Arreglo[1]
Arreglo[2]
Arreglo[3]
Arreglo[4]
Arreglo[5]
2. 2
Representación gráfica de un arreglo de tres dimensiones. int arreglo[4][4][3];
3. ÍNDICE DE UN ARREGLO:
Todo arreglo esta compuesto por un número de elementos. El índice es un número
correlativo que indica la posición de un elemento del arreglo. Los índices en C++ van desde
la posición 0 hasta la posición tamaño – 1.
EJEMPLO DE ÍNDICE DE UN ARREGLO
Como se puede ver en el grafico es un arreglo unidimensional de tamaño 10, pero el índice
va del 0 al 9. Es por esto que al indicar su posición se debe inicializar en 0.
4. ELEMENTO DE UN ARREGLO:
Un elemento de un arreglo es un valor particular dentro de la estructura del arreglo. Para
acceder a un elemento del arreglo es necesario indicar la posición o índice dentro del
arreglo. Ejemplo:
• arreglo[0] //Primer elemento del arreglo
• arreglo[3] //Cuarto elemento del arreglo
5. INICIALIZACIÓN DE ARRAYS
Los arrays pueden ser inicializados en la declaración. Ejemplos:
float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12};
float S[ ] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12};
int N[ ] = {1, 2, 3, 6};
int M[ ][3] = { 213, 32, 32, 32, 43, 32, 3, 43, 21};
char Mensaje[ ] = "Error de lectura";
char Saludo[] = {H, o, l, a, 0};
3. 3
EJEMPLO :El siguiente programa carga el arreglo del número 1 al 9 y luego los muestra
#include <iostream>
Using namespace std;
void main(){
int numero[10];
int i;
for (i=1;i<11;i++){
numero[i-1]=i;}
for (i=0;i<10;i++){
cout<<numero[i]<<endl;
} getch;
}
6.- DECLARACIÓN DE ARREGLOS UNIDIMENSIONALES:
Para declarar un arreglo de una sola dimensión se usa el formato general:
tipo_dato identificador[tamaño];
int arreglo[3]; // forma un arreglo de una dimensión y de tres elementos
Nombre del arreglo
Arreglo
Nombre de los elementos
arreglo[0] → primer elemento
arreglo[1] → segundo elemento
arreglo[2] → tercer elemento
4. 4
7 DECLARACIÓN DE ARREGLOS MULTIDIMENSIONALES, BIDIMENSIONALES,
TABLAS O MATRIZ
Los arrays multidimensionales son definidos prácticamente de la misma manera que los
arrays unidimensionales, excepto que se requiere un par de corchetes para cada índice. En
general:
tipo_almacenm tipo_dato nombre_array [expresión 1][expresión 2]..[expresión n]
Recordar que tipo_almacenamiento es opcional; los valores por defecto son automáticos
para arrays definidos dentro de una función y externos para los arrays definidos fuera de una
función.
Los arrays multidimensionales se procesan de la misma manera que los array
unidimensionales, sobre la base de elemento a elemento. Sin embargo, se requiere algún
cuidado cuando se pasan arrays multidimensionales a una función. En particular, las
declaraciones de argumentos formales dentro de la definición de función deben incluir
especificaciones explícitas de tamaño en todos los índices excepto en el primero.
La sintaxis es la siguiente:
tipo_dato identificador [dimensión1] [dimensión2] ...[dimensiónN] ;
Donde N es un número natural positivo.
EJEMPLO: Declaración:int m[2][3]; // forma una tabla de dos filas y tres columnas.
// cada fila es un arreglo de una dimensión.
8. OPERACIONES CON ARREGLOS UNIDIMENSIONALES:
Suma y Resta: Los arreglos deben tener el mismo tamaño y la suma se realiza elemento a
elemento. Por ejemplo C = A + B. Donde A, B y C son arreglos de enteros de tamaño 3.
9. OPERACIOES CON ARREGLOS MULTIDIMENSIONALES:
SUMA Y RESTA: Los arreglos deben tener el mismo orden y la suma se realiza elemento a
elemento. Por ejemplo sean A,B y C arreglos de números punto flotante de orden 2x3.
Entonces la operación C = A+B sería:
5. 5
Las operaciones con arreglos unidimensionaleso arreglos multidimensionales son de mucha
utilidad, ya que nos facilitan el cálculo de operaciones muy complejas.
10 PASO DE ARRAYS A FUNCIONES
El nombre de un array se puede usar como argumento de una función, permitiendo así que el
array completo sea pasado a la función. Sin embargo la manera en que se pasa difiere
mucho de la de una variable ordinaria.
Para pasar un array a una función, el nombre del array debe aparecer sólo, sin corchetes o
índices, como un argumento actual dentro de la llamada a la función. El correspondiente
argumento formal se escribe de la misma manera, pero debe ser declarado como un array
dentro de la declaración de argumentos formales. Cuando se declara un array
unidimensional como un argumento formal, el array se escribe con un par de corchetes
vacíos.
Hemos visto que los argumentos son pasados a la función por valor cuando los argumentos
son variables ordinarias. Sin embargo, cuando se pasa un array a una función, los valores de
los elementos del array no son pasados a la función. En vez de esto, el nombre del array se
interpreta como la dirección del primer elemento del array. Esta dirección se asigna al
correspondiente argumento formal cuando se llama a la función. El argumento formal se
convierte por tanto en un puntero al primer elemento del array (más sobre esto cuando
hablemos de punteros). Los argumentos pasados de esta forma se dicen que son pasados
por referencia en vez de por valor. Por tanto, si un elemento del array es alterado dentro de
la función, esta alteración será reconocida en todo el ámbito de definición del array.
11.TECNICAS SIMPLES DE ORDENAMIENTO
Ordenar y buscar elementos son dos de las actividades más comunes en cualquiera
aplicación grande. En esta guía se trataran estos dos importantes temas y se presentaran
algunos algoritmos de ordenamiento.
Las aplicaciones que manejan grandes cantidades de datos requieren de algún tipo de
ordenamiento. Se pueden tomar varios ejemplos de tales aplicaciones en la vida real , tales
como:
6. 6
Ordenar libros y diarios en una biblioteca, por orden de autor año de publicación y
titulo.
Ordenamiento alfabético de nombres en un directorio telefónico.
Listar palabras en u diccionario,.
Ordenar resultados de motores de búsqueda, basados en su relevancia para el tema
buscado.
Las técnicas de ordenamiento son principalmente de dos categorías:
Ordenamiento Interno: Se aplica cuando los elementos a ser ordenados están
disponibles en la memoria primaria.
Ordenamiento Externo: Se aplica cuando los elementos a ser ordenados son muchos
y están disponibles sólo en dispositivo de almacenamiento secundario.
Técnicas simples de ordenamiento
Las tres técnicas de ordenamiento a estudiar son:
Ordenamiento por Inserción
Ordenamiento de Burbuja
Ordenamiento por Selección
Ordenamiento por Inserción
Esta técnica se conoce como ordenamiento por inserción, dado que se crea un agujero y
luego se inserta el elemento.
Dado que usa un solo arreglo n el código C que se da a continuación, es necesario el uso de
una variable temporal para guardar el elemento i en cada iteración. La función toma el
numero de elementos en el arreglo como n y ordena los elementos desde la posición 0 hasta
7. 7
la posición n-1. A continuación se presenta el código C de la Función Ordenamiento
inserción.
void ordenamientoInsercion (tipoelemento *inarray, tipoelemento n) {
tipoelemento temporal;
tipoelemento i,j;
for (i = 1; i < n; i++) {
temporal = inarray[ i];
j = i - 1;
while (j >= 0 && temporal < inarray[j]){
inarray[j+1] = inarray[j];
j--;
}
inarray[j+1] = temporal;
}
}
Ordenamiento por Burbuja (Bubble Sort)
El algoritmo de ordenamiento por burbuja es uno de los mas simples y mas usados
para ordenar. Este algoritmo no requiere de un segundo arreglo para ordenar los
elementos del arreglo, pero usa el arreglo original, inarray, para ordenar.
En la técnica de ordenamiento por burbuja, solo ocurre una pasada cuando ocurre un
intercambio de elementos. Sino ocurren intercambios, esto implica que el arreglo ya
está ordenado.
Nota: Para determinar si los elementos en el arreglo están ordenados o no, el arreglo
es recorrido al menos una vez.
El nombre de ordenamiento por burbuja se le da a este algoritmo dado que el mayor
elemento “Burbujea” a su ubicación correcta en el arreglo (si es ascendente), después
de cada pasada.
8. 8
void ordenamientoBurbuja(tipoelemento *inarray, tipoelemento n){
tipoelemento i,temporal, intercambio,j;
intercambio = 1;
j = 1;
while(intercambio){
intercambio = 0;
for(i = 0; i < n - j; i++){
if (inarray[i] > inarray[i+1]){
temporal = inarray[i];
inarray[i] = inarray[i+1];
inarray[i+1] = temporal;
intercambio = 1;
}
}
j++;
}
}
Ordenamiento por Selección
Se va a aplicar la técnica de ordenamiento por selección para ordenar un arreglo
inarrray que contiene elementos. Primero se selecciona el elemento mas pequeño en
el arreglo y se coloca en la primera posición (en la posición inarray [0]) intercambiando
posiciones con el elemento en inarray[0]. El elemento mas pequeño puede
encontrarse en cualquier posición, pos, en inarray. Por lo tanto, inarray[0]se inserta en
inarray [pos]. Luego, se busca el siguiente elemento más pequeño en inarray, a partir
de la posición 1 en adelante. Cuando se encuentra, se asigna nuevamente a pos y se
intercambia inarray[1] con inarray[pos]. Esto se repite durante n-1 pasadas, esto es,
hasta que se alcanza el final del arreglo. El arreglo esta ordenado después que se
completan todas las pasadas.
Dicho en palabras simples, el ordenamiento por selección involucra encontrar el
elemento mínimo y realizar un intercambio.
9. 9
El programa que permite el ordenamiento de un arreglo por la técnica de
ordenamiento por selección se da a continuación.
void ordenamientoSeleccion(tipoelemento *inarray, tipoelemento n){
tipoelemento i,pos,j,min,temporal;
for(i = 0; i < n - 2; i++){
min = inarray[i];
pos = i;
for (j = i + 1; j <= n - 1; j++)
if (inarray[j] < min){
min = inarray[j];
pos = j;
}
temporal = inarray[i];
inarray[i] = inarray[pos];
inarray[pos] = temporal;
}
}
12.TECNICAS DE BUSQUEDA
Localizar información es una de las operaciones clave en muchas aplicaciones.
La búsqueda se lleva a cabo basada en un elemento particular, el cual es
generalmente una entrada. Este elemento es la base de la búsqueda, es el llamado
elemento de búsqueda. También se le conoce como elemento clave.
La búsqueda generalmente se divide en dos áreas que son:
Búsqueda Interna__ Cuando todos los registros que se buscan están en el área
de memoria primaria.
Búsqueda Externa__ Cuando el número de registros es demasiado grande y
no se pueden mantener juntos en la memoria primaria.
Búsqueda Lineal
10. 10
Uno de los métodos mas simple de búsqueda es comenzar buscando desde la
primera posición del arreglo (índice es 0), comprobar la ocurrencia del elemento en
esa posición, y moverse a la siguiente posición del arreglo hasta que el elemento es
encontrado en una posición particular o se llega al final del arreglo y el elemento no es
encontrado.
int busquedaLineal(Tipo_elemento *elementos, int n, Tipo_elemento element) {
int k, found = 0;
for (k = 0; k < n && !found; k++)
if (elementos[k] == element)
found = 1;
return found;
}
Búsqueda Binaria
Este método de búsqueda requiere que el arreglo esté ordenado ascendente o
descendentemente. En la lista ordenada, el elemento central es comparado con el
elemento a buscar. Si estos coinciden entonces la búsqueda tuvo éxito. Si el elemento
no se encuentra en esta posición, el algoritmo verifica si el elemento de búsqueda es
mayor o menor que el elemento central. Esto indica si el elemento a buscar será
encontrado en la parte superior o inferior del arreglo. Así se reduce el número de
elementos buscados a la mitad del tamaño original. Después se aplican los mismos
pasos para buscar el centro del arreglo. Finalmente si se recorre el arreglo
completamente sin encontrar una coincidencia, la búsqueda no tuvo éxito.
int binarySearch(Element_type *elements, int n, Element_type element)
{
int top, bot,mid,found;
top=0;
bot=n-1;
found=0;