Ir ao conteúdo

VisualG Gostaria de compreender a lógica do código


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Postado

ola pessoal , nesse codigo é para mostrar na tela o triangulo superior e triangulo inferior , a matriz completa e a diagonal principal . A questão é que não entendi muito bem como fizeram para chegar no resultado dos triangulos superior e inferior ... alguém pode me explicar???

algoritmo "DISSECANDO MATRIZES"
var
    mat: vetor[1..4,1..4] de inteiro
    l , c , superior , inferior , dp , opcao: inteiro

inicio
      para l <- 1 ate 4 faca
           para c <- 1 ate 4 faca
             escreva("Digite o valor da posiçao [" , l , ",", c , "] :")
                leia (mat[l,c])
           fimpara
      fimpara
        limpatela
           escreval()
         repita
          escreval("MENU DE opções")
           escreval("==================")
           escreval("[1] mostrar a matriz")
           escreval("[2] diagonal principal")
           escreval("[3] triangulo superior")
           escreval("[4] triangulo inferior")
           escreval("[5] sair")

           escreval()
           escreval("OPCAO")
           escreval("=========")
           leia(opcao)
           escreval("==========")

             se (opcao = 1) entao
                 para l <- 1 ate 4 faca
                     para c <- 1 ate 4 faca
                       escreva ( mat[l,c] : 4 )
                     fimpara
                      escreval()
                 fimpara

             fimse
                    se (opcao = 2 ) entao
                       para l <- 1 ate 4 faca
                         para c <- 1 ate 4 faca
                            se ( l= c) entao
                               escreva(mat [l,c] : 4 )
                            senao
                               escreva("   ")
                            fimse
                         fimpara
                         escreval("")
                       fimpara
                    fimse

                    se(opcao = 3 ) entao
                       para l <- 1 ate 4 faca
                         para c <-  1 ate 4  faca
                           se (l > c) ou (l= c) entao
                              escreva("  ")
                             senao
                               escreva (mat [l,c] : 4 )
                           fimse
                         fimpara

                           escreval()
                       fimpara
                    fimse

                    se ( opcao = 4 ) entao
                       para l <- 1 ate 4 faca
                         para c <- 1 ate 4 faca
                            se ( l< c) ou (l=c) entao
                               escreva ("   ")
                            senao
                                escreva  (mat [l,c] : 4 )
                            fimse
                         fimpara
                         escreval()
                       fimpara
                    fimse


         ate(opcao = "5")
fimalgoritmo

 

Postado

@kalline

43 minutos atrás, kalline disse:

não entendi muito bem como fizeram para chegar no resultado dos triangulos superior e inferior

Não se forma uma matriz triangular equivalente da forma implementada nesse código, elemento nenhum da matriz estendida é afetado numericamente, se forma uma outra matriz.

Se a entrada for:

1  1  2  3
3  2  1  2
3  2  3  1
3  2  1  4

Escolhendo a opção 3 (triângulo superior), a saída é:

   1  2  3
      1  2
         1
          

Foi feita uma verificação: Se um elemento da matriz estiver abaixo da diagonal principal ou pertencer a mesma, são impressos espaços, quando na realidade deveriam ser impressos zeros abaixo da diagonal principal, e os termos acima da diagonal principal incluindo a mesma seriam afetados por um método numérico como a eliminação gaussiana por exemplo.

Por eliminação gaussiana, considerando o vetor resultado {1,2,3,4}, a saída seria:

1  1  2  3
0 -1 -5 -7
0  0  2 -1
0  0  0  2

O método implementado no código pra formar uma matriz triangular inferior segue o mesmo esquema, só muda a verificação: se um elemento da matriz estiver acima da diagonal principal ou pertencer a mesma, são impressos espaços.

Se a intenção é formar uma matriz diferente com zeros em certas posições, faça com que sejam impressos os zeros ao menos.

  • Curtir 1
  • Obrigado 1
  • Membro VIP
  • Solução
Postado
19 horas atrás, kalline disse:

[...] A questão é que não entendi muito bem como fizeram para chegar no resultado dos triângulos superior e inferior ... alguém pode me explicar???

 

O "triângulo superior" seria os elementos acima da diagonal principal, correto?

 

O trecho estaria aqui:

19 horas atrás, kalline disse:
         para l <- 1 ate 4 faca
            para c <-  1 ate 4  faca
               se (l > c) ou (l = c) entao //[1]
                  escreva ("    ")
               senao
                  escreva (mat [l,c] : 4 )
               fimse
            fimpara
            escreval()
         fimpara

 


Basicamente está escrevendo espaços onde NÃO é do triângulo superior, ou seja, onde "a posição da linha é maior ou igual a posição da coluna".

 

Simplificando (juntando as expressões):

         para l <- 1 ate 4 faca
            para c <-  1 ate 4  faca
               se (l >= c) entao //[1]
                  escreva ("    ")
               senao
                  escreva (mat [l,c] : 4 )
               fimse
            fimpara
            escreval()
         fimpara

 


Ou, se preferir, inverte a verificação... Escrevendo os valores apenas onde "a posição da linha é menor que a posição da coluna"

 

         para l <- 1 ate 4 faca
            para c <-  1 ate 4  faca
               se (l < c) entao
                  escreva (mat [l,c] : 4 )
               senao
                  escreva("    ")
               fimse
            fimpara
            escreval()

 

O resultado será o mesmo.

Para o inferior é análogo.

 

  • Curtir 1
  • Obrigado 1
  • Amei 1
  • Membro VIP
Postado
2 horas atrás, Lucca Rodrigues disse:
  • Coluna = linha: diagonal principal
  • Coluna > linha: acima da diagonal principal
  • Coluna < linha: abaixo da diagonal principal


Acho que assim fica mais fácil visualizar. No código apenas está invertido a ordem dos membros. Seria:

  • Linha = coluna: diagonal principal
  • Linha < coluna: acima da diagonal principal
  • Linha > coluna: abaixo da diagonal principal

Dá no mesmo.



Ou seja:

Em 18/01/2022 às 11:53, Simon Viegas disse:

"a posição da linha é maior ou igual a posição da coluna".


É equivalente a: "a posição da coluna menor ou igual a posição da linha". 

 


Em código. Em vez de:

Em 18/01/2022 às 11:53, Simon Viegas disse:
se (l >= c) entao

 

Seria:

se (c <= l) entao

 

 

  • Curtir 1
  • Obrigado 2
Postado

vou da a explicação maiis simples
estes comande de para são repetições  
por exemplo conte ate 10
a cada ves que ele conta ele acresenta um numero a matriz  e sempre é um esquema de linha e coluna como uma tabela eu explico isso abaixo 
 

explicando o que é matrix (tanto matrix como vetor/ array você pode entender como uma tabela)
tanto é que se você for ollhar na mao uma repetiçao 1 ciclo de cada ves  você poder escrever uma tabela com o mesmo resultado do programa

matrix [linha] [coluna]

image.png.e7a41f02d1424b136b5f98c30d6bbb4d.png

digimon [1] [1];

gta [1] [2];
yugioh ?
sonic ?
parece bobo mais se dominar esse esquema de tabela e possiçoes faz toda diferença
cada matriz tem uma logica aplicada mais se for bidimencional matrix [linha] [coluna]
sempre segue regra e tabem você deve saber meio que de cabeça qual o índice que é do elemento

 

@kalline

  • Obrigado 1
  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!