Ir ao conteúdo
  • Cadastre-se
xRosbergx

Quadrado Magico em Pascal

Recommended Posts

Olá galera, estou aqui para pedir ajuda a vocês, pois não consigo terminar esse algoritmo que o professor passou.
Gostaria de saber se até onde eu desenvolvi está correto e como terminá-lo?

 

Escrever um programa em PASCAL que alimente (leia valores para cada posição) uma matriz
quadrada 5 x 5 e no final verifique se é ou não um Quadrado Mágico o conjunto de valores lidos.

program quadradomagico;uses crt;varmatriz:array[1..5,1..5] of integer;linha,coluna,somalinha,somacoluna,somadiagonal1,somadiagonal2: integer; beginsomalinha:=0;somacoluna:=0;//PERCORRER A LINHA E A COLUNA E DEPOIS LÊ OS SEUS VALORESfor linha:=1 to 5 dofor coluna:=1 to 5 do  begin     writeln('Digite o valor da linha ',linha,', coluna ',coluna,': ');     readln(matriz[linha,coluna]);  end;//SOMA OS VALORES DAS LINHAS E ADICIONA EM SOMALINHAfor linha:=1 to 5 dobegin   somalinha:=0;   for coluna:=1 to 5 do   somalinha:=somalinha+matriz[linha,coluna];end;//SOMA OS VALORES DAS COLUNAS E ADICIONA EM SOMACOLUNAfor coluna:= 1 to 5 dobegin  somacoluna:=0;  for linha:= 1 to 5 do  somacoluna:= somacoluna+matriz[linha,coluna];end;//PERCORRE  OS VALORES DA DIAGONAL PRINCIPAL E ADICIONA EM SOMADIAGONAL1 DEPOIS FAZ O MESMO COM A DIAGONAL SECUNDARIAsomadiagonal1:=0;somadiagonal2:=0;for linha:=1 to 5 do   begin     if (linha=coluna) then     somadiagonal1:= somadiagonal1 + matriz[linha,coluna];   end;for coluna:=1 to 5 do   begin     if (linha + coluna = matriz[linha,coluna] + 1) then     somadiagonal2:= somadiagonal2 + matriz[linha,coluna];   end;//IMPRIMIR A MATRIZfor linha:=1 to 5 do   begin   for coluna:=1 to 5 do      write (matriz[linha,coluna],'  ');      writeln;   end;// VERIFICAR QUADRADO MAGICO for linha:=1 to 5 dofor coluna:=1 to 5 doif (somalinha=somacoluna) and  (somadiagonal1=somadiagonal2) and  (somalinha=somadiagonal1) thenwriteln('Matriz é um quadrado magico');readkey;end.

Compartilhar este post


Link para o post
Compartilhar em outros sites
//SOMA OS VALORES DAS LINHAS E ADICIONA EM SOMALINHAfor linha:=1 to 5 dobegin   somalinha:=0;   for coluna:=1 to 5 do   somalinha:=somalinha+matriz[linha,coluna];end;//SOMA OS VALORES DAS COLUNAS E ADICIONA EM SOMACOLUNAfor coluna:= 1 to 5 dobegin  somacoluna:=0;  for linha:= 1 to 5 do  somacoluna:= somacoluna+matriz[linha,coluna];end;
Observei que as variáveis que estão recebendo a soma, estão sendo zeradas a cada loop, ou seja, logo apenas ficaram com a soma do último loop.

Inicialmete sugiro corrigir isso, e também inserir o else para o if final, já que ele só está verificando "se é", mas se não for não deveria aparecer algo também?

Boa sorte.

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigir os erros apontados por você mas, o programa ainda não está perfeito.

 

