Ir ao conteúdo

Posts recomendados

Postado

Bom dia,

 

Gostaria da ajuda de vocês, estou tentando criar o jogo dos 8, na qual você tem uma matriz 3x3 e a tabela padrão é de 1 ate 0, e uma tabela aleatoria, e a a função do programa é arrumar a tabela aleatoria para ficar igual a padrão. Só que eu consigo ir mudando as posições apenas para cima e para esquerda, mas quando coloco para direita e para baixo o programa dá erro, não estou conseguindo resolver esse problema, e outro problema é que eu não estou conseguindo limitar o movimento caso eu aperte para esquerda e a matriz acabar eu teria que repetir outro movimento para não ultrapassar a matriz.

O meu código é esse.

 

algoritmo "Trabalho Final"
// Função : Jogar
// Autor : Luiz Felipe rodrigues da Silva
// Data : 24/09/2018

var

vet  :vetor [1..9] de inteiro
tab3: vetor[1..3,1..3] de inteiro
tab3a: vetor[1..3,1..3] de inteiro

aux, i, j, l, c, linha, coluna,tabuleiro, cont, opcao: inteiro

inicio
//Escolha do tabuleiro
repita
   Escreval("Escolha o modo de jogo:")
   Escreval("(1) Fácil")
   Escreval("(2) Normall")
   Escreval("(3) Difícil")

   Leia(tabuleiro)

ate((tabuleiro = 1) ou (tabuleiro = 2) ou (tabuleiro = 3))
Limpatela
escolha (tabuleiro)

   //Tabuleiro 3X3

caso 1

   //Tabela padrão

   Escreval("Como a tabele deve ficar")
   Escreval()
   cont <- 0
   para linha de 1 ate 3 faca
      para coluna de 1 ate 3 faca
         tab3[linha,coluna]<- cont + 1
         cont <- cont + 1
      fimpara
   fimpara

   tab3[3,3] <- 0

   para linha de 1 ate 3 faca
      para coluna de 1 ate 3 faca
         escreva(tab3[linha,coluna])
      fimpara
      escreval()
   fimpara
   escreval()


   //Tabela aleatória

   para i de 1 ate 9 faca
      vet <- Randi(9)
      se i > 1 entao
         j <- 1
         enquanto (j < i) faca
            se vet = vet[j] entao
               vet <- randi(9)
               j <- 1
            senao
               j <- j+1
            fimse
         fimenquanto

      fimse

      tab3a[1,1] <- vet[1]
      tab3a[1,2] <- vet[2]
      tab3a[1,3] <- vet[3]
      tab3a[2,1] <- vet[4]
      tab3a[2,2] <- vet[5]
      tab3a[2,3] <- vet[6]
      tab3a[3,1] <- vet[7]
      tab3a[3,2] <- vet[8]
      tab3a[3,3] <- vet[9]

   fimpara
   escreval("-----------------------------------------------------")
   escreval("Faça o movimento do 0 até igualar a tabela padrão")
   escreval()
   para l de 1 ate 3 faca
      para c de 1 ate 3 faca
         escreva(tab3a[l,c])
      fimpara
      escreval()
   fimpara
   escreval("-----------------------------------------------------")

   //escolha dos movimentos
  repita
   escreval("Faça os movimentos com as teclas 4 para (esquerda),8 para (cima),6 para (direita) ou 2 para (baixo")
   repita
      leia (opcao)

   ate ((opcao = 4) ou (opcao = 6) ou (opcao = 2) ou (opcao = 8))
   escolha opcao

      //Movimento esquerda
   caso 4
      para l de 1 ate 3 faca
         para c de 1 ate 3 faca

            se (tab3a[l,c] = 0) entao
               aux <- tab3a[l,c]
               tab3a[l,c] <- tab3a[l,c-1]
               tab3a[l,c-1] <- aux
            fimse
         fimpara
      fimpara

      para l de 1 ate 3 faca
         para c de 1 ate 3 faca
            escreva(tab3a[l,c])
         fimpara
         escreval()
      fimpara

      //Movimento para cima
   caso 8
      para l de 1 ate 3 faca
         para c de 1 ate 3 faca

            se (tab3a[l,c] = 0) entao
               aux <- tab3a[l,c]
               tab3a[l,c] <- tab3a[l-1,c]
               tab3a[l-1,c] <- aux
            fimse
         fimpara
      fimpara

      para l de 1 ate 3 faca
         para c de 1 ate 3 faca
            escreva(tab3a[l,c])
         fimpara
         escreval()
      fimpara
      //Movimento para direita
   caso 6
      para l de 1 ate 3 faca
         para c de 1 ate 3 faca

            se (tab3a[l,c] = 0) entao
               aux <- tab3a[l,c]
               tab3a[l,c] <- tab3a[l,c+1]
               tab3a[l,c+1] <- aux
            fimse
         fimpara
      fimpara

      para l de 1 ate 3 faca
         para c de 1 ate 3 faca
            escreva(tab3a[l,c])
         fimpara
         escreval()
      fimpara


      //movimento para baixo
   caso 2
      para l de 1 ate 3 faca
         para c de 1 ate 3 faca

            se (tab3a[l,c] = 0) entao
               aux <- tab3a[l,c]
               tab3a[l,c] <- tab3a[l+1,c]
               tab3a[l+1,c] <- aux
            fimse
         fimpara
      fimpara

      para l de 1 ate 3 faca
         para c de 1 ate 3 faca
            escreva(tab3a[l,c])
         fimpara
         escreval()
      fimpara

   fimescolha
   
   ate (tab3[linha,coluna]=tab3a[l,c])

