UNIDAD V: ARREGLOS BIDIMENSIONALES Unidad V: Arreglos Bidimensionales UNIDAD V: ARREGLOS BIDIMENSIONALES 1.1 GENERALIDADES: Las matrices son una colección finita, homogénea y ordenada de datos. Su información está organizada en forma de tablas; es decir, los elementos que la conforman están dispuestos bajo dos conceptos de clasificación (fila y columna). Para poder indicar el lugar donde se encuentra un determinado elemento, es necesario utilizar dos índices: uno para indicar el renglón o fila y otro para indicar la columna. Puede mirarse una matriz como un vector de vectores; por lo tanto, es un conjunto de componentes en el que se necesitan dos subíndices para identificar un elemento que pertenezca al arreglo. Un arreglo bidimensional N * M tiene N filas y M columnas; por lo tanto, tiene N * M elementos dispuestos interiormente en memoria en forma sucesiva. Un array de dos dimensiones equivale a una tabla de múltiples filas y múltiples columnas. Gráficamente se puede representar como una tabla de valores. Estructura de un array de dos dimensiones. Si las filas se etiquetan de 0 a m y las columnas de 0 a n, el número de elementos que tendrá el array será el resultado del producto N * M. El sistema para localizar un elemento será por las coordenadas representadas por el número de fila y su número de columna (fila, columna). 1.2 DECLARACIÓN DE ARRAYS BIDIMENSIONALES El espacio que los arreglos ocupan en memoria se reserva en el momento de realizar la declaración de los mismos. La sintaxis para la declaración de un array de dos dimensiones es: Dimension nombre_arreglo[numero_filas,numero_columnas]; Ejemplos de declaración de arreglos bidimensionales: Definir matriz_ejemplo como Entero; Dimension matriz_ejemplo[3,2]; //Matriz de 3 filas y 2 columnas que puede almacenar 6 elementos 2 Unidad V: Arreglos Bidimensionales 1.3 INICIALIZACIÓN DE UN ARRAY: Se deben asignar valores a los elementos del arreglo antes de utilizarlos, tal como se asignan valores a variables. Para asignar valores a cada elemento del arreglo de enteros “matriz_ejemplo”, se puede escribir: matriz_ejemplo [0,0] <- 15; matriz_ejemplo [0,1] <- 25; matriz_ejemplo [1,0] <- 30; matriz_ejemplo [1,1] <- 35; matriz_ejemplo [2,0] <- 8; matriz_ejemplo [2,1] <- 5; Ejemplo #1: Pseudocódigo para inicializar un arreglo de 3 filas y 4 columnas a 1. Solución #1: Proceso inicializar_bidi Definir matriz_ejemplo,fila,columna como entero; Dimension matriz_ejemplo[3,4]; Para fila<-0 Hasta 2 Con Paso 1 Hacer Para columna<-0 Hasta 3 Con Paso 1 Hacer matriz_ejemplo[fila,columna] <- 1; Escribir Sin Saltar matriz_ejemplo[fila,columna]," "; FinPara Escribir " "; FinPara FinProceso 1.4 OPERACIONES QUE SE PUEDEN REALIZAR EN UNA MATRIZ: Se puede acceder a los elementos de arrays multidimensionales de igual forma que a los elementos de un array unidimensional. La diferencia reside en que en los elementos bidimensionales deben especificarse los índices de la fila y la columna. El formato general para asignación directa de valores a los elementos es: • Inserción de elementos: <Nombre array> [índice_fila,índice_columna] = valor elemento; • Extracción de elementos: <Variable> = <nombre array>[índice_fila,índice_columna]; 3 Unidad V: Arreglos Bidimensionales Ejemplo 2: Algoritmo que encuentre e imprima la transpuesta de una matriz. La transpuesta de una matriz se obtiene al escribir las filas de la matriz como columnas y las columnas como filas. Proceso Matriz_transpuesta Definir MAT,TMAT,nFilas,nColumnas,fila,columna como entero; Escribir 'Numero de filas de la matriz '; Leer nFilas; nColumnas<-nFilas; Dimension MAT[nFilas,nColumnas]; //Matriz Original Dimension TMAT[nColumnas,nFilas]; //Almacenara la matriz transpuesta //Se piden los datos de la matriz Para fila <-0 Hasta nFilas-1 Con Paso 1 Hacer Para columna <-0 Hasta nColumnas-1 Con Paso 1 Hacer Escribir 'Ingrese el elemento [', fila, ', ', columna, '] ' ; Leer MAT[fila, columna]; //se almacena el elemento TMAT[columna,fila]<-MAT[fila,columna]; //Se copia el elemento FinPara FinPara Escribir "MATRIZ TRANSPUESTA"; Para fila<-0 Hasta nFilas-1 Con Paso 1 Hacer Para columna<-0 Hasta nColumnas-1 Con Paso 1 Hacer Escribir Sin Saltar TMAT[fila,columna]," "; FinPara Escribir ""; FinPara FinProceso Ejemplo 3: Escribir un pseudocódigo que lea un array de N*M elementos y que guarde 0 en las posiciones pares y 1 en las posiciones impares. Imprimir el array resultante. Proceso ubicar_posiciones Definir matriz_ejemplo,fila,columna,indice como Entero; Dimension matriz_ejemplo[3,4]; Para fila<-0 Hasta 2 Con Paso 1 Hacer Para columna<-0 Hasta 3 Con Paso 1 Hacer indice<-fila+columna; Si indice MOD 2 = 0 Entonces matriz_ejemplo[fila,columna] <- 0; Sino matriz_ejemplo[fila,columna] <- 1; FinSi Escribir Sin Saltar matriz_ejemplo[fila,columna]," "; FinPara Escribir ""; FinPara FinProceso 4 Unidad V: Arreglos Bidimensionales Ejemplo #4: Pseudocódigo que imprime la suma de cada una de las filas de una matriz bidimensional N*M. Solución #4: Proceso suma_filas Definir a,sumafil Como Real; Definir fil,col,f,c Como Entero; Repetir Escribir "NUMERO DE FILAS: "; Leer fil; Hasta Que fil>0 O fil>=1 Repetir Escribir "NUMERO DE COLUMNAS: "; Leer col; Hasta Que col>0 O col>=1 Dimension a[fil,col]; // Declaración de la matriz //Lectura de los datos de la matriz Escribir "**Introduzca los datos de la matriz**"; Para f<-0 Hasta fil-1 Hacer Para c<-0 Hasta col-1 Hacer Escribir "Elemento[",f,"][",c,"]:"; Leer a[f,c]; FinPara FinPara //Escribir la suma de cada fila Para f<-0 Hasta fil-1 Hacer sumafil=0; Para c<-0 Hasta col-1 Hacer sumafil <- sumafil + a[f,c]; FinPara Escribir "La suma de la fila ",f,"= ",sumafil; FinPara Finproceso 5 Unidad V: Arreglos Bidimensionales Ejemplo #5: Pseudocódigo que lea una matriz de N filas y N columnas y que almacene en la diagonal principal unos y en las demás posiciones ceros. Solución #5: Proceso diagonal Definir matriz,f,c como Entero; Dimension matriz[3,3]; Para f<-0 Hasta 2 Hacer Para c<-0 Hasta 2 Hacer Si f = c Entonces matriz[f,c] <- 1; Sino matriz[f,c] <- 0; FinSi Escribir Sin Saltar matriz[f,c]," "; FinPara Escribir ""; FinPara FinProceso 6 Unidad V: Arreglos Bidimensionales EJERCICIOS PROPUESTOS: Autoevaluación: 1.Según lo explicado, cuales son para usted las ventajas de utilizar arreglos 2.¿Cuál es la sintaxis de declaración de un arreglo? 3.¿Qué hace el compilador cuando se declara un arreglo? 4.Explique, ¿qué es un índice? 5.De acuerdo al siguiente trozo de código, diga si se produce o no un error y porque. Dimension arreglo[5]; arreglo[13]<-3; 6.De acuerdo al siguiente trozo de código, diga si se produce o no un error y si lo se produce diga cuál es la solución. Dimension arreglo1[5]; Dimension arreglo2[5]; // ... arreglo2 <- arreglo1; 7.- Pseudocódigo un array de N * M indicando que una empresa tiene N vendedores cada uno de los cuales vende 5 productos. El array almacena los ingresos obtenidos por cada vendedor en cada producto, imprimir el total de cada vendedor y obtener los ingresos totales de la tienda. 8.- Pseudocódigo que permita calcular la suma de los elementos de la diagonal principal de una matriz (N*N), el producto de los elementos de la diagonal secundaria. 9.- Pseudocódigo que rellene automáticamente una matriz N*M con la suma de sus índices (Es decir, el elemento a[1][1] = 1+1=2, a[3][2] = 3+2=5). El algoritmo mostrará la matriz resultante por pantalla. 7