#include <iostream>
using namespace std;
void leer(int **&m, int &fil, int &col);
void sumar(int **a, int afil, int acol, int **b, int bfil, int bcol);
void restar(int **a, int afil, int acol, int **b, int bfil, int bcol);
void multiplicar(int **a, int afil, int acol, int **b, int bfil, int bcol);
void imprimir(int **m, int fil, int col);
void menu();
int main()
{
char opcion;
int **a;
int **b;
int afil, acol, bfil, bcol;
do {
menu();
cin >> opcion;
cout << endl;
switch (opcion)
{
case '1':
cout << "Datos de la Matriz A: " << endl;
leer(a, afil, acol);
cout << "Datos de la Matriz B: " << endl;
leer(b, bfil, bcol);
break;
case '2':
sumar(a, afil, acol, b, bfil, bcol);
break;
case '3':
restar(a, afil, acol, b, bfil, bcol);
break;
case '4':
multiplicar(a, afil, acol, b, bfil, bcol);
break;
case '5':
cout << "Matriz A: " << endl;
imprimir(a, afil, acol);
cout << "Matriz B: " << endl;
imprimir(b, bfil, bcol);
break;
case '6':
cout << "FIN DEL PROGRAMA" << endl << endl;
break;
default:
cout << "OPCION NO VALIDA" << endl << endl;
break;
}
cin.ignore(80, '\n');
} while (opcion != '6');
}
void menu()
{
cout << endl;
cout << " MENU PRINCIPAL" << endl;
cout << "=========================" << endl;
cout << "1.- Introducor Datos" << endl;
cout << "2.- Sumar Matrices" << endl;
cout << "3.- Restar Matrices" << endl;
cout << "4.- Multiplicar Matrices" << endl;
cout << "5.- Imprimir Matrices" << endl;
cout << "6.- Salir" << endl;
cout << "=========================" << endl;
cout << "OPCION (1 - 6): ";
}
void imprimir(int **m, int fil, int col)
{
for (int i = 0; i < fil; i++)
{
for (int j = 0; j < col; j++)
{
cout << m[i][j] << " ";
}
cout << endl;
}
}
void leer(int **&m, int &fil, int &col)
{
cout << "Numero de Filas: "; cin >> fil;
cout << "Numero de Columnas: "; cin >> col;
m = new int*[fil];
for (int i = 0; i < fil; i++)
m[i] = new int[col];
for (int i = 0; i < fil; i++)
{
for (int j = 0; j < col; j++)
{
cout << "[" << i << "][" << j << "]: ";
cin >> m[i][j];
}
cout << endl;
}
}
void sumar(int **a, int afil, int acol, int **b, int bfil, int bcol)
{
if (afil != bfil || acol != bcol)
{
cout << "Las Dimensiones de las Matrices NO Coinciden" << endl << endl;
return;
}
cout << endl << "Suma de A + B: " << endl;
for (int i = 0; i < afil; i++)
{
for (int j = 0; j < acol; j++)
{
cout << a[i][j] + b[i][j] << " ";
}
cout << endl;
}
}
void restar(int **a, int afil, int acol, int **b, int bfil, int bcol)
{
if (afil != bfil || acol != bcol)
{
cout << "Las Dimensiones de las Matrices NO Coinciden" << endl << endl;
return;
}
cout << endl << "Resta de A - B: " << endl;
for (int i = 0; i < afil; i++)
{
for (int j = 0; j < acol; j++)
{
cout << a[i][j] - b[i][j] << " ";
}
cout << endl;
}
}
void multiplicar(int **a, int afil, int acol, int **b, int bfil, int bcol)
{
if (acol != bfil)
{
cout << "Las Columnas de A deben Coincidir con las Filas de B" << endl << endl;
return;
}
int **z = new int*[afil];
for (int i = 0; i < afil; i++)
z[i] = new int[bcol];
cout << endl << "Multiplicacion de A * B: " << endl;
for (int i = 0; i < afil; i++)
{
for (int j = 0; j < bcol; j++)
{
z[i][j] = 0;
for (int k = 0; k < acol; k++)
{
z[i][j] = z[i][j] + a[i][k] * b[k][j];
}
}
}
imprimir(z, afil, bcol);
}