caso 2

   escreval("2")

caso 3
   escreval("3")

fimescolha


fimalgoritmo

 

  • Curtir 2
  • Obrigado 1
  • Membro VIP
Postado

Olá.

 

1#

Sobre:

9 horas atrás, Lipeco disse:

Só que eu consigo ir mudando as posições apenas para cima e para esquerda, mas quando coloco para direita e para baixo o programa dá erro

 

Dá erro porque você está varrendo a matriz procurando onde está o 0. Quando é feito a mudança para direita ou para baixo, o 0 vai para uma posição posterior, daí, o para vai continuar procurando e vai achar 0 novamente (pois a pesquisa vai indo justamente para o posterior)..., ou seja, o 0 vai cada vez indo para direita ou para baixo (respectivamente) e acaba chegando na borda!!! Acontece que o programa ainda vai tentar mover... e acaba se esbarrando um posição que não existe.

 

 

 

2#

Uma forma de resolver o problema (vulgo armengando) seria fazendo o laço interromper após encontrar. Veja, se o número já foi encontra, não tem porque continuar procurando.

 

Basta usar o comando interrompa.

         caso 6
            para l de 1 ate 3 faca
               para c de 1 ate 3 faca
                  se (tab3a[l,c] = 0) entao
                     aux          <- tab3a[l,c]
                     tab3a[l,c]   <- tab3a[l,c+1]
                     tab3a[l,c+1] <- aux
                     interrompa
                  fimSe
               fimPara
               interrompa
            fimPara

e

         caso 2
            para l de 1 ate 3 faca
               para c de 1 ate 3 faca
                  se (tab3a[l,c] = 0) entao
                     aux          <- tab3a[l,c]
                     tab3a[l,c]   <- tab3a[l+1,c]
                     tab3a[l+1,c] <- aux
                     interrompa
                  fimSe
               fimPara
               interrompa
            fimPara

 

 

 

3#

Essa pesquisa da posição é desnecessária... simplesmente armazene a posição do 0 com duas variáveis. Aí, quando for mover, faz a troca utilizando as variáveis.

 

 

 

4#

Você precisa inserir uma proteção para não deixar mover o 0 para além das bordas. 

 

 

 

5#

Em vez de imprimir a matriz em cada caso, apenas coloque uma vez depois do escolha ou lá no início do repita.

 

 

 

***

 

No aguardo.

  • Curtir 2
Postado

Boa noite amigo, consegui, muito obrigado pela dica, realmente eu não estava enxergando isso, consegui limitar e fazer tudo que me indicou, agradeço muito. Espero que tenha uma excelente noite . não

Vou postar ele pronto depois que eu formatar direitinho, na terça feira devo estar postando. Agradeço amigo.

  • Curtir 2
  • Membro VIP
Postado

1#

Sobre:

 

Vou postar ele pronto depois que eu formatar direitinho, na terça feira devo estar postando. Agradeço amigo.

 

Legal. Ficamos aguardando para revisar.

 

Sobre a indentação do código, no próprio Visualg tem um recurso no menu Editar. Ele automaticamente reindenta o código. É possível também utilizar o atalho CTRL+G. É bem útil. Mesmo que possa ocorrer de não ficar 100% no padrão que você possa gostar, dá para usar a ferramente e depois fazer os ajustes desejados.

 

 

 

2#

Sobre:

 

[...] realmente eu não estava enxergando isso [...]

 

Bacana! Creio que para identificar essa falha não era tão trivial mesmo, ainda mais quando está com a "cabeça quente" desenvolvendo o algoritmo... É normal.

 

Se servi de ajuda, fiquei sem entender também... para identificar o erro, eu utilizei basicamente de 2 recursos: o breakpoint (F5) e a análise dos valores das variáveis. Se tiver interesse, posteriormente eu tento explicar o que é e como eu fiz para achar o erro.

 

 

