Ir para conteúdo

POWERED BY:

Arquivado

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

ascfla

[Resolvido]  com algoritmo de diagonal principal e secundar

Recommended Posts

bom.. é o seguinte como sou novato na programação e no fórum.. andei pesquisando alguns códigos mesmo assim ainda fiquei com dúvidas pois , da maneira como um outro usuário postou o contador que aculuma a soma da diagonal principal e secundaria não tá funcionando no meu código..

se alguem puder ajudar .. agradeço ....

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <string.h>
main()
{
int lin,col, tab,soma;
int diagP,diagS;
int mat[4][4];
lin=0;
col=0;
diagP = 0;
diagS = 0;
for (lin=0; lin<=3; lin++)
{
for (col=0; col<=3;col++)
{
printf("Digite ELEMENTO da linha %d, coluna %d da matriz: ",lin+1,col+1);
// aqui no scanf preenchemos a matriz
scanf("%d", &mat[lin][col]);
}
}
//Imprimindo a matriz
printf("Matriz\n");
for (lin=0;lin<=3;lin++)
{
for (col=0;col<=3;col++)
printf("%d\t",mat[lin][col]);
printf("\n\n");

}
// Imprimindo a diagonal principal
printf("\n\nDiagonal principal\n\n");
for (lin=0; lin<=3;lin++)
{
printf("%d\n",mat[lin][lin]);
for (tab=1;tab<=lin+1;tab++)
printf("\t");
}

// o erro ta ocorrendo nesse trecho do código .. no acumulador da soma.. 

for(lin=0;lin<3;lin++)
	{
	   for(col=0;col<3;col++)
		{
			if(lin == col)
			{
				diagP = diagP + mat[lin][col];
			}
			else if(lin + 1 == 3 - (col + 1) + 1)
			{
				printf("\n%d",lin);
				diagS = diagS + mat[lin][col];
				printf("\n%d",diagS);
			}
		}
	}						 
	
	printf("\n Soma da Diagonal principal: %d\n" ,diagP);
	printf("\n Soma da Diagonal secundaria: %d\n",diagS);

printf("\n\n");
system("pause");

return 0;
}

 

ah .. outra dúvida é .. e se eu quizer mostrar uma soma de uma determinada linha + coluna por exemplo , mostrar a soma dos elementos da linha 4 e da coluna 2 ... como ficaria ?

 

desde já agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom para localizarmos + facil o erro faça loops diferentes para achar as somas!

 

e sua duvida de somar os elementos da linha 4 coluna 2? como assim, soh contem um elemento ai!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom .. o que tá acontecendo é que a soma da diagonal principal até q está dando certo porém não estou conseguindo fazer o mesmo pra secundária

e no caso dos elementos é pq na função os elementos serão inseridos por parâmetro daí, que após rodar o programa a dificuldade está em somar uma determinada linha com outra coluna específica de elementos diferentes...

to batendo cabeça aki mas to pegando gosto.. pela linguagem ...

 

se puder ajudar..agradeço..

 

