Ir ao conteúdo
  • Cadastre-se
igormiranda

Duvida - Algoritmo Pascalzim Matriz

Recommended Posts

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.

Compartilhar este post


Link para o post
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

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

×