Um ponto interessante é que a necessidade de não continuar repetindo após encontrar o 0 já existia, ou seja, é necessário também fazer o mesmo para as teclas 4 e 8. Resumindo: interromper o laço serve tanto para parar de continuar, já que já achou, tanto para evitar o erro após a troca, pois o 0 reposiciona e pode acabar encontrando novamente (que é o caso do 6 e 2)

 

 

 

3#

Uma forma diferente de sugerir as teclas:

         escreval("Faça os movimentos com as teclas")
         escreval("  8  ")
         escreval("4 * 6")
         escreval("  2  ")
         escreval()

Ou seja, a ideia é meio que indicando para usar o teclado numérico... por ai vai.

 

 

 

***

 

No aguardo.

tela.png

  • Curtir 2
Postado

Então, eu fiz tudo , deu certo, aí foi eu começar a organizar para começar a dar erro.

Tudo começa bem, até eu pedir para fazer o primeiro movimento, aí quando eu faço o movimento eu coloquei na logica para repetir essa leitura até a tabela randon ficar igual a Tabela padrão. Mas agora está dizendo que tem eum "ATE" sem um "repita", sendo que eu coloquei o repita, e o até.

Sigua o algoritmo.

 

Outra coisa, como coloco para a matriz ficar organizada ?
Quando coloco no modo difícil, por exemplo, cria uma matriz 5x5 mas fica todo desorganizado, tentei dar espaço, mas continua..

 

algoritmo "Trabalho Final"
// Função : Jogar
// Autor : Luiz Felipe rodrigues da Silva
// Data : 24/09/2018

var

   vet  :vetor [1..25] de inteiro
   taborig: vetor[1..5,1..5] de inteiro
   tabrand: vetor[1..5,1..5] de inteiro

   contmov,tam, aux, aux2, i, j, l, c, linha, coluna,tabuleiro, cont,contres, opcao,ii: inteiro

inicio
   //Escolha do tabuleiro
   repita
      Escreval("Escolha o modo de jogo:")
      Escreval("(1) Fácil")
      Escreval("(2) Normall")
      Escreval("(3) Difícil")

      Leia(tabuleiro)

   ate((tabuleiro = 1) ou (tabuleiro = 2) ou (tabuleiro = 3))
   Limpatela
   Se (tabuleiro = 1) entao
      tam <- 3
   fimse
   Se (tabuleiro = 2) entao
      tam <- 4
   fimse
   Se (tabuleiro = 3) entao
      tam <- 5
   fimse

   //Tabela padrão

   Escreval("Como a tabele deve ficar")
   Escreval()
   cont <- 0
   para linha de 1 ate tam faca
      para coluna de 1 ate tam faca
         taborig[linha,coluna]<- cont + 1
         cont <- cont + 1
      fimpara
   fimpara

   taborig[tam,tam] <- 0

   para linha de 1 ate tam faca
      para coluna de 1 ate tam faca
         escreva(taborig[linha,coluna]," ")
      fimpara
      escreval()
   fimpara
   escreval()

   //Tabela aleatória
   //Tabuleiro 3x3

   Se (tabuleiro = 1) entao
      para i de 1 ate 9 faca
         vet <- Randi(9)
         se i > 1 entao
            j <- 1
            enquanto (j < i) faca
               se vet = vet[j] entao
                  vet <- randi(9)
                  j <- 1
               senao
                  j <- j+1
               fimse
            fimenquanto
         fimse
         ii <- 0
         para l de 1 ate 3 faca
            para c de 1 ate 3 faca
               tabrand[l,c] <- vet[1+ii]
               ii<- ii + 1
            fimpara
         fimpara

      fimpara
      escreval("-----------------------------------------------------")
      escreval("Faça o movimento do 0 até igualar a tabela padrão")
      escreval()
      para l de 1 ate tam faca
         para c de 1 ate tam faca
            escreva(tabrand[l,c],"")
         fimpara
         escreval()
      fimpara
      escreval("-----------------------------------------------------")
   fimse

   //tabuleiro 4x4
   Se (tabuleiro = 2) entao
      tam <- 4
      para i de 1 ate 16 faca
         vet <- Randi(16)
         se i > 1 entao
            j <- 1
            enquanto (j < i) faca
               se vet = vet[j] entao
                  vet <- randi(16)
                  j <- 1
               senao
                  j <- j+1
               fimse
            fimenquanto

         fimse
         ii <- 0
         para l de 1 ate 4 faca
            para c de 1 ate 4 faca
               tabrand[l,c] <- vet[1+ii]
               ii<- ii + 1
            fimpara
         fimpara
      fimpara
      escreval("-----------------------------------------------------")
      escreval("Faça o movimento do 0 até igualar a tabela padrão")
      escreval()
      para l de 1 ate tam faca
         para c de 1 ate tam faca
            escreva(tabrand[l,c])
         fimpara
         escreval()
      fimpara
      escreval("-----------------------------------------------------")
   fimse

   //tabuleiro 5x5
   Se (tabuleiro = 3) entao
      tam <- 5
      para i de 1 ate 25 faca
         vet <- Randi(25)
         se i > 1 entao
            j <- 1
            enquanto (j < i) faca
               se vet = vet[j] entao
                  vet <- randi(25)
                  j <- 1
               senao
                  j <- j+1
               fimse
            fimenquanto
         fimse

         ii <- 0
         para l de 1 ate 5 faca
            para c de 1 ate 5 faca
               tabrand[l,c] <- vet[1+ii]
               ii<- ii + 1
            fimpara
         fimpara
      fimpara
      escreval("-----------------------------------------------------")
      escreval("Faça o movimento do 0 até igualar a tabela padrão")
      escreval()
      para l de 1 ate tam faca
         para c de 1 ate tam faca
            escreva(tabrand[l,c],"  ")
         fimpara
         escreval("  ")
      fimpara
      escreval("-----------------------------------------------------")
   fimse
   //escolha dos movimentos

   contmov <- 0
  

