Ir para conteúdo

Arquivado

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

Luthien

Quadrado mágico

Recommended Posts

Tenho q fazer um programa q fale se a matriz é ou nao cubo magico, nesse meu codigo q ta uma bagunça horrorosa, na hora de executar, só imprime a soma dos numeros das linhas e colunas, nao imprime a soma da diagonal principal nem da secundaria...peço desculpas se meu codigo esta confuso mas preciso mt de ajuda, tenho 40 exercicios pra fazer e n consigo fazer nenhum =/

#include <stdio.h>

int main ()
{
int l,c,i,j,somapadrao = 0, somal = 0, somac = 0, somadp = 0, somadsec = 0, verdadeiro = 1;

do
{
printf("Informe o numero de linhas da matriz\n");
scanf("%d",&l);

printf("Informe o numero de colunas da matriz\n");
scanf("%d",&c);

if(l!=c)
{
printf("Erro: o numero de linhas deve ser igual ao numero de colunas, digite novamente.\n\n");
}

}
while (l!=c);

int mat[l][c];

if(l==c)
{
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("Informe o numero da posicao [%d][%d] da matriz\n",i + 1,j + 1);
scanf("%d",&mat[i][j]);
}
}

}
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)//definindo um valor para que a matriz seja um quadrado magico
{
somapadrao += mat[0][j];//vai somar os valores de cada linha
}

printf("Soma dos valores da %d linha: %d\n",i+1,somapadrao);

somapadrao = 0;

}

for(j=0; j<c; j++)
{
for(i=0; i<l; i++)
{
somac += mat[i][0];
}

if(somac!= somapadrao)
{
verdadeiro = 0;
}

printf("Soma dos valores da %d coluna %d\n",j+1,somac);
somac = 0;
}

for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
if(i==j)
{
somadp += mat[i][j];
}
}
if(somadp!= somapadrao)
{
verdadeiro = 0;
}
}

for(i=l; i<=l; i--)//3,2,1
{
for(j=c; j<=c; j--)//3,2,1
{
if(i==j)
{
somadsec += mat[i][j];
}
}

if(somadsec!= somapadrao)
{
verdadeiro = 0;
}
}

printf("Soma da diagonal principal: %d\n",somadp);
printf("Soma da diagonal secundaria: %d\n",somadsec);

if(verdadeiro==1)
{
printf("E cubo magico\n");
}
else
{
printf("Nao e cubo magico\n");
}

return 0;

}





Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei alguns errinhos.

 

Primeiro erro:

Quando você define...

somapadrao += mat[0][j];
e
somac += mat[i][0];

Não permite que a somas sejam realizadas em outras linhas ou colunas.

Trocando o valor zero pela variável correspondente, as somas ficarão corretas.

somapadrao += mat[i][j];
e
somac += mat[i][j];

Segundo erro:

for(i=l; i<=l; i--)//3,2,1
{
    for(j=c; j<=c; j--)//3,2,1

Você está começando o loop utilizando um valor acima do máximo contido da matriz.

Além disso, a comparação está sendo feita no valor mais alto, porém, você está decrementando, ou seja, indo para o valor mais baixo. Você deve validar se chegou a zero.

for(i = l-1; i >= 0; i--)//3,2,1
{
    for(j = c-1; j >= 0; j--)//3,2,1

Espero que ajude!

Att

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.