Ir ao conteúdo
  • Cadastre-se

Somar diagonais de uma matriz


Posts recomendados

Olá, pessoal! Sou iniciante na linguagem C e preciso de uma ajuda.

Preciso fazer um programa que some as diagonais de uma matriz. 

Conforme o exemplo em anexo

 

Mas estou tendo muita dificuldade. Segue código:

 

#define M 4

#define N 3

int main(){ int i, j, soma=0; int mat[M][N]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}, result[M+N-1];

 

for(i=0; i<M+N-1; i++){//deixar todos valores do vetor iguais a zero

result=0;}

 

int a, b, k=0, aux;//auxiliares

 

for(i=M-1; i>=0; i--){for(j=N-1; j>=0; j--){

result[k]=mat[j];//posição 0 do vetor recebe posição 4x3 da matriz;

a=i;

b=j;while(a>=0&& b<N && b>=0){//verificar se linha>=0, coluna<N e >=0

a--;//decrementa linha

b++;//acrescenta coluna

result[k]+=mat[a];//valor da posição 0 do vetor soma com o proximo valo da diagonal superior direita}

k++;//avança para proxima posição do vetor*/}}

 

for(i=0; i<M; i++){for(j=0; j<N; j++){

printf("\t%d ", mat[j]);}

printf("\n");}

 

printf("\n");

 

for(i=0; i<M+N-1; i++){

printf("%d ", result);}

}

 

A principio estou tentando fazer só a soma das diagonais pra depois usar as threads para realizar os processos.

Alguém poderia me ajudar? Agradeço desde já.

ex.png

Link para o comentário
Compartilhar em outros sites

Vamos ver as casas do seu exemplo 4 x 3:

As coordenadas das linhas e colunas na matriz serão:

00 01 02
10 11 12
20 21 22
30 31 32

 

Então teremos que as coordenadas das 6 diagonais serão respectivamente:

00
10, 01
20, 11, 02
30, 21, 12
31, 22
32

 

Agora o que precisa observar é que a soma das coordenadas sempre será igual a posição no vetor das somas:

0 = 0 + 0
1 = 1 + 0 = 0 + 1
2 = 2 + 0 = 1 + 1 = 0 + 2
3 = 3 + 0 = 2 + 1 = 1 + 2
4 = 3 + 1 = 2 + 2
5 = 3 + 2

 

Então tendo as coordenadas da linha (i) e da coluna (j) de um valor da matriz, você sabe em qual posição do vetor das somas das diagonais esse valor deve ser somado.

 

Então a lógica fica assim:

for (i = 0; i < M; i++) {
    for (= 0;< N; j++) {
       result[ i + j ] += mat[i][j];
    }
}

 

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

  • mês depois...
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...