//O PROBLEMA ESTÀ NESSE REPITA  e no ATE LÁ NO FINAL

 

Repita
      escreval("Faça os movimentos com as teclas")
      escreval("  8  ")
      escreval("4 * 6")
      escreval("  2  ")
      escreval()

      repita
         leia (opcao)
         escreval()
      ate ((opcao = 4) ou (opcao = 6) ou (opcao = 2) ou (opcao = 8))
      escolha opcao
         //Movimento esquerda
      caso 4
         para l de 1 ate tam faca
            para c de 1 ate tam faca

               se (tabrand[l,c] = 0) entao
                  se (c<>1) entao
                     aux <- tabrand[l,c]
                     tabrand[l,c] <- tabrand[l,c-1]
                     tabrand[l,c-1] <- aux
                  fimse
               fimse
            fimpara
         fimpara
         contmov <- contmov + 1
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               escreva(tabrand[l,c])
            fimpara
            escreval()
         fimpara

         //Movimento para cima
      caso 8
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               se (l<>1) ENTAO
                  se (tabrand[l,c] = 0) entao
                     aux <- tabrand[l,c]
                     tabrand[l,c] <- tabrand[l-1,c]
                     tabrand[l-1,c] <- aux
                  fimse
               fimse
            fimpara
         fimpara
         contmov <- contmov + 1
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               escreva(tabrand[l,c])
            fimpara
            escreval()
         fimpara
         //Movimento para direita
      caso 6
         para l de 1 ate 3 faca
            para c de 1 ate 3 faca
               se (c<>tam) ENTAO
                  se (tabrand[l,c] = 0) entao
                     aux <- tabrand[l,c]
                     tabrand[l,c] <- tabrand[l,c+1]
                     tabrand[l,c+1] <- aux
                     interrompa
                  fimse
               fimse
            fimpara
         fimpara
         contmov <- contmov + 1
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               escreva(tabrand[l,c])
            fimpara
            escreval()
         fimpara


         //movimento para baixo
      caso 2
         para l de 1 ate tam faca
            aux2 <- 1
            para c de 1 ate tam faca
               se (l<>tam) entao
                  se (tabrand[l,c] = 0) entao
                     aux <- tabrand[l,c]
                     tabrand[l,c] <- tabrand[l+1,c]
                     tabrand[l+1,c] <- aux
                     aux2 <- aux
                     interrompa
                  fimse
               fimse
            fimpara
            se(l<>tam) entao
               se (aux2 = 0) entao
                  interrompa
               fimse
            fimse
         fimpara
         contmov <- contmov + 1
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               escreva(tabrand[l,c])
            fimpara
            escreval()
         fimpara

         //Verificação com a tabela principal

         contres <- 0
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               se (tabrand[l,c]=taborig[l,c]) entao
                  contres <- contres + 1
               fimse
            fimpara
         fimpara

   Ate (contres=tam)

      Escreval("Parabéns!!! Você Venceu!!!")
      escreval("Número de tentativas foi: ",contmov)
fimalgoritmo

 

  • Curtir 2
  • Membro VIP
Postado

Olá.

 

1#

Para postar um código, favor utilizar a tag CODE. Vide:

 

 

 

2#

Sobre:

21 horas atrás, Lipeco disse:

Então, eu fiz tudo , deu certo, aí foi eu começar a organizar para começar a dar erro.

Tudo começa bem, até eu pedir para fazer o primeiro movimento, aí quando eu faço o movimento eu coloquei na logica para repetir essa leitura até a tabela randon ficar igual a Tabela padrão. Mas agora está dizendo que tem eum "ATE" sem um "repita", sendo que eu coloquei o repita, e o até.

 

Creio que um dos erros chaves foi que faltou um fimEscolha. Mas tem outros detalhes que precisam ser revistos... Segue um código que fiz alguns ajustes:

