Ir ao conteúdo
  • Cadastre-se

Calcular diagonais de uma matriz usando Threads


hmSantos

Posts recomendados

Preciso de uma ajuda enorme. Preciso fazer um programa em C no qual calcule as diagonais de uma matriz usando Threads conforme o enunciados:

RWMLk.png

 

Conforme me orientaram, eu devo passar o valor da diagonal e do salto(mudança de diagonal) como parâmetros, mas não sei o que fazer com esses valores.

Segue o código que eu consegui fazer até agora (esta incompleto pois não sei como proceder na função para somar as diagonais):

 

OBS: tirei as funções que geram o arquivo com os valores da matriz e a função que atribui esses valores à matriz para o código ficar mais limpo e fácil de entender.

 

typedef struct{ 
  int diag=0; 
  int salto; 
}ST;

ST v;

struct param *arg;

void *somarMatriz(void *args){ 
  ST * in = (ST *) args;

int x=0, y=0;

result = (float *) malloc((l+c-1)*sizeof(float));

x=0;
for(i=; i<l+c-1; i++){
    result[i]=0;
}

for(i=l-1; i>=0; i--){
    x = y;
    for(j=0; j<c; j++){
        result[x] += mat[i][j];
        x++;
    }
    y++;
}
}

int main (){

printf("Entre com o numero de linhas da matriz: \n");
scanf("%d", &l);

printf("Entre com o numero de colunas da matriz: \n");
scanf("%d", &c);

printf("Entre com o quantidade de Threads desejada:\n");
scanf("%d", &arg.salto);

gerarArquivo(l, c);
gerarMatriz(l, c);

pthread_t threads[T];
pthread_attr_t attr;
int rc;
long t;
void *status;

pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

for(t=0; t<T; t++){
    rc = pthread_create(&threads[t], NULL, somarMatriz, (void*)&v);
    if (rc){
        printf("ERRO");
        exit(-1);
    }
}

pthread_exit((void *)NULL);

printf("\n\n");

printf("Resultados:\n");
for(i=0; i<l+c-1; i++){
    printf("%d\t", result[i]);
}

printf("\n");

}

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Não sei o suficiente sobre multithreading, então acho que não vou poder te ajudar muito...

 

Eu postei uma explicação para soma de diagonais principais da matriz nesse tópico:

Mas meu método supõem fazer as somas sequencialmente de cada valor da matriz, percorrendo a matriz...

 

Pelo que entendi no seu programa cada thread deve encontrar todos os valores da matriz que pertencem a diagonal escolhida e somá-los. Então imagino que a principal meta é achar a lógica pra localizar as posições da matriz que pertencem a uma dada diagonal...

 

Mas até agora não consegui enxergar a lógica, talvez tenha algo a ver com o tal salto que você mencionou? Não entendi o que seria esse salto...

E o que seria o "valor da diagonal"? O número da diagonal? Ou um valor da matriz que pertence a diagonal?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...