La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Abstracción de Datos Arrays. Arrays Un array o un arreglo es un grupo consecutivo de localidades (espacios) de memoria que tienen el mismo nombre y el.

Presentaciones similares


Presentación del tema: "Abstracción de Datos Arrays. Arrays Un array o un arreglo es un grupo consecutivo de localidades (espacios) de memoria que tienen el mismo nombre y el."— Transcripción de la presentación:

1 Abstracción de Datos Arrays

2 Arrays Un array o un arreglo es un grupo consecutivo de localidades (espacios) de memoria que tienen el mismo nombre y el mismo tipo de dato. Para referirnos a una localidad o elemento particular de un arreglo, especificamos el nombre del arreglo y el numero de posición o subíndice del elemento o espacio de memoria en particular al cual queremos acceder. Estos tipos de datos permiten optimizar la realización de código, ya que permite el ahorro de espacio en memoria a la hora de crear variables del mismo tipo. Los arreglos se pueden clasificar de dos formas: vectores y matrices. Vectores cuando solo poseen un subíndice; y Matrices cuando poseen 2 subíndices;

3 Arrays Esta figura representa un arreglo de enteros llamado c, el cual contiene 12 elementos. Nos podemos referir a cualquiera de ellos dando el nombre del arreglo seguido por el número de posición del elemento específico encerrándolo entre corchetes ([ ]). El primer elemento de cualquier arreglo es el elemento cero. Por tanto, nos referimos al primer elemento del arreglo c como c[0], al segundo c[1], al séptico como c[6].

4 Arrays Y en general, al i-ésimo elemento del arreglo c como c[i - 1]. Los nombres de los arreglos se apegan a las mismas convenciones que los demás nombres de variables. El número de posición entre los corchetes se conoce más formalmente como subíndice. Los subíndices deben ser enteros o expresiones enteras. Si algún programa emplea como subíndice una expresión, entonces ésta se evalúa para determinar el subíndice.

5 Arrays Por ejemplo suponemos que la variable a es igual a 5 y que la variable b es igual a 6, entonces la instrucción C [a + b ] += 2; //suma 2 al elemento c[11] del arreglo. En el ejemplo anterior, para imprimir la suma de los valores contenidos en los tres primeros elementos del arreglo c es: cout << c [ 0 ] + c [ 1 ] + c [ 2 ] << endl; Para dividir entre 2 el valor del séptimo elemento del arreglo c y asignarle el resultado a la variable x: x = c[ 6 ] / 2; Nota: los corchetes que encierran los subíndices de un arreglo son un operador de C++.

6 Precedencia de operadores

7 Como declarar arreglos Los arreglos siempre ocupan espacio en memoria. El programador debe especificar el tipo de dato de cada elemento y el numero de elementos requeridos por cada arreglo, de manera que la computadora pueda reservar la cantidad apropiada de memoria. Para que la computadora reserve 12 elementos para el arreglo entero c, se debe hacer la siguiente declaración: int c[12]; Siguiendo esta secuencia lógica: > >[tamaño]; Mediante una sola declaración se puede reservar memoria para varios arreglos. La siguiente declaración reserva 100 elementos para el arreglo b y 27 elementos para el arreglo de enteros x int b[ 100 ], x [ 27 ];

8 Como declarar arreglos Los arreglos puedes ser declarados para que contengan cualquier tipo de dato en especial, un arreglo char sirve para almacenar una cadena de caracteres; char x[10] =« hola mundo»

9 Ejemplo utilizando arreglos El código anterior utiliza una sentencia de control for para inicializar los elementos un arreglo entero de 10 elementos n a ceros e imprime el arreglo en formato de tabla.

10 Ejemplo utilizando arreglos La primera instrucción de salida despliega los encabezados de las columnas que se imprimirían en la estructura for subsiguiente. Recuerde que setw especifica el ancho del campo en que se enviará a la salida el siguiente valor. Los elementos de un arreglo también pueden inicializarse en la declaración del arreglo siguiendo a la declaración con un signo de igualdad y una lista de inicializadores separada por comas (encerrada entre corchetes).

11 Ejemplo utilizando arreglos Si hubiera menos inicializadores que elementos en el arreglo, los elementos restantes se inicializarían automáticamente a cero. Por ejemplo, del arreglo n de la figura 4.3 se podría haber inicializado a cero con la declaración Int n [10] = { 0 };

12 Error común en la inicialización de un arreglo Olvidar inicializar los elementos de un arreglo que deberían ser inicializados es un error de lógica Un error de sintaxis ocurriría si hay 6 inicializadores y únicamente 5 elementos en el arreglo Int n[5] = { 32, 27, 64, 18, 95, 14}; Si se omite el tamaño del arreglo en la declaración por medio de una lista de inicialización, el número de elementos del arreglo será el número de elementos de la lista: int n[ ] = { 1, 2,3, 4, 5}; //se creará un arreglo de cinco elementos

13 Ejemplo de inicialización

14

15 Ejemplos (a seguir practicando) El programa anterior utiliza el ciclo for para la totalización

16 Ejemplos (a seguir practicando)

17 El programa anterior formula el deseo de resumir la cantidad de respuestas de cada tipo (es deir del 1 al 10). El arreglo responses es de 10 elementos, con las respuestas de los estudiantes. Utilizamos un arreglo de once elementos, frequency para contar la cantidad de casos de cada respuesta. Ignoramos el primer elemento, frequency [0], pues es más lógico que la respuesta 1 incremente frequency [1] que frequency [0]. Esto nos permite utilizar directamente cada respuesta como subíndice del arreglo frequency. El primer ciclo for toma las respuestas, una a la vez, del arreglo responses e incrementa uno de los diez contadores (frequency [1] a frequency [10] )del arreglo frequency. La instrucción clave del ciclo es ++frequency [ responses [ answer ] ]; Esta instrucción incrementa el contador frequency adecuado, dependiendo del valor de responses [answer]. Por ejemplo, cuando el contador answer es 0, el valor de responses [answer] es 1, por lo que ++frequency [ responses [ answer]]; se interpreta como: ++frequency [ 1 ]; // lo que incrementa el elemento uno del arreglo. Cuando answer es 1, responses [answer] es 2, así que freqency[responses [ answer]]; es ++frequency[2];

