Ir ao conteúdo
  • Cadastre-se

VisualG Programar com Procedimentos - CLEAN CODE


Posts recomendados

Senhores, conto com a ajuda de vocês. (ESSE É MEU PRIMEIRO POST. POR FAVOR, DESCONSIDEREM QUALQUER ERRO)

BREVE INTRODUÇÃO:
Eu comecei a aprender programação há 10 dias (06/06/2019) e estou aprendendo por enquanto por um PDF de Lógica de Programação e vídeos no YouTube. Aprendi ontem (15/06/2019) em um vídeo sobre o CLEAN CODE (dividir o código em várias funções para facilitar a leitura do código por futuros programadores que derem manutenção nele, como também facilitar a correção de bugs). Eu ainda não sei fazer função direito (ainda não entendi tão bem), mas eu aprendi como fazer procedimento (similar à função, porém sem retorno) e eu fiz hoje um JOGO DA VELHA todo com base nessa ideia de CLEAN CODE e procedimentos.

Gostaria que vocês olhassem o meu algoritmo (por mais que ainda seja em PORTUGOL) para eu saber se estou aprendendo e programando corretamente.

Obs.: o JOGO DA VELHA funciona perfeitamente. (Então não quero que procurem erros, pois está funcionando bem, mas quero que vejam se esse estilo de programação, dividindo em procedimentos e chamando os procedimentos no algoritmo principal, é o jeito certo de programar).
1) Se esse for o jeito certo, continuarei aprendendo e programando assim.
2) Se esse não for o jeito certo, por favor, poderiam me orientar qual a melhor maneira de programar com base no CLEAN CODE?

SEGUE ABAIXO TODO O ALGORITMO E OS PROCEDIMENTOS
 

Algoritmo "JOGO DA VELHA COM PROCEDIMENTOS" //aqui se inicia o algoritmo

Var //aqui são as variáveis globais
nomeJogador, simboloJogador : VETOR [1..2] DE CARACTERE
tabela : VETOR [1..3,1..3] DE CARACTERE
contador, linha, coluna : INTEIRO

PROCEDIMENTO jogadores() //nomeando os jogadores.
  VAR

  INICIO
    ESCREVAL ()
    ESCREVAL ("- JOGADORES")
    ESCREVA ()
    PARA contador DE (1) ATE (2) FACA
      ESCREVA ("Digite o nome do(a)", contador,"º jogador(a): ")
      LEIA (nomeJogador[contador])
    FIMPARA
FIMPROCEDIMENTO

PROCEDIMENTO simbolos() //os símbolos dos jogadores.
  VAR

  INICIO
    simboloJogador[1] := "X"
    simboloJogador[2] := "O"
    ESCREVAL ()
    PARA contador DE (1) ATE (2) FACA
      ESCREVAL ("O(A) jogador(a) ", nomeJogador[contador]," tem por símbolo: ", simboloJogador[contador],".")
    FIMPARA
    ESCREVAL ()
FIMPROCEDIMENTO

PROCEDIMENTO tabuleiroEmBranco() //o tabuleiro.
  VAR
  contadorLinha, contadorColuna : INTEIRO
  INICIO
    PARA contadorLinha DE (1) ATE (3) FAÇA
      PARA contadorColuna DE (1) ATE (3) FAÇA
        tabela[contadorLinha,contadorColuna] := "_"
        SE (contadorlinha = 3) ENTAO
          tabela[contadorLinha,contadorColuna] := " "
        FIMSE
      FIMPARA
    FIMPARA
  tabuleiroAtualizado()
FIMPROCEDIMENTO

PROCEDIMENTO tabuleiroAtualizado() //atualização do tabuleiro conforme os jogadores fizerem as jogadas.
  VAR

  INICIO
    ESCREVAL ()
    ESCREVAL (" 1 2 3 ")
    ESCREVAL ("1 _",tabela[1,1],"_|_",tabela[1,2],"_|_",tabela[1,3],"_")
    ESCREVAL ("2 _",tabela[2,1],"_|_",tabela[2,2],"_|_",tabela[2,3],"_")
    ESCREVAL ("3 ",tabela[3,1]," | ",tabela[3,2]," | ",tabela[3,3]," ")
FIMPROCEDIMENTO

PROCEDIMENTO rodadas() //as rodadas com as jogadas dos dois jogadores.
  VAR
  jogadas : INTEIRO
  INICIO
    REPITA
      jogadas := jogadas + 1
      PARA contador DE (1) ATE (2) FACA
        ESCREVAL ()
        ESCREVA ("Jogador ", nomeJogador[contador],", em qual LINHA fará sua jogada? ")
        LEIA (linha)
        erroLinha()
        ESCREVA ("Jogador ", nomeJogador[contador],", em qual COLUNA fará sua jogada? ")
        LEIA (coluna)
        erroColuna()
        erroTabelaPreenchida()
        tabela[linha,coluna] := simboloJogador[contador]
        tabuleiroAtualizado()
        vencedor()
        SE (jogadas = 5) E (contador = 1) ENTAO
          ESCREVAL ()
          ESCREVAL ("DEU VELHA! HA HA HA HA!")
          interrompa
        FIMSE
      FIMPARA
    ATE (jogadas = 5)
FIMPROCEDIMENTO

PROCEDIMENTO erroLinha() //identifica erro se a linha for diferente de 1, 2 ou 3.
  VAR

  INICIO
    SE ((linha <> 1) E (linha <> 2) E (linha <> 3)) ENTAO
      ESCREVAL ()
      ESCREVAL ("ERRO: linha inválida.")
      ESCREVA ("Jogador ", nomeJogador[contador],", em qual LINHA fará sua jogada? ")
      LEIA (linha)
    FIMSE
