sábado, 29 de junio de 2013

Producto de matrices en C++

Si usted recién está empezando a aprender C++, esta es una muy buena oportunidad para continuar con su aprendizaje.
En este tema tratamos el producto de matrices en C++.
No consiste simplemente multiplicar cada elemento [i][j]de una matriz A por un elemento de una matriz B de las mismas posiciones.
El producto de matrices tiene cierta peculiaridad, a diferencia de la suma y resta entre matrices.

A continuación presentamos el código y además un video explicativo que detalla paso a paso la elaboración del programa:

/*
A con k filas y m columnas,
B con m filas y n columnas.
C es la matriz que resulta del producto AB.
C presenta k filas y n columnas.

C[i][j] = A[i][0] * B[0][j] + A[i][1] * B[1][j] + A[i][2] * B[2][j]
+ ... + A[i][m-1] * B[m-1][j]
*/

#include <iostream>
using namespace std;

int main()
{
    int A[20][20], B[20][20], C[20][20];
    int k, m, n;

    cout<<"Lectura de matriz A."<<endl;
    cout<<"Filas de A: "; cin>>k;
    cout<<"Columnas de A: "; cin>>m;
    cout<<endl;
    for(int i=0; i<k; ++i)
        for(int j=0; j<m; ++j)
        {
            cout<<"Ingrese valor para A["<<i<<"]["<<j<<"]: ";
            cin>>A[i][j];
        }

    cout<<"Lectura de matriz B."<<endl;
    cout<<"Filas de B: "<<m<<" (ya esta definido y es necesario)."<<endl;
    cout<<"Columnas de B: "; cin>>n;
    cout<<endl;
    for(int i=0; i<m; ++i)
        for(int j=0; j<n; ++j)
        {
            cout<<"Ingrese valor para B["<<i<<"]["<<j<<"]: ";
            cin>>B[i][j];
        }

    // Inicializamos la matriz C.
    for(int i=0; i<k; ++i)
        for(int j=0; j<n; ++j)
            C[i][j] = 0;

    // Generamos la matriz C.
    for(int i=0; i<k; ++i)
        for(int j=0; j<n; ++j)
            for(int z=0; z<m; ++z)
                C[i][j] += A[i][z] * B[z][j];

    cout<<"Matriz A: ";
    for(int i=0; i<k; ++i)
    {
        for(int j=0; j<m; ++j)
        {
            cout<<A[i][j]<<" ";
        }
        cout<<endl;
    }

    cout<<"Matriz B: ";
    for(int i=0; i<m; ++i)
    {
        for(int j=0; j<n; ++j)
        {
            cout<<B[i][j]<<" ";
        }
        cout<<endl;
    }

    cout<<"Matriz C: ";
    for(int i=0; i<k; ++i)
    {
        for(int j=0; j<n; ++j)
        {
            cout<<C[i][j]<<" ";
        }
        cout<<endl;
    }

    return 0;
}

Para ver el video visite el siguiente enlace, en Youtube:
http://www.youtube.com/watch?v=ZgWcUWYADLE

