Hola a todos los Taringueros, para aquellos que necesiten multiplicar, sumar o restar matrices con C++ les traigo este código, solo deben cambiarle los créditos, es decir, quitar mi nombre y poner el de ustedes. Este código aunque no es completamente mio, las modificaciones si lo son. El código en Dev C++ no muestra ningún error, ni siquiera una advertencia. Reitero que este programa es mas completo que uno que había posteado hace poco, pues el otro solo multiplicaba matrices, en cambio este le dá la opción de escoger si quiere multiplicar, sumar o restar matrices, otro cambio es que las operaciones están como funciones, esto le dá mayor facilidad de modificación al programa...
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <ctype.h>
using namespace std;
int operacion_sum(int [][100], int [][100], int [][100], int , int , int, int);
int operacion_res(int [][100], int [][100], int [][100], int , int, int, int);
int operacion_mul(int [][100], int [][100], int [][100], int , int, int, int);
int suma();
int resta();
int multiplicacion();
int salida();
int opcion;
int main()
{
int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
int opcion;
f1=0; c1=0; f2=0; c2=0;
cout<<"Este programa suma, resta o multiplica matrices"<<endl<<endl;
cout<<"Que desea hacer, si la opcion no esta disponible el programa finalizara"<<endl<<endl;
cout<<"1) Suman";
cout<<"2) Restan";
cout<<"3) Multiplicacionn";
cout<<"4) Salirn";
cout<<" "<<endl;
cin>>opcion;
cout<<" "<<endl;
switch(opcion) //Verifica el valor de opcion
{
case 1: //Si es uno
suma(); //sumo
break;
case 2: //Si es dos
resta(); //resto
break;
case 3: //Si es tres
multiplicacion(); //multiplico
break;
case 4: //Si es cuatro
salida(); //Ejecuto esta función para salir
break;
default: //Si es una opcion no disponible
cout<<" ";
salida(); //Ejecuto esta función para salir
}
if (opcion >=1 and opcion <=3) // si escojo 1, 2 o 3
{
cout<<endl<<"Escoja una opcion, si la opcion no esta disponible el programa finalizara"<<endl<<endl;
cout<<"1) Volver a calcular una matrizn";
cout<<"2) Salirn"<<endl;
cin>>opcion;
cout<<" "<<endl;
switch(opcion) //Verifica el valor de opcion
{
case 1: //Si es uno
system("cls"; //limpio la pantalla
main(); //Ejecuto nuevamente la función para calcular matrices
break;
case 2: //Si es dos
salida();
break; //El break sirve para que no ejecute las demas opciones
default: //Si es una opcion no disponible
cout<<" ";
salida(); //Ejecuto esta función para salir
}
} //aqui termina el if
}
int salida() // funcion para salir
{
cout<<endl<<"Trabajo realizado por:"<<endl;
cout<<" Carlos Arturo Marin"<<endl; // Quiten mi nombre y coloquen el de ustedes
cout<<endl<<"Programa finalizado..."<<endl;
system("PAUSE";
}
int suma() // funcion suma
{
int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
f1=0; c1=0; f2=0; c2=0;
while ((f1<1) || (f1>101))
{ cout<<"Ingrese el numero de filas de la matriz 1 (maximo 100 filas): ";
cin>>f1;
}
f1--; //Disminuyo en 1 el dato capturado porque el programa me cuenta el 0
while ((c1<1) || (c1>101))
{ cout<<"Ingrese el numero de columnas de la matriz 1 (maximo 100 columnas): "; cin>>c1; }
c1--;
while ((f2<1) || (f2>101))
{ cout<<endl<<"Ingrese el numero de filas de la matriz 2 (maximo 100 filas): "; cin>>f2; }
f2--;
while ((c2<1) || (c2>101))
{ cout<<"Ingrese el numero de columnas de la matriz 2 (maximo 100 columnas): "; cin>>c2; }
c2--;
r=operacion_sum (m1,m2,mr,f1,f2,c1,c2);
if (r==-1)
{cout<<endl<<"No se pudo realizar la operacion, la dimension de las matrices no coincide"<<endl;}
else
{
cout<<endl<<"Digite por filas los datos de la matriz 1"<<endl<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; }
}
cout<<endl<<"Digite por filas los datos de la matriz 2"<<endl<<endl;
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
{ cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; }
}
cout<<endl<<"El resultado de la suma de las matrices es:"<<endl<<endl;
r=operacion_sum (m1,m2,mr,f1,f2,c1,c2);
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
cout<<" "<<mr[f][c]<<" ";
cout<<endl;
}
}
}
int resta() // funcion resta
{
int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
f1=0; c1=0; f2=0; c2=0;
while ((f1<1) || (f1>101))
{ cout<<"Ingrese el numero de filas de la matriz 1 (maximo 100 filas): ";
cin>>f1;
}
f1--; //Disminuyo en 1 el dato capturado porque el programa me cuenta el 0
while ((c1<1) || (c1>101))
{ cout<<"Ingrese el numero de columnas de la matriz 1 (maximo 100 columnas): "; cin>>c1; }
c1--;
while ((f2<1) || (f2>101))
{ cout<<endl<<"Ingrese el numero de filas de la matriz 2 (maximo 100 filas): "; cin>>f2; }
f2--;
while ((c2<1) || (c2>101))
{ cout<<"Ingrese el numero de columnas de la matriz 2 (maximo 100 columnas): "; cin>>c2; }
c2--;
r=operacion_res (m1,m2,mr,f1,f2,c1,c2);
if (r==-1)
{cout<<endl<<"No se pudo realizar la operacion, la dimension de las matrices no coincide"<<endl;}
else
{
cout<<endl<<"Digite por filas los datos de la matriz 1"<<endl<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; }
}
cout<<endl<<"Digite por filas los datos de la matriz 2"<<endl<<endl;
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
{ cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; }
}
cout<<endl<<"El resultado de la resta de las matrices es:"<<endl<<endl;
r=operacion_res (m1,m2,mr,f1,f2,c1,c2);
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
cout<<" "<<mr[f][c]<<" ";
cout<<endl;
}
}
}
int multiplicacion() //funcion multiplicacion
{
int f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
f1=0; c1=0; f2=0; c2=0;
while ((f1<1) || (f1>101))
{ cout<<"Ingrese el numero de filas de la matriz 1 (maximo 100 filas): ";
cin>>f1;
}
f1--; //Disminuyo en 1 el dato capturado porque el programa me cuenta el 0
while ((c1<1) || (c1>101))
{ cout<<"Ingrese el numero de columnas de la matriz 1 (maximo 100 columnas): "; cin>>c1; }
c1--;
while ((f2<1) || (f2>101))
{ cout<<endl<<"Ingrese el numero de filas de la matriz 2 (maximo 100 filas): "; cin>>f2; }
f2--;
while ((c2<1) || (c2>101))
{ cout<<"Ingrese el numero de columnas de la matriz 2 (maximo 100 columnas): "; cin>>c2; }
c2--;
r=operacion_mul(m1,m2,mr,f1,f2,c1,c2);
if (r==-1)
{
cout<<endl<<"No se pudo realizar la operacion, la dimension de las matrices no coincide"<<endl;
}
else
{
cout<<endl<<"Digite por filas los datos de la matriz 1"<<endl<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; }
}
cout<<endl<<"Digite por filas los datos de la matriz 2"<<endl<<endl;
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
{ cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; }
}
r=operacion_mul(m1,m2,mr,f1,f2,c1,c2); //Ejecuto la funcion que hace la operación de multiplicacion
{
cout<<endl<<"El resultado de la multiplicacion de las matrices es:"<<endl<<endl;
cout<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c2; c++)
cout<<" "<<mr[f][c]<<" "; //Muestro la matriz resultante en la pantalla
cout<<endl;
}
}
}
}
int operacion_sum(int m1[][100], int m2[][100], int mr[][100], int f1, int f2,int c1, int c2)
{
int f,c;
if ((f1==f2) && (c1==c2)) //si si se pueden sumar/restar
{
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;}
}
int operacion_res(int m1[][100], int m2[][100], int mr[][100], int f1, int f2,int c1, int c2)
{
int f,c;
if ((f1==f2) && (c1==c2)) //si si se pueden sumar/restar
{
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;}
}
int operacion_mul(int m1[][100], int m2[][100], int mr[][100], int f1, int f2,int c1, int c2) //funcion operacion
{
int f,c,cc;
if (c1==f2) //si si se pueden multiplicar
{
for (cc=0; cc<=c2; cc++) //recorremos las columnas de B
{
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ mr[f][cc]+=m1[f][c]*m2[c][cc]; }
}
}
return 1;
}
else
{return -1;}
}
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <ctype.h>
using namespace std;
int operacion_sum(int [][100], int [][100], int [][100], int , int , int, int);
int operacion_res(int [][100], int [][100], int [][100], int , int, int, int);
int operacion_mul(int [][100], int [][100], int [][100], int , int, int, int);
int suma();
int resta();
int multiplicacion();
int salida();
int opcion;
int main()
{
int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
int opcion;
f1=0; c1=0; f2=0; c2=0;
cout<<"Este programa suma, resta o multiplica matrices"<<endl<<endl;
cout<<"Que desea hacer, si la opcion no esta disponible el programa finalizara"<<endl<<endl;
cout<<"1) Suman";
cout<<"2) Restan";
cout<<"3) Multiplicacionn";
cout<<"4) Salirn";
cout<<" "<<endl;
cin>>opcion;
cout<<" "<<endl;
switch(opcion) //Verifica el valor de opcion
{
case 1: //Si es uno
suma(); //sumo
break;
case 2: //Si es dos
resta(); //resto
break;
case 3: //Si es tres
multiplicacion(); //multiplico
break;
case 4: //Si es cuatro
salida(); //Ejecuto esta función para salir
break;
default: //Si es una opcion no disponible
cout<<" ";
salida(); //Ejecuto esta función para salir
}
if (opcion >=1 and opcion <=3) // si escojo 1, 2 o 3
{
cout<<endl<<"Escoja una opcion, si la opcion no esta disponible el programa finalizara"<<endl<<endl;
cout<<"1) Volver a calcular una matrizn";
cout<<"2) Salirn"<<endl;
cin>>opcion;
cout<<" "<<endl;
switch(opcion) //Verifica el valor de opcion
{
case 1: //Si es uno
system("cls"; //limpio la pantalla
main(); //Ejecuto nuevamente la función para calcular matrices
break;
case 2: //Si es dos
salida();
break; //El break sirve para que no ejecute las demas opciones
default: //Si es una opcion no disponible
cout<<" ";
salida(); //Ejecuto esta función para salir
}
} //aqui termina el if
}
int salida() // funcion para salir
{
cout<<endl<<"Trabajo realizado por:"<<endl;
cout<<" Carlos Arturo Marin"<<endl; // Quiten mi nombre y coloquen el de ustedes
cout<<endl<<"Programa finalizado..."<<endl;
system("PAUSE";
}
int suma() // funcion suma
{
int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
f1=0; c1=0; f2=0; c2=0;
while ((f1<1) || (f1>101))
{ cout<<"Ingrese el numero de filas de la matriz 1 (maximo 100 filas): ";
cin>>f1;
}
f1--; //Disminuyo en 1 el dato capturado porque el programa me cuenta el 0
while ((c1<1) || (c1>101))
{ cout<<"Ingrese el numero de columnas de la matriz 1 (maximo 100 columnas): "; cin>>c1; }
c1--;
while ((f2<1) || (f2>101))
{ cout<<endl<<"Ingrese el numero de filas de la matriz 2 (maximo 100 filas): "; cin>>f2; }
f2--;
while ((c2<1) || (c2>101))
{ cout<<"Ingrese el numero de columnas de la matriz 2 (maximo 100 columnas): "; cin>>c2; }
c2--;
r=operacion_sum (m1,m2,mr,f1,f2,c1,c2);
if (r==-1)
{cout<<endl<<"No se pudo realizar la operacion, la dimension de las matrices no coincide"<<endl;}
else
{
cout<<endl<<"Digite por filas los datos de la matriz 1"<<endl<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; }
}
cout<<endl<<"Digite por filas los datos de la matriz 2"<<endl<<endl;
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
{ cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; }
}
cout<<endl<<"El resultado de la suma de las matrices es:"<<endl<<endl;
r=operacion_sum (m1,m2,mr,f1,f2,c1,c2);
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
cout<<" "<<mr[f][c]<<" ";
cout<<endl;
}
}
}
int resta() // funcion resta
{
int n,f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
f1=0; c1=0; f2=0; c2=0;
while ((f1<1) || (f1>101))
{ cout<<"Ingrese el numero de filas de la matriz 1 (maximo 100 filas): ";
cin>>f1;
}
f1--; //Disminuyo en 1 el dato capturado porque el programa me cuenta el 0
while ((c1<1) || (c1>101))
{ cout<<"Ingrese el numero de columnas de la matriz 1 (maximo 100 columnas): "; cin>>c1; }
c1--;
while ((f2<1) || (f2>101))
{ cout<<endl<<"Ingrese el numero de filas de la matriz 2 (maximo 100 filas): "; cin>>f2; }
f2--;
while ((c2<1) || (c2>101))
{ cout<<"Ingrese el numero de columnas de la matriz 2 (maximo 100 columnas): "; cin>>c2; }
c2--;
r=operacion_res (m1,m2,mr,f1,f2,c1,c2);
if (r==-1)
{cout<<endl<<"No se pudo realizar la operacion, la dimension de las matrices no coincide"<<endl;}
else
{
cout<<endl<<"Digite por filas los datos de la matriz 1"<<endl<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; }
}
cout<<endl<<"Digite por filas los datos de la matriz 2"<<endl<<endl;
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
{ cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; }
}
cout<<endl<<"El resultado de la resta de las matrices es:"<<endl<<endl;
r=operacion_res (m1,m2,mr,f1,f2,c1,c2);
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
cout<<" "<<mr[f][c]<<" ";
cout<<endl;
}
}
}
int multiplicacion() //funcion multiplicacion
{
int f,c,r,f1,f2,c1,c2, m1[100][100], m2[100][100], mr[100][100];
f1=0; c1=0; f2=0; c2=0;
while ((f1<1) || (f1>101))
{ cout<<"Ingrese el numero de filas de la matriz 1 (maximo 100 filas): ";
cin>>f1;
}
f1--; //Disminuyo en 1 el dato capturado porque el programa me cuenta el 0
while ((c1<1) || (c1>101))
{ cout<<"Ingrese el numero de columnas de la matriz 1 (maximo 100 columnas): "; cin>>c1; }
c1--;
while ((f2<1) || (f2>101))
{ cout<<endl<<"Ingrese el numero de filas de la matriz 2 (maximo 100 filas): "; cin>>f2; }
f2--;
while ((c2<1) || (c2>101))
{ cout<<"Ingrese el numero de columnas de la matriz 2 (maximo 100 columnas): "; cin>>c2; }
c2--;
r=operacion_mul(m1,m2,mr,f1,f2,c1,c2);
if (r==-1)
{
cout<<endl<<"No se pudo realizar la operacion, la dimension de las matrices no coincide"<<endl;
}
else
{
cout<<endl<<"Digite por filas los datos de la matriz 1"<<endl<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ cout<<"m1["<<f<<"]["<<c<<"] = "; cin>>m1[f][c]; }
}
cout<<endl<<"Digite por filas los datos de la matriz 2"<<endl<<endl;
for (f=0; f<=f2; f++)
{
for (c=0; c<=c2; c++)
{ cout<<"m2["<<f<<"]["<<c<<"] = "; cin>>m2[f][c]; }
}
r=operacion_mul(m1,m2,mr,f1,f2,c1,c2); //Ejecuto la funcion que hace la operación de multiplicacion
{
cout<<endl<<"El resultado de la multiplicacion de las matrices es:"<<endl<<endl;
cout<<endl;
for (f=0; f<=f1; f++)
{
for (c=0; c<=c2; c++)
cout<<" "<<mr[f][c]<<" "; //Muestro la matriz resultante en la pantalla
cout<<endl;
}
}
}
}
int operacion_sum(int m1[][100], int m2[][100], int mr[][100], int f1, int f2,int c1, int c2)
{
int f,c;
if ((f1==f2) && (c1==c2)) //si si se pueden sumar/restar
{
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;}
}
int operacion_res(int m1[][100], int m2[][100], int mr[][100], int f1, int f2,int c1, int c2)
{
int f,c;
if ((f1==f2) && (c1==c2)) //si si se pueden sumar/restar
{
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;}
}
int operacion_mul(int m1[][100], int m2[][100], int mr[][100], int f1, int f2,int c1, int c2) //funcion operacion
{
int f,c,cc;
if (c1==f2) //si si se pueden multiplicar
{
for (cc=0; cc<=c2; cc++) //recorremos las columnas de B
{
for (f=0; f<=f1; f++)
{
for (c=0; c<=c1; c++)
{ mr[f][cc]+=m1[f][c]*m2[c][cc]; }
}
}
return 1;
}
else
{return -1;}
}