algoritmo "Trabalho Final"
// Função: Jogar
// Autor : Luiz Felipe rodrigues da Silva
// Data  : 24/09/2018
var
   tabOrig:vetor[1..5,1..5] de inteiro
   tabRand:vetor[1..5,1..5] de inteiro
   vet    :vetor[1..25] de inteiro
   //{
   //contMov,tam, aux, aux2, i, j, l, c, linha, coluna,tabuleiro, cont,contRes, opcao,ii: inteiro
   //}
   tam      :inteiro //tamanho do tabuleiro
   tabuleiro:inteiro //categoria do tabuleiro
   contMov  :inteiro //contador de movimentos
   contRes  :inteiro //contador de respostas corretas
   aux      :inteiro //auxiliar para troca de posições
   l, c     :inteiro //auxiliares para percorrer as matrizes
   cont     :inteiro //auxiliar para criar a tabuleiro original
   i,j      :inteiro //auxliares para percorrer o vetor
   ii       :inteiro //auxiliar para
   opcao    :inteiro //tecla pressionada para movimentação
inicio
//Escolha do tabuleiro
repita
   escreval("Escolha o modo de jogo:")
   escreval("(1) Fácil")
   escreval("(2) Normall")
   escreval("(3) Difícil")
   leia(tabuleiro)
ate((tabuleiro = 1) ou (tabuleiro = 2) ou (tabuleiro = 3))
limpaTela
//{
//se (tabuleiro = 1) entao
//   tam <- 3
//fimSe
//se (tabuleiro = 2) entao
//   tam <- 4
//fimSe
//se (tabuleiro = 3) entao
//   tam <- 5
//fimSe
//}
se (tabuleiro = 1) entao
   tam <- 3
senao
   se (tabuleiro = 2) entao
      tam <- 4
   senao
      se (tabuleiro = 3) entao
         tam <- 5
      fimSe
   fimSe
fimSe



//Tabela padrão
//{
//escreval("Como a tabele deve ficar")
//}
escreval()
cont <- 0
para l de 1 ate tam faca
   para c de 1 ate tam faca
      //{
      //tabOrig[linha,coluna]<- cont + 1
      //cont <- cont + 1
      //}
      cont <- cont + 1
      tabOrig[l,c] <- cont
   fimPara
fimPara
tabOrig[tam,tam] <- 0

escreval("Como a tabela deve ficar")
para l de 1 ate tam faca
   para c de 1 ate tam faca
      escreva(tabOrig[l,c]," ")
   fimPara
   escreval()
fimPara
escreval()


//Tabela aleatória
//Tabuleiro 3x3
se (tabuleiro = 1) entao
   //{
   //para i de 1 ate 9 faca
   //}
   para i de 1 ate tam*tam faca
      vet[i] <- Randi(9)
      se i > 1 entao
         j <- 1
         enquanto (j < i) faca
            se vet[i] = vet[j] entao
               vet[i] <- randi(9)
               j <- 1
            senao
               j <- j+1
            fimSe
         fimenquanto
      fimSe
      //{
      //ii <- 0
      //para l de 1 ate 3 faca
      //   para c de 1 ate 3 faca
      //      tabRand[l,c] <- vet[1+ii]
      //      ii<- ii + 1
      //   fimPara
      //fimPara
      //}
   fimPara
   ii <- 0
   //{
   //para l de 1 ate 3 faca
   //   para c de 1 ate 3 faca
   //}
   para l de 1 ate tam faca
      para c de 1 ate tam faca
         //{
         //tabRand[l,c] <- vet[1+ii]
         //ii <- ii + 1
         //}
         ii <- ii + 1
         tabRand[l,c] <- vet[ii]
      fimPara
   fimPara

   escreval("-----------------------------------------------------")
   escreval("Faça o movimento do 0 até igualar a tabela padrão")
   escreval()
   para l de 1 ate tam faca
      para c de 1 ate tam faca
         escreva(tabRand[l,c],"")
      fimPara
      escreval()
   fimPara
   escreval("-----------------------------------------------------")
fimSe

