You are on page 1of 21

ARREGLOS BIDIMENSIONALES

O MATRICES

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

You might also like