Autor: Jos Carlos, Garca La Riva Vectores y Matrices Fundamentos I
Estructura de datos: Arrays ARREGLOS Fundamentos I tipo Arrays Unidimensionales: Vectores Arrays Bi-dimensionales: Matrices
Qu es un arreglo ? Un arreglo es una coleccin de elementos finitos, homogneos y ordenados que se encuentra compartiendo una misma zona de memoria en reas contiguas (consecutivas). Los arreglos se clasifican en unidimensionales y multidimensionales (bi-dimensionales,tri-dimensionales, etc.). Los elementos de un arreglo pueden ser de cualquier tipo (enteros, reales, caracteres, cadenas, etc.) Rango: El limite inferior (Lower) de la dimensin del arreglo se enumeran a partir del ndice CERO (base 0) o UNO (base 1) y van en aumento de 1 en 1 hasta el limite superior (Upper). Para calcular el numero de elementos o rango de un arreglo se usa la formula: rango = (U L + 1) por dimensin Para acceder a los elementos de un arreglo se hace uso del nombre del arreglo seguido del ndice cerrado entre parntesis rectangulares, este ndice representa la posicin del elemento en el arreglo. Arreglo Unidimensional: Vector Los arrays unidimensionales son aquellos que estn compuestos por una sola dimensin (lineal). A este tipo de arreglo tambin se le conoce con el nombre de VECTOR. VECTOR: 1. Sintaxis para definir un array unidimensional. tipo array[L..U] de <tipo_dato>: nombre_tipoArray En donde: [L..U] Son los limites de la dimensin: Lower .. Upper <tipo_dato>: Tipo de datos de los elementos del array. nombre_tipoArray Nombre del nuevo tipo definido. El numero de elementos de un Array tipo Vector es: (U-L) + 1
2. EJEMPLO: para declarar un array unidimensional. tipo array[1..9] de entero: arrDatos //definir vector base uno var arrDatos: dato1, dato2 //declaracin de variables tipo arrDato VECTORES: definicin y declaracin de variables tipo array unidimensional. Ejemplo: tipo array[0..4] de entero: arrLista var arrLista: lista 45 67 -6 0 34 lista 0 1 2 3 4 Acceso a los items: lista[0] lista[1] lista[2] lista[3] lista[4] INDICE: Posicin de cada elemento en el arreglo ITEM: Valor de cada elemento del arreglo RANGO = (4 0) + 1 5 elementos Lower - limites y elementos del vector - Upper Ejemplo 1 : Elabore un algoritmo para ingresar y visualizar los elementos de un arreglo unidimensional de tipo entero. ALGORITMO Ejemplo1 const MAX = 10 tipo array [1.. MAX] de entero: arrDatos //base uno var arrDatos: datos entero: i inicio desde( i 1 hasta MAX )hacer leer( datos[ i ] ) fin_desde desde( i 1 hasta MAX )hacer escribir( datos[ i ] ) fin_desde fin Recorrido (lectura de array): Ingreso de elementos al arreglo Recorrido (escritura de array): visualizado de elementos del array Ejemplo 2 : Calcular la suma de los elementos contenidos en un arreglo de tipo entero (base 0). ALGORITMO Ejemplo2 CONST MAX = 9 tipo array [0..MAX] de entero: arrValores //base cero var arrValores: valor entero: i, suma, rango inicio suma 0 desde( i 0 hasta MAX)hacer leer( valor[ i ] ) suma suma + valor[ i ] fin_desde escribir( suma ) fin Ejemplo 3 : Calcular el promedio de los elementos contenidos en un arreglo de tipo entero. ALGORITMO Ejemplo3 CONST MAX = 10 tipo array [1..MAX] de entero: arrElementos //base uno var arrElementos: elem entero: i, suma real: promedio inicio suma 0 desde( i 1 hasta MAX )hacer leer( elem[ i ] ) suma suma+ elem[ i ] fin_desde promedio suma / MAX escribir( promedio) fin Ejemplo 4 : Calcular el mayor y menor valor de los elementos contenidos en un arreglo de tipo entero. ALGORITMO Ejemplo4 CONST MAX = 10 tipo array [1..MAX] de entero: arrNumeros var arrNumeros: num entero: i, mayor, menor inicio desde( i 1 hasta MAX )hacer leer( num[ i ] ) fin_desde mayor num[1] : menor num[max] desde( i 1 hasta MAX )hacer si ( num[ i ] > mayor) entonces mayor num[ i ] fin_si si ( num[ i ] < menor ) entonces menor num[ i ] fin_si fin_desde escribir(MAYOR=, mayor, MENOR=, menor) fin Mtodo de Bsqueda Lineal El mtodo mas sencillo de buscar un elemento en un vector es explorar secuencialmente el vector. Es decir recorrer el vector linealmente desde el primer elemento hasta el ultimo. La operacin de bsqueda de un elemento N en un conjunto de valores o vector consiste en: Determinar si N pertenece al conjunto y, en este caso, indicar su posicin en el. Determinar si N no pertenece al conjunto. Ejemplo 5 : Realice el proceso de bsqueda de un valor entre los elementos contenidos en un arreglo de tipo entero. ALGORITMO Ejemplo5 CONST MAX = 10 tipo array [1..MAX] de entero: arrElementos var arrElementos: elem entero: i, dato, posicion inicio desde( i 1 hasta MAX )hacer leer( elem[ i ] ) fin_desde escribir(Buscar: ) : leer( dato ) posicion -1 desde( i 1 hasta MAX )hacer si( elem[ i ] = dato )entonces posicion i : i MAX -1 fin_si fin_desde si( posicion <> - 1 )entonces escribir(DATO ENCONTRADO) sI_no escribir(DATO NO ENCONTRADO) fin_si fin Compara el dato buscado con cada uno de los elementos del arreglo (Bsqueda Secuencial o Lineal) Mtodo de Bsqueda Binaria Se utiliza para buscar un valor entre los elementos contenidos en un arreglo. Una de las condiciones para utilizar este mtodo es que los elementos del arreglo donde se realizara la bsqueda, deben estar ordenados en forma ascendente o descendente. Utilice este mtodo cuando el nmero de elementos del arreglo sea grande, de preferencia mayor a 100.
Aplicando Bsqueda Binaria -6 -5 0 4 12 15 24 36 47 58 69 77 81 90 92 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 primero ultimo Dato = 69 Primero = 0 Ultimo = 14 Mitad = (Primero+Ultimo)/2 Aplicando Bsqueda Binaria -6 -5 0 4 12 15 24 36 47 58 69 77 81 90 92 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 primero ultimo Dato = 69 Primero = 0 Ultimo = 14 Mitad = (0 + 14)/2 = 7 Se compara el dato buscado con el elemento de la posicin mitad, si es igual el proceso de bsqueda termino, sino es igual se compara los valores del dato buscado con el elemento de la posicin mitad y se desplaza la posicin de la variable primero o ultimo. primero Mitad + 1 Aplicando Bsqueda Binaria -6 -5 0 4 12 15 24 36 47 58 69 77 81 90 92 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ultimo Dato = 69 Primero = 8 Ultimo = 14 Mitad = (8 + 14)/2 = 11 primero ultimo Mitad - 1 Aplicando Bsqueda Binaria -6 -5 0 4 12 15 24 36 47 58 69 77 81 90 92 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Dato = 69 Primero = 8 Ultimo = 10 Mitad = (8 + 10)/2 = 9 primero ultimo primero Mitad+1 Aplicando Bsqueda Binaria -6 -5 0 4 12 15 24 36 47 58 69 77 81 90 92 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Dato = 69 Primero = 10 Ultimo = 10 Mitad = (10 + 10)/2 = 10 ultimo primero ALGORITMO Bsqueda_Binaria CONST MAX = 10 tipo array [1..MAX] de entero: arrElementos VAR arrElementos: arrE entero: i, n
INICIO desde( i 1 hasta MAX )hacer leer( arrE( i ) ) fin_desde leer( n ) si( busquedaBinaria( arrE, n ) = verdad )entonces escribir(SE ENCONTRO EL DATO BUSCADO) si_no escribir(NO EXISTE DATO BUSCADO) fin_si FIN logico funcionbusquedaBinaria( E/S arrElementos: vElem, entero: MAX, dato) var entero: primero, ultimo, mitad logico: ok inicio ok falso primero 0 : ultimo MAX -1 mientras( primero <= ultimo ) Y ( ok = falso) hacer mitad (primero + ultimo) DIV 2 si( dato = vElem[ mitad ] )entonces ok verdad si_no si( dato > vElem[ mitad ])entonces primero mitad + 1 si_no ultimo mitad - 1 fin_si fin_si fin_mientras retornar ok fin_funcion
Continuacin (definir prototipo de funcin busquedaBinaria)