Universidad Nacional Autónoma de Honduras Honduras del Valle de Sula .
Alumno: Santiago Eduardo Anderson Herrera
C uenta: uenta: 20102000200
Sección: 20:01
C atedrático: atedrático: Ing.
Danny Hernández.
Asignatura y Código: Programación MM-3 14
13
de Mayo del
2008
Arreglos y Vectores Un arreglo es un grupo de ubicaciones de memoria consecutivas, todas ellas del mismo tipo. Pará hacer referencia a una ubicación o elemento especifico su nombre y el numero de posición del elemento especifico en el arreglo. Para hacer referencia a cualquiera de estos elementos en un programa, sé proporciona el nombre del arreglo seguido del numero de posición del elemento especifico entre corchetes ([]).Al numero de posición se le conoce mas formalmente como el índice o subíndice (este numero especifica el numero de elementos a partir del inicio del arreglo). El primer elemento en todo arreglo tiene el subíndice 0 (cero) y se conoce algunas veces como el elemento cero. Por ende, los elementos del arreglo c son c [0] (se pronuncia como ¨ c sub cero¨), c 1, c 2 y así en lo sucesivo.El subíndice mas alto en arreglo c convenciones que los demás nombres de variables; es decir, deben ser identificadores. Un subíndice debe ser un entero o una expresión entera (usando cualquier tipo integral). Si un programa utiliza una expresión como un subíndice, entonces el progra ma evalúa la expresión para determinar el subíndice.Por ejemplo, si suponemos que la variable a es igual a 6, entonces la instrucción C [a + b] + = 2; Suma 2 elementos c [11] del arreglo. Observé que el nombre del arreglo con subíndice es un /vale: se puede utilizar en el lado izquierdo de una asignación, de igual forma que los nombres de las variables que no son arreglos. Para imprimir la suma de los valores contenidos en los primeros tres elementos del arreglo c, escribíamos: Cout<< c [0] + c [1] + c [2] endl; Para dividir el valor de c [6] entre 2 y asignar el resultado a la variable x, escribiríamos lo siguiente: X = c [6] / 2;
Declaraci ón y C reaci ón de Arreglos: Los objetos arreglo ocupan espacio en memoria. Para especificar el tipo de los elementos y el número de elementos requeridos por un arreglo de la siguiente manera: Tipo nombreArreglo [tamañoArreglo]; Y el compilador reserva el monto de memoria apropiado. Los arreglos se pueden declarar de manera que contengan cualquier tipo de datos. Por ejemplo, un arreglo de tipo char se puede utilizar para almacenar una cadena de caracteres.
Búsqueda de datos en Arreglos mediante Búsqueda Lineal : Es común que un programador trabaje con grandes cantidades de datos almacenados en arreglos. Tal vez sea necesario determinar si un arreglo contiene un valor que concuerde con cierto valor clave. Al proceso de buscar un elemento específico de un arreglo se le llama búsqueda. La búsqueda lineal compara cada elemento del arreglo con una clave de búsqueda. Como el arreglo no está en ningún orden específico, existe la misma probabilidad de que se encuentre el valor tanto en el primer elemento como en el último. Por lo tanto, en promedio el programa debe comparar la clave de búsqueda con la mitad de los elementos del arreglo. Para determinar que un valor no se encuentra en el arreglo, el programa debe comparar la clave de búsqueda con cada elemento del arreglo. El método de búsqueda lineal funciona bien para pequeños arreglos o para arreglos desordenados.
Ordenamiento de Arreglos mediante el Ordenamiento por Inserci ón : El ordenamiento de datos es decir, colocar los datos en cierto orden específico, como ascendente o descendente es una de las aplicaciones computacionales más importantes. La técnica que utilizamos se llama ordenamiento por inserción; este es un algoritmo de ordenamiento simple pero ineficiente. La primera iteración de este algoritmo toma el segundo elemento y, si es menor que el primero, lo intercambia, es decir, el programa inserta el segundo elemento enfrente del primer elemento. La segunda iteración analiza el tercer elemento y lo inserta en la posición correcta respecto a los primero dos elementos, de manera que los tres elementos estén en orden. El ordenamiento se realiza mediante la función for, que itera a través de los elementos del arreglo. La principal virtud del ordenamiento por inserción es su facilidad para programarse, sin embargo, se ejecuta con lentitud. Esto se vuelve aparente cuando se ordenan arreglos extensos.
Arreglos Multidimensionales: Los arreglos con dos o más dimensiones se conocen como arreglos multidimensionales. Los arreglos de dos dimensiones se utilizan con frecuencia para repr esentar tablas de valores, las cuales consisten en información ordenada en filas y columnas. Para identificar un elemento especifico de una tabla, debemos especificar dos subíndices. Por convención, el primero identifica la fila del elemento y el segundo su columna. Los arreglos que requieren dos subíndices para identificar un elemento especifico se llaman arreglos bidimensionales o arreglos 2-D. cada elemento en el arreglo se identifica mediante una expresión de acceso a un arreglo de la forma [i][j]; donde i y j son los subíndices que identifican en forma única a cada elemento en el arreglo. Un arreglo multidimensional se puede inicializar en su declaración, en forma muy parecida a un arreglo unidimensional. Por ejemplo, un arreglo bidimensional b con los valores 1 y 2 en los elementos de su fila 0, y los valores 3 y 4 en los elementos de su fila 1, se podría declarar e inicializar de la siguiente manera: Int b [2][2]={{1,2},{3,4}}; Todos los elementos del arreglo se al macenan en forma consecutiva en memoria, sin importar el número de dimensiones. En un arreglo bidimensional, la fila 0 se almacena en memoria junto a la fila 1. En un arreglo bidimensional, cada fila es un arreglo unidimensional. Para localizar un elemento en una fila especifica, la función debe saber exactamente cuántos elementos hay en cada fila, para que pueda omitir el numero apropiado de ubicaciones en memoria a la a hora de acceder a los datos en el arr eglo.
Muchas
manipulaciones comunes en los arreglos utilizan instrucciones de repetición for. Por ejemplo, la siguiente instrucción for establece todos los elementos en la fila 2 del arreglo For (columna=0; columna<4; columna++) A [2][columna]=0;
Ej ercicios: 7.6 C omplete las siguientes oraciones:
a) Los nombres de los cuatro elementos de un arreglo p (int p [4] ;) sonp[0] , p[2] , p[3] .
, p[1]
b) Al proceso de dar nombre al arreglo, especificar su tipo y definir el número de elementos que tendrá se le llama declarar el arreglo. c) Por convección, el primer subíndice en un arreglo bidimensional identifica el (la) fila de un elemento y el segundo índice identifica el (la) columnadel elemento. d) Un arreglo de m por n contiene mxn elementos.
m
filas,
n
e) El nombre del element o en la fila 3 y la columna 5 del arreglo d es
columnas y
d [2] [4]
.
7.7 C onteste
con verdadero o falso cada una de las siguientes proposiciones; en caso de ser falso, explique por qué . a) Para referirnos a una ubicación o elemento especifico dentro de un arreglo, especificamos el nombre del arreglo y el valor del elemento especifico. R: Falso. Para referirse a una ubicación o elemento específico dentro de un arreglo, se especifica el nombre del arreglo y el número de posición del elemento en el arreglo.
b) La definición de un arreglo reserva espacio para el mismo. R: Verdadero. c) Para indicar que deben reservarse 100 ubicaciones para el arreglo entero p, el programador escribe la declaración p [100];
R: Falso. Para reservarse 100 ubicaciones la declaración debe ser p[99]; d) Hay que usar una instrucción for para inicializar con cero los elementos de un arreglo de 15 elementos. R: Falso. Para inicializar con cero los elementos de un arreglo de 15 elementos solo se debe colocar el nombre del arreglo, seguido de un signo igual y entre llaves una lista de inicializadores separadas por comas. e) Hay que usar instrucciones for anidadas para sumar el total de los elementos de un arreglo bidimensional. R: verdadero.
7.8 E scriba
instrucciones en
C++
que realicen cada una de las siguientes
tareas: a) Mostrar el valor del elemento 6 del arreglo de caracteres f. R: cout<< f [5] <
> b [4]; c) Inicializar con 8 cada uno de los 5 elementos del arr eglo entero unidimensional g. R: int g [5] = {8, 8, 8, 8, 8}; o for ( int j = 0; j < 5; j++) g[ j ] = 8;
d) Sumar el total e imprimir los elementos del arreglo c de punto flotante con 100 elementos. R:for (int k = 0; k < 5; k++) { total += c[ k ]; cout<< c[ k ] <
e) Copiar el arreglo a en la primera parte del arreglo b. Suponga que se declara doublé a [11], b [34]. R:for (int i = 0; i < 11; i++) b[i] = a[ i ]; f) Determinar e imprimir los valores menor y mayor contenidos en el arreglo w con 99 elementos de punto flotante. R://asumirtodas las variables declaradasy se inicializa for (int j = 0; j < 99; j++) if ( w[ j ] mayor ) mayor = w[j ];
7.9C onsidere
un arreglo entero t de 2 por 3
a) Escriba una declaración para t. R: int t [2][3]; b) ¿Cuántas filas tiene t? R: tiene 2 filas. c) ¿Cuántas columnas tiene t? R: tiene 3 columnas. d) ¿Cuántos elementos tiene t? R: 6 elementos. e) Escriba los nombres de todos los elementos en la fila 1 de t. R: t [0][0], t[0][1], t[0][2] f) Escriba los nombres de todos los elementos en la columna de 2 de t. R: t [0][1], t[1][1] g) Escriba una sola instrucción que asigne cero al elemento de t en la primera fila y la segunda columna. R: t [0][1]=0; h) Escriba una serie de instrucciones que inicialice cada elemento de t con cero. No utilice un ciclo. R: t [ 0 ][ 0 ] = 0; t[ 0 ][ 1 ] = 0; t[ 0 ][ 2 ] = 0; t[ 1 ][ 0 ] = 0; t[ 1 ][ 1 ] = 0; t[ 1 ][ 2 ] = 0; i) Escriba una instrucción for anidada que inicialice cada element o de t con cero. R: for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) t[ i ][ j ] = 0;
j) Escriba una instrucción que reciba como entrada los valores para los elementos de t mediante la terminal R: for (int r = 0; r < 2; r++) for (int c = 0; c < 3; c++ ) t[r ][ c ] = 0;
k) Escriba una serie de instrucciones que determine e imprima el valor más pequeño en el arreglo t. R: intmenor = t[ 0 ][ 0 ]; for(int r = 1; r < 2; r++) for(int c = 1; c < 3; c++) if(t[ r ][ c ]
7.11 (Ordenamiento de burbuja) En el ordenamiento de burbuja, los valores mas pequeños van ³subiendo como burbujas´ gradualmente, hasta
llegar a la parte superior del arreglo (es decir, hacia el primer elemento) como las burbujas de aire que se elevan en el agua, mientras que los valores mas grandes se hunden en el fondo. Esta técnica realiza varias pasadas a través del arreglo. En cada pasada compara pares sucesivos de elementos. Si un par se encuentra en orden ascendente (o los valores son idénticos), el ordenamiento de burbuja deja los valores como están. Si un par se encuentra en orden descendente, el ordenamiento de burbuja intercambia sus valores en el arreglo. Escriba un programa que ordene un arreglo de 10 enteros mediante el uso del ordenamient o de burbuja.
R: #include #include int main () { constintArreglo = 10; int a[ Arreglo ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37}; int mantiene; cout<<"Elementos de datos en el orden original: \n"; for (int i = 0; i a [j + 1]) {
mantiene = a[j ]; a[j] = a [ j + 1]; a[ j + 1] = mantiene; } } } cout<<"\nElementos de datos en orden ascendente: \n";
//Muestra arreglo ordenando for (int k = 0; k < Arreglo; k++) cout<