Ir ao conteúdo
  • Cadastre-se

Quadrado Magico em Pascal


xRosbergx

Posts recomendados

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.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
//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.

Link para o comentário
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.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!