Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paloma

Soma Matriz/Diagonal Principal

Recommended Posts

Oi pessoal, fiz esse exercício de matriz, que executa o seguinte:

 

- A soma da diagonal principal

- A soma de todos os elementos da matriz

 

Só que a soma da diagonal ñ está correta e eu ñ encontro o erro, será que alguém pode me dar uma ajuda.

 

 

 

#include<stdio.h>#include<stdlib.h>int main(){  int Mat[10][10],ordem,lin,col,soma,sm;  //ORDEM DA MATRIZ  do  {   printf("Entre com a ordem da matriz:");   scanf("%d",&ordem);  }while(ordem<2||ordem>10);  printf("\n\n");  //PREENCHENDO A MATRIZ  for(lin=0;lin<ordem;lin++)   for(col=0;col<ordem;col++)   {   printf("Mat[%d][%d]:",lin+1,col+1);   scanf("%d",&Mat[lin][col]);   }   printf("\n\n");   //SOMANDO OS ELEMENTOS DA DIAGONAL PRINCIPAL   for(lin=0;lin<ordem;lin++)   {	 soma+=Mat[lin][lin];   }   //SOMANDO OS TODOS OS ELEMENTOS   for(lin=0;lin<ordem;lin++)	for(col=0;col<ordem;col++)	{	 sm+=Mat[lin][col];	}	//EXIBINDO OS MATRIZ	printf("Exibindo a Matriz");	for(lin=0;lin<ordem;lin++)	 for(col=0;col<ordem;col++)	 {	   printf("\n%d",Mat[lin][col]);	 }	 printf("\n\n");	 //EXIBINO SOMA ELEMENTOS DIAGONAL PRINCIPAL	  printf("Soma dos elementos da diagonal principal: ");	  for(lin=0;lin<ordem;lin++)	   for(col=0;col<ordem;col++)	   {		 printf("%d",soma);	   }		printf("\n\n");	 //EIXIBINDO SOMA DE TODOS OS ELEMENTOS	 printf("Soma de todos os elementos da matriz: ");	 for(lin=0;lin<ordem;lin++)	  for(col=0;col<ordem;col++)	  {		printf("%d",sm);	  }	  printf("\n\n");  system("pause");  return(0);}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A soma da diagonal principal dá errado porque você esqueceu de iniciar a variável soma com 0, fazendo com que um lixo aleatório seja adicionado ao valor correto.

Tudo que precisa fazer é adicionar a inicialização da variável depois da declaração.

int Mat[10][10],ordem,lin,col, soma,sm;soma = sm = 0;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem... é o seguinte...Quando você declara uma variável o que o computador faz é assinalar uma posição na memória para ela. Assim, toda vez que você faz referencia a uma variável x, o computador vai na posição de memória onde ele guarda x e pega o valor contido nessa posição de memória.Assim, quando você declara "int x", o computador apenas fala "ok, a posição de memória 340578272 (por exemplo) significa x". Só que antes do seu programa utilizar essa posição de memória outro programa já pode tê-lo utilizado. Como o computador nunca "zera" a memória, qualquer valor pode ter sido guardado lá dentro. Isso é o que nós chamamos de lixo.Logo depois se você usa, por exemplo, o código "x += 3", que significa "pega o conteúdo de x, adicione 3 e guarde em x", o computador vai pegar o que estiver naquela posição de memória e guardar novamente em x. Note que x NUNCA foi zerada, de forma que o lixo ainda está lá.É por isso que é uma boa prática de programação sempre inicializar as variáveis logo na sua declaração, escrevendo por exemplo "int x=0;". Um bom compilador C teria, no mínimo, gerado um warning sobre você utilizar a variável "soma" antes de inicializá-la no programa que você postou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou preenchendo uma matriz 2x2 (exemplo) 1 11 1No caso a soma da diagonal principal seria 2, mas o resultado exibido é 2222 e a soma de toda a matriz seria 4, mas o resultado obtido é 4444.Eu pensei que fosse por conta do for, mas não é. <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz... acabei de ver...a os valores estão sendo impressos 4 vezes porque você colocou o printf("%d", soma); (por exemplo), dentro de um for que percorre os elementos da matriz!Isso não serve pra nada, apenas vai imprimir o resultado um numero de vezes igual ao numero de elementos na matriz. Apenas arranque aqueles 2 for's de lá e deixe só o printf.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.