contMov <- 0
repita
   escreval("Faça os movimentos com as teclas")
   escreval("  8  ")
   escreval("4 * 6")
   escreval("  2  ")
   escreval()
   repita
      leia(opcao)
      escreval()
   ate ((opcao = 4) ou (opcao = 6) ou (opcao = 2) ou (opcao = 8))
   escolha opcao
      //Movimento esquerda
      caso 4
         contMov <- contMov + 1
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               se (tabRand[l,c] = 0) entao
                  se (c<>1) entao
                     aux            <- tabRand[l,c]
                     tabRand[l,c]   <- tabRand[l,c-1]
                     tabRand[l,c-1] <- aux
                  fimSe
               fimSe
            fimPara
         fimPara
         //{
         //contMov <- contMov + 1
         //}
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               escreva(tabRand[l,c])
            fimPara
            escreval()
         fimPara

      //Movimento para cima
      caso 8
         contMov <- contMov + 1
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               se (l<>1) ENTAO
                  se (tabRand[l,c] = 0) entao
                     aux            <- tabRand[l,c]
                     tabRand[l,c]   <- tabRand[l-1,c]
                     tabRand[l-1,c] <- aux
                  fimSe
               fimSe
            fimPara
         fimPara
      para l de 1 ate tam faca
         para c de 1 ate tam faca
            escreva(tabRand[l,c])
         fimPara
         escreval()
      fimPara
      //Movimento para direita
      caso 6
         contMov <- contMov + 1
         para l de 1 ate 3 faca
            para c de 1 ate 3 faca
               se (c<>tam) ENTAO
                  se (tabRand[l,c] = 0) entao
                     aux            <- tabRand[l,c]
                     tabRand[l,c]   <- tabRand[l,c+1]
                     tabRand[l,c+1] <- aux
                     interrompa
                  fimSe
               fimSe
            fimPara
         fimPara
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               escreva(tabRand[l,c])
            fimPara
            escreval()
         fimPara
      //movimento para baixo
      caso 2
         contMov <- contMov + 1
         para l de 1 ate tam faca
            //{
            //aux2 <- 1
            //{
            para c de 1 ate tam faca
               se (l<>tam) entao
                  se (tabRand[l,c] = 0) entao
                     aux            <- tabRand[l,c]
                     tabRand[l,c]   <- tabRand[l+1,c]
                     tabRand[l+1,c] <- aux
                     //{
                     //aux2 <- aux
                     //}
                  interrompa
                  fimSe
               fimSe
            fimPara
            //{
            //se (l<>tam) entao
            //   se (aux2 = 0) entao
            //      interrompa
            //   fimSe
            //fimSe
            //}
         fimPara
         para l de 1 ate tam faca
            para c de 1 ate tam faca
               escreva(tabRand[l,c])
            fimPara
            escreval()
         fimPara
   fimEscolha //<--FALTOU ESSE COMANDO

   //Verificação com a tabela principal
   contRes <- 0
   para l de 1 ate tam faca
      para c de 1 ate tam faca
         se (tabRand[l,c]=tabOrig[l,c]) entao
            contRes <- contRes + 1
         fimSe
      fimPara
   fimPara
//{
//ate (contRes=tam)
//}
ate (contRes=tam*tam)
escreval("Parabéns!!! Você Venceu!!!")
escreval("Número de tentativas foi: ",contMov)
fimAlgoritmo

 

 

3#

21 horas atrás, Lipeco disse:

Outra coisa, como coloco para a matriz ficar organizada ?
Quando coloco no modo difícil, por exemplo, cria uma matriz 5x5 mas fica todo desorganizado, tentei dar espaço, mas continua..

 

Calma lá. Apenas organize a tabela fácil (1). As faz as outras depois. Será a mesma base!

 

 

 

4#

Sobre as sugestões:

4.1

Em 28/09/2018 às 21:57, Simon Viegas disse:

4#

Você precisa inserir uma proteção para não deixar mover o 0 para além das bordas. 

"Feito". Apenas coloque "essa proteção" antes!!! os para quem ficam dentro do se, não o contrário.

 

4.2

Em 28/09/2018 às 21:57, Simon Viegas disse:

5#

Em vez de imprimir a matriz em cada caso, apenas coloque uma vez depois do escolha ou lá no início do repita.

Falta fazer. Você está repetindo o mesmo código em cada opção sem necessidade.

 

4.3

Em 28/09/2018 às 21:57, Simon Viegas disse:

3#

Essa pesquisa da posição é desnecessária... simplesmente armazene a posição do 0 com duas variáveis. Aí, quando for mover, faz a troca utilizando as variáveis.

Falta fazer!

 

 

***

 

Resumindo: 

- Revisa o código que eu postei. Veja as alterações feitas, caso tenha dúvida sobre qualquer parte é só perguntar. Depois de entender pode apagar os comentários com { } para deixar o código mais limpo.

- Só depois, implementa o 4.2. É simples, mas é importante;

- Após implementa o 4.3.

 

obs.: não tente fazer tudo de uma vez. Como sugerido, vai fazendo uma coisa de cada vez. Só para para um próximo quando finalizar um outro. 

 

Mais pra frente vemos qual é o próximo passo.

 

 

No aguardo.

  • Curtir 2
  • Membro VIP
Postado

ADENDO:
Sobre:

11 horas atrás, Simon Viegas disse:

//Tabela aleatória
//Tabuleiro 3x3
se (tabuleiro = 1) entao
   //{
   //para i de 1 ate 9 faca
   //}
   para i de 1 ate 9 faca
      vet[i] <- Randi(9)
      se i > 1 entao
         j <- 1

 

