/pt-pt/brainfuck-pt.html.markdown

https://gitlab.com/perlilja/learnxinyminutes-docs · Markdown · 84 lines · 66 code · 18 blank · 0 comment · 0 complexity · 756708281d84132e9af16b5a0b63f778 MD5 · raw file

  1. ---
  2. language: brainfuck
  3. contributors:
  4. - ["Prajit Ramachandran", "http://prajitr.github.io/"]
  5. - ["Mathias Bynens", "http://mathiasbynens.be/"]
  6. translators:
  7. - ["Joao Marques", "http://github.com/mrshankly"]
  8. lang: pt-pt
  9. ---
  10. Brainfuck (não capitalizado excepto no início de uma frase) é uma linguagem de
  11. programação Turing-completa extremamente simples com apenas 8 comandos.
  12. ```
  13. Qualquer caractere excepto "><+-.,[]" (não contar com as aspas) é ignorado.
  14. Brainfuck é representado por um vector com 30 000 células inicializadas a zero
  15. e um ponteiro de dados que aponta para a célula actual.
  16. Existem 8 comandos:
  17. + : Incrementa o valor da célula actual em 1.
  18. - : Decrementa o valor da célula actual em 1.
  19. > : Move o ponteiro de dados para a célula seguinte (célula à direita).
  20. < : Move o ponteiro de dados para a célula anterior (célula à esquerda).
  21. . : Imprime o valor ASCII da célula actual. (ex. 65 = 'A').
  22. , : Lê um único caractere para a célula actual.
  23. [ : Se o valor da célula actual for zero, salta para o ] correspondente.
  24. Caso contrário, passa para a instrução seguinte.
  25. ] : Se o valor da célula actual for zero, passa para a instrução seguinte.
  26. Caso contrário, volta para a instrução relativa ao [ correspondente.
  27. [ e ] formam um ciclo while. Obviamente, devem ser equilibrados.
  28. Vejamos alguns programas básicos de brainfuck.
  29. ++++++ [ > ++++++++++ < - ] > +++++ .
  30. Este programa imprime a letra 'A'. Primeiro incrementa a célula #1 para 6.
  31. A célula #1 será usada num ciclo. Depois é iniciado o ciclo ([) e move-se
  32. o ponteiro de dados para a célula #2. Incrementa-se o valor da célula #2 10
  33. vezes, move-se o ponteiro de dados de volta para a célula #1, e decrementa-se
  34. a célula #1. Este ciclo acontece 6 vezes (são necessários 6 decrementos para
  35. a célula #1 chegar a 0, momento em que se salta para o ] correspondente,
  36. continuando com a instrução seguinte).
  37. Nesta altura encontramo-nos na célula #1, cujo valor é 0, enquanto a célula #2
  38. tem o valor 60. Movemos o ponteiro de dados para a célula #2, incrementa-se 5
  39. vezes para um valor final de 65, é então impresso o valor da célula #2. Ao valor
  40. 65 corresponde o caractere 'A' em ASCII, 'A' é então impresso para o terminal.
  41. , [ > + < - ] > .
  42. Este programa lê um caractere e copia o seu valor para a célula #1. Um ciclo é
  43. iniciado. Movemos o ponteiro de dados para a célula #2, incrementamos o valor na
  44. célula #2, movemos o ponteiro de dados de volta para a célula #1, finalmente
  45. decrementamos o valor na célula #1. Isto continua até o valor na célula #1 ser
  46. igual a 0 e a célula #2 ter o antigo valor da célula #1. Como o ponteiro de
  47. dados está a apontar para a célula #1 no fim do ciclo, movemos o ponteiro para a
  48. célula #2 e imprimimos o valor em ASCII.
  49. Os espaços servem apenas para tornar o programa mais legível. Podemos escrever
  50. o mesmo programa da seguinte maneira:
  51. ,[>+<-]>.
  52. Tenta descobrir o que este programa faz:
  53. ,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
  54. Este programa lê dois números e multiplica-os.
  55. Basicamente o programa pede dois caracteres ao utilizador. Depois é iniciado um
  56. ciclo exterior controlado pelo valor da célula #1. Movemos o ponteiro de dados
  57. para a célula #2 e inicia-se o ciclo interior controlado pelo valor da célula
  58. #2, incrementando o valor da célula #3. Contudo, existe um problema, no final do
  59. ciclo interior a célula #2 tem o valor 0. Para resolver este problema o valor da
  60. célula #4 é também incrementado e copiado para a célula #2.
  61. ```
  62. Fica então explicado brainfuck. Simples, não? Por divertimento podes escrever os
  63. teus próprios programas em brainfuck, ou então escrever um interpretador de
  64. brainfuck noutra linguagem. O interpretador é relativamente fácil de se
  65. implementar, mas se fores masoquista, tenta escrever um interpretador de
  66. brainfuck em brainfuck.