Ir ao conteúdo
  • Cadastre-se

Duvida - Algoritmo Pascalzim Matriz


igormiranda

Posts recomendados

Boa noite pessoal

Gostaria de saber uma dica, como eu posso fazer o exercício abaixo, pois o meu código não está dando certo.

Exercício abaixo:

teste2bd7.JPG

O meu código abaixo:

Program matrizsimetrica;
var M: array [1..20,1..20] of integer; {matriz quadradada de dimensao nxn fornecida na entrada}
n, {ordem da matriz quadrada M fornecida na entrada}
L, C {índices}
:integer;

MatrizSimetrica :boolean;

Begin
Writeln ('Informe a ordem da matriz: ');
readln(n);

Writeln('Informe a matriz quadrada: ');
writeln;
for L:=1 to n do
begin
for C:=1 to n do
begin
write( 'M[', L, ',', C, '] = ' );
readln(M[L,C]);
end;
end;
MatrizSimetrica:= true;
L:= 1;
while not (L > n) do
begin
C:= L+1;
while not (C>n) or MatrizSimetrica do
begin
if M[L,C] <> M[C,L] then
MatrizSimetrica:= false;
C:= C+1;
end;
L:= L+1;
end;

if MatrizSimetrica then
Writeln ('A matriz é simétrica!')
else
Writeln ('A matriz não é simétrica!');

Writeln;
Writeln;
Writeln ('Tecle algo para encerrar...') ;
Readln;
End.

Desde já agradeço.

Obrigado.

Link para o comentário
Compartilhar em outros sites

igormiranda,

Além do problema apontado pelo Kurumim, é necessário atentar para dois pontos importantes no seu programa:

1)

Você faz o incremento da variável C, mas nunca reseta essa variável quando ocorre o incremento da linha (L).

2)

Quando você faz not (C > n) or MatrizSimetrica, se a variável MatrizSimetrica for True (e a matriz for realmente simétrica), a condição de saída nunca vai ocorrer, pois você está fazendo uma comparação lógica usando o operador OR. Para ser verdadeiro, basta que um dos operandos seja verdade. Ou seja, quando C for maior que n, você terá While (False or True) = True.

Segue uma sugestão para correção. Mexi o mínimo possível. Você poderia ter usado Repeat, como aparece na imagem.

  MatrizSimetrica := True;
L := 1;
While Not (L > n) And MatrizSimetrica Do
Begin
C := 1;
While Not (C > n) Do
Begin
If M[L,C] <> M[C,L] Then
Begin
MatrizSimetrica := False;
break;
End;
C := C + 1;
End;
L := L + 1;
End;

[]'s

LNW

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

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...