Como observado, o código ficou igual. No caso, a alteração seria:

//Tabela aleatória
//Tabuleiro 3x3
se (tabuleiro = 1) entao
   //{
   //para i de 1 ate 9 faca
   //}
   para i de 1 ate tam*tam faca
      vet[i] <- Randi(9)
      se i > 1 entao
         j <- 1

 

 

 

  • Curtir 2
  • 2 semanas depois...
Postado

@Lipeco     seu código está com erro no repita , para ver se o número chegou no lugar onde deve estar ,  e você precisa de outro repita para mover os outros números , até que mova todos para o lugar certo , modifiquei o modo como ele compara se o número está no lugar certo , e funcionou mas apenas para o nível fácil , e para os outros níveis precisa construir ,  então seu código modificado seria assim  :

algoritmo "Trabalho Final"
// Função : Jogar
// Autor : Luiz Felipe rodrigues da Silva
// Data : 24/09/2018
var
  vet     : vetor[1..25    ]    de inteiro
  taborig : vetor[1..5,1..5]    de inteiro
  tabrand : vetor[1..5,1..5]    de inteiro
  contmov,tam,aux,aux2,i,j,l,c   : inteiro
  linha,coluna,tabuleiro,cont    : inteiro
  contres,opcao,ii,xix,num,lf,cf : inteiro
procedimento imprime_tabuleiro
inicio
escreval("-----------------------------------------------------")
    escreval("Faça o movimento do ",num," até igualar a tabela padrão")
    escreval()
    para l de 1 ate tam faca
      para c de 1 ate tam faca
        escreva(tabrand[l,c])
        Se (tabuleiro = 3) entao
          escreva("  ")
        fimse
      fimpara
      Se (tabuleiro = 3) entao
        escreva("  ")
      senao
        escreval()
      fimse
    fimpara
    escreval("-----------------------------------------------------")