FIMPROCEDIMENTO

PROCEDIMENTO erroColuna() //identifica erro se a coluna for diferente de 1, 2 ou 3.
  VAR

  INICIO
    SE ((coluna <> 1) E (coluna <> 2) E (coluna <> 3)) ENTAO
      ESCREVAL ()
      ESCREVAL ("ERRO: coluna inválida.")
      ESCREVA ("Jogador ", nomeJogador[contador],", em qual COLUNA fará sua jogada? ")
      LEIA (coluna)
    FIMSE
FIMPROCEDIMENTO

PROCEDIMENTO erroTabelaPreenchida() //identifica erro se o campo da tabela já estiver preenchido.
  VAR

  INICIO
    SE ((tabela[linha,coluna] = "X") OU (tabela[linha,coluna] = "O")) ENTAO
      ESCREVAL ()
      ESCREVAL ("ERRO: essa linha e coluna já estão preenchidas.")
      ESCREVA ("Jogador ", nomeJogador[contador],", em qual LINHA fará sua jogada? ")
      LEIA (linha)
      ESCREVA ("Jogador ", nomeJogador[contador],", em qual COLUNA fará sua jogada? ")
      LEIA (coluna)
    FIMSE
FIMPROCEDIMENTO



PROCEDIMENTO vencedor() //classificando um vencedor
  VAR
  msgVencedor : CARACTERE
  INICIO
    msgVencedor := ("TEMOS UM(A) VENCEDOR(A): o(a) Jogador(a) " + (nomeJogador[contador]) +"!")
    //vencedor em linhas
    SE (tabela[1,1] = simboloJogador[contador]) E (tabela[1,2] = simboloJogador[contador]) E (tabela[1,3] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
    SE (tabela[2,1] = simboloJogador[contador]) E (tabela[2,2] = simboloJogador[contador]) E (tabela[2,3] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
    SE (tabela[3,1] = simboloJogador[contador]) E (tabela[3,2] = simboloJogador[contador]) E (tabela[3,3] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
    //vencedor em colunas
    SE (tabela[1,1] = simboloJogador[contador]) E (tabela[2,1] = simboloJogador[contador]) E (tabela[3,1] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
    SE (tabela[1,2] = simboloJogador[contador]) E (tabela[2,2] = simboloJogador[contador]) E (tabela[3,2] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
    SE (tabela[1,3] = simboloJogador[contador]) E (tabela[2,3] = simboloJogador[contador]) E (tabela[3,3] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
    //vencedor em diagonal
    SE (tabela[1,1] = simboloJogador[contador]) E (tabela[2,2] = simboloJogador[contador]) E (tabela[3,3] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
    SE (tabela[1,3] = simboloJogador[contador]) E (tabela[2,2] = simboloJogador[contador]) E (tabela[3,1] = simboloJogador[contador]) ENTAO
      ESCREVAL ()
      ESCREVAL (msgVencedor)
      fimalgoritmo
    FIMSE
FIMPROCEDIMENTO

Inicio //aqui é o algoritmo principal chamando apenas os procedimentos.

  ESCREVAL ("JOGO DA VELHA - TOP1000")
  jogadores()
  simbolos()
  ESCREVAL (nomeJogador[1]," x ", nomeJogador[2]," - QUE COMECEM OS JOGOS!")
  tabuleiroEmBranco()
  rodadas()

Fimalgoritmo //aqui termina o algoritmo

 

Agradeço a todos vocês que puderem me orientar se estou programando corretamente ou se é melhor programar tudo junto dentro do algoritmo principal sem esses procedimentos.

 

Att,

Ariel Souto

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

  • Membro VIP

@Ariel Souto Olá;

 

Sobre:

Em 16/06/2019 às 11:54, Ariel Souto disse:

Gostaria que vocês olhassem o meu algoritmo (por mais que ainda seja em PORTUGOL) para eu saber se estou aprendendo e programando corretamente.

 

A ideia de "dividir o código em métodos (funções e procedimentos)" me parece que está no caminho correto. Mas existem alguns probleminhas, pelo menos em alguns usos delas e também nas suas nomenclaturas... comento mais abaixo.

 

 

Sobre:

Em 16/06/2019 às 11:54, Ariel Souto disse:

Obs.: o JOGO DA VELHA funciona perfeitamente. (Então não quero que procurem erros, pois está funcionando bem, mas quero que vejam se esse estilo de programação, dividindo em procedimentos e chamando os procedimentos no algoritmo principal, é o jeito certo de programar).
1) Se esse for o jeito certo, continuarei aprendendo e programando assim.
2) Se esse não for o jeito certo, por favor, poderiam me orientar qual a melhor maneira de programar com base no CLEAN CODE?

 

Então, "perfeitamente" é uma palavra muito forte... é um misto de subjetividade com impossibilidade (como dizem: "nem Jesus foi/é"), em fim...

 

Em relação ao tal "probleminha", experimente digitar uma coordenada errada duas vezes e veja o que acontece. :)

Seria necessário rever essa parte. Uma boa alternativa seria utilizar um laço de repetição para ficar lendo uma resposta enquanto for inserido uma resposta errada.

 

Outro aspecto base seria um melhor uso de nomenclaturas. Por exemplo:

 

- obterNomesJogadores(), em vez de jogadores();

- definirApresentarSimbolosJogadores(), em vez de simbolos();

- redefinirRespostasJogadores(), em vez de tabuleiroEmBranco();

- redesenharTabuleiroComResposta(), em vez tabuleiroAtualizado();

- validarColuna(), em vez erroColuna().

- Etc

 

 

No aguardo.

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

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