arreglos bidimensionales o matrices
TRANSCRIPT
![Page 1: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/1.jpg)
ARREGLOS BIDIMENSIONALES O MATRICES
Una matriz es un vector de vectores, o conjunto de elementos siempre del
mismo tipo.
![Page 2: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/2.jpg)
Cada elemento es una casilla, con posición:elemento [1:8,a:h]; dependiendo de la fila y columna donde encuentren.
![Page 3: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/3.jpg)
ELEMENTOS DE LA MATRIZPara identificar los elementos de la matriz, se utilizan dos subíndices:El primero, indica la fila donde se ubica.El segundo, indica en qué columna está.
Por ejemplo: M[2,3]Se refiere al elemento ubicado en la segunda fila y tercera columna.
![Page 4: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/4.jpg)
LÍMITES DE LOS SUBÍNDICES DE LA MATRIZ
Un array bidimensional, posee límites: superior,e inferior para su número de filas y columnas.De ahí que:B(L1:U1,L2:U2)={B[I,J]}L<-Límite inferior ; U<-límite superiorDonde L1<-I<-U1 L2<-J<-U2Cada elemento B[I,J] es de tipo TEl número de elementos de la fila es B es U2-L2+1 y el número de elementos de la columna B ES U1-L1+1; por ello el número de elementos del array es (U2-L2+1)*( U1-L1+1)
![Page 5: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/5.jpg)
DECLARACIÓN DE UNA MATRIZUna matriz se declara usando el siguiente formato:
<TIPO> <NOMBREmatriz> [<N>][<M>] ;
Por ejemplo: Se quiere declarar una matriz con nombre mat, de dimensión 15x4 y que pueda almacenar datos de tipo carácter.
char mat [15][4];
![Page 6: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/6.jpg)
Por ejemplo, una matriz bidimensional se puede imaginar como una tabla bidimensional compuesta de elementos, todos ellos de un mismo tipo de datos uniforme.jimmy representa una matriz bidimensional de 3 por 5 elementos de tipo int. La manera de declarar esta matriz en C + + sería:
int jimmy [3][5]; y, por ejemplo, la manera de hacer referencia al segundo elemento vertical y horizontal en el cuarto una expresión sería:
jimmy[1][3]
(Recuerde que los índices comienzan siempre por cero).
![Page 7: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/7.jpg)
ASIGNACIÓN DIRECTA DE ELEMENTOS DE UN ARREGLO BIDIMENSIONAL
( Inserción de elementos)
<nombre del arreglo> [índice de fila][índice de columna] = valor del elemento;
![Page 8: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/8.jpg)
FORMATO DE ASIGNACIÓN DIRECTA A UN ARREGLO BIDIMENSIONAL (extracción de
elementos)
<identificador variable> =<nombre del arreglo>[índice de fila][índice de
columna];
![Page 9: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/9.jpg)
Dadas las siguientes definiciones de arreglo bidimensional, dibuje un diagrama de la estructura
del arreglo mostrando los índices respectivos de filas y columnas.
int voltaje[CORRIENTE][RESISTENCIA];const int CORRIENTE = 26;const int RESISTENCIA = 1001;Las asignacion directa posibles para la inserción de un valor eso:voltaje[2][10] = 20;Observe que este valor de voltaje corresponde a un valor de corriente de 2 y un valor de resistencia de 10 cuando se usa la ley de Ohm
![Page 10: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/10.jpg)
los enunciados de asignación directa para extraer elementos son:
volts = voltaje[5][100];
En este caso se asigna a un identificador variable el valor del elemento almacenado en la posición fila/columna dentro del arreglo.
Asignar datos a elementos de una Matriz
![Page 11: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/11.jpg)
INICILIZACION DE UNA MATRIZEs posible declarar e inicializar un arreglo en una misma vez.Por ejemplo: b[2][2] int b[2][2] = { {1, 2}, {3, 4} };Los valores se agrupan por filas entre corchetes. Por lo tanto, 1 y 2 inicializan a b[0][0] y b[0][1] y 3 y 4 inicializan a b[1][0] y b[1][1]
Si no hay suficientes inicializadores para una fila determinada, los elementos se inicializan a 0. Por lo tanto, la declaración:
int b[2][2] = { {1}, {3, 4} };inicializan a b[0][0] a 1, y b[0][1] a 0, b[1][0] a 3, y b[1][1] a 4.
![Page 12: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/12.jpg)
LECTURA Y ESCRITURA DE ELEMENTOS EN ARREGLOS BIDIMENSIONALES
Es posible usar enunciados cin para insertar elementos en arreglos bidimensionales y utilizar enunciados cout para extraer elementos del arreglo, como los siguientes ejemplos:
cin >> voltaje[5][20];cout << voltaje[5][20];
![Page 13: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/13.jpg)
Ejemplo: Este ejemplo nos presenta el menú , en un restaurante:
#include <iostream>using namespace std;
#define DIMENSION ((int) (sizeof mst / sizeof mst [0]))
struct St { int orden; char* plato; char* desc;} mst [] = { 1, "Entrada", "Sopa juliana", 2, "Segundo", "Filete empanado", 3, "Postre ", "Tarta al Whisky",};
int main() { for (int i = 0 ; i < DIMENSION; i++) cout << mst[i].orden << " " << mst[i].plato << " " << mst[i].desc << endl; return 0;}
![Page 14: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/14.jpg)
CÓMO RECORRER UNA MATRIZ?Para recorrer una matriz necesitamos dos bucles anidados. Por ejemplo, sise desea recorrer todos los elementos de la matriz A por filas, se escribirándos sentencias for anidadas:
for i=1: nfilasA % para cada filafor j=1: ncolsAsentenciasendendTambién es posible recorrer la matriz por columnas:for j=1: ncolsA % para cada columnafor i=1: nfilasAsentenciasendend
![Page 15: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/15.jpg)
ALMACENAMIENTO DE ARRAYS EN MEMORIAEl almacenamiento en memoria, está dispuesto en secuencia contigua de modo que cada acceso debe convertir la posición dentro del array en una posición dentro de una línea.
![Page 16: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/16.jpg)
Lee los datos de una matriz 3x4 y muestra en pantallala suma de los datos de cada fila
#include <iostream>#include <stdlib.h>#include <conio.h>using namespace std;/*Este programa lee los datos de una matriz 3x4 y muestra en pantallala suma de los datos de cada fila */int main(){int matriz[3][4];int arreglo[3];int i,j;//Ingreso de los datosfor (i=0;i<3;i++) { for (j=0;j<4;j++) {
![Page 17: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/17.jpg)
cout << "Ingrese el numero entero correspondiente a la posicion ["<<i<<"] ["<<j<<"]: "; cin >> matriz[i][j]; } }//Muestra en pantalla la matriz ingresadacout << "\nLa matriz que usted ingreso es: \n\n"; for (i=0;i<3;i++) { for (j=0;j<4;j++) { cout << matriz[i][j]<<" "; }cout << "\n"; }//Suma los datos de cada filafor (i=0;i<3;i++) { arreglo[i]=0; for (j=0;j<4;j++) { arreglo[i]=arreglo[i]+matriz[i][j]; } }//Muestra en pantalla los resultadosfor (i=0;i<3;i++) { cout << "\nLa suma de los datos de la fila "<<i<<" es: " << arreglo[i]; }getch();}
![Page 18: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/18.jpg)
Operaciones con matrices:Al igual que en matemática, las operaciones con matrices, se ejecutan de la siguiente manera:En teoría se hace así (suma):
![Page 19: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/19.jpg)
Suma y Resta de Matrices#include <iostream.> #include <stdlib.h> using namespace std;
int operacion(int [][100], int [][100], int [][100], int , int , int, int, int);
int main() { int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100]; cout<<"Presione 1 para Sumar"<<endl<<"Presione 2 para Restar"<<endl<<" Presione otro numero para Salir"<<endl; cin>>n; while ((n>0) && (n<3)) { f1=0; c1=0; f2=0; c2=0; while ((f1<1) || (f1>101)) { cout<<"Introduce las filas de la matriz 1 [1-100]: "; cin>>f1; } while ((c1<1) || (c1>101)) { cout<<"Introduce las columnas de la matriz 1 [1-100]: "; cin>>c1; }
for (f=0; f<=f1; f++) { for (c=0; c<=c1; c++) { cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; } }
![Page 20: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/20.jpg)
while ((f2<1) || (f2>101)) { cout<<endl<<"Introduce las filas de la matriz 2 [1-100]: "; cin>>f2; } while ((c2<1) || (c2>101)) { cout<<"Introduce las columnas de la matriz 2 [1-100]: "; cin>>c2; }
for (f=0; f<=f2; f++) { for (c=0; c<=c2; c++) { cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; } }r=operacion(m1,m2,mr,n,f1,f2,c1,c2); if (r==-1) cout<<endl<<"No se pudo realizar la operacion; las matrices no son del mismo tamanio"<<endl; else { for (f=0; f<=f2; f++) { for (c=0; c<=c2; c++) cout<<" "<<mr[f][c]<<" "; cout<<endl; } } cout<<endl<<"1 -- Sumar"<<endl<<"2 -- Restar"<<endl<<"Otro numero -- Salir"<<endl; cin>>n; } cout<<endl<<"Fin de programa..."<<endl; system("PAUSE"); return 0; }
![Page 21: Arreglos bidimensionales o matrices](https://reader033.vdocuments.mx/reader033/viewer/2022061503/557bbaa4d8b42a1c1f8b4697/html5/thumbnails/21.jpg)
int operacion(int m1[][100], int m2[][100], int mr[][100], int n, int f1, int f2,int c1, int c2) { int f,c; if ((f1==f2) && (c1==c2)) //si si se pueden sumar/restar { if (n==1) //suma { for (f=0; f<=f1; f++) { for (c=0; c<=c1; c++) mr[f][c] = m1[f][c] + m2[f][c]; } } else //resta { for (f=0; f<=f1; f++) { for (c=0; c<=c1; c++) mr[f][c] = m1[f][c] - m2[f][c]; } } return 1; } else {return -1;} }