[ ] `s

Compartilhar este post


Link para o post
Compartilhar em outros sites

é assim msm q acha a secundaria:

else if(lin + 1 == 3 - (col + 1) + 1)
			{
				printf("\n%d",lin);
				diagS = diagS + mat[lin][col];
				printf("\n%d",diagS);
			}
??

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois é...quitZAUMMM

 

essa lógica do if.. que tá pegando.. fiz basendo num código de pascal de um amigo.. mas não lembro se era essa exatamente a sintaxe..

Compartilhar este post


Link para o post
Compartilhar em outros sites

vow dar um 'find' na net para ver c vejo algo e retorno c achar!

 

[]'s

 

--edit--

 

achei algo no forum de Lógica assim:

A diagonal secundária é identificada pela soma dos índices i + j resultando em 6 no caso da matriz 5x5.

 

Tente usar essa informacão para fazer o algoritmo.

 

se (i+j) > 6 faca // faca o teste para achar o menor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ainda .. não rolou nesse ultimo esquema q você postou aí.. Quit...

diag principal ta somando beleza. mas a secundária ainda.. nao ..

olha como tá ate agora.. :

 

CODE

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <string.h>

 

 

int main(void )

{

int M[3][3];

int x,y,diagP,diagS,tab;

diagP = 0;

diagS = 0;

{

printf("Digite ELEMENTO da:\n");

for(x=0;x<3;x++){

for(y=0;y<3;y++)

{

{

 

printf("linha %d, coluna %d da matriz: ",x+1,y+1);

scanf("%d",&M[x][y]);

}

}

}

 

 

//Imprimindo a matriz

printf("Matriz\n");

for(x=0;x<3;x++)

{

for(y=0;y<3;y++)

{

printf("matriz: M[%d][%d] = %d",x,y,M[x][y]);

printf("%d\t",M[x][y]);

printf("\n\n");

 

}

}

 

for(x=0;x<3;x++)

{

for(y=0;y<3;y++)

{

if(x == y)

{

diagP = diagP + M[x][y];

}

else if((x+y)==4) // para a matriz 3X3 teria q ser essa a lógica.. Linha+coluna =4 para diag secundária ???

{

printf("\n%d",x);

diagS = diagS + M[x][y];

printf("\n%d",diagS);

}

}

}

printf("\n Soma da Diagonal principal: %d\n" ,diagP);

printf("\n Soma da Diagonal secundaria: %d\n",diagS);

printf("\n\n");

system("pause");

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

a sua lógica para calcular a Diagonal Secundária está errada.

if(i + j == 2) //Para uma matriz 3x3, o correto é 2
Faça no papel uma matriz 3x3 e veja o que existe de incomum na Diagonal Secundária.

Compartilhar este post


Link para o post
Compartilhar em outros sites

po amigo.. ainda tem algo errado.. né possível..

bom ..pra mim.. usando como exemplo a matriz :

1 2 3

1 2 3

3 2 1

a soma da principal é 4.. isso o código ta certo , já na secundária que a soma é 8..

nao funciona de jeito nenhum...

e como o amigo groove disse.. achei estranho.. como posso somar os índices da linha 3 coluna 1 e a soma ser igual a 2 ? não seria 4 ? para a diagonal secundária ???

 

bom . ate agora ta assim .. :

 

CODE

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <string.h>

 

int main(void )

{

int M[3][3];

int x,y,somaL,somaC,diagP,diagS,tab;

diagP = 0;

diagS = 0;

{

printf("Digite ELEMENTO da:\n");

for(x=0;x<3;x++){

for(y=0;y<3;y++)

{

{

printf("linha %d, coluna %d da matriz: ",x+1,y+1);

scanf("%d",&M[x][y]);

}

}

}

 

for(x=0;x<3;x++)

{

for(y=0;y<3;y++)

{

if(x == y)

{

diagP = diagP + M[x][y];

}

else if(x+y==2)

diagS = diagS + M[x][y];

 

}

}

}

printf("\n Soma da Diagonal principal: %d\n" ,diagP);

printf("\n Soma da Diagonal secundaria: %d\n",diagS);

printf("\n\n");

system("pause");

}

 

ajuda aí galera..

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, indente esse código pls, seu erro está no if

se você faz else if, quando a posição 2-2 é adicionada no diagP, ela nao vai ser adicionada mais no diagS...

pra você intender, faça como eu te falei velho, desenhe num papel a matriz e marque as posições do lado

 

for(x=0;x<3;x++)
	{
		for(y=0;y<3;y++)
		{
			if(x == y)
			{
				diagP = diagP + M[x][y];
			}
			if(x + y == 2)
			{
				diagS = diagS + M[x][y];
			}
		}
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

aheuahae é mesmo, o certo é fazer um de cada vez, pra não se perder tudo :D

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.