Ir para conteúdo

Arquivado

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

MATEUS_ROCHA

Matriz em C++

Recommended Posts

Pessoal preciso fazer um programa em c++....carregar uma matriz e somar os elementos da diagonal superior e inferior....e compara qual soma é maior.....alguem pode me ajudar ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos pensar. Não lembro toda a sintaxe de C, mas montamos primeiro a lógica.

A matriz deve ser algo como {{1,2,3},{4,5,6},{7,8,9}}, porque pelo que você disse, me parece ser bidimensional, certo?

Vamos fazer algo só para matrizes quadradas. Tanto a "largura" quanto a "altura" vão ter o mesmo número de elementos.

 

Então, não vou resolver teu problema, mas espero te dar uma idéia do que eu penso. Vamos imprimir os valores das diagonais, você se vira com a soma. Vamos primeiro declarar:

 

int matriz[3][3] = {
						  {1,2,3},
						  {4,5,6},
						  {7,8,9}
						   };

Ok, é sempre bom testar se tá tudo em ordem. o elemento da matriz na coordenada 1,2 precisa ser o número 6, correto?

Então vamos lá:

 

int main(){
//declara a matriz
int matriz[3][3] = {
						  {1,2,3},
						  {4,5,6},
						  {7,8,9}
						   };
//prova real, deve imprimir o valor 6
printf("O elemento 1,2 e' %d\n\n",matriz[1][2]);

	return 0;
}

Pronto. no meu compilador funfa certinho. Daqui pra frente é só selecionar os itens certos.

Vamos fazer dois laços em for e imprimir todos os valores das diagonais.

Primeiro, você deve concordar que a primeira diagonal é sempre matriz[N][N], certo? Sempre a coordenada horizontal é igual à vertical.

Então imprimamos esta diagonal pq é mais fácil:

 

int main(){
int matriz[3][3] = {{1,2,3},
					{4,5,6},
					{7,8,9}};
//printf("O elemento 1,2 e' %d\n\n",matriz[1][2]);
int i;
printf("Diagonal 1:\n\n");
for (i=0; i<3; i++){
	printf("-> %d\n",matriz[i][i]);
}
	return 0;
}

E a outra diagonal?

Bom, se fossem 4x4, os valores seriam:

M[0,3]

M[1,2]

M[2,1]

M[3,0]

A primeira coordenada é inversamente proporcional à segunda.

A primeira coordenada podemos usar o contador do laço, a variável i. E a segunda coordenada? Consegue achar uma lógica beem simpels pra resolver a charada?

Fácil: segunda coordenada da matriz 4x4 = 3-i.

Veja: 3-0 = 3; 3-1 = 2; 3-2 = 1; 3-3 = 0.

 

Portanto para uma matriz 3x3 basta baixar o número para 2. Isso só ocorre porque o primeiro elemento tem índice 0.

Vamos lá:

 

int main(){

int matriz[3][3] = {{1,2,3},
					{4,5,6},
					{7,8,9}};

int i;
printf("Diagonal 1:\n\n");

for (i=0; i<3; i++){
	printf("-> %d\n",matriz[i][i]);
}

printf("\n\nDiagonal 2:\n\n");

for (i=0; i<3; i++){
	printf("-> %d\n",matriz[i][2-i]);
}
	return 0;
}

Agora, pra fazer o teste final, aumente bastante a matriz, faça uma 7x7!

Aproveite também pra otimizar. Os laços são iguais, não tem porque fazer duas vezes na hora da soma. Aqui eu fiz 2 pra imprimir separadamente sem ficar declarando variáveis, só pra você entender a estrutura. Mas um laço apenas é o suficiente. você também pode usar uma variável de valor fixo pra determinar o tamanho das matrizes, fazer a contagem e imprimir o resultado da segunda diagonal.

 

int main(){
int matriz[7][7] = {{1,2,3,8,9,3,8},
					{4,5,6,2,6,2,6},
					{5,2,8,3,7,5,2},
					{5,3,8,3,2,6,8},
					{4,5,6,2,6,2,6},
					{9,3,4,2,1,3,6},
					{7,8,9,1,2,5,2}};

int i;
printf("Diagonal 1:\n\n");
for (i=0; i<7; i++){
	printf("-> %d\n",matriz[i][i]);
}
printf("\n\nDiagonal 2:\n\n");
for (i=0; i<7; i++){
	printf("-> %d\n",matriz[i][6-i]);
}
	return 0;
}

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.