Este documento describe las matrices y sus operaciones. Explica que una matriz es un vector de vectores donde cada elemento es del mismo tipo. Define cómo se identifican los elementos de una matriz usando subíndices de fila y columna. También cubre cómo declarar, inicializar y acceder a elementos de una matriz, así como realizar operaciones como suma y resta entre matrices.
1. Una matriz es un vector de vectores, o
conjunto de elementos siempre del mismo
tipo.
2. Cada elemento es una casilla, con posición:
elemento [1:8,a:h]; dependiendo de la fila y columna
donde encuentren.
3. ELEMENTOS DE LA MATRIZ
Para 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.
4. 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 superior
Donde L1<-I<-U1
L2<-J<-U2
Cada elemento B[I,J] es de tipo T
El 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)
5. DECLARACIÓN 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 dimensión 15x4 y que pueda almacenar datos de tipo
carácter.
char mat [15][4];
6. 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).
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. FORMATO DE ASIGNACIÓN DIRECTA A UN
ARREGLO BIDIMENSIONAL (extracción de
elementos)
<identificador variable> =<nombre del
arreglo>[índice de fila][índice de columna];
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 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
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 valor
del elemento almacenado en la posición fila/columna
dentro del arreglo.
11. 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 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. 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];
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. CÓMO 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 escribirán
dos sentencias for anidadas:
for i=1: nfilasA % para cada fila
for j=1: ncolsA
sentencias
end
end
También es posible recorrer la matriz por columnas:
for j=1: ncolsA % para cada columna
for i=1: nfilasA
sentencias
end
end
15. ALMACENAMIENTO DE ARRAYS EN
MEMORIA
El 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.
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 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++)
{
17. 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: nn";
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();
}
18. 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):
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 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]; }
}
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. 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;}
}