fimprocedimento
inicio
  //Escolha do tabuleiro
  repita
    Escreval("Escolha o modo de jogo:")
    Escreval("(1) Fácil"              )
    Escreval("(2) Normall"            )
    Escreval("(3) Difícil"            )
    Leia(tabuleiro)
  ate((tabuleiro = 1) ou (tabuleiro = 2) ou (tabuleiro = 3))
  Limpatela
  tam := tabuleiro+2
  lf  := tam
  cf  := lf
  //Tabela padrão
  Escreval("Como a tabela deve ficar")
  Escreval()
  cont <- 1
  para linha de 1 ate tam faca
    para coluna de 1 ate tam faca
      taborig[linha,coluna]<- cont
      cont <- cont + 1
    fimpara
  fimpara
  taborig[tam,tam] <- 0
  para linha de 1 ate tam faca
    para coluna de 1 ate tam faca
      escreva(taborig[linha,coluna]," ")
    fimpara
    escreval()
  fimpara
  escreval()
  //Tabela aleatória
  //Tabuleiro 3x3
  Se tabuleiro = 1 entao
    para i de 1 ate 9 faca
      vet[i] <- Randi(9)
      se i > 1 entao
        j <- 1
        enquanto j < i faca
          se vet[i] = vet[j] entao
            vet[i] <- randi(9)
            j <- 1
          senao
            j <- j+1
          fimse
        fimenquanto
      fimse
      ii <- 0
      para l de 1 ate 3 faca
        para c de 1 ate 3 faca
          tabrand[l,c] <- vet[1+ii]
          ii<- ii + 1
        fimpara
      fimpara
    fimpara
  fimse
  //tabuleiro 4x4
  Se tabuleiro = 2 entao
    tam <- 4
    para i de 1 ate 16 faca
      vet <- Randi 16
      se i > 1 entao
        j <- 1
        enquanto j < i faca
          se vet = vet[j] entao
            vet <- randi(16)
            j <- 1
          senao
            j <- j+1
          fimse
        fimenquanto
      fimse
      ii <- 0
      para l de 1 ate 4 faca
        para c de 1 ate 4 faca
          tabrand[l,c] <- vet[1+ii]
          ii<- ii + 1
        fimpara
      fimpara
    fimpara
  fimse
  //tabuleiro 5x5
  Se (tabuleiro = 3) entao
    tam <- 5
    para i de 1 ate 25 faca
      vet <- Randi 25
      se i > 1 entao
        j <- 1
        enquanto j < i faca
          se vet = vet[j] entao
            vet <- randi 25
            j <- 1
          senao
            j <- j+1
          fimse
        fimenquanto
      fimse
      ii <- 0
      para l de 1 ate 5 faca
        para c de 1 ate 5 faca
          tabrand[l,c] <- vet[1+ii]
          ii<- ii + 1
        fimpara
      fimpara
    fimpara
  fimse
  //escolha dos movimentos
  contmov <- 0
  //O PROBLEMA ESTÀ NESSE REPITA  e no ATE LÁ NO FINAL
  repita
    Repita
      imprime_tabuleiro   // imprimie o tabuleiro
      escreval("Faça os movimentos com as teclas")
      escreval("  8  ")
      escreval("4 * 6")
      escreval("  2  ")
      escreval()
      repita
        leia (opcao)
        escreval()
      ate ((opcao = 4) ou (opcao = 6) ou (opcao = 2) ou (opcao = 8))
      escolha opcao
      //Movimento esquerda
      caso 4
        para l de 1 ate tam faca
          para c de 1 ate tam faca
            se tabrand[l,c] = num entao   // era zero 0
              se c<>1 entao
                aux            <- tabrand[l,c]
                tabrand[l,c]   <- tabrand[l,c-1]
                tabrand[l,c-1] <- aux
              fimse
            fimse
          fimpara
        fimpara
        contmov <- contmov + 1
        para l de 1 ate tam faca
          para c de 1 ate tam faca
            escreva(tabrand[l,c])
          fimpara
          escreval()
        fimpara
        //Movimento para cima
      caso 8
        para l de 1 ate tam faca
          para c de 1 ate tam faca
            se (l<>1) ENTAO
              se tabrand[l,c] = num entao  // era zero 0
                aux <- tabrand[l,c]
                tabrand[l,c] <- tabrand[l-1,c]
                tabrand[l-1,c] <- aux
              fimse
            fimse
          fimpara
        fimpara
        contmov <- contmov + 1
        para l de 1 ate tam faca
          para c de 1 ate tam faca
            escreva(tabrand[l,c])
          fimpara
          escreval()
        fimpara
        //Movimento para direita
      caso 6
        para l de 1 ate 3 faca
          para c de 1 ate 3 faca
            se (c<>tam) ENTAO
              se tabrand[l,c] = num entao   // era zero 0
                aux <- tabrand[l,c]
                tabrand[l,c] <- tabrand[l,c+1]
                tabrand[l,c+1] <- aux
                interrompa
              fimse
            fimse
          fimpara
        fimpara
        contmov <- contmov + 1
        para l de 1 ate tam faca
          para c de 1 ate tam faca
            escreva(tabrand[l,c])
          fimpara
          escreval()
        fimpara
        //movimento para baixo
      caso 2
        para l de 1 ate tam faca
          aux2 <- 1
          para c de 1 ate tam faca
            se (l<>tam) entao
              se tabrand[l,c] = num entao   // era zero 0
                aux <- tabrand[l,c]
                tabrand[l,c] <- tabrand[l+1,c]
                tabrand[l+1,c] <- aux
                aux2 <- aux
                interrompa
              fimse
            fimse
          fimpara
          se(l<>tam) entao
            se (aux2 = num) entao  // era zero 0
              interrompa
            fimse
          fimse
        fimpara
        contmov <- contmov + 1
      fimescolha
    ate tabrand[lf,cf] = num  // num é o qual número que vai mover
    se(tabuleiro = 1) entao
      se num = 0 entao        //posiciona em qual linha e coluna está o número
        cf := 0               // é a coluna onde ficará o número que está movendo
      fimse
      se num < 3 entao
        lf:=1                // é a linha onde ficará o número que está movendo
        cf := cf + 1         // é a coluna onde ficará o número que está movendo
      senao
        se num < 6 entao
          se num = 3 entao
            cf := 0          // é a coluna onde ficará o número que está movendo
          fimse
          lf := 2            // é a linha onde ficará o número que está movendo
          cf := cf + 1       // é a coluna onde ficará o número que está movendo
        senao
          se num = 6 entao
            cf := 0          // é a coluna onde ficará o número que está movendo
          fimse
          lf := 3            // é a linha onde ficará o número que está movendo
          cf := cf + 1       // é a coluna onde ficará o número que está movendo
        fimse
      fimse
    senao
      //construir para tabuleiro = 2 e 3
    fimse
    num := num + 1
    limpatela
    se num < 9 entao
      escreval("========================================")
      escreval("    Agora Será A Vez Do Número ---> ",num)
      escreval("========================================")
    fimse
  ate num = 9  // ate mover todos os números
  escreval("   +------------------------------------------+")
  escreval("   |        Completou Os Movimentos           |")
  para l de 1 ate tam faca
    escreva("   |               ")
    para c de 1 ate tam faca
      escreva(tabrand[l,c])
    fimpara
    escreva("                     |")
    escreval
  fimpara
  escreval("   |                                          |")
  escreval("   +------------------------------------------+")
  escreval
  Escreval("           Parabéns!!! Você Venceu!!!")
  escreval("                                      ----")
  escreval("           Número de tentativas foi : ",contmov," ")
  escreval("                                      ----")
  escreval
fimalgoritmo

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!