Cod sursa(job #2072630)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 21 noiembrie 2017 23:38:58
Problema A+B Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.63 kb
#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;
}