Arreglos bidimensionales o matrices

63,121 views

Published on

Published in: Education
5 Comments
4 Likes
Statistics
Notes
No Downloads
Views
Total views
63,121
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
740
Comments
5
Likes
4
Embeds 0
No embeds

No notes for slide

Arreglos bidimensionales o matrices

  1. 1. Una matriz es un vector de vectores, oconjunto de elementos siempre del mismo tipo.
  2. 2. Cada elemento es una casilla, con posición:elemento [1:8,a:h]; dependiendo de la fila y columnadonde encuentren.
  3. 3. ELEMENTOS DE LA MATRIZPara identificar los elementos de la matriz, se utilizan dossubí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 terceracolumna.
  4. 4. LÍMITES DE LOS SUBÍNDICES DE LA MATRIZUn array bidimensional, posee límites: superior,e inferiorpara 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 elnúmero de elementos de la columna B ES U1-L1+1; por elloel número de elementos del array es (U2-L2+1)*( U1-L1+1)
  5. 5. DECLARACIÓN DE UNA MATRIZUna matriz se declara usando el siguiente formato: <TIPO> <NOMBREmatriz> [<N>][<M>] ;Por ejemplo: Se quiere declarar una matriz con nombremat, de dimensión 15x4 y que pueda almacenar datos de tipocarácter. char mat [15][4];
  6. 6. Por ejemplo, una matriz bidimensional se puede imaginar comouna tabla bidimensional compuesta de elementos, todos ellos deun mismo tipo de datos uniforme.jimmy representa una matriz bidimensional de 3 por 5 elementosde 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 elementovertical y horizontal en el cuarto una expresión sería:jimmy[1][3](Recuerde que los índices comienzan siempre por cero).
  7. 7. 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;
  8. 8. FORMATO DE ASIGNACIÓN DIRECTA A UNARREGLO BIDIMENSIONAL (extracción de elementos)  <identificador variable> =<nombre delarreglo>[índice de fila][índice de columna];
  9. 9. 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 unvalor eso:voltaje[2][10] = 20;Observe que este valor de voltaje corresponde a un valorde corriente de 2 y un valor de resistencia de 10 cuandose usa la ley de Ohm
  10. 10. Asignar datos a elementos de una Matriz los enunciados de asignación directa para extraer elementos son:volts = voltaje[5][100];En este caso se asigna a un identificador variable el valordel elemento almacenado en la posición fila/columnadentro del arreglo.
  11. 11. 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 lotanto, 1 y 2 inicializan a b[0][0] y b[0][1] y 3 y 4 inicializan ab[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.
  12. 12. LECTURA Y ESCRITURA DE ELEMENTOS EN ARREGLOS BIDIMENSIONALESEs posible usar enunciados cin para insertar elementosen arreglos bidimensionales y utilizar enunciados coutpara extraer elementos del arreglo, como los siguientesejemplos: cin >> voltaje[5][20]; cout << voltaje[5][20];
  13. 13. 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;}
  14. 14. 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
  15. 15. ALMACENAMIENTO DE ARRAYS ENMEMORIAEl almacenamiento en memoria, está dispuesto ensecuencia contigua de modo que cada acceso debeconvertir la posición dentro del array en una posicióndentro de una línea.
  16. 16. Lee los datos de una matriz 3x4 y muestra en pantalla la 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++) {
  17. 17. 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: nn"; 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();}
  18. 18. Operaciones con matrices:Al igual que en matemática, las operaciones conmatrices, se ejecutan de la siguiente manera:En teoría se hace así (suma):
  19. 19. 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 paraSalir"<<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]; } }
  20. 20. 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; }
  21. 21. 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;} }

×