11 comentarios:

  1. Buenas tengo un examen de programacion en visual studio c++ aplicacion de consola y necesito hacer este ejercicio!

    escribir un programa que lea de teclado y almacene el nombre, apellido, edad, cargo y sueldo basico de 3 empleados y calcule el sueldo final de cada uno en base a lo siguiente. si el sueldo es menor a 2.000bsf no paga impuesto . si el sueldo es mayor a 2.000bsf debe pagar un impuesto de 25% del sueldo basico ademas a todos los empleados s les asigna un bono nocturno de equivalente al 30% de su sueldo basico

    ResponderEliminar
    Respuestas
    1. #include
      #include

      using namespace std;
      int main(){
      char nombre1[10],nombre2[10],nombre3[10], apellido1[10], apellido2[10], apellido3[10],cargo1[10],cargo2[10],cargo3[10];
      int edad1, edad2,edad3;
      float sueldo1,sueldo2,sueldo3,cal1=0,cal2=0,cal3=0;

      //empleado 1
      cout<<"\tEMPLEADO 1\n"<>nombre1;
      cout<<"ingrese apellido: "; cin>>apellido1;
      cout<<"ingrese edad: "; cin>>edad1;
      cout<<"ingrese cargo: "; cin>>cargo1;
      cout<<"ingrese sueldo basico: "; cin>>sueldo1;

      if(sueldo1>2000){
      cal1=sueldo1-(sueldo1 * 0.25);
      }
      cal1=cal1+(sueldo1 * 0.30);

      //empleado 2
      cout<<"\n\tEMPLEADO 2\n"<>nombre2;
      cout<<"ingrese apellido: "; cin>>apellido2;
      cout<<"ingrese edad: "; cin>>edad2;
      cout<<"ingrese cargo: "; cin>>cargo2;
      cout<<"ingrese sueldo basico: "; cin>>sueldo2;

      if(sueldo2>2000){
      cal2=sueldo2-(sueldo2 * 0.25);
      }
      cal2=cal2+(sueldo2 * 0.30);

      //empleado 3
      cout<<"\n\tEMPLEADO 3\n"<>nombre3;
      cout<<"ingrese apellido: "; cin>>apellido3;
      cout<<"ingrese edad: "; cin>>edad3;
      cout<<"ingrese cargo: "; cin>>cargo3;
      cout<<"ingrese sueldo basico: "; cin>>sueldo3;

      if(sueldo3>2000){
      cal3=sueldo3-(sueldo3 * 0.25);
      }
      cal3=cal3+(sueldo3 * 0.30);

      cout<<"\nSueldo final de Empleado 1: "<<cal1<<endl;
      cout<<"Sueldo final de Empleado 2: "<<cal2<<endl;
      cout<<"Sueldo final de Empleado 3: "<<cal3<<endl;
      cout<<endl;

      system("pause");
      return 0;
      }

      Eliminar
    2. Marcos hola, queria saber si podías ayudarme con mis exámenes de programación, contáctame a mi email: lossddems@gmail.com , asi nos ponemos de acuerdo en cuanto tendría que pagarte

      Eliminar
  2. Hola me podrias eplicar este problema. tengo que entregarlo mañana y no se como.
    Hola que tal, estoy en una clase de programación y estamos usando el dev c++. Nos encargaron el siguiente problema, pero no se como empezarlos. alguien me podria explicar. MUUCHAS GRACIAS!

    Elabore un programa donde el usuario define el tamaño de una matriz A y el tamaño de una matriz B, las cuales serán
    multiplicadas y generaran una matriz C resultante. Deberá tener en cuenta las siguientes reglas:
    - Tamaño máximo de las matrices 10x10 de no cumplir con esto indique error y vuélvalo a solicitar hasta que cumpla
    con un tamaño correcto
    - Recuerde que para que una multiplicación de matrices pueda efectuarse el número de columnas de la matriz A
    debe ser igual al número de renglones de la matriz B, es decir, Matriz A de MxN y Matriz B de PxQ N debe ser igual
    a P para poder multiplicarse, así que verifíquelo primero y si no cumple con esto indique el error y vuelva a solicitar
    ingresar el tamaño de las matrices. La matriz resultante quedará de tamaño MxQ. Ejemplo:
    Se puede hacer la multiplicación porque el número de columnas de A es igual al número de renglones de B
    Matriz A 3 x 2 Matriz B 2 x 2 Matriz C 3 x 2
    1 2 2 3 1x2 + 1x1 2x3 + 2x2
    5 1 1 2 5x2 + 5x1 1x3 + 1x2
    1 4 1x2 + 1x1 4x3 + 4x2

    ResponderEliminar
  3. hola muy bueno recomendado
    nose si podrias hacer uno de hallar la inversa de la matriz
    te lo agradeceria mucho



    ResponderEliminar
  4. excelente tu aporte, me ha servido mucho, gracias!

    ResponderEliminar
  5. Me podrian ayudar con esto: de forma aleatoria la información contenida en una matriz de M x 5, donde M representa las filas que indican el número de sucursales y 5 representa las columnas que indican el número de marcas de autos; la información de cada celda de la matriz corresponde a la cantidad existente de una marca de auto en una sucursal; además un vector de 5 elementos con el nombre y el precio de venta de cada marca de autos.
    El programa debe calcular y mostrar en pantalla lo siguiente:
    • Nombre y valor total en pesos de cada marca de auto por sucursal.
    • Valor en pesos de todas las marcas de auto por sucursal.
    • Valor Total en pesos del Inventario.
    • Indicar nombre de Sucursal y Marca de Auto con stock cero.
    El programa debe asegurarse de liberar la memoria que no se esté utilizando en determinado momento de la ejecución.

    ResponderEliminar
  6. Buenas tengo un examen de programacion en visual studio c++ aplicacion de consola y necesito hacer este ejercicio!

    una programa de nombre del Alumno y el número de teléfono del Alumno y la identidad

    ResponderEliminar
  7. una programa de nombre del Alumno y el número de teléfono del Alumno y la identidad

    ResponderEliminar
  8. hola,me podrias ayudar con lo siguiente:

    #include
    #include
    #include
    #include
    using namespace std;
    //the function main start the program ejecution.
    int main()
    {


    int n;
    cout << "ingrese el número de elementos en el arreglo:" << endl;
    cin>> n;
    float test[n];
    for(int c=0;c>test[c];
    }
    cout << "Gracias, bye 1" << " " << test[0] <<endl;

    test[0]=100;
    cout << "Gracias, bye 2" << " " << test[0] << " " <<test[0]*test[2]
    <<endl;
    return 0;
    } //end main



    Escriba un algoritmo en el cual a través del uso del arreglo 1d solicite al usuario un número determinado de elementos y finalmente el algoritmo seleccione e indique al usuario cuál es el número mayor que se introdujo. Envíe su evidencia en formato, el algoritmo que te puse seria el 1d

    ResponderEliminar
  9. Hola podrias ayudarme, tengo que hacer un programa para un cambio de base de matrices

    ResponderEliminar