Paloma 0 Denunciar post Postado Março 14, 2006 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
Homero C. de Almeida 0 Denunciar post Postado Março 14, 2006 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
Paloma 0 Denunciar post Postado Março 14, 2006 Ok, vou ver se agora dá certo. Obrigada http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites
Paloma 0 Denunciar post Postado Março 14, 2006 você poderia me falar sobre esse lixo aleatório o que seria? Compartilhar este post Link para o post Compartilhar em outros sites
Homero C. de Almeida 0 Denunciar post Postado Março 15, 2006 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
Paloma 0 Denunciar post Postado Março 15, 2006 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
Homero C. de Almeida 0 Denunciar post Postado Março 15, 2006 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
Paloma 0 Denunciar post Postado Março 15, 2006 http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Agora sim deu certo, Obrigada. http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites