Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
hmSantos

Calcular diagonais de uma matriz usando Threads

Recommended Posts

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

Compartilhar este post


Link para o post
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?

Editado por isrnick

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×