Sunteți pe pagina 1din 21

Una matriz es un vector de vectores, o conjunto de elementos siempre del mismo tipo.

Cada elemento es una casilla, con posicin: elemento [1:8,a:h]; dependiendo de la fila y columna donde encuentren.

ELEMENTOS DE LA MATRIZ
Para identificar los elementos de la matriz, se utilizan dos subndices: 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.

LMITES DE LOS SUBNDICES DE LA MATRIZ


Un array bidimensional, posee lmites: superior,e inferior para su nmero de filas y columnas. De ah que: B(L1:U1,L2:U2)={B[I,J]} L<-Lmite inferior ; U<-lmite superior Donde L1<-I<-U1 L2<-J<-U2 Cada elemento B[I,J] es de tipo T El nmero de elementos de la fila es B es U2-L2+1 y el nmero de elementos de la columna B ES U1-L1+1; por ello el nmero de elementos del array es (U2-L2+1)*( U1-L1+1)

DECLARACIN DE UNA MATRIZ


Una matriz se declara usando el siguiente formato:

<TIPO> <NOMBREmatriz> [<N>][<M>] ; Por ejemplo: Se quiere declarar una matriz con nombre mat, de dimensin 15x4 y que pueda almacenar datos de tipo carcter.
char mat [15][4];

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 + + sera:

int jimmy [3][5]; y, por ejemplo, la manera de hacer referencia al segundo elemento vertical y horizontal en el cuarto una expresin sera:

jimmy[1][3] (Recuerde que los ndices comienzan siempre por cero).

ASIGNACIN DIRECTA DE ELEMENTOS DE UN ARREGLO BIDIMENSIONAL


( Insercin de elementos)

<nombre del arreglo> [ndice de fila][ndice de

columna] = valor del elemento;

FORMATO DE ASIGNACIN DIRECTA A UN ARREGLO BIDIMENSIONAL (extraccin de elementos)

<identificador variable> =<nombre del

arreglo>[ndice de fila][ndice de columna];

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 insercin 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

Asignar datos a elementos de una Matriz


los enunciados de asignacin 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 posicin fila/columna dentro del arreglo.

INICILIZACION DE UNA MATRIZ


Es 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 declaracin: 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.

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];

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; }

CMO RECORRER UNA MATRIZ?


Para recorrer una matriz necesitamos dos bucles anidados. Por ejemplo, si se desea recorrer todos los elementos de la matriz A por filas, se escribirn dos sentencias for anidadas: for i=1: nfilasA % para cada fila for j=1: ncolsA sentencias end end Tambin es posible recorrer la matriz por columnas: for j=1: ncolsA % para cada columna for i=1: nfilasA sentencias end end

ALMACENAMIENTO DE ARRAYS EN MEMORIA


El almacenamiento en memoria, est dispuesto en secuencia contigua de modo que cada acceso debe convertir la posicin dentro del array en una posicin dentro de una lnea.

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 pantalla la suma de los datos de cada fila */ int main() { int matriz[3][4]; int arreglo[3]; int i,j; //Ingreso de los datos for (i=0;i<3;i++) { for (j=0;j<4;j++) {

cout << "Ingrese el numero entero correspondiente a la posicion ["<<i<<"] ["<<j<<"]: "; cin >> matriz[i][j]; } } //Muestra en pantalla la matriz ingresada cout << "\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 fila for (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 resultados for (i=0;i<3;i++) { cout << "\nLa suma de los datos de la fila "<<i<<" es: " << arreglo[i]; } getch(); }

Operaciones con matrices:


Al igual que en matemtica, las operaciones con matrices, se ejecutan de la siguiente manera: En teora se hace as (suma):

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]; } }

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; }

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;} }

S-ar putea să vă placă și