Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.91 KB | None | 0 0
  1. /*
  2.  * File:   main.cpp
  3.  * Author: mustaine
  4.  *
  5.  * Created on 10 novembre 2010, 16:25
  6.  */
  7.  
  8. #include <cstdlib>
  9. #include <list>
  10. #include <iostream>
  11. #include <pthread.h>
  12. using namespace std;
  13.  
  14. list< list<int> > matrix1;
  15. list< list<int> > matrix2;
  16. list< list<int> > resultado;
  17. int m,n;
  18. void *MultFila(void *Union)
  19. {
  20.     list < list<int> > ::iterator masteri;
  21.     list < list<int> >::iterator slavei;
  22.     list < list<int> >::iterator multiplee;
  23.     list <int> multiplier;
  24.     int cont=1;
  25.     for(masteri=matrix1.begin();cont<(int)Union;++masteri,cont++);
  26.     multiplier = (*masteri);
  27.     list<int>::iterator prueba;
  28.     list<int>::iterator fila;
  29.     list<int> filresultado;
  30.     for(int i =0;i<n;i++)
  31.     {
  32.  
  33.         int suma = 0;
  34.         multiplee = matrix2.begin();
  35.         for(prueba=multiplier.begin();prueba!=multiplier.end();++prueba,++multiplee)
  36.         {
  37.            
  38.             list<int> ::iterator num;
  39.             int contint = 0;
  40.             for(num=(*multiplee).begin();contint<i&&num!=(*multiplee).end();++num,contint++);
  41.             suma +=(*prueba)*(*num);
  42.         }
  43.         filresultado.push_back(suma);
  44.     }
  45.     list< list<int> >::iterator insertar;
  46.     cont=1;
  47.     for(insertar=resultado.begin();cont<(int)Union;++insertar,cont++);
  48.  
  49.     resultado.insert(insertar,filresultado);
  50.     resultado.erase(insertar);
  51.  
  52. }
  53. int printMatrix(string Mensaje,list< list <int> > toprint)
  54. {
  55.  
  56.     cout<<Mensaje<<endl;
  57.     list< list<int> > ::iterator imprimema;
  58.     for(imprimema=toprint.begin();imprimema!=toprint.end();++imprimema)
  59.     {
  60.         list<int> ::iterator imprimeme;
  61.         for(imprimeme=(*imprimema).begin();imprimeme!=(*imprimema).end();++imprimeme)
  62.             cout<<(*imprimeme)<<" ";
  63.         cout<<endl;
  64.     }
  65. }
  66. /*
  67.  *
  68.  */
  69. int main(int argc, char** argv) {
  70.  
  71.     int p;
  72.     cout<<"Dame el numero columnas matriz 1: ";
  73.     cin>> m;
  74.     cout<<"Dame el numero de filas de la matriz 1 (columnas matriz 2):";
  75.     cin>>p;
  76.     cout<<"Dame el numero de filas matriz 2: ";
  77.     cin>>n;
  78.     for (int i=0;i<m;i++)
  79.     {
  80.         list<int> columna;
  81.         for (int j=0;j<p;j++)
  82.             columna.push_back(rand()%10);
  83.         matrix1.push_back(columna);
  84.     }
  85.     for(int i=0;i<p;i++)
  86.     {
  87.         list<int> columna;
  88.         for(int j=0;j<n;j++)
  89.             columna.push_back(rand()%10);
  90.         matrix2.push_back(columna);
  91.     }
  92.     printMatrix("Matriz 1",matrix1);
  93.     printMatrix("Matriz 2", matrix2);
  94.     for(int i = 0;i<m;i++)
  95.     {
  96.         list<int> filaarr;
  97.         resultado.push_back(filaarr);
  98.     }
  99.  
  100.     pthread_t threads[m];
  101.     int rc, t;
  102.     for(t=0;t<m;t++){
  103.         rc = pthread_create(&threads[t], NULL, MultFila, (void *)(t+1));
  104.  
  105.         if (rc){
  106.             cout<<"Error al crear el subproceso: "<< rc<<endl;
  107.             exit(-1);
  108.         }
  109.     }
  110.         for(t=0;t<m;t++)
  111.         {
  112.             pthread_join(threads[t],NULL);
  113.         }
  114.         printMatrix("Resultado",resultado);
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement