Ir ao conteúdo
  • Cadastre-se

Desafio no visualg


Posts recomendados

Olá pessoal, estou aqui para pedir a ajuda de vocês em relação a um algoritmo que estou criando, eu quero fazer o seguinte:

Tenho um quadrado 5x5 (25 subquadrados) com 12 buracos (3 orifícios por cada lado do quadrado), e cada uma dessas entradas pode ter somente 9 saídas, resultando em 108 possibilidades de passagem por esse quadrado. E por que 108 e não 144 ? Porque após a entrada no quadrado o caminho não pode sair pelo mesmo lado que entrou incluindo ele mesmo, portanto só tem 9 saídas. Entendido isso vamos para o que quero fazer. (Caso ainda haja alguma dúvida basta ler e executar o código) 

 

 

 

2016-10-31 (1).png 2016-10-31 (7).png

 

Os riscos vermelhos são os pontos aonde podem ser entradas ou saídas

 

2016-10-31 (6).png

 

 

O caminho que entrar por esse quadrado 5x5 tem que percorrer todos os 25 subquadrados existentes dentro desse quadrado principal até chegar no ponto de saída. Ou seja, eu quero saber quantas e quais são as possibilidades de caminhos diferentes que tenho desse quadrado principal percorrendo todos os subquadrados. 

 

Por exemplo, vamos pegar uma das 108 possibilidades que temos, aonde eu entro pela parte do meio direito e saio pelo meio do topo

2016-10-31 (2).png

 

Como podem ver aqui em baixo, eu tenho vários meios de percorrer o caminho de entrada até o de saída, e isso é apenas uma das 108 possibilidades de entrada e saída. 

2016-10-31 (3).png 2016-10-31 (4).png 2016-10-31 (5).png

 

Como vocês sabem iria demorar muito até que eu desenhasse todos os meios de percorrer todos os 108 caminhos possíveis. então eu vou desenvolver um algoritmo para isso. E nessa parte aonde tenho que fazer ele entender que um caminho percorrido tem que ser diferente do outro que eu não sei o que fazer, eu até tenho algumas ideias que irei colocar em prática e irei atualizar aqui no post. Mas venho pedir a ajuda de vocês para isso, se tem algum jeito de deixar o meu código menor/melhor, eu sei que o VisuAlg não é de jeito nem um o melhor programa para fazer isso, mas eu estou aprendendo a programar agora e a única linguagem com que tenho experiência é o portugol. Então agradeceria muito se vocês pudessem me ajudar nesse projeto. Espero que tenham entendido, qualquer coisa é só perguntar que estarei respondendo o mais rápido possível para que possamos trocar conhecimento... Obrigado.

 

Código do VisuAlg

algoritmo "semnome"
var
   M1: vetor [1..5, 1..5] de inteiro
   L, C: inteiro
   I, O: inteiro
   conf: caractere

   Q1: vetor [1..3, 1..3] de caractere
   Q2: vetor [1..3, 1..3] de caractere
   Q3: vetor [1..3, 1..3] de caractere
   Q4: vetor [1..3, 1..3] de caractere
   Q5: vetor [1..3, 1..3] de caractere
   Q6: vetor [1..3, 1..3] de caractere
   Q7: vetor [1..3, 1..3] de caractere
   Q8: vetor [1..3, 1..3] de caractere
   Q9: vetor [1..3, 1..3] de caractere
   Q10: vetor [1..3, 1..3] de caractere
   Q11: vetor [1..3, 1..3] de caractere
   Q12: vetor [1..3, 1..3] de caractere
   Q13: vetor [1..3, 1..3] de caractere
   Q14: vetor [1..3, 1..3] de caractere
   Q15: vetor [1..3, 1..3] de caractere
   Q16: vetor [1..3, 1..3] de caractere
   Q17: vetor [1..3, 1..3] de caractere
   Q18: vetor [1..3, 1..3] de caractere
   Q19: vetor [1..3, 1..3] de caractere
   Q20: vetor [1..3, 1..3] de caractere
   Q21: vetor [1..3, 1..3] de caractere
   Q22: vetor [1..3, 1..3] de caractere
   Q23: vetor [1..3, 1..3] de caractere
   Q24: vetor [1..3, 1..3] de caractere
   Q25: vetor [1..3, 1..3] de caractere

procedimento SQLimpo
inicio
      EscrevaL (" + - 1 - + - - - + - 2 - + - - - + - 3 - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL ("12       |       |       |       |       4")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL ("11       |       |       |       |       5")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL ("10       |       |       |       |       6")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - 9 - + - - - + - 8 - + - - - + - 7 - +")
fimprocedimento
procedimento QLimpo
inicio
      EscrevaL (" + - 1 - + - - - + - 2 - + - - - + - 3 - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL ("12       |       |       |       |       4")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL ("11       |       |       |       |       5")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - - - + - - - + - - - + - - - + - - - +")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL ("10       |       |       |       |       6")
      EscrevaL (" |       |       |       |       |       |")
      EscrevaL (" + - 9 - + - - - + - 8 - + - - - + - 7 - +")
      EscrevaL ("Digite a o número de entrada e o número de saída")
fimprocedimento
procedimento SEE
inicio
      EscrevaL ("Entrada: ",I)
      Escreva ("Saída: ")
      Leia (O)
fimprocedimento
procedimento TesteI
inicio
      Se (I <= 0) ou (I > 12) então
         LimpaTela
         SQLimpo
         EscrevaL ("Entrada incorreta, por favor escolha outra")
         Escreva ("Entrada: ")
         Leia(I)
         TesteI
      senao
         LimpaTela
         QLimpo
         EscrevaL ("Entrada:",I)
      FimSe
fimprocedimento

procedimento TesteO
inicio
      Se (I = 1) então
         Se (O = 1) ou (O = 2) ou (O = 3) ou (O > 12) ou (O <= 0) então
            LimpaTela
            QLimpo
            EscrevaL("Saída incorreta, por favor escolha outra")
            SEE
            TesteO
         FimSe
      senao
         Se (I = 2) então
            Se (O = 1) ou (O = 2) ou (O = 3) ou (O > 12) ou (O <= 0) então
               LimpaTela
               QLimpo
               EscrevaL("Saída incorreta, por favor escolha outra")
               SEE
               TesteO
            FimSe
         senao
            Se (I = 3) então
               Se (O = 1) ou (O = 2) ou (O = 3) ou (O > 12) ou (O <= 0) então
                  LimpaTela
                  QLimpo
                  EscrevaL("Saída incorreta, por favor escolha outra")
                  SEE
                  TesteO
               FimSe
            senao
               Se (I = 4) então
                  Se (O = 4) ou (O = 5) ou (O = 6) ou (O > 12) ou (O = 0) então
                     LimpaTela
                     QLimpo
                     EscrevaL("Saída incorreta, por favor escolha outra")
                     SEE
                     TesteO
                  FimSe
               senao
                  Se (I = 5) então
                     Se (O = 4) ou (O = 5) ou (O = 6) ou (O > 12) ou (O <= 0) então
                        LimpaTela
                        QLimpo
                        EscrevaL("Saída incorreta, por favor escolha outra")
                        SEE
                        TesteO
                     FimSe
                  senao
                     Se (I = 6) então
                        Se (O = 4) ou (O = 5) ou (O = 6) ou (O > 12) ou (O <= 0) então
                           LimpaTela
                           QLimpo
                           EscrevaL("Saída incorreta, por favor escolha outra")
                           SEE
                           TesteO
                        FimSe
                     senao
                        Se (I = 7) então
                            Se (O = 7) ou (O = 8) ou (O = 9) ou (O > 12) ou (O <= 0) então
                               LimpaTela
                               QLimpo
                               EscrevaL("Saída incorreta, por favor escolha outra")
                               SEE
                               TesteO
                            FimSe
                        senao
                           Se (I = 8) então
                              Se (O = 7) ou (O = 8) ou (O = 9) ou (O > 12) ou (O <= 0) então
                                 LimpaTela
                                 QLimpo
                                 EscrevaL("Saída incorreta, por favor escolha outra")
                                 SEE
                                 TesteO
                              FimSe
                           senao
                              Se (I = 9) então
                                 Se (O = 7) ou (O = 8) ou (O = 9) ou (O > 12) ou (O <= 0) então
                                    LimpaTela
                                    QLimpo
                                    EscrevaL("Saída incorreta, por favor escolha outra")
                                    SEE
                                    TesteO
                                 FimSe
                              senao
                                 Se (I = 10) então
                                    Se (O = 10) ou (O = 11) ou (O = 12) ou (O > 12) ou (O <= 0) então
                                       LimpaTela
                                       QLimpo
                                       EscrevaL("Saída incorreta, por favor escolha outra")
                                       SEE
                                       TesteO
                                    FimSe
                                 senao
                                    Se (I = 11) então
                                       Se (O = 10) ou (O = 11) ou (O = 12) ou (O > 12) ou (O <= 0) então
                                          LimpaTela
                                          QLimpo
                                          EscrevaL("Saída incorreta, por favor escolha outra")
                                          SEE
                                          TesteO
                                       FimSe
                                    senao
                                       Se (I = 12) então
                                          Se (O = 10) ou (O = 11) ou (O = 12) ou (O > 12) ou (O <= 0) então
                                             LimpaTela
                                             QLimpo
                                             EscrevaL("Saída incorreta, por favor escolha outra")
                                             SEE
                                             TesteO
                                          FimSe
                                       FimSe
                                    FimSe
                                 FimSe
                              FimSe
                           FimSe
                        FimSe
                     FimSe
                  FimSe
               FimSe
            FimSe
         FimSe
      FimSe
fimprocedimento
procedimento Iniciar
inicio
      QLimpo
      Escreva ("Entrada: ")
      Leia (I)
      TesteI
      Escreva ("Saída: ")
      Leia (O)
      TesteO
      LimpaTela
      SQLimpo
      EscrevaL ("Serão geradas agora todas as possibilidades de passagem pelo")
      EscrevaL ("quadrado 5x5 com a entrada [",I," ] e a saída [",O," ]")
      EscrevaL ("CONFIRMAR ?")
      EscrevaL ("[S/N]")
      Leia (conf)
      Se (conf = "S") então
         LimpaTela
         EscrevaL("Gerando possibilidades...")
      senao
         Se (conf = "N") então
            LimpaTela
            Iniciar
         senao
            LimpaTela
            EscrevaL ("OPÇÃO INVÁLIDA")
            Escreva ("PROGRAMA FINALIZADO")
            fimalgoritmo
         FimSe
      FimSe
fimprocedimento
inicio
      Iniciar
fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...