18 Ejemplos (a seguir practicando)

19 Como pasar arreglos a funciones Para pasar cualquier argumento de arreglo a una función, especifique el nombre del arreglo sin corchete alguno. Por ejemplo si el arreglo Temperatura ha sido declarado como int Temperatura[24] el enunciado de la llamada a la función Modificar(Temperatura, 24); Al pasar el arreglo de Temperatura a la función Modificar esta pasa con el tamaño del arreglo si el caso fuera de que el arreglo declarado tuviera tamaño 3 este seria el valor del argumento pasado.

20 Como pasar arreglos a funciones // Paso de arreglos y elementos a funciones Fig 4.14 #include using namespace std; void modifyArray (int [], int); void modifyElement (int); int main() { const int arraySize = 5; int i, a [ arraySize ]={ 0,1,2,3,4 }; cout << "Efectos de pasar un arreglo completo mediante llamada por referencia" << "\n\nLos valores del arreglo original son: \n"; for (i =0; i < arraySize; i++) cout << setw(3) << a[i]; cout << endl; //se psas el arreglo mediante llamada por referencia modifyArray (a, arraySize); cout << "Los valores del arreglo modificado son: \n"; for (i =0; i < arraySize; i++) cout << setw(3) << a[i]; cout << "\n\n\n" << "Efectos de pasar un arreglo completo mediante llamada por valor: " << "\n\nEl valor de a[3] es " << a[3] << '\n'; modifyElement ( a[3] ); cout << "El valor de a[3] es " << a[3] << endl; system("pause"); return 0; } void modifyArray (int b[], int sizeOfArray) { for (int j =0; j < sizeOfArray; j++) b[j] *= 2; } void modifyElement (int e) { cout << "El valor en modifyElement es " << (e *=2) << endl; }

21 Como ordenar arreglos La ordenación de datos, es decir colocar los datos en un orden particular (ascendente o descendente), es una de las aplicaciones mas importantes de la computación. Esto es un proceso de clasificación de la información dado algún parámetro y/o condición. El siguiente programa ordena los elementos de un arreglo a de 10 elementos. La técnica que se utiliza es conocida como método de la burbuja, ya que los elementos dada la condición «flotan» de manera gradual a la parte superior del arreglo como si fueran burbujas en el agua (de hay su nombre). Esta técnica consiste en realizar varias pasadas al arreglo e ir comparando pares sucesivos de elementos. Si el par es igual o va en contra de la condición dada se dejan igual, si no se intercambian de posición.

22

23 Búsqueda en arreglos Es muy frecuente que un programador este procesando una gran cantidad de datos que se encuentran almacenados en un arreglo. Y hay casos en que se debe evaluar si en un arreglo contiene un valor que coincide con un valor clave o buscado. Hay dos técnicas para buscar información en un arreglo, conocidas como búsqueda lineal y búsqueda binaria. La búsqueda lineal consiste en comparar uno a uno los elementos del arreglo con el valor buscado. Dado que el arreglo no tiene un orden en particular, existe la misma posibilidad de que el valor se encuentre, ya sea en el primer elemento como en el ultimo. El siguiente programa es un ejemplo de la búsqueda lineal, compara uno a uno los elementos del arreglo con el valor buscado.

24

25 Búsqueda en arreglos La búsqueda binaria Se utiliza cuando el vector en el que queremos determinar la existencia de un elemento está previamente ordenado. Este algoritmo reduce el tiempo de búsqueda considerablemente, ya que disminuye exponencialmente el número de iteraciones necesarias.

26 Arreglos con múltiples subíndices En c un arreglo puede tener múltiples subíndices. Una utilización común de varios subíndices a la hora de declarar arreglos es para representar tablas de valores. Donde, cada subíndice tiene un sentido de lectura, el primero filas y el segundo columnas. La declaración de un arreglo es similar a la anterior, solo que se añaden mas subíndices > >[tamañofila][tamañocolumna]

27 El siguiente es un ejemplo de arreglo con múltiples subíndices, y en donde los procedimientos son iguales, sino que se hace un recorrido por filas y luego por columnas

28 Que hace el siguiente programa? #include int main() { const int arraySize = 12; int a[ arraySize ] = { 1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45 }; int total = 0; for ( int i = 0; i < arraySize ; i++ ) total += a[ i ]; cout << "Total of array element values is " << total << endl; System(pause ); return 0; } Ejercicios

29 Que hace el siguiente programa? #include int main() { const int responseSize = 40, frequencySize = 11; int responses[ responseSize ] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 }; int frequency[ frequencySize ] = { 0 }; for ( int answer = 0; answer < responseSize; answer++ ) ++frequency[ responses[answer] ]; cout << "Respuesta" << setw( 17 ) << "Frecuencia" << endl; for ( int rating = 1; rating < frequencySize; rating++ ) cout << setw( 6 ) << rating << setw( 17 ) << frequency[ rating ] << endl; system("pause"); return 0; } return a; else return a + mystery(a, b-1); } Ejercicios


Descargar ppt "Abstracción de Datos Arrays. Arrays Un array o un arreglo es un grupo consecutivo de localidades (espacios) de memoria que tienen el mismo nombre y el."

Presentaciones similares


Anuncios Google