program quadradomagico;uses crt;varmatriz:array[1..5,1..5] of integer;linha,coluna,somalinha,somacoluna,somadiagonal1,somadiagonal2: integer; beginsomalinha:=0;somacoluna:=0;//PERCORRER A LINHA E A COLUNA E DEPOIS LÊ OS SEUS VALORESfor linha:=1 to 5 dofor coluna:=1 to 5 do  begin     writeln('Digite o valor da linha ',linha,', coluna ',coluna,': ');     readln(matriz[linha,coluna]);  end;//SOMA OS VALORES DAS LINHAS E ADICIONA EM SOMALINHAfor linha:=1 to 5 dosomalinha:=0;begin   for coluna:=1 to 5 do   somalinha:=somalinha+matriz[linha,coluna];end;//SOMA OS VALORES DAS COLUNAS E ADICIONA EM SOMACOLUNAfor coluna:= 1 to 5 dosomacoluna:=0;begin  for linha:= 1 to 5 do  somacoluna:= somacoluna+matriz[linha,coluna];end;//PERCORRE  OS VALORES DA DIAGONAL PRINCIPAL E ADICIONA EM SOMADIAGONAL1 DEPOIS FAZ O MESMO COM A DIAGONAL SECUNDARIAfor linha:=1 to 5 dosomadiagonal1:=0;   begin     if (linha=coluna) then     somadiagonal1:= somadiagonal1 + matriz[linha,coluna];   end;for coluna:=1 to 5 dosomadiagonal2:=0;   begin     if (linha + coluna = matriz[linha,coluna] + 1) then     somadiagonal2:= somadiagonal2 + matriz[linha,coluna];   end;//IMPRIMIR A MATRIZfor linha:=1 to 5 do   begin   for coluna:=1 to 5 do      write (matriz[linha,coluna],'  ');      writeln;   end;// VERIFICAR QUADRADO MAGICOfor linha:=1 to 5 dofor coluna:=1 to 5 doif (somalinha=somacoluna) and  (somadiagonal1=somadiagonal2) and  (somalinha=somadiagonal1) thenwriteln('Matriz é um quadrado magico')elsewriteln('Nao é um quadrado magico');readkey;end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e aí, a minha correção do codigo está correta? Por favor me de alguma dica para proseguir com o programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,
 

Corrigir os erros apontados por você mas, o programa ainda não está perfeito.
 
 

//SOMA OS VALORES DAS LINHAS E ADICIONA EM SOMALINHAfor linha:=1 to 5 dosomalinha:=0;begin   for coluna:=1 to 5 do   somalinha:=somalinha+matriz[linha,coluna];end;//SOMA OS VALORES DAS COLUNAS E ADICIONA EM SOMACOLUNAfor coluna:= 1 to 5 dosomacoluna:=0;begin  for linha:= 1 to 5 do  somacoluna:= somacoluna+matriz[linha,coluna];end;

 
Nessa alteração, você desconfigurou a estrutura do for..., o seu código ficou equivalente a:

for linha:=1 to 5 do  somalinha:=0;for coluna:=1 to 5 do  somalinha:=somalinha+matriz[linha,coluna];

(se não entendeu, se desejar depois explico com detalhes..)

 

Uma forma de deixar a soma fixa seria a seguinte:

//SOMA OS VALORES DAS LINHAS E ADICIONA EM SOMALINHAsomalinha:=0;for linha:=1 to 5 do  begin  for coluna:=1 to 5 do    somalinha:=somalinha+matriz[linha,coluna];  end;   

Desta forma, somalinha terá a SOMA DAS SOMAS DAS LINHAS.

obs.: esse begin/end não é necessário (mas por enquanto não tem problema deixar), já que dentro do primeiro for, só existe um comando, no caso um outro for... observe que a linha abaixo do segundo for está dentro deste, o que torna o segundo for uma "linha só", (se não entendeu, deixa pra lá, apenas se preocupe com o que vem abaixo por enquanto..)


 

 

Mas de qualquer forma, apenas essa correção não será útil...  já que teoricamente essa SOMA TOTAL não vai servir, já que o que interessa é a soma individual, e não a soma total...

Veja uma definição de Quadrado Mágico:
 

Quadrado Mágico é uma tabela quadrada de números em progressão aritmética em que a soma de cada coluna, de cada linha e das duas diagonais são iguais.
Fonte: http://pt.wikipedia.org/wiki/Quadrado_m%C3%A1gico

 

Então, você tem que achar uma forma de comparar a SOMA DE CADA LINHA com a SOMA DE CADA COLUNA e com a SOMA DE CADA DIAGONAL.

 

Uma forma seria:

ARMAZENAR O RESULTADO DE UMA DAS SOMAS
 

- Soma a primeira linha e armazena o valor em uma variável, exemplo de nome: SomaBase.

- Inicia uma variável flag marcando como "ainda igual", ex.: IGUAL = 1. (1=verdadeiro e 0=não verdadeiro)
- Daí, a medida que vai somando as outras linhas, colunas e diagonais, já compara se é igual a SomaBase, se NÃO for igual marca como "não igual", no contexto ficaria: IGUAL=0.

- Se IGUAL continuar com "1", então é QUADRADO MÁGICO, caso contrário, NÃO É QUADRADO MÁGICO.

(Ao final do processo, se todas as somas forem iguais a SomaBase, o valor de IGUAL permanecerá como "1', logo é um quadrado mágico. Se pelo menos uma soma não for igual, o valor de IGUAL será alterado para "0", logo não é um "quadrado mágico".

 

 

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×