Pagini recente » Cod sursa (job #284902) | Cod sursa (job #3184743) | Cod sursa (job #1594311) | Cod sursa (job #1666545) | Cod sursa (job #2072630)
#include <sys/types.h>
#include<string.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/mman.h>
#include<fcntl.h>
#include<sys/stat.h>
int n,m,p;
int **a,**b,**c;
void* calculare(void *v)
{
int *vect=(int*)v;
int linie=vect[0];
int coloana=vect[1];
int produs=0;
int i=0,j=0;
for(i=0;i<m;i++)
{
for(j=0;j<p;j++)
produs+=a[linie][i]*b[j][coloana];
}
int *ret=(int*)malloc(sizeof(int));
*ret=produs;
return ret;
}
int main()
{
printf("Prima dimensiune: ");
scanf("%d",&n);
printf("A doua dimensiune: ");
scanf("%d",&m);
printf("A treia dimensiune: ");
scanf("%d",&p);
printf("Introduceti prima matrice: ");
a=(int**)malloc(n*sizeof(int*));
int i=0;
int j=0;
for(i=0;i<n;i++)
{
a[i]=(int*)malloc(m*sizeof(int*));
int j=0;
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
}
printf("Introduceti a doua matrice: ");
b=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
{
b[i]=(int*)malloc(p*sizeof(int*));
int j=0;
for(j=0;j<p;j++)
scanf("%d",&b[i][j]);
}
c=(int**)malloc(n*sizeof(int*));
pthread_t thr[n][p];
for(i=0;i<n;i++)
{
c[i]=(int*)malloc(p*sizeof(int));
for(j=0;j<p;j++)
{
int *v=(int*)malloc(2*sizeof(int));
v[0]=i;
v[1]=j;
if(pthread_create(&thr[i][j],NULL,calculare,v))
{
perror("EROARE LA CREARE THREAD!!!");
return errno;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<p;j++)
{
void *result;
if(pthread_join(thr[i][j],&result))
{
perror(NULL);
return errno;
}
c[i][j]=*(int*)result;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<p;j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}