Descripción: Clase 19 de Programación, Prof. Gonzalo Müller
Programación
Clase 19. Arreglos Bidimensionales Prof. Gonzalo Müller
[email protected]
Facultad de Ingeniería Universidad Central de Venezuela
Clase Anterior
Datos Agrupados del mismo tipo → Arreglos Un arreglo esta definido: Nombre. Tipo. Tamaño. Arreglos en C: Declaración: tipo nombre[TAMAÑO] Manejo: nombre[índice]
índice ∈ [0, cantidad) Programación – Prof. Gonzalo Müller – Clase 19 – GM - 2
Clase Anterior
Manejo de un arreglo: Tamaño Cantidad ≤ Tamaño. Bucle. Contador < Cantidad
Asignación = NO realiza la asignación de todos los valores del arreglo. Arreglos como retorno: NO. Arreglos como parámetros: entrada y retorno. Constantes Simbólicas. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 3
Arreglos Unidimensionales Conocidos también como vectores.
Declaración: tipo identificador[TAMAÑO] Constante
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 4
Arreglos Bidimensionales Conocidos también como matrices.
Declaración: tipo identificador[FILAS] [COLUMNAS] Constante
Constante
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 5
Arreglos Bidimensionales Ejemplo: // Matriz de 2 Filas y 9 Columnas float matriz[2][9];
// Matriz de 3 Filas y 3 Columnas float matrizCuadrada[3][3];
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 6
Arreglos Bidimensionales
Manejo: Índices: Establecen la posición de un elemento en la matriz.
Puede ser una variable, constante o expresión.
Debe ser tipo entero sin signo.
Su forma de uso:
Índices
identificador[fila] [columna]
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 7
Arreglos Bidimensionales Ejemplo: matriz[0][1]
matriz[1][5] Programación – Prof. Gonzalo Müller – Clase 19 – GM - 8
Arreglos Bidimensionales Ejemplo: 1º Fila matriz[0][…]
2º Fila matriz[1][…] 1º Columna matriz[…][0]
9º Columna matriz[…][8]
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 9
Arreglos Bidimensionales Tamaño real de la Matriz: filas ≤ FILAS columnas ≤ COLUMNAS
Matriz Real matriz[3][5] Matriz Definida matriz[4][9] Programación – Prof. Gonzalo Müller – Clase 19 – GM - 10
Arreglos Bidimensionales Rango de los índices: fila ∈ [0, filas) columna ∈ [0, columnas) Límites Inferiores matriz[0][0]
matriz[0][4]
matriz[2][0]
matriz[2][4] Límites Superiores Programación – Prof. Gonzalo Müller – Clase 19 – GM - 11
Arreglos Bidimensionales Bucles: Se necesitaran al menos 2 bucles para manejar un arreglo bidimensional, los cuales están anidados: 1º Bucle permitirá desplazarse de una fila a otra.
Se utilizará un contador como índice fila para establecer en que fila se encuentra.
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 12
Arreglos Bidimensionales
Antes del bucle el contador debe ser iniciado en 0. fila = 0
La condición para mantenerse en el bucle debe ser: fila < filas
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 13
Arreglos Bidimensionales
… fila = 0
1º Fila
Mientras (fila < filas) … … fila = fila + 1 …
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 14
Siguiente Fila
Arreglos Bidimensionales 2º Bucle permitirá desplazarse de una columna a otra.
Se utilizará un contador como índice columna para establecer en que columna se encuentra.
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 15
Arreglos Bidimensionales
Antes del bucle el contador debe ser iniciado en 0. columna = 0
La condición para mantenerse en el bucle debe ser: columna < columnas
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 16
Arreglos Bidimensionales
… columna = 0
1º Columna
Mientras (columna < columnas) … … columna = columna + 1 …
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 17
Siguiente Columna
Arreglos Bidimensionales Bucles clásico … fila = 0 Mientras (fila < filas) columna = 0 Mientras (columna < columnas) Operaciones con elemento matriz[fila] [columna]
… … columna = columna + 1 fila = fila + 1 … Programación – Prof. Gonzalo Müller – Clase 19 – GM - 18
Arreglos Bidimensionales columna = 0
columna = columna + 1
fila = 0 fila = 0
columna = 0 fila = fila + 1
columna = columna + 1
Bucles clásico Programación – Prof. Gonzalo Müller – Clase 19 – GM - 19
…
Arreglos Bidimensionales Ejemplo: unsigned short f, c; f = 0; while(f < filas) { c = 0; while(c < columnas) { printf("\nMatriz(%u, matriz[f][c]); c = c + 1; } f = f + 1; }
%u):
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 20
%f",
f,
c,
Arreglos Bidimensionales Ejemplo: unsigned short f, c; f = 0; while(f < filas) { c = 0; while(c < columnas) { printf("\nMatriz(%u, matriz[f][c]); c = c + 1; } f = f + 1; }
%u):
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 21
%f",
f,
c,
Arreglos Bidimensionales Ejemplo: unsigned short f, c; f = 0; while(f < filas) { c = 0; while(c < columnas) { printf("\nMatriz(%u, matriz[f][c]); c = c + 1; } f = f + 1; }
%u):
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 22
%f",
f,
c,
Arreglos Bidimensionales Ejemplo: unsigned short f, c; f = 0; while(f < filas) { c = 0; while(c < columnas) { printf("\nMatriz(%u, matriz[f][c]); c = c + 1; } f = f + 1; }
%u):
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 23
%f",
f,
c,
Arreglos Bidimensionales Ejemplo: Construir un programa estructurado en C para leer y escribir una matriz de tamaño dado por el usuario.
Fase 1: Diseño y Análisis: DES DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa estructurado en C. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 24
Ejercicio Construir un programa estructurado en C para: Leer una matriz y mostrar la misma y la transpuesta en la salida. 1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3
Fase 1: Diseño y Análisis: DES DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa estructurado C. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 25
Arreglos Bidimensionales
Elementos indispensables en el manejo de una matriz: Tipo. Tamaños: FILAS y COLUMNAS.
Constantes Enteras sin Signo. Debe ser sobredimesionada.
Cantidades: filas y columnas.
filas ≤ FILAS, columnas ≤ COLUMNAS. Variables Enteras sin Signo. Definen el tamaño de la matriz a ocupar.
Bucles.
2 bucles que permiten desplazarse a través de la matriz.
Contadores: fila y columna.
fila < filas, columna < columnas. Indica el elemento de la matriz a acceder. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 26
Arreglos como parámetros Se debe indicar el tipo y el tamaño del arreglo. Declaración y Definición … nombre(unsigned tipo cantidad, tipo parámetro1[TAMAÑO1], …) … nombre(unsigned tipo &cantidad, tipo parámetro1[TAMAÑO1], …)
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 27
parámetro de entrada parámetro de retorno
Arreglos como parámetros Ejemplo:
Uso de arreglo como parámetro de salida
void leeNotas(…, double notas[20]) { scanf(“%lf”, ¬as[0]); scanf(“%lf”, ¬as[1]); … Uso de arreglo como } parámetro de entrada double mediaNotas(…, double notas[20]) { double media = 0; media = notas[0] + notas[1]; … } Programación – Prof. Gonzalo Müller – Clase 19 – GM - 28
Arreglos como parámetros Llamada: Como se trata de un parámetro de salida SIEMPRE se debe utilizar como argumento una variable. … nombre(variable1, …)
Ejemplo:
variable arreglo del tipo y tamaño del parámetro1
void mediaNotas(…, double notas[20]); main() { double notas[20]; Argumento Variable … leeNotas(cantidad, notas); Argumento Variable … mediaNotas(cantidad, notas); } Programación – Prof. Gonzalo Müller – Clase 19 – GM - 29
Arreglos Bidimensional como parámetros Declaración y Definición … nombre(unsigned tipo cantidadFilas, unsigned tipo cantidadColumnas, tipo parámetro1[FILAS] [COLUMNAS], …) parámetro de entrada
… nombre(unsigned tipo &cantidadFilas, unsigned tipo &cantidadColumnas, tipo parámetro1[FILAS] [COLUMNAS], …) parámetro de retorno
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 30
Arreglos Bidimensional como parámetros Llamada: … nombre(…,variable1, …) Variable arreglo de mismas Filas y Columnas
Es necesario utilizar 3 parámetros: cantidad de filas, cantidad de columnas y matriz.
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 31
Arreglos Bidimensional como parámetros Ejemplo: … void leerMatriz(unsigned short &filas, unsigned short &columnas, float matriz[50][50]); … main() { Mismo Tamaño unsigned short filas, columnas; float mat[50][50]; // leerMatriz(filas, columnas, mat); escribirMatriz(filas, columnas, mat); } Programación – Prof. Gonzalo Müller – Clase 19 – GM - 32
Arreglos Bidimensional como parámetros Ejemplo: Diseñar y construir un programa modular en C++ acoplamiento de datos estándar para leer y escribir una matriz de tamaño dado por el usuario.
Fase 1: Diseño y Análisis: DES y DTD DES, DRE ó DF y LV de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C++. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 33
Ejercicio Construir un programa modular con acoplamiento de datos estándar en C++ para: a) Transponer una matriz. b) Determinar si dos matrices son iguales o no. c) Realizar el producto de dos matrices. d) Determinar si una matriz es la identidad. Fase 1: Diseño y Análisis: DES, DTD y UML DES, DRE ó DF y LV de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C++. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 34
Ejercicio Construir un programa modular con acoplamiento de datos estándar en C++ para: e) Determinar si una matriz es simétrica. f) Determinar la norma Frobenius de una matriz. g) Intercambiar dos columnas de la matriz. Fase 1: Diseño y Análisis: DES, DTD y UML DES, DRE ó DF y LV de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C++. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 35
Ejercicio Construir un programa modular con acoplamiento de datos estándar en C++ para: h) Desplazar una malla de N vértices en una dirección dada. Fase 1: Diseño y Análisis: DES, DTD y UML DES, DRE ó DF y LV de Módulos y TM. DRE ó DF, LV y CF de Bloque Principal. Fase 2: Codificación: programa modular en C++.
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 36
Resumen
Arreglo unidimensional: vectores. Arreglo bidimensionales: matrices. Declaración: tipo identificador[FILAS] [COLUMNAS] Manejo: identificador[fila] [columna] 1º Bucle permitirá desplazarse de una fila a otra. 2º Bucle permitirá desplazarse de una columna a otra.
Matrices como parámetros: 3 parámetros.
Mismo Tamaño. Programación – Prof. Gonzalo Müller – Clase 19 – GM - 37
Lectura Extra
Arreglo Multidimensionales Conocidos también como Arreglos N-dimensionales
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 38
Arreglos Multidimensionales
Declaración: tipo nombre[TAMAÑO1] [TAMAÑO2]… [TAMAÑON] Ejemplo: // Arreglo de 4 dimensiones // de 2 x 9 x 5 x 3 double arreglo[2][9][5][3];
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 39
Arreglos Multidimensionales
Manejo: Índices: Se utilizaran tantos dimensiones tengan el arreglo.
índices
identificador[índice1] [índice2]… [índiceN] Ejemplo: … // Asigna 3 al elemento 0, 5, 4, 1 arreglo[0][5][4][1] = 3.0; Programación – Prof. Gonzalo Müller – Clase 19 – GM - 40
como
Arreglos Multidimensionales Tamaño real del Arreglo: cantidad1 ≤ TAMAÑO1 cantidad2 ≤ TAMAÑO2 … cantidadN ≤ TAMAÑON
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 41
Arreglos Multidimensionales Rango de los índices: índice1 ∊ [0, cantidad1 – 1] índice2 ∊ [0, cantidad2 – 1] … índiceN ∊ [0, cantidadN – 1]
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 42
Arreglos Multidimensionales Bucles: Se utilizaran tantos bucles anidados como dimensiones tengan el arreglo.
Se utilizaran tantos contadores para índice como dimensiones tengan el arreglo.
Ejemplo: double arreglo[2][9][5][3]; 4 Bucles anidados. unsigned short e1, e2, …; 4 Contadores. while(e1 < cantidad1) … 4 Cantidades. while(e2 < cantidad2) … while(e3 < cantidad3) … while(e4 < cantidad4) … Programación – Prof. Gonzalo Müller – Clase 19 – GM - 43
Arreglos como parámetros Se debe indicar el tipo y el tamaño del arreglo. Declaración y Definición … nombre(unsigned tipo cantidad1, unsigned tipo cantidad2, …, tipo parámetro1[TAMAÑO1] [TAMAÑO2] …, …) parámetro de entrada
… nombre(unsigned tipo &cantidad1, unsigned tipo &cantidad2, …, tipo parámetro1[TAMAÑO1] parámetro [TAMAÑO2]…, …)
de retorno
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 44
Arreglos Multidimensionales Ejemplo: Diseñar y construir un programa modular en C++ con acoplamiento de datos que sume N matrices.
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 45
Resumen
Arreglos Multidimensionales. Arreglo unidimensional: vectores.
Declaración:
tipo identificador[TAMAÑO]
Manejo: identificador[índice]
1 Bucle permitirá desplazarse a lo largo del vector. índice ∈ [0, cantidad)
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 46
Resumen Arreglo bidimensionales: matrices.
Declaración:
tipo identificador[FILAS] [COLUMNAS]
Manejo: identificador[fila] [columna]
1º Bucle permitirá desplazarse de una fila a otra. fila ∈ [0, filas) 2º Bucle permitirá desplazarse de una columna a otra. columna ∈ [0, columnas)
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 47
Resumen Arreglo N-dimensionales.
Declaración:
tipo nombre[TAMAÑO1] [TAMAÑO2]… [TAMAÑON] Manejo: identificador[índice1] [índice2]… [índiceN]
Tantos bucles anidados como dimensiones tengan el arreglo. Tantos contadores para índice como dimensiones tengan el arreglo.
Programación – Prof. Gonzalo Müller – Clase 19 – GM - 48