# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# ssantos <ssantos@web.de>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2020-09-25 22:29+0200\n"
"PO-Revision-Date: 2020-10-11 16:51+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/"
"programmers-learning-machine/missions/pt/>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3-dev\n"

#. type: Content of: <h1>
#: src/plm/universe/bugglequest/BuggleWorld.html:2
msgid "BuggleWorld"
msgstr "BuggleWorld"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/bugglequest/BuggleWorld.html:3
msgid ""
"This world was invented by Lyn Turbak, at Wellesley College. It is full of "
"Buggles, little animals understanding simple orders, and offers numerous "
"possibilities of interaction with the world: taking or dropping objects, "
"paint the ground, hit walls, etc."
msgstr ""
"Este mundo foi inventado por Lyn Turbak, na Wellesley College. Está cheio de "
"Buggles, pequenos animais que entendem ordens simples e oferece numerosas "
"possiblidades de interação com o mundo: apanhar e soltar objetos, pintar o "
"chão, bater em paredes, etc."

#. type: Content of: <h2>
#: src/plm/universe/bugglequest/BuggleWorld.html:8
msgid "Methods understood by buggles"
msgstr "Métodos que os buggles entendem"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:10
msgid "<b>Moving</b>"
msgstr "<b>A mover</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:10
msgid "(See also the note on exceptions, below)"
msgstr "(Veja também a nota sobre exceções, abaixo)"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:11
#: src/lessons/turmites/universe/TurmiteWorld.html:10
msgid "<b>Turn left"
msgstr "<b>Virar à esquerda"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:11
#: src/lessons/turmites/universe/TurmiteWorld.html:10
msgid "Turn right"
msgstr "Virar à direita"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:11
#: src/lessons/turmites/universe/TurmiteWorld.html:10
msgid "Turn back"
msgstr "Dar meia volta"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:11
#: src/lessons/turmites/universe/TurmiteWorld.html:10
msgid "Moving forward"
msgstr "Mover para a frente"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:11
#: src/lessons/turmites/universe/TurmiteWorld.html:10
msgid "Moving back</b>"
msgstr "Mover para trás</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:12
#: src/lessons/turmites/universe/TurmiteWorld.html:11
msgid "[!java|c]void [/!]left()"
msgstr "[!java|c]void [/!]left()"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:13
#: src/lessons/turmites/universe/TurmiteWorld.html:11
msgid "[!java|c]void [/!]right()"
msgstr "[!java|c]void [/!]right()"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:14
#: src/lessons/turmites/universe/TurmiteWorld.html:11
msgid "[!java|c]void [/!]back()"
msgstr "[!java|c]void [/!]back()"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:15
msgid ""
"[!java|c]void [/!][!python|java|scala]forward()[/!][!c]stepForward()[/!] or "
"[!java|c]void [/!]forward([!java|c]int [/!]steps[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!][!python|java|scala]forward()[/!][!c]stepForward()[/!] or "
"[!java|c]void [/!]forward([!java|c]int [/!]steps[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:16
msgid ""
"[!java|c]void [/!][!python|java|scala]backward()[/!][!c]stepBackward()[/!] "
"or [!java]void [/!]backward([!java|c]int [/!]steps[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!][!python|java|scala]backward()[/!][!c]stepBackward()[/!] "
"or [!java]void [/!]backward([!java|c]int [/!]steps[!scala]:Int[/!])"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "<b>Get X coordinate"
msgstr "<b>Obter coordenada X"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "Get Y coordinate"
msgstr "Obter coordenada Y"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "Set X coordinate"
msgstr "Ajustar coordenada X"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "Set Y coordinate"
msgstr "Ajustar coordenada Y"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "Set position</b>"
msgstr "Ajustar posição</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:18
msgid "[!java|c]int [/!]getX()[!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getX()[!scala]:Int[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:19
msgid "[!java|c]int [/!]getY()[!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getY()[!scala]:Int[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:20
msgid "[!java|c]void [/!]setX([!java|c]int [/!]x[!scala]:Int[/!])"
msgstr "[!java|c]void [/!]setX([!java|c]int [/!]x[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:21
msgid "[!java|c]void [/!]setY([!java|c]int [/!]y[!scala]:Int[/!])"
msgstr "[!java|c]void [/!]setY([!java|c]int [/!]y[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:22
msgid ""
"[!java|c]void [/!]setPos([!java|c]int [/!]x[!scala]:Int[/!], [!java|c]int "
"[/!]y[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!]setPos([!java|c]int [/!]x[!scala]:Int[/!], [!java|c]int "
"[/!]y[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:23
msgid ""
"Note that the point (0,0) is on the top left corner, as it is often the case "
"in Computer Science."
msgstr ""
"Observe que o ponto (0,0) está no canto superior esquerdo, o que é comum em "
"ciência da computação."

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:25
msgid "<b>Information on the buggle</b>"
msgstr "<b>Informações sobre o buggle</b>"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:26
msgid "<b>Get the color of the body"
msgstr "<b>Obter a cor do corpo"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:26
msgid "Set the color of the body</b>"
msgstr "Ajustar a cor do corpo</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:27
msgid "[!java|c]Color [/!]getBodyColor()[!scala]:Color[/!]"
msgstr "[!java|c]Color [/!]getBodyColor()[!scala]:Color[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:28
msgid "[!java|c]void [/!]setBodyColor([!java|c]Color [/!]c[!scala]:Color[/!])"
msgstr "[!java|c]void [/!]setCorDoCorpo([!java|c]Cor [/!]c[!scala]:Cor[/!])"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:29
msgid "<b>Look for a wall forward"
msgstr "<b>Procura por uma parede à frente"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:29
msgid "Look for a wall backward</b>"
msgstr "Procura por uma parede atrás</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:30
msgid "[!java]boolean [/!][!c]int [/!]isFacingWall()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isFacingWall()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:31
msgid "[!java]boolean [/!][!c]int [/!]isBackingWall()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isBackingWall()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:32
msgid "<b>Get heading"
msgstr "<b>Obter direção"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:32
msgid "Set heading</b>"
msgstr "Ajustar direção</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:32
msgid "valid directions are:"
msgstr "direções válidas são:"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:33
msgid "[!java|c]Direction [/!]getDirection()[!scala]:Direction[/!]"
msgstr "[!java|c]Direction [/!]getDirection()[!scala]:Direction[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:34
msgid ""
"[!java|c]void [/!]setDirection([!java|c]Direction "
"[/!]dir[!scala]:Direction[/!])"
msgstr ""
"[!java|c]void [/!]ajustaDireção([!java|c]Direção [/!]dir[!scala]:Direção[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:35
msgid ""
"[!scala|java|python]Direction.[/!]NORTH, "
"[!scala|java|python]Direction.[/!]EAST, "
"[!scala|java|python]Direction.[/!]SOUTH and "
"[!scala|java|python]Direction.[/!]WEST"
msgstr ""
"[!scala|java|python]Direção.[/!]NORTE, [!scala|java|python]Direção.[/!]"
"LESTE, [!scala|java|python]Direção.[/!]SUL e "
"[!scala|java|python]Direção.[/!]OESTE"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:36
msgid "Check whether the buggle is currently <b>selected in the interface</b>"
msgstr "Verifica se o buggle está atualmente <b>selecionado na interface</b>"

#. type: Content of: <pre>
#: src/plm/universe/bugglequest/BuggleWorld.html:37
#: src/plm/universe/turtles/TurtleWorld.html:76
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:27
#, no-wrap
msgid "[!java]boolean [/!][!c]int [/!]isSelected()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isSelected()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:39
msgid "<b>About the brush</b>"
msgstr "<b>Sobre o pincel</b>"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:40
msgid "<b>Brush down"
msgstr "<b>Abaixar pincel"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:40
msgid "Brush up"
msgstr "Levantar pincel"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:40
msgid "Get brush position</b>"
msgstr "Obter a posição do pincel"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:41
msgid "[!java|c]void [/!]brushUp()"
msgstr "[!java|c]void [/!]brushUp()"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:42
msgid "[!java|c]void [/!]brushDown()"
msgstr "[!java|c]void [/!]brushDown()"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:43
msgid "[!java]boolean [/!][!c]int [/!]isBrushDown()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isBrushDown()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:44
msgid "<b>Change the brush color"
msgstr "<b>Muda a cor do pincel"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:44
msgid "Get the color of the brush</b>"
msgstr "Obtém a cor do pincel</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:45
msgid "[!java|c]void [/!]setBrushColor([!java|c]Color [/!]c[!scala]:Color[/!])"
msgstr ""
"[!java|c]void [/!]setCorDoPincel([!java|c]Color [/!]c[!scala]:Color[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:46
msgid "[!java|c]Color [/!]getBrushColor()[!scala]:Color[/!]"
msgstr "[!java|c]Color [/!]getBrushColor()[!scala]:Color[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:48
msgid "<b>Interacting with the world</b>"
msgstr "<b>A interagir com o mundo</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:49
#: src/lessons/turmites/universe/TurmiteWorld.html:15
msgid "<b>Get the color of the ground</b>"
msgstr "<b>Obtém a cor do chão</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:50
#: src/lessons/turmites/universe/TurmiteWorld.html:15
msgid "[!java|c]Color [/!]getGroundColor()[!scala]:Color[/!]"
msgstr "[!java|c]Color [/!]getGroundColor()[!scala]:Color[/!]"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:52
msgid "<b>Look for a baggle on the ground"
msgstr "<b>Procura por um \"baggle\" no chão"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:52
msgid "Look for a baggle in bag"
msgstr "Procura por um \"baggle\" na bolsa"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:52
msgid "Pickup a baggle"
msgstr "Apanhar um \"baggle\""

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:52
msgid "Drop a baggle</b>"
msgstr "Solta um \"baggle\"</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:53
msgid "(see the note on exceptions)"
msgstr "(veja a nota sobre exceções)"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:54
msgid "[!java]boolean [/!][!c]int [/!]isOverBaggle()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isOverBaggle()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:55
msgid "[!java]boolean [/!][!c]int [/!]isCarryingBaggle()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isCarryingBaggle()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:56
msgid "[!java]void [/!]pickupBaggle()"
msgstr "[!java]void [/!]pickupBaggle()"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:57
msgid "[!java]void [/!]dropBaggle()"
msgstr "[!java]void [/!]dropBaggle()"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:58
#: src/plm/universe/bugglequest/BuggleWorld.html:70
#: src/plm/universe/bugglequest/BuggleWorld.html:71
#: src/plm/universe/bugglequest/BuggleWorld.html:72
#: src/plm/universe/bugglequest/BuggleWorld.html:73
#: src/plm/universe/bugglequest/BuggleWorld.html:74
#: src/plm/universe/bugglequest/BuggleWorld.html:75
#: src/plm/universe/bugglequest/BuggleWorld.html:76
#: src/plm/universe/bugglequest/BuggleWorld.html:77
#: src/plm/universe/bugglequest/BuggleWorld.html:78
#: src/plm/universe/bugglequest/BuggleWorld.html:79
#: src/plm/universe/bugglequest/BuggleWorld.html:80
#: src/plm/universe/bugglequest/BuggleWorld.html:81
#: src/plm/universe/bugglequest/BuggleWorld.html:82
#: src/lessons/welcome/Main.html:9 src/lessons/welcome/Main.html:92
#: src/lessons/welcome/Main.html:175 src/lessons/welcome/Main.html:255
#: src/lessons/welcome/Main.html:349 src/lessons/welcome/Main.html:429
#: src/lessons/welcome/Main.html:469
#: src/plm/universe/turtles/TurtleWorld.html:82
#: src/plm/universe/turtles/TurtleWorld.html:83
#: src/plm/universe/turtles/TurtleWorld.html:84
#: src/plm/universe/turtles/TurtleWorld.html:85
#: src/plm/universe/turtles/TurtleWorld.html:86
#: src/plm/universe/turtles/TurtleWorld.html:87
#: src/plm/universe/turtles/TurtleWorld.html:88
#: src/plm/universe/turtles/TurtleWorld.html:89
#: src/plm/universe/turtles/TurtleWorld.html:90
#: src/plm/universe/turtles/TurtleWorld.html:91
#: src/plm/universe/turtles/TurtleWorld.html:92
#: src/plm/universe/turtles/TurtleWorld.html:93
#: src/plm/universe/turtles/TurtleWorld.html:94
msgid "&nbsp;"
msgstr "&nbsp;"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:60
msgid "<b>Look for a message"
msgstr "<b>Procura por uma mensagem"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:60
msgid "Add a message"
msgstr "Adiciona uma mensagem"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:60
msgid "Read the message"
msgstr "Lê a mensagem"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:60
msgid "Erase the message</b>"
msgstr "Apaga a mensagem</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:61
msgid "[!java]boolean [/!][!c]int [/!]isOverMessage()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isOverMessage()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:62
msgid ""
"[!java]void [/!]writeMessage([!java]String [/!][!c]char* "
"[/!]msg[!scala]:String[/!])"
msgstr ""
"[!java]void [/!]escreverMensagem([!java]String [/!][!c]char* "
"[/!]msg[!scala]:String[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:63
msgid "[!java]String [/!][!c]char* [/!]readMessage()[!scala]:String[/!]"
msgstr "[!java]String [/!][!c]char* [/!]readMessage()[!scala]:String[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:64
msgid "[!java]void [/!]clearMessage()"
msgstr "[!java]void [/!]clearMessage()"

#. type: Content of: <h2>
#: src/plm/universe/bugglequest/BuggleWorld.html:67
#: src/plm/universe/turtles/TurtleWorld.html:79
msgid "Valid colors"
msgstr "Cores válidas"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:69
#: src/plm/universe/turtles/TurtleWorld.html:81
msgid "Name"
msgstr "Nome"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:69
#: src/plm/universe/turtles/TurtleWorld.html:81
msgid "Color"
msgstr "Cor"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:70
#: src/plm/universe/turtles/TurtleWorld.html:82
msgid "[!scala|java|python]Color.[/!]black"
msgstr "[!scala|java|python]Cor.[/!]black"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:71
#: src/plm/universe/turtles/TurtleWorld.html:83
msgid "[!scala|java|python]Color.[/!]blue"
msgstr "[!scala|java|python]Cor.[/!]azul"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:72
#: src/plm/universe/turtles/TurtleWorld.html:84
msgid "[!scala|java|python]Color.[/!]cyan"
msgstr "[!scala|java|python]Cor.[/!]ciano"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:73
#: src/plm/universe/turtles/TurtleWorld.html:85
msgid "[!scala|java|python]Color.[/!]darkGray"
msgstr "[!scala|java|python]Cor.[/!]cinzentoEscuro"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:74
#: src/plm/universe/turtles/TurtleWorld.html:86
msgid "[!scala|java|python]Color.[/!]gray"
msgstr "[!scala|java|python]Cor.[/!]cinzento"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:75
#: src/plm/universe/turtles/TurtleWorld.html:87
msgid "[!scala|java|python]Color.[/!]green"
msgstr "[!scala|java|python]Cor.[/!]verde"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:76
#: src/plm/universe/turtles/TurtleWorld.html:88
msgid "[!scala|java|python]Color.[/!]lightGray"
msgstr "[!scala|java|python]Cor.[/!]cinzentoClaro"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:77
#: src/plm/universe/turtles/TurtleWorld.html:89
msgid "[!scala|java|python]Color.[/!]magenta"
msgstr "[!scala|java|python]Cor.[/!]magenta"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:78
#: src/plm/universe/turtles/TurtleWorld.html:90
msgid "[!scala|java|python]Color.[/!]orange"
msgstr "[!scala|java|python]Cor.[/!]laranja"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:79
#: src/plm/universe/turtles/TurtleWorld.html:91
msgid "[!scala|java|python]Color.[/!]pink"
msgstr "[!scala|java|python]Cor.[/!]rosa"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:80
#: src/plm/universe/turtles/TurtleWorld.html:92
msgid "[!scala|java|python]Color.[/!]red"
msgstr "[!scala|java|python]Cor.[/!]vermelho"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:81
#: src/plm/universe/turtles/TurtleWorld.html:93
msgid "[!scala|java|python]Color.[/!]white"
msgstr "[!scala|java|python]Cor.[/!]branco"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:82
#: src/plm/universe/turtles/TurtleWorld.html:94
msgid "[!scala|java|python]Color.[/!]yellow"
msgstr "[!scala|java|python]Cor.[/!]amarelo"

#. type: Content of: <h2>
#: src/plm/universe/bugglequest/BuggleWorld.html:85
msgid "Note on exceptions"
msgstr "Nota sobre exceções"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/bugglequest/BuggleWorld.html:86
msgid ""
"Regular buggles throw a BuggleWallException exception if you ask them to "
"traverse a wall.  They throw a NoBaggleUnderBuggleException exception if you "
"ask them to pickup a baggle from an empty cell, or a "
"AlreadyHaveBaggleException exception if they already carry a baggle.  Trying "
"to drop a baggle on a cell already containing one throws an "
"AlreadyHaveBaggleException exception.  Dropping a baggle when you have none "
"throws a DontHaveBaggleException."
msgstr ""
"Buggles normais lançam uma exceção BuggleWallException se os pede atravessar "
"uma parede.  Lançam uma exceção NoBaggleUnderBuggleException se os pede "
"tirar um \"baggle\" de uma célula vazia, ou uma exceção "
"AlreadyHaveBaggleException se eles já carregam um \"baggle\".  Tentar soltar "
"um \"baggle\" numa célula que já contém outro lança uma exceção "
"AlreadyHaveBaggleException.  Soltar um \"baggle\" quando não tem nenhum "
"lança uma DontHaveBaggleException."

#. type: Content of: <p>
#: src/plm/universe/bugglequest/BuggleWorld.html:93
msgid ""
"SimpleBuggles (ie, the one used in first exercises) display an error message "
"on problem so that you don't need to know what an exception is."
msgstr ""
"SimpleBuggles (ie, aqueles usados nos primeiros exercícios) exibem uma "
"mensagem de erro num problema de forma que não precise saber o que é uma "
"exceção."

#. type: Content of: <h1>
#: src/plm/universe/bat/BatWorld.html:2
msgid "BatWorld"
msgstr "BatWorld"

#. type: Content of: <p>
#: src/plm/universe/bat/BatWorld.html:4
msgid ""
"This world is a simplistic testing environment largely inspired from the "
"http://codingbat.com invented by Nick Parlente."
msgstr ""
"Este mundo é um ambiente de testes simplista largamente inspirado no http://"
"codingbat.com criado por Nick Parlente."

#. type: Content of: <p>
#: src/plm/universe/bat/BatWorld.html:7
msgid ""
"The typical exercises are very short ones, aiming at improving the tactical "
"programming abilities of the students. That is to say that you will be "
"presented a quite long list of very little exercises about rather simple "
"things. The idea is to train you on these issues until they become automatic "
"to you."
msgstr ""
"Os exercícios são bem curtos e têm como objetivo melhorar as habilidades de "
"programação tática dos estudantes. Isto significa que irá ser apresentado a "
"uma longa lista de pequenos exercícios sobre coisas simples. A ideia é "
"treinar estes aspectos simples até que eles fiquem automáticos para si."

#. type: Content of: <p>
#: src/plm/universe/bat/BatWorld.html:13
msgid ""
"In contrary to the other worlds, the BatWorld does not provide any fancy "
"abstraction nor visualization. You have to fill a function, which gets "
"called for a bunch of parameter sets, and that's it."
msgstr ""
"Ao contrário dos outros mundos, o \"BatWorld\" não fornece qualquer "
"abstração ou visualização legal. Tem simplesmente que preencher uma função, "
"que é chamada com um conjunto de parâmetros e é isto."

#. type: Content of: <p>
#: src/plm/universe/bat/BatWorld.html:17
msgid ""
"For more information, you should refer to the CodingBat.com documentation, "
"which contains for example a very useful documentation on boolean operators: "
"http://codingbat.com/doc/ifboolean.html"
msgstr ""
"Para mais informações, deve consultar a documentação do CodingBat.com, que "
"contém por exemplo uma documentação sobre operadores booleanos bem útil: "
"http://codingbat.com/doc/ifboolean.html"

#. type: Content of: <h3>
#: src/lessons/welcome/Main.html:2 src/lessons/welcome/short_desc.html:2
msgid "First steps"
msgstr "Primeiros passos"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/Main.html:4
msgid ""
"This first lesson will lead your first steps in programming. It is intended "
"for beginners. List of seen notions per exercise:"
msgstr ""
"A primeira lição vai te guiar pelos primeiros passos em programação. Ela é "
"feita para iniciantes. Lista de noções vistas por exercício:"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:10 src/lessons/welcome/Main.html:93
#: src/lessons/welcome/Main.html:176 src/lessons/welcome/Main.html:256
#: src/lessons/welcome/Main.html:350 src/lessons/welcome/Main.html:430
#: src/lessons/welcome/Main.html:470
#: src/lessons/welcome/instructions/Instructions.html:2
msgid "Instructions"
msgstr "Instruções"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:11 src/lessons/welcome/Main.html:94
#: src/lessons/welcome/Main.html:177 src/lessons/welcome/Main.html:257
#: src/lessons/welcome/Main.html:351 src/lessons/welcome/Main.html:431
#: src/lessons/welcome/Main.html:471
msgid "Comments"
msgstr "Comentários"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:12 src/lessons/welcome/Main.html:95
#: src/lessons/welcome/Main.html:178 src/lessons/welcome/Main.html:258
#: src/lessons/welcome/Main.html:352 src/lessons/welcome/Main.html:432
#: src/lessons/welcome/Main.html:472
msgid "Conditionals/ Expressions"
msgstr "Condicionais/ Expressões"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:13 src/lessons/welcome/Main.html:79
#: src/lessons/welcome/Main.html:96 src/lessons/welcome/Main.html:179
#: src/lessons/welcome/Main.html:259 src/lessons/welcome/Main.html:353
#: src/lessons/welcome/Main.html:433 src/lessons/welcome/Main.html:473
#: src/lessons/welcome/loopwhile/LoopWhile.html:2
msgid "While loops"
msgstr "Loops while (enquanto)"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:14 src/lessons/welcome/Main.html:97
#: src/lessons/welcome/Main.html:180 src/lessons/welcome/Main.html:260
#: src/lessons/welcome/Main.html:354 src/lessons/welcome/Main.html:434
#: src/lessons/welcome/Main.html:474
msgid "Variables"
msgstr "Variáveis"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:15 src/lessons/welcome/Main.html:98
#: src/lessons/welcome/Main.html:134 src/lessons/welcome/Main.html:181
#: src/lessons/welcome/Main.html:261 src/lessons/welcome/Main.html:355
#: src/lessons/welcome/Main.html:435 src/lessons/welcome/Main.html:475
#: src/lessons/welcome/loopfor/LoopFor.html:2
msgid "For loops"
msgstr "Loops for"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:16 src/lessons/welcome/Main.html:99
#: src/lessons/welcome/Main.html:182 src/lessons/welcome/Main.html:262
#: src/lessons/welcome/Main.html:356 src/lessons/welcome/Main.html:436
#: src/lessons/welcome/Main.html:476
msgid "Do/While loops"
msgstr "loops Do/While (faça/enquanto)"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:17 src/lessons/welcome/Main.html:100
#: src/lessons/welcome/Main.html:162 src/lessons/welcome/Main.html:183
#: src/lessons/welcome/Main.html:263 src/lessons/welcome/Main.html:357
#: src/lessons/welcome/Main.html:437 src/lessons/welcome/Main.html:477
#: src/lessons/welcome/methods/basics/Methods.html:2
msgid "Methods"
msgstr "Métodos"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:18 src/lessons/welcome/Main.html:101
#: src/lessons/welcome/Main.html:184 src/lessons/welcome/Main.html:264
#: src/lessons/welcome/Main.html:358 src/lessons/welcome/Main.html:438
#: src/lessons/welcome/Main.html:478
msgid "Switch"
msgstr "Switch"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:19 src/lessons/welcome/Main.html:102
#: src/lessons/welcome/Main.html:185 src/lessons/welcome/Main.html:265
#: src/lessons/welcome/Main.html:359 src/lessons/welcome/Main.html:439
#: src/lessons/welcome/Main.html:479
msgid "Arrays"
msgstr "Arrays"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:23
msgid "Welcome in the Buggles' World"
msgstr "Bem-vindo ao mundo dos Buggles"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:37
msgid "Java Instructions"
msgstr "Instruções Java"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:51
#: src/lessons/welcome/instructions/InstructionsDrawG.html:2
msgid "Writing more complex programs"
msgstr "A escrever programas mais complexos"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:65
#: src/lessons/welcome/conditions/Conditions.html:2
msgid "Conditional instructions"
msgstr "Instruções condicionais"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:106
#: src/lessons/welcome/loopwhile/BaggleSeeker.html:2
msgid "Baggle Seeking"
msgstr "A procurar Baggles"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:120
#: src/lessons/welcome/variables/Variables.html:2
msgid "Storing and manipulating data"
msgstr "A armazenar e a manipular dados"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:148
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:2
msgid "Do .. while loops"
msgstr "Loops Do .. while (faça .. enquanto)"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:188
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:2
msgid "Building methodically"
msgstr "Construir metodicamente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:202
msgid "Methods returning a result"
msgstr "Métodos a retornar um resultado"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:215
#: src/lessons/welcome/methods/args/MethodsArgs.html:2
msgid "Methods with parameters"
msgstr "Métodos com perâmetros"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:229
#: src/lessons/welcome/methods/picture/PictureMono1.html:2
msgid "Methodically drawing"
msgstr "Desenhar metodicamente"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:242
#: src/lessons/welcome/methods/picture/PictureMono2.html:2
msgid "Methodically drawing (only bigger)"
msgstr "Desenhar metodicamente (apenas grande)"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:268
#: src/lessons/welcome/methods/picture/PictureMono3.html:2
msgid "Drawing bigger and bigger"
msgstr "Desenhar maior e maior"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:281
msgid "Even more pattern to draw"
msgstr "Mais padrões para desenhar"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:295
msgid "Buggle Dance Revolution"
msgstr "Buggle Dance Revolution"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:309
msgid "Buggle Dance Revolution 2"
msgstr "Buggle Dance Revolution 2"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:323
#: src/lessons/welcome/methods/slug/SlugHunting.html:2
msgid "Slug Hunting"
msgstr "Caça à lesma"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:336
#: src/lessons/welcome/methods/slug/SlugTracking.html:2
msgid "Slug Tracking"
msgstr "Rastrear a lesma"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:362 src/lessons/welcome/traversal/Snake.html:2
msgid "Snake World"
msgstr "Mundo das cobras"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:376
msgid "Knitting and Arrays"
msgstr "tricô e Arrays"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:390
msgid "Knitting, Arrays and modulos"
msgstr "tricô, arrays e módulos"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:403
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:2
msgid "Traversal by column"
msgstr "Percorrer pelas colunas"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:416
#: src/lessons/welcome/traversal/line/TraversalByLine.html:2
msgid "Traversal by line"
msgstr "Percorrer pelas linhas"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:442
#: src/lessons/welcome/traversal/zigzag/TraversalZigZag.html:2
msgid "Zig-zag traversal"
msgstr "Percorrer em zig-zag"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:455
#: src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:2
msgid "Diagonal Traversal"
msgstr "Percorrer na diagonal"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:483
msgid "Meaning of the symbols"
msgstr "Significado dos símbolos"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:486
msgid "Introducing the concept"
msgstr "Introduzir o conceito"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:489
msgid "Working on the concept"
msgstr "Trabalhar no conceito"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:492
msgid "Concept assumed mastered"
msgstr "Conceito tido como dominado"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:495
msgid "Concept not mandated by the exercise"
msgstr "Conceito não é obrigatório para o exercício"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:501
msgid "What will I learn?"
msgstr "O que irei aprender?"

#. type: Content of: <p>
#: src/lessons/welcome/Main.html:502
msgid ""
"You will learn the very basics of programming. At least, you will be "
"presented the most important concepts, allowing you to read most simple "
"algorithms. You will not be able to write or read full programs because you "
"will still not know about objects, but you will master what is called "
"\"Tactical programming\", meaning that you will master the syntax enough to "
"not have any issue with it, allowing you to focus on the fundamental "
"problems of what you want to solve instead of struggling with syntactic "
"difficulties."
msgstr ""
"Irá aprender o básico de programação. pelo menos, irá ser apresentado aos "
"mais importantes conceitos, a permitir que leia a maioria dos algoritmos "
"simples. Não será capaz de escrever ou ler programas completos por que ainda "
"não saberá nada sobre objetos, mas irá dominar o que é chamado de "
"\"programação tática\", ou seja, vai dominar a sintaxe o suficiente para não "
"ter qualquer problema com ela, a permitir que foque nos problemas "
"funcamentais que quer resolver ao invés de se debater com dificuldades de "
"sintaxe."

#. type: Content of: <p>
#: src/lessons/welcome/short_desc.html:3
msgid ""
"This first lesson will lead your first steps in programming. It is intended "
"for beginners."
msgstr ""
"Esta primeira lição vai guiar-lo pelos primeiros passos em programação. Ela "
"foi feita para iniciantes."

#. type: Content of: <p>
#: src/lessons/welcome/short_desc.html:6
msgid ""
"If you are not sure, go for this lesson that will teach you the bases of "
"programming."
msgstr ""
"Se está perdido, venha para esta lição que ela irá te ensinar as bases da "
"programação."

#. type: Content of: <h2>
#: src/lessons/welcome/environment/Environment.html:3
msgid "Welcome to the PLM"
msgstr "Bem-vindo ao PLM"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:5
msgid ""
"The goal of this first exercise is to instruct your buggle to move forward "
"by one step. Switch between the views on the right for more "
"info. <i>World</i> depicts the world as it is now, while <i>Objective</i> "
"depicts what you should get."
msgstr ""
"O objectivo deste primeiro exercício é instruir o seu buggle para avançar um "
"passo. Alterne entre as vistas à direita para mais informações. O <i>Mundo</"
"i> retrata o mundo como é agora, enquanto o <i>Objetivo</i> retrata o que "
"deve obter."

#. type: Content of: <h3>
#: src/lessons/welcome/environment/Environment.html:10
msgid "My <i>buggle</i>? What is this??"
msgstr "O que é o meu <i>buggle</i>?"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:12
msgid ""
"Buggles are little animals obeying any order you may give them. Currently, "
"you must use the [!thelang/] programming language for that, but you can "
"change the language from the menu, or by clicking the icon in the status "
"bar."
msgstr ""
"Os buggles são pequenos animais que obedecem todas as suas ordens. "
"Atualmente, deve usar a linguagem de programação [!thelang/] para isso, mas "
"pode mudar a linguagem a partir do menu, ou a clicar no ícone na barra de "
"estado."

#. type: Content of: <h3>
#: src/lessons/welcome/environment/Environment.html:17
msgid "How to proceed?"
msgstr "Como proceder?"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:19
msgid "Write your program in the \"Code\" pane. It should read as follows:"
msgstr ""
"Escreva o seu programa no painel \"Código\". Deve ser lido da seguinte forma:"

#. type: Content of: <pre>
#: src/lessons/welcome/environment/Environment.html:20
#: src/lessons/welcome/instructions/Instructions.html:53
#, no-wrap
msgid "[!java|scala|python]forward()[!java];[/!][/!][!c]stepForward();[/!]"
msgstr "[!java|scala|python]forward()[!java];[/!][/!][!c]stepForward();[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/environment/Environment.html:21
#: src/lessons/welcome/loopfor/LoopFor.html:57
#: src/lessons/welcome/bdr/BDR.html:189
msgid "[!java|c]"
msgstr "[!java|c]"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:21
msgid ""
"Do not forget the final <code>;</code> which tells the compiler that the "
"instruction is over (yes, computers are so dumb that they cannot "
"<i>guess</i> obvious stuff like this)."
msgstr ""
"Não se esqueça do <code>;</code> final que diz ao compilador que a instrução "
"está encerrada (sim, o computador é tão bobo que não consegue <i>adivinhar</"
"i> coisas óbvias como isto)."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/environment/Environment.html:23
#: src/lessons/welcome/variables/Variables.html:78
#: src/lessons/welcome/variables/Variables.html:152
#: src/lessons/welcome/loopfor/LoopFor.html:80
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:54
#: src/lessons/welcome/loopdowhile/Poucet2.html:25
#: src/lessons/welcome/array/basics/Array1.html:183
#: src/lessons/welcome/array/basics/Array1.html:209
#: src/lessons/welcome/methods/args/MethodsArgs.html:66
#: src/lessons/welcome/methods/picture/MethodsPicture.html:40
#: src/lessons/welcome/bdr/BDR.html:61 src/lessons/welcome/bdr/BDR.html:196
#: src/lessons/welcome/bdr/BDR2.html:130
#: src/lessons/turmites/langton/Langton.html:32
#: src/lessons/turmites/helloturmite/HelloTurmite.html:65
#: src/lessons/sort/basic/comb/AlgCombSort.html:39
#: src/lessons/recursion/cons/universe/ConsWorld.html:35
#: src/lessons/recursion/cons/Length.html:8
#: src/lessons/recursion/lego/square/FourSquare.html:46
#: src/lessons/maze/pledge/PledgeMaze.html:68
#: src/lessons/welcome/bat/bool1/Max1020.html:6
msgid "[/!]"
msgstr "[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:25
msgid "Once done, click on Run to execute your code."
msgstr "Quando feito, clique em Executar para executar o seu código."

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:27
msgid ""
"If your code contains errors, that's perfectly OK: Even talented programmers "
"struggle on their code.  The computer will display error messages in the "
"console to help you fixing them. These messages may sound scary at first "
"glance, but don't panic. The compiler is only somehow limited in its "
"communication abilities, but it's not mean. If you look closer, the solution "
"to solve your issue is written somewhere in those cryptic messages. You will "
"see, with a bit of habit, we get used to it."
msgstr ""
"Se o seu código contém erros, tudo bem: até os programadores talentosos "
"lutam com o seu código.  O computador exibirá mensagens de erro na consola "
"para o ajudar a corrigi-los. Estas mensagens podem parecer assustadoras à "
"primeira vista, mas não entre em pânico. O compilador é apenas de alguma "
"forma limitado nas suas habilidades de comunicação, mas não é mau. Se olhar "
"mais de perto, a solução para resolver o seu problema está escrita em algum "
"lugar nessas mensagens crípticas. Verá, com um pouco de hábito, que nos "
"acostumamos a isso."

#. type: Content of: <h3>
#: src/lessons/welcome/environment/Environment.html:36
msgid "But that's [!thelang]!"
msgstr "Mas isso é [!thelang]!"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/environment/Environment.html:37
msgid ""
"Currently, the PLM is configured to accept [!thelang] programs, but it can "
"also accept [!java]Python or Scala[/!][!scala]Java or "
"Python[/!][!python]Java or Scala[/!] programs.  Either click on the language "
"icon at the very bottom right of the window, or head to the "
"<tt>Language/Computer</tt> menu item to change it."
msgstr ""
"Atualmente, o PLM está configurado para aceitar programas [!thelang], mas "
"também pode aceitar programas [!java]Python ou Scala[/!][!scala]Java ou "
"Python[/!][!python]Java ou Scala[/!].  Clique no ícone da linguagem no canto "
"inferior direito da janela, ou vá para o item de menu <tt>Language/Computer</"
"tt> para mudá-lo."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/instructions/Instructions.html:4
msgid ""
"Congratulations! You just wrote your first program! You got the idea now: "
"programming is nothing more than giving simple instructions to the computer "
"that blindly apply them. The main difficulty is to explain stuff to "
"something as stupid as a computer..."
msgstr ""
"Parabéns! Acaba de escrever o seu primeiro programa! Agora captou a ideia: "
"programar é nada mais que dar instruções simples ao computador, que as "
"realiza cegamente. A maior dificuldade é explicar tudo para algo tão idiota "
"quanto um computador..."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:9
msgid ""
"Our second program will be a bit more complicated, but not much. The goal "
"for your buggle is simply to draw a house (a box), and hide inside. Check "
"the objective world to see exactly what this means."
msgstr ""
"O nosso segundo programa vai ser um pouco mais complicado, mas não muito. O "
"objetivo do seu buggle é simplesmente desenhar uma casa (uma caixa) e "
"esconder-se dentro dela. Confira o mundo objetivo para ver exatamente o que "
"isso significa."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:14
msgid ""
"For that, you will need <code>forward()</code>, <code>left()</code> and "
"<code>right()</code>. Use your brush to mark the ground as you walk. Start "
"marking the ground with <code>brushDown()</code>, and stop it with "
"<code>brushUp()</code> afterward (e.g., to enter your house without marking "
"its ground)."
msgstr ""
"Para isso, vai precisar de <code>forward()</code>, <code>left()</code> e "
"<code>right()</code>. Use o seu pincel para marcar o chão enquanto anda. "
"Comece a marcar o chão com <code>brushDown()</code> e pare com "
"<code>brushUp()</code> depois (por exemplo, para entrar na sua casa sem "
"marcar o chão)."

#. type: Content of: <h3>
#: src/lessons/welcome/instructions/Instructions.html:20
msgid "What exactly is a program?"
msgstr "O que exatamente é um programa?"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:22
msgid ""
"Programs are mainly suites of method calls, which are no more than a list of "
"simple orders given to the machine. It is very similar to a recipe stating "
"<i>Melt the chocolate pieces, add sugar, cool the mix and serve</i>.  "
"[!thelang] wants to have the instructions separated by semi-columns "
"(;)[!python|scala] or by new lines[/!], and followed by parenthesis. Our "
"little receipe would thus be written in the following way[!python|scala] "
"(you can also add semi-columns at the end of the lines, but this is not "
"mandatory)[/!]."
msgstr ""
"Os programas são principalmente conjuntos de chamadas de métodos, que não "
"são mais que uma lista de ordens simples dadas à máquina. É como uma receita "
"que diz <i>Derreter os pedaços de chocolate, adicionar açúcar, esfriar a "
"mistura e servir</i>.  [!thelang] quer ter as instruções separadas por "
"ponto-e-virgula (;)[!python|scala] ou por novas linhas[/!], seguidas de "
"parênteses. A nossa pequena receita seria assim escrita da seguinte "
"forma[!python|scala] (também pode adicionar ponto-e-virgula no final das "
"linhas, mas isso não é obrigatório)[/!]."

#. type: Content of: <pre>
#: src/lessons/welcome/instructions/Instructions.html:33
#, no-wrap
msgid ""
"meltTheChocolatePieces()[!java|c];[/!]\n"
"addSugar()[!java|c];[/!]\n"
"coolMix()[!java|c];[/!]\n"
"serve()[!java|c];[/!]\n"
msgstr ""
"meltTheChocolatePieces()[!java|c];[/!]\n"
"addSugar()[!java|c];[/!]\n"
"coolMix()[!java|c];[/!]\n"
"serve()[!java|c];[/!]\n"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:39
msgid ""
"Do not write it all on one line only even if the computer would accept it "
"[!python|scala](provided that you don't omit the semi-columns)[/!]. This is "
"a <b>really bad idea</b>, hindering the readability.  <i>Programs must be "
"written for people to read, and only incidentally for machines to "
"execute,</i> as said Harold Abelson."
msgstr ""
"Não escreva tudo numa só linha, mesmo que o computador o aceite "
"[!python|scala](desde que não omita ponto-e-virgulas)[/!]. Esta é uma "
"<b>péssima idéia</b>, que dificulta a legibilidade.  <i>Programas devem ser "
"escritos para pessoas as lerem e apenas incidentalmente para as máquinas "
"executarem,</i> como disse Harold Abelson."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:46
msgid ""
"There is a limited set of instructions that buggles understand, and we will "
"eventually learn how to define new ones. For now, there is a method for each "
"button of the interactive control panel. To achieve the same effect than the "
"<b>forward</b> button (making the buggle moving one step forward), you need "
"to write the following in the editor:"
msgstr ""
"Há um conjunto limitado de instruções que os buggles entendem e "
"eventualmente aprenderemos a definir novas instruções. Por enquanto, existe "
"um método para cada botão do painel de controle interativo. Para alcançar o "
"mesmo efeito que o botão <b>forward</b> (a fazer o buggle mover um passo à "
"frente), precisa escrever o seguinte no editor:"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:54
msgid ""
"Likewise, to achieve the same effect than the "
"<b>[!java|scala|python]backward[/!][!c]stepBackward[/!]</b>, <b>left</b> and "
"<b>right</b> buttons, you need to use respectively:"
msgstr ""
"Da mesma forma, para obter o mesmo efeito que os botões "
"<b>[!java|scala|python]recuar[/!][!c]recuarUmPasso[/!]</b>, <b>esquerda</b> "
"e <b>direita</b>, precisa respetivamente:"

#. type: Content of: <pre>
#: src/lessons/welcome/instructions/Instructions.html:58
#, no-wrap
msgid ""
"backward()[!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"right()[!java|c];[/!]\n"
msgstr ""
"backward()[!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"right()[!java|c];[/!]\n"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:63
msgid ""
"The <b>mark</b> button is a bit particular, since it correspond to two "
"methods: the first one moves the pen up while the second moves it down."
msgstr ""
"O botão <b>marcar</b> é diferente, pois corresponde a dois métodos: o "
"primeiro move a caneta para cima e o segundo move a caneta para baixo."

#. type: Content of: <pre>
#: src/lessons/welcome/instructions/Instructions.html:67
#, no-wrap
msgid ""
"brushUp()[!java|c];[/!]\n"
"brushDown()[!java|c];[/!]\n"
msgstr ""
"brushUp()[!java|c];[/!]\n"
"brushDown()[!java|c];[/!]\n"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:71
msgid ""
"The buggle offers other methods, that are presented from the \"Help/about "
"this world\" menu and will be introduced on need."
msgstr ""
"O buggle tem outros métodos, que estão no menu \"Ajuda/sobre este mundo\" e "
"serão introduzidos quando forem necessários."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/instructions/InstructionsDrawG.html:3
msgid ""
"Now that we know how to draw things on the board, we'll enjoy this ability "
"and draw a beautiful G on the board (check Objective panel for details on "
"what is expected)."
msgstr ""
"Agora que sabemos como desenhar coisas no tabuleiro, vamos aproveitar esta "
"habilidade e desenhar um belo G (Veja o painel de Objetivo para detalhes)."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/InstructionsDrawG.html:7
msgid ""
"When you write a quite complex program, it is sometimes useful to <b>add "
"comments</b> to simplify the code reviews afterward. Here for example, it's "
"quite easy to get lost in the drawing process, and you may want to add "
"comments like <i>vertical bar done</i> or <i>finished drawing the G. Time to "
"move back to initial position</i>. Commenting your code is almost mandatory "
"if you (or someone else) want to read it afterward, although over-commenting "
"(describing obvious stuff) is a bad idea as the important idea get lost in "
"the noise."
msgstr ""
"Quando escreve um programa bem complexo, por vezes é útil <b>adicionar "
"comentários</b> para simplificar uma posterior revisão do código. Aqui, por "
"exemplo, é fácil se perder no processo de desenho e podeadicionar "
"comentários como <i>barra vertical desenhada</i> ou <i>terminei de desenhar "
"o G. hora de voltar para posição inicial</i>. Comentar o seu código é quase "
"obrigatório se (ou mais alguém) quiser lê-lo depois, embora comentar demais ("
"a descrever coisas óbvias) é ruim pois as ideias importantes se perdem no "
"meio do ruído."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/InstructionsDrawG.html:15
msgid ""
"There is [!java]three[/!][!python|scala|c]two[/!] types of comments in "
"[!thelang], instructing the "
"[!java|scala|c]compiler[/!][!python]interpreter[/!] to not read the text you "
"add for humans:"
msgstr ""
"Existem [!java]três[/!][!python|scala|c]dois[/!] tipos de comentários em "
"[!thelang], que instruem o "
"[!java|scala|c]compilador[/!][!python]interpretador[/!] a não ler o texto "
"que adiciona para humanos:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/instructions/InstructionsDrawG.html:19
msgid ""
"<b>Comments on a single line</b>. When the "
"[!java|scala|c]compiler[/!][!python]interpreter[/!] encounters the symbol "
"[!java|scala|c]//[/!][!python]#[/!], it ignores the end of the line."
msgstr ""
"<b>Comentários de uma única linha</b>. Quando o "
"[!java|scala|c]compilador[/!][!python]interpretador[/!] encontra o símbolo "
"[!java|scala|c]//[/!][!python]#[/!], ignora o resto da linha."

#. type: Content of: <ul><li>
#: src/lessons/welcome/instructions/InstructionsDrawG.html:21
msgid ""
"<b>Comments on several lines</b>. The "
"[!java|scala|c]compiler[/!][!python]interpreter[/!] ignores anything placed "
"between [!java|scala|c]the symbols /* and */ even if they are placed on "
"differing lines.[/!] [!python]a line beginning with ''' until the next line "
"ending with '''.[/!]"
msgstr ""
"<b>Comentários em várias linhas</b>. O "
"[!java|scala|c]compilador[/!][!python]interpretador[/!] ignora tudo entre "
"[!java|scala|c]os símbolos /* e */ mesmo quando eles são postos em linhas "
"diferentes.[/!] [!python]uma linha a comaçar com ''' até a próxima linha "
"terminado com '''.[/!]"

#. type: Content of: <pre>
#: src/lessons/welcome/instructions/InstructionsDrawG.html:28
#, no-wrap
msgid ""
"methodCallReadByThe[!java|scala|c]Compiler[/!][!python]Interpreter[/!]()[!java|c];[/!] "
"<span class=\"comment\">[!java|scala|c]//[/!][!python]#[/!] all this is "
"ignored</span>\n"
"otherCall()[!java|c];[/!] [!java|scala|c]<span class=\"comment\">/* This "
"is</span>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "
"<span class=\"comment\"> also ignored */</span>[/!]\n"
"[!python]<span class=\"comment\">''' This is</span>\n"
"<span class=\"comment\">also ignored  '''</span>[/!]\n"
"yetAnotherCall()[!java|c];[/!]\n"
msgstr ""
"methodCallReadByThe[!java|scala|c]Compiler[/!][!python]Interpreter[/!]()[!jav"
"a|c];[/!] <span class=\"comment\">[!java|scala|c]//[/!][!python]#[/!] tudo "
"isto é ignorado</span>\n"
"otherCall()[!java|c];[/!] [!java|scala|c]<span class=\"comment\">/* Isto "
"também </span>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp"
"; <span class=\"comment\"> é ignorado */</span>[/!]\n"
"[!python]<span class=\"comment\">''' Isto também</span>\n"
"<span class=\"comment\">é ignorado  '''</span>[/!]\n"
"yetAnotherCall()[!java|c];[/!]\n"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/InstructionsDrawG.html:35
msgid ""
"There is a third kind of comments in Java, between /** and */, which are "
"read by a specific program called JavaDoc to generate automatically the "
"documentation explaining how to use the code. These comments must follow a "
"very precise formalism."
msgstr ""
"Existe um terceiro tipo de comentário em Java, entre /** e */, que é lido "
"por um programa específico chamado JavaDoc para gerar automaticamente a "
"documentação a explicar como usar o código. Estes comentários devem seguir "
"um formalismo bem preciso."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/InstructionsDrawG.html:40
msgid ""
"The comments on several lines are often used to document how to use the "
"code, while others are more used to describe how this code works."
msgstr ""
"Os comentários de várias linhas são frequentemente usados para documentar "
"como usar o código, enquanto os outros são usados para descrever como este "
"código funciona."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/conditions/Conditions.html:4
msgid ""
"Programs made of simple suite of instructions similar to previous exercise "
"are quite boring. They always do the same thing, and cannot react to "
"external conditions. A <b>conditional</b> let the program adapt by doing "
"something like <i>if it's raining, take an umbrella</i>."
msgstr ""
"Programas feitos simplesmente de um conjunto de instruções similares ao do "
"exercício anterior são bastante chatos. Sempre fazem a mesma coisa e não "
"reagem a condições externas. Um <b>condicional</b> faz o programa se adaptar "
"a fazer coisas do tipo <i>se está a chover, leve um guarda-chuva</i>."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:9
msgid "The [!thelang] syntax is the following:"
msgstr "A sintaxe de [!thelang] é a seguinte:"

#. type: Content of: <pre>
#: src/lessons/welcome/conditions/Conditions.html:11
#, no-wrap
msgid ""
"[!java|scala|c]if (<b>condition</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTrue();</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNextIfTrue();</b>\n"
"}[/!][!python]if <b>condition</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTrue()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNextIfTrue()</b>[/!]\n"
"<b>whatToDoAnyway()[!java|c];[/!]</b>"
msgstr ""
"[!java|scala|c]if (<b>condição</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTrue();</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNextIfTrue();</b>\n"
"}[/!][!python]if <b>condição</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTrue()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNextIfTrue()</b>[/!]\n"
"<b>whatToDoAnyway()[!java|c];[/!]</b>"

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:19
msgid ""
"If the condition is true, the code of the next block will be executed and "
"then it will continue with the rest of the code.  If the condition is false, "
"the next block is ignored and the execution continues after it.  The "
"conditional block can contain several instructions, it can even contain "
"other tests, along with their sub-blocks."
msgstr ""
"Se a condição for verdade, o código do próximo bloco será executado e então "
"o resto do código continua. Se a condição for falsa, o próximo bloco é "
"ignorado e a execução continua depois disto. O bloco condicional pode conter "
"várias instruções, pode até mesmo conter outros testes, com os próprios sub-"
"testes dele."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:23
msgid ""
"In this example, the instructions <code>whatToDoIfTrue()</code> and "
"<code>whatToDoNextIfTrue()</code> will be executed if and only if the "
"condition is true, while the instruction <code>whatToDoAnyway()</code> will "
"be executed whether or not the condition is true."
msgstr ""
"Neste exemplo, as instruções <code>whatToDoIfTrue()</code> e "
"<code>whatToDoNextIfTrue()</code> serão executadas se e somente se a "
"condição for verdadeira, mas a instrução <code>whatToDoAnyway()</code> vai "
"ser executada se a condição for verdadeira ou não."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:28
msgid ""
"In [!thelang], the blocks of code are [!java|scala|c]enclosed between curly "
"brackets: a { sign opens the block, while a } sign closes it.  White spaces "
"are not important[/!][!java|c].[/!][!scala], provided that your instructions "
"are still separated with a semi-column or an end of line.[/!] "
"[!java|scala|c]It is still very important to correctly indent your code to "
"keep it readable.[/!] [!python]marked by the indentation: every lines that "
"are a bit shifted to the right with white spaces belong to the block. Quite "
"often, people use 4 spaces for indentation, but it works if you use more or "
"less spaces. Simply, any lines of the block must use the same amount of "
"spaces.  The end of Python code blocks are not marked by any specific char.  "
"Indenting lines starts a block and unindenting ends it. Do not forget the "
"colon (:) at the end of the <code>if</code> line, python needs it to know "
"that a new block begins. The fact that python relies on indentation to "
"delimit blocks is a very good property for beginners: it will force you to "
"adhere to strict code presentation standards.[/!] It is very easy to get "
"lost in your own code if it's not properly indented, so you want to clean it "
"up so that working on your code remains pleasant and productive."
msgstr ""
"Em [!thelang], os blocos de código são [!java|scala|c]envolvidos entre "
"chaves: um { abre o bloco e um } fecha-o.  Espaços em branco não são "
"importantes[/!][!java|c].[/!][!scala], uma vez que as suas instruções ainda "
"estejam separadas com um ponto-e-vírgula ou um fim-de-linha.[/!] "
"[!java|scala|c]Ainda assim é muito importante indentar corretamente o seu "
"código para mantê-lo legível.[/!] [!python]marcados pela indentação: todas "
"as linhas que estiverem um pouco deslocadas para a direita com espaços "
"pertencem ao bloco. Frequentemente se usam 4 espaços para indentação, mas "
"funciona se usar mais ou menos espaços. A resumir, quaisquer linhas do bloco "
"devem usar a mesma quantidade de espaços. O fim do bloco de código Python "
"não é marcado por nenhum caractere específico. Indentar linhas começa um "
"bloco e parar de indentar termina o bloco. Não se esqueça do dois-pontos (:) "
"no final da linha do <code>if</code>, python precisa dele para saber que um "
"novo bloco vai começar. O fato de que python se baseia em indentação para "
"delimitar blocos é uma ótima propriedade para iniciantes: vai forçá-lo a "
"aderir a padrões de apresentação de código estritos.[/!] É muito fácil se "
"perder no seu próprio código se não for corretamente indentado, então "
"precisa deixá-lo bem-arrumado para que trabalhar nele continue a ser "
"agradável e produtivo."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:44
msgid ""
"All indentations of a given block must be consistent, and it is not possible "
"to cut a block. The two following codes are incorrect and will raise errors."
msgstr ""
"Todas as indentações de um dado bloco devem ser consistentes e não é "
"possível cortar um bloco. os dois códigos a seguir estão incorretos e devem "
"resultar em erro."

#. type: Content of: <pre>
#: src/lessons/welcome/conditions/Conditions.html:47
#, no-wrap
msgid ""
"if <b>condition</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDo()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNext()</b> <span "
"class=\"comment\"># one space too much </span>\n"
"<b>whatToDoAnyway()</b>\n"
msgstr ""
"if <b>condição</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDo()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNext()</b> <span class=\"comment\">#"
" um espaço a mais </span>\n"
"<b>whatToDoAnyway()</b>\n"

#. type: Content of: <pre>
#: src/lessons/welcome/conditions/Conditions.html:52
#, no-wrap
msgid ""
"if <b>condition</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDo()</b>\n"
"<b>whatToDoAnyway()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNext()</b> <span class=\"comment\"># this "
"block is not hanging to a condition line</span>\n"
msgstr ""
"se <b>condição</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDo()</b>\n"
"<b>whatToDoAnyway()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoNext()</b> <span class=\"comment\"># este "
"bloco não está condicionado a uma linha de condição</span>\n"

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:58
msgid ""
"The condition must be a "
"<code>[!c]int[/!][!java]boolean[/!][!scala|python]Boolean[/!]</code> "
"expression.  The inner block of code will get executed if the expression is "
"evaluated to <code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> "
"and it will be ignored if it is "
"<code>[!c]0[/!][!java|scala]false[/!][!python]False[/!]</code>.  "
"[!python|scala|java]<code>[!java|scala]true[/!][!python]True[/!]</code> and "
"<code>[!java|scala]false[/!][!python]False[/!]</code> are constant values "
"defined by [!thelang] directly, just as 0 or 1 in mathematics.[/!]"
msgstr ""
"A condição deve ser uma expressão "
"<code>[!c]int[/!][!java]boolean[/!][!scala|python]Boolean[/!]</code>. O "
"bloco interno do código será executado se a expressão for calculada como "
"<code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> e será ignorado "
"se for <code>[!c]0[/!][!java|scala]false[/!][!python]False[/!]</code>. "
"[!python|scala|java]<code>[!java|scala]true[/!][!python]True[/!]</code> e "
"<code>[!java|scala]false[/!][!python]False[/!]</code> são valores constantes "
"definidos por [!thelang] diretamente, assim como 0 ou 1 na matemática.[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:64
msgid ""
"The condition can be a "
"<code>[!c]int[/!][!java]boolean[/!][!scala|python]Boolean[/!]</code> "
"variable (we will come back on variables in a later exercise, don't worry) "
"or an arithmetic test, such as <code>x == 5</code>, which checks whether the "
"current value of <code>x</code> is 5, or such as <b>!=</b> (checking "
"inequality, that is, returning "
"[!c]1[/!][!java|scala]true[/!][!python]True[/!] only if the left-hand side "
"is different from the right-hand side), <b>&lt;</b> (smaller than), "
"<b>&gt;</b> (larger than), <b>&lt;=</b> (smaller or equal to), <b>&gt;=</b> "
"(larger or equal to)."
msgstr ""
"A condição pode ser uma variável "
"<code>[!c]int[/!][!java]boolean[/!][!scala|python]Boolean[/!]</code> (vamos "
"voltar a falar de variáveis num próximo exercício, não se preocupe) ou um "
"teste aritmético, como <code>x == 5</code>, que verifica se o valor atual de "
"<code>x</code> é 5, ou algo como <b>!=</b> (a verificar inequação, ou seja, "
"a retornar [!c]1[/!][!java|scala]true[/!][!python]True[/!] apenas se o lado "
"esquerdo é diferente do lado direito), <b>&lt;</b> (menor que), <b>&gt;</b> ("
"maior que), <b>&lt;=</b> (menor ou igual a), <b>&gt;=</b> (maior ou igual a)."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:71
msgid ""
"Beware of the classical trap, which consists in testing the equality of a "
"variable using = instead of ==. Hopefully, the "
"[!java|scala|c]compiler[/!][!python]interpreter[/!] detects this problem "
"most of the time, but it could get trapped is some cases (such as when you "
"are affecting a [!c]int[/!][!java|python|scala]boolean[/!] variable). So "
"you'd better to be careful..."
msgstr ""
"Cuidado com um erro clássico, que é verificar a igualdade da variável a usar "
"= no lugar de ==. Ainda bem que o "
"[!java|scala|c]compilador[/!][!python]interpretador[/!] detecta este "
"problema na maior parte das vezes, mas às vezes passa (como quando está a "
"atribuir valor a uma variável [!c]int[/!][!java|python|scala]booleana[/!]). "
"Então é bom ter cuidado..."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:76
msgid ""
"The condition can also be a call to some particular methods returning a "
"boolean. For example, the <code>isFacingWall()</code> method of the buggle "
"returns [!c]1[/!][!java|python|scala]true[/!] if the buggle is facing a "
"wall, and [!c]0[/!][!java|python|scala]false[/!] in the other case."
msgstr ""
"A condição pode também ser uma chamada para alguns métodos particulares que "
"retornam booleano. Por exemplo, o método <code>isFacingWall()</code> do "
"buggle retorna [!c]1[/!][!java|python|scala]true[/!] se o buggle está a "
"olhar para uma parede e false caso contrário."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:80
msgid ""
"Finally, a condition can be composed of several sub-conditions connected by "
"boolean operations:"
msgstr ""
"Finalmente, uma condição pode ser composta de várias sub-condições "
"conectadas por operadores booleanos:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/conditions/Conditions.html:83
msgid ""
"<code>cond1 [!java|scala|c]&&[/!][!python]and[/!] cond2</code> is true when "
"<tt>cond1</tt> <b>and</b> <tt>cond2</tt> are both true (if <tt>cond1</tt> is "
"false, <tt>cond2</tt> is not even evaluated as we already know that the "
"conjunction of both propositions cannot be true)."
msgstr ""
"<code>cond1 [!java|scala|c]&&[/!][!python]and[/!] cond2</code> é true quando "
"<tt>cond1</tt> <b>e</b> <tt>cond2</tt> são ambos trues (se <tt>cond1</tt> é "
"false, <tt>cond2</tt> não é nem sequer calculado pois sabe-se previamente "
"que a conjunção das duas proposições não pode ser verdadeira)."

#. type: Content of: <ul><li>
#: src/lessons/welcome/conditions/Conditions.html:86
msgid ""
"<code>cond1 [!java|scala|c]||[/!][!python]or[/!] cond2</code> is true if "
"<tt>cond1</tt> <b>or</b> <tt>cond2</tt> is true (if <tt>cond1</tt> is true, "
"<tt>cond2</tt> is not even evaluated as we already know that the disjunction "
"of both propositions cannot be false)."
msgstr ""
"<code>cond1 [!java|scala|c]||[/!][!python]or[/!] cond2</code> é true se "
"<tt>cond1</tt> <b>ou</b> <tt>cond2</tt> é true (se <tt>cond1</tt> é true, "
"<tt>cond2</tt> não é nem sequer calculada pois já se sabe que a disjunção de "
"ambas as proposições não pode ser verdadeira)."

#. type: Content of: <ul><li>
#: src/lessons/welcome/conditions/Conditions.html:89
msgid ""
"<code>[!java|scala|c]![/!][!python]not [/!]cond</code> is true if "
"<tt>cond</tt> is false."
msgstr ""
"<code>[!java|scala|c]![/!][!python]not [/!]cond</code> é verdadeira se "
"<tt>cond</tt> é falsa."

#. type: Content of: <ul><li>
#: src/lessons/welcome/conditions/Conditions.html:90
msgid ""
"When the expression becomes complicated, it is better to add parenthesis to "
"force the order of evaluation.  Do not hesitate to add more parenthesis to "
"remove any ambiguities that may appear in an expression."
msgstr ""
"Quando a expressão se torna complicada, é melhor adicionar parêntesis para "
"forçar a ordem de cálculo. Não hesite em adicionar mais parêntesis para "
"remover ambiguidades que apareçam na expressão."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:94
msgid ""
"Last, it is possible to specify what to do when the condition is false using "
"the following syntax. In this case, the instruction "
"<code>whatToDoIfItsFalse</code> will be executed only if the condition is "
"false."
msgstr ""
"Por fim, é possível especificar o que fazer quando a condição é falsa a usar "
"a seguinte sintaxe. Neste caso, a instrução <code>oQueFazerSeForFalso</code> "
"será executada apenas se a condição for falsa."

#. type: Content of: <pre>
#: src/lessons/welcome/conditions/Conditions.html:97
#, no-wrap
msgid ""
"[!java|scala|c]if (<b>condition</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTheConditionIsTrue();</b>\n"
"} else {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfItsFalse();</b>\n"
"}[/!][!python]if (<b>condition</b>):\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTheConditionIsTrue()</b>\n"
"else:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfItsFalse()</b>[/!]"
msgstr ""
"[!java|scala|c]if (<b>condição</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTheConditionIsTrue();</b>\n"
"} else {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfItsFalse();</b>\n"
"}[/!][!python]if (<b>condição</b>):\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfTheConditionIsTrue()</b>\n"
"else:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>whatToDoIfItsFalse()</b>[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:106
msgid ""
"Don't forget the colon (:) after the else, it is indicating that a new block "
"is beginning."
msgstr ""
"Não se esqueça do dois-pontos (:) depois do else, indica que um novo bloco "
"está a começar."

#. type: Content of: <h3>
#: src/lessons/welcome/conditions/Conditions.html:109
#: src/lessons/welcome/loopwhile/LoopWhile.html:35
#: src/lessons/welcome/loopwhile/BaggleSeeker.html:9
#: src/lessons/welcome/variables/Variables.html:119
#: src/lessons/welcome/loopfor/LoopFor.html:82
#: src/lessons/welcome/methods/basics/Methods.html:96
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:38
#: src/lessons/welcome/methods/returning/MethodsReturning.html:50
#: src/lessons/welcome/methods/args/MethodsArgs.html:70
#: src/lessons/welcome/methods/slug/SlugHunting.html:19
#: src/lessons/welcome/methods/slug/SlugTracking.html:24
#: src/lessons/welcome/bdr/BDR.html:151 src/lessons/welcome/bdr/BDR2.html:132
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:18
#: src/lessons/maze/pledge/PledgeMaze.html:37
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:23
#: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:22
msgid "Exercise goal"
msgstr "Objetivo do exercício"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/conditions/Conditions.html:109
msgid ""
"<a name=\"Objectives\"/> If the buggle is facing a wall, you must move one "
"step back. If not, you must move one step forward. To detect whether you are "
"facing a wall, simply use the <code>isFacingWall()</code> built-in, that "
"every buggle understands."
msgstr ""
"<a name=\"Objectives\"/> Se o buggle está de cara para uma parede, deve "
"mover um passo para trás. Se não, deve mover um passo para frente. Para "
"detetar se está de cara para uma parede, simplesmente use a função pré-"
"fabricada <code>isFacingWall()</code>, que todos os buggles entendem."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:116
msgid ""
"This exercise is a bit different: your code has to work for several buggles, "
"each of them being in a specific initial condition. The same code will be "
"executed for each of them."
msgstr ""
"Este exercício é um pouco diferente: o seu código tem que funcionar para "
"vários buggles, cada um a começar numa posição diferente. O mesmo código "
"será executado para cada um deles."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:120
msgid ""
"When your program works, move forward to the next exercise, that is hidden "
"in a sub-tree of the selection window."
msgstr ""
"Quando o seu programa funcionar, vá ao próximo exercício, que está escondido "
"numa sub-árvore da janela de seleção."

#. type: Content of: <p>
#: src/lessons/welcome/loopwhile/LoopWhile.html:4
msgid ""
"In addition to conditionals, another handy construction is the ability to "
"repeat an action while a specific condition does not appear. A while loop is "
"used for that, with the following syntax."
msgstr ""
"Além dos condicionais, outra construção bem útil é a habilidade de repetir "
"uma ação enquanto uma condição específica não acontece. Um loop 'while' é "
"usado para isto, com a seguinte sintaxe."

#. type: Content of: <pre>
#: src/lessons/welcome/loopwhile/LoopWhile.html:8
#, no-wrap
msgid ""
"[!java|scala|c]while (<b>condition</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>action()</b>;\n"
"}[/!][!python]while <b>condition</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>action()</b>[/!]"
msgstr ""
"[!java|scala|c]while (<b>condição</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>action()</b>;\n"
"}[/!][!python]while <b>condição</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>action()</b>[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/loopwhile/LoopWhile.html:13
msgid ""
"The inner bloc is then executed again and again, as long as the condition "
"remains true.  More specifically, the buggle tests the value of the "
"condition. If it's false, it ignores the bloc and continue below.  If it's "
"true, it executes the bloc.  After that, it tests the condition. If it's now "
"false (for example because the moves of the block made us facing the wall), "
"it now ignores the bloc and continue.  If it's still true, it execute the "
"bloc and reevaluate the condition. It does so as long as the condition "
"remains true."
msgstr ""
"O bloco interno é então executado várias e várias vezes, enquanto a condição "
"se mantiver verdadeira. Mais especificamente, o buggle testa o valor da "
"condição. Se for falsa, ignora o bloco e continua abaixo. Se for verdadeira, "
"executa o bloco. Depois disto, testa a condição. Se agora for falsa (por "
"exemplo, porque os movimentos do bloco nos deixaram de cara à parede), agora "
"ignora o bloco e continua. Se ainda for true, executa o bloco e reavalia a "
"condição. Faz isto enquanto a condição se mantém verdadeira."

#. type: Content of: <p>
#: src/lessons/welcome/loopwhile/LoopWhile.html:20
msgid ""
"Naturally, if the chosen action does not modify the value of the condition, "
"the buggle will do the action endlessly. The <b>stop</b> button of the "
"interface becomes then handy. To test this, you can try to type the "
"following code in the editor:"
msgstr ""
"Naturalmente, se a ação escolhida não modifica o valor da condição, o buggle "
"vai fazer a ação infinitamente. O botão <b>stop</b> na interface se torna "
"útil nestes casos. Para testar isto, pode tentar digitar o seguinte código "
"no editor:"

#. type: Content of: <pre>
#: src/lessons/welcome/loopwhile/LoopWhile.html:25
#, no-wrap
msgid ""
"[!java|scala]while (true) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;left();\n"
"}[/!][!c]while (1) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;left();\n"
"}[/!][!python]while True:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;left()[/!]"
msgstr ""
"[!java|scala]while (true) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;left();\n"
"}[/!][!c]while (1) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;left();\n"
"}[/!][!python]while True:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;left()[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/loopwhile/LoopWhile.html:32
msgid ""
"This will let the buggle turn left as long as "
"<code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> remains true "
"(ie, endlessly), or until you stop it manually using the stop button."
msgstr ""
"Isto vai fazer o buggle virar à esquerda enquanto "
"<code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> permanecer true "
"(ou seja, infinitamente), ou até que pare manualmente a usar o botão parar."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/loopwhile/LoopWhile.html:36
msgid ""
"You now have to write some code so that your buggles move forward until they "
"encounter a wall. The idea is thus to do something like:"
msgstr ""
"Agora tem que escrever algum código para os seus buggles se moverem para a "
"frente até que eles encontrem uma parede. A ideia é então fazer algo assim:"

#. type: Content of: <pre>
#: src/lessons/welcome/loopwhile/LoopWhile.html:39
#, no-wrap
msgid ""
"while we are not facing a wall, do:\n"
"&nbsp;&nbsp;moveForward()"
msgstr ""
"Enquanto não estiver de cara para uma parede, faça:\n"
"&nbsp;&nbsp;moveForward()"

#. type: Content of: <p>
#: src/lessons/welcome/loopwhile/LoopWhile.html:42
msgid ""
"Look at the documentation (in \"Help/About this world\") for the full list "
"of buggles' methods."
msgstr ""
"Procure na documentação (em \"Ajuda/Sobre este mundo\") para a lista "
"completa dos métodos dos buggles."

#. type: Content of: <p>
#: src/lessons/welcome/loopwhile/BaggleSeeker.html:3
msgid ""
"The buggle world can sometimes contain some <i>baggles</i>, which are little "
"biscuits that buggles can carry from one point to another. For that, they "
"have to use specific methods such as <code>isOverBaggle(), "
"isCarryingBaggle(), pickupBaggle()</code> or "
"<code>dropBaggle()</code>. Check their documentation in \"Help/About this "
"world\" for more details."
msgstr ""
"O mundo dos buggles pode algumas vezes conter alguns <i>baggles</i>, que são "
"pequenos biscoitos que os buggles podem carregar de um ponto a outro. Para "
"isto, eles têm que usar métodos específicos como <code>isOverBaggle(), "
"isCarryingBaggle(), pickupBaggle()</code> ou <code>pickupBaggle()</code>. "
"Verifique a documentação deles em \"Ajuda/Sobre este mundo\" para mais "
"detalhes."

#. type: Content of: <p>
#: src/lessons/welcome/loopwhile/BaggleSeeker.html:11
msgid ""
"Let each buggle find its baggle by adapting the code you wrote in previous "
"exercise (copy/paste what you've done before if you want)."
msgstr ""
"Deixe cada buggle encontrar o baggle dele por adaptar o código que escreveu "
"no exercício anterior (copie e cole o que fez antes se quiser)."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:3
msgid ""
"The programs we wrote so far are missing a fundamental point in computing.  "
"Actually, it is all about processing <b>data</b> through specific "
"<b>instructions</b>. In the buggle world, the main data are a bit hidden "
"behind the graphical representation, but that's no reason to never "
"manipulate some data explicitly."
msgstr ""
"Os programas que escrevemos até agora não tem um ponto fundamental da "
"computação. Na verdade, é sobre processar <b>dados</b> através de "
"<b>instruções</b> específicas. No mundo dos buggles, os dados principais "
"estão escondidos atrás de uma representação gráfica, mas isto não é motivo "
"para nunca manipular alguns dados explicitamente."

#. type: Content of: <h3>
#: src/lessons/welcome/variables/Variables.html:9
msgid "Data in [!thelang]"
msgstr "Dados em [!thelang]"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:10
msgid ""
"In a program, you can use several <i>types</i> of data, such as integers or "
"strings of chars. If you want to use a data several times, you need to store "
"it within a <i>variable</i>, which is a memory cell containing a value: you "
"put your data (say the value '5') in the variable (say 'length'), and you "
"can retrieve it later when you need it. That's very similar to a box of "
"label 'gift' in which you would put some stuff, like a bottle of perfume "
"\"Channel N°5\"."
msgstr ""
"Num programa, pode usar vários <i>tipos</i> de dados, tais como números "
"inteiros ou cadeias de caracteres, ou caracteres. Se quiser usar um dado "
"várias vezes, precisa armazená-la numa <i>variável</i>, que é uma célula de "
"memória a conter um valor: põe o seu dado (digamos o valor '5') na variável ("
"digamos 'comprimento') e pode recuperá-la mais tarde quando precisar dela. "
"Isto é muito similar a uma caixa com o rótulo 'presente' na qual pode pôr "
"alguma coisa, como um perfume \"Channel N°5\"."

#. type: Content of: <h3>
#: src/lessons/welcome/variables/Variables.html:17
msgid "Variable declarations"
msgstr "Declaração de variáveis"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:19
msgid ""
"<b>Declaring</b> (ie, creating) a variable in [!thelang], is very "
"simple. You just need to write [!java]its type, a space, and the variable "
"name.[/!] [!scala]the <code>var</code> keyword, the variable name, a column "
"(:) and the variable type an equal sign (=) and an initial value.[/!] "
"[!python]the variable name, an equal sign (=) and an initial value.[/!] The "
"variable name is the label to retrieve it afterward[!python].[/!] "
"[!java|scala] while the type is the kind of data that this variable accepts "
"to store.[/!] It is forbidden to use spaces in variable names. You can name "
"a variable <code>stepAmount</code> if you want, but <code>step amount</code> "
"is not a valid name."
msgstr ""
"<b>Declarar</b> (ie, criar) uma variável em [!thelang], é muito simples. "
"Simplesmente escreve [!java]o tipo dele, um espaço e o nome da variável.[/!] "
"[!scala]a palavra-chave <code>var</code>, o nome da variável, um dois-pontos "
"(:) e o tipo da variável, um sinal de igualdade (=) e um valor inicial.[/!] "
"[!python]o nome da variável, um sinal de igual (=) e um valor inicial.[/!] O "
"nome da variável é o rótulo para recuperar ela depois[!python].[/!] "
"[!java|scala] enquanto o tipo é o tipo de dado que a variável aceita "
"guardar.[/!] É proibido usar espaços em nomes de variáveis. Pode nomear uma "
"variável <code>quantidadeDePassos</code> se quiser, mas <code>quantidade de "
"passos</code> não é um nome válidos."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/variables/Variables.html:29
msgid "[!c|java]"
msgstr "[!c|java]"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:30
msgid ""
"So, to create a variable named <b>x</b> intended to contain integers, one "
"should write:"
msgstr ""
"Então, para criar uma variável chamada <b>x</b> para guardar inteiros, deve "
"escrever:"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:31
#, no-wrap
msgid "int x;"
msgstr "int x;"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:32
msgid ""
"If you want, you can specify the initial value of the variable by adding an "
"equal sign (=) followed by the value after the declaration."
msgstr ""
"Se quiser, pode especificar o valor inicial da variável a adicionar um "
"símbolo de igual (=) seguido do valor depois da declaração."

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:34
#, no-wrap
msgid "int x=5;"
msgstr "int x=5;"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/variables/Variables.html:35
#: src/lessons/welcome/variables/Variables.html:69
msgid "[/!] [!python]"
msgstr "[/!] [!python]"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:38
msgid ""
"So, if you want that the variable contains 5 as initial value, you should "
"type:"
msgstr ""
"Então se quiser que a variável tenha o valor inicial de 5, deve digitar:"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:39
#, no-wrap
msgid "x = 5"
msgstr "x = 5"

#. type: Content of: <ul><li>
#: src/lessons/welcome/variables/Variables.html:40
#: src/lessons/welcome/loopfor/LoopFor.html:68
#: src/lessons/welcome/bdr/BDR2.html:83
#: src/lessons/recursion/cons/universe/ConsWorld.html:34
msgid "[/!] [!scala]"
msgstr "[/!] [!scala]"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:43
msgid ""
"So, to create a variable named <b>x</b> intended to contain integers with 42 "
"as initial value, one should write:"
msgstr ""
"Logo, para criar uma variável chamada <b>x</b> que vai guardar inteiros e "
"com 42 como valor inicial, deve escrever:"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:44
#, no-wrap
msgid "var x:Int = 42"
msgstr "var x:Int = 42"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:45
msgid ""
"In most cases, the compiler is able to guess the type of the variable from "
"the initialization value, and you can omit it:"
msgstr ""
"Na maioria dos casos, o compilador é capaz de adivinhar o tipo da variável "
"baseado no valor inicial e pode omitir o tipo:"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:46
#, no-wrap
msgid "var x = 42"
msgstr "var x = 42"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:47
msgid ""
"You still have to specify if you use some generic values as an "
"initialization, such as the very particular value <code>null</code>, which "
"type happens to be ambiguous. Even when the type is clear, you can still "
"specify it if you prefer.  So you want that the variable contains 5 as "
"initial value, you should type:"
msgstr ""
"Ainda tem que especificar se usa alguns valores genéricos como uma "
"inicialização, tais como o valor muito especial <code>null</code>, cujo tipo "
"parece ser ambíguo. Mesmo quando o tipo é claro, ainda pode especificar o "
"tipo se preferir. Portanto, se quiser que a variável contenha 5 como valor "
"inicial, deve digitar:"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:50
#, no-wrap
msgid ""
"var x: Int =  5 <span class=\"comment\">// I can define the type if I want "
"to</span>\n"
"var y =  10      <span class=\"comment\">// or I can omit the type if I "
"prefer</span>"
msgstr ""
"var x: Int =  5 <span class=\"comment\">// Posso definir o tipo se "
"quiser</span>\n"
"var y =  10      <span class=\"comment\">// ou posso omitir o tipo se "
"preferir</span>"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/variables/Variables.html:52
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:39
msgid "[/!] [!java|scala|c]"
msgstr "[/!] [!java|scala|c]"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:55
msgid ""
"As you can see, the variables are <b>typed</b> in [!thelang], which means "
"that they are somehow specialized: A given variable can only store data of a "
"given type; Don't even think of storing numbers in a variable that is "
"tailored for letters! The [!thelang] language is said to be <b>statically "
"typed</b>."
msgstr ""
"Como pode ver, as variáveis são <b>tipadas</b> em [!thelang], que significa "
"que elas são de certa forma especializadas: Uma dada variável pode armazenar "
"apenas dados de um tipo; nem pense em guardar números numa variável que é "
"feita para letras! Dizemos que a linguagem [!thelang] é <b>estaticamente "
"tipada</b>."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:58
msgid ""
"Other languages (such as Python) are less picky and allow you to store any "
"kind of data in any variable, without restriction (those languages are said "
"to be <b>dynamically typed</b>).  This seems easier at the first glance, but "
"this kind of restriction allows the compiler to catch more logic errors for "
"you, which is also good. In some sense, Python is easier to write but errors "
"can sneak in more easily than in [!thelang]."
msgstr ""
"Outras linguages (como Python) são menos charas e permitem que guarde "
"qualquer tipo de dado em qualquer variável, sem restrições (estas linguagens "
"são ditas <b>dinamicamente tipadas</b>). Parecem mais fáceis à primeira "
"vista, mas este tipo de restrição permite que o compilador perceba mais "
"erros de lógica para você, o que é bom. Num certo sentido, Python é mais "
"fácil de escrever mas os erros surgem com mais frequencia do que em "
"[!thelang]."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:62
msgid "Here are some existing types in [!thelang]:"
msgstr "Aqui estão alguns dos tipos em [!thelang]:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/variables/Variables.html:64
msgid "<b>[!java|c]int[/!][!scala]Int[/!]</b>, for integers;"
msgstr "<b>[!java|c]int[/!][!scala]Int[/!]</b>, para inteiros;"

#. type: Content of: <ul><li>
#: src/lessons/welcome/variables/Variables.html:65
msgid "<b>[!java|c]double[/!][!scala]Double[/!]</b>, for dot numbers;"
msgstr "<b>[!java|c]double[/!][!scala]Double[/!]</b>, para números com vírgula;"

#. type: Content of: <ul><li>
#: src/lessons/welcome/variables/Variables.html:66
msgid ""
"<b>[!c]int[/!][!java]boolean[/!][!scala]Boolean[/!]</b>, for booleans that "
"are values being either [!c]1[/!][!java|scala]true[/!] or "
"[!c]0[/!][!java|scala]false[/!];"
msgstr ""
"<b>[!c]int[/!][!java]boolean[/!][!scala]Boolean[/!]</b>, para booleanos, que "
"são valores ou [!c]1[/!][!java|scala]true[/!] ou "
"[!c]0[/!][!java|scala]false[/!];"

#. type: Content of: <ul><li>
#: src/lessons/welcome/variables/Variables.html:67
msgid "<b>[!c]char*[/!][!java|scala]String[/!]</b>, for char strings."
msgstr ""
"<b>[!c]char*[/!][!java|scala]String[/!]</b>, para cadeias de caracteres."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:72
msgid ""
"As you can see, the variables are not <b>typed</b> in Python, which means "
"that they are not specialized in any type of data.  A given variable store "
"any type of data of a given type: you can store a number in a variable and "
"later on store a number in the same variable.  The values themselves are "
"still typed, but not the variable. Python is said to be <b>dynamically "
"typed</b>."
msgstr ""
"Como pode ver, as variáveis não são <b>digitadas</b> em Python, o que "
"significa que elas não são especializadas em nenhum tipo de dado.  Uma "
"determinada variável armazena qualquer tipo de dado de um determinado tipo: "
"pode armazenar um número numa variável e, mais tarde, armazenar um número na "
"mesma variável.  Os valores ainda são digitados, mas não a variável. Diz-se "
"que Python é de <b>tipagem dinâmica</b>."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:75
msgid ""
"Other languages (such as Java, Scala or C) are much more picky and prevent "
"you to mix data types in a given variable (they are said to be <b>statically "
"typed</b>).  This seems annoying at the first glance, but this kind of "
"restriction allows the compiler to catch more logic errors for you, which is "
"also good. In some sense, Python is easier to write but errors can sneak in "
"more easily."
msgstr ""
"Outras linguagens (como Java, Scala ou C), são muito mais exigentes e "
"impedem que misture tipos de dados numa certa variável (dizemos que elas são "
"<b>esticamente tipadas</b>). Isto parece inconveniente à primeira vista, mas "
"este tipo de restrição permite que o compilador capture mais erros de lógica "
"para você, o que também é bom. Num certo sentido, Python é mais fácil de "
"escrever mas erros podem surgir mais facilmente."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:81
msgid ""
"If you know that the value of your \"variable\" will never change (eg "
"because it contains the screen size or some other constant value), then you "
"should make it a <b>value</b> instead of a variable. Simply change the "
"<code>var</code> keyword with the <code>val</code> one. The compiler can "
"then check your actions and catch your error when you inadvertently modify "
"the value. More interestingly, the compiler can produce faster code in some "
"cases."
msgstr ""
"Se sabe que o valor da sua \"variável\" nunca vai mudar (eg quando ela "
"contém o tamanho do ecrã ou outro valor constante), então deve fazer dela um "
"<b>valor</b> ao invés de uma variável. Simplesmente mude a palavra-chave "
"<code>var</code> para <code>val</code>. O compilador pode então verificar as "
"suas ações e capturar o seu erro quando inadvertidamente modificar o valor. "
"Mais interessante ainda, o compilador pode produzir código mais rápido em "
"alguns casos."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:86
msgid ""
"Variables work very similarly for strings, floating point numbers and "
"boolean values."
msgstr ""
"Variáveis funcionam muito parecido com cadeias, números com vírgula e "
"valores booleanos."

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:88
#, no-wrap
msgid ""
"char* name = \"Martin Quinson\";\n"
"double height=1.77; <span class=\"comment\">// in meters</span>\n"
"int married=1;<span class=\"comment\">// 1 means \"true\"; \"false\" would "
"be written 0</span>"
msgstr ""
"char* nome = \"Martin Quinson\";\n"
"double altura=1.77; <span class=\"comment\">// em metros</span>\n"
"int casado=1;<span class=\"comment\">// 1 significa \"verdadeiro\"; false é "
"0</span>"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:93
#, no-wrap
msgid ""
"String name = \"Martin Quinson\";\n"
"double height=1.77; <span class=\"comment\">// in meters</span>\n"
"boolean married=true;<span class=\"comment\">// the contrary would be "
"written \"false\"</span>"
msgstr ""
"Cadeia nome = \"Martin Quinson\";\n"
"double altura=1.77; <span class=\"comment\">// em metros</span>\n"
"boolean casado=true;<span class=\"comment\">// o contrário se escreve \"false"
"\"</span>"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:97
#, no-wrap
msgid ""
"val name:String = \"Martin Quinson\"; <span class=\"comment\">// this cannot "
"be modified (it's a value)</span>\n"
"var height: Double = 1.77; <span class=\"comment\">// in meters</span>\n"
"var married = true; <span class=\"comment\">// the contrary would be written "
"\"false\"</span>\n"
"<span class=\"comment\">// Scala knows that 'true' is a Boolean value, no "
"need to repeat it here</span>"
msgstr ""
"val nome:String = \"Martin Quinson\"; <span class=\"comment\">// isto não "
"pode ser modificado (é um valor)</span>\n"
"var altura: Double = 1.77; <span class=\"comment\">// em metros</span>\n"
"var casado = true; <span class=\"comment\">// o contrário se escreve \"false"
"\"</span>\n"
"<span class=\"comment\">// Scala sabe que 'true' é um valor Booleano, não "
"precisa repetir</span>"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:102
#, no-wrap
msgid ""
"firstName = \"Martin\"\n"
"lastName = 'Quinson' <span class=\"comment\"># both single and double quote "
"work here</span>\n"
"motto = \"I never finish anyth' (but I keep trying)\" <span "
"class=\"comment\"># having single quote within double quote is fine</span> "
"\n"
"height=1.77 <span class=\"comment\"># in meters</span>\n"
"married=True <span class=\"comment\"># the contrary would be written "
"\"False\"</span>"
msgstr ""
"firstName = \"Martin\"\n"
"lastName = 'Quinson' <span class=\"comment\"># aspas e aspas simples "
"funcionam aqui</span>\n"
"frase = \"uma gota d'água é sempre melhor que nada\" <span class=\"comment\""
"># uma aspas simples entre aspas duplas vale</span> \n"
"altura=1.77 <span class=\"comment\"># em metros</span>\n"
"casado=True <span class=\"comment\"># o contrário se escreve \"False\"</span>"

#. type: Content of: <h3>
#: src/lessons/welcome/variables/Variables.html:108
msgid "Affectations"
msgstr "Atribuições"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:110
msgid ""
"Once your variable is declared, you can <b>affect</b> a new value to it "
"later in the program. That's really easy:"
msgstr ""
"Uma vez que a sua variável está declarada, pode lhe <b>atribuir</b> um novo "
"valor mais tarde no programa. Isto é bem fácil:"

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:111
#, no-wrap
msgid "x = 3[!java|c];[/!]"
msgstr "x = 3[!java|c];[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:113
msgid ""
"To the right of the equal symbol, you can put an arithmetic expression "
"containing constants, variables and operations."
msgstr ""
"À esquerda do símbolo de igual pode pôr uma expressão aritmética a conter "
"constantes, variáveis e operações."

#. type: Content of: <pre>
#: src/lessons/welcome/variables/Variables.html:115
#, no-wrap
msgid ""
"x = 3 + 2[!java|c];[/!]\n"
"x = 3 * x[!java|c];[/!]\n"
"[!java|scala|python]greeting = \"Hello \"+name[!java];[/!] <span "
"class=\"comment\">[!python]#[/!][!scala|java]//[/!] + is (also) the "
"operation to concatenate (ie, to join) strings[/!]</span>"
msgstr ""
"x = 3 + 2[!java|c];[/!]\n"
"x = 3 * x[!java|c];[/!]\n"
"[!java|scala|python]saudação = \"Oi \"+nome[!java];[/!] <span class=\"comment"
"\">[!python]#[/!][!scala|java]//[/!] + é (também) a operação para concatenar "
"(ie, para juntar) cadeias[/!]</span>"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/variables/Variables.html:120
msgid ""
"It is now time to do more challenging exercises, don't you think? The "
"objective is now to move forward until you find a baggle, pick it up, and "
"then move back to your initial location before dropping the baggle."
msgstr ""
"Agora vamos fazer exercícios mais desafiantes, certo? O objetivo agora é "
"mover para a frente até encontrar um baggle, apanhar-lo e mover para trás "
"até a localização inicial antes de sotar o baggle."

#. type: Content of: <h3>
#: src/lessons/welcome/variables/Variables.html:125
msgid "How to do this?"
msgstr "Como fazer isto?"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:126
msgid ""
"To solve this problem, you have to decompose it in easier sub-parts. For "
"example, you may want to do the following steps:"
msgstr ""
"Para resolver este problema, tem que decompor-lo em sub-partes menores. Por "
"exemplo, pode fazer os passos seguintes:"

#. type: Content of: <p><ol><li>
#: src/lessons/welcome/variables/Variables.html:129
msgid "Move forward until located over a baggle"
msgstr "Mover para a frente até se pôr sobre um baggle"

#. type: Content of: <p><ol><li>
#: src/lessons/welcome/variables/Variables.html:130
msgid "Pickup the baggle"
msgstr "Apanhar o baggle"

#. type: Content of: <p><ol><li>
#: src/lessons/welcome/variables/Variables.html:131
msgid "Move backward of the same amount of steps than done in first step"
msgstr "Mover para trás a mesma quantidade de passos que deu no primeiro passo"

#. type: Content of: <p><ol><li>
#: src/lessons/welcome/variables/Variables.html:132
msgid "Drop back the baggle"
msgstr "Soltar o baggle de novo"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:135
msgid ""
"Naturally, it is impossible to do the right amount of steps backward at step "
"3 if you didn't count the amount of steps done in the first phase. You can "
"use a variable for that, which can be named <code>stepAmount</code>."
msgstr ""
"Naturalmente, é impossível dar a quantidade certa de passos para trás no "
"passo 3 se não contou a quantidade de passos dados na primeira fase. Pode "
"usar uma variável para isto, que pode ser chamada "
"<code>quantidadeDePassos</code>."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:139
msgid ""
"Create an integer variable before phase 1, initialize it to 0, and each time "
"you move one step forward, increment its value by one (<code>stepAmount = "
"stepAmount + 1;</code>[!java|c] or <code>stepAmount++;</code>, both syntaxes "
"being equivalent[/!]).  Such variable which takes every values of a given "
"range is often called a <b>stepper</b>."
msgstr ""
"Crie uma variável inteira antes da fase 1, inicie ela com 0 e a cada vez que "
"der um passo para frente, incremente ela de um (<code>quantidadeDePassos = "
"quantidadeDePassos + 1;</code>[!java] ou <code>quantidadeDePassos++;</code>, "
"ambas as sintaxes são equivalentes[/!]).  Tais variáveis que obtèm cada "
"valor de um dado intervalo são normalmente chamadas de <b>stepper</b>."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/variables/Variables.html:145
msgid "[!python|scala]"
msgstr "[!python|scala]"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:146
msgid ""
"If you know Java or other languages, you will probably try to use the "
"<code>++</code> operator to increment the variable, but it's not allowed in "
"[!thelang].  This is because it would be difficult to define this operator "
"for every data types.  For example, what should ++ do when applied to a "
"Complex value or to a String? The problem does not occur in Java as "
"<code>int</code> is not an object but a primitive type.  (if you don't know "
"the <code>++</code>, just ignore this paragraph: it does not exist in "
"[!thelang])"
msgstr ""
"Se conhece Java ou outras linguagens, provavelmente vai tentar usar o "
"operador <code>++</code> para incrementar a variável, mas isto não é "
"permitido em [!thelang].  Isto é por que seria difícil definir este operador "
"para todos os tipos de dados.  Por exemplo, o que faria ++ quando aplicado a "
"um valor complexo ou a uma cadeia? O problema não ocorre em Java, pois "
"<code>int</code> não é um objeto e sim um tipo primitivo.  (se não conhece o "
"<code>++</code>, simplesmente ignore este parágrafo: fnão existe em "
"[!thelang])"

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:154
msgid ""
"Then, phase 3 consists in simply creating a new integer variable "
"<code>doneSteps</code> initialized to 0, and do one step backward as long as "
"<code>doneSteps</code> is not equal to <code>stepAmount</code>, incrementing "
"<code>doneSteps</code> each time. The <code>!=</code> operator should be "
"used to test the inequality (whether some values are NOT equal)."
msgstr ""
"Então, a fase 3 consiste em simplesmente criar uma nova variável inteira "
"<code>passosDados</code> iniciada como 0 e dar um passos para trás enquanto "
"<code>passosDados</code> não for igual a <code>quantidadeDePassos</code>, a "
"aumentar <code>passosDados</code> a cada vez. O operador <code>!=</code> "
"deve ser usado para testar a inequação (quando um valor NÃO É igual)."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:161
msgid "It's your turn now!"
msgstr "Agora é a sua vez!"

#. type: Content of: <h2>
#: src/lessons/welcome/variables/RunFour.html:2
msgid "Run Four bases"
msgstr "Ande quatro bases"

#. type: Content of: <p>
#: src/lessons/welcome/variables/RunFour.html:4
msgid ""
"Today is a great day for the buggles: the Big Buggles' Race begun. It's a "
"traditional competition in which young buggles prove their value to the "
"tribe. Both force and intelligence is exercised: you have to rush forward, "
"but stop as soon as you reach your fourth baggle.  Please help the buggles "
"to move forward while counting the baggles and to determine when to stop."
msgstr ""
"Hoje é um grande dia para os buggles: a grande corrida dos Buggles começou. "
"Esta é uma competição tradicional na qual jovens buggles mostram o valor "
"deles para a tribo. Tanto força quanto inteligência são exercitados: tem que "
"correr, mas parar assim que alcançar o quarto baggle. Por favor, ajude os "
"buggles a se moverem para frente enquanto conta os baggles e determina "
"quando parar."

#. type: Content of: <h2>
#: src/lessons/welcome/variables/RunHalf.html:2
msgid "The Four Halves run"
msgstr "A corrida dos quatro meios"

#. type: Content of: <p>
#: src/lessons/welcome/variables/RunHalf.html:4
msgid ""
"Here is the second day of the Big Buggles' Race.  As previously, you have to "
"run forward until you reach the right cell to stop on.  But this time, you "
"have to reach the cell where the amount of baggles you saw is the double of "
"the orange cells plus 1.  In other words, the following condition must "
"become true: <code>2 * baggles = orangeCells + 1</code>."
msgstr ""
"Chegamos ao segundo dia da grande corrida dos Buggles. Como antes, tem que "
"correr até alcançar a célula certa para parar. Mas desta vez, tem que "
"alcançar a célula onde a quantidade de baggles que viu é o dobro da "
"quantidade de células laranjas mais 1. Em outras palavras, a seguinte "
"condição deve se tornar verdadeira <code>2 * baggles = célulasLaranjas + "
"1</code>."

#. type: Content of: <p>
#: src/lessons/welcome/variables/RunHalf.html:10
msgid ""
"You can determine whether you are over a orange cell with the "
"<code>isOverOrange()</code> method."
msgstr ""
"Pode determinar quando está sobre uma célula laranja com o método "
"<code>isOverOrange()</code>."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:4
msgid ""
"While loops are well adapted to situations where you want to achieve an "
"action while a condition stays true, but it is less adapted to achieve a "
"given action a predetermined amount of time. For example, when we wanted to "
"move <code>stepAmount</code> steps backward in a previous exercise, we had "
"to create a new variable, initialize it, and move backward while "
"incrementing this variable until it became equal to <code>stepAmount</code>."
msgstr ""
"loops 'while' são bem adaptados a situações onde precise realizar uma ação "
"enquanto uma condição se mantém verdadeira, mas são menos preparados para "
"realizar uma ação numa quantidade predeterminada. Por exemplo, quando nos "
"quisemos mover <code>quantidadeDePassos</code> para trás num exercício "
"anterior, tivemos que criar uma nova variável, inicializar ela e mover para "
"trás enquanto aumentávamos esta variável até ela se tornar igual a "
"<code>quantidadeDePassos</code>."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:11
msgid ""
"In such situations, <code>for</code> loops become handy. Their syntax is the "
"following:"
msgstr ""
"Em tais situações, loops <code>for</code> se tornam úteis. As sintaxes delas "
"são as seguintes:"

#. type: Content of: <pre>
#: src/lessons/welcome/loopfor/LoopFor.html:13
#, no-wrap
msgid ""
"[!java|c]for (<b>initializing</b>; <b>condition</b>; <b>incrementing</b>) "
"{\n"
"    <b>action</b>();\n"
"}[/!][!python]for <b>variable</b> in <b>sequence of values</b>:\n"
"    <b>action</b>()[/!][!scala] for (<b>variable</b> &lt;- <b>firstValue</b> "
"to <b>lastValue</b>) { \n"
"    <b>action</b>();\n"
"}[/!]"
msgstr ""
"[!java|c]for (<b>inicialização</b>; <b>condição</b>; <b>incremento</b>) {\n"
"    <b>ação</b>();\n"
"}[/!][!python]for <b>variável</b> in <b>sequência-de-valores</b>:\n"
"    <b>ação</b>()[/!][!scala] for (<b>variável</b> &lt;- <b>primeiroValor</"
"b> to <b>últimoValor</b>) { \n"
"    <b>ação</b>();\n"
"}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:20
msgid ""
"For example to repeat the loop body <code>n</code> times, [!python] it is "
"handy to use the instruction <code>range(n)</code> to generate the sequence "
"n integer value from 0 to n-1.[/!] [!java|scala|c] one should write:[/!]"
msgstr ""
"Por exemplo, para repetir o corpo do loop <code>n</code> vezes, [!python] é "
"útil usar a instrução <code>range(n)</code> para gerar a sequência de n "
"valores inteiros de 0 a n-1.[/!] [!java|scala|c] deve escrever:[/!]"

#. type: Content of: <pre>
#: src/lessons/welcome/loopfor/LoopFor.html:23
#, no-wrap
msgid ""
"[!java]for (int stepper=0; stepper&lt;n; stepper++) {\n"
"    <b>action</b>();\n"
"}[/!][!c]int stepper;\n"
"for (stepper=0; stepper&lt;n; stepper++) {\n"
"    <b>action</b>();\n"
"}[/!][!python]for <b>stepper</b> in <b>range(n)</b>:\n"
"    <b>action</b>()[/!][!scala] for (<b>stepper</b> &lt;- <b>1</b> to "
"<b>n</b>) { \n"
"    <b>action</b>();\n"
"}[/!]"
msgstr ""
"[!java]for (int iterador=0; iterador&lt;n; iterador++) {\n"
"    <b>ação</b>();\n"
"}[/!][!c]int iterador;\n"
"for (iterador=0; iterador&lt;n; iterador++) {\n"
"    <b>ação</b>();\n"
"}[/!][!python]for <b>iterador</b> in <b>range(n)</b>:\n"
"    <b>ação</b>()[/!][!scala] for (<b>iterador</b> &lt;- <b>1</b> to "
"<b>n</b>) { \n"
"    <b>ação</b>();\n"
"}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:33
msgid ""
"This code is then equivalent to the following one from the computer point of "
"view. From the programmer point of view, one form or the other can make the "
"source code easier to read, depending on the situation. You should chose "
"wisely in each situation whether you want to use a for loop or a while "
"loop. Your uttermost goal should remain to keep your code simple and easy to "
"read, to ensure that your day remain pleasant and productive."
msgstr ""
"Este código é então equivalente ao seguinte do ponto de vista do computador. "
"Do ponto de vista do programador, uma forma ou outra pode ser mais difícil "
"ou mais fácil de ler, a depender da situação. Deve escolher sabiamente em "
"qual situação usar um loop for ou um loop while. O seu objetivo principal "
"deve ser manter o seu código simples e fácil de ler, para garantir que o seu "
"dia seja agradável e produtivo."

#. type: Content of: <pre>
#: src/lessons/welcome/loopfor/LoopFor.html:41
#, no-wrap
msgid ""
"[!java|c]int stepper = 0;\n"
"while (stepper &lt; n) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>action</b>();\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>stepper++</b>;\n"
"}[/!][!python]stepper=0\n"
"while stepper &lt; n: \n"
"    action()\n"
"    stepper = stepper + 1[/!][!scala]\n"
"var stepper = 1\n"
"while (stepper &lt;= n) {\n"
"    <b>action</b>()\n"
"    stepper = stepper + 1\n"
"}[/!]"
msgstr ""
"[!java|c]int iterador = 0;\n"
"while (iterador &lt; n) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>ação</b>();\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>iterador++</b>;\n"
"}[/!][!python]iterador=0\n"
"while iterador &lt; n: \n"
"    ação()\n"
"    iterador = iterador + 1[/!][!scala]\n"
"var iterador = 1\n"
"while (iterador &lt;= n) {\n"
"    <b>ação</b>()\n"
"    iterador = iterador + 1\n"
"}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:55
msgid "In that case, the <code>for</code> loop is easier to read, don't you think?"
msgstr "Neste caso, o loop <code>for</code> é fácil de ler, não acha?"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:58
msgid ""
"It is possible to build more advanced <tt>for</tt> loops since any valid "
"instruction can be used as initialization, condition and incrementing "
"instruction. The following example is a bit extreme as there is no need for "
"a loop body to move the buggle forward until it reaches the wall, but it "
"works well: all the work is done in the condition and incrementing "
"instruction."
msgstr ""
"É possível construir loops <tt>for</tt> mais avançados já que qualquer "
"instrução válida pode ser usada como inicialização, condição e instrução de "
"incrementação. O exemplo seguinte é um pouco extremo, pois não existe "
"necessidade para um corpo de loop mover um buggle para frente até alcançar a "
"parede, mas funciona bem: todo o trabalho é feito nas instruções de condição "
"e incremento."

#. type: Content of: <pre>
#: src/lessons/welcome/loopfor/LoopFor.html:64
#, no-wrap
msgid ""
"for (; !isFacingWall() ; forward()) { \n"
"   <span class=\"comment\">/* nothing in the loop body */</span>\n"
"}\n"
"<span class=\"comment\">/* the buggle now faces a wall */</span>"
msgstr ""
"for (; !isFacingWall() ; forward()) { \n"
"   <span class=\"comment\">/* nada no corpo do loop */</span>\n"
"}\n"
"<span class=\"comment\">/* o buggle agora está de cara para uma parede "
"*/</span>"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:71
msgid ""
"If you want to nest several loops, you can do it on one line in Scala. This "
"means that the two following chunks are equivalent:"
msgstr ""
"Se quer aninhar vários loops, pode fazer-lo numa linha no Scala. Isto "
"significa que os dois blocos seguintes são equivalentes:"

#. type: Content of: <pre>
#: src/lessons/welcome/loopfor/LoopFor.html:72
#, no-wrap
msgid ""
"for (stepper1 &lt;- 1 to n) {\n"
"    for (stepper2 &lt;- 1 to m) {\n"
"       actions()\n"
"    }\n"
"}"
msgstr ""
"for (iterador1 &lt;- 1 to n) {\n"
"    for (iterador2 &lt;- 1 to m) {\n"
"       ações()\n"
"    }\n"
"}"

#. type: Content of: <pre>
#: src/lessons/welcome/loopfor/LoopFor.html:77
#, no-wrap
msgid ""
"for (stepper1 &lt;- 1 to n; stepper2 &lt;- 1 to m) { <span "
"class=\"comment\">// Simply separate both loop conditions with a "
"semi-column</span>\n"
"    actions()\n"
"}"
msgstr ""
"for (iterador1 &lt;- 1 to n; iterador2 &lt;- 1 to m) { <span class=\"comment"
"\">// Simplesmente separe as duas condições de loop com um "
"ponto-e-vírgula</span>\n"
"    ações()\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:83
msgid ""
"You now have to redo the same exercise than previously (move forward until "
"being over a baggle, pick it up, move back to your original location, drop "
"the baggle), but using a <code>for</code> loop instead of a "
"<code>while</code> loop to move back to the initial location."
msgstr ""
"Agora tem que refazer o mesmo exercício de antes (mover para frente até "
"estar sobre um baggle, pegá-lo, mover para trás até a localização original, "
"soltar o baggle), mas a usar um loop <code>for</code> no lugar de um loop "
"<code>while</code> para mover de volta ao local inicial."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:88
msgid "Once done, you can proceed to next exercise."
msgstr "Uma vez feito, pode seguir ao próximo exercício."

#. type: Content of: <h2>
#: src/lessons/welcome/loopfor/LoopStairs.html:2
msgid "Stairway to Heaven"
msgstr "Uma escadaria para o Céu"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopStairs.html:4
msgid ""
"Your buggle feels a bit depressed today, but it's currently facing a magic "
"stair: It leads directly to heaven, and each time you walk on it, joyful "
"colors spur all around."
msgstr ""
"O seu buggle está um pouco deprimido hoje, mas está em frente de uma escada "
"mágica: ela leva diretamente ao paraíso e cada vez que anda nela, belas "
"cores surgem de todos os lados."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopStairs.html:7
msgid ""
"Your goal is to take this stair, one step after the other.  First devise the "
"four instructions you have to give you buggle to take one stair step, and "
"then put them in a loop to take the whole stair."
msgstr ""
"O seu objetivo é subir a escada, um passo de cada vez. Primeiro \"devise\" "
"as quatro instruções que tem que dar ao buggle para subir um degrau e então "
"ponha-a num loop para subir toda a escada."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopStairs.html:11
msgid ""
"Before that, walk a bit forward to reach that stair, and ensure that you are "
"in the right situation for your loop content to run properly. And once you "
"reach the heaven, take some steps in your new home.  Meanwhile, you just "
"have to walk your way, the colors appear automagically."
msgstr ""
"Antes disto, ande um pouco para a frente para alcançar a escada e certifique-"
"se de estar na situação certa para que o que o loop faz seja feito "
"corretamente. E uma vez alcançado o Céu, dê uns passos no seu novo lar. "
"Enquanto isto, deve apenas seguir o seu caminho, as cores aparecem "
"automagicamente."

#. type: Content of: <h2>
#: src/lessons/welcome/loopfor/LoopCourse.html:2
msgid "Training Buggle"
msgstr "Treinar o Buggle"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopCourse.html:4
msgid ""
"Today, your buggle wants to get some serious exercise: It wants to run 'till "
"the track burns! Its super-shoes are just perfect to run like hell, but "
"unfortunately, they can actually damage the track on the long run..."
msgstr ""
"Hoje o seu buggle quer fazer exercício seriamente: quer correr até tocar "
"fogo na trilha! Os super-sapatos deles são perfeitos para correr loucamente, "
"mas infelizmente, podem estragar seriamente a trilha a longo prazo..."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopCourse.html:7
msgid ""
"Your goal is to run the track 10 times, no matter what happens.  Even if the "
"track suffers, you <b>really HAVE</b> to take that run.  Remember, the track "
"has four sides, that take eight steps each to run along.  Now go, and show "
"them what these super shoes can do."
msgstr ""
"O seu objetivo é percorrer a trilha 10 vezes, não importa o que aconteça. "
"Mesmo se a trilha \"suffers\", <b>TEM MESMO</b> que fazer esta corrida. "
"Lembre-se, a triha tem quatro lados, cada lado com oito passos. Agora vá e "
"mostre-lhe o que os seus super-sapatos podem fazer."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopCourse.html:12
msgid ""
"You don't have to do anything particular with regard of the colors: your "
"shoes will do it for you. Just take that run!"
msgstr ""
"Não tem que fazer nada de particular com respeito às cores: os seus sapatos "
"vão fazer isto para si. Apenas corra!"

#. type: Content of: <h2>
#: src/lessons/welcome/loopfor/LoopCourseForest.html:2
msgid "Outdoor Training Buggle"
msgstr "Treinamento ao ar livre do Buggle"

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopCourseForest.html:4
msgid ""
"Well, our last training didn't went that well. The track actually burned, "
"and we are now banned from there.  This time, our buggle decided to practice "
"outdoor, in the middle of the forest, with its good old shoes instead.  The "
"problem is that you have to be careful to not fall into water. The track on "
"which you can run is rather narrow: One side is now 4 steps forward, 2 steps "
"to the left, 4 steps to the right, 2 steps to the right, 4 steps to the "
"left, and you want to run 7 around."
msgstr ""
"Bem, nosso último treino teve um probleminha. A trilha tocou fogo e fomos "
"banidos de lá. Desta vez, nosso buggle decidiu praticar ao ar livre, no meio "
"da floresta, com os sapatos velhos deles. O problema é que tem que ser "
"cuidadoso para não cair na água. A trilha onde corre é estreita: \"One side "
"is now\" 4 passos para a frente, 2 passos para a esquerda, 4 passos para a "
"direita, 2 passos para a direita, 4 passos para a esquerda, \"and you want "
"to run 7 around\"."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopCourseForest.html:10
msgid ""
"Oh crap, running on the grass seems to destroy it too! So just take your 7 "
"loops around the garden, and move along to the next exercise before anyone "
"notices the damage you made..."
msgstr ""
"Putz, correr na grama destrói a grama também! Então dê apenas 7 voltas no "
"jardim e depois vá ao próximo exercício antes que alguém perceba o estrago "
"que fez..."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:4
msgid ""
"Some cells of the world are yellow, but your buggle cannot stand being in "
"such cells. Write the necessary code to move forward until the ground gets "
"white. For that, use the provided method <code>isGroundWhite()</code>."
msgstr ""
"Algumas células do mundo são amarelas, mas o seu buggle não pode ficar sobre "
"estas células. Escreva o código necessário para mover para a frente até que "
"o chão fique branco. Para isto use o método fornecido "
"<code>isGroundWhite()</code>."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:8
msgid ""
"The trick is that most buggles of this world are currently on this yellow "
"ground that they dislike so much. That is why they are in panic, and every "
"buggle rushes one cell forward, even the buggle that was not on a yellow "
"cell at first. In other worlds, even if the ground is white on the first "
"cell, you still want to move forward to the next cell."
msgstr ""
"O truque é que a maioria dos buggles deste mundo ficam sobre o chão amarelo "
"que eles não gostam. é por isto que eles estão em pânico e cada buggle "
"\"rushes\" uma célula para a frente, mesmo aqueles que não estavam numa "
"célula amarela no começo. Em outras palavras, mesmo se o chão for branco na "
"primeira célula, ainda vai mover para a próxima célula."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:13
msgid "The general idea is to do something like:"
msgstr "A ideia geral é fazer algo como:"

#. type: Content of: <pre>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:14
#, no-wrap
msgid "move forward until located in a white cell"
msgstr "Mover para a frente até estar numa célula branca"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:16
msgid ""
"The main difficulty is that we want this loop body to be executed once, even "
"we are already on a white cell.  It would be easy to do so by duplicating "
"the loop content before the actual loop, but this would be a bad idea: code "
"duplication is a <b>very</b> bad habit, and you should <b>always</b> avoid "
"it."
msgstr ""
"A coisa mais difícil é que queremos executar o corpo do loop uma vez, mesmo "
"se já estivermos numa célula branca. Isto é fácil a duplicar o código do "
"loop'antes do loop em si, mas esta é uma má ideia: diplicação de código é um "
"hábito <b>muito</b> ruim e deve evitar isto <b>sempre</b>."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:20
msgid ""
"Code duplication easily turns code maintenance into a nightmare: reading the "
"code becomes difficult as the reader must ensure that no slight difference "
"exist between the versions. Debugging the code becomes difficult, as bugs "
"have to be fixed in all versions. Actually, every modification of the code "
"becomes difficult. So, really, you should <b>always</b> strive to not "
"duplicate your code if you can avoid. And the good news is that you always "
"can..."
msgstr ""
"Duplicação de código faz da manutenção de código um pesadelo rapidamente: é "
"fdifícil ler o código e o leitor tem que garantir que nenhuma pequena "
"diferença exista entre as versões. Depurar o código se torna difícil, pois "
"os bugs devem ser consertados em todas as versões. Na verdade, cada "
"modificação do código se torna difícil. Então, na verdade, deve <b>sempre</"
"b> se esforçar para não duplicar o seu código sempre que possível. Mas a boa "
"notícia é que sempre pode..."

#. type: Content of: <h3>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:25
msgid "Executing the loop body at least once"
msgstr "A executar o corpo do loop pelo menos uma vez"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:26
#: src/lessons/welcome/loopdowhile/Poucet2.html:19
#: src/lessons/welcome/array/basics/Array1.html:100
#: src/lessons/turmites/helloturmite/HelloTurmite.html:54
#: src/lessons/maze/pledge/PledgeMaze.html:59
msgid "[!python]"
msgstr "[!python]"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:27
msgid ""
"Some languages have specific constructs for that, but not the Python "
"language. No problem, we can do it on our own! A good way is to have a "
"dedicated variable indicating whether we are taking the loop for the first "
"time or not, as follows."
msgstr ""
"Algumas linguagens tem construções específicas para isto, mas não a "
"linguagem Python. Sem problemas, podemos fazer isto nós mesmos! Uma boa "
"forma é ter uma variável dedicada a indicar se estamos a entrar no loop a "
"primeira vez ou não, como segue."

#. type: Content of: <pre>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:31
#, no-wrap
msgid ""
"firstTime = True\n"
"while firstTime or (other conditions):\n"
"  firstTime = False\n"
"  (loop body)\n"
msgstr ""
"primeiraVez = True\n"
"while primeiraVez or (outras condições):\n"
"  primeiraVez = False\n"
"  (corpo do loop)\n"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:37
msgid ""
"When <code>firstTime</code> is true, the loop body is executed even if the "
"other conditions would imply the contrary.  Once the loop body has been "
"executed once, it is set to false and never impact again the decision to "
"enter the body or not."
msgstr ""
"Quando <code>primeiraVez</code> é true, o corpo do loop é executado mesmo se "
"as outras condições digam o contrário.  uma vez que o loop tenha sido "
"executado uma vez, esta variável vira false e nunca mais impacta na decisão "
"de entrar ou não no loop."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:43
msgid ""
"In a <tt>while</tt> loop, the condition is evaluated before anything else, "
"and if it's false, the loop body is never evaluated. Sometimes (although not "
"that often), you would prefer the loop body to get evaluated at least once, "
"even if the condition is initially false. For that, a variation of the "
"<tt>while</tt> loop gets used, using the following syntax in [!thelang].  "
"[!java|c]Do not forget the semi-column (;) after the condition, it is "
"mandatory.[/!]"
msgstr ""
"Num loop <tt>while</tt>, a condição é calculada antes de qualquer coisa e se "
"for falsa, o corpo do loop nunca é executado. Algumas vezes (mas não muito "
"frequentemente), pode preferir que o corpo do loop seja executado pelo menos "
"uma vez, mesmo se a condição seja inicialmente falsa. Para isto, uma "
"variação do loop <tt>while</tt> é usada, com a seguinte sintaxe em [!thelang]"
".  [!java|c]Não se esqueça do ponto-e-vírgula (;) depois da condição, que é "
"obrigatório.[/!]"

#. type: Content of: <p><pre>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:51
#, no-wrap
msgid ""
"do {\n"
"    <b>action()</b>[!java];[/!]\n"
"} while (<b>condition</b>)[!java];[/!]"
msgstr ""
"do {\n"
"    <b>ação()</b>[!java];[/!]\n"
"} while (<b>condição</b>)[!java];[/!]"

#. type: Content of: <h2>
#: src/lessons/welcome/loopdowhile/Poucet1.html:2
msgid "Tracks of buggles"
msgstr "Trilhas de buggles"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:4
msgid ""
"Your buggle got lost in a strange maze, and you must help it to find the "
"exit that is represented in orange.  You cannot simply explain the path to "
"the exit in something like "
"<code>right();forward();forward();forward()</code> because you have to save "
"two buggles at the same time, that are lost in similar but not identical "
"worlds.  You can switch to the other world by using the combobox above the "
"world representation (where it's written 'Deep Forest' right now), and "
"selecting the other entry (that should read 'Deeper Forest')."
msgstr ""
"O seu buggle perdeu-se num estranho labirinto e deve ajudá-lo a achar a "
"saída que está representada em laranja. Não pode simplesmente explicar o "
"caminho para a saída com algo do tipo "
"<code>right();forward();forward();forward()</code> por que tem que gravar "
"dois buggles ao mesmo tempo, que estão presos em mundos similares, mas não "
"iguais. Pode alternar para o outro mundo a usar o combobox acima da "
"representação do mundo (onde está escrito 'Floresta Fechada' agora) e "
"selecionar a outra entrada (que deve ler 'Floresta Mais Fechada')."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:10
msgid ""
"The good news is that the path to the exit is written on the ground. As you "
"can see, the world is made of several corridors, with baggles on the "
"ground. After each corridor, you should turn left if the corridor contains "
"three baggels or more, and you have to turn right if there is only 2 baggles "
"or less."
msgstr ""
"A boa nova é que o caminho para a saída está desenhado no chão. Como pode "
"ver, o mundo é feito de vários corredores, com baggles no chão. Depois de "
"cada corredor, deve virar à esquerda se o corredor tiver três baggels ou "
"mais e virar a direita se tiver apenas 2 ou menos baggles."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:14
msgid ""
"You should count exactly 5 cells per corridor, from intersection to "
"intersection.  Consider in your count the intersection ending the corridor "
"but not the intersection before the corridor."
msgstr ""
"Deve contar exatamente 5 células por corredor, de intersecção a "
"intersecção.  Considere na sua contagem a intersecção terminar o corredor, "
"mas não a intersecção antes do corredor."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:18
msgid ""
"So, the general form of your code must be something like \"while I did not "
"find the exit, take the next corridor to decide whether I should turn left "
"or right at the next intersection\". You can determine whether you are on "
"the exit cell (that is orange) with the provided <code>exitReached()</code> "
"method."
msgstr ""
"Logo, a forma geral do seu código deve ser algo como \"enquanto não "
"encontrar a saída, escolha o próximo corredor para decidir se vira à esqueda "
"ou à direita na próxima intersecção\". Pode determinar se está na célula de "
"saída (que é laranja) com o método <code>exitReached()</code> fornecido."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:22
msgid ""
"To take one corridor, you simply have to run from one intersection to "
"another while counting the baggles you see on your path. That's easy: there "
"is 5 steps in each corridors so a simple <code>for</code> loop suffices."
msgstr ""
"Para entrar num corredor, tem que simplesmente correr de uma intersecção "
"para outra enquanto conta os baggles que vê no seu caminho. Isto é fácil: "
"existem 5 passos em cada corredor, de forma que um simples loop <code>for</"
"code> resolve."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/welcome/loopdowhile/Poucet1.html:26
msgid "I cannot imagine how to count the baggles I see."
msgstr "Não consigo imaginar como contar os baggles que vejo."

#. type: Content of: <p><div>
#: src/lessons/welcome/loopdowhile/Poucet1.html:27
msgid ""
"You need a variable that is initialized to 0, and incremented each time you "
"see a baggle on the ground. A variable used this way is often called "
"<i>counter</i>."
msgstr ""
"Precisa de uma variável que é inicializada em 0 e incrementada cada vez que "
"vê um baggle no chão. Uma variável usada desta forma é frequentemente "
"chamada de <i>contador</i>."

#. type: Content of: <p><div>
#: src/lessons/welcome/loopdowhile/Poucet1.html:29
msgid "Don't forget to reset your counter to 0 at the beginning of each corridor!"
msgstr ""
"Não se esqueça de resetar o seu contador para 0 no começo de cada corredor!"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:32
msgid ""
"Oh, and when you reach the exit, don't forget to take an extra step to "
"actually exit the maze!"
msgstr ""
"Ah, e quando chegar na saída, não se esqueça de dar um passo a mais para "
"sair de fato do labirinto!"

#. type: Content of: <h2>
#: src/lessons/welcome/loopdowhile/Poucet2.html:2
msgid "More buggles tracks"
msgstr "Mais rastros de buggles"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet2.html:4
msgid ""
"Hu oh! Your buggle got lost again in the same kind of maze, but this time, "
"the corridors are not always of the same size. Since there is no way to know "
"the length of the corridor before taking it, a <code>for</code> will not "
"suffice anymore. Instead, you will have to change your inner loop to use a "
"<code>while</code> loop, using the method <code>crossing()</code> that tells "
"whether your buggle currently stands on an intersection."
msgstr ""
"Uau! O seu buggle perdeu-se novamente no mesmo tipo de labirinto, mas desta "
"vez, os corredores nem sempre são do mesmo tamanho. Porque não há como saber "
"a comprimento do corredor antes de tomá-lo, um <code>for</code> não será "
"mais suficiente. Ao invés disso, terá que mudar o seu loop interno para usar "
"um loop <code>while</code>, a usar o método <code>crossing()</code> que diz "
"se o seu buggle está atualmente numa intersecção."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet2.html:10
msgid ""
"The extra complexity is that at the beginning of a corridor, you obviously "
"stand on an intersection, but you still want to move on.  [!java|scala|c]For "
"that, the easiest is to use a <code>do / while</code> loop instead of a "
"regular <code>while</code> loop to move until the next intersection.[/!] "
"[!python]For that, use an extra variable indicating whether you already "
"entered the corridor, as follows. This will ensure that you execute the loop "
"body at least once (when <code>firstTime</code> is true) before we actually "
"use the value returned by <code>crossing()</code> to determine to continue "
"or not.[/!]"
msgstr ""
"A complexidade adicional é que no início de um corredor, obviamente está num "
"cruzamento, mas ainda quer seguir.  [!java|scala|c]Para isso, o mais fácil é "
"usar um loop <code>do / while</code> em vez de um loop regular <code>while</"
"code> para mover até a próxima intersecção.[/!] [!python]Para isso, use uma "
"variável adicional para indicar se já entrou no corredor, como a seguir. "
"Isto assegurará que execute o corpo do loop pelo menos uma vez (quando "
"<code>firstTime</code> for true) antes de usarmos o valor retornado por "
"<code>crossing()</code> para determinar se devemos continuar ou não.[/!]"

#. type: Content of: <pre>
#: src/lessons/welcome/loopdowhile/Poucet2.html:20
#, no-wrap
msgid ""
"firstTime = True\n"
"while firstTime or not crossing():\n"
"  firstTime = False\n"
"  (loop body)\n"
msgstr ""
"primeiraVez = True\n"
"while primeiraVez or not crossing():\n"
"  primeiraVez = False\n"
"  (corpo do loop)\n"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet2.html:27
msgid "With that new trick, your buggle should exit this maze quite easily."
msgstr ""
"Com esse novo truque, o seu buggle deve sair desse labirinto muito "
"facilmente."

#. type: Content of: <h1>
#: src/lessons/welcome/array/basics/Array1.html:2
msgid "[!java|scala]Arrays[/!][!python]Lists[/!] and Knotting"
msgstr "[!java|scala]Arrays[/!][!python]Lists[/!] e nós"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/basics/Array1.html:4
msgid ""
"The goal of this exercise is to reproduce the pattern of the first row in "
"the other rows with a shift of one cell (see the Objective tab for "
"details). The biggest difference between this exercise and the others we had "
"on patterns is that you have to read the pattern (on first row) before "
"reproducing it. You cannot do otherwise because the same code will be "
"executed on three different worlds, each of them having a specific pattern."
msgstr ""
"O objetivo deste exercício é reproduzir o padrão da primeira linha nas "
"outras linhas com um deslocamento de uma célula (veja a guia Objetivo para "
"detalhes). A maior diferença entre este exercício e os outros sobre padrões "
"é que tem que ler o padrão (na primeira linha) antes de reproduzí-lo. Não "
"pode fazer de outro jeito por que o mesmo código será executado em três "
"mundos diferentes, cada um com um próprio padrão."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:12
msgid ""
"One solution is to read the next cell, and go copy it in position before "
"coming back to read the second cell. But since it is forbidden to use the "
"methods to teleport the buggle to a specific position (<code>setPos()</code> "
"and similar), this approach will be a pain to implement."
msgstr ""
"Uma solução é ler a próxima célula e copiá-la à posição antes de voltar para "
"ler a segunda célula. Mas já que é proibido usar os métodos de "
"teletransporte de buggle para uma posição específica (<code>setPos()</code> "
"e similares), esta abordagem seria muito difícil de implementar."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:17
msgid ""
"The simplest is to store the sequence of colors that constitute the whole "
"pattern in an [!java|scala]<b>array</b>[/!][!python]<b>list</b>[/!].  But "
"before we can do so, we should learn a bit what "
"[!java|scala]arrays[/!][!python]lists[/!] are."
msgstr ""
"O mais simples é armazenar a sequência de cores que constituem o padrão "
"inteiro numa [!java|scala]<b>array</b>[/!][!python]<b>list</b>[/!].  Mas "
"antes de fazer isto, devemos aprender um pouco sobre o que "
"[!java|scala]arrays[/!][!python]lists[/!] são."

#. type: Content of: <h2>
#: src/lessons/welcome/array/basics/Array1.html:21
msgid "[!java|scala]Arrays[/!][!python]List[/!]"
msgstr "[!java|scala]Arrays[/!][!python]List[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:23
msgid ""
"[!java|scala]An array[/!][!python]A list[/!] is an ordered sequence of "
"variables that go together.  It is somehow similar to a shelve where each "
"level can store a separate value. Each variable of the sequence is "
"identified by its position, and can store a specific value. [!java|scala]All "
"cells of the array must store values of the same type because arrays are "
"homogeneous in [!thelang]. It is possible to trick this restriction by using "
"the datatype <code>[!java]Object[/!][!scala]Any[/!]</code> that can contain "
"[!java]almost[/!] any other datatype. [!java]Primitive types such as the "
"ones we saw so far (int, boolean, double, char, etc) cannot be stored in an "
"Object variable, but their objectified counter-part (Integer, Boolean, "
"Double, Char, Boolean, etc) can.[/!] It is however a good practice to make "
"the type of an array as specific as possible, i.e., if you plan to store "
"some integers in your array, make it an array of integers, not of "
"[!java]Object[/!][!scala]Any[/!].[/!] [!python]Lists can even mix values of "
"differing types, such as integer values in some cells and colors in other "
"cells.[/!]"
msgstr ""
"[!java|scala]Uma array[/!][!python]Uma list[/!] é uma sequência ordenada de "
"variáveis que ficam juntas. é similar a uma estante onde em cada prateleira "
"se coloca um valor separado. Cada variável da sequência é identificada pela "
"posição dela e pode armazenar um valor específico. [!java|scala]todas as "
"células da array devem armazenar valores do mesmo tipo por que arrays são "
"homogêneas em [!thelang]. É possível burlar esta restrição a usar tipos de "
"dados <code>[!java]Object[/!][!scala]Any[/!]</code> que contenham "
"[!java]praticamente[/!] qualquer outro tipo de dados. [!java]Tipos "
"primitivos como aqueles que vimos anteriormente (int, boolean, double, char, "
"etc) não podem ser armazenados numa variável Object, mas suas contrapartidas "
"objetificadas (Integer, Boolean, Double, Char, Boolean, etc) podem.[/!] "
"Entretanto, é boa prática fazer o tipo de uma array o mais específico "
"possível, p.ex., se planea armazenar alguns inteiros na sua array, faça dela "
"uma array de inteiros, não de [!java]Object[/!][!scala]Any[/!].[/!] [!python]"
"Lists podematé mesmo misturar valores de diferentes tipos, como valores "
"inteiros em algumas células e cores em outras células.[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:40
msgid ""
"T is the [!java|scala]array[/!][!python]list[/!]'s name, "
"[!java|python]T[0][/!][!scala]T(0)[/!] is the name of the first cell, "
"[!java|python]T[1][/!][!scala]T(1)[/!] the name of the second cell, "
"[!java|python]T[2][/!][!scala]T(2)[/!] the third one, etc. And yes, the "
"first cell is numbered [!java|python]T[0][/!][!scala]T(0)[/!] while the last "
"one of [!java|scala]an array[/!][!python]a list[/!] of size N is "
"[!java|python]T[N-1][/!][!scala]T(N-1)[/!]. It may seem funny to count "
"starting from 0 and not from 1 as usual, but some historical reasons make it "
"unavoidable here."
msgstr ""
"T é o nome da [!java|scala]array[/!][!python]list[/!], "
"[!java|python]T[0][/!][!scala]T(0)[/!] é o nome da primeira célula, "
"[!java|python]T[1][/!][!scala]T(1)[/!] é o nome da segunda célula, "
"[!java|python]T[2][/!][!scala]T(2)[/!] da terceira e etc. E sim, a primeira "
"célula é numerada [!java|python]T[0][/!][!scala]T(0)[/!] e a última de uma "
"[!java|scala]array[/!][!python]list[/!] de tamanho N é "
"[!java|python]T[N-1][/!][!scala]T(N-1)[/!]. Pode parecer estranho contar a "
"partir de 0 e não de 1 como normalmente, mas por motivos históricos isto "
"agora é inevitável."

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:48
msgid "Basic usage"
msgstr "Uso básico"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:50
msgid ""
"We can use an integer variable <i>i</i> to access with "
"[!java|python]T[i][/!][!scala]T(i)[/!] to the cells: when the value of "
"<i>i</i> is 0, then [!java|python]T[i][/!][!scala]T(i)[/!] accesses "
"[!java|python]T[0][/!][!scala]T(0)[/!]; when the value of <i>i</i> is 10, "
"then [!java|python]T[i][/!][!scala]T(i)[/!] accesses "
"[!java|python]T[10][/!][!scala]T(10)[/!].  <i>i</i> is said to be the "
"<b>index</b> in T.  <code>[!java|python]T[i][/!][!scala]T(i)[/!]</code> can "
"be used just like any variable. We can set a new value:"
msgstr ""
"Podemos usar uma variável inteira <i>i</i> para acessar com "
"[!java|python]T[i][/!][!scala]T(i)[/!] as células: quando o valor de <i>i</"
"i> é 0, [!java|python]T[i][/!][!scala]T(i)[/!] acessa "
"[!java|python]T[0][/!][!scala]T(0)[/!]; quando o valor de <i>i</i> é 10, "
"[!java|python]T[i][/!][!scala]T(i)[/!] acessa "
"[!java|python]T[10][/!][!scala]T(10)[/!]. Sizemos que <i>i</i> é o "
"<b>índice</b> em T. <code>[!java|python]T[i][/!][!scala]T(i)[/!]</code> pode "
"ser usada simplesmente como qualquer variável. Podemos configurar um novo "
"valor:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:58
#, no-wrap
msgid "[!java|python]T[i][/!][!scala]T(i)[/!] = 78[!java];[/!]"
msgstr "[!java|python]T[i][/!][!scala]T(i)[/!] = 78[!java];[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:60
msgid "We can retrieve and use its value:"
msgstr "Podemos recuperar e usar valor dele:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:61
#, no-wrap
msgid "x = [!java|python]T[i][/!][!scala]T(i)[/!][!java];[/!]"
msgstr "x = [!java|python]T[i][/!][!scala]T(i)[/!][!java];[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:63
msgid "We can test this value:"
msgstr "Podemos testar este valor:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:64
#, no-wrap
msgid ""
"if ([!java|python]T[i][/!][!scala]T(i)[/!] > 0) "
"[!scala|java]{[/!][!python]:[/!]\n"
"    [!java|scala]//[/!][!python]#[/!] instructions...\n"
"[!java|scala]}[/!]"
msgstr ""
"if ([!java|python]T[i][/!][!scala]T(i)[/!] > 0) "
"[!scala|java]{[/!][!python]:[/!]\n"
"    [!java|scala]//[/!][!python]#[/!] instruções...\n"
"[!java|scala]}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:68
msgid ""
"It is very easy to traverse the whole "
"[!scala|java]array[/!][!python]list[/!], for example to initialize each "
"cells."
msgstr ""
"É muito fácil percorrer toda a [!scala|java]array[/!][!python]list[/!], por "
"exemplo para iniciar as células."

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:71
#, no-wrap
msgid ""
"[!java]for (int i = 0; i&lt;T.length; i++) {[/!][!python]for i in "
"range(len(T)):[/!][!scala]for (i &lt;- 0 to T.length-1) {[/!]\n"
"   [!java|python]T[i][/!][!scala]T(i)[/!] = 3[!java];[/!]\n"
"[!java|scala]}[/!]"
msgstr ""
"[!java]for (int i = 0; i&lt;T.length; i++) {[/!][!python]for i in "
"range(len(T)):[/!][!scala]for (i &lt;- 0 to T.length-1) {[/!]\n"
"   [!java|python]T[i][/!][!scala]T(i)[/!] = 3[!java];[/!]\n"
"[!java|scala]}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:75
msgid ""
"[!java|scala]The notation <code>T.length</code> retrieves the length of the "
"array T,[/!] [!python]The function <code>len()</code> retrieves the length "
"of the list T,[/!] allowing to build a classical for loop easily.  "
"[!python]Actually, the <code>len()</code> function is much more generic and "
"can be used to retrieve the length of many objects.  Applied to strings for "
"example, it returns the amount of chars in this string.[/!] [!scala]Don't "
"forget to start at <code>0</code> and stop at <code>T.length-1</code> "
"instead of <code>1</code> to <code>T.length</code> however.[/!]"
msgstr ""
"[!java|scala]A notação <code>T.length</code> recupera o comprimento (length) "
"da  array T,[/!] [!python]A função <code>len()</code> recupera o comprimento "
"da lista T,[/!] a permitir que se construa um loop clássico facilmente.  "
"[!python]Na verdade, a função <code>len()</code> é muito mais genérica e "
"pode ser usada para recuperar o comprimento de muitos objetos. Aplicada numa "
"cadeia, por exemplo, ela retorna a quantidade de caracteres na cadeia.[/!] "
"[!scala]Não se esqueça de começar em <code>0</code> e terminar em <code>T."
"length-1</code> ao invés de ir de <code>1</code> até <code>T."
"length</code>.[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:83
msgid ""
"If you just want to iterate over the values of T without keeping track of "
"their index, you can simply write:"
msgstr ""
"Se quer simplesmente iterar nos valores de T sem controlar o índice, pode "
"simplesmente escrever:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:84
#, no-wrap
msgid ""
"[!java]for (int i: T) {[/!][!scala]for (i &lt;- T) {[/!][!python]for i in "
"T:[/!]\n"
"  action()[!java];[/!]\n"
"[!java|scala]}[/!]"
msgstr ""
"[!java]for (int i: T) {[/!][!scala]for (i &lt;- T) {[/!][!python]for i in "
"T:[/!]\n"
"  ação()[!java];[/!]\n"
"[!java|scala]}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:87
msgid ""
"[!java]This construct is called an <i>extended loop</i> in Java. The "
"variable <i>i</i> takes all values of the set located to the right of the "
"colon (:), one after the other.[/!] [!python|scala]This is actually very "
"similar to the previous construct.  Simply, "
"<code>[!python]range(n)[/!][!scala]i to j[/!]</code> returns a set of "
"integers over which the for construct iterates.  Actually, [!thelang] offers "
"much more elegant ways to traverse [!python]lists[/!][!scala]arrays[/!] and "
"other data collections, but this should be the topic of a specific set of "
"exercises (that are still to be written in PLM).[/!]"
msgstr ""
"[!java]Esta construção é chamada um <i>loop extendido</i> em Java. A "
"variável <i>i</i> assume todos os valores do conjunto localizado a direita "
"do dois-pontos (:), um depois do outro.[/!] [!python|scala]Isto é na verdade "
"muito similar à construção anterior. Simplesmente, "
"<code>[!python]range(n)[/!][!scala]i to j[/!]</code> retorna um conjunto de "
"inteiros sobre os quais o loop for itera. Na verdade, [!thelang] oferece "
"formas muito mais elegantes de percorrer [!python]lists[/!][!scala]arrays[/!]"
" e outras coleções de dados, mas isto fica para um conjunto específico de "
"exercícios (que ainda será escrito no PLM).[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:98
msgid "Declaring [!python]a list[/!][!java|scala]an array[/!]"
msgstr "Declarar uma [!python]list[/!][!java|scala]array[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:101
msgid ""
"If you know beforehand the content of your list, you can affect these values "
"all together.  Just put them between square braces and separated by commas "
"as follows:"
msgstr ""
"Se sabe antecipadamente o conteúdo da sua lista, pode atribuir os valores "
"todos juntos. Ponha eles simplesmente entre colchetes e separados por "
"vírgulas como segue:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:104
#, no-wrap
msgid ""
"L = [1, 3, 5, 7, 9] \n"
"<span class=\"comment\"># L is now an array of 5 values, all of them being "
"integers</span>"
msgstr ""
"L = [1, 3, 5, 7, 9] \n"
"<span class=\"comment\"># L agora é uma array de 5 valores, todos eles "
"inteiros</span>"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:106
msgid ""
"Otherwise, you probably want to create an empty list and then append each "
"values separately to the list:"
msgstr ""
"Por outro lado, provavelmente vai criar uma lista vazia e depois anexar-la "
"os valores separadamente:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:108
#, no-wrap
msgid ""
"L2 = [] \n"
"<span class=\"comment\"># L2 is now an empty list</span>\n"
"L2.append(1)\n"
"L2.append(3)\n"
"L2.append(5)\n"
"L2.append(7)\n"
"L2.append(9) \n"
"<span class=\"comment\"># Its content is now the same as L previously</span>"
msgstr ""
"L2 = [] \n"
"<span class=\"comment\"># neste momento, L2 é uma lista vazia</span>\n"
"L2.append(1)\n"
"L2.append(3)\n"
"L2.append(5)\n"
"L2.append(7)\n"
"L2.append(9) \n"
"<span class=\"comment\"># E agora o seu conteúdo é igual ao de L, vista "
"antes</span>"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/basics/Array1.html:116
#: src/lessons/turmites/helloturmite/HelloTurmite.html:61
msgid "[/!] [!java|scala]"
msgstr "[/!] [!java|scala]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:119
msgid ""
"To declare a variable named <b>T</b> that can store an array of integers, "
"one should write:"
msgstr ""
"Para declarar uma variável chamada <b>T</b> que pode guardar uma array de "
"inteiros, deve escrever:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:120
#, no-wrap
msgid "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"
msgstr "[!java]int[] T;[/!][!scala]var T:Array[Int][/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:122
msgid ""
"[!java]<code>int</code> means that the elements of the array are of type "
"integer; <code>[]</code> means that we are speaking of an array and "
"<code>T</code> is the name of the variable.  For historical reasons, this "
"can also be written as <code>int T[]</code> (with the [] after the variable "
"name), but this is less readable and should probably be avoided.[/!] "
"[!scala]The <code>[Int]</code> notation specializes the Array type (that is "
"generic), specifying that each cell of this array is an integer. An array of "
"booleans would simply by written <code>Array[Boolean]</code>.[/!]"
msgstr ""
"[!java]<code>int</code> significa que os elementos da array são do tipo "
"inteiro; <code>[]</code> significa que estamos a falar de uma array e "
"<code>T</code> é o nome da variável. Por motivos históricos, também pode ser "
"escrito como <code>int T[]</code> (com o [] depois do nome da variável), mas "
"como assim é menos legível, é melhor evitar esta forma.[/!] [!scala]A "
"notação <code>[Int]</code> especializa o tipo Array (que é genérico), a "
"especificar que cada célula desta array é um inteiro. Um array de booleanos "
"deve ser escrito simplesmente como <code>Array[Boolean]</code>.[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:130
msgid "Allocating an array"
msgstr "Alocar uma array"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:132
msgid ""
"Declaring a variable <code>T</code> that stores an array only reserve the "
"<b>name</b> <code>T</code> for later use, but not the memory area to store "
"the cells. The array is not initialized yet: it does not have any "
"value. What would <code>[!java]T[4][/!][!scala]T(4)[/!]</code> mean if we "
"didn't say that the array is 5 cells long?"
msgstr ""
"Declarar uma variável <code>T</code> que armazena uma array apenas reserva o "
"<b>nome</b> <code>T</code> para uso futuro, mas não reserva a área de "
"memória para armazenar as células. A array ainda não está inicializada: ela "
"não tem qualquer valor. O que significa "
"<code>[!java]T[4][/!][!scala]T(4)[/!]</code> se ainda não dissemos que a "
"array tem 5 células?"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:137
msgid "First and foremost, we have to give a value to <code>T</code>:"
msgstr "Primeiramente, temos que dar um valor a <code>T</code>:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:138
#, no-wrap
msgid "[!java]T = new int[10];[/!][!scala]var T = new Array[Int](10)[/!]"
msgstr "[!java]T = new int[10];[/!][!scala]var T = new Array[Int](10)[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:140
msgid ""
"<code>new</code> means that we want to create something, and "
"<code>[!java]int[10][/!][!scala]Array[Int](10)[/!]</code> means that it is "
"an array of 10 integer values.  In return, an array of 10 integer cells is "
"created in memory, and the <code>T</code> variable <b>references</b> this "
"array."
msgstr ""
"<code>new</code> (novo) significa que queremos criar algo e "
"<code>[!java]int[10][/!][!scala]Array[Int](10)[/!]</code> significa que é "
"uma array de 10 valores inteiros. Como resultado, uma array de 10 células "
"para valores inteiros é criada na memória e a variável <code>T</code> <b>faz "
"referência</b> a esta array."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:145
msgid ""
"The size of an array is fixed and cannot be changed after the creation of "
"the array. The size of a <code>T</code> array can be retrieve by consulting "
"the variable <code>T.length</code>."
msgstr ""
"O tamanho de uma array é fixo e não pode ser mudado depois da criação da "
"array. O tamanho de uma array <code>T</code> pode ser recuperado ao se "
"consultar a variável <code>T.length</code>."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:149
msgid ""
"While allocating, you can specify the size with a variable: "
"<code>[!java]int[] T = new int[i];[/!][!scala]var T = new "
"Array[Int](i);[/!]</code> In this case, the array's size will be set to the "
"value of <code>i</code> <i>when <code>new</code> gets called</i>.  The size "
"of the array still cannot be modified: even if the variable <code>i</code> "
"changes afterward, the size remains to the value given when it was "
"allocated.  [!java]Also, it is forbidden to write something like <code>int "
"T[10];</code> when declaring the variable.  You are required to use the "
"<code>new</code> instruction to allocate it, as in <code>int[] T = new "
"int[10];</code> [/!]"
msgstr ""
"Ao alocar pode especificar o tamanho com uma variável: <code>[!java]int[] T "
"= new int[i];[/!][!scala]var T = new Array[Int](i);[/!]</code> Neste caso, o "
"tamanho da array será ajustado para o valor de <code>i</code> <i>quando "
"<code>new</code> for chamado</i>.  O tamanho da array ainda não pode ser "
"modificado: mesmo se a variável <code>i</code> mudar depois disto, o tamanho "
"permanece o do valor dado no momento da alocação.  [!java]Além disto, é "
"proibido escrever algo como <code>int T[10];</code> no momento de declarar a "
"variável. Deve usar a instrução <code>new</code> para alocar o array, como "
"em <code>int[] T = new int[10];</code> [/!]"

#. type: Content of: <h4>
#: src/lessons/welcome/array/basics/Array1.html:157
msgid "Declaration and initialization"
msgstr "Declaração e inicialização"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:158
msgid ""
"If you know beforehand the content of your array, you can declare, allocate "
"and initialize it in one shoot:"
msgstr ""
"Se sabe previamente o conteúdo da sua array, pode declarar, alocar e "
"inicializar-la toda de uma vez:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:159
#, no-wrap
msgid ""
"[!java]int[] T = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };[/!][!scala]var T = "
"Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)[/!]"
msgstr ""
"[!java]int[] T = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };[/!][!scala]var T = Array("
"1, 2, 3, 4, 5, 6, 7, 8, 9, 10)[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:161
msgid ""
"To know the size of the array to allocate, the compiler counts the provided "
"values.  This code is equivalent to:"
msgstr ""
"Para saber o tamanho da array para alocar, o compilador conta os valores "
"dados. Este código é equivalente a:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:163
#, no-wrap
msgid ""
"[!java]int[] T = new int[10];\n"
"T[0] = 1;\n"
"T[1] = 2;\n"
"...\n"
"T[9] = 10;[/!][!scala]var T = new Array[Int](10);\n"
"T(0) = 1\n"
"T(1) = 2\n"
"...\n"
"T(9) = 10[/!]"
msgstr ""
"[!java]int[] T = new int[10];\n"
"T[0] = 1;\n"
"T[1] = 2;\n"
"...\n"
"T[9] = 10;[/!][!scala]var T = new Array[Int](10);\n"
"T(0) = 1\n"
"T(1) = 2\n"
"...\n"
"T(9) = 10[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:173
msgid "It is also equivalent to:"
msgstr "também é equivalente a:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:174
#, no-wrap
msgid ""
"[!java]int[] T = new int[10];\n"
"for (int i=0; i&lt;T.length; i++) {\n"
"  T[i] = i+1;\n"
"}[/!][!scala]var T = new Array[Int](10);\n"
"for (i &lt;- 0 to T.length-1) {\n"
"  T(i) = i+1\n"
"}[/!]"
msgstr ""
"[!java]int[] T = new int[10];\n"
"for (int i=0; i&lt;T.length; i++) {\n"
"  T[i] = i+1;\n"
"}[/!][!scala]var T = new Array[Int](10);\n"
"for (i &lt;- 0 to T.length-1) {\n"
"  T(i) = i+1\n"
"}[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:185
msgid "[!python]Lists[/!][!scala|java]Arrays[/!] and method parameters"
msgstr "[!python]Lists[/!][!scala|java]Arrays[/!] e parâmetros de métodos"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:186
msgid ""
"It is perfectly OK to pass [!python]a list[/!][!java|scala]an array[/!] to a "
"method as a parameter.  This method can then use this parameter as if it "
"were defined locally:"
msgstr ""
"Não há nenhum problema em passar uma [!python]list[/!][!java|scala]array[/!] "
"para um método como parâmetro. Este método pode então usar este parâmetro "
"como se fosse definido localmente:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:188
#, no-wrap
msgid ""
"[!java]boolean has42First(int[] array) {\n"
"    return array[0] == 42;\n"
"}[/!][!python]def has42First(list):\n"
"  return list[0] == 42[/!][!scala]def has42First(array:Array[Int]):Boolean = "
"{\n"
"  return array(0) == 42\n"
"}[/!]"
msgstr ""
"[!java]boolean has42First(int[] array) {\n"
"    return array[0] == 42;\n"
"}[/!][!python]def has42First(list):\n"
"  return list[0] == 42[/!][!scala]def has42First(array:Array[Int]):Boolean = "
"{\n"
"  return array(0) == 42\n"
"}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:195
msgid "On the caller side, that also very simple:"
msgstr "No lado de quem invoca também é bastante simples:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:196
#, no-wrap
msgid ""
"[!java]int[] tab = new int[10];[/!][!scala]var tab = new Array[Int] "
"(10)[/!][!python]tab = [1, 3, 5, 7, 9][/!]\n"
"[!java|scala]<span class=\"comment\">// Values initialization "
"omitted</span>\n"
"[/!]if (has42First(tab))[!java|scala] {[/!][!python]:[/!]\n"
"   <span class=\"comment\">[!java|scala]//[/!][!python]#[/!] do "
"something</span>\n"
"[!java|scala]}[/!]"
msgstr ""
"[!java]int[] tab = new int[10];[/!][!scala]var tab = new Array[Int] "
"(10)[/!][!python]tab = [1, 3, 5, 7, 9][/!]\n"
"[!java|scala]<span class=\"comment\">// inicialização de valores "
"omitida</span>\n"
"[/!]if (has42First(tab))[!java|scala] {[/!][!python]:[/!]\n"
"   <span class=\"comment\">[!java|scala]//[/!][!python]#[/!] faz algo</span>"
"\n"
"[!java|scala]}[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/basics/Array1.html:202
#: src/lessons/turmites/langton/Langton.html:21
msgid "[!java]"
msgstr "[!java]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:203
msgid ""
"If you want to allocate and initialize the array in one shoot, that's a bit "
"more complicated as the compiler has to know the type of the parameter you "
"are creating.  For that, use the following (ugly) construct:"
msgstr ""
"Se quer alocar e inicializar o array de uma vez só, é um pouco mais "
"complicado pois o compilador terá que saber o tipo do parâmetro queestá a "
"criar. Para isto, use a seguinte construção (feia):"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:206
#, no-wrap
msgid ""
"if (has42First(   new int[] {1, 3, 5, 7, 9}   ) {\n"
"   <span class=\"comment\">// do something</span>\n"
"}"
msgstr ""
"if (has42First(   new int[] {1, 3, 5, 7, 9}   ) {\n"
"   <span class=\"comment\">// faz algo</span>\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:211
msgid ""
"Methods can also return [!java|scala]arrays[/!][!python]lists[/!] as result "
"without any complication.  Here is a method that returns [!java|scala]an "
"array[/!][!python]a list[/!] of the requested size, filled with 42s."
msgstr ""
"Métodos também podem retornar [!java|scala]arrays[/!][!python]lists[/!] como "
"resultado sem nenhuma complicação. Aqui está um método que retorna uma "
"[!java|scala]array[/!][!python]list[/!] do tamanho pedido, preenchido com "
"42s."

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array1.html:214
#, no-wrap
msgid ""
"[!java]int[] fill42(int size) {\n"
"    int[] res = new int[size];\n"
"    for (int i=0; i&lt;size; i++) \n"
"        res[i] = 42;\n"
"    return res;\n"
"}[/!][!scala]def fill42(size:Int):Array[Int] = {\n"
"    var res = new Array[int] (size)\n"
"    for (i &lt;- 0 to size -1) {\n"
"        res(i) = 42;\n"
"    }\n"
"    return res;\n"
"}[/!][!python]def fill42(size):\n"
"    res = []\n"
"    for i in range(size):\n"
"        res.append(42)\n"
"    return res[/!]"
msgstr ""
"[!java]int[] fill42(int size) {\n"
"    int[] res = new int[size];\n"
"    for (int i=0; i&lt;size; i++) \n"
"        res[i] = 42;\n"
"    return res;\n"
"}[/!][!scala]def fill42(size:Int):Array[Int] = {\n"
"    var res = new Array[int] (size)\n"
"    for (i &lt;- 0 to size -1) {\n"
"        res(i) = 42;\n"
"    }\n"
"    return res;\n"
"}[/!][!python]def fill42(size):\n"
"    res = []\n"
"    for i in range(size):\n"
"        res.append(42)\n"
"    return res[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:231
#: src/lessons/recursion/lego/square/FourSquare.html:48
#: src/lessons/recursion/hanoi/HanoiBoard.html:21
msgid "Goal of this exercise"
msgstr "Objetivo deste exercício"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:233
msgid "At least! After this long explanation, we can come back to the exercise."
msgstr "Finalmente! Depois desta longa explicação, podemos voltar ao exercício."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:234
msgid ""
"Your mission is rather simple actually.  Your code should save the color "
"pattern observed on the first row into [!java|scala]an array[/!][!python]a "
"list[/!].  [!python]The easiest is to create an empty list, and then "
"<code>append()</code> the colors one after the others as you read them (with "
"<code>getGroundColor()</code>).[/!] [!java|scala]For that, you should "
"declare and allocate an array of <code>Color</code>. Beware, there is "
"several worlds, of differing size; use <code>getWorldHeight()</code> to "
"retrieve the size of the current world.  Once the array allocated, fill it "
"by reading the ground color in each locations (with "
"<code>getGroundColor()</code>).[/!]"
msgstr ""
"A sua missão é bastante simples, na verdade. O seu código deve guardar o "
"padrão de cores observado na primeira linha numa "
"[!java|scala]array[/!][!python]list[/!].  [!python]O mais fácil é criar uma "
"lista vazia e depois usar <code>append()</code>para adicionar as cores uma "
"por uma à medida que for a ler elas (com <code>getGroundColor()</code>).[/!] "
"[!java|scala]Para isto, deve declarar e alocar uma array de <code>Cor</"
"code>. Mas atencção, existem vários mundos, de diferentes tamanhos; use "
"<code>getWorldHeight()</code> para recuperar o tamanho do mundo atual. Uma "
"que a array esteja alocada, preencha ela a ler a cor do chão em cada um dos "
"pontos (com <code>getGroundColor()</code>).[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array1.html:242
msgid ""
"Once you managed to read and save the pattern on the first row, you have to "
"reapply the pattern on every rows, for example by executing "
"<code>getWorldHeight()</code> times a method written specifically for this."
msgstr ""
"Uma vez que conseguiu ler e gravar o padrão na primeira linha, tem que "
"reaplicar o padrão nas outras linhas, por exemplo a executar "
"<code>getWorldHeight()</code> vezes um método escrito especificamente para "
"isto."

#. type: Content of: <h1>
#: src/lessons/welcome/array/basics/Array2.html:2
msgid "[!java|scala]Arrays[/!][!python]Lists[/!], Knotting and Modulos"
msgstr "[!java|scala]Arrays[/!][!python]Lists[/!], Nós e Módulos"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array2.html:4
msgid ""
"This exercise is similar to the previous one: you have to reproduce the "
"color pattern of the first cell into the other ones."
msgstr ""
"Este exercício é similar ao anterior: tem que reproduzir o padrão de cores "
"da primeira célula para as outras."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array2.html:7
msgid ""
"The first difference is that the world is bordered of walls: you thus have "
"to slightly modify your trajectory to ensure that the buggle does not crash "
"into a wall. The simpler for that is to handle the first cell out of the "
"<code>for</code> loop and do only <code>getWorldHeight()-1</code> steps in "
"the loop."
msgstr ""
"A primeira diferença é que o mundo é cercado de muros: portanto tem que "
"modificar levemente a sua trajetória para garantir que o buggle não bata num "
"muro. O jeito mais simples é manipular a primeira célula fora do loop "
"<code>for</code> e fazer apenas <code>getWorldHeight()-1</code> passos no "
"loop."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array2.html:13
msgid ""
"The other difference is that the offset to apply between columns is not "
"fixed, but written on the first cell of each column. To get the info as an "
"integer, we can use:"
msgstr ""
"A outra diferença é que o deslocamento para aplicar entre as colunas não é "
"fixo, mas está escrito na primeira célula de cada coluna. Para obter a "
"informação como um inteiro, podemos usar:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/basics/Array2.html:17
#, no-wrap
msgid ""
"[!java]int offset = Integer.parseInt(readMessage())[/!][!python]offset = "
"int( readMessage() )[/!][!scala]val offset = readMessage().toInt[/!]"
msgstr ""
"[!java]int deslocamento = Integer.parseInt(readMessage())[/!][!python]"
"deslocamento = int( readMessage() )[/!][!scala]val deslocamento = "
"readMessage().toInt[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array2.html:19
msgid ""
"<code>readMessage()</code> gets the message on the ground as a "
"[!java|scala]String[/!][!python]string[/!], while "
"<code>[!java]Integer.parseInt(str)[/!][!scala]str.toInt[/!][!python]int(str)[/!]</code> "
"transforms the string <code>str</code> into an integer by <i>reading</i> it."
msgstr ""
"<code>readMessage()</code> obtém a mensagem no chão como uma "
"[!java|scala]String[/!][!python]string[/!], enquanto <code>[!java]Integer."
"parseInt(str)[/!][!scala]str.toInt[/!][!python]int(str)[/!]</code> "
"transforma a cadeia <code>str</code> num inteiro ao <i>ler</i> ela."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array2.html:23
msgid ""
"Then, to pick the right color, the easier is to use the <code>%</code> "
"(modulo) operator. For example, <code>(i + 5) % size</code> allows to "
"retrieve the <code>i</code>th cell of an array of size <code>size</code> "
"with an offset of <code>5</code>."
msgstr ""
"Então, para escolher a cor certa, o mais fácil é usar o operador <code>%</"
"code> (operador módulo). Por exemplo, <code>(i + 5) % tam</code> serve para "
"recuperar a <code>i</code>-ésima célula de uma array de tamanho <code>tam</"
"code> com um deslocamento de <code>5</code>."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array2.html:28
msgid "You're up."
msgstr "Agora é consigo."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/IndexOfValue.html:2
msgid "Searching for a given value"
msgstr "Procurar por um dado valor"

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:4
msgid ""
"The goal of this exercise is to search the cell of a given value, and return "
"its position."
msgstr ""
"O objetivo deste exercício é procurar a célula de um dado valor e retornar a "
"posição dela."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:6
msgid ""
"To that extend, you should fill the method <code>indexOf()</code>, which "
"parameters are the array to explore, and the value to search. If the value "
"<code>lookingFor</code> is not in the array <code>tab</code>, the method "
"should return -1."
msgstr ""
"Para isto, deve preencher o método <code>indexOf()</code>, cujos parâmetros "
"são a array a ser explorada e o valor a ser procurado. Se o valor "
"<code>lookingFor</code> não está na array <code>tab</code>, o método deve "
"retornar -1."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:10
msgid ""
"The idea of the algorithm is to sweep over the whole array, checking the "
"value of each cell. If it's the searched value, you should return the index "
"of the cell currently checked."
msgstr ""
"A ideia do algoritmo é varrer toda a array, a verificar o valor de cada "
"célula. Se for o valor procurado, deve retornar o índice da célula que está "
"a ser verificada."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:14
msgid ""
"Remember that indices begin at 0 and not at 1. So, if there is 3 cells, "
"their indices will be 0, 1 and 2. There would not be any cell numbered 3."
msgstr ""
"Lembre-se que os índices começam com 0 e não com 1. Logo, se houverem 3 "
"células, os índices delas serão 0, 1 e 2. Não vai haver nenhuma célula "
"numerada com 3."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:17
msgid ""
"Remember also that the amount of cells in an array can be retrieved using "
"the <code>length</code> attribute. So, if your array is called "
"<code>tab</code>, its size can be retrieved as <code>tab.length</code>.  "
"Note that there is no () after <code>length</code>. An attribute is a sort "
"of variable embedded in another object (here, the array)."
msgstr ""
"Lembre-se também que a quantidade de células numa array pode ser recuperada "
"a usar o atributo <code>length</code>. Portanto, se a sua array é chamada "
"<code>tab</code>, o tamanho dela será recuperado como <code>tab.length</"
"code>. Observe que não existe um () depois de <code>length</code>. Um "
"atributo é como uma variável dentro de outro objeto (no caso, a array)."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:22
msgid "So, the last value of an array is given by <code>tab[tab.length - 1]</code>."
msgstr ""
"Logo, o último valor de uma array é dado por <code>tab[tab.length - "
"1]</code>."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:24
msgid ""
"Remember also that the amount of cells in an array can be retrieved with the "
"<code>len()</code> function. So, if your array is called <code>tab</code>, "
"its size can be retrieved as <code>len(tab)</code>."
msgstr ""
"Lembre-se também que a quantidade de células numa array pode ser recuperada "
"com a função <code>len()</code>. Logo, se a sua array é chamada <code>tab</"
"code>, o tamanho dela pode ser recuperado como <code>len(tab)</code>."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfValue.html:28
msgid "So, the last value of an array is given by <code>tab[ len(tab) - 1]</code>."
msgstr ""
"Logo, o último valor de uma array é dado por <code>tab[ len(tab) - 1]</code>."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/IndexOfMaxValue.html:2
msgid "Index of the maximum value"
msgstr "ìndice do valor máximo"

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfMaxValue.html:4
msgid ""
"In this exercise, you must compute the index of the tab cell containing the "
"biggest value."
msgstr ""
"Neste exercício, deve calcular o índice da célula da tab a conter o maior "
"valor."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfMaxValue.html:6
msgid ""
"For that, fill the <code>indexOfMaximum()</code> method. Its parameter is "
"the array to explore. Should the array contain the searched value several "
"times, you should return the index of the first occurrence."
msgstr ""
"Para isto, complete o método <code>indexOfMaximum()</code>. O parâmetro dele "
"é a array para explorar. Caso a array contenha o valor procurado várias "
"vezes, deve retornar o índice da primeira ocorrência."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/IndexOfMaxValue.html:10
msgid ""
"To solve this exercise, you should sweep over the whole array. For each "
"value, if it's bigger than the biggest value you saw so far, you must save "
"this new champion and its position.  You will thus need 2 extra variables; "
"the initial value of the champion could be the value of the first cell."
msgstr ""
"Para resolver este exercício, deve varrer a array completamente. Para cada "
"valor, se for maior que o maior até o momento, este passa a ser o novo maior "
"e guarda o valor e a posição dele. Precisa de 2 variáveis adicionais; o "
"valor inicial do maior pode ser o valor da primeira célula."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/AverageValue.html:2
msgid "Average value"
msgstr "Valor médio"

#. type: Content of: <p>
#: src/lessons/welcome/array/search/AverageValue.html:5
msgid ""
"The objective of this exercise is to compute the average value of the "
"integer values stored in an array."
msgstr ""
"O objetivo deste exercício é calcular o valor médio dos valores inteiros "
"armazenados numa array."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/AverageValue.html:7
msgid ""
"You have to fill the body of the method <code>average()</code> which takes "
"as parameter the array of integers of which it computes and returns the "
"average value. Please note that this method must return an integer."
msgstr ""
"Tem que preencher o corpo do método <code>average()</code> que leva como "
"parâmetro a array de inteiros da qual calcula e retorna o valor médio. Por "
"favor note que este método deve retornar um inteiro."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/AverageValue.html:9
msgid ""
"To compute the average value of an integer, it is necessary to traverse the "
"whole array and to compute the sum of all its values (so you will need a "
"variable to store this temporary result), then you have to divide this sum "
"by the size of the array."
msgstr ""
"para calcular o valor médio de um inteiro, é necessário percorrer toda a "
"array e calcular a soma de todos os valores (logo, precisa de uma variável "
"para armazenar este valor temporário) e por fim dividir esta soma pelo "
"tamanho da array."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/AverageValue.html:11
msgid ""
"In Java, you can get the size of an array <code>myarray</code> by consulting "
"its <code>length</code> attribute (in other words, "
"<code>myarray.length</code>). Notice that there is no parenthesis after "
"<code>length</code>."
msgstr ""
"Em Java, pode obter o tamanho de uma array <code>minhaarray</code> ao "
"consultar o atributo <code>length</code> (tamanho) dele (em outras palavras, "
"<code>minhaarray.length</code>). Observe que não existe parêntesis depois do "
"<code>length</code>."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/AverageValue.html:16
msgid ""
"In python, retrieving the size of an array <code>myarray</code> is as easy "
"as calling <code>len(myarray)</code>."
msgstr ""
"Em python, recuperar o tamanho de uma array <code>minhaarray</code> é tão "
"fácil como chamar <code>len(myarray)</code>."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/MaxValue.html:2
msgid "Maximal value"
msgstr "Valor maximal"

#. type: Content of: <p>
#: src/lessons/welcome/array/search/MaxValue.html:4
msgid ""
"In this exercise, you must compute the maximal value contained in an array.  "
"For that, fill the <code>maximum()</code> method, which parameter is the "
"array to explore."
msgstr ""
"Neste exercício, deve calcular o valor maximal contido numa array. Para "
"isto, preencha o método <code>maximum()</code>, cujo parâmetro é a array "
"para explorar."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/MaxValue.html:8
msgid ""
"To compute this value, sweep over the whole parameter. For each value, if "
"it's bigger than the biggest value you saw so far, you must save this value "
"somewhere to remember it afterward. You thus need an extra variable, which "
"can be initialized to the value of the first array cell."
msgstr ""
"Para calcular este valor, percorra o parâmetro todo. Para cada valor, se for "
"maior que o maior valor até o momento, deve gravar este valor em algum lugar "
"para lembrar dele mais tarde. Vai precisar então de uma variável adicional, "
"que pode ser iniciada para o valor da primeira célula do array."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/OccurrenceOfValue.html:2
msgid "Occurrence of a value"
msgstr "Ocorrência de um valor"

#. type: Content of: <p>
#: src/lessons/welcome/array/search/OccurrenceOfValue.html:4
msgid ""
"In this exercise, you must compute the amount of occurrences of a given "
"value in an array (that is, the amount of time that this value appears in "
"the array). For that, fill the <code>occurrences()</code> method, which "
"returns the number of occurrence of <code>lookingFor</code> in "
"<code>tab</code>."
msgstr ""
"Neste exercício, deve calcular a quantidade de ocorrências de um dado valor "
"numa array (ou seja, a quantidade de tempo que este valor aparece na array). "
"Para isto, preencha o método <code>occurrences()</code>, que retorna a "
"quantidade de ocorrências de <code>lookingFor</code> em <code>tab</code>."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/OccurrenceOfValue.html:9
msgid ""
"To compute this value, simply sweep over the array counting for the amount "
"of cells containing the searched value. You thus need an extra variable for "
"that."
msgstr ""
"Para calcular este valor, simplesmente percorra a array a contar a "
"quantidade de células a conter o valor procurado. Vai precisar de uma "
"variável adicional para isso."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/Extrema.html:2
msgid "Maxima and Minima"
msgstr "Máximo e Mínimo"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/search/Extrema.html:4
msgid ""
"In this exercise, you must return the difference between the maxima (i.e., "
"the largest value of the array) and the minima (i.e., its smallest "
"value). The returned value is then a positive number.  Beware, you can only "
"do one traversal of the array to gather all informations that you need."
msgstr ""
"Neste exercício, deve retornar a diferença entre o máximo (p.ex., o maior "
"valor da array) e o mínimo (p.ex., o menor valor). O valor retornado é então "
"um número positivo. Mas atenção, só pode percorrer o array uma vez para "
"obter todas as informações de que necessita."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/SecondMaxValue.html:2
msgid "Second Biggest Value"
msgstr "Segundo Maior Valor"

#. type: Content of: <p>
#: src/lessons/welcome/array/search/SecondMaxValue.html:4
msgid ""
"In this exercise, you must compute the second maximal value contained in an "
"array, i.e. the value that becomes the maximum if you remove every instance "
"of the current maximum from the array."
msgstr ""
"Neste exercício, deve calcular o segundo valor maximal contido numa array, "
"ou seja o valor que se torna máximo se remover cada instância do máximo "
"atual da array."

#. type: Content of: <p>
#: src/lessons/welcome/array/search/SecondMaxValue.html:7
msgid ""
"As usual, you should gather the information in only one traversal of the "
"array.  You can assume that the second biggest value actual exists (there is "
"at least two distinct values in the array), and that all values in the array "
"are greater than [!python] -100000000.[/!] "
"[!java|scala]<code>Integer.MIN_VALUE</code> (which is the smallest "
"representable integer existing in [!thelang]).[/!]"
msgstr ""
"Como normalmente, deve obter informações em apenas uma passagem pela array. "
"Pode assumir que o segundo maior valor \"actual\" existe (existe pelo menos "
"dois valores distintos na array) e que todos os valores na array são maiores "
"que [!python] -100000000.[/!] [!java|scala]<code>Integer.MIN_VALUE</code> ("
"que é o menor inteiro representável que existe em [!thelang]).[/!]"

#. type: Content of: <h1>
#: src/lessons/welcome/array/array123/Array123.html:2
msgid "Array123"
msgstr "Array123"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/array123/Array123.html:3
msgid ""
"Given an array of integers, return true if .. 1, 2, 3, .. appears in the "
"array somewhere."
msgstr ""
"Dada uma array de inteiros, retorna true se .. 1, 2, 3, .. aparece em algum "
"lugar da array."

#. type: Content of: <p>
#: src/lessons/welcome/array/array123/Array123.html:5
#: src/lessons/welcome/array/array667/Array667.html:8
#: src/lessons/welcome/array/arraycount9/ArrayCount9.html:5
#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:5
#: src/lessons/welcome/array/notriples/NoTriples.html:8
#: src/lessons/welcome/array/has271/Has271.html:10
#: src/lessons/welcome/bat/bool1/Close10.html:8
#: src/lessons/welcome/bat/bool1/Diff21.html:6
#: src/lessons/welcome/bat/bool1/HasTeen.html:7
#: src/lessons/welcome/bat/bool1/IcyHot.html:6
#: src/lessons/welcome/bat/bool1/In1020.html:6
#: src/lessons/welcome/bat/bool1/In3050.html:6
#: src/lessons/welcome/bat/bool1/LoneTeen.html:7
#: src/lessons/welcome/bat/bool1/Main.html:12
#: src/lessons/welcome/bat/bool1/Makes10.html:6
#: src/lessons/welcome/bat/bool1/Max1020.html:8
#: src/lessons/welcome/bat/bool1/MonkeyTrouble.html:8
#: src/lessons/welcome/bat/bool1/NearHundred.html:8
#: src/lessons/welcome/bat/bool1/ParotTrouble.html:9
#: src/lessons/welcome/bat/bool1/PosNeg.html:6
#: src/lessons/welcome/bat/bool1/SleepIn.html:8
#: src/lessons/welcome/bat/bool1/SumDouble.html:6
#: src/lessons/welcome/bat/bool2/AlarmClock.html:12
#: src/lessons/welcome/bat/bool2/AnswerCell.html:9
#: src/lessons/welcome/bat/bool2/BlueTicket.html:11
#: src/lessons/welcome/bat/bool2/CaughtSpeeding.html:12
#: src/lessons/welcome/bat/bool2/CigarParty.html:10
#: src/lessons/welcome/bat/bool2/DateFashion.html:13
#: src/lessons/welcome/bat/bool2/GreenTicket.html:10
#: src/lessons/welcome/bat/bool2/In1To10.html:9
#: src/lessons/welcome/bat/bool2/InOrderEqual.html:10
#: src/lessons/welcome/bat/bool2/InOrder.html:9
#: src/lessons/welcome/bat/bool2/LastDigit2.html:9
#: src/lessons/welcome/bat/bool2/LessBy10.html:6
#: src/lessons/welcome/bat/bool2/Main.html:7
#: src/lessons/welcome/bat/bool2/MaxMod5.html:10
#: src/lessons/welcome/bat/bool2/NearTen.html:9
#: src/lessons/welcome/bat/bool2/RedTicket.html:10
#: src/lessons/welcome/bat/bool2/SortaSum.html:8
#: src/lessons/welcome/bat/bool2/SquirrelPlay.html:11
#: src/lessons/welcome/bat/bool2/TeaParty.html:12
#: src/lessons/welcome/bat/bool2/TeenSum.html:9
#: src/lessons/welcome/bat/bool2/TwoAsOne.html:6
#: src/lessons/welcome/bat/bool2/WithoutDoubles.html:9
#: src/lessons/bat/string1/Main.html:10 src/lessons/bat/string1/AltPairs.html:5
#: src/lessons/bat/string1/FrontTimes.html:8
#: src/lessons/bat/string1/Last2.html:9
#: src/lessons/bat/string1/StringBits.html:5
#: src/lessons/bat/string1/StringMatch.html:9
#: src/lessons/bat/string1/StringSplosion.html:5
#: src/lessons/bat/string1/StringTimes.html:5
#: src/lessons/bat/string1/StringX.html:7
#: src/lessons/bat/string1/StringYak.html:8
msgid ""
"This exercise was converted to PLM from the excellent exercising site "
"http://codingbat.com/"
msgstr ""
"Este exercício foi convertido para o PLM do excelente sítio de exercícios "
"http://codingbat.com/"

#. type: Content of: <h1>
#: src/lessons/welcome/array/array667/Array667.html:2
msgid "Array667"
msgstr "Array667"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/array667/Array667.html:3
msgid ""
"Given an array of integers, return the number of times that two 6's are next "
"to each other in the array. Also count instances where the second \"6\" is "
"actually a 7."
msgstr ""
"Dada uma array de inteiros, retorna a quantidade de vezes no qual dois 6 "
"estão vizinhos na array. Também conta as instâncias onde o segundo \"6\" é, "
"na verdade um 7."

#. type: Content of: <h1>
#: src/lessons/welcome/array/arraycount9/ArrayCount9.html:2
msgid "ArrayCount9"
msgstr "ArrayCount9"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/arraycount9/ArrayCount9.html:3
msgid "Given an array of integers, return the number of 9's in the array."
msgstr "Dada uma array de inteiros, retorna a quantidade de 9's na array."

#. type: Content of: <h1>
#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:2
msgid "ArrayFront9"
msgstr "ArrayFront9"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:3
msgid ""
"Given an array of integers, return true if one of the first 4 elements in "
"the array is a 9. The array length may be less than 4."
msgstr ""
"Dada uma array de inteiros, retorna true se um dos primeiros 4 elementos na "
"array é um 9. O comprimento da array pode ser menor que 4."

#. type: Content of: <h1>
#: src/lessons/welcome/array/notriples/NoTriples.html:2
msgid "NoTriples"
msgstr "NenhumaTripla"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/notriples/NoTriples.html:3
msgid ""
"Given an array of integers, we'll say that a triple is a value appearing 3 "
"times in a row in the array. Return true if the array does not contain any "
"triples."
msgstr ""
"Dada uma array de inteiros, digamos que uma tripla é um valor que aparece 3 "
"vezes seguidas na array. Retorne true se a array não contém nenhuma tripla."

#. type: Content of: <h1>
#: src/lessons/welcome/array/has271/Has271.html:2
msgid "Has271"
msgstr "Has271"

#. type: Content of: <p>
#: src/lessons/welcome/array/has271/Has271.html:3
msgid ""
"Given an array of integers, return true if it contains a 2, 7, 1 pattern -- "
"a value, followed by the value plus 5, followed by the initial value minus "
"1.  So, 2,7,1 is such a pattern because 7 is 5+2 and 1 is 2-1. 3,8,2 is also "
"such a pattern."
msgstr ""
"Dada uma array de inteiros, retorne true se ela contém um padrão 2, 7, 1 -- "
"um valor, seguido dele mais 5, seguinte dele menos 1. Então, 2,7,1 é um "
"exemplo deste padrão pois  7 é 5+2 e 1 é 2-1. 3,8,2 é outro exemplo."

#. type: Content of: <p>
#: src/lessons/welcome/array/has271/Has271.html:7
msgid ""
"Additionally the 271 counts even if the \"1\" differs by 2 or less from the "
"correct value."
msgstr ""
"Acicionalmente, o 271 \"counts even\" se o \"1\" difere por 2 ou menos do "
"valor correto."

#. type: Content of: <h1>
#: src/lessons/welcome/array/golomb/Golomb.html:2
msgid "Golomb sequence"
msgstr "sequência de Golomb"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/golomb/Golomb.html:4
msgid ""
"The Golomb sequence is a non-decreasing integer sequence where a(n) is the "
"number of times that n occurs in the sequence, with a(1) = 1."
msgstr ""
"A sequência de Golomb é uma sequência de inteiros não decrescente onde a(n) "
"é a quantidade de vezes que n ocorre na sequência, com a(1) = 1."

#. type: Content of: <p>
#: src/lessons/welcome/array/golomb/Golomb.html:7
msgid ""
"Since a(1)=1, it means that 1 occurs only once in the sequence, so a(2) must "
"be different. Since the sequence is non-decreasing, a(2)  must be greater "
"than 1. Since a(2)>1, the digit 2 must appear more than one time in the "
"sequence. So a(2)=2."
msgstr ""
"Como a(1)=1, significa que 1 ocorre apenas uma vez na sequência, então a(2) "
"deve ser diferente. Uma vez que a sequência é não-decrescente, a(2) deve ser "
"maior que 1. Como a(2)>1, o dígito 2 deve aparecer mais de uma vez na "
"sequência. Logo, a(2)=2."

#. type: Content of: <p>
#: src/lessons/welcome/array/golomb/Golomb.html:12
msgid ""
"Since a(2)=2, there is two 2 in the sequence, so we know the value of "
"a(3). And so on for the other values of the sequence."
msgstr ""
"Como a(2)=2, existem duas ocorrências de 2 na sequência, logo sabemos o "
"valor de a(3). E assim por diante para os outros valores da sequência."

#. type: Content of: <p>
#: src/lessons/welcome/array/golomb/Golomb.html:15
msgid "Write a function that computes the Nth element of the sequence."
msgstr "Escreva uma função que calcule o N-ésimo elemento da sequência."

#. type: Content of: <h1>
#: src/lessons/welcome/array/island/Island.html:2
msgid "Buggles' Island"
msgstr "Ilha dos Buggles"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/array/island/Island.html:4
msgid ""
"You just received the traveling notes of your old aunt who traveled accross "
"the country of the Buggles' Islands. She wrote down the altitude every "
"kilometer during her trip, resulting in a sequence of numbers as follows."
msgstr ""
"Acaba de receber as anotações de viagem da sua tia velha que atravessou o "
"país das Ilhas dos Buggles. Ela escreveu a altitude a cada quilômetro "
"durante a viagem, a resultar numa sequência de números como segue."

#. type: Content of: <pre>
#: src/lessons/welcome/array/island/Island.html:9
#, no-wrap
msgid "0 0 1 1 2 2 1 1 0 1 2 2 1 1 0"
msgstr "0 0 1 1 2 2 1 1 0 1 2 2 1 1 0"

#. type: Content of: <p>
#: src/lessons/welcome/array/island/Island.html:11
msgid "Here is a cut of the islands on that path:"
msgstr "Aqui está um corte das ilhas por este caminho:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/island/Island.html:14
#, no-wrap
msgid ""
"       /***\\       /*\\         &lt;-- 2 meters above the see level\n"
"   /***********\\ /*******\\     &lt;-- 1 meter above the see level\n"
"***************************    &lt;-- see level\n"
"| | | | | | | | | | | | | |\n"
"0 0 1 1 2 2 1 1 0 1 2 1 1 0    &lt;-- altitude on each point\n"
msgstr ""
"       /***\\       /*\\         &lt;-- 2 metros acima do nível do mar\n"
"   /***********\\ /*******\\     &lt;-- 1 metro acima do nível do mar\n"
"***************************    &lt;-- nível do mar\n"
"| | | | | | | | | | | | | |\n"
"0 0 1 1 2 2 1 1 0 1 2 1 1 0    &lt;-- altitude em cada ponto\n"

#. type: Content of: <p>
#: src/lessons/welcome/array/island/Island.html:21
msgid "This example is constituted of four levels of island:"
msgstr "Este exemplo é constituído de quatro níveis de ilhas:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/array/island/Island.html:24
msgid "1 1 2 2 1 1 (the island on the left)"
msgstr "1 1 2 2 1 1 (a ilha da esquerda)"

#. type: Content of: <ul><li>
#: src/lessons/welcome/array/island/Island.html:25
msgid "2 2 (the mountain topping the left island)"
msgstr "2 2 (o topo da montanha da ilha da esquerda)"

#. type: Content of: <ul><li>
#: src/lessons/welcome/array/island/Island.html:26
msgid "1 2 1 1 (the right island)"
msgstr "1 2 1 1 (a ilha da direita)"

#. type: Content of: <ul><li>
#: src/lessons/welcome/array/island/Island.html:27
msgid "2 (the mountain on the right)"
msgstr "2 (a montanha da direita)"

#. type: Content of: <p>
#: src/lessons/welcome/array/island/Island.html:30
msgid "This can also be visualized this way:"
msgstr "Isto também pode ser visualizado desta forma:"

#. type: Content of: <pre>
#: src/lessons/welcome/array/island/Island.html:32
#, no-wrap
msgid "0 0(1 1(2 2)1 1)0(1(2)1 1)0"
msgstr "0 0(1 1(2 2)1 1)0(1(2)1 1)0"

#. type: Content of: <p>
#: src/lessons/welcome/array/island/Island.html:34
msgid ""
"Could you write a little program to compute the amount of levels in a given "
"sequence of altitudes? Actually, there is an iterative and a recursive "
"solution to that problem."
msgstr ""
"Poderia escrever um pequeno programa que calculasse a quantidade de níveis "
"numa dada sequência de altitudes? Na verdade, existem uma solução iterativa "
"e uma recursiva para este problema."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:5
msgid ""
"We will now write our own methods. It somehow comes down to extending the "
"buggle vocabulary by teaching it new tricks."
msgstr ""
"Vamos agora escrever nossos próprios métodos. Isto é como extender o "
"vocabulário do buggle a ensinar novos truques."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:8
msgid ""
"For example, we saw in a previous exercise how to ask the buggle to go get "
"the baggle in front of it, and bring it back. If there is several baggles on "
"the board, and if we want to bring all of them on the bottom line, you have "
"to repeat this code several times, or include it in a loop. In any case, you "
"should avoid to duplicate your code to keep it pleasant to read and easily "
"understandable.  It would be better if the buggle could obey an "
"<code>goAndGet()</code> order just like it understands a "
"<code>[!c]stepForward()[/!][!scala|java|python]forward()[/!]</code> one."
msgstr ""
"Por exemplo, vimos num exercício anterior como pedir ao buggle para apanhar "
"o baggle à frente dele e trazê-lo de volta. Se existem vários baggles no "
"tabuleiro e se queremos trazê-los todos à linha de baixo, tem que repetir "
"este código várias vezes, ou incluí-lo num loop. Em qualquer caso, deve "
"evitar duplicar o seu código para mantê-lo agradável de ler e fácil de "
"entender. Será melhor se o buggle puder obedecer uma ordem "
"<code>goAndGet()()</code> assim como entende uma "
"<code>[!c]stepForward()[/!][!scala|java|python]forward()[/!]</code>."

#. type: Content of: <h3>
#: src/lessons/welcome/methods/basics/Methods.html:16
msgid "Defining methods"
msgstr "Definir métodos"

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:18
msgid ""
"The [!thelang] syntax to write a simple method called <code>goAndGet</code> "
"is the following:"
msgstr ""
"A sintaxe de [!thelang] para escrever um método simples chamado "
"<code>goAndGet()</code> é a seguinte:"

#. type: Content of: <pre>
#: src/lessons/welcome/methods/basics/Methods.html:20
#, no-wrap
msgid ""
"[!java|c]void goAndGet() {[/!][!python]def goAndGet():[/!][!scala]def "
"goAndGet() {[/!]\n"
"  actions()[!java|c];[/!]\n"
"  to()[!java|c];[/!]\n"
"  do()[!java|c];[/!]\n"
"[!java|scala|c]}[/!]"
msgstr ""
"[!java|c]void goAndGet()() {[/!][!python]def goAndGet()():[/!][!scala]def "
"goAndGet()() {[/!]\n"
"  ações()[!java|c];[/!]\n"
"  ações()[!java|c];[/!]\n"
"  eMaisAções()[!java|c];[/!]\n"
"[!java|scala|c]}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:26
msgid ""
"The method body [!java|scala|c](between curly braces)[/!][!python](the "
"indented block)[/!] will be executed when we call the method later on (that "
"is, when we write <code>goAndGet()</code> somewhere in our code). This "
"method body can contain as many instructions as you want, and any "
"construction we saw so far (for, while, if, etc).  [!java|c]The "
"<code>void</code> keyword means that this method does not return any "
"result. For example, the <code>isOverBaggle()</code> method does return a "
"result, which is a [!c]int[/!][!java]boolean[/!] indicating whether or not "
"the buggle is located over a baggle. We will soon learn to define such "
"methods too. For now, just write <code>void</code> at this location.[/!]"
msgstr ""
"O corpo do método [!java|scala](entre chaves)[/!][!python](o bloco "
"indentado)[/!] será executado quando chamarmos o método mais tarde (ou seja, "
"quando escrevermos <code>goAndGet()()</code> em algum lugar do código). Este "
"corpo do método pode conter tantas instruções quantas quiser e as "
"construções que quisermos (for, while, if, etc).  [!java]A palavra-chave "
"<code>void</code> significa que este método não retorna qualquer resultado. "
"Por exemplo, o método <code>isOverBaggle()</code> retorna um resultado, que "
"é um booleano a indicar se o buggle está ou não localizado sobre um baggle. "
"Vamos em breve aprender a definir tais métodos também. Por agora, apenas "
"escreva <code>void</code> neste local.[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/methods/basics/Methods.html:39
msgid "Documenting methods"
msgstr "Documentar métodos"

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:41
msgid ""
"You should strive to document your code to keep it readable. When you write "
"it, its purpose and limitations are clear to you, but most of the time, this "
"does not last for long. You will soon forget about the details of every "
"specific method, and this day you will be happy to read its "
"documentation. In the following example, we use the specific formalism of "
"[!java]javadoc[/!][!scala]scaladoc[/!][!python]pydoc[/!], a program that "
"extracts the documentation of [!thelang] source code to produce html "
"pages. The main advantage is that it allows to keep the documentation near "
"to the code.  So, when you change your code, you have less chances to forget "
"to update the documentation."
msgstr ""
"Deve esforçar-se para documentar o seu código para mantê-lo legível. Quando "
"escreve código, fica claro o objetivo e as limitações, mas na maioria das "
"vezes, isto é esquecido. Rapidamente esquecerá dos detalhes de cada método "
"específico e vai chegar o dia em que ficará feliz em ler a documentação. No "
"exemplo seguinte, usamos o formalismo específico de "
"[!java]javadoc[/!][!scala]scaladoc[/!][!python]pydoc[/!], um programa que "
"extrai a documentação do código-fonte de [!thelang] e produz páginas html. A "
"principal vantagem é que permite que a documentação fique junto ao código. "
"Então, quando mudar o código, tem menos chances de esquecer de atualizar a "
"documentação."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:50
msgid ""
"[!java|scala][!java]javadoc[/!][!scala]scaladoc[/!] comments begin with the "
"<code>/**</code> marker (with two asterisks). They must be placed right "
"before the method they document for the tool to find them.[/!] "
"[!python]pydoc comments should be placed at the beginning of the method body "
"so that the tool finds them. They should be placed between "
"<code>\"\"\"</code>, which mark multi-line strings in python.[/!] The first "
"line should be a brief description of what this method does while any "
"subsequent lines should provide any important details about the method."
msgstr ""
"comentários em [!java|scala][!java]javadoc[/!][!scala]scaladoc[/!] começam "
"com a marca <code>/**</code> (com dois asteriscos). Eles devem ser postos "
"exatamente antes do método que documentam para a ferramenta encontrá-los.[/!]"
" [!python]comentários pydoc devem ser postos no começo do corpo do método de "
"forma que a ferramenta possa encontrá-los. Eles devem ser postos entre <code>"
"\"\"\"</code>, que marcam cadeias multilinhas em python.[/!] A primeira "
"linha deve ser uma breve descrição do que o método faz enquanto as linhas "
"subsequentes devem fornecer qualquer detalhes importantes sobre o método."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/basics/Methods.html:59
#, no-wrap
msgid ""
"[!java|scala]/**\n"
" *  Go, retrieves the baggle in front of the buggle, and brings it back \n"
" *\n"
" *   Does not check for walls, so be careful to not call it when walls are "
"present.\n"
" */[/!]\n"
"[!java]void goAndGet() {[/!]\n"
"[!scala]def goAndGet() {[/!]\n"
"[!python]def goAndGet():\n"
"  \"\"\"Go, retrieves the baggle in front of the buggle, and brings it "
"back.\n"
"\n"
"  Does not check for walls, so be careful to not call it when walls are "
"present.\"\"\"[/!]\n"
"  actions()[!java];[/!]\n"
"  to()[!java];[/!]\n"
"  do()[!java];[/!]\n"
"[!java|scala]}[/!]"
msgstr ""
"[!java|scala]/**\n"
" *  Força, recupera o baggle em frente do buggle e traz de volta \n"
" *\n"
" *  Não verifica se tem paredes, então cuidado para não chamá-lo quando "
"paredes estiverem presentes.\n"
" */[/!]\n"
"[!java]void goAndGet()() {[/!]\n"
"[!scala]def goAndGet()() {[/!]\n"
"[!python]def goAndGet()():\n"
"  \"\"\"Vai, recupera o baggle em frente do buggle e traz de volta.\n"
"\n"
"  Não verifica se tem paredes, então cuidado para não o chamar quando uma "
"parede estiver presente.\"\"\"[/!]\n"
"  ações()[!java];[/!]\n"
"  to()[!java];[/!]\n"
"  do()[!java];[/!]\n"
"[!java|scala]}[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/methods/basics/Methods.html:75
msgid "Naming conventions"
msgstr "Convenções de nomes"

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:76
msgid ""
"Most programming language forbid the use of spaces in method and variable "
"identifiers (=their names).  Accented letters are sometimes allowed (as in "
"[!thelang]), but they can lead to portability issues between operating "
"systems and should thus be avoided when possible."
msgstr ""
"A maioria das linguagens de programação proíbe o uso de espaços em "
"indentificadores de métodos e variáveis (=seus nomes).  Letras acentuadas "
"são algumas vezes permitidas (como em [!thelang]), mas elas geram problemas "
"de portabilidade entre sistemas operacionais e devem ser evitadas sempre que "
"possível."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:80
msgid ""
"Across all programming languages, there is two main conventions to name "
"variables and methods. The first one, consists in concatenating all words "
"with only the first letter of each word in upper case. \"go and get\" "
"becomes goAndGet().  It is called CamelCase because identifiers written this "
"way graphically remind of a camel back. The other convention, called "
"snake_case, is to write every words in lower case, separated with "
"underscores symbols (_). \"go and get\" becomes go_and_get()."
msgstr ""
"Entre todas as linguagens de programação, existem duas convenções para "
"nomear variáveis e métodos. A primeira, consiste em concatenar todas as "
"palavras com apenas a primeria letra de cada palavra em maiúscula. \"vai e "
"apanha\" torna-se goAndGet(). Isto é chamado \"CamelCase\" por que "
"identificadores escritos desta forma parecem graficamente com as costas de "
"um camelo. A outra convenção, chamada \"snake_case\", é escrever todas as "
"palavras em minúsculas, separadas com sublinhados (_). \"vai e apanha\" se "
"torna vai_e_apanha()."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:87
msgid ""
"Which convention to use is the topic of heated discussion across developers, "
"but each programming language has its own habits. In Python, Perl and the C "
"language, the snake_case is often used for methods and variables. Java and "
"Scala prefer the lowerCamelCase (the very first letter is lower case) for "
"that."
msgstr ""
"Que convenção usar é o tópico de discussões acaloradas entre programadores, "
"mas cada linguagem de programação tem os próprios hábitos deles. Em Python, "
"Perl e C, o snake_case é normalmente usado para métodos e variáveis. Java e "
"Scala preferemo lowerCamelCase (só a primeira letra inicial é minúscula) "
"para isto."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:91
msgid ""
"The CamelCase convention is used everywhere in PLM because this program is "
"written in Java itself, so we kept our habits when adding new languages. But "
"the fact that the Python bindings of PLM use the CamelCase instead of the "
"snake_case is considered as a bug that we will fix in further releases."
msgstr ""
"A convenção CamelCase é sempre usada no PLM por que este programa foi "
"escrito em Java, então mantivemos o hábito quando inserimos novas "
"linguagens. Mas o fato de os vínculos Python do PLM usarem CamelCase e não "
"snake_case é considerado um bug que será corrigido em algum lançamento "
"futuro."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:97
msgid ""
"The goal of this exercise is to write a method called "
"<code>goAndGet()</code> which does the same than in a previous exercises "
"(move forward until over a baggle, pick it up, move back to initial "
"position, drop baggle)."
msgstr ""
"O objetivo deste exercício é escrever um método chamado <code>goAndGet()()</"
"code> que faça a mesma coisa que foi feita num exercício anterior (vai para "
"a frente até estar sobre um baggle, apanha-o, vai para trás até a posição "
"inicial e solta o baggle)."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:101
msgid ""
"This exercise is a bit different because you will not write all of the code "
"executed by the buggle. Instead, you should only write one method that get "
"called automagically added when you click on <b>Start</b>. Your buggle calls "
"your <code>goAndGet()</code> method on each row, until the baggle is "
"found. [!python|scala]The code for that is already provided under the "
"<code>goAndGet()</code> method, but you probably don't want to change "
"it.[/!] [!java]You don't need to write the code calling "
"<code>goAndGet()</code> yourself. It's automagically there already, even if "
"you cannot see it.[/!]"
msgstr ""
"Este exercício é um pouco diferente por que não vai precisar escrever todo o "
"código executado pelo buggle. Ao invés disto, deve apenas escrever um método "
"que será chamado automagicamente quando clica em <b>Iniciar</b>. O seu "
"buggle vai chamar o seu método <code>goAndGet()()</code> em cada linha, até "
"que o baggle seja encontrado. [!python|scala]O código para isto já está "
"pronto no método <code>goAndGet()()</code>, mas provavelmente não vai mudar "
"isto. [/!] [!java]Não precisa escrever o código chamado <code>goAndGet()()</"
"code>. Já está lá automaticamente, mesmo se não possa vê-lo.[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/Methods.html:110
msgid ""
"But for that to work, you have to actually write this "
"<code>goAndGet()</code> method now."
msgstr ""
"Mas para isto funcionar, tem na verdade que escrever este método "
"<code>goAndGet()</code> agora."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:4
msgid ""
"We now would like to teach the buggle to build a doghouse. The naive "
"approach consists in directly writing the needed code as follows.  This "
"works because the buggle of this exercise leaves a red path as it moves."
msgstr ""
"Agora queremos ensinar ao buggle como construir uma casa de cachorro. A "
"abordagem simplória consiste em escrever diretamente o código necessário "
"como segue. Isto funciona por que o buggle deste exercício deixa um caminho "
"vermelho à medida em que anda."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:8
#, no-wrap
msgid ""
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]"
msgstr ""
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"[!c]stepForward()[/!][!python|java|scala]forward()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:21
msgid ""
"It becomes harder when we want to draw two doghouses: we have to rewrite the "
"same code twice, which is not really handy. When the code becomes a bit long "
"as this one, it becomes easier to see why we insist since a while on the "
"pure evilness that code duplication represents. Indeed, if you realize that "
"an error sneaked into a code that you copied at several locations, you will "
"have to fix it several times. And mind your back if you forget one of these "
"locations."
msgstr ""
"Vai ficar mais difícil se tivermos que desenhar duas casas de cachorro: "
"teremos que reescrever o mesmo código duas vezes, o que não é muito prático. "
"Quando o código se torna um pouco longo como este, torna-se fácil ver por "
"que insistimos já tem um tempinho namais pura maldade que duplicação de "
"código representa. Na verdade, imagine um erro que se infiltrou no código "
"que copiou para vários lugares, vai ter que corrigir várias vezes. E ai de "
"se esquercer de corrigir num destes lugares."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:27
msgid ""
"There is even a name to this good principle in programming: DRY/SPOT, which "
"means \"Don't Repeat Yourself / Single Point Of Truth\". The latter part "
"means that each information must be written in only one location of your "
"program to avoid the differing locations to get out of synch when you modify "
"your code."
msgstr ""
"Existe até um nome para esta boa prática de programação: DRY/SPOT, que em "
"inglês significa \"Don't Repeat Yourself / Single Point Of Truth\" (não se "
"repita/ponto único de confiança). A última parte significa que cada "
"informação deve ser escrita em apenas um local do seu programa para evitar "
"que diferentes locais fiquem desincronizados quando modificar o código."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:32
msgid ""
"So, let's apply this good principle and <b>factorize our code</b>, ie to "
"write it only once, for example in a method. You should even to go further "
"by factorizing the method body with a <code>for</code> loop, as seen "
"previously.  If you do it correctly (what you should), you can use the "
"method <code>left()</code> only once."
msgstr ""
"Portanto, vamos aplicar este bom princípio de programação e <b>fatorizar o "
"nosso código</b>, p.ex. escrevê-lo apenas uma vez, por exemplo num método. "
"Pode ir até mais longe a fatorizar o corpo do método com um loop <code>for</"
"code>, como visto anteriormente. Se o faz corretamente (o que se espera), dá "
"para usar o método <code>left()</code> apenas uma vez."

#. type: Content of: <p>
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:39
msgid ""
"The goal of this exercise is to write a method called <code>dogHouse</code> "
"achieving the same result than the code above, but with a for loop to keep "
"it short.  The buggle will call your creation to create several dog houses "
"around its world."
msgstr ""
"O objetivo deste exercício é escrever um método chamado "
"<code>casaDeCachorro</code> que faz a mesma coisa que o código acima, mas "
"com um loop for para mantê-lo curto. O buggle vai chamar a sua criação para "
"construir várias casas de cachorro neste mundo."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/picture/PictureMono1.html:4
#: src/lessons/welcome/methods/picture/MethodsPicture.html:4
msgid ""
"In this exercise, we will reproduce the geometric drawing that you can see "
"in the \"Objective\" tab."
msgstr ""
"Neste exercício, vamos reproduzir o desenho geométrico que pode ver na guia "
"\"Objetivo\"."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono1.html:7
#: src/lessons/welcome/methods/picture/MethodsPicture.html:7
msgid ""
"Your goal (here and in any well written program) is to write the simplest "
"possible code. For that, you have to decompose your work in sub-steps, and "
"write a specific method for each sub-step."
msgstr ""
"O seu objetivo (aqui e em qualquer programa bem escrito) é escrever o código "
"mais simples possível. Para isto, tem que decompor o seu trabalho em sub-"
"passos e escrever métodos específicos para cada sub-passo."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono1.html:11
msgid ""
"If you observe carefully the picture to draw, it is constituted of four "
"parts depicting a sort of V. A possible decomposition is to write a method "
"in charge of drawing a V from the current position. Its prototype can be: "
"<code>[!java|c]void [/!]makeV()</code>"
msgstr ""
"Se observar cuidadosamente a figura que tem que desenhar, ela é constituída "
"de quatro partes a descrever um V. Uma decomposição possível é escrever um "
"método responsável por escrever um V a partir da posição atual. O protótipo "
"dele pode ser: <code>[!java|c]void [/!]makeV()</code>"

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono1.html:16
msgid ""
"In this method, you should use the methods <code>brushUp()</code> and "
"<code>brushDown()</code> to mark the ground (you may want to factorize this "
"in another method). It may be wise to write the <code>makeV()</code> so that "
"it places directly the buggle in position for the next V."
msgstr ""
"Neste método, deve usar os métodos <code>brushUp()</code> e "
"<code>brushDown()</code> para marcar o chão (se quiser, faça um método só "
"para isto). É uma decisão inteligente escrever <code>makeV()</code> para pôr "
"o buggle diretamente em posição ao próximo V."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono1.html:21
msgid ""
"Your turn. Your code should not be longer than 4 lines (not counting "
"<code>makeV</code>)..."
msgstr ""
"É a sua vez. O seu código não deve ser maior que 4 linhas (sem contar "
"<code>fazerV</code>)..."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/picture/PictureMono2.html:4
msgid ""
"We will now reproduce an even bigger geometrical drawing. Once again, you "
"can see the model by clicking on the \"Objective\" tab."
msgstr ""
"Vamos agora reproduzir um desenho geométrico ainda maior. Novamente,pode ver "
"o modelo a clicar na guia \"Objetivo\"."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono2.html:7
msgid ""
"You can naturally reuse all the code you typed in previous exercise (select "
"the other exercise, do Ctrl-C, come back to the code of this exercise, do "
"Ctrl-V)."
msgstr ""
"Pode naturalmente reutilizar todo o código que digitou em exercícios "
"anteriores (selecione o outro exercício, faça Ctrl-C, volte para o código "
"deste exercício e faça Ctrl-V)."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono2.html:11
msgid ""
"But you want to keep your code as simple as possible. For that, define new "
"methods to deal simply with the repetitions in the pattern. For example, a "
"method <code>makePattern()</code> achieving the pattern of previous example "
"seems to be a good idea (but this may not be enough)."
msgstr ""
"Mas quer manter o seu código tão simples quanto possível. Para isto, defina "
"novos métodos para lidar simplesmente com as repetições no padrão. Por "
"exemplo, um método <code>makePattern()</code> a fazer o padrão do exemplo "
"anterior parece ser uma boa ideia (mas pode não ser o suficiente)."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono2.html:16
msgid ""
"Why don't you give it a shot? The main code method shouldn't take more than "
"2 lines (included in a for loop)"
msgstr ""
"Por que não tentar? O método do código principal não deve levar mais de 2 "
"linhas (incluindo o loop for)"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/picture/PictureMono3.html:4
#: src/lessons/welcome/methods/picture/MethodsPictureLarge.html:4
msgid ""
"As you can imagine, you have to reproduce the geometric drawing depicted in "
"the \"Objectives\" tab. As you can see, it is even bigger than the previous "
"one."
msgstr ""
"Como pode imaginar, vai ter que reproduzir o desenho geométrico descrito na "
"guia \"Objetivos\". Como pode ver, é até maior do que o anterior."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PictureMono3.html:8
msgid ""
"You thus have to declare even more methods to use the repetitions of the "
"pattern and factorize your code.  Your turn..."
msgstr ""
"Portanto tem que declarar até mais métodos para usar as repetições do padrão "
"e fatorar o seu código. É a sua vez..."

#. type: Content of: <h1>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:2
#: src/lessons/lightbot/Board06Func.html:2
msgid "Functions"
msgstr "Funções"

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:4
msgid ""
"Quite often, you want to write a method that compute some value and returns "
"it. Methods returning results are called <b>functions</b>.  Writing a "
"function is not really harder than writing a simple method.  [!java|c]You "
"simply have to specify the data type of expected results before the function "
"name (where we previously had <code>void</code>).[/!] [!scala]You simply "
"have to add a colon (:) after the parenthesis and write the type of data "
"that your function will return, and add an equal sign (=). This syntax is "
"actually rather close to defining a variable, with its type, that is "
"actually a function.[/!] You can use the <code>return</code> instruction "
"anywhere in your function body to specify that the computation is done (the "
"function is not further executed), and that the result is the value "
"following the <code>return</code> keyword."
msgstr ""
"Frequentemente, vai escrever um método que calcula algum valor e o retorna. "
"Métodos a retornar resultados são chamados <b>funções</b>. Escrever uma "
"função não é realmente mais difícil do que escrever um simples método.  "
"[!java|c]Simplesmente tem que especificar o tipo de dados do resultado "
"esperado entes do nome da função (onde previamente tínhamos "
"<code>void</code>).[/!] [!scala]Simplesmente tem que adicionar um dois-"
"pontos (:) depois do parêntesis e escrever o tipo de dados que a função dele "
"vai retornar e adicionar um símbolo de igualdade (=). Esta sintaxe é na "
"verdade mais próxima de definir uma variável, com o tipo dela, do que na "
"verdade escrever uma função.[/!] Pode usar a instrução <code>return</code> "
"em qualquer lugar do corpo da sua função para especificar que o cálculo foi "
"feito (a função não continuará a ser executada) e que o resultado é o valor "
"que acompanha a palavra-chave <code>return</code>."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:14
#, no-wrap
msgid ""
"[!java|c]double pi() {[/!][!scala]def pi(): Double = {[/!][!python]def "
"pi():[/!]\n"
"    return 3.14159[!java|c];[/!]\n"
"[!java|scala|c]}[/!]"
msgstr ""
"[!java|c]double pi() {[/!][!scala]def pi(): Double = {[/!][!python]def "
"pi():[/!]\n"
"    return 3.14159[!java|c];[/!]\n"
"[!java|scala|c]}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:18
msgid ""
"Actually, you can also use that <code>return</code> keyword in methods that "
"do not return any result, to interupt the computation. Of course, you should "
"not provide any value to return in that case."
msgstr ""
"Na verdade, também pode usar a palavra-chave <code>return</code> em métodos "
"que não retornam qualquer resultado, para interromper o cálculo. Obviamente "
"que nestes casos não passa nenhum valor para retornar."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:21
msgid ""
"It is possible to have several <code>return</code> instructions in several "
"branches of a conditional. In fact, it is forbidden to have any execution "
"path of your body without any <code>return</code>, or to write some code "
"after the <code>return</code> instruction. Indeed, if the machine reaches "
"the end of the function without finding any <code>return</code>, it cannot "
"know what actual value to give back to the function caller.  Moreover, "
"<code>return</code> interrupts immediately the function execution (why "
"bother looking further when you know the function result?). So, if there is "
"some code after a <code>return</code>, it must be an error and the compiler "
"warns you."
msgstr ""
"É possível ter várias instruções <code>return</code> em várias ramificações "
"de um condicional. De fato, é proibido ter um caminho de execução no corpo "
"da função sem nenhum <code>return</code>, ou escrever algum código depois da "
"instrução <code>return</code>. Na verdade, se a máquina alcança o fim da "
"função sem encontrar qualquer <code>return</code>, ela não sabe o real valor "
"que deve retornar a quem chamou a função. Além disto, o <code>return</code> "
"interrompe imediatamente a execução da função (por que se preocupar a olhar "
"além quando sabe o resultado da função?). Então, se existe algum código "
"depois de um <code>return</code>, deve ser um erro e o compilador irá te "
"alertar disto."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:32
#, no-wrap
msgid ""
"[!java|scala|c][!java]boolean [/!][!c]int [/!][!scala]def "
"[/!]isFrontFree()[!scala]:Boolean =[/!] {\n"
"    if (isFacingWall() == [!java|scala]true[/!][!c]1[/!]) {\n"
"        return [!java|scala]false[/!][!c]0[/!];\n"
"        <span class=\"comment\">/* no code allowed here */</span>\n"
"    } else {\n"
"        return [!java|scala]true[/!][!c]1[/!];\n"
"        <span class=\"comment\">/* here neither */</span>\n"
"    }\n"
"    <span class=\"comment\">/* even here, forget it */</span>\n"
"}[/!][!python]def isFrontFree():\n"
"    if isFacingWall() == True:\n"
"        return False\n"
"        <span class=\"comment\"># no code allowed here</span>\n"
"    else\n"
"        return True\n"
"        <span class=\"comment\"># here neither</span>\n"
"<span class=\"comment\"># even here, forget it</span>[/!]"
msgstr ""
"[!java|scala|c][!java]boolean [/!][!c]int [/!][!scala]def "
"[/!]isFrontFree()[!scala]:Boolean =[/!] {\n"
"    if (isFacingWall() == [!java|scala]true[/!][!c]1[/!]) {\n"
"        return [!java|scala]false[/!][!c]0[/!];\n"
"        <span class=\"comment\">/* proibido pôr código aqui */</span>\n"
"    } else {\n"
"        return [!java|scala]true[/!][!c]1[/!];\n"
"        <span class=\"comment\">/* nem aqui */</span>\n"
"    }\n"
"    <span class=\"comment\">/* e nem mesmo aqui. desista */</span>\n"
"}[/!][!python]def livreEmFrente():\n"
"    if isFacingWall() == True:\n"
"        return False\n"
"        <span class=\"comment\"># proibido pôr código aqui</span>\n"
"    else\n"
"        return True\n"
"        <span class=\"comment\"># nem aqui</span>\n"
"<span class=\"comment\"># e nem mesmo aqui, desista</span>[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/returning/MethodsReturning.html:50
msgid ""
"You will once again write a function that the buggle will use. Its name must "
"be <code>haveBaggle</code>, and it returns a boolean value indicating "
"whether the row in front of the buggle contains a baggle or not. The buggle "
"will use it to search the first row containing a baggle, and stop here."
msgstr ""
"Vai mais uma vez escrever uma função que o buggle vai usar. O nome dela deve "
"ser <code>temBaggle</code> e retorna um valor booleano a indicar se a linha "
"na frente do buggle contém um baggle ou não. O buggle vai usar isto para "
"buscar a primeira linha a conter um baggle e parar nela."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:55
msgid ""
"The easier for this function is to use a boolean variable called "
"<code>seenBaggle</code> indicating whether or not we saw a baggle so "
"far. Its initial value is "
"'[!python]False[/!][!scala|java]false[/!][!c]0[/!]'."
msgstr ""
"A forma fácil de fazer esta função é usar uma variável booleana chamada "
"<code>baggleAvistado</code> a indicar se vimos ou não um baggle até o "
"momento. O valor inicial é "
"'[!python]False[/!][!scala|java]false[/!][!c]0[/!]'."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:59
msgid ""
"Then, move 6 steps forward (the world contains 7 cells and we already are on "
"one of them). For each cell, if it contains a baggle, we store true in "
"<code>sawBaggle</code> (and we don't do anything but moving forward if not)."
msgstr ""
"Então mova 6 passos para frente (o mundo contém 7 células e já estamos numa "
"delas). Para cada célula, se ela contiver um baggle, vamos guardar true em "
"<code>baggleVisto</code> (e se não, vamos simplesmente andar para frente)."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:63
msgid ""
"At the end, we move back by 6 steps, and we return the value of "
"<code>seenBaggle</code> to the caller."
msgstr ""
"No final, vamos nos mover 6 passos para trás e retornar o valor de "
"<code>baggleVisto</code> para quem chamou o método."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:66
msgid ""
"Note that the used buggle provides some hidden code that will call your "
"<code>haveBaggle</code> function on each column, moving automatically "
"between columns. It is thus very important that your <code>haveBaggle</code> "
"function have no side effect: the position (and orientation) at the end of "
"your code must be the one observed at the beginning of this code. It will "
"move in between to seek for the baggle, but come back to the column start."
msgstr ""
"Observe que o buggle usado fornece código oculto que irá chamar a sua função "
"<code>haveBaggle</code> em cada coluna, movendo automaticamente entre "
"colunas. Portanto, é muito importante que a sua função <code>haveBaggle</"
"code> não tenha nenhum efeito colateral: a posição (e orientação) no final "
"do seu código deve ser a observada no início deste código. Ela moverá entre "
"elas para buscar a baggle, mas volta para o início da coluna."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:73
msgid ""
"Also, this exercise is a bit different since there is two initial worlds, "
"each with a specific objective. Your code must work for each of "
"them. Observe that the world selection scrolling menu (right below the speed "
"slider)  allows to switch the observed world."
msgstr ""
"Além disso, este exercício é um pouco diferente, pois existem dois mundos "
"iniciais, cada um com um objetivo específico. O seu código deve funcionar "
"para cada um deles. Observe que o menu de rolagem de seleção de mundos (logo "
"abaixo do controle deslizante de velocidade) permite mudar o mundo observado."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:78
msgid "When your function <code>haveBaggle</code> works, proceed to next exercise."
msgstr ""
"Quando a sua função <code>temBaggle</code> funcionar, siga ao próximo "
"exercício."

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:4
msgid ""
"Don't you get tired of writing again and again the code to move by a fixed "
"amount of steps? On the other hand, writing <tt>forward2()</tt>, "
"<tt>forward3()</tt>, <tt>forward4()</tt>, as well as <tt>backward2()</tt>, "
"<tt>backward3()</tt>, <tt>backward4()</tt>, and so on does not really help, "
"to say the less."
msgstr ""
"Não está cansado de escrever o mesmo código várias vezes para se mover uma "
"certa quantidade de passos? Por outro lado, escrever <tt>forward2()</tt>, "
"<tt>forward3()</tt>, <tt>forward4()</tt>, assim como <tt>backward2()</tt>, "
"<tt>backward3()</tt>, <tt>backward4()</tt> e etc também não ajudam, para "
"dizer o mínimo."

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:10
msgid ""
"Luckily, it is possible to pass <b>parameters</b> to your methods. You have "
"to specify their type and name between the parenthesis after the method "
"name. Then, you can use them in the method body as if it were variables "
"defined in there, and which initial value is what the caller specified."
msgstr ""
"Felizmente, é possível passar <b>parâmetros</b> para os seus métodos. Tem "
"que especificar o tipo e nome entre parêntesis depois do nome do método. "
"Então, pode usá-los no corpo do método como se eles fossem variáveis "
"definidas lá e com valores iniciais que o \"caller\" especificou."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/args/MethodsArgs.html:15
#, no-wrap
msgid ""
"[!java|c]double [/!]divideByTwo([!java|c]double [/!]x[!scala]: "
"Double[/!])[!scala]: Double =[/!] [!java|scala|c]{[/!][!python]:[/!]\n"
"     return x / 2[!java|c];[/!]\n"
"[!scala|java|c]}[/!]"
msgstr ""
"[!java|c]double [/!]dividirPorDois([!java|c]double [/!]x[!scala]: "
"Double[/!])[!scala]: Double =[/!] [!java|scala|c]{[/!][!python]:[/!]\n"
"     return x / 2[!java|c];[/!]\n"
"[!scala|java|c]}[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:19
msgid ""
"As caller, you have to specify the initial value of this \"variables\" "
"between the call's parenthesis."
msgstr ""
"Como o \"caller\", deve especificar o valor inicial destas \"variáveis\" "
"entre parêntesis na chamada."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/args/MethodsArgs.html:21
#, no-wrap
msgid "[!java|c]double [/!][!scala]val [/!]result = divideByTwo(3.14)[!java|c];[/!]"
msgstr ""
"[!java|c]double [/!][!scala]val [/!]result = dividirPorDois(3."
"14)[!java|c];[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:23
msgid ""
"If you want several parameters, you need to separate them with comas (,)  "
"both in the declaration and calls."
msgstr ""
"Se quiser vários parâmetros, precisa separar-os com vírgulas (,) tanto na "
"declaração quanto na chamada."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/args/MethodsArgs.html:26
#, no-wrap
msgid ""
"[!java|c]double divide(double x, double y) {[/!]\n"
"[!scala]def divide(x:Double, y:Double): Double = {[/!]\n"
"[!python]def divide(x, y):[/!]\n"
"     return x / y[!java|c];[/!]\n"
"[!java|scala|c]}[/!]"
msgstr ""
"[!java|c]double dividir(double x, double y) {[/!]\n"
"[!scala]def dividir(x:Double, y:Double): Double = {[/!]\n"
"[!python]def dividir(x, y):[/!]\n"
"     return x / y[!java|c];[/!]\n"
"[!java|scala|c]}[/!]"

#. type: Content of: <pre>
#: src/lessons/welcome/methods/args/MethodsArgs.html:31
#, no-wrap
msgid ""
"[!java|c]double res = divide(3.14 , 1.5);[/!]\n"
"[!scala]val res = divide(3.14 , 1.5)[/!]\n"
"[!python]res = divide(3.14 , 1.5)[/!]"
msgstr ""
"[!java|c]double res = dividir(3.14 , 1.5);[/!]\n"
"[!scala]val res = dividir(3.14 , 1.5)[/!]\n"
"[!python]res = dividir(3.14 , 1.5)[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/args/MethodsArgs.html:35
#: src/lessons/welcome/methods/picture/MethodsPicture.html:35
msgid "[!java|scala]"
msgstr "[!java|scala]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:36
msgid ""
"In [!thelang], you can declare several methods of the same name as long as "
"they don't have the same <b>signature</b>, that is, the same amount of "
"parameters and the same parameters' types."
msgstr ""
"Em [!thelang], pode declarar vários métodos de mesmo nome desde que eles não "
"tenham a mesma <b>assinatura</b>, ou seja, a mesma quantidade e tipo de "
"parâmetros."

#. type: Content of: <pre>
#: src/lessons/welcome/methods/args/MethodsArgs.html:40
#, no-wrap
msgid ""
"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, "
"y:Double): Double =[/!] {\n"
"  if (x > y) {\n"
"    return x;\n"
"  }\n"
"  return y;\n"
"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] "
"{\n"
"  if (x > y) {\n"
"    return x;\n"
"  }\n"
"  return y;\n"
"}\n"
"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): "
"Int =[/!] {\n"
"  if (x > y && x > z) {\n"
"    return x;\n"
"  }\n"
"  if (y > z) {\n"
"    return y;\n"
"  }\n"
"  return z;\n"
"}"
msgstr ""
"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, y:Double):"
" Double =[/!] {\n"
"  if (x > y) {\n"
"    return x;\n"
"  }\n"
"  return y;\n"
"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] {\n"
"  if (x > y) {\n"
"    return x;\n"
"  }\n"
"  return y;\n"
"}\n"
"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): "
"Int =[/!] {\n"
"  if (x > y && x > z) {\n"
"    return x;\n"
"  }\n"
"  if (y > z) {\n"
"    return y;\n"
"  }\n"
"  return z;\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:61
msgid ""
"Observe that we omitted the <tt>else</tt> branches of each <tt>if</tt>. It "
"works anyway because a <tt>return</tt> interrupts the method execution. If "
"we arrive to the last line of "
"<code>[!java]max(int,int)[/!][!scala]max(Int,Int):Int[/!]</code>, we know "
"that <code>x&lt;=y</code> because otherwise, the <tt>return</tt> of line 2 "
"would have stopped the execution."
msgstr ""
"Observe que omitimos os ramos <tt>else</tt> de cada <tt>if</tt>. Isto "
"funciona de qualquer jeito por que um <tt>return</tt> interrompe a execução "
"do método. Se chegarmos à última linha de "
"<code>[!java]max(int,int)[/!][!scala]max(Int,Int):Int[/!]</code>, vamos "
"saber que <code>x&lt;=y</code> por que de outra forma, o <tt>return</tt> da "
"linha 2 deveria ter parado a execução."

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:71
msgid ""
"This time, you have to write a <code> [!java|c]move(int "
"stepCount,[!java]boolean[/!][!c]int[/!] forward)[/!] [!scala]move(stepCount: "
"Int,forward: Boolean)[/!] [!python]move(stepCount,forward)[/!] </code> "
"method which moves forward by <code>stepCount</code> steps if "
"<code>forward</code> is true, and moves back of that amount of steps if the "
"boolean is false."
msgstr ""
"Agora vai ter que escrever um método <code> [!java|c]mover(int "
"contaPassos,[!java]boolean[/!][!c]int[/!] forward)[/!] "
"[!scala]mover(contaPassos: Int,forward: Boolean)[/!] "
"[!python]mover(contaPassos,forward)[/!] </code> que move para a frente "
"<code>contaPassos</code> passos se <code>forward</code> for true e move para "
"trás a mesmas quantidade de passos se o booleano for false."

#. type: Content of: <p>
#: src/lessons/welcome/methods/args/MethodsArgs.html:79
msgid ""
"This time, there is only one world but seven buggles, all sharing the same "
"code.  This code should not be really problematic for you to write, "
"actually."
msgstr ""
"Desta vez existe apenas um mundo mas sete buggles, todos a compartilhar o "
"mesmo código. Este código não deve te dar muito trabalho para escrever, na "
"verdade."

#. type: Content of: <h2>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:2
msgid "Flower Pot"
msgstr "Vaso de Flores"

#. type: Content of: <p>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:4
msgid ""
"Your buggle decided to flower a bit the pot it lives in. You have to help it "
"reproducing the drawing of its dreams (check the \"Objective\" tab to see "
"it)."
msgstr ""
"O seu buggle decidiu plantar umas flores no pote onde vive. Tem que ajudá-lo "
"a reproduzir o desenho dos sonhos dele (verifique a guia \"Objetivo\" para "
"ver o sonho)."

#. type: Content of: <p>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:7
msgid ""
"For that, you have to write a <code>growFlowers()</code> method that does "
"not take any parameter and does not return any result. You could probably "
"make it without defining this method, but this is part of the assignment."
msgstr ""
"Para isso, tem que escrever um método <code>growFlowers()</code> que não "
"toma nenhum parâmetro e não retorna nenhum resultado. Provavelmente poderia "
"fazê-lo sem definir este método, mas isto é parte da atribuição."

#. type: Content of: <p>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:11
msgid ""
"Also, you should try to decompose this complex drawing in sub-steps so that "
"your code remains short and easy to read. A method to draw one flower of the "
"color passed in parameter sounds like a good start, but it is probably not "
"enough."
msgstr ""
"Além disso, deve tentar decompor este desenho complexo em sub-passos para "
"que o seu código permaneça curto e fácil de ler. Um método para desenhar uma "
"flor da cor passada no parâmetro parece um bom começo, mas provavelmente não "
"é suficiente."

#. type: Content of: <p>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:15
msgid ""
"For your information, this drawing uses five colors that are listed below.  "
"[!java|scala|c]The data type of these constants is <code>Color</code>, that "
"naturally describes a particular color.[/!]"
msgstr ""
"Para sua informação, este desenho usa cinco cores que estão listadas "
"abaixo.  [!java|scala|c]o tipo de dados destas constantes é <code>Cor</"
"code>, que naturalmente descreve uma cor particular.[/!]"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:20
msgid "<code>[!scala|java|python]Color.[/!]RED</code>"
msgstr "<code>[!scala|java|python]Cor.[/!]VERMELHO</code>"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:21
msgid "<code>[!scala|java|python]Color.[/!]PINK</code>"
msgstr "<code>[!scala|java|python]Cor.[/!]ROSA</code>"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:22
msgid "<code>[!scala|java|python]Color.[/!]CYAN</code>"
msgstr "<code>[!scala|java|python]Cor.[/!]CIANO</code>"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:23
msgid "<code>[!scala|java|python]Color.[/!]ORANGE</code>"
msgstr "<code>[!scala|java|python]Cor.[/!]LARANJA</code>"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:24
msgid "<code>[!scala|java|python]Color.[/!]GREEN</code>"
msgstr "<code>[!scala|java|python]Cor.[/!]VERDE</code>"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:25
msgid "<code>[!scala|java|python]Color.[/!]YELLOW</code>"
msgstr "<code>[!scala|java|python]Cor.[/!]AMARELO</code>"

#. type: Content of: <h2>
#: src/lessons/welcome/methods/flowerpot/FlowerCase.html:2
msgid "Flower Display Case"
msgstr "Vitrine de flores"

#. type: Content of: <p>
#: src/lessons/welcome/methods/flowerpot/FlowerCase.html:4
msgid ""
"Whao! That's not a little pot anymore! That's a huge large flower display "
"case! Your buggle can't help but starts flowering this gorgeous place. You "
"should help it to prevent that it bumps into a wall..."
msgstr ""
"Uau! isto não é mais um potinho! É uma grande vitrine de flores! O seu "
"buggle mal pode esperar para começar a florir este belo lugar. Deve ajudá-lo "
"a não bater nas paredes..."

#. type: Content of: <p>
#: src/lessons/welcome/methods/flowerpot/FlowerCase.html:8
msgid "PS: the newly used color is <code>Color.BLUE</code>."
msgstr "PS: a cor recentemente usada é <code>Cor.AZUL</code>."

#. type: Content of: <h2>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:2
msgid "Colorful drawing"
msgstr "Desenho colorido"

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:11
msgid ""
"If you observe carefully the picture to draw, it is constituted of four "
"parts depicting a sort of V using a different color. A possible "
"decomposition is to write a method in charge of drawing a V of the specified "
"color from the current position. Its prototype can be:"
msgstr ""
"Se observar cuidadosamente a figura para pintar, é constituída de quatro "
"partes a descrever um tipo de V a usar uma cor diferente. Uma decomposição "
"possível é escrever um método responsável por pintar um V de uma cor "
"específica a partir da posição atual. O protótipo dela pode ser:"

#. type: Content of: <pre>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:15
#, no-wrap
msgid ""
"[!java|c]void [/!]makeV([!java|c]Color [/!]c[!scala]: Color[/!])[!python]  "
"<span class=\"comment\"># parameter c is of type Color</span>[/!]"
msgstr ""
"[!java|c]void [/!]fazerV([!java|c]Cor [/!]c[!scala]: Cor[/!])[!python]  "
"<span class=\"comment\"># parâmetro c é do tipo Cor</span>[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:17
msgid ""
"The <code>Color</code> data type naturally describes a particular "
"color. Your code should probably call <code>makeV</code> with the following "
"arguments (a different color for each call):"
msgstr ""
"O tipo de dados <code>Cor</code> descreve obviamente uma cor particular. O "
"seu código provavelmente vai chamar <code>fazerV</code> com os seguintes "
"argumentos (uma cor diferente para cada chamada):"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:21
msgid "[!java|scala|python]Color.[/!]YELLOW"
msgstr "[!java|scala|python]Cor.[/!]AMARELO"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:22
msgid "[!java|scala|python]Color.[/!]RED"
msgstr "[!java|scala|python]Cor.[/!]VERMELHO"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:23
msgid "[!java|scala|python]Color.[/!]BLUE"
msgstr "[!java|scala|python]Cor.[/!]AZUL"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:24
msgid "[!java|scala|python]Color.[/!]GREEN"
msgstr "[!java|scala|python]Cor.[/!]VERDE"

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:27
msgid ""
"In <code>makeV()</code>, you should use the <code>setBrushColor()</code> "
"method (predefined in the buggle) to change the color of the buggle's brush, "
"as well as <code>brushUp()</code> and <code>brushDown()</code> to change the "
"brush position."
msgstr ""
"Em <code>makeV()</code>, deve usar o método <code>setBrushColor()</code> "
"(pré-definido no buggle) para mudar a cor do pincel do buggle, assim como "
"<code>brushUp()</code> e <code>brushDown()</code> para mudar a posição do "
"pincel."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:32
msgid ""
"It may be wise to write the <code>makeV()</code> so that it places directly "
"the buggle in position for the next V."
msgstr ""
"É recomendável escrever o código do <code>makeV()</code> de forma que deixe "
"o buggle na posição ao próximo V."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:36
msgid ""
"Your turn now. I'm sure you can imagine the other methods you need to keep "
"your code simple and pleasant to read.  Complete the method "
"<code>run()</code> that should be called automatically (once).  [!java]the "
"<code>public</code> keyword means more or less that anybody can call this "
"method, which is good because the PLM infrastructure calls it directly.[/!]"
msgstr ""
"Agora é a sua vez. Tenho certeza de que pode imaginar os outros métodos "
"necessários para manter o seu código simples e agradável de ler. Complete o "
"método <code>run()</code> que será chamado automaticamente (uma vez).  "
"[!java]a palavra-chave <code>public</code> significa mais ou menos que todo "
"o mundo pode chamar este método, o que é bom, pois a infraestrutura do PLM "
"chama-o diretamente.[/!]"

#. type: Content of: <h2>
#: src/lessons/welcome/methods/picture/MethodsPictureLarge.html:2
msgid "Larger colorful drawing"
msgstr "Um desenho colorido maior"

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/MethodsPictureLarge.html:8
msgid ""
"You thus have to declare even more methods to use the repetitions of the "
"pattern and factorize your code. Another solution is to <i>parametrize</i> "
"your functions to reuse the code you wrote previously by changing the size."
msgstr ""
"Agora tem que declarar ainda mais métodos para usar as repetições de padrões "
"e fatorizar o seu código. Outra soução é <i>parametrizar</i> as suas funções "
"para reusar o código que escreveu previamente a mudar o tamanho."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/MethodsPictureLarge.html:13
#: src/lessons/welcome/traversal/Snake.html:40
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:50
#: src/lessons/welcome/traversal/line/TraversalByLine.html:11
#: src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:11
#: src/lessons/welcome/traversal/zigzag/TraversalZigZag.html:7
msgid "Your turn..."
msgstr "É asua vez..."

#. type: Content of: <h2>
#: src/lessons/welcome/methods/picture/PatternPicture.html:2
msgid "Another Colorful Pattern"
msgstr "Outro padrão colorido"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/picture/PatternPicture.html:4
msgid ""
"Here is yet another exercise where you have to reproduce the pattern "
"provided in the \"Objective\" tab."
msgstr ""
"Aqui está outro exercício onde tem que reproduzir o padrão fornecido na guia "
"\"Objetivo\"."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PatternPicture.html:7
msgid ""
"This one is a bit more difficult than the one seen previously. Look for "
"repeating patterns, even if the color changes, and write a method drawing "
"each of them."
msgstr ""
"Este é um pouco mais difícil do que o anterior. Procure por padrões de "
"repetição, mesmo se a cor mudar e escreva um método a desenhar cada um deles."

#. type: Content of: <p>
#: src/lessons/welcome/methods/picture/PatternPicture.html:11
#: src/lessons/lander/lvl1_lander_101/Lander101.html:42
msgid "Good luck!"
msgstr "Boa Sorte!"

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugHunting.html:4
msgid ""
"Now that your <code>isFacingTrail()</code> method is working, it's time to "
"write the code to organize the hunting party. Copy/paste your code from the "
"previous exercise, and complete the <code>hunt()</code> method."
msgstr ""
"Agora que o seu método <code>isFacingTrail()</code> está a funcionar, é hora "
"de escrever o código para organizar a festa da caçada. Copie-e-cole o seu "
"código do exercício anterior e complete o método <code>hunt()</code>."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugHunting.html:8
msgid ""
"Following a track is not very difficult: move forward as long as you have "
"the track in front of you.  If there is not track in front of you anymore, "
"check whether the rest of the track is on your left or on your right, and "
"follow it further."
msgstr ""
"Seguir uma trilha não é difícil: avance até ter a trilha à sua frente. Se "
"não houver trilha mais trilha à sua frente, verifique se o restante da "
"trilha está à sua esquerda ou à sua direita e vá nesta direção."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugHunting.html:12
msgid ""
"To ensure that you don't mix the track you come from with the one in front "
"of you, the easier is to erase the track when you follow it. Use the method "
"<code>brushDown()</code> to put your brush down and mark the ground, and "
"<code>brushUp()</code> to move it up again."
msgstr ""
"Para garantir que não misture o caminho de onde veio com o para aonde vai, o "
"fácil é apagar o caminho por onde passa. Use o método <code>brushDown()</"
"code> para abaixar o seu pincel e marcar o chão e <code>brushUp()</code> "
"para levantá-lo de novo."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugHunting.html:16
msgid ""
"Finally, do not forget to capture your prey once you found it (using "
"<code>pickupBaggle()</code>)."
msgstr ""
"Finalmente, não se esqueça de capturar a sua presa quando encontrá-la (a "
"usar <code>pickupBaggle()</code>)."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/methods/slug/SlugHunting.html:20
msgid ""
"<a name=\"Objectives\"> Complete the <code>hunt()</code> method. You "
"probably want to copy over the <code>isFacingTrail()</code> method that you "
"wrote in previous exercise.  </a>"
msgstr ""
"<a name=\"Objetivos\"> Complete o método <code>hunt()</code>. Não gostaria "
"de copiar o método <code>isFacingTrail()</code> que escreveu no exercício "
"anterior?</a>"

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugTracking.html:4
msgid ""
"Your buggle is super happy! It just found the green dribbling trail, "
"certainly left by a big yummy slug.  At its end, the buggle is certain to "
"entertain itself with this appetizing slug (represented as a baggle)."
msgstr ""
"O seu buggle está super-feliz! Acabou de encontrar o rastro verde e úmido, "
"certamente deixado por um apetitosa e grande lesma.  No final dele, o buggle "
"tem certeza de que vai se divertir com est deliciosa lesma (representada por "
"um baggle)."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugTracking.html:8
msgid ""
"To reach that goal, you had to write a method <tt>isFacingTrail</tt> that "
"will be called automatically by the buggle on each step. Your method should "
"return [!python]True[/!][!java|scala]true[/!] if facing a green cell, or "
"[!python]False[/!][!java|scala]false[/!] if not. Of course, if we are facing "
"a wall, it should return false without bumping into it. You should make sure "
"that this method has no <b>side effect</b>, i.e. that it does not change the "
"state of the calling buggle nor of its world."
msgstr ""
"Para atingir esse objetivo, teve que escrever um método <tt>isFacingTrail</"
"tt> que será chamado automaticamente pelo buggle a cada passo. O seu método "
"deve retornar [!python]True[/!][!java|scala]true[/!] se estiver diante de "
"uma célula verde, ou [!python]False[/!][!java|scala]false[/!] se não "
"estiver. Claro, se estivermos de frente para uma parede, deve retornar false "
"sem esbarrar nela. Deve ter certeza de que este método não tem <b>efeitos "
"colaterais</b>, ou seja, que não muda o estado do buggle chamado nem do "
"mundo dele."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugTracking.html:14
msgid ""
"Your tool to that end is the <code>getGroundColor()</code> that returns the "
"color of the current cell. Just go to the cell you want to test and run that "
"function.  [!java]You cannot test whether this color is equal to "
"<code>Color.green</code> with an <code>==</code> sign but instead you have "
"to write something like "
"<code>getGroundColor().equals(Color.green)</code>. This is because green is "
"an <i>object</i> in Java, and <code>.equals()</code> is the way to go to "
"test equality between Java objects.[/!] [!python|scala|c]So you just have to "
"test whether the returned color is equal to the value "
"<code>[!scala|python]Color.green[/!][!c]GREEN[/!]</code>, that represents "
"the green color.[/!]"
msgstr ""
"A sua ferramenta para este objetivo é o <code>getGroundColor()</code> que "
"retorna a cor da célula atual. Simplesmente vá à célula que quer testar e "
"execute esta função.  [!java]Não pode testar se esta cor é igual a <code>Cor."
"verde</code> com um símbolo de <code>==</code> mas sim escrever algo como "
"<code>getGroundColor().equals(Cor.verde)</code>. Isto acontece por que verde "
"é um  <i>objeto</i> em Java e <code>.equals()</code> é a forma de testar "
"igualdade entre objetos Java.[/!] [!python|scala]Então tem que testar se a "
"cor retornada é igual ao valor <code>Cor.verde</code>, que representa "
"verde.[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugTracking.html:25
msgid ""
"Complete the <code>isFacingTrail()</code> method (which gets called "
"automatically)."
msgstr ""
"Complete o método <code>isFacingTrail()</code> (que será chamado "
"automaticamente)."

#. type: Content of: <h2>
#: src/lessons/welcome/methods/slug/SlugSnail.html:2
msgid "Slugs and Snails"
msgstr "Lesmas e Caracóis"

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugSnail.html:4
msgid ""
"Yuhu! This time, your buggle found the tracks of much more preys! In the "
"first world, that's a yummy Kitty Slug (leaving a pink trail) while on the "
"second world, that's a big fat snail that awaits your buggle at the end of "
"the orange trail."
msgstr ""
"Iuhu! Desta vez, o seu buggle encontrou trilhas com muitas presas! No "
"primeiro mundo, era uma bela lesma deliciosa (que deixava um rastro rosa) e "
"no segundo mundo, uma grande e o caracol gordo que esperava o seu buggle no "
"final do rastro laranja."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugSnail.html:8
msgid ""
"You have to copy/paste your code again, and change it so that your methods "
"take the color of the trail to follow as a parameter. Beside of this, your "
"code should work as earlier."
msgstr ""
"Tem que copiar/colar o seu código de novo e mudá-lo de forma que os seus "
"métodos fiquem com a cor do rastro para seguir como um parâmetro. E mesmo "
"assim, o seu código deve funcionar como antes."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugSnail.html:11
msgid ""
"Don't get lost on false leads! <code>The hunt()</code> method was given a "
"parameter to tell you which color to follow (and it is not the same in all "
"worlds). Add a parameter to your <code>isFacingTrail()</code> method to only "
"follow the requested color, as the other colors lead to dead ends..."
msgstr ""
"Cuidado para não seguir pistas falsas! O método <code>hunt()</code> recebe "
"um parâmetro para dizer que cor seguir (e não é o mesmo em todos os mundos). "
"Adicione um parâmetro ao seu método <code>isFacingTrail()</code> para apenas "
"seguir a cor requisitada, pois as outras cores vão levar a becos..."

#. type: Content of: <h2>
#: src/lessons/welcome/bdr/BDR.html:2
msgid "Buggle Dance Revolution (BDR)"
msgstr "Buggle Dance Revolution (BDR)"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:4
msgid ""
"After these races, it's time to party! For that, we will teach the buggles "
"to play Dance Revolution, this game beloved of some students: The player has "
"to move the feet on the carpet according to the instructions presented on "
"the screen, and following the music. But before that, we have some details "
"to study first."
msgstr ""
"Depois destas corridas, é hora de festejar! Para isto, vamos ensinar os "
"buggles a jogar Dance Revolution, este jogo amado por alguns estudantes: O "
"jogador tem que mover os pés num carpete de acordo com as instruções "
"apresentadas no ecrã e seguir a música. Mas antes disto, temos alguns "
"detalhes para estudar primeiro."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR.html:9 src/lessons/welcome/bdr/BDR2.html:4
#: src/lessons/recursion/lego/square/FourSquare.html:28
msgid "[!java|scala|c]"
msgstr "[!java|scala|c]"

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:10
msgid "Conditionals without curly braces"
msgstr "Condicionais sem colchetes"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:12
msgid ""
"There is one detail we omitted about the conditional syntax: if a branch "
"contains only one instruction, then the curly braces become optional. So, "
"the two chunk of code are equivalent:"
msgstr ""
"Existe um detalhe que omitimos sobre a sintaxe do condicional: se um ramo "
"contém apenas uma instrução, então o colchetes se torna opcional. Portanto, "
"estes dois pedaços de código são equivalentes:"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:16
#, no-wrap
msgid ""
"if (<b>condition</b>) {\n"
"    <b>whatToDoIfTheConditionIsTrue();</b>\n"
"} else {\n"
"    <b>whatToDoElse();</b>\n"
"}"
msgstr ""
"if (<b>condição</b>) {\n"
"    <b>oQueFazerSeACondiçãoÉVerdadeira();</b>\n"
"} else {\n"
"    <b>oQueFazerCasoContrário();</b>\n"
"}"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:21
#, no-wrap
msgid ""
"if (<b>condition</b>) \n"
"    <b>whatToDoIfTheConditionIsTrue();</b>\n"
"else\n"
"    <b>whatToDoElse();</b>"
msgstr ""
"if (<b>condição</b>) \n"
"    <b>oQueFazerSeACondiçãoÉVerdadeira();</b>\n"
"else\n"
"    <b>oQueFazerCasoContrário();</b>"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:26
msgid ""
"Actually, you can do the same for loops body that are reduced to one "
"instruction only.  But beware, this becomes dangerous if you chain the "
"<tt>if</tt> instructions like this:"
msgstr ""
"Na verdade, pode fazer o mesmo em corpos de loop que se reduzem a apenas uma "
"instrução. Mas cuidado, isto torna-se perigoso se cadeiar as instruções "
"<tt>if</tt> como a seguir:"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:28
#, no-wrap
msgid ""
"if (isOverBaggle())    \n"
"     if (x == 5)\n"
"          left();\n"
"else // Do not write it this way, it's misleading!\n"
"     right(); \n"
"[!c]stepForward();[/!][!java|scala]forward();[/!]"
msgstr ""
"if (isOverBaggle())    \n"
"     if (x == 5)\n"
"          left();\n"
"else // Não escreva desta forma, é enganoso!\n"
"     right(); \n"
"[!c]stepForward();[/!][!java|scala]forward();[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:35
msgid ""
"You think that <code>right()</code> refers to the first <code>if</code> and "
"get executed when <code>isOverBaggle()</code> returns false, but in fact, it "
"refers to the second one <code>if</code> and will be executed when "
"<code>isOverBaggle()</code> returns true and <code>x != 5</code>. Yes, "
"despite the indentation, the buggle understands the previous code as "
"follows:"
msgstr ""
"Pensa que <code>right()</code> se refere ao primeiro <code>if</code> e será "
"executado quando <code>isOverBaggle()</code> retorna false, mas, na verdade, "
"refere-se ao segundo <code>if</code> e será executado quando "
"<code>isOverBaggle()</code> retorna true e <code>x != 5</code>. Sim, apesar "
"da indentação, o buggle entende o código anterior da seguinte forma:"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:42
#, no-wrap
msgid ""
"if (isOverBaggle())    \n"
"        if (x == 5)\n"
"            left();\n"
"        else\n"
"            right();\n"
"[!c]stepForward();[/!][!java|scala]forward();[/!]"
msgstr ""
"if (isOverBaggle())    \n"
"        if (x == 5)\n"
"            left();\n"
"        else\n"
"            right();\n"
"[!c]stepForward();[/!][!java|scala]forward();[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:49
msgid ""
"In [!thelang] the computer connects a <tt>else</tt> branch to the closest "
"<tt>if</tt>. If you find it ambiguous, you should add more braces than "
"strictly necessary. Computers don't even look at the indentation in "
"[!thelang]. The previous code could even be written as follows and lead to "
"the same result."
msgstr ""
"Em [!thelang] o computador conecta um ramo <tt>else</tt> ao <tt>if</tt> mais "
"próximo. Se o achar ambíguo, deve adicionar mais aspas do que estritamente "
"necessário. Os computadores nem sequer olham para a indentação em [!thelang]"
". O código anterior pode até ser escrito da seguinte forma e levar ao mesmo "
"resultado."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:55
#, no-wrap
msgid ""
"if (isOverBaggle()) if (x == 5) left(); else right(); "
"[!c]stepForward();[/!][!java|scala]forward();[/!]"
msgstr ""
"if (isOverBaggle()) if (x == 5) left(); else right(); "
"[!c]stepForward();[/!][!java|scala]forward();[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:57
msgid ""
"But for humans, <b>you really want to indent your code correctly "
"correctly</b>. For example if you want a professor to review or even grade "
"your code, if you want to reuse your own code later, or even if you need to "
"debug it. That is right: you need to write readable code for your own "
"comfort."
msgstr ""
"Mas para humanos, <b>realmente é melhor indentar o seu código corretamente</"
"b>. Por exemplo, se quer que um professor reveja ou mesmo avalie o seu "
"código, se quer reutilizar o seu próprio código mais tarde, ou mesmo se "
"precisa depurá-lo. Isso é certo: precisa escrever um código legível para o "
"seu próprio conforto."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:63
msgid "Chaining conditionals"
msgstr "Encadear condicionais"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:65
msgid "You sometimes want to ask the buggle something similar to:"
msgstr "Algumas vezes quer perguntar o buggle algo similar a:"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:66
#, no-wrap
msgid ""
"if it's raining, take an umbrella;\n"
"if not, and if it's a hot day, take a bottle of water;\n"
"if not and if it's July 4th, take an American flag"
msgstr ""
"se está a chover, leve um guarda-chuva;\n"
"se não e se está quente, leve uma garrafa de água;\n"
"se não e se hoje é 4 de Julho, leve uma bandeira dos estados unidos"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:70
msgid ""
"The trap is that we want at most one of these actions to be taken. That is "
"to say, if it's raining a very hot July 4th, we don't want the buggle to get "
"outside with an umbrella, some water and a flag, but simply with an "
"umbrella. The following code is thus WRONG."
msgstr ""
"A armadilha é que queremos que pelo menos uma destas ações sejam feitas. É "
"como dizer, se está a chover num 4 de Julho quente, não queremos que o "
"buggle vá para fora com um guarda-chuva, água e um bandeira, mas "
"simplesmente com um guarda-chuva. O código seguinte está, então, ERRADO."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:75
#, no-wrap
msgid ""
"[!scala|c|java]if (rainy())\n"
"    takeUmbrella();\n"
"if (hot())\n"
"    takeWater();\n"
"if (todayIsJuly4th())\n"
"    takeFlag();[/!][!python]if rainy():\n"
"    takeUmbrella()\n"
"if hot():\n"
"    takeWater()\n"
"if todayIsJuly4th():\n"
"    takeFlag()[/!]"
msgstr ""
"[!scala|c|java]if (chuvoso())\n"
"    pegueGuarda-Chuva();\n"
"if (quente())\n"
"    pegueAgua();\n"
"if (hoje4Julho())\n"
"    pegueBandeira();[/!][!python]if aChover():\n"
"    pegueGuarda-Chuva()\n"
"if quente():\n"
"    pegueAgua()\n"
"if hoje4Julho():\n"
"    pegueBandeira()[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:88
msgid ""
"Indeed, since the conditions are evaluated one after the other, there is a "
"risk that you go to the July 4th march on a rainy day. Instead, we should "
"use something like this to ensure that once we found a true condition, we "
"won't evaluate the next ones."
msgstr ""
"Na verdade, já que as condições são calculadas uma depois da outra, existe "
"um risco de que vá sair no die 4 de Julho num dia chuvoso. Na verdade, "
"devemos usar algo como isto para garantir que uma vez que encontremos a "
"condição verdadeira, não passemos às próximas."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:93
#, no-wrap
msgid ""
"[!java|scala|c]if (rainy()) {\n"
"    takeUmbrella();\n"
"} else {\n"
"    if (hotDay()) {\n"
"        takeWater();\n"
"    } else {\n"
"        if (todayIsJuly4th()) {\n"
"            takeFlag();\n"
"        }\n"
"    }\n"
"}[/!][!python]if rainy():\n"
"    takeUmbrella()\n"
"else:\n"
"    if hotDay():\n"
"        takeWater()\n"
"    else:\n"
"        if todayIsJuly4th():\n"
"            takeFlag()[/!]"
msgstr ""
"[!java|scala|c]if (chuvoso()) {\n"
"    levarGuardaChuva();\n"
"} else {\n"
"    if (diaQuente()) {\n"
"        levarAgua();\n"
"    } else {\n"
"        if (jogoDaCopa()) {\n"
"            levarBandeira();\n"
"        }\n"
"    }\n"
"}[/!][!python]if chuvoso():\n"
"    levarGuardaChuva()\n"
"else:\n"
"    if diaQuente():\n"
"        levarAgua()\n"
"    else:\n"
"        if jogoDaCopa():\n"
"            levarBandeira()[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:113
msgid ""
"Unfortunately, such a cascade of conditionals is quite difficult to read. It "
"is better to [!java|scala|c]omit the curly braces for the <tt>else</tt> "
"statements. Some languages even introduce a specific construct for these "
"<tt>else if</tt>, but not [!thelang].[/!] [!python]change the sub-blocks "
"using the <code>elif</code> keyword to mark explicitly these \"else if\" "
"branches.[/!]"
msgstr ""
"Infelizmente, tal cascata de condicionais é bastante difícil de ler. É "
"melhor [!java|scala|c]omitir as chaves para as assertivas <tt>else</tt>. "
"Algumas linguagens até mesmo introduzem uma construção específica para estes "
"<tt>else if</tt>, mas não [!thelang].[/!] [!python]mudar os sub-blocos a "
"usar a palavra-chave <code>elif</code> para marcar explicitamente estes "
"ramos \"else if\".[/!]"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:120
#, no-wrap
msgid ""
"[!c|java|scala]if (rainy()) { \n"
"    takeUmbrella();\n"
"} else if (hotDay()) {\n"
"    takeWater();\n"
"} else if (todayIsJuly4th()) {\n"
"    takeFlag();\n"
"}[/!][!python]if rainy():\n"
"    takeUmbrella()\n"
"elif hotDay():\n"
"    takeWater()\n"
"elif todayIsJuly4th():\n"
"    takeFlag()[/!]"
msgstr ""
"[!c|java|scala]if (chuvoso()) { \n"
"    levarGuardaChuva();\n"
"} else if (diaQuente()) {\n"
"    levarAgua();\n"
"} else if (jogoDaCopa()) {\n"
"    levarBandeira();\n"
"}[/!][!python]if chuvoso():\n"
"    levarGuardaChuva()\n"
"elif diaQuente():\n"
"    levarAgua()\n"
"elif jogoDaCopa():\n"
"    levarBandeira()[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:133
msgid "Graffiti in the Buggle World"
msgstr "Grafitagem no mundo dos Buggles"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:135
msgid ""
"Buggles can tag graffitis on the ground of their world. For that, they use "
"the four following methods:"
msgstr ""
"Os buggles podem grafitar no chão do mundo deles. Para isto, use os quatro "
"métodos seguintes:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:139
msgid ""
"<code>[!c]int[/!][!java]boolean[/!] "
"isOverMessage()[!scala]:Boolean[/!]</code>: returns "
"<code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> if and only if "
"there is a message on the ground."
msgstr ""
"<code>[!c]int[/!][!java]boolean[/!] "
"isOverMessage()[!scala]:Boolean[/!]</code>: returns "
"<code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> se e somente se "
"existe uma mensagem no chão."

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:142
msgid ""
"<code>[!c]char*[/!][!java]String[/!] readMessage()[!scala]: "
"String[/!]</code>: returns the message written on the ground (or an empty "
"string if nothing is written)."
msgstr ""
"<code>[!c]char*[/!][!java]String[/!] readMessage()[!scala]: "
"String[/!]</code>: retorna a mensagem lida no chão (ou uma cadeia vazia se "
"não há nada escrito)."

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:144
msgid ""
"<code>[!java|c]void[/!] writeMessage([!c]char*[/!][!java]String "
"[/!]msg[!scala]: String[/!])</code>: writes the specified message down on "
"the ground. If there is already a message on the ground, the new content is "
"added at the end of the existing message."
msgstr ""
"<code>[!java|c]void[/!] escreverMensagem([!c]char*[/!][!java]String "
"[/!]msg[!scala]: String[/!])</code>: escreve a mensagem especificada no "
"chão. Se já existe uma mensagem no chão, a nova é adicionada no final da "
"mensagem existente."

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:147
msgid ""
"<code>[!java|c]void [/!]clearMessage()</code>: clears what is written on the "
"ground."
msgstr ""
"<code>[!java|c]void [/!]clearMessage()</code>: limpa o que está escrito no "
"chão."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR.html:151
msgid ""
"The goal is then to organize a BDR game between the buggles by teaching them "
"to move according to the instructions written on the ground. These "
"instructions are messages written on the ground, with the following "
"signification:"
msgstr ""
"O objetivo é então organizar um jogo de BDR entre os buggles a ensinar eles "
"a se mover de acordo com as instruções escritas no chão. Estas instruções "
"são mensagens escritas no chão, com o seguinte significado:"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:157 src/lessons/welcome/bdr/BDR2.html:139
msgid "Message"
msgstr "Mensagem"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:158 src/lessons/welcome/bdr/BDR2.html:140
msgid "What to do"
msgstr "O que fazer"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:159
msgid "Mnemonic"
msgstr "Mnemônico"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:161 src/lessons/welcome/bdr/BDR2.html:142
msgid "[!java|c]'R'[/!][!scala|python]\"R\"[/!]"
msgstr "[!java|c]'R'[/!][!scala|python]\"R\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:161 src/lessons/welcome/bdr/BDR2.html:142
msgid "Turn right and move one step forward"
msgstr "Vire a direita (R de right) e mova um passo a frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:161
msgid "Right"
msgstr "Direita"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:162 src/lessons/welcome/bdr/BDR2.html:143
msgid "[!java|c]'L'[/!][!scala|python]\"L\"[/!]"
msgstr "[!java|c]'L'[/!][!scala|python]\"L\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:162 src/lessons/welcome/bdr/BDR2.html:143
msgid "Turn left and move one step forward"
msgstr "Vire a esquerda e mova um passo a frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:162
msgid "Left"
msgstr "Esquerda"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:163 src/lessons/welcome/bdr/BDR2.html:144
msgid "[!java|c]'I'[/!][!scala|python]\"I\"[/!]"
msgstr "[!java|c]'I'[/!][!scala|python]\"I\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:163
msgid "Turn back (U-turn) and move one step forward"
msgstr "Vire para trás (meia-volta) e mova um passo a frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:163
msgid "Inverse"
msgstr "Inversa"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:165 src/lessons/welcome/bdr/BDR2.html:146
msgid "[!java|c]'A'[/!][!scala|python]\"A\"[/!]"
msgstr "[!java|c]'A'[/!][!scala|python]\"A\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:165 src/lessons/welcome/bdr/BDR2.html:146
msgid "Move one step forward"
msgstr "Mova um passo a frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:165
msgid "First letter of the alphabet"
msgstr "Primeira letra do alfabeto"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:166 src/lessons/welcome/bdr/BDR2.html:147
msgid "[!java|c]'B'[/!][!scala|python]\"B\"[/!]"
msgstr "[!java|c]'B'[/!][!scala|python]\"B\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:166 src/lessons/welcome/bdr/BDR2.html:147
msgid "Move two steps forward"
msgstr "Mova dois passos a frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:166
msgid "Second letter of the alphabet"
msgstr "Segunda letra do alfabeto"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:167 src/lessons/welcome/bdr/BDR2.html:148
msgid "[!java|c]'C'[/!][!scala|python]\"C\"[/!]"
msgstr "[!java|c]'C'[/!][!scala|python]\"C\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:167 src/lessons/welcome/bdr/BDR2.html:148
msgid "Move three steps forward"
msgstr "Mova três passos a frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:167
msgid "Third letter of the alphabet"
msgstr "Terceira letra do alfabeto"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:169 src/lessons/welcome/bdr/BDR2.html:153
msgid "[!java|c]'Z'[/!][!scala|python]\"Z\"[/!]"
msgstr "[!java|c]'Z'[/!][!scala|python]\"Z\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:169 src/lessons/welcome/bdr/BDR2.html:153
msgid "Move one step backward"
msgstr "Mova um passo para trás"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:169
msgid "One letter before the end of the alphabet"
msgstr "última letra do alfabeto"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:170 src/lessons/welcome/bdr/BDR2.html:154
msgid "[!java|c]'Y'[/!][!scala|python]\"Y\"[/!]"
msgstr "[!java|c]'Y'[/!][!scala|python]\"Y\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:170 src/lessons/welcome/bdr/BDR2.html:154
msgid "Move two steps backward"
msgstr "Mova dois passos para trás"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:170
msgid "Two letters before the end of the alphabet"
msgstr "penúltima letra do alfabeto"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:171 src/lessons/welcome/bdr/BDR2.html:155
msgid "[!java|c]'X'[/!][!scala|python]\"X\"[/!]"
msgstr "[!java|c]'X'[/!][!scala|python]\"X\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:171 src/lessons/welcome/bdr/BDR2.html:155
msgid "Move three steps backward"
msgstr "Mova três passos para trás"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:171
msgid "Three letters before the end of the alphabet"
msgstr "Antepenúltima letra do alfabeto"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:172 src/lessons/welcome/bdr/BDR2.html:159
msgid "<i>(anything else)</i>"
msgstr "<i>(qualquer outra coisa)</i>"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:172 src/lessons/welcome/bdr/BDR2.html:159
msgid "Stop dancing."
msgstr "Parar de dançar."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:175
msgid "Indications"
msgstr "Indicações"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR.html:177
msgid ""
"This exercise may seem a bit complex at the first glance, but it comes down "
"to summarizing the information of the table in a sequence of conditionals."
msgstr ""
"Este exercício pode parecer um pouco complexo à primeira vista, mas ele vem "
"a resumir a informação na tabela numa sequência de condicionais."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:180
msgid ""
"You have to keep dancing as long as there is some dancing steps to do, i.e., "
"as long as we are in a cell which content is described in the table.  The "
"easier for that is to use a boolean variable (<code>finished</code>)  as "
"termination condition to a <code>while</code> loop.  It should be "
"initialized to "
"<code>[!c]0[/!][!java|scala]false[/!][!python]False[/!]</code>, and switched "
"to <code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> as soon as "
"the buggle find a cell with a value not described in the table.  Thus, the "
"loop will stop and the program will terminate."
msgstr ""
"Tem que se manter a dançar enquanto houverem passos de dança para fazer, "
"p.ex., enquanto estivermos numa célula cujo conteúdo esteja contido na "
"tabela. a forma mais fácil de fazer isto é a usar uma variável booleana "
"(<code>terminou</code>) como condição de término para o loop <code>while</"
"code>. Ela deve ser iniciada como "
"<code>[!c]0[/!][!java|scala]false[/!][!python]False[/!]</code> e trocada "
"para <code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> assim que "
"o buggle encontre uma célula com um valor não descrito na tabela. Assim, o "
"loop pára e o programa termina."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:190
msgid ""
"Another subtlety is that detecting if strings are equals is a bit annoying "
"in [!thelang].  So, we use the <code>char getIndication[!c]Bdr[/!]()</code> "
"instead of <code>[!java]String[/!][!c]char*[/!] readMessage()</code>.  This "
"method, only known by the buggles of this exercise, returns the first char "
"of the message written on the ground (or ' ' -- the space char -- if nothing "
"is written down). It enables to work with chars instead of strings, that is "
"much simpler in [!thelang]."
msgstr ""
"Outro detalhe é que detetar se cadeias são iguais é um pouco chato em Java. "
"Então, usamos o <code>char getIndication[!c]Bdr[/!]()</code> ao invés do "
"<code>[!java]String[/!][!c]char*[/!] readMessage()</code>. Este método, "
"conhecido apenas pelos buggles deste exercício, retorna o primeiro caractere "
"da mensagem escrita no chão (ou ' ' -- o caractere para espaço -- se não tem "
"nada escrito). Ele ativa que se trabalhe com caracteres ao invés de cadeias, "
"que é muito mais simples em [!thelang]."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:198
msgid "Tips and Hints"
msgstr "Dicas"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR.html:200
msgid ""
"If you fail to understand why the buggle does not execute the expected "
"steps, try adding <code>brushDown()</code> in your method. This asks the "
"buggle to put down a brush leaving a trail when it moves. It should help you "
"understanding its trajectory, but do not forget to remove this call when you "
"want to test whether your code is a valid solution to the exercise: you are "
"asked to let the buggle dance, not to vandalize the dance floor."
msgstr ""
"Se não entendeu por que o buggle não fez os passos esperados, tente "
"adicionar <code>brushDown()</code> no seu método. Isto pede ao buggle para "
"abaixar um pincel a deixar um rastro por onde passar. Isto pode ajudá-lo a "
"entender a trajetória dele, mas não se esqueça de remover esta chamada "
"quando quiser testar se o seu código é uma solução válida para o exercício: "
"pode fazer o buggle dançar, mas não pichar a pista de dança."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:207
msgid "When your program finally works, move on to the next exercise."
msgstr "Quando seu programa finalmente funcionar, vá ao próximo exercício."

#. type: Content of: <h2>
#: src/lessons/welcome/bdr/BDR2.html:2
msgid "Buggle Dance Revolution 2 (BDR2)"
msgstr "Buggle Dance Revolution 2 (BDR2)"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:5
msgid ""
"BDR is cool, but it's a bit chaotic. First, the buggles giggle in any "
"directions, and then the code you had to write to let them move is rather "
"difficult to read. Here is a new BDR world where the buggle will dance a "
"gentle circle. We will benefit this tranquillity to clean up a bit our code "
"thanks to the new constructs we will introduce."
msgstr ""
"BDR é legal, mas um pouco caótico. Primeiro, os buggles balançam em todas as "
"direções, o que faz com que o código que tenha que escrever para fazê-los se "
"mover seja um pouco difícil de ler. Apresentamos agora um novo mundo DBR "
"onde os buggles dançam num suave círculo. Vamos aproveitar esta "
"tranquilidade para limpar um pouco nosso código graças a novas construções "
"que vamos introduzir."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR2.html:11
msgid "[!java|c]<code>switch</code> conditionals[/!][!scala]Pattern matching[/!]"
msgstr ""
"[!java|c]condicionais <code>switch</code>[/!][!scala]busca de padrões[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:13
msgid ""
"The hardest part of previous code is certainly the conditional "
"cascading. Somewhere in your code, you certainly had something similar to:"
msgstr ""
"A parte mais difícil do código anterior é comn certeza a cascata de "
"condicionais. Em algum ponto do seu código, certamente tem algo como isto:"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:16
#, no-wrap
msgid ""
"if ([!java|c]getIndication() == 'R'[/!][!scala]readMessage() == \"R\"[/!]) "
"{\n"
"  right();\n"
"  [!c]stepForward()[/!][!java|scala]forward()[/!];\n"
"} else if ([!java|c]getIndication() == 'L'[/!][!scala]readMessage() == "
"\"L\"[/!]) {\n"
"  left();\n"
"  [!c]stepForward()[/!][!java|scala]forward()[/!];\n"
"} else if ([!java|c]getIndication() == 'I'[/!][!scala]readMessage() == "
"\"I\"[/!]) {\n"
"  back();\n"
"  [!c]stepForward()[/!][!java|scala]forward()[/!];\n"
"<span class=\"comment\">/* other else if */</span>\n"
"} else {\n"
"  finished = [!c]1[/!][!java|scala]true[/!];\n"
"}\n"
msgstr ""
"if ([!java|c]getIndicação() == 'R'[/!][!scala]lerMensagem() == \"R\"[/!]) {\n"
"  right();\n"
"  [!c]stepForward()[/!][!java|scala]forward()[/!];\n"
"} else if ([!java|c]getIndicação() == 'L'[/!][!scala]lerMensagem() == \"L\""
"[/!]) {\n"
"  left();\n"
"  [!c]stepForward()[/!][!java|scala]forward()[/!];\n"
"} else if ([!java|c]getIndicação() == 'I'[/!][!scala]lerMensagem() == \"I\""
"[/!]) {\n"
"  back();\n"
"  [!c]stepForward()[/!][!java|scala]forward()[/!];\n"
"<span class=\"comment\">/* other else if */</span>\n"
"} else {\n"
"  terminou = [!c]1[/!][!java|scala]true[/!];\n"
"}\n"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:31
msgid ""
"When you review this code, it may not be clear at the first glance that it "
"is simply a choice with 4 branches depending on the value of "
"[!java|c]getIndication()[/!][!scala]readMessage()[/!].  To improve this, we "
"will use a [!java|c]<code>switch</code> construct, which Java syntax is the "
"following:[/!] [!scala] pattern matching, which is a very powerful construct "
"that greatly generalizes the <code>if</code>. It is arguably one of the "
"major advantages of Scala when compared to languages such as Java or "
"python.  It is not new either, as other languages such as OCaml or Haskell "
"offer this feature since long, but still.  It's really cool![/!]"
msgstr ""
"Quando revisa este código, não fica claro à primeira vista que é "
"simplesmente a escolha entre quatro ramos a depender do valor de "
"[!java|c]getIndicação()[/!][!scala]lerMensagem()[/!]. Para melhorar ele, "
"vamos usar uma construção [!java|c]<code>switch</code>, que na sintaxe de "
"Java é o seguinte:[/!] [!scala] de busca de padrões, que é bastante poderosa "
"e generaliza muito o <code>if</code>. É com certeza uma das maiores "
"vantagens de Scala quando comparada com linguagens como Java ou python. E "
"nem é tão nova assim, já que outras linguagens como OCaml e Haskell já tem "
"esta funcionalidade há muito tempo. É bem fixe![/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR2.html:40
msgid "[/!] [!java|c]"
msgstr "[/!] [!java|c]"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:44
#, no-wrap
msgid ""
"switch (<b>expression</b>) {\n"
"  case <b>firstValue</b>: \n"
"    <b>whatToDoIfExpressionEqualsFirstValue();</b>\n"
"    break;\n"
"  case <b>secondValue</b>: \n"
"    <b>whatToDoIfExpressionEqualsSecondValue();</b>\n"
"    break;\n"
"  case <b>thirdValue</b>: \n"
"    <b>whatToDoIfExpressionEqualsThirdValue();</b>\n"
"    break;\n"
"    /* as much similar cases as you want */\n"
"  default: \n"
"    <b>whatToDoIfExpressionDoesNotEqualsAnySeenValues();</b>\n"
"}"
msgstr ""
"switch (<b>expression</b>) {\n"
"  case <b>firstValue</b>: \n"
"    <b>whatToDoIfExpressionEqualsFirstValue();</b>\n"
"    break;\n"
"  case <b>secondValue</b>: \n"
"    <b>whatToDoIfExpressionEqualsSecondValue();</b>\n"
"    break;\n"
"  case <b>thirdValue</b>: \n"
"    <b>whatToDoIfExpressionEqualsThirdValue();</b>\n"
"    break;\n"
"    /* as much similar cases as you want */\n"
"  default: \n"
"    <b>whatToDoIfExpressionDoesNotEqualsAnySeenValues();</b>\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:59
msgid ""
"Observe that each branch of a <tt>switch</tt> must be ended by a "
"<code>break</code>. If you forget this, the machine keeps going and execute "
"the next branch in the list after the branch it jumped to. There is even "
"some <b>rare</b> cases where this behavior reveals helpful."
msgstr ""
"Observe que cada ramo de um <tt>switch</tt> deve terminar com um "
"<code>break</code>. se esquecer dele, a máquina continua e executa o próximo "
"ramo na lista depois do ramo para o qual pulou. Existem na verdade uns "
"<b>raros</b> casos onde este comportamento é útil."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:64
msgid ""
"It is then possible to rewrite previous BDR code in a cleaner way using the "
"<tt>switch</tt> construct:"
msgstr ""
"É então possível reescrever o código do BDR anterior numa forma mais clara a "
"usar a construção <tt>switch</tt>:"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:67
#, no-wrap
msgid ""
"switch (getIndication()) {\n"
"  case 'R':\n"
"    right(); \n"
"    [!c]stepForward()[/!][!java]forward()[/!]; \n"
"    break;\n"
"  case 'L':\n"
"    left();\n"
"    [!c]stepForward()[/!][!java]forward()[/!]; \n"
"    break;\n"
"  case 'I':\n"
"    back();\n"
"    [!c]stepForward()[/!][!java]forward()[/!];\n"
"    break;\n"
"  default: \n"
"    return;\n"
"}"
msgstr ""
"switch (getIndicação()) {\n"
"  case 'R':\n"
"    right(); \n"
"    [!c]stepForward()[/!][!java]forward()[/!]; \n"
"    break;\n"
"  case 'L':\n"
"    left();\n"
"    [!c]stepForward()[/!][!java]forward()[/!]; \n"
"    break;\n"
"  case 'I':\n"
"    back();\n"
"    [!c]stepForward()[/!][!java]forward()[/!];\n"
"    break;\n"
"  default: \n"
"    return;\n"
"}"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:85
#, no-wrap
msgid ""
"<i>expression</i> <b>match</b> {\n"
"  <b>case</b> <i>possible value</i> <b>=></b> instructions\n"
"  <b>case</b> <i>other value</i>     <b>=></b> other instructions\n"
"  <b>case</b> <i>another value</i> <b>=></b> yet another instructions\n"
"  <b>case _                 =></b> default instructions\n"
"}\n"
msgstr ""
"<i>expressão</i> <b>match</b> {\n"
"  <b>case</b> <i>um valor possível</i> <b>=></b> instruções\n"
"  <b>case</b> <i>um outro valor</i>     <b>=></b> outras instruções\n"
"  <b>case</b> <i>mais outro valor</i> <b>=></b> e outras instruções\n"
"  <b>case _                 =></b> instruções padrão\n"
"}\n"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:92
msgid ""
"The expression provided before the keyword <code>match</code>, and then the "
"branches are evaluated one after the other until we find one which value "
"provided between <code>case</code> and <code>=&gt</code> is equal to the "
"expression's value.  The <code>_</code> symbol acts as a wildcard, so the "
"<code>_</code> branch <i>always</i> matches.  Here is an example where a "
"variable <code>name</code> is matched."
msgstr ""
"A espressão fornecida antes da palavra-chave <code>match</code> e os ramos "
"seguintes são avaliados um após o outro até encontrarmos um cujo valor "
"fornecido entre <code>case</code> e <code>=&gt</code> seja igual ao valor da "
"expressão. O símbolo <code>_</code> age como um coringa, logo o ramo "
"<code>_</code> <i>sempre</i> casa. Aqui está um exemplo de onde uma variável "
"<code>name</code> casa."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:97
#, no-wrap
msgid ""
"name match {\n"
"  case \"Martin\" => println(\"Hello Martin, how are you?\")\n"
"  case \"Gerald\" => println(\"Hey Gerald! How are you doing?\")\n"
"  case _            => println(\"Welcome stranger.\")\n"
"}"
msgstr ""
"name match {\n"
"  case \"Martin\" => println(\"Oi Martin, como vai?\")\n"
"  case \"Gerald\" => println(\"Oi Gerald! como está?\")\n"
"  case _            => println(\"Olá estranho.\")\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:103
msgid ""
"It is possible to have more than one instruction per branch, and merge "
"branches when the values are separated by a | symbol."
msgstr ""
"é possível ter mais que uma instrução por ramo e mesclar ramos quando os "
"valores são separados por um símbolo | ."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:105
#, no-wrap
msgid ""
"name match {\n"
"  case \"Martin\" | \"Gerald\" => println(\"Hello \"+name+\", how are "
"you?\"); openTheDoor()\n"
"  case _                            => println(\"Hello stranger. Please do "
"not pass.\"); lockTheDoor()\n"
"}"
msgstr ""
"name match {\n"
"  case \"Martin\" | \"Gerald\" => println(\"Oi \"+name+\", como está?\"); "
"openTheDoor()\n"
"  case _                            => println(\"Oi estranho. Favor não "
"passar.\"); lockTheDoor()\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:110
msgid ""
"You can even add guards to your branches. These are extra conditions that "
"must be respected for the branch to get applied. This is handy if you want "
"match on value ranges, as follows."
msgstr ""
"Sempre pode adicionar guardas aos seus ramos. São condições adicionais que "
"devem ser respeitadas para que o ramo seja aplicado. São úteis se quiser "
"corresponder com intervalos de valores, como a seguir."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:112
#, no-wrap
msgid ""
"age match {\n"
"  case i if i&lt;10 => println(\"Hey kid!\")\n"
"  case i if i&lt;20 => println(\"Hey dude!\")\n"
"  case i if i&lt;30 => println(\"Hello young man\")\n"
"  case _           => println(\"Hello Sir\")\n"
"}"
msgstr ""
"age match {\n"
"  case i if i&lt;10 => println(\"Oi menino!\")\n"
"  case i if i&lt;20 => println(\"Oi cara!\")\n"
"  case i if i&lt;30 => println(\"Oi, meu caro\")\n"
"  case _           => println(\"Oi senhor\")\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:118
msgid ""
"Note that there is no need to check whether the value is higher than 10 on "
"the second line because the first matching branch is used. So, if the second "
"branch gets evaluated, then the first one did not match."
msgstr ""
"Observe que não há necessidade de verificar se o valor é maior que 10 na "
"segunda linha por que o primeiro ramo \"foi verificado\". Então, se o "
"segundo ramo está a ser verificado, o primeiro não aprovou."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:121
msgid "Finally, it is possible also to match several variables in one shoot!"
msgstr "Finalmente, é possível também aprovar várias variáveis de uma vez!"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR2.html:122
#, no-wrap
msgid ""
"(x,y) match {\n"
" case (0,0) => println(\"that's the origin\")\n"
" case (_,0) => println(\"On the ordinate\")\n"
" case (0,_) => println(\"On the abscissa\")\n"
" case (_,_) => println(\"Some random point\")\n"
"}"
msgstr ""
"(x,y) match {\n"
" case (0,0) => println(\"Esta é a origem\")\n"
" case (_,0) => println(\"nas ordenadas\")\n"
" case (0,_) => println(\"nas abscissas\")\n"
" case (_,_) => println(\"algum ponto qualquer\")\n"
"}"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:129
msgid ""
"I told you that scala's pattern matching is very powerful! I actually love "
"this feature!"
msgstr ""
"Disse que reconhecimentod e padrões em scala é muito poderoso! Adoro esta "
"funcionalidade!"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:133
msgid ""
"[!java|scala|c]Apply the improvement we just saw to rewrite your buggle code "
"with the following dance steps. [/!] [!python]Let's teach a new dance step "
"to the buggles. It is slightly more complex but actually better "
"looking. Beside of that, that's the same old story.[/!] Note that we can now "
"move up to 6 cells in one dance step."
msgstr ""
"[!java|scala|c]\"Aplique\" a melhoria que acabamos de ver para reescrever o "
"seu código do buggle com os seguintes passos de dança. [/!] [!python]Vamos "
"ensinar um novo passo de dança aos buggles. É um pouco mais complexo mas na "
"verdade vai ficar mais legal. Apesar disto, é a mesma história de sempre.[/!]"
" Observe que nósagora vamos subir seis células num passo de dança."

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:144
msgid "Turn back and move one step forward"
msgstr "Vire e dê um passo para frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:149
msgid "[!java|c]'D'[/!][!scala|python]\"D\"[/!]"
msgstr "[!java|c]'D'[/!][!scala|python]\"D\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:149
msgid "Move four cells forward"
msgstr "Mova quantro passos para frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:150
msgid "[!java|c]'E'[/!][!scala|python]\"E\"[/!]"
msgstr "[!java|c]'E'[/!][!scala|python]\"E\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:150
msgid "Move five cells forward"
msgstr "Mova cinco passos para frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:151
msgid "[!java|c]'F'[/!][!scala|python]\"F\"[/!]"
msgstr "[!java|c]'F'[/!][!scala|python]\"F\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:151
msgid "Move six cells forward"
msgstr "Mova seis passos para frente"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:156
msgid "[!java|c]'W'[/!][!scala|python]\"W\"[/!]"
msgstr "[!java|c]'W'[/!][!scala|python]\"W\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:156
msgid "Move four cells backward"
msgstr "Mova quatro passos para trás"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:157
msgid "[!java|c]'V'[/!][!scala|python]\"V\"[/!]"
msgstr "[!java|c]'V'[/!][!scala|python]\"V\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:157
msgid "Move five cells backward"
msgstr "Mova cinco passos para trás"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:158
msgid "[!java|c]'U'[/!][!scala|python]\"U\"[/!]"
msgstr "[!java|c]'U'[/!][!scala|python]\"U\"[/!]"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:158
msgid "Move six cells backward"
msgstr "Mova seis passos para trás"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:163
msgid "When you program works again, proceed to next exercise."
msgstr "Quando seu programa funcionar de novo, vá ao próximo exercício."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/Snake.html:4
msgid ""
"We will now teach the buggle to explore its world. Its initial position is "
"the bottom left corner, and it should visit any cells up to the top "
"(coloring the ground on its path. The main loop of your code is something "
"like:"
msgstr ""
"Agora vamos ensinar o buggle a explorar o mundo dele. A posição inicial dele "
"é o canto inferior esquerdo e deve visitar todas as células até o topo (a "
"colorir o chão onde passa. O loop principal do seu código é algo assim:"

#. type: Content of: <pre>
#: src/lessons/welcome/traversal/Snake.html:8
#, no-wrap
msgid ""
" move brush down\n"
" while we did not reach the final position\n"
"   move like a snake\n"
msgstr ""
" abaixe o pincel\n"
" enquanto não chegar na posição final\n"
"   se mova como uma cobra\n"

#. type: Content of: <p>
#: src/lessons/welcome/traversal/Snake.html:13
msgid ""
"We thus have to write two specific methods: The first one returns a boolean "
"indicating whether we are on a final position while the second moves one "
"snake step forward."
msgstr ""
"Então temos que escrever dois métodos específicos: o primeiro retorna um "
"booleano a indicar se estamos numa posição final enquanto o segundo um "
"\"snake step\" para frente."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/Snake.html:17
msgid "We reached the final position if and only if both conditions are true:"
msgstr ""
"Chegamos na posição final se e apenas se ambas as condições são verdadeiras:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/traversal/Snake.html:19
msgid "We are facing a wall"
msgstr "Estamos de frente para uma parede"

#. type: Content of: <ul><li>
#: src/lessons/welcome/traversal/Snake.html:20
msgid ""
"There is a wall on the north of the buggle. So, if the buggle is facing "
"east, you should check whether there is a wall on the left, and if the "
"buggle is facing west, you should check on the right side."
msgstr ""
"Existe uma parede no norte do buggle. Então, se o buggle está a olhar para o "
"leste, deve verificar se existe uma parede à esquerda e se o buggle está a "
"olhar para o oeste, deve verificar do lado direito."

#. type: Content of: <ul><li>
#: src/lessons/welcome/traversal/Snake.html:23
msgid ""
"We can get the current heading of the buggle using the "
"<code>getDirection()</code>, and we know whether it looks east using "
"<code>getDirection() == [!scala|python|java]Direction.[/!]EAST</code> (WEST "
"for west)."
msgstr ""
"Podemos obter a direção atual do buggle a usar o <code>getDirection()</code> "
"e sabemos se ele está a apontar para o leste a usar <code>getDirection() == "
"[!scala|python|java]Direção.[/!]LESTE</code> (OESTE para oeste)."

#. type: Content of: <ul><li>
#: src/lessons/welcome/traversal/Snake.html:26
msgid ""
"To check, nothing magical: you have to turn the buggle and check whether it "
"is facing a wall afterward."
msgstr ""
"Para verificar, não tem mágica: tem que virar o buggle e verificar em "
"seguida se está a olhar para uma parede."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/Snake.html:29
msgid ""
"Then, a snake step can be achieved by moving one step forward if we are not "
"facing a wall, and moving to the upper line else (i.e., if you look to the "
"west facing a wall, you have to turn right, forward and turn right)."
msgstr ""
"Então, um passo de cobra pode ser conseguido a mover um passo para a frente "
"se não estivermos de cara para a parede e a mover para a linha acima caso "
"contrário (p.ex., se olha para o oeste e está de cara para uma parede, tem "
"que virar a direita, andar e virar a direita)."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/Snake.html:33
msgid ""
"Hint: the main loop of your code must continue while the testing function "
"returns false. There is two ways of writing it:"
msgstr ""
"Dica: o loop principal do seu código deve continuar enquanto a função de "
"teste retorna false. Existem duas formas de fazer isto:"

#. type: Content of: <pre>
#: src/lessons/welcome/traversal/Snake.html:35
#, no-wrap
msgid ""
"while (testingFunction() == [!c]0) {[/!][!java|scala]false) "
"{[/!][!python]False):[/!]"
msgstr ""
"while (testingFunction() == [!c]0) {[/!][!java|scala]false) "
"{[/!][!python]False):[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/traversal/Snake.html:36
msgid ""
"[!python]You may prefer to write it as:[/!] [!java|scala|c]Since the "
"exclamation mark (!) denotes the boolean negation in [!thelang], you may "
"write it as:[/!]"
msgstr ""
"[!python]Pode preferir escrever como:[/!] [!java|scala|c]Já que a marca de "
"exclamação (!) denota a negação booleana em [!thelang], pode escrever "
"como:[/!]"

#. type: Content of: <pre>
#: src/lessons/welcome/traversal/Snake.html:38
#, no-wrap
msgid ""
"while ([!java|scala|c]![/!][!python]not "
"[/!]testingFunction())[!java|scala|c] {[/!][!python]:[/!]"
msgstr ""
"while ([!java|scala|c]![/!][!python]not [/!]testingFunction())[!java|scala|c]"
" {[/!][!python]:[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:4
msgid ""
"The goal of this serie of exercises is to let the buggle traverse its "
"world. It must number the cells it walks on to show its traversal order."
msgstr ""
"O objetivo desta série de exercícios é fazer o buggle percorrer o mundo "
"dele. Deve numerar as células por onde passa para mostrar a ordem do caminho."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:7
msgid "The main loop of your code should be something like:"
msgstr "O loop principal do seu código deve ser algo como:"

#. type: Content of: <pre>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:9
#, no-wrap
msgid ""
" while we are not on the final position\n"
"   go to the next position\n"
"   label the cell with its number\n"
msgstr ""
" enquanto não estiver na posição final\n"
"   vá à próxima posição\n"
"   rotule a célula com um número\n"

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:14
msgid ""
"In contrary to the exercises we saw so far, we won't use the "
"<code>forward()</code>, <code>backward()</code> and similar "
"methods. Instead, we will compute the coordinate of the next buggle position "
"and use the <code>setPos(x, y)</code> method to <i>teleport</i> the buggle "
"directly to this position. For example, <code>setPos(3, 5)</code> teleports "
"the buggle to the cell where x=3 and y=5."
msgstr ""
"Ao contrário dos exercícios que vimos até agora, não vamos usar os métodos "
"<code>forward()</code>, <code>backward()</code> e similares. Ao invés disto, "
"vamos calcular as coordenadas da próxima posição de buggle e usar o método "
"<code>setPos(x, y)</code> para <i>teletransportar</i> o buggle diretamente "
"para esta posição. Por exemplo, <code>setPos(3, 5)</code> teletransporta o "
"buggle à célula onde x=3 e y=5."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:21
msgid ""
"Your first task is thus to write a boolean function indicating whether the "
"buggle reached the final position or not, ie if it reached the bottom right "
"corner of the world. For this, you can use <code>getWorldWidth()</code> and "
"<code>getWorldHeight()</code> which return respectively the world's width "
"and height. Your test is about comparing the buggle's current position (that "
"you can access with <code>getX()</code> and <code>getY()</code>) to the "
"world dimensions."
msgstr ""
"A sua primeira tarefa é escrever uma função booleana a indicar se o buggle "
"alcançou a posição final ou não, ou seja, se alcançou o canto inferior "
"direito do mundo. Para isto, pode usar <code>getWorldWidth()</code> e "
"<code>getWorldHeight()</code> que retornam respetivamente a largura e altura "
"do mundo. O seu teste deve comparar a posição atual do buggle (que pode "
"acessar com <code>getX()</code> e <code>getY()</code>) com as dimensões do "
"mundo."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:28
msgid ""
"Beware, the first line and column are numbered 0 and not 1, and the point "
"(0,0)  is on the top left corner. This may seem surprising, but it is very "
"often so in Computer Science."
msgstr ""
"Cuidado, a primeira linha e coluna são numeradas com 0 e não com 1 e o ponto "
"(0,0) fica no canto superior esquerdo. Isto pode parecer estranho, mas é bem "
"comum em ciência da computação."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:32
msgid ""
"Then, you have to write the code to reach the next position. In this "
"exercise, you have to traverse the world row after row. So, if you are at "
"the bottom of a row, you have to move to the top of next row. Else, you have "
"to move to the cell below."
msgstr ""
"Então, tem que escrever o código para alcançar a próxima posição. Neste "
"exercício, tem que percorrer o mundo linha após linha. Logo, se está no "
"fundo de uma linha, tem que mover ao topo da próxima, caso contrário tem que "
"mover à célula abaixo."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:37
msgid ""
"At this point, you can launch your program to check that the buggle "
"correctly traverse the world in the expected order, and that it stops when "
"it has to. Use the <b>stop</b> button if the buggle does not stop correctly."
msgstr ""
"Neste ponto, pode lançar o seu programa para verificar se o buggle percorre "
"corretamente o mundo na ordem esperada e que pára quando tem que parar. Use "
"oo botão <b>stop</b> se o buggle não parar corretamente."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:41
msgid ""
"It is now time to write down the cell numbers. For that, you will need a "
"counter initialiser to zero at the beginning of your code, and incremented "
"by one at each step (for example with <code>counter += 1;</code>).  Then, "
"you have to use <code>writeMessage()</code> to write the value on the "
"ground."
msgstr ""
"Agora é hora de escrever os números das células. Para isto, vai precisar de "
"um contador a iniciar em zero no começo do seu código e incrementar de um em "
"cada passo (por exemplo com <code>counter += 1;</code>).  Então, terá que "
"usar <code>writeMessage()</code> para escrever o valor no chão."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:47
msgid ""
"You probably need to write the first [!java|scala|c]or last [/!]value out of "
"the main loop [!java|scala|c], depending on whether you prefer to use a "
"<code>while</code> or a <code>do/while</code> one[/!]."
msgstr ""
"Provavelmente vai precisar escrever o primeiro [!java|scala|c]ou último [/!]"
"valor fora do loop principal [!java|scala|c], a depender se prefere usar um "
"<code>while</code> ou um <code>do/while</code>[/!]."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/traversal/line/TraversalByLine.html:4
msgid ""
"You once again have to let the buggle traverse the world numbering the cells "
"on its way, but the goal of this exercise is to write a line traversal. Most "
"of the code you wrote for previous exercise remains usable here. Simply, the "
"method computing the coordinates of the next buggle position has to be "
"correctly updated: if you are at the right of a line, you have to go to the "
"beginning of the next one. If not, you have to go to the right cell."
msgstr ""
"Mais uma vez terá que deixar o buggle percorrer o mundo a numerar as células "
"no caminho, mas o objetivo do exercício é escrever uma linha transversal. A "
"maioria do código que escreveu para exercícios anteriores continua útil "
"aqui. Simplesmente, o método a calcular as coordenadas da próxima posição do "
"buggle tem que ser atualizado corretamente: se estiver a direita de uma "
"linha, terá que ir ao começo da próxima. Senão, terá que ir à célula da "
"direita."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:4
msgid ""
"This time, you are asked to traverse the world one diagonal after the "
"other. Have a look at the objective world for more details on the requested "
"traversal order."
msgstr ""
"Agora é para atravessar o mundo uma diagonal depois da outra. Dê uma olhada "
"no mundo objetivo para maiores detalhes quanto à ordem a percorrer pedida."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:8
msgid ""
"You may find useful to use an integer variable <code>diag</code> storing the "
"number of the diagonal you are traversing."
msgstr ""
"Pode ser útil usar uma variável inteira <code>diag</code> a guardar o número "
"da diagonal que está a atravessar."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/traversal/zigzag/TraversalZigZag.html:4
msgid ""
"This time, you have to zigzag on the way up. Have a look at the objective "
"world for more details on the requested traversal order."
msgstr ""
"Desta vez, vai ter que fazer um zigzag no caminho para cima. Dê uma olhada "
"no mundo objetivo para mais detalhes da ordem a percorrer pedida."

#. type: Content of: <h2>
#: src/lessons/welcome/summative/Moria.html:2
msgid "Lost in the Moria"
msgstr "Perdido em Moria"

#. type: Content of: <p>
#: src/lessons/welcome/summative/Moria.html:4
msgid ""
"You buggles got stuck in the mines of Moria! Some rocks are blocking the "
"exit, and you will have to clear your way to the exit. Well of course these "
"are only baggles and you could simply walk away, but it will be easier to "
"program the buggles so that they move those \"rocks\" than convincing them "
"to walk away without solving the problem. Dwarfs are sometimes really "
"stubborns..."
msgstr ""
"Os seus buggles ficaram presos nas minas de Moria! Algumas pedras estão a "
"bloquear a saída e terá que limpar o seu caminho para a saída. Bem, é claro "
"que são apenas baggles e pode simplesmente sair a andar, mas será mais fácil "
"programar os buggles de forma que mova estas \"pedras\" do que convencer-los "
"que ele pode sair a andar facilmente sem resolver o problema. Anões podem "
"ser bem teimosos..."

#. type: Content of: <p>
#: src/lessons/welcome/summative/Moria.html:11
msgid ""
"So, you have to find the first baggle blocking the exit (simply walk to the "
"east until you are over a baggle), take it and move it back to the other "
"side of the tunnel (walk to the west while you are not over a baggle, and "
"then move back one step to the east and drop your baggle), and iterate until "
"you find the exit (that is, the wall to the east side). Afterward, move out "
"as in the objective world. That's only a few more steps away."
msgstr ""
"Bem, tem que encontrar o primeiro baggle a bloquear a saída (simplemente "
"ande para o leste até que esteja sobre um baggle), leve-o e mova para o "
"outro lado do túnel (ande para o oeste enquanto ainda não estiver sobre um "
"baggle e depois mova-se de volta um passo para o leste e solte o seu baggle) "
"e repita até encontrar a saída (ou seja, a parede com o muro para o lado "
"leste). Depois disto, mova-se para fora como no mundo objetivo. São só mais "
"uns passos."

#. type: Content of: <p>
#: src/lessons/welcome/summative/Moria.html:18
msgid ""
"To make things worse, you have to write a program that works for every "
"buggle, even if writing a specific program for each of them would be "
"easier. It seems that using <code>while</code> loops is the only solution to "
"move the buggles correctly."
msgstr ""
"Para piorar ainda mais as coisas, tem que escrever um programa que funcione "
"para qualquer buggle, mesmo se escrever um programa específico para cada um "
"deles for mais fácil. Parece que usar loops <code>while</code> é a única "
"solução para mover os buggles corretamente."

#. type: Content of: <p>
#: src/lessons/welcome/summative/Moria.html:23
msgid ""
"Once you manage to escape this trap, you can move forward to the next "
"exercise.  This exercise is a bit more complex, so you can also leave it for "
"now and come back later if you don't get it right now."
msgstr ""
"Quando conseguir escapar desta armadilha, poderá avançar para o próximo "
"exercício.  Este exercício é um pouco mais complexo, então também pode "
"esperar e voltar mais tarde se não o conseguir agora mesmo."

#. type: Content of: <h3>
#: src/lessons/turmites/Main.html:2 src/lessons/turmites/short_desc.html:2
msgid "The turmites"
msgstr "Os turmites"

#. type: Content of: <p>
#: src/lessons/turmites/Main.html:4
msgid ""
"This set of activities lets you play with Langton's ants, that are 2D turing "
"machines. They constitute very simple application problems, achievable by "
"beginners, and open the door to an amazing world."
msgstr ""
"Este conjunto de atividades é para brincar com formigas de Langton, que são "
"máquinas de Turing 2D. Elas constituem problemas bem simples, bons para "
"iniciantes e abrem as portas para um mundo fantástico."

#. type: Content of: <p>
#: src/lessons/turmites/Main.html:8
msgid ""
"This mechanism were invented in 1986 by Chris Langton, and later generalized "
"in several ways (as we shall see in the next exercises). It was proven that "
"Turmites and Turing machines are of equal power: An ant's trajectory can be "
"used to compute any boolean circuit, and thus that an ant is capable of "
"universal computation. Put simply, any possible computation can be achieved "
"using a turmite as a computing device. Yet another subject of fascination..."
msgstr ""
"Este mecanismo foi inventado em 1986 por Chris Langton e depois generalizado "
"em várias formas (como veremos nos próximos exercícios). Foi provado que "
"Turmites e máquinas de Turing têm o mesmo poder: Uma trajetória de formiga "
"pode ser usada para calcular qualquer circuito booleano e logo uma formiga é "
"capaz de qualquer cálculo universal. a resumir, qualquer cálculo possível "
"pode ser alcançado a usar uma turmite como aparelho computacional. Ainda "
"outro assunto fascinante..."

#. type: Content of: <p>
#: src/lessons/turmites/Main.html:14
msgid ""
"Multicolor Langton's ants were discovered in 1995 by Propp et Al. Another "
"funny fact is that the ants which name is a list of consecutive pair of "
"identical letters (LL and RR) produce symmetric patterns. This fact was even "
"formally proved."
msgstr ""
"formigas de Langton multicoloridas foram descobertas em 1995 por Propp et "
"Al. Outro fato divertido é que as formigas cujos nomes é uma lista de pares "
"consecutivos de letras idênticas (LL e RR) produzem padrões simétricos. Este "
"fato foi até mesmo provado formalmente."

#. type: Content of: <p>
#: src/lessons/turmites/Main.html:19
msgid ""
"Check the corresponding wikipedia web page, of which this exercise is "
"inspired, for further details."
msgstr ""
"Verifique a página da wikipédia correspondente, na qual este exercício é "
"inspirado, para maiores detalhes."

#. type: Content of: <h3>
#: src/lessons/turmites/Main.html:22 src/lessons/sort/basic/Main.html:15
#: src/lessons/sort/dutchflag/Main.html:9 src/lessons/sort/pancake/Main.html:30
#: src/lessons/sort/baseball/Main.html:28 src/lessons/turtleart/Main.html:12
msgid "What can I do to improve this PLM universe?"
msgstr "O que posso fazer para melhorar este universo do PLM?"

#. type: Content of: <p>
#: src/lessons/turmites/Main.html:24 src/lessons/sort/basic/Main.html:17
#: src/lessons/sort/dutchflag/Main.html:11
#: src/lessons/sort/pancake/Main.html:32 src/lessons/sort/baseball/Main.html:30
#: src/lessons/turtleart/Main.html:14 src/lessons/recursion/cons/Main.html:7
msgid ""
"As usual, there are several things that could be done in the code of this "
"universe to improve it:"
msgstr ""
"Como sempre, existem várias coisas que podem ser feitas no código deste "
"universo para melhorá-lo:"

#. type: Content of: <ul><li>
#: src/lessons/turmites/Main.html:26
msgid ""
"We are probably missing some good exercises. The turmite creator exercise is "
"a bit harsh: we could introduce the patterns in a more friendly manner."
msgstr ""
"Alguns bons exercícios estão provavelmente a faltar. O exercício de criador "
"de turmite é um pouco pé-duro: podemos introduzir os padrões de uma forma "
"mais amigável."

#. type: Content of: <ul><li>
#: src/lessons/turmites/Main.html:28
msgid "We may want to write an exercise on the busy beaver, maybe?"
msgstr "Quem sabe não escrevemos um exercício sobre os \"busy beavers\"?"

#. type: Content of: <p>
#: src/lessons/turmites/short_desc.html:3
msgid "Discover the Langton's ants, that are 2D turing machines."
msgstr "Descubra as formigas de Langton, que são máquinas de Turing 2D."

#. type: Content of: <p>
#: src/lessons/turmites/short_desc.html:5
msgid ""
"These activities are very simple application problems, achievable by "
"beginners, and open the door to an amazing world."
msgstr ""
"Estas atividades são problemas bem simples, bons para iniciantes e abrema a "
"porta para um mundo fantástico."

#. type: Content of: <h2>
#: src/lessons/turmites/langton/Langton.html:2
msgid "Langton's ant"
msgstr "formiga de Langton"

#. type: Content of: <p>
#: src/lessons/turmites/langton/Langton.html:4
msgid ""
"In this exercise, you will turn your buggle into a <i>Langton's "
"ant</i>. These artificial little animals are very interesting because they "
"are given simple rules that depend only on their local environment, and "
"after a period of apparent chaotic behavior, a general pattern "
"<i>emerges</i>."
msgstr ""
"Neste exercício, vai transformar o seu buggle numa <i>formiga de Langton</"
"i>. Estes pequenos animais artificiais são bastante interessantes por que "
"eles recebem regras simples que dependem apenas do seu ambiente local e "
"depois de um período de aparente comportamento caótico, um modelo geral "
"<i>surge</i>."

#. type: Content of: <p>
#: src/lessons/turmites/langton/Langton.html:9
msgid ""
"The rules are absolutely trivial: to compute what the next step should be, "
"you should check the current color of the ground (using "
"<code>getGroundColor()</code>). If it's white, change it to black, turn "
"right and move forward by one cell. If the ground is currently black, change "
"it to white, turn left and move forward by one cell."
msgstr ""
"As regras são absolutamente triviais: para calcular qual o próximo passo, "
"verifique a cor atual do chão (a usar <code>getGroundColor()</code>). Se for "
"branco, mude para preto, vire à direita e mova uma célula. Se for preto mude "
"para branco, vire a esquerda e ande uma célula."

#. type: Content of: <p>
#: src/lessons/turmites/langton/Langton.html:15
msgid ""
"It's hard to come up with simpler rules isn't it? Well, let's go and code it "
"now. You have to complete the <code>step()</code> method, which encodes the "
"behavior of the ant at each step. You will probably use the "
"<code>getGroundColor()</code> method to retrieve the color of the cell on "
"which the ant is currently.  Colors of interest are simply named "
"<code>Color.black</code> and <code>Color.white</code>."
msgstr ""
"Difícil encontrar regras mais simples, não é? Bem, vamos em frente codificar "
"isto agora. Precisa completar o método <code>step()</code>, que codifica o "
"comportamento da formiga em cada passo. Vai provavelmente usar o método "
"<code>getGroundColor()</code> para recuperar a cor da célula na qual a "
"formiga está no momento. Cores úteis são nomeadas simplesmente de <code>Cor."
"preto</code> e <code>Cor.branco</code>."

#. type: Content of: <p>
#: src/lessons/turmites/langton/Langton.html:22
msgid ""
"To compare colors, you cannot use the equal signs (==), because these things "
"are not scalar values but objects. Instead, you need to write something like "
"the following:"
msgstr ""
"Para comparar cores, não pode usar o símbolo de igualdade (==), pois estas "
"coisas não são valores escalares, mas objetos. Ao invés disto, precisa "
"escrever algo como o seguinte:"

#. type: Content of: <pre>
#: src/lessons/turmites/langton/Langton.html:25
#, no-wrap
msgid ""
"Color c /* = some initialization */;\n"
"if (c.equals(Color.black)) {\n"
"  /* that's equal */\n"
"} else {\n"
"  /* that was not equal */\n"
"}\n"
msgstr ""
"Cor c /* = alguma inicialização */;\n"
"if (c.equals(Cor.preto)) {\n"
"  /* é igual */\n"
"} else {\n"
"  /* não é igual */\n"
"}\n"

#. type: Content of: <p>
#: src/lessons/turmites/langton/Langton.html:34
msgid ""
"Changing the ground color is not difficult, but a bit long: you have to "
"change the brush color of your buggle, set the brush down (to mark the "
"current cell -- with <code>brushDown()</code>), and set the brush back up "
"(with <code>brushUp()</code>) to avoid further issues when the buggle will "
"move. You are naturally free of organizing your code the way you want, but "
"you may want to write a <code>setGroundColor(color)</code> method to "
"factorize things a bit."
msgstr ""
"Mudar a cor do chão não é difícil, mas meio demorado: tem que mudar a cor do "
"pincel do seu buggle, baixar o pincel (para marcar a célula atual -- com "
"<code>brushDown()</code>) e levantar o pincel de novo (com "
"<code>brushUp()</code>) para evitar problemas quando o buggle se mexer. É, "
"naturalmente, livre para organizar o seu código da forma que quiser, mas "
"deve querer escrever um método <code>setGroundColor(color)</code> para "
"separar um pouco as coisas."

#. type: Content of: <p>
#: src/lessons/turmites/langton/Langton.html:41
msgid ""
"As you can see from the execution of this exercise, the interest in this "
"algorithm is that after about 10000 steps of relative chaotic behavior, the "
"ant start building a regular pattern. This emergence of a regular pattern "
"from the chaos is rather fascinating, isn't it? Move on to the next exercise "
"to see more of them."
msgstr ""
"Como pode ver da execução deste exercício, o interessante neste algoritmo é "
"que depois de uns 10000 passos de comportamento relativamente caótico, a "
"formiga começa a construir um modelo regular. O surgimento deste modelo "
"regular em meio ao caos é bastante fascinante, não acha? Mova para o próximo "
"exercício para ver mais disto."

#. type: Content of: <h2>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:2
msgid "Multicolor Langton's ant"
msgstr "formiga de Langton multicolorida"

#. type: Content of: <p>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:4
msgid ""
"There is several ways to extend the concept of Langton's ant. In this "
"exercise, we explore first one, using more than two colors. It remains very "
"similar to the base case: the behavior at each step still depends on the "
"ground color, but you have more than 2 possibilities. It allows to have more "
"than one kind of ant, depending on what you decide to do for each color. For "
"example, the ant LRL takes 3 colors. It turns left on the first color, right "
"on the second one and left on the third color. According to this definition, "
"the basic ant is a RL (since it turns right on white cells and left on black "
"ones)."
msgstr ""
"Existem várias formas de extender o conceito de formiga de Langton. Neste "
"exercício, vamos explorar a primeira, a usar mais que duas cores. Ela se "
"mantem muito similar ao caso base: o comportamento em cada passo ainda "
"depende da cor do chão, mas tem mais que duas possibilidades. Pode ter mais "
"que um tipo de formiga, a depender do que decide fazer para cada cor. Por "
"exemplo, a formiga LRL recebe 3 cores. Ela vira a esquerda na primiera cor, "
"a direita na segunda e a esquerda na terceira. De acordo com esta definição, "
"a formiga básica é uma RL (já que ela vira a direita em células brancas e a "
"esquerda em pretas)."

#. type: Content of: <p>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:13
msgid ""
"Some of these ants draw fascinating patterns (switch the world to see them): "
"LLRR build a symmetric figure resembling loosely to a ball, LRRRRRLLR draws "
"a square, LLRRRLRLRLLR draws a convoluted regular pattern after a period of "
"seemingly chaotic behavior, and RRLLLRLLLRRR seems to fill a hour glass..."
msgstr ""
"Algumas destas formigas desenham padrões fascinantes (alterne o mundo para "
"vê-los): LLRR constrói uma figura simétrica semelhante a uma bola, LRRRRRLLR "
"desenha um quadrado, LLRRRLRLRLLR desenha um padrão regular convolucionado "
"depois de um período de aparente caos e RRLLLRLLLRRR parece preencher uma "
"ampulheta..."

#. type: Content of: <p>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:18
msgid ""
"Changing your buggle into a generic Langton's ant is not very complicated, "
"although it is not completely trivial. As previously, you have to write a "
"<code>step</code> function. But this time, it receives two arrays as "
"parameters.  The first one defines the rules to follow depending on the "
"ground color while the second one gives the sequence of colors to use. For "
"example, the basic ant would have [!java]<code>{'R', 'L'}</code> and "
"<code>{Color.white, Color.black}</code>[/!] [!python]<code>['R', 'L']</code> "
"and <code>[Color.white, Color.black]</code>[/!] [!scala]<code>Array('R', "
"'L')</code> and <code>Array(Color.white, Color.black)</code>[/!] as "
"arguments."
msgstr ""
"Transformar o seu buggle numa formiga de Langton genérica não é muito "
"complicado, embora não seja totalmente trivial. Como anteriormente, tem que "
"escrever uma função <code>step</code>. Mas desta vez, ela recebe duas arrays "
"como parâmetros. A primeira define as regras para seguir a depender da cor "
"do chão enquanto a segunda dá a sequência de cores a usar. Por exemplo, a "
"formiga básica deve ter [!java]<code>{'R', 'L'}</code> e <code>{Cor.branco, "
"Cor.preto}</code>[/!] [!python]<code>['R', 'L']</code> e <code>[Cor.branco, "
"Cor.preto]</code>[/!] [!scala]<code>Array('R', 'L')</code> e <code>Array("
"Cor.branco, Cor.preto)</code>[/!] como argumentos."

#. type: Content of: <p>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:29
msgid "At each step, you thus have to apply the following pseudo-code:"
msgstr "Em cada passo, deve então ter que aplicar o seguinte pseudo-código:"

#. type: Content of: <ul><li>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:31
msgid "Find the position of the ground color in the color sequence;"
msgstr "Encontre a posição da cor do chão na sequência de cores;"

#. type: Content of: <ul><li>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:32
msgid ""
"Turn left or right depending on the content of the rule array at that "
"position;"
msgstr ""
"Vire a esquerda ou direita a depender do conteúdo da array de regras nesta "
"posição;"

#. type: Content of: <ul><li>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:33
msgid ""
"Mark the current ground with the next color in the sequence (the last color "
"being followed by the first one);"
msgstr ""
"Marque o chão com a próxima cor na sequência (a cor seguinte à última é a "
"primeira);"

#. type: Content of: <ul><li>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:34
msgid "Move forward by one step."
msgstr "ande um passo para frente."

#. type: Content of: <p>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:37
#: src/lessons/turmites/helloturmite/HelloTurmite.html:67
msgid "You now should have enough information to succeed."
msgstr "Agora tem informação o suficiente para conseguir."

#. type: Content of: <h2>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:2
msgid "Turmites"
msgstr "Turmites"

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:4
msgid ""
"This exercise explores a new way to extend the concept of Langton's "
"ant. Now, the behavior of the ant not only depends on the color on the "
"ground, but also on its internal state (represented by an integer "
"value). The idea of changing the ant into such an automata naturally comes "
"from the Turing machine concept. This explains the name of these new "
"animals, which is a portemanteau of <i>Turing</i> and <i>Termite</i> (if you "
"don't know what a Turing machine is, you should run to wikipedia, because it "
"is simply impossible to be a real computer scientist before that)."
msgstr ""
"Este exercício explora uma nova forma de extender o conceito de formiga de "
"Langton. Agora, o comportamento da formiga não depende apenas da cor no "
"chão, mas também do estado interno dela (representado por um valor inteiro). "
"A ideia de transformar a formiga num autômato vem naturalmente do conceito "
"de máquina de Turing. Isto explica o nome destes novos animais, que é um "
"amálgama de <i>Turing</i> e <i>Termite</i> (se não sabe o que uma máquina de "
"Turing é, vá à wikipédia, por que é impossível ser um cientista da "
"computação de verdade sem conhecê-la)."

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:13
msgid ""
"Once again, you just have to write the <code>step()</code> method, in charge "
"of doing one turmite's step. Once again, you should first find the rank of "
"the current's cell ground color in the color sequence. But this time, the "
"<code>rule</code> data depends both on the current color and the current "
"state.  <code>rule</code> actually contains 3 information in each situation: "
"the color to write, the move to do, and the next state value. For example, "
"[!java|python]rule[1][0][/!][!scala]rule(1)(0)[/!] contains the informations "
"to use when <code>state==1</code> and <code>color==0</code>.  In other "
"worlds, you can retrieve the information relative to your current situation "
"by using "
"<code>[!java|python]rule[state][currentColor][/!][!scala]rule(state)(currentColor)[/!]</code>."
msgstr ""
"Novamente, tem que simplesmente escrever o método <code>step()</code>, "
"encarregado de fazer o turmite dar um passo. Novamente, deve primeiro "
"encontrar o rank da cor do chão da célula atual na sequência de cores. Mas "
"agora, os dados de <code>rule</code> (regras) dependem tanto da cor atual "
"quanto do estado atual. A <code>rule</code> na verdade contém 3 informações "
"em cada situação: a cor que a escreve, o movimento a fazer e o valor do "
"próximo estado. Por exemplo, "
"[!java|python]rule[1][0][/!][!scala]rule(1)(0)[/!] contém as informações "
"para usar quando <code>state==1</code> e <code>color==0</code>. Em outros "
"mundos, pode recuperar a informação relativa à sua situação atual a usar <cod"
"e>[!java|python]rule[state][currentColor][/!][!scala]rule(state)(currentColor"
")[/!]</code>."

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:25
msgid ""
"Each such information set contains 3 values. The first one is the rank of "
"the color to write on the ground. The second is the move to do, with the "
"following notation: 0=stop, 1=noturn, 2=left, 4=u-turn, 8=right. Note that "
"if the command is stop, you shouldn't even move forward on that step (but "
"you shouldn't stop your program either: the next steps can do something else "
"in a future state). Finally, the third integer is the next "
"<code>state</code> value to go into after this iteration."
msgstr ""
"Cada um destes conjuntos de informações contém 3 valores. O primeiro é o "
"rank da cor para escrever no chão. O segundo é o movimento para fazer, com a "
"seguinte notação: 0=stop, 1=noturn, 2=left, 4=u-turn, 8=right. Observe que "
"se o comando é stop, não se pode mover nem para a frente neste passo (mas "
"também não pode parar o programa: os próximos passos podem fazer algo mais "
"num estado futuro). Finalmente, o terceiro inteiro é o próximo valor do "
"<code>state</code> a ir dentro da próxima iteração."

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:32
msgid ""
"Since these arbitrary notations are somehow difficult to remember, you "
"should define a set of constants that you should use instead of the direct "
"numerical values.  Their names could be NOTURN, LEFT, RIGHT and so on.  "
"[!scala]Just declare them using the keyword <code>val</code> instead of "
"<code>var</code>.  You should always use <code>val</code> instead of "
"<code>var</code> when possible anyway.[/!] [!java]The modifiers <code>final "
"static</code> before their type is the way to mark variables as constant in "
"Java.  You should write for example <code>static final int NOTURN=1;</code> "
"Sorry for the complexity of this notation. [/!] [!python]By convention, such "
"constant variables are written in upper case in python.  Technically, you "
"can still modify them, but that would be a very bad idea.[/!] You should "
"write them out of any method so that they are globally visible."
msgstr ""
"Uma vez que estas notações arbitrárias são de certa forma difíceis de "
"lembrar, deve definir um conjunto de constantes que deve usar no lugar dos "
"valores numéricos diretos. Os nomes deles podem ser NOTURN, LEFT, RIGHT etc. "
"[!scala]Simplesmente declare-as a usar keyword <code>val</code> no lugar de "
"<code>var</code>.  Deve sempre usar <code>val</code> no lugar de <code>var</"
"code> quando possível de qualquer forma.[/!] [!java]Os modificadores "
"<code>final static</code> antes do tipo dele é a forma de marcar variáveis "
"como constantes em Java. Deve escrever, por exemplo, <code>static final int "
"NOTURN=1;</code> Desculpe pela complesxidade desta notação. [/!] [!python]"
"Por convenção, tais variáveis constantes são escritas em maiúsculas no "
"python.  Tecnicamente, ainda pode modificá-las, mas isto é uma má ideia.[/!] "
"Deve escrevê-las fora de qualquer método para que elas se tornem visíveis "
"globalmente."

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:44
msgid ""
"Using such constants greatly help making the code easier to read. Compare "
"the next two code chunks:"
msgstr ""
"Usar tais constantes ajuda em muito a fazer o código mais legível. Compare "
"os dois blocos de código a seguir:"

#. type: Content of: <pre>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:46
#, no-wrap
msgid ""
"[!java]if (rule[state][currentColor][NEXT_MOVE] == LEFT) {[/!][!python]if "
"rule[state][currentColor][NEXT_MOVE] == LEFT:[/!][!scala]if "
"(rule(state)(currentColor)(NEXT_MOVE) == LEFT) {[/!]\n"
"    left()[!java];[/!]\n"
"[!java|scala]}[/!]"
msgstr ""
"[!java]if (rule[state][currentColor][NEXT_MOVE] == LEFT) {[/!][!python]if "
"rule[state][currentColor][NEXT_MOVE] == LEFT:[/!][!scala]if "
"(rule(state)(currentColor)(NEXT_MOVE) == LEFT) {[/!]\n"
"    left()[!java];[/!]\n"
"[!java|scala]}[/!]"

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:49
msgid "This is much more easier to read (although longer) than the following:"
msgstr ""
"Isto é muito mais fácil de se ler (embora seja mais longo) do que o seguinte:"

#. type: Content of: <pre>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:50
#, no-wrap
msgid ""
"[!java]if (rule[i][j][1] == 2) {[/!][!python]if rule[i][j][1] == "
"2:[/!][!scala]if (rule(i)(j)(1) == 2) {[/!]\n"
"    left()[!java];[/!]\n"
"[!java|scala]}[/!]"
msgstr ""
"[!java]if (rule[i][j][1] == 2) {[/!][!python]if rule[i][j][1] == "
"2:[/!][!scala]if (rule(i)(j)(1) == 2) {[/!]\n"
"    left()[!java];[/!]\n"
"[!java|scala]}[/!]"

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:54
msgid ""
"Finally, you probably want to write a <code>elif</code> branch for the "
"<code>STOP</code> condition too. Having a <code>else</code> branch "
"displaying an error message such as \"unknown case\" is a good practice: it "
"makes your assumptions about your code more explicit, and you will get an "
"error message if they fall short. When doing so, the next problem is that "
"you have nothing to do in the <code>STOP</code> case, but python do not "
"allows you to write empty <code>elif</code> branches. You should use the "
"<code>pass</code> instruction as a placeholder: it says python that you have "
"a branch here, and that it does not contain anything."
msgstr ""
"Finalmente, provavelmente vai escrever um ramo <code>elif</code> para a "
"condição <code>STOP</code> também. Ter um ramo <code>else</code> a mostrar "
"uma mensagem de erro tal como \"unknown case\" é uma boa prática: faz as "
"suas suposições sobre o seu código mais explícitas e tem uma mensagem de "
"erro se elas falharem. Quando fizer isto, o próximo problema vai ser que não "
"tem nada para fazer no caso do <code>STOP</code>, mas python não permite que "
"escreva ramos <code>elif</code> vazios. Deve usar a instrução <code>pass</"
"code> como substituto, que diz ao python que tem um ramo aqui e que não faz "
"nada."

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:63
msgid ""
"You should probably use a [!java]switch case[/!][!scala]pattern matching[/!] "
"construct to keep your code readable.  If you can't remember what it is, "
"check <a href=\"plm://lessons.welcome/bdr.BDR2\">this exercise</a>."
msgstr ""
"Provavelmente deve usar uma construção [!java]switch case[/!][!scala]pattern "
"matching[/!] para manter o seu código legível. Se não se lembra o que isto "
"é, veja <a href=\"plm://lessons.welcome/bdr.BDR2\">este exercício</a>."

#. type: Content of: <h2>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:69
msgid "Bibliographical notes"
msgstr "Notas bibliográficas"

#. type: Content of: <p>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:70
msgid ""
"According to wikipedia, turmites were invented independently by the end of "
"the eighties. It has been shown that turmites in general are exactly "
"equivalent in power to one-dimensional Turing machines with an infinite "
"tape, as either can simulate the other. This means that absolutely any "
"program that you can think of could theoretically be computed on this "
"device..."
msgstr ""
"De acordo com a wikipédia, os turmites foram inventados independentemente no "
"final dos anos oitenta. Foi provado que turmites em geral são exatamente "
"equivalentes em capacidade a máquinas de turing uni-dimensionais com uma "
"fita infinita, pois um pode simular o outro. Isto significa que qualquer "
"programa que possa conceber pode teoricamente ser executado neste aparelho..."

#. type: Content of: <h2>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:2
msgid "Creating Turmites"
msgstr "Criar Turmites"

#. type: Content of: <p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:4
msgid ""
"This exercise allows you to build your own turmites. To pass the exercise, "
"you should simply write a <code>init()</code> method which initializes the "
"<code>rule</code> to use the following transitions table (from wikipedia), "
"set the buggle initial position at (8;33), and ask for 8342 steps."
msgstr ""
"Este exercício permite que construa os seus próprios turmites. Para passar "
"neste exercício, deve simplesmente escrever um método <code>init()</code> "
"que inicializa a <code>rule</code> para usar a seguintes tabela de "
"transições (da wikipédia), configure a posição inicial em (8;33) e peça por "
"8342 passos."

#. type: Content of: <table><tr><th>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:11
msgid "Current color"
msgstr "Cor atual"

#. type: Content of: <table><tr><td>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:14
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:29
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:32
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:40
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:42
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:43
msgid "0"
msgstr "0"

#. type: Content of: <table><tr><td>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:15
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:30
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:33
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:35
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:38
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:45
msgid "1"
msgstr "1"

#. type: Content of: <table><tr><th>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:19
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:22
msgid "Write color"
msgstr "Escrever cor"

#. type: Content of: <table><tr><th>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:20
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:23
msgid "Turn"
msgstr "Turn"

#. type: Content of: <table><tr><th>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:21
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:24
msgid "Next state"
msgstr "Próximo estado"

#. type: Content of: <table><tr><th>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:27
msgid "Current state"
msgstr "Estado atual"

#. type: Content of: <table><tr><td>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:31
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:34
msgid "R"
msgstr "R"

#. type: Content of: <table><tr><td>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:41
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:44
msgid "N"
msgstr "N"

#. type: Content of: <p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:49
msgid ""
"where the direction to turn is one of <b>L</b> (90° left), <b>R</b> (90° "
"right), <b>N</b> (no turn) and <b>U</b> (180° U-turn)."
msgstr ""
"Onde a direção para virar é <b>L</b> (90° à esquerda), <b>R</b> (90° à "
"direita), <b>N</b> (não vira) e <b>U</b> (meia-volta)."

#. type: Content of: <h2>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:51
msgid "Going further"
msgstr "Ir mais longe"

#. type: Content of: <p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:52
msgid ""
"This exercise is naturally an excuse to let you experiment with your own "
"turmites.  Feel free to change the transition table and the amount of steps "
"to experiment by yourself. To that extend, you may find the Ed Pegg Jr's "
"library useful. If you find new interesting patterns, send them per email so "
"that we can integrate them to this list!"
msgstr ""
"Este exercício é naturalmente uma desculpa para deixá-lo experimentar com os "
"seus próprios turmites. Sinta-se à vontade para mudar a tabela de transições "
"e a quantidade de passos por conta própria. Nesta altura, pode se interessar "
"pela biblioteca de Pegg Jr. Se encontrar novos padrões interessantes, envie-"
"os por email para que eles possam integrar a lista!"

#. type: Content of: <p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:58
msgid ""
"In addition, wikipedia is desperately missing some good looking colorful "
"turmites: only black and white ones are depicted.  You should consider "
"submitting your creations directly to the free encyclopedia."
msgstr ""
"Adicionalmente, a wikipédia está a precisar desesperadamente de alguns "
"turmites coloridos bem apresentáveis: apenas os preto e branco estão "
"descritos. Deveria considerar a possibilidade de enviar as suas criações "
"diretamente à enciclopédia livre."

#. type: Content of: <p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:63
msgid ""
"Here are some 2-color turmites, extracted from "
"http://demonstrations.wolfram.com/Turmites/ [!python|scala]They are not "
"written using the [!thelang] syntax, but converting them should be easy.[/!]"
msgstr ""
"Aqui estão alguns turmites de 2 cores, extraídos de http://demonstrations."
"wolfram.com/Turmites/ [!python|scala]Eles não foram escritos a usar o "
"sintaxe de [!thelang], mas convertê-los não deve ser difícil.[/!]"

#. type: Content of: <pre>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:67
#, no-wrap
msgid ""
"{{{1, RIGHT , 0}, {0, LEFT  , 0}}}  # 1: Langton's ant\n"
"{{{1, RIGHT , 0}, {0, NOTURN, 0}}}  # 2: binary counter\n"
"{{{0, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 3: "
"(filled triangle)\n"
"{{{0, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {0, NOTURN, 1}}} # 4: "
"spiral in a box\n"
"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 5: "
"stripe-filled spiral\n"
"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {1, NOTURN, 0}}} # 6: "
"stepped pyramid\n"
"{{{0, RIGHT , 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {1, LEFT  , 0}}} # 7: "
"contoured island\n"
"{{{0, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {0, RIGHT , 1}}} # 8: "
"woven placemat\n"
"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {1, LEFT  , 0}}} # 9: "
"snowflake-ish\n"
"{{{1, LEFT  , 0}, {0, NOTURN, 1}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 10: "
"slow city builder\n"
"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 0}, {0, LEFT  , 1}}} # 11: "
"framed computer art\n"
"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 1}, {1, LEFT  , 0}}} # 12: "
"balloon bursting (makes a spreading highway)\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 13: "
"makes a horizontal highway\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 1}, {1, RIGHT , 0}}} # 14: "
"makes a 45 degree highway\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 1}}, {{1, RIGHT , 1}, {0, LEFT  , 0}}} # 15: "
"makes a 45 degree highway\n"
"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{1, NOTURN, 0}, {1, RIGHT , 0}}} # 16: "
"spiral in a filled box\n"
"{{{1, LEFT  , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 17: "
"glaciers\n"
"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 18: "
"golden rectangle!\n"
"{{{1, LEFT  , 1}, {1, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 19: "
"fizzy spill\n"
"{{{1, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 20: "
"nested cabinets\n"
"{{{1, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {1, NOTURN, 1}}} # 21: "
"(cross)\n"
"{{{1, NOTURN, 1}, {0, NOTURN, 0}}, {{0, RIGHT , 0}, {1, LEFT  , 0}}} # 22: "
"saw-tipped growth\n"
"{{{1, NOTURN, 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 23: "
"curves in blocks growth\n"
"{{{1, NOTURN, 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 24: "
"textured growth\n"
"{{{1, NOTURN, 1}, {0, RIGHT , 1}}, {{1, LEFT  , 0}, {1, RIGHT , 0}}} # 25: "
"(diamond growth)\n"
"{{{1, NOTURN, 1}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 26: "
"coiled rope\n"
"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, NOTURN, 1}}} # 27: "
"(growth)\n"
"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, RIGHT , 1}}} # 28: "
"(square spiral)\n"
"{{{1, RIGHT , 0}, {1, RIGHT , 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}} # 29: "
"loopy growth with holes\n"
"{{{1, RIGHT , 1}, {0, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 30: "
"Lanton's Ant drawn with squares\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 1}, {1, LEFT  , 0}}} # 31: "
"growth with curves and blocks\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, NOTURN, 0}, {1, RIGHT , 1}}} # 32: "
"distracted spiral builder\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 33: "
"cauliflower stalk (45 deg highway)\n"
"{{{1, RIGHT , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, RIGHT , 0}}} # 34: "
"worm trails (eventually turns cyclic!)\n"
"{{{1, RIGHT , 1}, {1, NOTURN, 0}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 35: "
"eventually makes a two-way highway!\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, NOTURN, 0}, {0, NOTURN, 0}}} # 36: "
"almost symmetric mould bloom\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, RIGHT , 0}, {1, NOTURN, 1}}} # 37: "
"makes a 1 in 2 gradient highway\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 38: "
"immediately makes a 1 in 3 highway\n"
"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{0, LEFT  , 2}, {0, LEFT  , 0}}, {{1, "
"RIGHT , 2}, {1, LEFT  , 0}}} # 39: squares and diagonals growth\n"
"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{0, RIGHT , 2}, {1, LEFT  , 0}}, {{1, "
"RIGHT , 1}, {1, NOTURN, 0}}} # 40: streak at approx. an 8.1 in 1 gradient\n"
"{{{1, LEFT  , 1}, {0, NOTURN, 2}}, {{0, RIGHT , 2}, {1, NOTURN, 1}}, {{1, "
"RIGHT , 1}, {1, NOTURN, 0}}} # 41: streak at approx. a 1.14 in 1 gradient\n"
"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 2}}, {{0, "
"LEFT  , 1}, {1, NOTURN, 1}}} # 42: maze-like growth\n"
"{{{1, LEFT  , 2}, {0, RIGHT , 0}}, {{1, LEFT  , 0}, {0, RIGHT , 0}}, {{0, "
"LEFT  , 0}, {0, LEFT  , 1}}} # 43: growth by cornices \n"
"{{{1, RIGHT , 0}, {0, RIGHT , 2}}, {{0, LEFT  , 0}, {0, RIGHT , 0}}, {{0, "
"NOTURN, 1}, {1, LEFT  , 0}}} # 44: makes a 1 in 7 highway\n"
"{{{1, RIGHT , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {0, NOTURN, 0}}, {{1, "
"LEFT  , 0}, {0, LEFT  , 0}}} # 45: makes a 4 in 1 highway\n"
msgstr ""
"{{{1, RIGHT , 0}, {0, LEFT  , 0}}}  # 1: formiga de Langton\n"
"{{{1, RIGHT , 0}, {0, NOTURN, 0}}}  # 2: contador binário\n"
"{{{0, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 3: ("
"triâgulo preenchido)\n"
"{{{0, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {0, NOTURN, 1}}} # 4: "
"espiral numa caixa\n"
"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 5: "
"espiral stripe-filled\n"
"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {1, NOTURN, 0}}} # 6: "
"pirâmide inclinada\n"
"{{{0, RIGHT , 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {1, LEFT  , 0}}} # 7: "
"ilha contoured\n"
"{{{0, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {0, RIGHT , 1}}} # 8: "
"woven placemat\n"
"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {1, LEFT  , 0}}} # 9: "
"floco de neve\n"
"{{{1, LEFT  , 0}, {0, NOTURN, 1}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 10: "
"construtor de cidades lento\n"
"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 0}, {0, LEFT  , 1}}} # 11: "
"framed computer art\n"
"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 1}, {1, LEFT  , 0}}} # 12: "
"balloon bursting (makes a spreading highway)\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 13: "
"makes a horizontal highway\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 1}, {1, RIGHT , 0}}} # 14: "
"makes a 45 degree highway\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 1}}, {{1, RIGHT , 1}, {0, LEFT  , 0}}} # 15: "
"makes a 45 degree highway\n"
"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{1, NOTURN, 0}, {1, RIGHT , 0}}} # 16: "
"spiral in a filled box\n"
"{{{1, LEFT  , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 17: "
"glaciers\n"
"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 18: "
"golden rectangle!\n"
"{{{1, LEFT  , 1}, {1, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 19: "
"fizzy spill\n"
"{{{1, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 20: "
"nested cabinets\n"
"{{{1, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {1, NOTURN, 1}}} # 21: "
"(cross)\n"
"{{{1, NOTURN, 1}, {0, NOTURN, 0}}, {{0, RIGHT , 0}, {1, LEFT  , 0}}} # 22: "
"saw-tipped growth\n"
"{{{1, NOTURN, 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 23: "
"curves in blocks growth\n"
"{{{1, NOTURN, 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 24: "
"textured growth\n"
"{{{1, NOTURN, 1}, {0, RIGHT , 1}}, {{1, LEFT  , 0}, {1, RIGHT , 0}}} # 25: ("
"diamond growth)\n"
"{{{1, NOTURN, 1}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 26: "
"coiled rope\n"
"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, NOTURN, 1}}} # 27: "
"(growth)\n"
"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, RIGHT , 1}}} # 28: ("
"square spiral)\n"
"{{{1, RIGHT , 0}, {1, RIGHT , 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}} # 29: "
"loopy growth with holes\n"
"{{{1, RIGHT , 1}, {0, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 30: "
"Lanton's Ant drawn with squares\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 1}, {1, LEFT  , 0}}} # 31: "
"growth with curves and blocks\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, NOTURN, 0}, {1, RIGHT , 1}}} # 32: "
"distracted spiral builder\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 33: "
"cauliflower stalk (45 deg highway)\n"
"{{{1, RIGHT , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, RIGHT , 0}}} # 34: "
"worm trails (eventually turns cyclic!)\n"
"{{{1, RIGHT , 1}, {1, NOTURN, 0}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 35: "
"eventually makes a two-way highway!\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, NOTURN, 0}, {0, NOTURN, 0}}} # 36: "
"almost symmetric mould bloom\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, RIGHT , 0}, {1, NOTURN, 1}}} # 37: "
"makes a 1 in 2 gradient highway\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 38: "
"immediately makes a 1 in 3 highway\n"
"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{0, LEFT  , 2}, {0, LEFT  , 0}}, {{1, "
"RIGHT , 2}, {1, LEFT  , 0}}} # 39: squares and diagonals growth\n"
"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{0, RIGHT , 2}, {1, LEFT  , 0}}, {{1, "
"RIGHT , 1}, {1, NOTURN, 0}}} # 40: streak at approx. an 8.1 in 1 gradient\n"
"{{{1, LEFT  , 1}, {0, NOTURN, 2}}, {{0, RIGHT , 2}, {1, NOTURN, 1}}, {{1, "
"RIGHT , 1}, {1, NOTURN, 0}}} # 41: streak at approx. a 1.14 in 1 gradient\n"
"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 2}}, {{0, "
"LEFT  , 1}, {1, NOTURN, 1}}} # 42: maze-like growth\n"
"{{{1, LEFT  , 2}, {0, RIGHT , 0}}, {{1, LEFT  , 0}, {0, RIGHT , 0}}, {{0, "
"LEFT  , 0}, {0, LEFT  , 1}}} # 43: growth by cornices \n"
"{{{1, RIGHT , 0}, {0, RIGHT , 2}}, {{0, LEFT  , 0}, {0, RIGHT , 0}}, {{0, "
"NOTURN, 1}, {1, LEFT  , 0}}} # 44: makes a 1 in 7 highway\n"
"{{{1, RIGHT , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {0, NOTURN, 0}}, {{1, "
"LEFT  , 0}, {0, LEFT  , 0}}} # 45: makes a 4 in 1 highway\n"

#. type: Content of: <p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:114
msgid ""
"Langton's ants may not share the expressiveness power of the turmites, but "
"they remain fascinating too. You can experiment with them using the "
"initLangton() method, provided in your template, that allows to build a "
"Turmite transition table from a Langton's ant name. Tiny changes in the ant "
"may result huge changes. For example, \"RRL\" does not seem to lead to any "
"constructed pattern, even after a million steps, but \"RLL\" starts building "
"a very simple highway pattern after less than 100 steps!"
msgstr ""
"Formigas de Langton podem não compartilhar do poder de expressão dos "
"turmites, mas ainda assim são fascinantes. Pode experimentar elas a usar o "
"método initLangton(), fornecido no seu template, que permite construir uma "
"tabela de transição do nome da formiga de Langton. Pequenas mudanças na "
"formiga podem resultar em grandes mudanças. Por exemplo, \"RRL\" parece não "
"levar a nenhum padrão, mesmo após um milhão de passos, mas \"RLL\" começa a "
"construir um padrão de estrada muito simples depois de menos de 100 passos!"

#. type: Content of: <p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:121
msgid ""
"Quite a lot of Langton's ants build highways: RL, of course, but also "
"RLRLRLLRLR (about 2500 steps).  The chaotic behavior of ants before the "
"highway can be very short (as with RLL that only need 100 steps to converge) "
"or very long, as with LLLLLLRRLRRR which seems chaotic for more than 500,000 "
"steps before build the highway or even RRLLLRRRLRRR which needs 1170000 to "
"start converging. Some are narrow, and others are very large, such as "
"RRLRLLRLRR (200,000 steps). This ant is also notable since it is somehow "
"squarish even before the highway start where most others do not show "
"anything notable before their highway."
msgstr ""
"Muitas das formigas de Langton constróem estradas: RL, claro, mas também "
"RLRLRLLRLR (em cerca de 2500 passos). O comportamento caótico das formigas "
"antes da estrada pode ser bastante curto (como no caso RLL que precisa de "
"apenas 100 passos para convergir) ou muito longo, como LLLLLLRRLRRR que "
"parece caótico até mais de 500.000 de passos antes de contruir a estrada, ou "
"até mesmo RRLLLRRRLRRR que precisa de 1.170.000 para começar a convergir. "
"Umas são estreitas e outras bem largas, como em RRLRLLRLRR (200,000 passos). "
"Esta formiga é também notável pois é meio quadrada mesmo antes da estrada "
"começar, enquanto que as outras não exibem nada de especial antes da estrada."

#. type: Content of: <p><p><p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:129
msgid ""
"Some ants fill solid sectors, such as RRLLLRLLLRRR (16,000 steps), "
"RRLLLRLLLRRR (30,000 steps), RRLLLRRRRRLR (125,000 steps) or RRLRLLRRRRRR "
"(20,000 steps). Some even fill the whole space (RRLRR after 3000 "
"steps). Some of my personal favorite ones are the ones where the ant seem to "
"be bouncing within a box that gets bigger on each bump, such as LRRRRRLLR "
"(30,000 steps). LRRRRLLLRRR is even more impressing since the bounces within "
"the box are regular and since it converges more rapidly to its stable "
"behavior (15,000 steps are enough)."
msgstr ""
"Algumas formiga preenchem setores sólidos, como RRLLLRLLLRRR(16,000 passos), "
"RRLLLRLLLRRR (30,000 passos), RRLLLRRRRRLR (125,000 passos) ou RRLRLLRRRRRR ("
"20,000 passos). Algumas preenchem até mesmo todo o plano (RRLRR depois de "
"3000 passos). algumas das minhas favoritas são aquelas onde as formigas "
"parecem ricochetear desntro de uma caixa que vai a ficar maior em cada "
"batida, como LRRRRRLLR (30,000 passos). LRRRRLLLRRR é ainda mais "
"impressionante pois as ricocheteadas dantro da caixa são regulares e também "
"por que ela converge mais rapidamente o comportamento estável dele (15,000 "
"passos são suficientes)."

#. type: Content of: <p><p><p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:136
msgid ""
"Finally, some ants are just build artistic patterns. You should check this "
"video for some beautiful ones: "
"http://www.youtube.com/watch?v=1X-gtr4pEBU. If you want to convert them into "
"your code, you have to shift them by one: For example, the one depicted at "
"3:42 is not RRLRLRLLRL, but RLRLRLLRLR (the first visible move should be "
"read as last one)."
msgstr ""
"Finalmente, algumas formigas fazem padrões simplesmente artísticos. Pode "
"verificar este vídeo com alguns deles: http://www.youtube.com/watch?v=1X-"
"gtr4pEBU. Se quiser convertê-los em código, tem que transladar um caractere: "
"por exemplo, aquele descrito no minuto 3:42 não será RRLRLRLLRL, mas sim "
"RLRLRLLRLR (o primeiro movimento visível deve ser lido como o último)."

#. type: Content of: <p><p><p>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:141
msgid ""
"As you can see by exploring the above set of turmites, they are usually not "
"as colorful as the ants, but this may be because very few colors suffice to "
"exhibit complex behaviors. For example, there is a specific class of "
"turmites called <i>busy beavers</i> which are turmites that write a lot of "
"things before stopping (busy beavers are usually classical turing machines, "
"but the idea fits perfectly to turmites too). There is a sort of "
"international competition where people strive to find the turmite that "
"covers the biggest area before stopping. The web page is here: "
"http://code.google.com/p/ruletablerepository/wiki/TwoDimensionalTuringMachines"
msgstr ""
"Como pode ver ao explorar o conjunto de turmites acima, elas não são tão "
"coloridas quanto as formigas, mas isto pode ser por que poucas cores são o "
"suficientes para exibir comportamentos complexos. Por exemplo, existe uma "
"classe específica de turmites chamada <i>busy beavers</i> que são turmites "
"que escrevem várias coisas antes de parar (busy beavers normalmente são "
"máquinas de turing clássicas, mas a ideia encaixa perfeitamente em turmites "
"também). Existe um tipode competição internacional onde as pessoas tentam "
"encontrar o turmite que cobre a maior área antes de parar. A página é esta: "
"http://code.google.com/p/ruletablerepository/wiki/"
"TwoDimensionalTuringMachines"

#. type: Content of: <h1>
#: src/lessons/turmites/universe/TurmiteWorld.html:2
msgid "Turmite universe"
msgstr "Universo dos Turmites"

#. type: Content of: <p>
#: src/lessons/turmites/universe/TurmiteWorld.html:4
msgid ""
"This universe is very similar to the buggle one, but you will probably not "
"use all buggles methods.  So, this page only recap the buggle methods that "
"you will use."
msgstr ""
"Este universo é bastante similar ao dos buggles, mas provavelmente não vai "
"usar nenhum método dos buggles. Então, esta página apenas repacitula os "
"métodos do buggle que vai usar."

#. type: Content of: <table><tr><td>
#: src/lessons/turmites/universe/TurmiteWorld.html:12
msgid ""
"[!java|c]void [/!][!c]stepForward()[/!][!java|python|scala]forward()[/!] or "
"[!java|c]void [/!]forward([!java|c]int [/!]steps[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!][!c]stepForward()[/!][!java|python|scala]forward()[/!] ou "
"[!java|c]void [/!]forward([!java|c]int [/!]passos[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/lessons/turmites/universe/TurmiteWorld.html:13
msgid ""
"[!java|c]void [/!][!c]stepBackward()[/!][!java|python|scala]backward()[/!] "
"or [!java|c]void [/!]backward([!java|c]int [/!]steps[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!][!c]stepBackward()[/!][!java|python|scala]back()[/!] ou "
"[!java|c]void [/!]backward([!java|c]int [/!]steps[!scala]:Int[/!])"

#. type: Content of: <h1>
#: src/plm/universe/sort/SortingWorld.html:2
msgid "Sorting World"
msgstr "Mundo da ordenação"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/sort/SortingWorld.html:3
msgid ""
"This world provides tools to experiment with the sorting algorithms. It can "
"be used in two different ways: the first one is naturally to write the "
"required sorting algorithms. But it is also possible to simply use the demo "
"mode of each exercise to observe the behavior of sorting algorithms. It "
"helps understanding the differences between each of them."
msgstr ""
"Este mundo fornece ferramentas para experimentar com algoritmos de "
"ordenação. Pode ser usado de duas formas diferentes: a primeira é "
"naturalmente para escrever os algoritmos de ordenação necessários. Mas "
"também é possível simplesmente usar o modo de demonstração de cada exercício "
"para observar o comportamento de algoritmos de ordenação. Isto ajuda a "
"entender as diferenças entre cada um deles."

#. type: Content of: <h2>
#: src/plm/universe/sort/SortingWorld.html:9
msgid "Methods available to sorting algorithms"
msgstr "Métodos disponíveis para algoritmos de ordenação"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:11
msgid "<b>Method</b>"
msgstr "<b>Método</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:11
msgid "<b>Action</b>"
msgstr "<b>Ação</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:11
msgid "<b>Cost</b>"
msgstr "<b>Custo</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:12
msgid "[!java|c]int [/!]getValueCount() [!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getValueCount() [!scala]:Int[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:13
msgid "Returns the amount of values in the array"
msgstr "Retorna a quantidade de valores na array"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:13
#: src/plm/universe/sort/SortingWorld.html:31
msgid "none"
msgstr "nenhum"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:15
msgid ""
"[!java]boolean [/!][!c]int [/!]isSmaller([!java|c]int [/!]i[!scala]:Int[/!], "
"[!java|c]int [/!]j[!scala]:Int[/!]) [!scala]:Boolean[/!]"
msgstr ""
"[!java]boolean [/!][!c]int [/!]éMenor([!java|c]int [/!]i[!scala]:Int[/!], "
"[!java|c]int [/!]j[!scala]:Int[/!]) [!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:16
msgid ""
"Returns true if the content of cell i is strictly smaller than the one of "
"cell j"
msgstr ""
"Retorna true se o conteúdo da célula i é estritamente menor que o da célula j"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:16
msgid "two reads"
msgstr "duas leituras"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:17
msgid ""
"[!java]boolean [/!][!c]int [/!]isSmallerThan([!java|c]int "
"[/!]i[!scala]:Int[/!], [!java|c]int [/!]value[!scala]:Int[/!])[!scala] "
":Boolean[/!]"
msgstr ""
"[!java]boolean [/!][!c]int [/!]éMenorQue([!java|c]int [/!]i[!scala]:Int[/!], "
"[!java|c]int [/!]value[!scala]:Int[/!])[!scala] :Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:18
msgid ""
"Returns true if the content of cell i is strictly smaller than the "
"<code>value</code>"
msgstr ""
"Retorna true se o conteúdo da célula i é estritamente menor que "
"<code>valor</code>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:18
#: src/plm/universe/sort/SortingWorld.html:26
msgid "one read"
msgstr "uma leitura"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:20
msgid ""
"[!java|c]void [/!]swap([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int "
"[/!]j[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!]alternar([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int "
"[/!]j[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:21
msgid "Swaps the content of cell i and the one of cell j"
msgstr "Alterna (\"swap\") o conteúdo da célula i com o da célula j"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:21
msgid "two reads, two writes"
msgstr "duas escritas, duas leituras"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:22
msgid ""
"[!java|c]void [/!]copy([!java|c]int [/!]from[!scala]:Int[/!], [!java|c]int "
"[/!]to[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!]copia([!java|c]int [/!]de[!scala]:Int[/!], [!java|c]int "
"[/!]para[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:23
msgid "Copy the content of cell 'from' into the cell 'to'"
msgstr "Copia o conteúdo da célula 'de' para a célula 'para'"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:23
msgid "one read, one write"
msgstr "uma leitura, uuma escrita"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:25
msgid "[!java|c]int [/!]getValue([!java|c]int [/!]idx[!scala]:Int[/!])"
msgstr "[!java|c]int [/!]getValor([!java|c]int [/!]idx[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:26
msgid "Returns the value of cell idx"
msgstr "Retorna o valor da célula idx"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:27
msgid ""
"[!java|c]void [/!]setValue([!java|c]int [/!]idx[!scala]:Int[/!], "
"[!java|c]int [/!]value[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!]setValor([!java|c]int [/!]idx[!scala]:Int[/!], [!java|c]"
"int [/!]valor[!scala]:Int[/!])"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:28
msgid "Sets cell 'idx' to the <code>value</code>"
msgstr "Coloca na célula 'idx' o <code>valor</code>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:28
msgid "one write"
msgstr "uma escrita"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:30
msgid "[!java]boolean [/!][!c]int [/!]isSelected() [!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isSelected() [!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/sort/SortingWorld.html:31
#: src/lessons/sort/pancake/universe/PancakeWorld.html:22
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:28
msgid "Returns whether the current world is selected in the graphical interface."
msgstr "Retorna true se o mundo atual está selecionado na interface gráfica."

#. type: Content of: <h2>
#: src/plm/universe/sort/SortingWorld.html:35
msgid "History view"
msgstr "Visão do histórico"

#. type: Content of: <p>
#: src/plm/universe/sort/SortingWorld.html:36
msgid ""
"It is not enough to sort the array to pass the exercises. Your solution must "
"strictly follow the expected behavior of each exercise. This is enforced by "
"checking that your algorithm needs the same amount of read and write "
"operations to sort the array. When they don't match, understanding the "
"difference between your code and the expected solution can reveal very "
"difficult."
msgstr ""
"É suficiente ordenar a array para resolver os exercícios. A sua solução deve "
"seguir estritamente o comportamento esperado em cada exercício. Isto é "
"reforçado a verificar que o seu algoritmo precisa da mesma quantidade de "
"operações de leitura e escrita para ordenar a array. Quando estas "
"quantidades não coincidem, compreender a diferença entre o seu código e a "
"solução esperada pode se mostrar bem difícil."

#. type: Content of: <p>
#: src/plm/universe/sort/SortingWorld.html:43
msgid ""
"To help in this process, it is possible to graphically explore the history "
"of your sorting algorithm. Switch to the Objective view and use the "
"contextual menu (right click) to switch from the view of the current state "
"to the view of its history."
msgstr ""
"Para ajudar neste processo, é possível explorar graficamente o histórico do "
"algoritmo de ordenação. Alternar à visão Objetivo e usar o menu de contexto ("
"clique com botão direito) para alternar da visão do estado atual à visão do "
"histórico."

#. type: Content of: <p>
#: src/plm/universe/sort/SortingWorld.html:48
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:19
msgid ""
"The history view is a bit hairly at the first glance, but actually rather "
"simple: The time flows from left to right on this graph, and each row is a "
"cell of your array. The curved lines that go navigate between rows represent "
"a given data value. When two lines cross, this means that two values were "
"swapped at this time stamp; A line fork represent a value copy; When a value "
"is magenta and followed by an interrogation mark (?), it was read using "
"getValue(); If the value is red and followed with an exclamation point (!), "
"it was written using setValue()."
msgstr ""
"A visão do histórico é um pouco bagunçada à primeira vista, mas na verdade é "
"bem simples: o tempo anda da esquerda para a direita neste gráfico e cada "
"linha é uma célula da sua array. As linhas curvas que navegam entre linhas "
"representam um certo valor de um dado. Quando duas linhas se cruzam, "
"significa que dois valores foram alternados agora; uma bifurcação numa linha "
"representa uma cópia de valor; quando um valor é magenta e seguido de uma "
"interrogação (?), foi lido a usar getValue(); Se o valor é vermelho e "
"seguido de uma exclamação (!), foi escrito com setValor()."

#. type: Content of: <p>
#: src/plm/universe/sort/SortingWorld.html:57
msgid ""
"This view, inspired from Aldo Cortesi, reveals very helpful understand the "
"inner behavior of sorting algorithms."
msgstr ""
"Esta visão, inspirada por Aldo Cortesi, se mostra muito útil para entender o "
"comportamento interno de algoritmos de ordenação."

#. type: Content of: <h3>
#: src/lessons/sort/basic/Main.html:2 src/lessons/sort/basic/short_desc.html:2
msgid "Sorting Algorithms"
msgstr "Algoritmos de Ordenação"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/basic/Main.html:4
msgid ""
"This lesson allows to experiment with some classical sorting algorithms (and "
"some less common variant of them). The goal is two fold: you can first "
"better understand the idea of these algorithms by writing them yourself. But "
"even if you don't code the algorithms, you can use the demo mode to organize "
"\"races\" between these algorithms to experiment in practice what the "
"different asymptotical complexity mean."
msgstr ""
"Esta lição permite a experimentação com alguns algoritmos de ordenação "
"clássicos (e algumas variações menos comuns deles). E temos um duplo "
"objetivo: pode primeiro compreender melhor a ideia destes algoritmos a "
"escrever eles por si só. Mas mesmo se não codificar os algoritmos, pode usar "
"o modo de demonstração para organizar \"corridas\" entre os algoritmos para "
"experimentar na prática o que significam diferentes complexidades "
"assintóticas."

#. type: Content of: <p>
#: src/lessons/sort/basic/Main.html:11
msgid ""
"More exercises are planned for the future, on recursive sorting algorithms "
"(such as QuickSort and MergeSort) or using other microworlds to apply these "
"algorithms to other contexts."
msgstr ""
"Mais exercícios estão previstos para o futuro, sobre os algoritmos de "
"ordenação recursivos (como o QuickSort e o MergeSort) ou a usar outros "
"micromundos para aplicar estes algoritmos a outros contextos."

#. type: Content of: <ul><li>
#: src/lessons/sort/basic/Main.html:19
msgid ""
"Other graphical representations could be proposed, such as the ones "
"presented at <a href=\"http://sorting.at/\">http://sorting.at/</a>."
msgstr ""
"Outras representações gráficas podem ser propostas, como aquelas "
"apresentadas em <a href=\"http://sorting.at/\">http://sorting.at/</a>."

#. type: Content of: <p>
#: src/lessons/sort/basic/short_desc.html:4
msgid ""
"This lesson allows to experiment with some classical sorting algorithms (and "
"some less common variant of them :)"
msgstr ""
"Esta lição permite a experimentação com alguns algotimos de ordenação "
"clássicos (e algumas variantes menos comuns deles :)"

#. type: Content of: <p>
#: src/lessons/sort/basic/short_desc.html:7
#: src/lessons/recursion/lego/short_desc.html:6
#: src/lessons/maze/short_desc.html:6
msgid "You are supposed to master the bases of programming to take this lesson."
msgstr "Para fazer esta lição deve dominar as bases da programação."

#. type: Content of: <h1>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:2
msgid "BubbleSort"
msgstr "BubbleSort"

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:4
msgid ""
"Welcome to the sorting universe. It allows you to experiment with the "
"existing sorting algorithms. The list of buildins that you can use in your "
"algorithms is available in the world reference documentation "
"(\"Help\"-&gt;\"About this world\")."
msgstr ""
"Bem-vindo ao universo da ordenação. Ele permite que experimente os "
"algoritmos de ordenação existentes. A lista de \"buildins\" que pode usar "
"nos seus algoritmos está disponível na documentação de referência do mundo ("
"\"Ajuda\"-&gt;\"Sobre este mundo\")."

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:8
msgid ""
"It is not enough to sort the array to pass the exercises. Your solution must "
"strictly follow the expected behavior of each exercise. This is enforced by "
"checking that your algorithm needs the same amount of read and write "
"operations to sort the array."
msgstr ""
"Não é suficiente ordenar a array para passar nos exercícios. A sua solução "
"deve seguir estritamente o comportamento esperado em cada exercício. Isto é "
"reforçado a verificar que o seu algoritmo precisa da mesma quantidade de "
"operações de escrita e leitura para ordenar a array."

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:13
msgid ""
"When your algorithm diverges from the expectation, understanding the "
"difference between your code and the expected solution can reveal very "
"difficult. To help in this process, it is posible to graphically explore the "
"history of your sorting algorithm. Switch to the Objective view and use the "
"contextual menu (right click)  to switch from the the view of the current "
"state to the view of its history."
msgstr ""
"Quando seu algoritmo divergge das expectativas, entender a diferença entre o "
"seu código e a solução esperada pode ser muito difícil. Para ajudar neste "
"processo, é possível explorar graficamente a história do seu algoritmo de "
"ordenação. Alterne à visão Objetivo e use o menu contextual (clique com o "
"botão direito) para alternar da visão do estado atual para a visão do "
"histórico dele."

#. type: Content of: <h2>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:28
msgid "First attempt at BubbleSort"
msgstr "Primeira tentativa no BubbleSort"

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:30
msgid ""
"This first sorting algorithm is the most simple one: Bubble sort consists in "
"progressively moving up the smaller elements of the array, as if they were "
"air bubbles moving up to the surface of a liquid. The algorithm traverse the "
"array, and compare any pair of adjacent elements. If two adjacent elements "
"are wrongly sorted, they are swapped. Once the array was completely "
"traversed, the operation starts again from the beginning. When no elements "
"were sorted after a full traversal, it means that the array is completely "
"sorted: the algorithm can stop.  Bubble sort is studied because of its "
"simplicity, but it is almost never used in practice because of its bad "
"performance (O(n^2) on average)."
msgstr ""
"O primeiro algoritmo de ordenação é o mais simples: Bubble sort consiste em "
"progressivamente mover o menor elemento da array, como se fossem bolhas de "
"ar a subir à superfície de um líquido. O algoritmo percorre a array e "
"compara qualquer par de elementos adjacentes. Se dois elementos adjacentes "
"estiverem fora de ordem, eles são alternados. Quando a array estiver "
"completamente percorrida, a operação começa de novo do começo. Quando nenhum "
"elemento for ordenado após uma passagem completa, significa que a array está "
"completamente ordenada: e o algoritmo pode parar.  Bubble sort é estudado "
"por causa da simplicidade dele, mas quase nunca é usado na prática por causa "
"do baixo desempenho dele (O(n^2) em média)."

#. type: Attribute 'alt' of: <div>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:40
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:12
msgid "Show Tip (Pseudo-code)"
msgstr "Mostrar Dica (Pseudo-código)"

#. type: Content of: <div><p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:41
msgid "The pseudo-code of the BubbleSort algorithm is the following:"
msgstr "O pseudo-código do algoritmo BubbleSort é o seguinte:"

#. type: Content of: <div><pre>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:42
#, no-wrap
msgid ""
"do: \n"
"        For each i in [0,len-2]\n"
"          If cells i and i+1 must be swapped, do it\n"
"while we swapped something during last traversal\n"
msgstr ""
"faça: \n"
"        Para cada i em [0,len-2]\n"
"          Se a célula i e i+1 devem ser alternadas, alterne\n"
"enquanto algo foi alternado na última passagem\n"

#. type: Content of: <h1>
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:2
msgid "BubbleSort (take 2)"
msgstr "BubbleSort (take 2)"

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:4
msgid ""
"If you look carefully at the behavior of BubbleSort, a first easy "
"optimization appears: after one traversal, the last element of the array "
"must be the biggest of all since the traversal moved it up like a bubble to "
"its position. More generally, after N traversal, we know that the N last "
"elements of the array are already sorted. It is thus not necessary to "
"compare them again during the subsequent traversals. For now, we will have "
"as many traversal as there is in the array."
msgstr ""
"Se olhar atentamente ao comportamento do BubbleSort, uma primeira e fácil "
"otimização aparece: depois de uma travesia, o último elemento da array é o "
"maior de todos, pois a travessia moveu-o para cima como uma bolha à posição "
"dele. Mais geralmente, depois de N travessias, sabemos que os últimos N "
"elementos da array já estão ordenados. Portanto, não é necessário compará-"
"los de novo durante travessias subsequentes. Por agora, vamos ter tantas "
"travessias quantos elementos na array."

#. type: Content of: <div><p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:13
msgid "The pseudo-code of the BubbleSort2 algorithm is the following:"
msgstr "O pseudo-código do algoritmo BubbleSort2 é o seguinte:"

#. type: Content of: <div><pre>
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:14
#, no-wrap
msgid ""
"For all i in [len-2,0] (traversing from biggest to smallest)\n"
"       For all j in [0, i]\n"
"          If cells j and j+1 must be swapped, do it\n"
msgstr ""
"Para todo i em [len-2,0] (a percorrer do maior ao menor)\n"
"       Para todo j em [0, i]\n"
"          Se células j e j+1 devem ser trocadas, troque\n"

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:20
msgid ""
"When we run this algorithm, it is quite disappointing to see that it runs "
"approximately at the same speed than the basic version of BubbleSort. This "
"is a graphical effect only since only value changes are graphically "
"represented. Since this variation avoids some useless comparisons, it does "
"exactly the same amount of swaps that the basic version. It is thus quite "
"logical that the graphical interface draws this version at the same pace "
"than the base version. But the statistics on the amount of reads show that "
"we saved about the fourth of the amount of reads, which is not bad."
msgstr ""
"Quando rodamos este algoritmo, desaponta bastante ver que executa cerca de "
"na mesma velocidade que a versão básica do BubbleSort. Isto é um elemento "
"gráfico apenas já que apenas mudanças de valores são representadas "
"graficamente. Como esta variação evita algumas comparações inúteis, ela faz "
"a mesma quantidade de trocas que a versão básica. É, portanto, bastante "
"lógico que a interface gráfica desenhe esta versão no mesmo ritmo que a "
"versão básica. Mas as estatísticas da quantidade de leituras mostram que "
"economizamos cerca de um quarto das leituras, o que não é nada mal."

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:29
msgid ""
"From the asymptotic complexity point of view, there is absolutely no "
"difference: this variation is still in O(n^2) on average (our gain is only "
"on the constant term, ignored when computing the asymptotic complexity)."
msgstr ""
"Do ponto de vista da complexidade asimtótica, não existe nenhuma diferença: "
"Esta variação ainda é O(n^2) no caso médio (nosso ganho é apenas no termo "
"constante, ignorado quando se está a calcular a complexidade asimtótica)."

#. type: Content of: <h1>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:2
msgid "BubbleSort (take 3)"
msgstr "BubbleSort (take 3)"

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:4
msgid ""
"Let's now reintroduce the little optimization we removed at previous step: "
"if a traversal does not swap any element, it means that the array is already "
"sorted. In that case, we want to stop the whole sorting process."
msgstr ""
"Vamos agora reintroduzir a pequena otimização que fizemos no passo anterior: "
"se uma passagem não troca nenhum elemento, significa que a array já está "
"ordenada. Neste caso, vamos parar todo o processo de ordenação."

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:9
msgid ""
"[!java|python|c]For that, simply use the <code>break</code> keyword, which "
"breaks the current loop.  Beware, if you have several nested loops, this "
"will apply to the internal one.[/!] [!scala]For that, simply quit the "
"current function by calling <code>return</code> with no associated "
"value.[/!]"
msgstr ""
"[!java|python|c]Para isto, simplesmente use a palavra-chave <code>break</"
"code>, que interrompe o loop atual. Cuidado, se tem vários loops aninhados, "
"isto só vai ter efeito no mais interno.[/!] [!scala]Para isto, simplesmente "
"saia da função atual a chamar <code>return</code> sem nenhum valor "
"associado.[/!]"

#. type: Attribute 'alt' of: <div>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:14
msgid "If you want, this tip shows the pseudo-code."
msgstr "Se quiser, esta dica mostra o pseudo-código."

#. type: Content of: <div><pre>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:16
#, no-wrap
msgid ""
"For all i in [len-2,0] (traversing from biggest to smallest)\n"
"       For all j in [0, i]\n"
"          If cells j and j+1 must be swapped, do it\n"
"       If traversal on j did not swap anything, break the for loop\n"
msgstr ""
"para todo i em [len-2,0] (a percorrer do maior ao menor)\n"
"       Para todo j em [0, i]\n"
"          Se células j e j+1 devem ser trocadas, troque\n"
"       Se ao percorrer j não fez nenhuma troca, pare o loop\n"

#. type: Content of: <p>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:23
msgid ""
"This optimization is even more disappointing: it only provide a gain of a "
"few percents on the amount of reads over BubbleSort2."
msgstr ""
"Esta otimização é ainda mais desapontadora: ela só dá um ganho de alguns "
"porcento sobre o BubbleSort2 no total de leituras."

#. type: Content of: <h1>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:2
msgid "CocktailSort"
msgstr "CocktailSort"

#. type: Content of: <p>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:4
msgid ""
"To improve further the BubbleSort algorithm, we need to look closer its "
"behavior. One can notice that big elements are moved very quickly in "
"position while small ones move very slowly to their destination. They are "
"thus traditionally referred to as \"rabbits\" and \"turtles\" respectively "
"for big fast values and small slow ones."
msgstr ""
"Para melhorar ainda mais o algoritmo BubbleSort, precisamos ver "
"comportamente dele bem de perto. Pode perceber que os elementos grandes se "
"movem bem rápido enquanto os pequenos se movem lentamente para os destinos "
"dele. Eles são então tradicionalmente chamados de \"coelhos\" e \"tartarugas"
"\" respectivamente para valores grandes e rápidos e valores pequenos e "
"lentos."

#. type: Content of: <p>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:10
msgid ""
"To help the turtles moving faster, the cocktail sort traverse alternatively "
"the array from right to left and from left to right. Here is the "
"pseudo-code:"
msgstr ""
"Para ajudar as tartarugas a se mover rápido, o cocktail sort percorre "
"alternativamente a array da direita para a esquerda e da esquerda para a "
"direita. Aqui está o pseudo-código:"

#. type: Content of: <pre>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:15
#, no-wrap
msgid ""
"Do\n"
"  For all i in [0,len-2], do:\n"
"    if i and i+1 must be swapped, do it\n"
"  For all i in [len-2,0] (downward), do:\n"
"    if i and i+1 must be swapped, do it\n"
"while at least one of the traversal swapped an element\n"
msgstr ""
"Do\n"
"  For all i in [0,len-2], do:\n"
"    if i and i+1 must be swapped, do it\n"
"  For all i in [len-2,0] (downward), do:\n"
"    if i and i+1 must be swapped, do it\n"
"while at least one of the traversal swapped an element\n"

#. type: Content of: <p>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:23
msgid ""
"One can see that cocktail sort achieves exactly the same amount of swaps "
"than the bubble sort, but improves slightly on read amount. It is however "
"still worse than BubbleSort2 to that extend."
msgstr ""
"Podemos perceber que cocktail sort alcança a mesma quantidade de trocas que "
"o bubble sort, mas melhora levemente na quantidade de leituras. Entretanto, "
"é ainda pior que o BubbleSort2 neste assunto."

#. type: Content of: <h1>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort2.html:2
msgid "CocktailSort (take 2)"
msgstr "CocktailSort (take 2)"

#. type: Content of: <p>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort2.html:4
msgid ""
"We will now apply to CocktailSort the same optimization than BubbleSort2 did "
"to BubbleSort. We must remember the limits of the array part not being "
"sorted yet, and traverse it alternatively from left to right and from right "
"to left:"
msgstr ""
"Vamos agora aplicar ao CocktailSort a mesma otimização que o BubbleSort2 faz "
"no BubbleSort. Devemos lembrar que os limites da parte do array que não está "
"ordenada ainda e percorrer ela alternativamente da esquerda para a direita e "
"da diretia para a esquerda:"

#. type: Content of: <pre>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort2.html:9
#, no-wrap
msgid ""
"beg=0; end=len-2\n"
"do\n"
"  For all Pour i in [beg,end], do:\n"
"      If cells i and i+1 must be swapped, do it    \n"
"  end -= 1 (this means end = end - 1)\n"
"  For all Pour i in [beg,end] (downwards), do:\n"
"      If cells i and i+1 must be swapped, do it    \n"
"  beg += 1 (this means beg = beg + 1)\n"
"while at least one of the traversal swapped an element\n"
msgstr ""
"beg=0; end=len-2\n"
"do\n"
"  For all Pour i in [beg,end], do:\n"
"      If cells i and i+1 must be swapped, do it    \n"
"  end -= 1 (this means end = end - 1)\n"
"  For all Pour i in [beg,end] (downwards), do:\n"
"      If cells i and i+1 must be swapped, do it    \n"
"  beg += 1 (this means beg = beg + 1)\n"
"while at least one of the traversal swapped an element\n"

#. type: Content of: <h1>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort3.html:2
msgid "CocktailSort (take 3)"
msgstr "CocktailSort (3o tempo)"

#. type: Content of: <p>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort3.html:4
msgid ""
"Even if the asymptotic complexity of CocktailSort2 is the same than the one "
"of BubbleSort, it seem to perform better in practice. It is even possible to "
"improve a bit further by stopping it if the first traversal didn't found "
"anything to swap, without achieving the downwards traversal. Likewise, we "
"can stop if the upward traversal found something to swap, but not the "
"downwards one."
msgstr ""
"Mesmo se a complexidade assintótica de CocktailSort2 for a mesma do "
"BubbleSort, que parece melhor, na prática. É até mesmo possível melhorar um "
"pouco mais a pará-lo na primeira rodada que não encontrar nada para "
"alternar, se realizar a rodada para baixo. Da mesma forma, podemos parar se "
"a rodada para cima encontrar algo para alternar, mas a rodada para baixo não."

#. type: Content of: <h1>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:2
msgid "InsertionSort"
msgstr "InsertionSort"

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:5
msgid ""
"This sorting algorithm is quite simple to understand and write, even if it "
"is not as efficient as possible. Its asymptotic complexity is in O(n2), but "
"it is more efficient in practice (linear in best case, ie when the array is "
"already sorted, and N2/4 on average)."
msgstr ""
"Este algoritmo de ordenação é muito simples de entender e escrever, mesmo se "
"não for o mais eficiente possível. A complexidade assintótica dela é O(n2), "
"mas é mais eficiente, na prática (linear no melhor caso, p.ex. quando a "
"array já está ordenada e N2/4 no caso médio)."

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:10
msgid ""
"The idea is to traverse all elements of the array, and to insert each of "
"them into its proper position in the already sorted part of the array. When "
"we look at an element x, the situation is the following: any elements to the "
"left of the array are already sorted, and we have to insert x at its "
"position in the array."
msgstr ""
"A ideia é percorrer todos os elementos da array e inserir cada um deles na "
"posição correta dele numa parte já ordenada da array. Quando olhamos num "
"elemento x, a situação é a seguinte: qualquer elemento da esquerda da array "
"já está ordenado e temos que inserir x na posição dele na array."

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:18
msgid "Once this is done, the situation is the following:"
msgstr "Uma vez isto feito, a situação é a seguinte:"

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:22
msgid "The pseudo-code of this algorithm is thus the following:"
msgstr "O pseudo-código deste algoritmo é então o seguinte:"

#. type: Content of: <pre>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:23
#, no-wrap
msgid ""
"For each i in [1,len-1]\n"
"  store the value of i in a variable v\n"
"  copy the cell i-1 into i if i-1 contains a value bigger than v\n"
"  copy the cell i-2 into i-1 if i-2 contains a value bigger than v\n"
"  copy the cell i-3 into i-2 if i-3 contains a value bigger than v\n"
"  copy the cell i-4 into i-3 if i-4 contains a value bigger than v\n"
"  ...\n"
"  copy v into the last cell copied above\n"
msgstr ""
"For each i in [1,len-1]\n"
"  store the value of i in a variable v\n"
"  copy the cell i-1 into i if i-1 contains a value bigger than v\n"
"  copy the cell i-2 into i-1 if i-2 contains a value bigger than v\n"
"  copy the cell i-3 into i-2 if i-3 contains a value bigger than v\n"
"  copy the cell i-4 into i-3 if i-4 contains a value bigger than v\n"
"  ...\n"
"  copy v into the last cell copied above\n"

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:33
msgid ""
"Naturally, you should use a loop to write the big permutation within the "
"given loop. Writing it this way would be really ... counter-productive."
msgstr ""
"Naturalmente, deve usar um loop para escrever a grande permutação dentro do "
"loop. Escrever ela desta forma deve ser na verdade ... improdutivo."

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:36
msgid ""
"If you've always wondered what computer science researchers do nowadays, "
"here is part of the answer: They improve fundamental algorithms so that "
"others can write efficient programs."
msgstr ""
"Se já se perguntou o que cientistas da computação fazem nos dias de hoje, "
"aqui está uma parte da resposta: Eles melhoram algoritmos fundamentais para "
"que outras pessoas possam escrever programas eficientes."

#. type: Content of: <h2>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:40
msgid "Other variation of insertion sort"
msgstr "Outra variação do insertion sort"

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:42
msgid ""
"TreeSort builds a binary search tree to sort them. It leads to a O(n log(n))  "
"on average, but O(n^2) in worst cases. We won't study this algorithm here "
"since understanding its behavior requires to know what a binary tree is, "
"what is beyond our present goals."
msgstr ""
"TreeSort constrói uma árvore de busca binária para ordená-la. Consegue O(n "
"log(n)) no caso médio, mas O(n^2) nos piores casos. Não vamos estudar este "
"algoritmo aqui, pois para entendê-lo temos que entender o que uma árvore "
"binária é, o que está além dos nossos objetivos atuais."

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:47
msgid ""
"There is other variations over the insertion sort, such as PatienceSort "
"which builds piles of values and sort each pile afterward. This algorithm "
"presents a 0(n log(n)) timing worst case and a 0(n) space "
"complexity. LibrarySort (proposed in 2004) also trades a bit space in "
"exchange for time since it provide a time complexity of O(n log(n)) but "
"needs to store some more data."
msgstr ""
"Existem variações do insertion sort, tais como o PatienceSort que constrói "
"pilhas de valores e ordena cada pilha depois. Este algoritmo apresenta um "
"tempo 0(n log(n)) no pior caso e uma complexidade de espaço de 0(n). "
"LibrarySort (proposto em 2004) também troca um pouco de espaço por tempo já "
"que tem uma complexidade de tempo de O(n log(n)) mas precisa armazenar um "
"pouco mais de dados."

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:54
msgid ""
"Wikipedia provides a detailled description of all these algorithms we cannot "
"present here because of time constraints."
msgstr ""
"A Wikipédia fornece uma descrição detalhada de cada um destes algoritmos que "
"não apresentamos aqui devido a limitações de tempo."

#. type: Content of: <h2>
#: src/lessons/sort/basic/shell/AlgShellSort.html:2
msgid "ShellSort"
msgstr "ShellSort"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/basic/shell/AlgShellSort.html:4
msgid ""
"This algorithm is named after its author, Donald Shell, who published it in "
"1959. It can be seen as an application of the CombSort idea (let elements "
"having a long path to travel take shortcuts) to the insertion sort (CombSort "
"is a variation of BubbleSort). Instead of comparing adjacent values during "
"the insertion sort, it compares values separated by a bigger gap. The bigger "
"the gap, the faster the elements are moved to their final destination, but "
"also the less precise is this move. It is thus mandatory to apply the "
"algorithm with a serie of decreasing gaps. At the last step, when the gap is "
"one, InsertionSort is used, but onto an array which is almost already sorted "
"by previous steps."
msgstr ""
"Este algoritmo é batizado em homenagem ao autor dele, Donald Shell, que o "
"publicou em 1959. Seja uma aplicação da ideia do CombSort (faz com que "
"elementos que tem um longo caminho tomarem atalhos) ao insertion sort ("
"CombSort é uma variação do BubbleSort). Ao invés de comparar valores "
"adjacentes durante o insertion sort, compara valores separados por um "
"intervalo maior. Quanto maior o intervalo, mais rápido os elementos se movem "
"ao destino deles, mas também menos preciso fica o movimento. É, portanto, "
"essencial que o algoritmo vá a ser aplicado numa série de intervalos cada "
"vez menor. No último passo, quando o intervalo for 1, o InsertionSort será "
"usado, mas numa array que estará praticamente ordenada pelos passos "
"anteriores."

#. type: Content of: <p>
#: src/lessons/sort/basic/shell/AlgShellSort.html:15
msgid ""
"Donald Shell propose <code>len/2</code> as initial value of the gap, and "
"then to divide it by 2 at each step. The pseudo-code is thus the following:"
msgstr ""
"Donald Shell propôs <code>len/2</code> como o valor inicial do intervalo e "
"ir a dividir por 2 a cada passo. O pseudo-código é o seguinte:"

#. type: Content of: <p><pre>
#: src/lessons/sort/basic/shell/AlgShellSort.html:18
#, no-wrap
msgid ""
"gap=len/2\n"
"while gap>0:\n"
"  apply InsertionSort, comparing i-gap and i, then i-2gap and i-gap, then "
"i-3gap and i-2gap, etc.\n"
msgstr ""
"gap=len/2\n"
"while gap>0:\n"
"  apply InsertionSort, comparing i-gap and i, then i-2gap and i-gap, then i-"
"3gap and i-2gap, etc.\n"

#. type: Content of: <p><p>
#: src/lessons/sort/basic/shell/AlgShellSort.html:23
msgid ""
"Just like in CombSort, the sequence of values taken by the gap is crucial "
"for Shell sort performance. In some rare pathological cases, the sequence we "
"used above can lead to a O(n^2) performance. Other sequences were proposed: "
"the Hibbard's increments of 2k − 1 lead to a complexity of O(n^(3/2)) in "
"worst cases. Pratt's increments 2^i3^j lead to a O(nlog(n)log(n) performance "
"in worst cases. The existance of a sequence leading to a O(n log(n)) was "
"precluded by Poonen, Plaxton, and Suel. Thanks to this performance, "
"ShellSort is a valid candidate for array of several hundred thousands when "
"correctly implemented."
msgstr ""
"Assim como no CombSort, a sequência de valores levados pelo intervalo é "
"crucial para o desempenho do Shell sort. Em alguns casos patológicos raros, "
"a sequência que usamos pode levar a um desempenho O(n^2). Outras sequências "
"foram propostas: os incrementos de Hibbard de 2k − 1 levam a uma "
"complexidade de O(n^(3/2)) em casos ruins. Incrementos de Pratt 2^i3^j levam "
"a um desempenho de O(nlog(n)log(n) nos piores casos. A existência de uma "
"sequência a levar a O(n log(n)) foi excluída por Poonen, Plaxton e Suel. "
"Graças a este desempenho, ShellSort é um candidato válido para arrays de "
"várias centenas de milhares quando corretamente implementado."

#. type: Content of: <p><p>
#: src/lessons/sort/basic/shell/AlgShellSort.html:33
msgid ""
"In our case, the array are ways too small to benefit of these "
"optimizations. If you ever need to do so, take as initial gap the biggest "
"value of the targeted serie still smaller than the array size, and then use "
"decreasing values of the serie."
msgstr ""
"No nosso caso, a array é pequena demais para se beneficiar destas "
"otimizações. Se ainda assim quiser, tome o intervalo inicial como o maior "
"valor da série alvo ainda menor que o tamanho do array e depois use valores "
"decrescentes da série."

#. type: Content of: <p><p>
#: src/lessons/sort/basic/shell/AlgShellSort.html:38
msgid ""
"Interestingly enough, determining the best gap sequence for shell sort turns "
"into a research issue of our century in computer science. For example, an "
"article of 2001 introduces the following sequence, which seems to be optimal "
"in practice for arrays of size up to 10^5: {1, 4, 10, 23, 57, 132, 301, 701, "
"1750} (Marcin Ciura, Best Increments for the Average Case of Shellsort, 13th "
"International Symposium on Fundamentals of Computation Theory, LNCS 2001; "
"Vol. 2138)."
msgstr ""
"Um fato interessante: Determinar a melhor sequência de intervalos para o "
"shell sort se tornou um tema de pesquisa de nosso século em ciência da "
"computação. Por exemplo, um artigo de 2001 introduz a seguinte sequência, "
"que parece ser a melhor na prática para arrays de tamanho até 10^5: {1, 4, "
"10, 23, 57, 132, 301, 701, 1750} (Marcin Ciura, Best Increments for the "
"Average Case of Shellsort, 13th International Symposium on Fundamentals of "
"Computation Theory, LNCS 2001; Vol. 2138)."

#. type: Content of: <h1>
#: src/lessons/sort/basic/selection/AlgSelectionSort.html:2
msgid "Selection Sort"
msgstr "Selection Sort"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/basic/selection/AlgSelectionSort.html:4
msgid ""
"In this exercise we will implement another classical algorithm: selection "
"sort."
msgstr ""
"Neste exercício vamos implementar outro algoritmo clássico: selection sort."

#. type: Content of: <p>
#: src/lessons/sort/basic/selection/AlgSelectionSort.html:7
msgid ""
"The idea is simply to select for each cell of the array the smallest value "
"from the part not already sorted. Thus for the first cell, it takes the "
"smallest value over the whole array. For the second one, it takes the second "
"smallest value, which is the smallest value from the cell not already "
"sorted. You of course don't have to sort the last cell of the array, that is "
"already sorted when you consider it."
msgstr ""
"A ideia é simplesmente selecionar para cada célula da array o menor valor da "
"parte ainda não ordenada. Então para a primeira célula, levamos o menor "
"valor da array toda. Para a segunda, precisamos do segundo menor valor, que "
"é o menor valor das células ainda não ordenadas."

#. type: Content of: <p><p>
#: src/lessons/sort/basic/selection/AlgSelectionSort.html:14
msgid ""
"More generally, for the cell N, it looks the cell M in [N;len] containing "
"the smallest possible value of the interval. Then, it swaps the content of "
"cell N with the one of cell M."
msgstr ""
"De forma mais geral, para a célula N, procura a célula M em [N;len] a conter "
"o menor valor possível do intervalo. Então, alterna o conteúdo da célula N "
"com o da célula M."

#. type: Content of: <p><p><h2>
#: src/lessons/sort/basic/selection/AlgSelectionSort.html:18
msgid "Existing variations"
msgstr "Variações existentes"

#. type: Content of: <p><p>
#: src/lessons/sort/basic/selection/AlgSelectionSort.html:19
msgid ""
"Another classical algorithm which idea is based on the selection of good "
"elements is HeapSort, but it uses a heap data structure which we did not see "
"yet. Simply remember that HeapSort provides a O(n log n) performance in "
"worst case, which is why it is a very interesting algorithm in practice."
msgstr ""
"Outro algoritmo clássico cuja ideia é baseada na seleção de bons elementos é "
"o HeapSort, mas usa uma estrutura de dados heap que ainda não vimos. "
"Simplesmente lembre-se que o HeapSort fornece um desempenho O(n log n) no "
"pior caso, que é o motivo para ser bem interessante, na prática."

#. type: Content of: <h1>
#: src/lessons/sort/basic/comb/AlgCombSort.html:2
msgid "CombSort"
msgstr "CombSort"

#. type: Content of: <p>
#: src/lessons/sort/basic/comb/AlgCombSort.html:4
msgid ""
"We saw that CocktailSort improve a bit for turtles (i.e. small values near "
"to the end of the array), but it is still possible to achieve "
"better. ComboSort comes down to providing them a short cut: instead of "
"comparing adjacent values, we compare values separated by a gap bigger than "
"1. That way, turtles will traverse <i>gap</i> cells at each "
"traversal. Naturally, we have to apply the algorithm with decreasing gaps, "
"and finish with <i>gap=1</i> to ensure that the array is correctly sorted "
"afterward. Choosing the right gap and how to decrease it is a difficult "
"question, but in practice, dividing it by 1.3 after each traversal leads to "
"good performance. Here is the corresponding pseudo-code:"
msgstr ""
"Vimos que CocktailSort melhora um pouco as coisas para as tartarugas (p.ex. "
"pequenos valores próximos do fim da array), mas ainda é possível fazer "
"melhor. ComboSort vem-les fornecer um atalho: ao invés de comparar valores "
"adjacentes, comparamos valores separados por um intervalo (\"gap\") maior "
"que 1. Desta forma, as tartarugas vão percorrer <i>gap</i> células em cada "
"passagem. Naturalmente, temos que aplicar o algoritmo com distâncias "
"decrescentes e terminar com <i>gap=1</i> para garantir que a array está "
"corretamente ordenada ao final. Escolher a distância correta e como diminuí-"
"la é uma questão difícil, mas na prática, dividir por 1.3 depois de cada "
"passagem leva a uma boa performance. Aqui está o pseudo-código "
"correspondente:"

#. type: Content of: <pre>
#: src/lessons/sort/basic/comb/AlgCombSort.html:16
#, no-wrap
msgid ""
"gap = len;\n"
"do\n"
"   if gap>1 then\n"
"     gap = gap / 1.3\n"
"   i = O\n"
"   while i+gap &lt; len do:\n"
"     if i and i+gap must be swapped, do it\n"
"     increase i by one\n"
"while the gap is bigger than 1 or the last traversal swapped at least one "
"pair\n"
msgstr ""
"gap = len;\n"
"do\n"
"   if gap>1 then\n"
"     gap = gap / 1.3\n"
"   i = O\n"
"   while i+gap &lt; len do:\n"
"     if i and i+gap must be swapped, do it\n"
"     increase i by one\n"
"while the gap is bigger than 1 or the last traversal swapped at least one "
"pair\n"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/basic/comb/AlgCombSort.html:27
#: src/lessons/maze/island/IslandMaze.html:67
#: src/lessons/welcome/bat/bool1/Max1020.html:6
msgid "[!scala]"
msgstr "[!scala]"

#. type: Content of: <p>
#: src/lessons/sort/basic/comb/AlgCombSort.html:27
msgid ""
"One tricky part is that we want to divide gap, that is an integer (of type "
"Int), by 1.3, that is a Double.  The type system of scala won't let us do "
"this, because such discrepancy usually denotes a programmer error.  As this "
"is not an error this time, we have to convert gap to Double for the time of "
"the operation, and then convert the result back to Int to store it into "
"gap. This should be written this way:"
msgstr ""
"Um detalhe perigoso é que temos que dividir o intervalo, que é um inteiro ("
"ou do tipo Int), por 1.3, que é um Double. O sistema de tipos do scala não "
"nos deixa fazer isto, por que tal discrepância normalmente significa um erro "
"de programação. Como isto não é um erro neste caso, vamos ter que converter "
"o intervalo para Double para o momento da operação e depois converter o "
"resultado de volta para Int para armazená-lo no intervalo. Isto deve ser "
"escrito desta forma:"

#. type: Content of: <pre>
#: src/lessons/sort/basic/comb/AlgCombSort.html:31
#, no-wrap
msgid "gap = (gap.asInstanceOf[Double] / 1.3).asInstanceOf[Int]"
msgstr "gap = (gap.asInstanceOf[Double] / 1.3).asInstanceOf[Int]"

#. type: Content of: <p>
#: src/lessons/sort/basic/comb/AlgCombSort.html:32
msgid ""
"This is rather verbose, but actually, this notation is not very complex. And "
"remember that the type checker is your friend. It's picky and sometimes "
"annoying (as on this one), but it often catches weird bugs that would have "
"been a pain to debug if not catch by the type checker. And since the Scala's "
"authors are pragmatic, the previous expression can be simplified:"
msgstr ""
"Isto é meio exagerado, mas, na verdade, esta notação não é muito complexa. E "
"lembre-se que o verificador de sintaxe é o seu amigo. Ás vezes é chato e "
"irritante (como neste caso), mas frequentemente apanha bugs esquisitos que "
"seriam trabalhosos para depurar se não fosse o verificador de sintaxe. E "
"como os autores do Scala são pragmáticos, a expressão anterior pode ser "
"simplificada:"

#. type: Content of: <pre>
#: src/lessons/sort/basic/comb/AlgCombSort.html:36
#, no-wrap
msgid "gap = (gap.toDouble / 1.3).toInt"
msgstr "gap = (gap.toDouble / 1.3).toInt"

#. type: Content of: <p>
#: src/lessons/sort/basic/comb/AlgCombSort.html:37
msgid ""
"<code>toDouble</code> and <code>toInt</code> are just shortcuts for the "
"corresponding expressions <code>asInstanceOf[Double]</code> and "
"<code>asInstanceOf[Int]</code>. It's not very generic, but it's very handy."
msgstr ""
"<code>toDouble</code> e <code>toInt</code> são apenas atalhos para as "
"expressões correspondentes <code>asInstanceOf[Double]</code> e "
"<code>asInstanceOf[Int]</code>. Não é muito genérico, mas é bem prático."

#. type: Content of: <p>
#: src/lessons/sort/basic/comb/AlgCombSort.html:41
msgid ""
"This algorithm was invented by Wlodek Dobosiewicz in 1980, and later "
"rediscovered and popularized by Stephen Lacey and Richard Box, who described "
"it in Byte Magazine in April 1991."
msgstr ""
"Este algoritmo foi inventado por Wlodek Dobosiewicz em 1980 e depois "
"redescoberto e popularizado por Stephen Lacey e Richard Box, que o "
"descreveram na Byte Magazine em Abril de 1991."

#. type: Content of: <h1>
#: src/lessons/sort/basic/comb/AlgCombSort11.html:2
msgid "CombSort11"
msgstr "CombSort11"

#. type: Content of: <p>
#: src/lessons/sort/basic/comb/AlgCombSort11.html:4
msgid ""
"The authors of this algorithm observed that the performance is increased if "
"we make sure that the last values of the gap are (11, 8, 6, 4, 3, 2, 1)  "
"rather than (9, 6, 4, 3, 2, 1) or (10, 7, 5, 3, 2, 1). Rework the code of "
"CombSort to ensure just after the gap update that if it is 9 or 10, we "
"should use 11 instead."
msgstr ""
"Os autores deste algoritmo observaram que o desempenho é aumentado se nos "
"certificarmos que os últimos valores do intervalo são (11, 8, 6, 4, 3, 2, 1) "
"ao invés de (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2, 1). Retrabalhe o código "
"do CombSort para garantir que apenas depois da atualização do intervalo que "
"se for 9 ou 10, devemos usar 11."

#. type: Content of: <h1>
#: src/lessons/sort/basic/gnome/AlgGnomeSort.html:2
msgid "GnomeSort"
msgstr "GnomeSort"

#. type: Content of: <p>
#: src/lessons/sort/basic/gnome/AlgGnomeSort.html:4
msgid ""
"The Gnome sort is similar to insertion sort, but the elements are moved in "
"position by a serie of swaps just like in bubble sort. It is named after the "
"supposed behavior of garden gnomes when they sort flower pots. Here is a "
"description of the algorithm by its author:"
msgstr ""
"O Gnome sort é similar ao insertion sort, mas os elementos são movidos de "
"poisção por uma série de trocas que se parecem com o bubble sort. O nome "
"veio do suposto comportamento que gnomos de jardim tem quando ordenam vasos "
"de flores. Aqui está uma descrição do algoritmo pelo autor dele:"

#. type: Content of: <p>
#: src/lessons/sort/basic/gnome/AlgGnomeSort.html:9
msgid ""
"Gnome Sort is based on the technique used by the standard Dutch Garden Gnome "
"(Du.: tuinkabouter). Here is how a garden gnome sorts a line of flower "
"pots. Basically, he looks at the flower pot next to him and the one "
"immediately after ; if they are in the right order he steps one pot forward, "
"otherwise he swaps them and steps one pot backwards. Boundary conditions: if "
"there is no previous pot, he steps forwards; if there is no pot next to him, "
"he is done.  <i>—Dick Grune</i>"
msgstr ""
"Gnome Sort é baseado na técnica usada pelo gnomo de jardim holandês padrão ("
"em holandês: tuinkabouter). Aqui está como um gnomo de jardim ordena uma "
"fileira de potes de flores. Basicamente, procura pelo pote de flor próximo e "
"o anterior; se estão na ordem correta vai para a frente em direção ao "
"próximo pote, caso contrário troca os potes e vai para trás. Condições de "
"contorno: se não existe um pote anterior,  vai para a frente; se não existe "
"um pote próximo, termina.  <i>—Dick Grune</i>"

#. type: Content of: <h1>
#: src/lessons/sort/dutchflag/Main.html:2
#: src/lessons/sort/dutchflag/short_desc.html:2
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:2
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:2
msgid "The Dutch Flag Problem"
msgstr "O problema da bandeira holandesa"

#. type: Content of: <p>
#: src/lessons/sort/dutchflag/Main.html:4
msgid ""
"This problem was first proposed by E.W Dijkstra in 1976 (in the chapter 14 "
"of his book \"A Discipline of Programming\").  It is a very classical "
"variation of the sorting algorithms since then. It is sometimes useful in "
"real life, but it became famous for its pedagogical properties: its "
"complexity is not trivial, but not complex either.  It can easily be "
"formally proven, but it's not absolutely trivial either."
msgstr ""
"Este problema foi proposto primeiro por E.W Dijkstra em 1976 (no capítulo 14 "
"do livro dele \"A Discipline of Programming\"). É uma variação clássica de "
"algoritmos de ordenação desde então. Às vezes é útil na realidade, mas se "
"tornou famosos pelas propriedades pedagógicas dele: a complexidade não é "
"trivial, mas não é muito complexo. Pode ser provados formalmente com "
"facilidade, mas não é de forma alguma trivial."

#. type: Content of: <ul><li>
#: src/lessons/sort/dutchflag/Main.html:13
msgid "A temporal view could be welcomed."
msgstr "Uma visão temporal pode ser bem-vinda."

#. type: Content of: <ul><li>
#: src/lessons/sort/dutchflag/Main.html:14
msgid ""
"Other exercises, for example with 2 colors only or with more than 3 colors, "
"could generalize the proposed approach."
msgstr ""
"Outros exercícios, por exemplo com 2 cores apenas ou com mais de 3 cores, "
"podem generalizar a abordagem proposta."

#. type: Content of: <ul><li>
#: src/lessons/sort/dutchflag/Main.html:15
msgid "This problem could be solved recursively."
msgstr "Este problema pode ser resolvido recursivamente."

#. type: Content of: <p>
#: src/lessons/sort/dutchflag/short_desc.html:4
msgid ""
"This is a classical sorting problem, constituting a variation over the "
"insertion sort."
msgstr ""
"Este é um problema de ordenação clássico, a constituir uma variação do "
"insertion sort."

#. type: Content of: <p>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:4
msgid ""
"Your work is to sort all the colors of the Dutch flag, and the only provided "
"primitive is to exchange two given lines.  In addition, you should not "
"create any additional variables (but a few indices)."
msgstr ""
"O seu trabalho é ordenar todas as cores da bandeira holandesa e a única "
"primitiva fornecida é trocar duas linhas dadas. Adicionalmente, não deve "
"criar quaisquer variáveis adicionais (exceto alguns índices)."

#. type: Content of: <p>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:7
msgid ""
"If you think carefully, this can be done in linear time, where you sort a "
"line at each iteration of the loop.  You may want to check again the <a "
"href=\"plm://lessons.sort.basic/insertion.AlgInsertionSort\">insertion "
"sort</a>, of which the Dutch Flag sort is a variation. The main difference "
"is that you have 3 insertion points, not only one..."
msgstr ""
"Se pensar bem, pode ser feito em tempo linear, ondeordena uma linha a cada "
"iteração do loop. Pode dar mais uma olhada no <a href=\"plm://lessons.sort."
"basic/insertion.AlgInsertionSort\">insertion sort</a>, do qual o Dutch Flag "
"sort é uma variação. A principal diferença é que tem 3 pontos de inserção e "
"não apenas um..."

#. type: Attribute 'alt' of: <div>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:11
msgid "I need an hint to start"
msgstr "Preciso de uma dica para começar"

#. type: Content of: <div>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:12
msgid "Do a traversal over your data, saving 3 indices:"
msgstr "Atravesse os seus dados, a guardar 3 índices:"

#. type: Content of: <div><ul><li>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:14
msgid ""
"<code>afterBlue</code> is initialized to 0. Make sure that every cell below "
"<code>afterBlue</code> is filled with blue elements."
msgstr ""
"<code>afterBlue</code> é iniciado como 0. Certifique-se de que cada célula "
"abaixo de <code>afterBlue</code> é preenchida com elementos azuis."

#. type: Content of: <div><ul><li>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:15
msgid ""
"<code>whiteRed</code> is initialized to size-1. Make sure that every cell "
"after <code>whiteRed</code> is filled with red elements."
msgstr ""
"<code>whiteRed</code> é iniciado como size-1. Certifique-se de que cada "
"célula depois de <code>whiteRed</code> é preenchida com elementos vermelhos."

#. type: Content of: <div><ul><li>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:16
msgid ""
"<code>beforeWhite</code> is initialized to size-1. Make sure that every cell "
"after <code>beforeWhite</code> and before <code>whiteRed</code> is filled "
"with white elements."
msgstr ""
"<code>beforeWhite</code> é iniciado com size-1. Certifiqeu-se de que cada "
"célula depois de <code>beforeWhite</code> e antes de <code>whiteRed</code> é "
"preenchida com elementos brancos."

#. type: Content of: <div>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:18
msgid ""
"Note that the unsorted cells are always between <code>afterBlue</code> and "
"<code>beforeWhite</code>."
msgstr ""
"Observe que as células não-ordenadas ficam sempre entre <code>afterBlue</"
"code> e <code>beforeWhite</code>."

#. type: Content of: <div>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:20
msgid ""
"At each step of your traversal, check the color of the cell at "
"<code>afterBlue</code> and do the required exchanges.  The loop ending "
"condition is when <code>afterBlue</code> becomes larger than "
"<code>beforeWhite</code>."
msgstr ""
"Em cada passo da sua travessia, verifique a cor da célula em "
"<code>afterBlue</code> e faça as mudanças necessárias. A condição de fim de "
"loop é quando <code>afterBlue</code> se torna maior que "
"<code>beforeWhite</code>."

#. type: Content of: <h2>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:4
msgid "Provided values"
msgstr "Valores fornecidos"

#. type: Content of: <p>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:6
msgid ""
"The colors are represented through the following constants: BLUE, WHITE and "
"RED.  You can use them directly in your code."
msgstr ""
"As cores são representadas através das seguintes constantes: BLUE, WHITE e "
"RED. Pode usá-las diretamente no seu código."

#. type: Content of: <h2>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:9
#: src/lessons/lander/universe/DelegatingLanderWorld.html:8
msgid "Provided functions"
msgstr "Funções fornecidas"

#. type: Content of: <p>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:11
msgid "This world is very simple, with only 5 provided functions."
msgstr "Este mundo é bem simples, com apenas 5 funções fornecidas."

#. type: Content of: <pre>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:13
#, no-wrap
msgid ""
"[!java|c]void [/!]swap([!java|c]int [/!]x[!scala]:Int[/!], [!java|c]int "
"[/!]y[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!]alterna([!java|c]int [/!]x[!scala]:Int[/!], [!java|c]int "
"[/!]y[!scala]:Int[/!])"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:14
msgid "Swap the lines number <code>x</code> and <code>y</code>."
msgstr ""
"Troca as linhas de número <code>x</code> com a de número <code>y</code>."

#. type: Content of: <pre>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:16
#, no-wrap
msgid "[!java|c]int [/!]getSize() [!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getSize() [!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:17
msgid "Returns the amount of lines on this flag."
msgstr "Retorna a quantidade de linhas desta bandeira."

#. type: Content of: <pre>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:19
#, no-wrap
msgid ""
"[!java|c]int [/!]getColor([!java|c]int [/!]line[!scala]:Int[/!])  "
"[!scala]:Int[/!]"
msgstr ""
"[!java|c]int [/!]getCor([!java|c]int [/!]linha[!scala]:Int[/!])  "
"[!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:20
msgid "Returns the color of the given line."
msgstr "Retorna a cor da linha dada."

#. type: Content of: <pre>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:22
#: src/lessons/sort/baseball/universe/BaseballWorld.html:31
#, no-wrap
msgid "[!java]boolean [/!][!c]int [/!]isSorted()  [!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isSorted()  [!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:23
msgid "Returns whether the flag is sorted."
msgstr "Retorna true se a bandeira estiver ordenada."

#. type: Content of: <pre>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:25
#: src/lessons/sort/baseball/universe/BaseballWorld.html:37
#, no-wrap
msgid "[!java]boolean [/!][!c]int [/!]isSelected()  [!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isSelected()  [!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:26
#: src/lessons/sort/baseball/universe/BaseballWorld.html:38
msgid "Returns whether the current world is selected in the interface."
msgstr "Retorna true se o mundo atual estiver selecionado na interface."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:2
msgid "PancakeWorld"
msgstr "PancakeWorld"

#. type: Content of: <p>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:4
msgid "This universe is very simple, with only five functions provided."
msgstr "Este universo é bastante simples, com apenas cinco funções fornecidas."

#. type: Content of: <pre>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:6
#, no-wrap
msgid "[!java|c]int [/!]getStackSize()  [!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getStackSize()  [!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/pancake/universe/PancakeWorld.html:7
msgid "Returns the size of the stack, that is the amount of pancakes it contains."
msgstr "Retorna o tamanho da pilha, ou seja, a quantidade de panquecas nela."

#. type: Content of: <pre>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:9
#, no-wrap
msgid ""
"[!java|c]int [/!]getPancakeRadius([!java|c]int [/!]rank[!scala]:Int[/!])  "
"[!scala]:Int[/!]"
msgstr ""
"[!java|c]int [/!]getRaioPanqueca([!java|c]int [/!]rank[!scala]:Int[/!])  "
"[!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/pancake/universe/PancakeWorld.html:10
msgid ""
"Returns the radius of the pancake passed as argument, with the rank of the "
"top-most pancake being 0."
msgstr ""
"Retorna o raio da panqueca passado como argumento, com o rank da panqueca "
"mais acima a ser 0."

#. type: Content of: <pre>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:12
#, no-wrap
msgid ""
"[!java]boolean [/!][!c]int [/!]isPancakeUpsideDown([!java|c]int "
"[/!]rank[!scala]:Int[/!])   [!scala]:Boolean[/!]"
msgstr ""
"[!java]boolean [/!][!c]int [/!]panquecaDeCabeçaPraBaixo([!java|c]int "
"[/!]rank[!scala]:Int[/!])   [!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/pancake/universe/PancakeWorld.html:13
msgid ""
"Returns whether the pancake passed as argument upside-down, that is, if its "
"burned side is on top. As usual, the top-most pancake is of rank 0."
msgstr ""
"Retorna se a panqueca passada como argumento está de cabeça para baixo, ou "
"seja, se o lado queimado está para cima. Como sempre, a panqueca mais acima "
"é a de rank 0."

#. type: Content of: <pre>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:15
#, no-wrap
msgid "[!java|c]void [/!]flip([!java|c]int [/!]amount[!scala]:Int[/!])"
msgstr "[!java|c]void [/!]flip([!java|c]int [/!]amount[!scala]:Int[/!])"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/pancake/universe/PancakeWorld.html:16
msgid ""
"Flips the <code>amount</code> first pancakes composing the stack, from the "
"top of it."
msgstr ""
"Vira as primeiras <code>amount</code> panquecas que compõe a pilha, do topo "
"dela."

#. type: Content of: <pre>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:18
#, no-wrap
msgid "[!java]boolean [/!][!c]int [/!]isSorted()   [!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isSorted()   [!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/pancake/universe/PancakeWorld.html:19
msgid "Returns whether the pancake stack is correctly sorted."
msgstr "Retorna true se a pilha de panquecas estiver corretamente ordenada."

#. type: Content of: <pre>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:21
#, no-wrap
msgid "[!java]boolean [/!][!c]int [/!]isSelected()   [!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isSelected()   [!scala]:Boolean[/!]"

#. type: Content of: <h1>
#: src/lessons/sort/pancake/Main.html:2
#: src/lessons/sort/pancake/BasicPancake.html:2
msgid "Pancake Sorting"
msgstr "Ordenação da panqueca"

#. type: Content of: <p>
#: src/lessons/sort/pancake/Main.html:4
msgid ""
"This activity is inspired by a problem first introduced in 1975 by Harry "
"Dweighter in the American Mathematical Monthly. The question is not only to "
"sort the pancakes, but to determine <code>f(n)</code> the <i>minimal</i> "
"amount of flips mandated to sort any stack of size <code>n</code>."
msgstr ""
"Esta atividade é inspirada por um problema introduzido pela primeira vez em "
"1975 por Harry Dweighter no American Mathematical Monthly. A pergunta não é "
"apenas ordenar panquecas, mas determinar <code>f(n)</code> a quantidade "
"<i>minima</i> de viradas necessárias para ordenar qualquer pilha de tamanho "
"<code>n</code>."

#. type: Content of: <p>
#: src/lessons/sort/pancake/Main.html:8
msgid ""
"This problem is now famous because Bill Gates authored (with "
"C. Papadimitriou) his only scientific publication in 1979 on this topic, "
"providing a faster algorithm and proving that <code>17n/16 ≤ f(n) ≤ "
"(5n+5)/3</code>.  This was the only publication of Bill Gates before he "
"invented Windows and became rich."
msgstr ""
"Este problema é agora famoso por que Bill Gates escreveu (com C. "
"Papadimitriou) a única publicação científica dele em 1979 neste tópico, a "
"fornecer um algoritmo mais rápido e a provar que <code>17n/16 ≤ f(n) ≤ "
"(5n+5)/3</code>.  Este foi a única publicação de Bill Gates antes dele "
"inventar o Windows e ficar rico."

#. type: Content of: <p>
#: src/lessons/sort/pancake/Main.html:12
msgid ""
"Then, David X. Cohen, the inventor of the Futurama comics with many "
"mathematical references, introduced the variant with burnt pancakes and "
"studied its complexity with Manuel Blum in 1993."
msgstr ""
"Então, David X. Cohen, o inventor dos quadrinhos Futurama com muitas "
"referências matemáticas, introduziu a variante com panquecas queimadas e "
"estudou a complexidade dele com Manuel Blum em 1993."

#. type: Content of: <p>
#: src/lessons/sort/pancake/Main.html:15
msgid ""
"An article of 2011 (by L. Bulteau, G. Fertin and I. Rusu) proved that "
"determining the minimal amount of flips to sort the stack is a NP-complete "
"problem. Naturally, the stack sorting problem is not NP-complete since it "
"can be solved in 2n-3 steps with the naive algorithm and (5n+5)/3 steps with "
"the Gates algorithm.  That's determining the minimal amount of steps that is "
"NP."
msgstr ""
"Um artigo de 2011 (por L. Bulteau, G. Fertin e I. Rusu) provou que "
"determinar a quantidade mínima de voltas para ordenar a pilha é um problema "
"NP-completo. Naturalmente, o problema de ordenação da pilha não é NP-"
"completo já que pode ser resolvido em 2n-3 passos com o algoritmo ingénuo e "
"(5n+5)/3 passos com o algoritmo Gates.  Isso é determinar a quantidade "
"mínima de passos que é NP."

#. type: Content of: <p>
#: src/lessons/sort/pancake/Main.html:20
msgid "Further information can be found on the wikipedia page, as usual."
msgstr "Mais informações encontram-se na página da wikipédia, como sempre."

#. type: Content of: <p>
#: src/lessons/sort/pancake/Main.html:23
msgid ""
"This activity is also integrated to CSIRL (my repository of <i>free</i> "
"unplugged activities to introduce computer science, available at "
"http://www.loria.fr/~quinson/Mediation/SMN/), and it may be interesting to "
"run the unplugged activities before implementing these algorithms in PLM."
msgstr ""
"Esta atividade também é integrada ao CSIRL (o meu repositório de atividades "
"offline <i>livres</i> para introdução de ciência da computação, disponível "
"em http://www.loria.fr/~quinson/Mediation/SMN/) e pode ser interessante "
"executar as atividades offline antes de implementar estes algoritmos no PLM."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/Main.html:34
msgid "A temporal view similar to the sorting universe could be helpful"
msgstr "Uma visão temporal similar ao universo da ordenação pode ser útil"

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/Main.html:35
msgid ""
"Other exercises, for example on the Roti sorting, with a pile of Roti that "
"have to touch the grill on each face (see "
"http://en.wikipedia.org/wiki/Pancake_sorting#The_identical_pancake_stack)."
msgstr ""
"Outros exercícios, por exemplo sobre Roti sorting, com uma pilha de Roti que "
"tem que tocar a grelha em ambos os lados (see http://en.wikipedia.org/wiki/"
"Pancake_sorting#The_identical_pancake_stack)."

#. type: Content of: <h3>
#: src/lessons/sort/pancake/short_desc.html:2
msgid "The pancake problem"
msgstr "O problema da panqueca"

#. type: Content of: <p>
#: src/lessons/sort/pancake/short_desc.html:4
msgid "Help the poor psychorigid pancakes' chef to sort its pancake stack!"
msgstr ""
"Ajude o pobre chef das panquecas psychorigid a ordenar a pilha de panquecas "
"dele!"

#. type: Content of: <p>
#: src/lessons/sort/pancake/short_desc.html:6
msgid ""
"This funny problem leads to algorithms that are somewhat more challenging to "
"implement. You are supposed to master the bases of programming and some "
"sorting algorithms to take this lesson."
msgstr ""
"Este problema divertido leva a algoritmos que são de certa forma mais "
"desafiadores de implmentar. Espera-se que domine as bases da programação e "
"de algoritmos de ordenação para fazer esta lição."

#. type: Content of: <p>
#: src/lessons/sort/pancake/BasicPancake.html:4
msgid ""
"The pancake sorting problem is a simple puzzle where you have a set of "
"pancakes, each of differing size. The chef cooking the pancake is a bit "
"psychorigid: he hates when the pancakes are not correctly sorted on the "
"plate. He loves when they are correctly ordered, with the small ones over "
"the larger ones. As every pancake maker, he masters the pancake flipping "
"with his spatula. He can flip the pancake on top of the stack, or even "
"several pancakes at once. The thing is that he has only one plate and the "
"table is too dirty to place pancakes on it, even temporary. The only allowed "
"operation is to flip some pancakes that are on top of the stack."
msgstr ""
"O problema da ordenação da panqueca é um quebra-cabeças simples onde tem um "
"conjunto de panquecas, cada uma de tamanhos diferentes. O cozinheiro que "
"cozinha as panquecas é um pouco psicorígido: odeia quando as panquecas não "
"estão corretamente ordenadas no prato. Adora quando elas estão corretamente "
"ordenadas, com as pequenas sobre as grandes. Como todo fazedor de panquecas, "
"é mestre em virar a panqueca com a espátula. Ele pode virar a panqueca do "
"topo da pilha, ou até mesmo várias panquecas de uma vez. O problema é que "
"tem apenas um prato e a mesa está muito suja para pôr as panquecas nela, "
"mesmo temporariamente. A única operação permitida é virar algumas panquecas "
"que estão no topo da pilha."

#. type: Content of: <p>
#: src/lessons/sort/pancake/BasicPancake.html:13
msgid ""
"Your work is to help this poor guy sorting his stack by flipping the "
"pancakes. Each pancake is defined by its radius and rank within the stack, "
"with the top-most pancake is at rank 0, and the one below at rank 1."
msgstr ""
"O seu trabalho é ajudar este pobre coitado a ordenar a pilha dele a virar as "
"panquecas. Cada panqueca é definida pelo raio e rank dentro da pilha, onde a "
"panqueca de cima está com rank 0 e a próxima com rank 1."

#. type: Content of: <p>
#: src/lessons/sort/pancake/BasicPancake.html:17
msgid ""
"Note that you can play physically with pieces of paper or wood at first to "
"get the grasp on this problem. This is even one of the activities that I use "
"in my CS-IRL (computer science in real life) project to introduce the "
"concept of algorithm to absolute beginners that wonder about our "
"science. More information at http://www.loria.fr/~quinson/Mediation/SMN/ (in "
"French)."
msgstr ""
"Observe que pode brincar primeiro fisicamente com pedaços de papel ou "
"madeira para ter a ideia do problema. Esta é inclusive uma das atividades "
"que uso no meu projeto CS-IRL (computer science in real life - ciência da "
"computação na vida real) para introduzir o conceito de algoritmo para "
"completos iniciantes que querem saber da nossa ciência. Mais informações em "
"http://www.loria.fr/~quinson/Mediation/SMN/ (em francês)."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/sort/pancake/BasicPancake.html:23
#: src/lessons/sort/pancake/BubblePancake.html:10
msgid "I don't get it. I need some help."
msgstr "Não compreendi. preciso de ajuda."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/BasicPancake.html:24
msgid ""
"You should try to first move the largest pancake to the bottom, and then the "
"largest but one pancake on top of it, and then the one just smaller on top, "
"and so on."
msgstr ""
"Deve tentar primeiro mover a maior panqueca para o fundo e depois a segunda "
"maior para cima dela e depois a menor para o topo e assim por diante."

#. type: Attribute 'alt' of: <p><p><div>
#: src/lessons/sort/pancake/BasicPancake.html:28
#: src/lessons/sort/pancake/BubblePancake.html:13
msgid "The first tip was not enough. I need another one."
msgstr "A primeira dica não foi suficiente. Preciso de outra."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/BasicPancake.html:29
msgid "So first, you need to move the largest pancake at the bottom of the stack."
msgstr ""
"Logo, em primeiro lugar precisa mover a maior panqueca para o fundo da pilha."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/BasicPancake.html:30
msgid ""
"Can you imagine a situation in which you can easily bring this damn large "
"pancake to the bottom?"
msgstr ""
"Pode imaginar uma situação onde possa facilmente trazer esta panqueca super-"
"grande para o fundo?"

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/BasicPancake.html:31
msgid "How could you reach this situation from the current one?"
msgstr "Como pode atingir esta situação a partir da atual?"

#. type: Content of: <h1>
#: src/lessons/sort/pancake/BubblePancake.html:2
msgid "Bubble Pancakes"
msgstr "Bubble Pancakes"

#. type: Content of: <p>
#: src/lessons/sort/pancake/BubblePancake.html:4
msgid ""
"This problem is similar to the previous: you have to sort the pancakes, the "
"smallest at the top and the biggest at the bottom, except you can only flip "
"them to sort."
msgstr ""
"Este problema é similar ao anterior: tem que ordenar as panquecas, a menor "
"no topo e a maior embaixo, mas só pode virar-las para ordená-las."

#. type: Content of: <p>
#: src/lessons/sort/pancake/BubblePancake.html:6
msgid ""
"The purpose here is to sort them using the bubble algorithm, where one "
"pancake is moved to the bottom until it encounters a bigger one. In "
"graphical representations, it looks like a bubble takes the element and move "
"them through the pile. This is where its name comes from."
msgstr ""
"O objetivo aqui é ordená-los a usar o algoritmo da bolha (bubble), onde uma "
"panqueca é movida ao fundo até encontrar uma maior que ela. Em "
"representações gráficas, parece que uma bolha ocupa o lugar do elemento e "
"move-o através da pilha. É daí que saiu o nome do algoritmo."

#. type: Content of: <p>
#: src/lessons/sort/pancake/BubblePancake.html:8
msgid ""
"Now, using pancakes makes it a little more difficult to write, because you "
"have to find a way to swap only two pancakes at a time."
msgstr ""
"Agora, a usar panquecas torna as coisas um pouco mais difíceis de escrever, "
"pois tem que encontrar uma forma de alternar apenas duas panquecas por vez."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/BubblePancake.html:11
msgid ""
"The bubble algorithm consists in browsing the whole pile from top to bottom, "
"and making a comparision between two pancakes. Each time the top pancake is "
"bigger than the one below, you have to swap them, then compare the bigger "
"pancake you just swapped with one below, and so on. You have to browse "
"through the entire pile until no swap has occurred, in which case the pile "
"is sorted."
msgstr ""
"O Algoritmo da bolha consiste em navegar a pilha completa de cima para baixo "
"e a fazer uma comparação entre duas panquecas. Cada vez que a panqueca de "
"cima é maior que a de baixo, tem que alterná-las, então comparar a panqueca "
"maior que acabou de alternar com a de baixo dela e por aí vai. Tem que "
"navegar através de toda a pilha até que nenhuma troca ocorra e neste caso, a "
"pilha estará ordenada."

#. type: Content of: <p><p><div>
#: src/lessons/sort/pancake/BubblePancake.html:14
msgid ""
"If you don't understand the basic bubble sorting algorithm, you should try "
"the exercises within the “Sorting algorithms” lesson. If you do, but can't "
"figure a way to swap only two pancakes at a time, think of a situation where "
"only two pancakes are swapped at a time, and find a way to reach that "
"situation."
msgstr ""
"Se não entende o algoritmo básico bubble sort, tente os exercícios da lição "
"Algoritmos de Ordenação. Se consegue, mas não imagina uma forma de alternar "
"apenas duas panquecas por vez, pense na situação onde apenas duas panquecas "
"são alternadas por vez e encontre uma forma de chegar nesta situação."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/BurnedPancake.html:2
msgid "Burned Pancakes"
msgstr "Panquecas queimadas"

#. type: Content of: <p>
#: src/lessons/sort/pancake/BurnedPancake.html:4
msgid ""
"Hard blow for the chef! The pancakes got burnt on one side! There is no way "
"he can deliver a stack of pancakes with visibly burnt pancakes! You've got "
"to help him ensuring that no pancake is upside-down while sorting his stack."
msgstr ""
"Hard blow for the chef! As panquecas queimaram de um lado! Não há forma de "
"entregar uma pilha de panquecas com paquecas visivelmente queimadas! Tem que "
"ajudá-lo a ter certeza de que nenhuma panqueca está de cabeça pra baixo "
"enquanto ordena esta pilha."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/GatesPancake.html:2
msgid "Faster Pancake Sorting"
msgstr "Ondenação de Panqueca Rápida"

#. type: Content of: <p>
#: src/lessons/sort/pancake/GatesPancake.html:4
msgid ""
"Unlike others sorting problem, the expensive operation is not the comparison "
"of values, but the flipping of pancakes. In this exercise, we will explore "
"another algorithm that attempt to reduce the amount of stack flipping. The "
"funny side is that this algorithm was first introduced by Bill Gates, before "
"invented Windows."
msgstr ""
"Ao contrário de outros problemas de ordenação, a operação cara não é a "
"comparação de valores, mas virar as panquecas. Neste exercício, vamos "
"explorar outro algoritmo que tenta reduzir a quantidade de viradas da pilha. "
"O engraçado é que este algoritmo mostrado primeiro por Bill Gates, antes de "
"inventar o Windows."

#. type: Content of: <p>
#: src/lessons/sort/pancake/GatesPancake.html:9
msgid ""
"The basic idea is to grow sequences of sorted pancakes, not necessarily "
"starting from the bottom.  We say that a sequence of ordered pancakes "
"constitute a <b>block</b> while a pancake that is not part of a block is "
"said to be <b>free</b>. The algorithm then considers the topmost pancake (of "
"radius <code>t</code>) and search for the <code>t+1</code> or "
"<code>t-1</code> pancakes (the considered neighbor is noted "
"<code>t+o</code>). Eight cases may happen:"
msgstr ""
"A ideia básica é aumentar as sequências de panquecas ordenadas, não "
"necessariamente a começar do fundo. Dizemos que uma sequência de panquecas "
"ordenadas constitui um <b>bloco</b> enquanto uma panqueca que não é parte de "
"um bloco é dita <b>livre</b>. O algoritmo então considera o panqueca mais de "
"cima (de raio <code>t</code>) e busca pelas panquecas <code>t+1</code> ou "
"<code>t-1</code> (a vizinhança considerada é <code>t+o</code>). Oito casos "
"podem acontecer:"

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:16
msgid ""
"<b>Case a</b>: Both <code>t</code> and <code>t+o</code> are free. They are "
"then merged in one flip."
msgstr ""
"<b>Caso a</b>: tanto <code>t</code> quanto <code>t+o</code> são livres. elas "
"são então juntadas numa virada."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:20
msgid ""
"<b>Case b</b>: <code>t</code> is free, and <code>t+o</code> is the first of "
"a block. They are merged in one flip."
msgstr ""
"<b>Caso b</b>: <code>t</code> é livre e <code>t+o</code> é o primeiro de um "
"bloco. Eles são juntados numa virada."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:25
msgid ""
"<b>Case c</b>: <code>t</code> is free but both <code>t-1</code> and "
"<code>t+1</code> are the last elements of blocks.  Both blocks and "
"<code>t</code> are merged all together in 4 flips.  Beware, if either "
"<code>t-1</code> or <code>t+1</code> does not exist (because <code>t</code> "
"is 0 or max), only two flips are mandated."
msgstr ""
"<b>Caso c</b>: <code>t</code> é livre mas tanto <code>t-1</code> quanto "
"<code>t+1</code> são últimos elementos de blocos. Os blocos e <code>t</code> "
"são mesclados juntos em 4 viradas. Cuidado, se <code>t-1</code> ou "
"<code>t+1</code> não existir (pois <code>t</code> é 0 ou max), apenas duas "
"viradas são obrigatórias."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:33
msgid ""
"<b>Case d</b>: <code>t</code> is in a block but <code>t+o</code> is "
"free. They are merged in one flip."
msgstr ""
"<b>Caso d</b>: <code>t</code> está num bloco mas <code>t+o</code> é livre. "
"Eles são mesclados numa virada."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:38
msgid ""
"<b>Case e</b>: <code>t</code> is in a block and <code>t+o</code> is the "
"first element of a block. They are merged in one flip."
msgstr ""
"<b>Caso e</b>: <code>t</code> está num bloco e <code>t+o</code> é o primeiro "
"elemento de um bloco. Eles são mesclados numa virada."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:42
msgid ""
"<b>Case f</b>: <code>t</code> is in a block and <code>t+o</code> is the last "
"element of another block.  They are merged in 3 flips as follows."
msgstr ""
"<b>Caso f</b>: <code>t</code> está num bloco e <code>t+o</code> é o último "
"elemento de outro bloco. Eles são mesclados em 3 viradas como segue."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:46
msgid ""
"<b>Case g</b>: <code>t</code> is in a block of length k+1 (the last element "
"is <code>t+ko</code>), <code>t+(k+1)o</code> is either free or the last "
"element of another block. Both blocks are merged in 2 flips:"
msgstr ""
"<b>Caso g</b>: <code>t</code> está num bloco de comprimento k+1 (o último "
"elemento é <code>t+ko</code>), <code>t+(k+1)o</code> é tanto livre ou o "
"último elemento é outro bloco. Ambos os blocos são mesclados em 2 viradas:"

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:49
msgid ""
"<b>Case h</b>: <code>t</code> is in a block of length k+1 (the last element "
"is <code>t+ko</code>), <code>t+(k+1)o</code> is the first element of another "
"block (the difference with case g is that <code>t+(k+1)o</code> is now the "
"<i>first</i> element of its block). Both blocks are merged in 2 flips:"
msgstr ""
"<b>Caso h</b>: <code>t</code> está num bloco de comprimento k+1 (o último "
"elemento é <code>t+ko</code>), <code>t+(k+1)o</code> é o primeiro elemento "
"de outro bloco (a diferença com o caso g é que <code>t+(k+1)o</code> é agora "
"o <i>primeiro</i> elemento do bloco dele). Ambos os blocos são mesclados em "
"2 viradas:"

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/GatesPancake.html:55
msgid ""
"<b>Case i</b>: <code>t</code> is in a block of length <code>n</code> (this "
"block contains all pancakes).  If <code>t</code> is not 1, the whole stack "
"is fliped. The algorithm then stops."
msgstr ""
"<b>Caso i</b>: <code>t</code> está num bloco de comprimento <code>n</code> ("
"este bloco contém todas as panquecas). Se <code>t</code> não for 1, a pilha "
"toda destá virada. O algoritmo então pára."

#. type: Content of: <p>
#: src/lessons/sort/pancake/GatesPancake.html:58
msgid ""
"Each iteration increases the size of the blocks, so the algorithm eventually "
"halts in all cases. A finer analysis would show that it takes at most "
"<code>(5n+5)/3</code> steps to sort the stack. That's better than the naïve "
"algorithm, that requires 2n-3 steps."
msgstr ""
"Cada iteração aumenta o tamanho dos blocos, então o algoritmo eventualmente "
"pára em todos os casos. Uma análise mais aprofundada mostrará que leva no "
"máximo <code>(5n+5)/3</code> passos para ordenar a pilha. O que é melhor que "
"o algoritmo simplório, que precisa de 2n-3 passos."

#. type: Content of: <h2>
#: src/lessons/sort/pancake/GatesPancake.html:61
msgid "Your turn"
msgstr "É a sua vez"

#. type: Content of: <p>
#: src/lessons/sort/pancake/GatesPancake.html:62
msgid ""
"You now have almost enough information to implement this algorithm on your "
"own. We just have to remove the last remaining ambiguities to ensure that "
"you implement exactly the same algorithm that the correction. If several "
"cases apply to your situation, then you should use the first given one. For "
"example, if both cases a and b apply (e.g., with <code>t-1</code> on case "
"<b>a</b> and <code>t+1</code> on case <b>b</b>), then you should apply the "
"flips of case <b>a</b>. If a given case applies for both <code>t+1</code> "
"and <code>t-1</code>, then you should apply it to <code>t+1</code>."
msgstr ""
"Agora tem quase toda a informação necessária para implementar este algoritmo "
"por si só. Temos apenas que remover as últimas ambiguidades para garantir "
"que implemente o mesmo algoritmo que a correção. Se vários casos se aplicam "
"à sua situação, deve usar o primeiro que foi dado. Por exemplo, se tanto o "
"caso a quanto o caso b se aplicam (e.g., com <code>t-1</code> no <b>a</b> e "
"<code>t+1</code> no caso <b>b</b>), deve aplicar as viradas do caso <b>a</"
"b>. Se um dado caso se aplica tanto para <code>t+1</code> quanto para "
"<code>t-1</code>, então deve aplicá-lo a <code>t+1</code>."

#. type: Content of: <p>
#: src/lessons/sort/pancake/GatesPancake.html:68
msgid ""
"Note that it is somehow harder than the other exercises we did so far, so "
"don't be surprised if you need more time to achieve this.  But do not give "
"up hope, you can do it!"
msgstr ""
"Observe que este é de certa forma mais difícil que os outros exercícios que "
"fizemos até agora, logo não se surpreenda se precisar de mais tempo para "
"terminar. Mas não desista, pode conseguir!"

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/sort/pancake/GatesPancake.html:71
msgid "Well, I need some help to start."
msgstr "Bem, preciso de ajuda para começar."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/GatesPancake.html:72
msgid ""
"First write some helper functions such as <code>isFirst()</code> or "
"<code>isFree()</code>. This will simplify your main algorithm afterward, "
"that can be written very similarly to the explication above with a bunch of "
"if conditions. Factorizing code this way often helps making your code more "
"readable."
msgstr ""
"Primeiro escreva algumas funções auxiliares tais como <code>isFirst()</code> "
"ou <code>isFree()</code>. Isto vai simplificar o seu algoritmo principal, "
"que vai poder ser escrito de forma muito similar à explicação acima com um "
"conjunto de condições if. Fatorizar o código desta forma às vezes ajuda a "
"tornar o seu código mais legível."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/sort/pancake/GatesPancake.html:79
msgid "My code keeps failing and I don't know how to debug it."
msgstr "O meu código continua a falhar e não sei como depurar-lo."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/GatesPancake.html:80
msgid ""
"To debug one world after the other and avoid that the messages of all worlds "
"get intermixed, you can write your debug function only if the method "
"<code>isSelected()</code> returns true. It will be so only for the entity "
"that is currently selected in the graphical interface, that is probably the "
"world you are currently debugging. This will help breaking the difficulty in "
"parts by debugging the situation one after the other."
msgstr ""
"Para depurar um mundo depois do outro e evitar que as mensagens de todos os "
"mundos fiquem misturadas, pode escrever a sua função de depuração apenas se "
"o método <code>isSelected()</code> retorna true. Isto acontecerá apenas para "
"a entidade que estiver selecionada na interface gráfica, que é provavelmente "
"o mundo que está a depurar no momento. Isto vai ajudar a dividir a "
"dificuldade em partes e a depurar a situção uma após a outra."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/GatesPancake.html:86
msgid ""
"In particular, it may help to print textually the state of the world each "
"time you enter the main loop."
msgstr ""
"Em particular, escrever textualmente o estado do mundo cada vez que entrar "
"no loop principal pode ajudar."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/CohenPancake.html:2
msgid "Faster Burned Pancake Sorting"
msgstr "Faster Burned Pancake Sorting"

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:4
msgid ""
"The Gates' algorithm that we saw in the previous exercise quickly sort a "
"stack of unburned pancakes by increasing the size of the blocks of sorted "
"pancakes. This is much faster that the naive algorithm which moves at each "
"step the largest pancake to the bottom of still unsorted pancakes. Gates' "
"algorithm manages to sort a stack of <i>n</i> pancakes in less than <i>(5n + "
"5)/3</i> steps in the worst case, while the naive algorithm requires at most "
"<i>2n</i> steps. Gates is thus about one third faster in the worst case."
msgstr ""
"O algoritmo de Gates que vimos no exercício anterior ordena rapidamente uma "
"pilha de panquecas que não estão queimadas a aumentar o tamanho dos blocos "
"de panquecas já ordenadas. Isto é muito mais rápido que o algoritmo que move "
"em cada passo a panqueca maior para o fundo das panquecas ainda não "
"ordenadas. O algoritmo de Gates ordena uma pilha de <i>n</i> panquecas em "
"menos que <i>(5n + 5)/3</i> passos no pior caso, enquanto que o algoritmo "
"simplório precisa de no máximo <i>2n</i> passos. Gates é então cerca de 3 "
"vezes mais rápido no pior caso."

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:11
msgid ""
"In this exercise, we will explore an adaptation of the same idea to burnt "
"pancakes. This was first published by David X. Cohen and Manuel Blum. David "
"Cohen co-founded a few years later the Futurama TV show full of mathematical "
"jokes. Definitively, interesting people studied that little pancake "
"problem..."
msgstr ""
"Neste exercício, vamos explorar uma adaptação da mesma ideia das panquecas "
"queimadas. Isto foi publicado primeiramente por David X. Cohen e Manuel "
"Blum. David Cohen co-fundou uns anos depois a série de TV Futurama, cheia de "
"piadas matemáticas. Definitivamente, pessoas interessantes estudaram este "
"singelo problema da panqueca..."

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:16
msgid ""
"The Cohen's algorithm is slightly easier than the Gates' one since it "
"distinguishes less cases:"
msgstr ""
"O algoritmo de Cohen é um pouco mais fácil que o algoritmo de Gates já que "
"ele distingue menos casos:"

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:18
msgid ""
"<b>Case 1:</b> At least one pancake is rightside up in the stack. Let "
"<i>p</i> be the largest such pancake.  Note that <i>p + 1</i> must therefore "
"be upside down, unless <i>p = n</i> (in which case there is no <i>p + 1</i> "
"pancake)."
msgstr ""
"<b>Caso 1:</b> pelo menos uma panqueca está de cabeça para cima na pilha. "
"Seja <i>p</i> a maior destas panquecas. Observe que <i>p + 1</i> deve "
"portanto estar de cabeça para baixo, a menos que <i>p = n</i> (e neste caso "
"não existe a panqueca <i>p + 1</i>)."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/CohenPancake.html:22
msgid "<b>Case 1.a:</b> <i>p+1</i> is lower in the stack than <i>p</i>."
msgstr "<b>Caso 1.a:</b> <i>p+1</i> é menor que <i>p</i> na pilha."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/CohenPancake.html:23
msgid "<b>Case 1.b:</b> <i>p+1</i> is higher in the stack than <i>p</i>."
msgstr "<b>Caso 1.b:</b> <i>p+1</i> é maior que <i>p</i> na pilha."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/CohenPancake.html:24
msgid ""
"<b>Case 1.c:</b> There is no <i>p+1</i> because <i>p</i> is the largest "
"pancake in stack, that is because <i>p = n</i>.  If pancake <i>p</i> is "
"already in position, there is nothing to do. If not, you can move it to the "
"bottom of the stack in 2 flips:"
msgstr ""
"<b>Caso 1.c:</b> Não existe <i>p+1</i> pois <i>p</i> é a maior panqueca da "
"pilha, isto por que <i>p = n</i>.  Se a panqueca <i>p</i> já estiver na "
"posição, não há nada a fazer. Se não, pode movê-la para o fundo da pilha em "
"duas viradas:"

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/CohenPancake.html:28
msgid ""
"<b>The trick is that the pancake <i>p</i> should never be considered "
"again.</b> Otherwise, you will consider that pancake again and again since "
"it's rightside up, and since that's the largest pancake. To leave that "
"pancake alone, you should keep track of the stack size that is still to be "
"sorted. Any traversal of the stack must then only consider these pancakes, "
"leaving alone the ones that are already in position at the bottom of the "
"stack."
msgstr ""
"<b>O truque é que a panqueca <i>p</i> nunca deve ser considerada de novo.</"
"b> caso contrário, vai considerar ela de novo e de novo pois ela está de "
"cabeça pra cima e já que é a maior panqueca. Para desconsiderar-la, deve se "
"lembrar do tamanho da pilha que ainda está para ser ordenada. Qualquer "
"travessia da pilha deve então considerar apenas estas panquecas, não a mexer "
"nas que já estão posicionadas no fundo da pilha."

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:36
msgid ""
"<b>Case 2:</b> All pancakes are downside. Again, we distinguish two "
"sub-cases."
msgstr ""
"<b>Caso 2:</b> Todas as panquecas estão de cabeça para baixo. De novo, "
"distinguimos dois sub-casos."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/CohenPancake.html:39
msgid ""
"<b>Case 2.a:</b> There is at least one <i>p</i> for which <i>p+1</i> is "
"higher than <i>p</i> (if there is several such <i>p</i>, take the largest "
"one)."
msgstr ""
"<b>Caso 2.a:</b> Existe pelo menos um <i>p</i> para o qual <i>p+1</i> é "
"maior que <i>p</i> (se existem vários destes <i>p</i>, pegue o maior)."

#. type: Content of: <ul><li>
#: src/lessons/sort/pancake/CohenPancake.html:43
msgid ""
"<b>Case 2.b:</b> Any pancake <i>p</i> is lower than pancake <i>p+1</i>. In "
"that case, we must have that setting:"
msgstr ""
"<b>Caso 2.b:</b> Qualquer panqueca <i>p</i> é menor que a panqueca <i>p+1</"
"i>. Neste caso, devemos ter a seguinte configuração:"

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:48
msgid ""
"As you can see, we achieve one join in 2 flips in the cases 1 or 2.a. Since "
"we need to achieve n joins to sort the stack, we can sort the stack in "
"<i>2n</i> steps if case 2.b does not occurs."
msgstr ""
"Como pode ver, alcançamos um \"join\" em duas viradas nos casos 1 ou 2.a. Já "
"que precisamos alcançar n junções para ordenar a pilha, podemos ordenar a "
"pilha em <i>2n</i> passos se o caso 2.b não ocorrer."

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:51
msgid ""
"That case 2.b requires a very different handling as it is obviously not "
"possible to achieve a join in only 2 flips.  But fortunately, we can "
"leverage the very specific setting of the stack in that case to provide the "
"following algorithm.  It sorts a stack in that exact configuration after "
"exactly <i>2n</i> steps."
msgstr ""
"Este caso 2.b necessita um tratamento particular já que é obviamente "
"impossível juntar duas panquecas em apenas duas viradas. Mas por sorte, uma "
"única configuração bem específica da pilha cai neste caso da figura. Podemos "
"então utilizar o algoritmo seguinte, conhecido por tirar vantagem desta "
"configuração. Este algoritmo ordena toda a pilha em exatamente <i>2n</i> "
"passos."

#. type: Content of: <pre>
#: src/lessons/sort/pancake/CohenPancake.html:56
#, no-wrap
msgid ""
"Repeat n times\n"
"    Flip the whole stack of n pancakes\n"
"    Flip the top (n-1) pancakes\n"
msgstr ""
"Repita n vezes\n"
"    vire a pilha toda de n panquecas\n"
"    Vire as (n-1) panquecas mais de cima\n"

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:61
msgid ""
"It may sound somehow magic, but it actually works, as depicted on an example "
"below."
msgstr ""
"Pode parecer mágica, mas funciona de verdade, como é mostrado no exemplo "
"abaixo."

#. type: Content of: <p>
#: src/lessons/sort/pancake/CohenPancake.html:65
msgid ""
"So, all in all, the Cohen algorithm manages to sort the stack of burnt "
"pancakes in <i>2n</i> steps in all cases.  Quite a win over the naive "
"algorithm for burnt pancakes that requires <i>3n</i> steps."
msgstr ""
"Portanto, em todo caso, o algoritmo de Cohen trata de ordenar a pilha de "
"panquecas queimadas em <i>2n</i> passos em todos os casos. Uma vitória sobre "
"o algoritmo simplório para panquecas queimadas que precisa de <i>3n</i> "
"passos."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/sort/pancake/CohenPancake.html:68
msgid "I cannot get it right."
msgstr "Não entendi direito."

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/CohenPancake.html:69
msgid ""
"Don't worry. This exercise is very difficult, so it's ok if it does not work "
"right away for you.  Add some relevant logging to your code to understand "
"where it stop performing correctly.  Make sure to use the method "
"<code>isSelected()</code> so that your logs only appears in the currently "
"displayed world. In particular, it may help to print textually the state of "
"the world each time you enter the main loop."
msgstr ""
"Não se preocupe. Este exercício é muito difícil, então tudo bem se não "
"conseguir de primeira. Adicione alguns logs relevantes ao seu código para "
"entender onde parou de funcionar corretamente. Certifique-se de usar o "
"método <code>isSelected()</code> de forma que os seus logs apenas apareçam "
"no mundo que estiver a ser exibido no momento. Em particular, pode ajudar se "
"imprimir textualmente o estado do mundo cada vez que adentrar no loop "
"principal."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/Main.html:2
msgid "The Rainbow Baseball Game"
msgstr "O jogo do basebal multicores"

#. type: Content of: <p>
#: src/lessons/sort/baseball/Main.html:4
msgid ""
"This activity is inspired from the orange game, from the \"Computer Science "
"Unplugged\" activities repository.  It was however heavily since then, first "
"for the CSIRL (my repository of <i>free</i> unplugged activities to "
"introduce computer science, available at "
"http://www.loria.fr/~quinson/Mediation/SMN/) and now for PLM."
msgstr ""
"Esta atividade é inspirada do jogo orange, do repositório de atividades "
"\"Computer Science Unplugged\".  Foi entretanto profundamente alterada, "
"primeiro para o CSIRL (o meu repositório de atividades unplugged <i>livres</"
"i> para introduzir a ciência da computação, disponível em http://www.loria."
"fr/~quinson/Mediation/SMN/) e agora para o PLM."

#. type: Content of: <p>
#: src/lessons/sort/baseball/Main.html:8
msgid ""
"In the literature, the generalized form of this problem is known as the "
"pebble motion problem (the bases can be connected by any kind of graph, and "
"the affinity of pebbles with bases may be different). Another variant of "
"this problem is the well known 15-puzzle, with one player per base, and a "
"two dimensional square grid. Much more information about these problems can "
"be found on wikipedia, as usual."
msgstr ""
"Na literatura, a forma geral deste problema é conhecida como o \"Pebble "
"motion problem\" (as bases podem ser conectadas por qualquer tipo de grafo e "
"a afinidade das \"pebbles\" com bases pode ser diferente). Outra variante "
"deste problema é o famoso jogo do 15, com um jogador por base e um tabuleiro "
"quadrado bidimensional. Mais informações sobre estes problemas encontram-se "
"na wikipédia em inglês, como sempre."

#. type: Content of: <h3>
#: src/lessons/sort/baseball/Main.html:13
msgid ""
"How do you know that the naive algorithm won't loop on that initial "
"situation?"
msgstr ""
"Como sabe que o algoritmo simplório não vai entrar em loop nesta situação "
"inicial?"

#. type: Content of: <p>
#: src/lessons/sort/baseball/Main.html:15
msgid ""
"Well, we simply tested all possible situations to see when this algorithm "
"loops and when it finds the correct solution. We found that it works for all "
"situations where no player is at home (there is 84 such situations for 4 "
"bases, once you take the symmetries into account). It obviously works for "
"some situations that do not respect this criteria (such as all situations it "
"encounters from one of those 84 boards to the final state), but that's "
"another story. Having such a criteria allows us to generate pseudo-random "
"initial situations for the first exercise for which the algorithm we propose "
"is guarenteed to work."
msgstr ""
"Bem, simplesmente testamos todas as situações possíveis para ver quando este "
"algoritmo entra em loop e quando acha a solução correta. Verificamos que "
"funciona em todas as situações onde nenhum jogador está na casa dele ("
"existem 84 situações destas para 4 bases, a considerar as simetrias). "
"Obviamente funciona para algumas situações que não respeitam este critério ("
"como todas as situações que encontra desde uma dessas 84 bases até ao estado "
"final), mas isto é outra história. Dado tal critério podemos gerar situações "
"iniciais pseudo-aleatórias para o primeiro exercício para o qual o algoritmo "
"que propomos com certeza funciona."

#. type: Content of: <p>
#: src/lessons/sort/baseball/Main.html:22
msgid ""
"We also explored bigger instances of the problem, and unfortunately, we have "
"no such criteria for them.  With 5 bases, the algorithm wrongly loops for 24 "
"of the 1824 possible boards where no player is home (that's 1.31%).  With 6 "
"bases, it fails on 1251 of the 58860 such boards (2.12%). With 7 bases, it "
"fails for 84444 out of 2633940 (that's 3.2%). I am still looking for a "
"criteria ensuring that the algorithm won't loop. If you discover one, please "
"report it. Ideally, it would be simple to enforce manually so that we can "
"use it during our unplugged activities."
msgstr ""
"Também exploramos instâncias maiores do problema e infelizmente, não temos "
"tal critério para elas. Com 5 bases, o algoritmo entra em loop de forma "
"errada para 24 dos 1824 possíveis tabuleiros onde nenhum jogador está na "
"casa dele (que dá 1.31%).  Com 6 bases, falha em 1251 dos 58860 tabuleiros (2"
".12%). Com 7 bases, falha em 84444 dos 2633940 (3.2%). Ainda estou à procura "
"dum critério que garanta que o algoritmo não vai entrar em loop. Se "
"descobrir um, por favor avise. Idealmente, deve ser simples garantir "
"manualmente de forma que possamos usá-lo durante as nossas atividades "
"\"unplugged\"."

#. type: Content of: <ul><li>
#: src/lessons/sort/baseball/Main.html:32
msgid ""
"Other graphical representations could be proposed, such as a linear one (for "
"the existing exercises) or other ones (such as a grid or a tree, if an "
"exercise on this kind of graph proves interesting)."
msgstr ""
"Outras representações gráficas podem ser propostas, tais como uma linear ("
"para os exercícios existentes) ou outros (como um grid ou uma árvore, se um "
"exercício neste tipo de grafo se mostrar interessante)."

#. type: Content of: <ul><li>
#: src/lessons/sort/baseball/Main.html:34
msgid ""
"Other exercises on other algorithms on this variant, or on other variants "
"such as the 15-puzzle."
msgstr ""
"Outros exercícios em outros algoritmos desta variante, ou em outras "
"variantes como o jogo do 15."

#. type: Content of: <h3>
#: src/lessons/sort/baseball/short_desc.html:2
msgid "Rainbow baseball"
msgstr "basebal multicores"

#. type: Content of: <p>
#: src/lessons/sort/baseball/short_desc.html:4
msgid ""
"This is another funny variation on the sorting problem, adapting the main "
"sorting algorithms on an unusual context."
msgstr ""
"Este é outra variação divertida do problema da ordenação, a adaptar os "
"pricipais algoritmos de ordenação num contexto inusitado."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:2
msgid "Rainbow Baseball"
msgstr "Rainbow Baseball"

#. type: Content of: <p>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:3
msgid ""
"The colors are represented by integers, between <code>0</code> and "
"<code>amount of bases -1</code>.  The hole is represented by the special "
"value <code>-1</code>.  The color of each base is its rank. So base "
"<code>1</code> is of color <code>1</code>.  In the graphical interface, the "
"base <code>0</code> is the dark blue one while the base <code>1</code> is "
"the fuscia one."
msgstr ""
"As cores são representadas por inteiros, entre <code>0</code> e "
"<code>quantidade de bases -1</code>.  O espaço vazio é representado por um "
"valor especial <code>-1</code>. A cor de cada base é o rank dela. Logo, a "
"base <code>1</code> é de cor <code>1</code>. Na interface gráfica, a base "
"<code>0</code> é a azul escura enquanto que a base <code>1</code> é a fuscia."

#. type: Content of: <p>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:9
msgid ""
"Once every players on the field are in their home base, the hole should be "
"in the last base, that is of rank <code>getBasesAmount()-1</code>."
msgstr ""
"Uma vez que todos os jogadores no campo estejam nas bases deles, o espaço "
"vazio deve estar na última base, ou seja, a de rank "
"<code>getBasesAmount()-1</code>."

#. type: Content of: <h2>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:12
msgid "Functions to retrieve the world's dimensions"
msgstr "FFunções para recuperar as dimensões do mundo"

#. type: Content of: <pre>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:14
#, no-wrap
msgid "[!java|c]int [/!]getBasesAmount() [!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getBasesAmount() [!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:15
msgid "Returns the amount of bases on this field."
msgstr "Retorna a quantidade de bases neste campo."

#. type: Content of: <pre>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:17
#, no-wrap
msgid "[!java|c]int [/!]getPositionsAmount() [!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getPositionsAmount() [!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:18
msgid "Returns the amount of player's positions per base on this field."
msgstr "Retorna a quantidade de posições de jogadores por base neste campo."

#. type: Content of: <h2>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:20
msgid "Functions to retrieve the world's state"
msgstr "Funções para recuperar o estado do mundo"

#. type: Content of: <pre>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:22
#, no-wrap
msgid "[!java|c]int [/!]getHoleBase() [!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getHoleBase() [!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:23
msgid "Returns the base in which the hole is located."
msgstr "Retorna a base na qual o espaço vazio está localizado."

#. type: Content of: <pre>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:25
#, no-wrap
msgid "[!java|c]int [/!]getHolePosition() [!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getHolePosition() [!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:26
msgid "Returns the hole position within its base"
msgstr "Retorna a posição do espaço vazio na base dela"

#. type: Content of: <pre>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:28
#, no-wrap
msgid ""
"[!java|c]int [/!]getPlayerColor([!java|c]int [/!]base[!scala]:Int[/!], "
"[!java|c]int [/!]position[!scala]:Int[/!])  [!scala]:Int[/!]"
msgstr ""
"[!java|c]int [/!]getCorDoJogador([!java|c]int [/!]base[!scala]:Int[/!], "
"[!java|c]int [/!]posição[!scala]:Int[/!])  [!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:29
msgid "Returns the color of the player at a given location."
msgstr "Retorna a cor do jogador numa dada posição."

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:32
msgid "Returns whether all players of the field are at home."
msgstr "Retorna se todos os jogadores em campo estão nos \"home\" deles."

#. type: Content of: <pre>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:34
#, no-wrap
msgid ""
"[!java]boolean [/!][!c]int [/!]isBaseSorted([!java|c]int [/!]base)  "
"[!scala]:Boolean[/!]"
msgstr ""
"[!java]boolean [/!][!c]int [/!]baseEstáOrdenada([!java|c]int [/!]base)  "
"[!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:35
msgid "Returns whether all players of a given base are at home."
msgstr "Retorna se todos os jogadores de uma dada base estão em \"home\"."

#. type: Content of: <h2>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:39
msgid "Functions to change the world"
msgstr "Funções para mudar o mundo"

#. type: Content of: <pre>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:41
#, no-wrap
msgid ""
"[!java|c]void [/!]move([!java|c]int [/!]base[!scala]:Int[/!], [!java|c]int "
"[/!]position[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!]mover([!java|c]int [/!]base[!scala]:Int[/!], [!java|c]int "
"[/!]posição[!scala]:Int[/!])"

#. type: Content of: outside any tag (error?)
#: src/lessons/sort/baseball/universe/BaseballWorld.html:42
msgid ""
"Moves a given player into the hole. This throws an IllegalArgumentException "
"if the specified player is not near the hole (at most one base away)."
msgstr ""
"Move um dado jogador para um espaço vazio. Vai levantar uma "
"IllegalArgumentException se o jogador especificado não estiver próximo do "
"espaço vazio (no máximo a uma base de distância)."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/NaiveBaseball.html:2
msgid "Naive Rainbow Baseball"
msgstr "Basebal do arco-íris simples"

#. type: Content of: <p>
#: src/lessons/sort/baseball/NaiveBaseball.html:4
msgid ""
"Today, the buggles decided to play a baseball game, but they are rather out "
"of luck, actually.  First, kinda forgot the rules, and ... well ... they "
"cannot find the ball and bats again.  So they decided to \"adapt a bit\" the "
"rules. As the are no ball, the buggles can only running around the field, "
"what they do happily: for a while, all attending buggle run at full speed in "
"all directions around the field."
msgstr ""
"Hoje os buggles decidiram jogar um jogo de basebal, mas eles estão sem muita "
"sorte, na verdade. Primeiro, eles esqueceram-se das regras e... bem... eles "
"não acharam as bolas e tacos de novo. Então eles decidiram adaptar um pouco "
"as regras. Como eles não são bolas, tudo que podem fazer é correr ao redor "
"do campo, o que fazem felizes da vida: Por um período, todos os buggles "
"correram na máxima velocidade em todas as direções pelo campo."

#. type: Content of: <p>
#: src/lessons/sort/baseball/NaiveBaseball.html:10
msgid ""
"But after a few collisions, they decide to invent new rules to organize a "
"bit the game: They make one team per base and two players per team. One of "
"the teams has only one player so that its base has an empty location. Then, "
"the players are dispatched randomly around the bases, and the game for them "
"is to reach their home base. The whole game stops when all players are "
"home.  There is no winning team: either all players win, or they all "
"lose. Actually, this game is very different from the original baseball. The "
"only rule that remains is that you can only run around the field, from one "
"base to the next one, without crossing middle of the field."
msgstr ""
"Mas depois de algumas colisões eles decidiram inventar novas regras para "
"organizar o jogo um pouco: eles fizeram um time por base e dois jogadores "
"por time. Um dos times tem apenas um jogador de forma que a base deles tem "
"uma vaga. Então, os jogadores são despachados aleatoriamente entre as bases "
"e o jogo deles é encontrar a base de origem deles. O jogo como um todo para "
"quando todos os jogadores estão nas bases de origem delws. Não existe um "
"time vencedor: ou todo mundo ganha ou todo mundo perde. Na verdade, este "
"jogo é muito diferente do baseball original. A única regra que sobrou é que "
"só pode correr ao redor do campo, de uma base à próxima, sem cruzar o meio "
"do campo."

#. type: Content of: <p>
#: src/lessons/sort/baseball/NaiveBaseball.html:18
msgid ""
"Now, they are asking you to help them deciding who and when should move so "
"that each player returns to its base. Only one buggle can move at each "
"round, from its position to the empty spot.  The maximal distance that a "
"buggle can cover in one round is of one base."
msgstr ""
"Agora, eles estão a pedir-lhe que lhes ajude a decidir quem se deve mover de "
"forma que cada jogador retorne à sua base de origem. Apenas um buggle pode "
"se mover por rodada, da posição dele para um espaço vazio. A distância "
"máxima que um buggle pode percorrer numa rodada é de uma base."

#. type: Content of: <p>
#: src/lessons/sort/baseball/NaiveBaseball.html:22
msgid ""
"So, at each round, the empty spot is on one base (say <code>B</code>), and "
"you should decide which buggle enters that empty spot. There is four "
"candidates (two from base <code>B-1</code> and two from base "
"<code>B+1</code>). Actually, there is a fifth candidate since the buggle "
"that is on the same base than the empty spot can change its position, but "
"that's not really helping."
msgstr ""
"Logo, em cada turno, o espaço vazio fica numa base (digamos <code>B</code>) "
"e deve decidir que buggle vai entrar neste espaço vazio. Existem quatro "
"candidatos (dois de base <code>B-1</code> e dois da base <code>B+1</code>). "
"Na verdade, existe um quinto candidato pois o buggle que está na mesma base "
"que o espaço vazio pode mudar de posição, mas isto não ajuda muito."

#. type: Content of: <h3>
#: src/lessons/sort/baseball/NaiveBaseball.html:27
msgid "The Naïve algorithm"
msgstr "O algoritmo simplório"

#. type: Content of: <p>
#: src/lessons/sort/baseball/NaiveBaseball.html:29
msgid ""
"In this exercise, we will first explore a very simple algorithm. To decide "
"which of the four candidate buggles should enter the empty spot, we first "
"restrict ourselves and decide that buggles can only turn clockwise. Then, "
"from the two remaining candidates, we pick the one that has the largest "
"distance to cover to reach its base (turning clockwise). Click on the demo "
"button: this works rather well in practice."
msgstr ""
"Neste exercício, vamos primeiramente explorar um algoritmo muito simples. "
"Para decidir qual dos quatro buggles candidatos deve entrar no espaço vazio, "
"vamos primeiro nos restringir e decidir que os buggles só podem andar no "
"sentido horário. Então, dos dois candidatos restantes, escolhemos o que tem "
"a maior distância a percorrer para alcançar a base deles (no sentido horário)"
". Clique no botão demo: isto funciona melhor, na prática."

#. type: Content of: <p>
#: src/lessons/sort/baseball/NaiveBaseball.html:35
msgid ""
"It's hard to find a simpler algorithm for this problem: While it's not "
"sorted, search for the base containing the candidate buggles: if the hole is "
"in base <code>B</code>, it's the base <code>B+1</code>, modulo the amount of "
"bases. Then, compute the distance that each buggle of that base still has to "
"run to reach its base (0 if it's already home). Once you found the buggle "
"that should enter the empty spot, just use the <code>move</code> method on "
"it, and iterate."
msgstr ""
"É difícil encontrar um algoritmo simples para este problema: Como não está "
"ordenado, busque pela base a conter os buggles candidatos: se o vazio "
"estiver na base <code>B</code>, será a base <code>B+1</code>, módulo a "
"quantidade de bases. Então, calcule a distância que cada buggle daquela base "
"ainda tem que andar para atingir a própria base (0 se já estiver na própria "
"base). Uma vez que encontra o buggle que deve entrar no vazio, simplesmente "
"use o método <code>move</code> nele e itere."

#. type: Content of: <p>
#: src/lessons/sort/baseball/NaiveBaseball.html:41
msgid ""
"The main difficulty should be to get the few equations right: determining "
"the base next to the hole should be easy, but determining the distance that "
"a player has to cover may reveal a bit more challenging. Don't hesitate to "
"draw pictures on a paper to cover all possible cases. It should not be that "
"difficult either: there is not that many cases after all."
msgstr ""
"A principal dificuldade deve ser obter corretamente as poucas equações: "
"determinar a base próxima do espaço vazio deve ser fácil, mas determinar a "
"distância que um jogador tem que cobrir pode se revelar um pouco "
"desafiadora. Não hesite em desenhar esboços num papel para cobrir todas as "
"possibilidades. Não vai ser tão difícil no final das contas: não existem "
"tantos casos assim."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/SelectBaseball.html:2
msgid "Selection Baseball"
msgstr "Selection Baseball"

#. type: Content of: <p>
#: src/lessons/sort/baseball/SelectBaseball.html:4
msgid ""
"The previous algorithm is very pleasant: it's rather simple and rather fast "
"to implement, but unfortunately, it is also rather wrong! In some cases, it "
"never stops, which is obviously bad. If you don't believe it, just copy "
"paste your previous code, and hit the run button. The first world of this "
"exercise is one of these unfortunate situations that drives our previous "
"algorithm crazy."
msgstr ""
"O algoritmo anterior é muito agradável: é muito simples e muito rápido de "
"implementar, mas infelizmente, é também bastante errado! Em alguns casos, "
"nunca para, o que é obviamente ruim. Se não acredita, simplesmente copie e "
"cole o seu código anterior e aperte no botão executar. O primeiro mundo "
"deste exercício é uma destas situações infelizes que deixam endoidar o "
"algoritmo anterior."

#. type: Content of: <p>
#: src/lessons/sort/baseball/SelectBaseball.html:10
msgid ""
"So we have to find another algorithm, preferably one that works in all "
"cases."
msgstr ""
"Portanto temos que encontrar outro algoritmo, preferencialmente um que "
"funcione em todos os casos."

#. type: Content of: <p>
#: src/lessons/sort/baseball/SelectBaseball.html:12
msgid ""
"For that, the best solution is to start from a well known algorithm instead "
"of trying to invent a new one from scratch as we just did. When you think a "
"bit about this problem, this can is very similar to a sorting problem: Just "
"make sure that the players are sorted by their colors and you're set. And "
"while we are at it, let's generalize the game to allow more that 4 bases."
msgstr ""
"Para isto, a melhor solução é começar de um algoritmo bem conhecido ao invés "
"de tentar inventar um novo do zero como fizemos. Quando pensa um pouco sobre "
"este problema, ele pode ser muito similar a um problema de ordenação: apenas "
"se certifique de que todos os jogadores estão ordenados pelas cores deles. E "
"enquanto fazemos isto, vamos generalizar o jogo para poder ter mais de 4 "
"bases."

#. type: Content of: <p>
#: src/lessons/sort/baseball/SelectBaseball.html:18
msgid ""
"Let's adapt the selection sort to our situation. The big lines of the "
"algorithm is then \"for each base, select the players that should occupy "
"this base and make sure that they come to their position\". This way, we "
"will grow an sorted area where all players are already sorted (and never "
"changed) while the unsorted area shrinks."
msgstr ""
"Vamos adaptar o selection sort para nossa situação. As linhas grandes do "
"algoritmo se tornam \"para cada base, selecione os jogadores que devem "
"ocupar esta base e garanta que eles venham às posições deles\". Desta forma, "
"vamos aumentar uma área ordenada onde todos os jogadores já estão ordenados ("
"e nunca deixam de estar) enquanto a área não-ordenada se reduz."

#. type: Content of: <p>
#: src/lessons/sort/baseball/SelectBaseball.html:24
msgid ""
"Selecting the player should be no problem; Do not hesitate to define some "
"methods such as <code>findPlayer()</code> or "
"<code>findPlayerBase()</code>. This will ensure that your code remains "
"understandable."
msgstr ""
"Selecionar o jogador não deve ser um problema; Não hesite para definir "
"alguns métodos como <code>findPlayer()</code> ou <code>findPlayerBase()</"
"code>. Isto vai garantir que o seu código permaneça entendível."

#. type: Content of: <p>
#: src/lessons/sort/baseball/SelectBaseball.html:28
msgid ""
"The most problematic aspect is to move the selected players into "
"position. For that, you have to move the hole to the position where the "
"player is, and then move both the player and the hole to the base that is "
"next to the player's goal (probably in a loop), and finally put the player "
"in the right position of its target base."
msgstr ""
"O aspeto mais problemático é mover os jogadores selecionados para as "
"posições deles. Para isto, tem que mover o espaço vazio à posição onde o "
"jogador está e depois mover ambos os jogadores e o espaço vazio à base que "
"estiver próxima do objetivo do jogador (provavelmente com um loop) e "
"finalmente pôr o jogador na posição correta da base favorita dele."

#. type: Content of: <p>
#: src/lessons/sort/baseball/SelectBaseball.html:33
msgid ""
"As often in programming, the devil is in the details: there is a bunch of "
"corner cases that you should detect and deal with correctly, such as the "
"cases where the player is already in the base (but not in the position that "
"you would like), or when the hole is on the right of the player (probably "
"when you sort the first base). But you will find and hunt these while "
"debugging your code."
msgstr ""
"Como é comum em programação, o diabo esconde-se nos detalhes: existe um "
"conjunto de casos particulares que deve detetar e lidar corretamente, como "
"os casos onde o jogador já está na base (mas não na posição que gostaria), "
"ou quando o buraco está à direita do jogador (provavelmente quando ordena a "
"primeira base). Mas vai caçar tais coisas enquanto depurar o seu código."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/InsertBaseball.html:2
msgid "Insertion Baseball"
msgstr "Insertion Baseball"

#. type: Content of: <p>
#: src/lessons/sort/baseball/InsertBaseball.html:4
msgid ""
"The good point of adapting the selection sort to the baseball problem is "
"that we know that it works (provided that our adaptation is correct). That's "
"much better than the first naive algorithm, that was unable to converge to "
"the solution in some situations. But actually, the selection sort is not "
"perfect either as it requires a lot of swaps: we have to bring the hole to "
"the selected player and then both the player and hole in position, and "
"more. We can do better."
msgstr ""
"O aspeto bom de adaptar o selection sort para o problema do basebol é que "
"sabemos que isto funciona (desde que a nossa adaptação esteja correta). O "
"que é muito melhor que o nosso primeiro e simplório algoritmo, que é incapaz "
"de convergir à solução em algumas situações. Mas, na verdade, o selection "
"sort também não é perfeito, pois requer muitas trocas: temos que trazer o "
"espaço vazio para e jogador selecionado e então levar o jogador e o espaço "
"vazio à posição e mais. Podemos fazer melhor."

#. type: Content of: <p>
#: src/lessons/sort/baseball/InsertBaseball.html:10
msgid ""
"For example, each player can run quite a long way from its initial position "
"to its target solution.  Instead, it may be more interesting to split the "
"field in two parts: one on the left where all players are sorted relatively "
"to each others, and one on the right where the players are still at their "
"initial positions. Then, at each iteration, we take the player at the border "
"between the sorted and unsorted areas (that is, the left-most player of the "
"unsorted area) and move it to the left (within the sorted area) until it "
"reaches its position (that is, until the position where it's bigger that its "
"left neighbor). This would at least reduce the travel of players to the "
"sorted area as we use the first one on the border."
msgstr ""
"Por exemplo, cada jogador pode correr por uma longa distância da posição "
"inicial dele para o objetivo. Portanto, pode ser mais interessante dividir o "
"campo em duas partes: uma à esquerda onde todos os jogadores estejam "
"ordenados relativamente uns aos outros e outra à direita onde os jogadores "
"ainda estejam nas posições iniciais deles. Então, em cada iteração, "
"escolhemos o jogador na fronteira entre as áreas ordenada e não ordenada (ou "
"sejam o jogador mais à esquerda da parte não ordenada) e moveremo-lo para a "
"esquerda (dentro da parte ordenada) até que alcance a posição dele (ou seja, "
"até a posição onde seja maior que o vizinho dele da esquerda). Isto pode, "
"pelo menos, reduzir o trajeto dos jogadores à área ordenada já que usamos o "
"mais perto da fronteira."

#. type: Content of: <p>
#: src/lessons/sort/baseball/InsertBaseball.html:19
msgid ""
"Actually, that's exactly what an insertion sort would do: maintain a sorted "
"area on the left, and put iteratively the player on the border to its "
"position within the sorted area. This is good, as we know that our algorithm "
"is not inherently flawed since we adapt a well known one."
msgstr ""
"Na verdade, é exatamente isto que o insertion sort deve fazer: manter uma "
"área ordenada na esquerda e pôr iterativamente o jogador na fronteira com "
"esta posição dentro da área ordenada. Isto é bom, já que sabemos que nosso "
"algoritmo não é inerentemente \"flawed\" pois adaptamos um algoritmo bem "
"conhecido."

#. type: Content of: <p>
#: src/lessons/sort/baseball/InsertBaseball.html:23
msgid ""
"The easiest to adapt the insertion sort to the baseball problem is to "
"consider all positions as adjacent and forget about bases. For that, we "
"define the methods <code>getColor[!c]Insert[/!](pos)</code>, "
"<code>move[!c]Insert[/!](pos)</code> and "
"<code>getHole[!c]Insert[/!]()</code> that all use a unique integer to "
"designate a given position. These functions simply convert between the way "
"to specify a position and then call the usual functions to interact with the "
"world. If you have an <code>index</code> and want to convert it into a "
"<code>base,pos</code>, then <code>base=index/2</code> and "
"<code>pos=index%2</code>. To compute the reverse, "
"<code>index=base*2+pos</code> (this works because "
"<code>getPositionsAmount()</code> always returns 2)."
msgstr ""
"O mais fácil de adaptar o insertion sort ao problema do basebol é considerar "
"todas as posições como adjacentes e esquecer-se das bases. Para isto, "
"definimos os métodos <code>getColor[!c]Insert[/!](pos)</code>, "
"<code>move[!c]Insert[/!](pos)</code> e <code>getHole[!c]Insert[/!]()</code> "
"que usam, todos, um único inteiro para designar uma dada posição. Estas "
"funções simplesmente convertem a forma de especificar uma posição para em "
"seguida chamar as funções usuais para interagir com o mundo. Se tem um "
"<code>index</code> e quer convertê-lo a <code>base,pos</code>, para então a "
"<code>base=index/2</code> e <code>pos=index%2</code>. Para calcular o "
"reverso, <code>index=base*2+pos</code> (isto funciona, pois "
"<code>getPositionsAmount()</code> sempre retorna 2)."

#. type: Content of: <p>
#: src/lessons/sort/baseball/InsertBaseball.html:32
msgid ""
"For the algorithm itself, you should first move the hole to the position "
"1. The position 0 is considered to be the sorted area (of size 1 for now) "
"while the area above 2 is the unsorted area.  Then comes an iteration to "
"sort each element of the unsorted area. Since this iteration is a bit "
"complex, you should think of its loop invariant, that is, the condition that "
"is true before and after the loop and which explains that the loop fulfills "
"its goal. Here, the loop invariant is twofold: First, the hole is between "
"the sorted area and the unsorted area, and then, the every elements of the "
"sorted area are ... well sorted relatively to their neighbors."
msgstr ""
"Para o algoritmo em si, deve primeiro mover o espaço vazio à posição 1. A "
"posição 0 é considerada como a área ordenada (de tamanho 1 por enquanto) "
"enquanto que a área acima de 2 é a área não-ordenada. Então fazemos uma "
"iteração para ordenar cada elemento da área não-ordenada. Já que esta "
"iteração é um pouco complexa, deve pensar no invariante dela do loop, ou "
"seja, a condição que é verdadeira antes e depois do loop e que explica que o "
"loop satisfaz o objetivo dele. Aqui, o invariante do loop é duplo: Primeiro, "
"o espaço vazio está entre a área ordenada e a não-ordenada is between the "
"sorted area and the unsorted area, and then, the every elements of the "
"sorted area are ... well sorted relatively to their neighbors."

#. type: Content of: <p>
#: src/lessons/sort/baseball/InsertBaseball.html:40
msgid ""
"Then, the loop body to sort an element should first descend the hole and the "
"elements within the sorted area until the element is larger than the element "
"before in the sorted area (2 moves per position to travel), and then move "
"the hole back to its position between the sorted and unsorted areas (1 move "
"per position)."
msgstr ""
"Então, o corpo do loop para ordenar um elemento deve primeiro empurrar para "
"baixo o espaço vazio e os elementos dentro da área ordenada até que o "
"elemento seja maior que o elemento que está depois na área ordenada (2 "
"movimentos por posição para se mover) e então mover o espaço vazio de volta "
"para sua posição entre as áreas ordenadas e não-ordenadas (1 movimento por "
"posição)."

#. type: Content of: <p>
#: src/lessons/sort/baseball/InsertBaseball.html:44
msgid ""
"Once you insert the last element within the sorted area, your whole set is "
"sorted and you're done.  I preserve the surprise of the border cases that "
"will require some little adjustments to your algorithm to make it work "
"properly :)"
msgstr ""
"Uma vez que insira o último elemento dentro da área ordenada, o seu conjunto "
"como um todo estará ordenado e terá terminado. Vou deixar como surpresa os "
"casos da fronteira que vão precisar de alguns pequenos ajustes no seu "
"algoritmo para funcionar corretamente :)"

#. type: Content of: <h1>
#: src/lessons/sort/baseball/BubbleBaseball.html:2
msgid "Bubble Baseball"
msgstr "Bubble Baseball"

#. type: Content of: <p>
#: src/lessons/sort/baseball/BubbleBaseball.html:4
msgid ""
"Crap, we adapted the insertion sort because our selection sort required too "
"much moves to get the selected players to their position, but the insertion "
"sort requires an inordinate amount of changes to get the border elements to "
"their position within the sorted area without mixing the already sorted "
"elements. At the end of the day, our selection variant was more efficient "
"with at most <code>3*amountOfBase</code> moves to sort one element (1 to get "
"the hole alongside with the player, and 2 to get the hole+player in "
"position) while our insertion variant requires at most "
"<code>3*amountOfPlayers</code> to sort one element (2 to descend the hole "
"and player in position, 1 to get the hole back to its position). That's "
"twice as bad as there is two players per base. It may be possible to improve "
"the insertion sort by moving by more than one element when descending, but "
"it seems uneasy (at least, while not mixing the already sorted elements) and "
"it would probably only ensure that our insertion variant becomes as "
"efficient as our selection variant, not dramatically better."
msgstr ""
"Puxa, adaptamos o insertion sort por que o selection sort precisava de "
"muitos movimentos para pôr os jogadores selecionados nas posições deles, mas "
"o insertion sort necessita de uma quantidade estúpida de mudanças para "
"alcançar os elementos de fronteira para as posições deles dentro da área "
"ordenada sem bagunçar os elementos já ordenados. No final, a nossa variante "
"\"selection\" era mais eficiente com pelo menos <code>3*amountOfBase</code> "
"movimentos para ordenar um elemento (1 para alcançar o espaço vazio ao lado "
"do jogador e 2 para pôr o espaço vazio e o jogador em posição) enquanto a "
"nossa variante \"insertion\" precisa de no máximo <code>3*amountOfPlayers</"
"code> para ordenar um elemento (2 para descer o espaço vazio e o jogador na "
"posição, 1 para trazer o espaço vazio de volta para a posição dele). Isto é "
"duas vezes pior que ter dois jogadores por base. Pode ser possível melhorar "
"o insertion sort a mover mais que um elemento enquanto desce, mas parece "
"difícil (pelo menos, enquanto não misturar os elementos já ordenados) e "
"provavelmente isto apenas vai garantir que a nossa variante \"insertion\" se "
"torne tão eficiente como a nossa variante \"selection\", não dramaticamente "
"melhor."

#. type: Content of: <p>
#: src/lessons/sort/baseball/BubbleBaseball.html:16
msgid ""
"If we cannot make the sort faster, we can make it easier. If you think about "
"it, it seems rather natural to adapt the bubble sort to this problem: the "
"hole becomes the bubble that moves up and down, sorting a bit the array "
"during each traversal. The big lines are simply: \"while it's not sorted, "
"move the hole down to base 0 (moving the biggest player of each base at each "
"step) and then back to the maximal base (moving the smallest player of each "
"base)\". After a while, <code>isSorted()</code> will return true and your "
"algorithm will stop."
msgstr ""
"Se não pudermos tornar o ordenamento mais rápido, podemos torná-lo mais "
"fácil. Se pensar a respeito, parece natural adaptar a ordenação bolha para "
"este problema: o buraco se torna a bolha que se move para cima e para baixo, "
"a ordenar um pouco o array a cada passagem. As linhas grandes são simples: "
"\"enquanto (while) não estiver ordenado, mova o buraco para baixo até a base "
"0 (a mover o maior jogador de cada base em cada passo) e então de volta à "
"base maximal (a mover o menor jogador de cada base)\". Depois de algum "
"tempo, <code>isSorted()</code> vai retornar true e o seu algoritmo vai parar."

#. type: Content of: <p>
#: src/lessons/sort/baseball/BubbleBaseball.html:22
msgid ""
"This is so easy that we introduce another variant of the problem, with more "
"than two players per base.  But actually, that shouldn't block you very "
"long, should it?"
msgstr ""
"Isto é tão fácil que vamos introduzir outra variante do problema, com mais "
"de dois jogadores por base. Mas isto não vai te segurar por muito tempo, né?"

#. type: Content of: <p>
#: src/lessons/sort/baseball/BubbleBaseball.html:25
msgid ""
"Surprisingly, the bubble sort variant requires ways less moves than the "
"other variants. This is astonishing because usually, the bubble sort "
"performs much worse than the others sorts, but it comes from the very good "
"match between its big lines and the baseball universe. It actually happens "
"rather often that a pleasantly written algorithm performs very decently. But "
"this is not an universal rule either, as demonstrated by the naive algorithm "
"of the first exercise, that was nice, simple and wrong ;)"
msgstr ""
"Surpreendentemente, a variante bubble sort precisa de menos movimentos que "
"as outras variantes. Isto é fantástico, por que normalmente, o bubble sort é "
"muito pior que os outros algoritmos, mas isto é graças à boa combinação "
"entre as linhas grandes deles e o universo do basebol. E, na verdade, "
"acontece bastante de um algoritmo escrito de forma agradável executa de "
"forma bem decente. Mas isto não é uma regra universal, como foi demonstrado "
"pelo algoritmo simplório do primeiro exercício, que era legal, simples e "
"errado ;)"

#. type: Content of: <h1>
#: src/plm/universe/turtles/TurtleWorld.html:2
msgid "The universe of turtles"
msgstr "O universo das tartarugas"

#. type: Content of: <p>
#: src/plm/universe/turtles/TurtleWorld.html:4
msgid "This is an adaptation of LOGO for the Programmer's Learning Machine."
msgstr "Esta é uma adaptação do LOGO para o Programmer's Learning Machine."

#. type: Content of: <p>
#: src/plm/universe/turtles/TurtleWorld.html:6
msgid ""
"It is directly inspired from the work of the mathematician Seymour Papert in "
"the 60's. Inspired from the swiss psycholog Jean Piaget, he came up with a "
"learning method called LOGO to teach programming to young childs. The world "
"is full of turtles which leave a painting where they go and which respond to "
"simple orders."
msgstr ""
"É diretamente inspirado no trabalho do matemático Seymour Papert nos anos "
"60. Inspirado no psicólogo suíço Jean Piaget, apresentou um método de ensino "
"chamado LOGO para ensinar programação para crianças pequenas. O mundo é "
"cheio de tartarugas que deixam um rastro de tinta por onde passam e que "
"obedecem a comandos simples."

#. type: Content of: <h2>
#: src/plm/universe/turtles/TurtleWorld.html:12
msgid "Functions to move the turtle"
msgstr "Funções para mover a tartaruga"

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:14
#, no-wrap
msgid ""
"[!java|c]void [/!]forward([!java|c]double [/!]steps[!scala]:Double[/!])\n"
"[!java|c]void [/!]backward([!java|c]double [/!]steps[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]avançar([!java|c]double [/!]passos[!scala]:Double[/!])\n"
"[!java|c]void [/!]recuar([!java|c]double [/!]passos[!scala]:Double[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:16
msgid "Moves forward or backward of the requested amount of steps."
msgstr "Move para frente e para trás na quantidade de passos pedidos."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:18
#, no-wrap
msgid ""
"[!java|c]void [/!]right([!java|c]double [/!]angle[!scala]:Double[/!])\n"
"[!java|c]void [/!]left([!java|c]double [/!]angle[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]direita([!java|c]double [/!]ângulo[!scala]:Double[/!])\n"
"[!java|c]void [/!]esquerda([!java|c]double [/!]ângulo[!scala]:Double[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:20
msgid "Turns left or right of the given angle (in degrees)."
msgstr "Vira à esquerda ou à direita um dado ângulo (em graus)."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:22
#: src/lessons/lander/universe/DelegatingLanderWorld.html:10
#, no-wrap
msgid ""
"[!java|c]double [/!]getX()[!scala]:Double[/!]\n"
"[!java|c]double [/!]getY()[!scala]:Double[/!]"
msgstr ""
"[!java|c]double [/!]getX()[!scala]:Double[/!]\n"
"[!java|c]double [/!]getY()[!scala]:Double[/!]"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:24
msgid ""
"Returns the current position of the turtle.  Note that the point (0,0) is on "
"the top left corner, as it is often the case in Computer Science."
msgstr ""
"Retorna a posição atual da tartaruga. Observe que o ponto (0,0) está no "
"canto superior esquerdo, como é comum na ciência da computação."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:27
#, no-wrap
msgid ""
"[!java|c]void [/!]setX([!java|c]double [/!]x[!scala]:Double[/!])\n"
"[!java|c]void [/!]setY([!java|c]double [/!]y[!scala]:Double[/!])\n"
"[!java|c]void [/!]setPos([!java|c]double [/!]x[!scala]:Double[/!], "
"[!java|c]double [/!]y[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]setX([!java|c]double [/!]x[!scala]:Double[/!])\n"
"[!java|c]void [/!]setY([!java|c]double [/!]y[!scala]:Double[/!])\n"
"[!java|c]void [/!]setPos([!java|c]double [/!]x[!scala]:Double[/!], [!java|c]"
"double [/!]y[!scala]:Double[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:30
msgid "Teleports the turtle to a new position (without leaving any trace)."
msgstr "Teletransporta a tartaruga para uma nova posição (sem deixar rastros)."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:32
#, no-wrap
msgid ""
"[!java|c]void [/!]moveTo([!java|c]double [/!]x[!scala]:Double[/!], "
"[!java|c]double [/!]y[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]moverPara([!java|c]double [/!]x[!scala]:Double[/!], "
"[!java|c]double [/!]y[!scala]:Double[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:33
msgid "Moves the turtle to a new position."
msgstr "Move a tartaruga para uma nova posição."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:35
#, no-wrap
msgid "[!java|c]void [/!]circle([!java|c]double [/!]radius[!scala]:Double[/!])"
msgstr "[!java|c]void [/!]círculo([!java|c]double [/!]raio[!scala]:Double[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:36
msgid "Draw a circle of the specified radius centered on the turtle."
msgstr "Desenha um círculo de raio especificado com o centro na tartaruga."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:38
#, no-wrap
msgid "[!java|c]void [/!]hide()"
msgstr "[!java|c]void [/!]hide()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:39
msgid "Hides the turtle."
msgstr "Esconde a tartaruga."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:41
#, no-wrap
msgid "[!java|c]void [/!]show()"
msgstr "[!java|c]void [/!]show()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:42
msgid "Shows the turtle back."
msgstr "Mostra novamente a tartaruga."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:44
#, no-wrap
msgid "[!java]boolean [/!][!c]int [/!]isVisible()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isVisible()[!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:45
msgid "Returns whether the turtle is currently visible."
msgstr "Retorna se a tartaruga é visível ou não."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:47
#, no-wrap
msgid "[!java|c]void [/!]clear()"
msgstr "[!java|c]void [/!]clear()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:48
msgid "Removes any trail on the sheet."
msgstr "Remove todos os rastros do papel."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:50
#, no-wrap
msgid "[!java|c]double [/!]getHeading()[!scala]:Double[/!]"
msgstr "[!java|c]double [/!]getHeading()[!scala]:Double[/!]"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:51
msgid "Returns the current heading of the turtle (in degrees)."
msgstr "Retorna a direção atual da tartaruga (em graus)."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:53
#, no-wrap
msgid "[!java|c]void [/!]setHeading([!java|c]double [/!]angle[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]setDireção([!java|c]double [/!]ângulo[!scala]:Double[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:54
msgid "Sets a new heading to the turtle (in degrees)."
msgstr "Ajusta uma nova direção para a tartaruga (em graus)."

#. type: Content of: <h2>
#: src/plm/universe/turtles/TurtleWorld.html:56
msgid "Functions about the pen"
msgstr "Funções da caneta"

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:58
#, no-wrap
msgid "[!java|c]void [/!]penUp()"
msgstr "[!java|c]void [/!]penUp()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:59
msgid ""
"Moves the pen up (turtles have pens, not brushes as buggles). The turtle "
"will not leave any trace during its subsequent moves."
msgstr ""
"Levanta a caneta (tartarugas têm canetas, não pinceis, como os buggles). A "
"tartaruga não vai deixar nenhum rastro durante os seus passos seguintes."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:62
#, no-wrap
msgid "[!java|c]void [/!]penDown()"
msgstr "[!java|c]void [/!]penDown()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:63
msgid ""
"Moves the pen down. The turtle will leave a trace during its subsequent "
"moves."
msgstr ""
"Abaixa a caneta. A tartaruga vai deixar um rastro nos próximos movimentos."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:65
#, no-wrap
msgid "[!java]boolean [/!][!c]int [/!]isPenDown()[!scala]:Boolean[/!]"
msgstr "[!java]boolean [/!][!c]int [/!]isPenDown()[!scala]:Boolean[/!]"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:66
msgid "Returns the current pen position as a boolean."
msgstr "Retorna a posição atual da caneta como um booleano."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:68
#, no-wrap
msgid "[!java|c]Color [/!]getColor()[!scala]:Color[/!]"
msgstr "[!java|c]Color [/!]getColor()[!scala]:Color[/!]"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:69
msgid "Returns the current pen color."
msgstr "Retorna a cor atual da caneta."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:71
#, no-wrap
msgid "[!java|c]void [/!]setColor([!java|c]Color [/!]color[!scala]:Color[/!])"
msgstr "[!java|c]void [/!]setCor([!java|c]Cor [/!]cor[!scala]:Cor[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:72
msgid "Changes the pen color."
msgstr "Muda a cor da caneta."

#. type: Content of: <h2>
#: src/plm/universe/turtles/TurtleWorld.html:74
msgid "Other functions"
msgstr "Outras funções"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:77
msgid "Returns whether the current turtle is selected in the graphical interface."
msgstr "Retorna se a tartaruga atual está selecionada na interface gráfica."

#. type: Content of: <h3>
#: src/lessons/turtleart/Main.html:2 src/lessons/turtleart/short_desc.html:2
msgid "Turtle Art"
msgstr "Turtle Art"

#. type: Content of: <p>
#: src/lessons/turtleart/Main.html:4
msgid ""
"Since its inception in the 60's, the LOGO turtle fascinates by its ability "
"to draw nice figures on computer.  This lesson allows you to explore some of "
"the classical figures, and draw your own."
msgstr ""
"Desde a concepção dela nos anos 60, a tartaruga do LOGO fascinou pela "
"habilidade dela de desenhar belas figuras no computador. Este lição permite "
"que explore algumas das figuras clássicas e desenhe as suas próprias."

#. type: Content of: <p>
#: src/lessons/turtleart/Main.html:7
msgid ""
"The language's syntax is absolutely not presented, but if you know a bit of "
"it or if someone tells you, you can take these exercises even if you are an "
"absolute beginner in programming."
msgstr ""
"A sintaxe da linguagem é não vai ser apresentada, mas se conhece um pouco ou "
"se alguém lhe mostrar, pode tentar estes exercícios mesmo a ser um completo "
"iniciante em programação."

#. type: Content of: <p>
#: src/lessons/turtleart/Main.html:10
msgid ""
"Please send us your best contributions so that they get added to this "
"gallery to inspire the next ones."
msgstr ""
"Por favor mande-nos as suas melhores contribuições para que sejam "
"adicionadas a esta galeria para inspirar os próximos utilizadores."

#. type: Content of: <ul><li>
#: src/lessons/turtleart/Main.html:16
msgid ""
"Other exercises should be added. A whole lot of exercises are available from "
"<a "
"href=\"http://neoparaiso.com/logo/#sect4\">http://neoparaiso.com/logo/#sect4</a> "
"or from <a "
"href=\"http://billkerr2.blogspot.fr/2009/08/40-maths-shapes-challenges.html.\">http://billkerr2.blogspot.fr/2009/08/40-maths-shapes-challenges.html</a>."
msgstr ""
"Outros exercícios devem ser adicionados. Um conjunto completo de exercícios "
"está disponível em <a href=\"http://neoparaiso.com/logo/#sect4\""
">http://neoparaiso.com/logo/#sect4</a> ou em <a href=\"http://billkerr2."
"blogspot.fr/2009/08/40-maths-shapes-challenges.html.\">http://billkerr2."
"blogspot.fr/2009/08/40-maths-shapes-challenges.html</a>."

#. type: Content of: <ul><li>
#: src/lessons/turtleart/Main.html:19
msgid ""
"Missing: the built-ins arc() and arcTo(), that draw an arc, either w/o "
"moving or by moving to the end of the arc."
msgstr ""
"A faltar: os built-ins arc() e arcTo(), que desenham um arco, tanto a mover "
"ou sem mover para o final do arco."

#. type: Content of: <p>
#: src/lessons/turtleart/short_desc.html:3
msgid ""
"Draw beautiful figures with the Logo turtle, and learn programming while "
"playing."
msgstr ""
"Desenhe belas figuras com a tartaruga do Logo e aprenda a programar enquanto "
"brinca."

#. type: Content of: <p>
#: src/lessons/turtleart/short_desc.html:6
msgid ""
"You should know the basic syntax of the programming language you will "
"choose, but no exhaustive programming practice is required to take this "
"lesson."
msgstr ""
"Deve saber a sintaxe básica da linguagem de programação que escolher, mas "
"técnicas avançadas de programação não são necessárias para fazer esta lição."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/universe/ConsWorld.html:2
msgid "ConsWorld"
msgstr "ConsWorld"

#. type: Content of: <p>
#: src/lessons/recursion/cons/universe/ConsWorld.html:4
msgid ""
"This world allows you to experiment with the recursive lists, as they were "
"first introduced in Lisp. It is very similar to the BatWorld, but you are "
"supposed to write recursive functions working on [!python|java]recursive "
"strings. Since [!thelang] does not provide such a construct natively, the "
"ConsWorld defines recursive lists of type <code>RecList</code>.[/!] "
"[!scala]lists of integers (<code>List[Int]</code>).[/!]"
msgstr ""
"Este mundo permite que experimente com listas recursivas, pois foi "
"introduzido primeiro em Lisp. É muito similar ao BatWorld, mas deve escrever "
"funções recursivas que funcionem em [!python|java]cadeias recursivas. Desde "
"que [!thelang] não fornece tal contrução nativamente, o ConsWorld define "
"listas recursivas do tipo <code>RecList</code>.[/!] [!scala]listas de "
"inteiros (<code>List[Int]</code>).[/!]"

#. type: Content of: <p>
#: src/lessons/recursion/cons/universe/ConsWorld.html:12
msgid ""
"Any given such list is either the empty list (noted "
"<code>[!scala]Nil[/!][!java]null[/!][!python]None[/!]</code>), or an integer "
"followed by a list. If a list is not empty, you can retrieve its first "
"integer with <code>list.head</code> and the list containing its other "
"parameters with <code>list.tail</code>. Of course, the empty list has no "
"head nor the tail, so trying to access these elements will result in an "
"(unpleasant) error message."
msgstr ""
"Qualquer lista dada é ou a lista vazia (noted "
"<code>[!scala]Nil[/!][!java]null[/!][!python]None[/!]</code>), ou um inteiro "
"seguido de uma lista. Se uma lista não é vazia, pode recuperar o primeiro "
"inteiro dela com <code>list.head</code> e a lista a conter os demais "
"parâmetros com <code>list.tail</code>. Obviamente, a lista vazia não tem "
"head nem tail, portanto, tentar acessar estes elementos vai resultar numa "
"mensagem de erro (desagradável)."

#. type: Content of: <p>
#: src/lessons/recursion/cons/universe/ConsWorld.html:20
msgid ""
"To build your own list, you need to concatenate a head and a tail as "
"follows: [!java|python]<code>cons(head, tail)</code>[/!] "
"[!scala]<code>head::tail</code> Note that <code>::</code> is a generic "
"operator in Scala to build lists.[/!]"
msgstr ""
"Para construir a sua própria lista, precisa concatenar um head e um tail "
"como segue: [!java|python]<code>cons(head, tail)</code>[/!] "
"[!scala]<code>head::tail</code> Observe que <code>::</code> é um operador "
"genérico em Scala para construir listas.[/!]"

#. type: Content of: <p>
#: src/lessons/recursion/cons/universe/ConsWorld.html:26
msgid ""
"So, in summary, you can solve every exercises of this lesson with the "
"following constructs."
msgstr ""
"Logo, a resumir, pode resolver cada exercício desta lição com as seguintes "
"construções."

#. type: Content of: <ul><li>
#: src/lessons/recursion/cons/universe/ConsWorld.html:30
msgid "<b>The empty list:</b>"
msgstr "<b>A lista vazia:</b>"

#. type: Content of: <ul><li><pre>
#: src/lessons/recursion/cons/universe/ConsWorld.html:30
#, no-wrap
msgid "[!java]null[/!][!scala]Nil[/!][!python]None[/!]"
msgstr "[!java]null[/!][!scala]Nil[/!][!python]None[/!]"

#. type: Content of: <ul><li>
#: src/lessons/recursion/cons/universe/ConsWorld.html:31
msgid "<b>Get the first element of <code>l</code></b>"
msgstr "<b>Obtém o primeiro elemento de <code>l</code></b>"

#. type: Content of: <ul><li><pre>
#: src/lessons/recursion/cons/universe/ConsWorld.html:31
#, no-wrap
msgid "l.head"
msgstr "l.head"

#. type: Content of: <ul><li>
#: src/lessons/recursion/cons/universe/ConsWorld.html:32
msgid "<b>Get the rest of the list</b>, when the first element is removed:"
msgstr "<b>Obtém o resto da lista</b>, quando o primeiro elemento é removido:"

#. type: Content of: <ul><li><pre>
#: src/lessons/recursion/cons/universe/ConsWorld.html:32
#, no-wrap
msgid "l.tail"
msgstr "l.tail"

#. type: Content of: <ul><li>
#: src/lessons/recursion/cons/universe/ConsWorld.html:33
msgid ""
"<b>Build a list</b> from a <code>value</code> and a <code>list</code>: "
"[!java|python]"
msgstr ""
"<b>Constrói uma lista</b> a partir de um <code>valor</code> e uma "
"<code>lista</code>: [!java|python]"

#. type: Content of: <ul><li><pre>
#: src/lessons/recursion/cons/universe/ConsWorld.html:34
#, no-wrap
msgid "cons(value, list)"
msgstr "cons(value, list)"

#. type: Content of: <ul><li><pre>
#: src/lessons/recursion/cons/universe/ConsWorld.html:35
#, no-wrap
msgid "value::list"
msgstr "value::list"

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Main.html:2
msgid "Recursive Lists"
msgstr "Listas Recursivas"

#. type: Content of: <p>
#: src/lessons/recursion/cons/Main.html:3
msgid ""
"This lesson contains a bunch of classical exercises on recursive lists.  It "
"is certainly not the most pleasant lesson to do, but I think that it is the "
"easiest of the PLM lessons dealing with recursion."
msgstr ""
"Esta lição contém um monte de exercícios clássicos com listas recursivas. "
"Com certeza não é a lição mais agradável para fazer, mas das lições do PLM "
"que lidam com recursão, acho esta a mais fácil."

#. type: Content of: <ul><li>
#: src/lessons/recursion/cons/Main.html:10
msgid ""
"New exercises could be proposed, such as "
"http://webloria.loria.fr/~quinson/Teaching/TOP/02-td-recursivite-enonce.pdf "
"If you know some others, please report them as an issue."
msgstr ""
"Novos exercícios podem ser propostos, como http://webloria.loria.fr/~quinson/"
"Teaching/TOP/02-td-recursivite-enonce.pdf. Se conhecer outros, por favor "
"abra uma \"issue\" para relatar."

#. type: Content of: <ul><li>
#: src/lessons/recursion/cons/Main.html:13
msgid ""
"It would be interesting to check the asymptotic complexity of the student's "
"code, but that does not sound easy to do. In Python and Java (where we "
"provide a hand-made RecList class), we could count the amount of cons per "
"exercise, but it won't be easy to relate this to the right BatTest. For "
"Scala, it sounds even more difficult as we use the classical :: operators of "
"the language. That will be difficult to override to add a counting "
"mechanism. Another solution would be to ensure that the call stack does not "
"pass a given threshold, but that sounds very difficult too. Any idea is "
"welcome."
msgstr ""
"Pode ser interessante verificar a complexidade assintótica do código do "
"estudante, mas isto não parece fácil de fazer. Em Python e Java (onde "
"fornecemos uma classe RecList feita à mão), podemos contar a quantidade de "
"cons por exercício, mas não é fácil relacionar isto ao BatTest correto. Para "
"Scala, parece ainda mais difícil, pois usamos os operadores :: clássicos da "
"linguagem. Vai ser difícil fazer uma sobreposição (\"override\") para "
"adicionar um mecanismo de contagem. Outra solução seria garantir que a pilha "
"de chamadas não passe de um dado limiar, mas parece muito difícil de fazer "
"também. Quaisquer ideias são bem-vindas."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Length.html:2
msgid "Length"
msgstr "Comprimento"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Length.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return its "
"length[!scala] (without using its <code>size</code> method, of course)[/!].  "
"[!java|python]"
msgstr ""
"Dada uma [!scala]Lista[Int][/!][!java|python]lista recursiva[/!], retorna o "
"comprimento dele[!scala] (sem usar o método <code>size</code> dele, "
"claro)[/!].  [!java|python]"

#. type: Content of: <p>
#: src/lessons/recursion/cons/Length.html:5
msgid ""
"[!python]Be careful, you are not supposed to use the Python lists, but the "
"specific type defined in this exercise. [/!] Please refer to the world's "
"documentation for more information about recursive lists."
msgstr ""
"[!python]Cuidado, não pode usar listas de Python, mas sim o tipo específico "
"definido neste exercício. [/!] favor ver a documentação do mundo para mais "
"informações a respeito de listas recursivas."

#. type: Content of: <p>
#: src/lessons/recursion/cons/Length.html:10
#: src/lessons/recursion/cons/IsMember.html:7
#: src/lessons/recursion/cons/Occurrence.html:7
#: src/lessons/recursion/cons/Last.html:6 src/lessons/recursion/cons/Min.html:6
#: src/lessons/recursion/cons/Increasing.html:6
#: src/lessons/recursion/cons/ButLast.html:6
#: src/lessons/recursion/cons/PlusOne.html:5
#: src/lessons/recursion/cons/Remove.html:9
#: src/lessons/recursion/cons/ButNfirst.html:6
msgid "Your solution should be linear in time."
msgstr "A sua solução deve ser linear no tempo."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/IsMember.html:2
msgid "IsMember"
msgstr "IsMember"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/IsMember.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an "
"integer, return true if the given integer is one of the elements of the "
"list, or false if it cannot be found."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] e um inteiro, "
"retorna true se o dado inteiro é um dos elementos desta lista, ou false se "
"não for encontrado."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Occurrence.html:2
msgid "Occurrences"
msgstr "Occurrences"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Occurrence.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an "
"integer, return the amount of occurrences of the given integer in the "
"list. If the integer is not a member of the list, the function should thus "
"return 0."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] e um inteiro, "
"retorna a quantidade de ocorrências de um dado inteiro na lista. Se o "
"inteiro não for um membro da lista, a função deve retornar 0."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Last.html:2
msgid "Last"
msgstr "Last"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Last.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return its "
"last element.  You can assume that the list is not empty."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!], retorna o "
"último elemento dela. Pode assumir que a lista não é vazia."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Min.html:2
msgid "Min"
msgstr "Min"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Min.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return the "
"smallest of its values.  You will probably need an extra function, even if "
"you can assume that the list is not empty."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!], retorna o "
"menor dos seus valores. Vai precisar provavelmente de uma função adicional, "
"mesmo se puder assumir que a lista é não vazia."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Increasing.html:2
msgid "Increasing"
msgstr "Increasing"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Increasing.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return "
"whether its elements form an increasing sequence (i.e., if the elements are "
"sorted from the smallest to the largest one)."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!], retorna se "
"os elementos dela estão em ordem crescente (p.ex., se os elementos são "
"ordenados do menor ao maior)."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/ButLast.html:2
msgid "But Last"
msgstr "But Last"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/ButLast.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return the "
"list containing every elements but the last one.  You can assume that the "
"list is not empty."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!], retorna a "
"lista a conter todos os elementos exceto o último. Pode assumir que a lista "
"é não vazia."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/PlusOne.html:2
msgid "PlusOne"
msgstr "PlusOne"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/PlusOne.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return a new "
"list containing all elements of your parameter incremented by one."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!], retorne uma "
"nova lista a conter todos os elementos do seu parâmetro incrementados de um."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Remove.html:2
msgid "Remove"
msgstr "Remove"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Remove.html:4
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] "
"<code>L</code>and an integer, return a new list containing all elements of "
"<code>L</code> that are not equal to the value received as parameter."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] <code>L</"
"code> e um inteiro, retorna uma nova lista a conter todos os elementos de "
"<code>L</code> que não são iguais ao valor recebido como parâmetro."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Nth.html:2
msgid "Nth"
msgstr "Nth"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Nth.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
"<code>N</code>, return the <code>N</code>th element of the list."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] e um inteiro "
"<code>N</code>, retorna o <code>N</code>-ésimo elemento da lista."

#. type: Content of: <p>
#: src/lessons/recursion/cons/Nth.html:6
#: src/lessons/recursion/cons/Nfirst.html:7
msgid ""
"You can assume that the list is long enough, i.e. that there is at least "
"<code>N</code> elements.  Your solution should be linear in time."
msgstr ""
"Pode assumir que a lista é longa o suficiente, p.ex. que existe pelo menos "
"<code>N</code> elementos. A sua solução deve ser linear no tempo."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Nfirst.html:2
msgid "Nfirst"
msgstr "Nfirst"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Nfirst.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
"<code>N</code>, return the list constituted of the first <code>N</code> "
"elements. You can assume that the list is long enough, i.e. that there is at "
"least <code>N</code> elements."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] e um inteiro "
"<code>N</code>, retorna a lista constituída dos primeiros <code>N</code> "
"elementos. Pode assumir que a lista é longa o suficiente, p.ex. que existem "
"pelo menos <code>N</code> elementos."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Nlast.html:2
msgid "Nlast"
msgstr "Nlast"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Nlast.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
"<code>N</code>, return the list with only the <code>N</code> last elements."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] e um inteiro "
"<code>N</code>, retorna a lista com apenas os últimos <code>N</code> "
"elementos."

#. type: Content of: <p>
#: src/lessons/recursion/cons/Nlast.html:6
#: src/lessons/recursion/cons/ButNlast.html:6
#: src/lessons/recursion/cons/Concat.html:6
msgid ""
"Your solution should be linear in time, but you will probably need to define "
"several functions to achieve that complexity."
msgstr ""
"A sua solução deve ser linear no tempo, mas provavelmente precisa definir "
"várias funções para alcançar esta complexidade."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/cons/Nlast.html:8
#: src/lessons/recursion/cons/ButNlast.html:8
#: src/lessons/recursion/cons/Reverse.html:8
#: src/lessons/recursion/cons/Concat.html:8
msgid "I cannot do it in linear time"
msgstr "Não posso fazer isto em tempo linear"

#. type: Content of: <div>
#: src/lessons/recursion/cons/Nlast.html:9
#: src/lessons/recursion/cons/ButNlast.html:9
msgid ""
"The trick is to compute only once (and beforehand) how many elements you "
"should keep."
msgstr ""
"O segredo é calcular apenas uma vez (e previamente) quantos elementos deve "
"guardar."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/ButNfirst.html:2
msgid "But Nfirst"
msgstr "But Nfirst"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/ButNfirst.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
"<code>N</code>, return the list without the <code>N</code> first elements."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] e um inteiro "
"<code>N</code>, retorne a lista sem os primeiros <code>N</code> elementos."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/ButNlast.html:2
msgid "But Nlast"
msgstr "But Nlast"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/ButNlast.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!] and an integer "
"<code>N</code>, return the list without the <code>N</code> last elements."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!] e um inteiro "
"<code>N</code>, retorna a lista sem os últimos <code>N</code> elementos."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Reverse.html:2
msgid "Reverse"
msgstr "Reverse"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Reverse.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return a new "
"list with all elements in reverse order."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!], retorna uma "
"nova lista com todos os elementos em ordem inversa."

#. type: Content of: <p>
#: src/lessons/recursion/cons/Reverse.html:5
msgid ""
"This function is very important and you should not pass that challenge.  "
"Your solution should be linear in time, with the help of helper functions."
msgstr ""
"Esta função é muito importante e não deve pular este desafio. Sua solução "
"deve ser linear no tempo, com a ajuda de funções auxiliares."

#. type: Content of: <div>
#: src/lessons/recursion/cons/Reverse.html:9
msgid ""
"You need an helper function in which the result is accumulated (built) at "
"each step."
msgstr ""
"Precisa de uma função auxiliar na qual o resultado é acumulado (construído) "
"em cada passo."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Concat.html:2
msgid "Concat"
msgstr "Concat"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/Concat.html:3
msgid ""
"Given two [!scala]List[Int][/!][!java|python]recursive list[/!] "
"<code>l1</code> and <code>l2</code>, return a new list with all elements of "
"<code>l1</code> followed by the elements of <code>l2</code>."
msgstr ""
"Dadas duas [!scala]List[Int][/!][!java|python]recursive list[/!] <code>l1</"
"code> e <code>l2</code>, retorna uma nova lista com todos os elementos de "
"<code>l1</code> seguidos de todos os elementos de <code>l2</code>."

#. type: Content of: <div>
#: src/lessons/recursion/cons/Concat.html:9
msgid ""
"You need to modify <code>l1</code> beforehand so that the computations at "
"each step of the recursion are in constant time."
msgstr ""
"Precisa modificar <code>l1</code> antes de forma que os cálculos em cada "
"passo da recursão sejam em tempo constante."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/AllDifferent.html:2
msgid "All Different"
msgstr "All Different"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/cons/AllDifferent.html:3
msgid ""
"Given a [!scala]List[Int][/!][!java|python]recursive list[/!], return true "
"if any two elements of the list are different (ie, if no element appears "
"more than once in the list)."
msgstr ""
"Dada uma [!scala]List[Int][/!][!java|python]recursive list[/!], retorne true "
"se quaisquer dois elementos da lista são diferentes (ie, se nenhum elemento "
"aparece mais de uma vez na lista)."

#. type: Content of: <p>
#: src/lessons/recursion/cons/AllDifferent.html:6
msgid ""
"The simplest solution is in O(n²), meaning that it runs in quadratic time.  "
"You will probably have to define one extra function for that.  Another much "
"more complex solution runs in O(n log(n))."
msgstr ""
"A solução mais simples é em O(n²), o que significa que executa em tempo "
"quadrático. Provavelmente terá que definir uma função adicional para isto. "
"Outra solução muito mais complexa executa em O(n log(n))."

#. type: Content of: <h1>
#: src/lessons/recursion/lego/Main.html:2
msgid "Recursive algorithms"
msgstr "Algoritmos recursivos"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/Main.html:3
msgid "This lesson allows to experiment with recursive algorithms."
msgstr "Esta lição permite que se experimente com algoritmos recursivos."

#. type: Content of: <p>
#: src/lessons/recursion/lego/Main.html:5
msgid ""
"If you need more recursive algorithms, an exercise on recursive sorting "
"algorithms (in particular QuickSort and MergeSort) is planned in the future "
"within the sorting lesson."
msgstr ""
"Se precisa de mais algoritmos recursivos, um exercício em algoritmos de "
"ordenação recursivos (em particular QuickSort e MergeSort) está planejado no "
"futuro dentro da lição de ordenação."

#. type: Content of: <h3>
#: src/lessons/recursion/lego/Main.html:9
msgid "What can I do to improve this lesson?"
msgstr "O que ru posso fazer para melhorar esta lição?"

#. type: Content of: <p>
#: src/lessons/recursion/lego/Main.html:11
msgid ""
"As usual, there are several things that could be done in this lesson to "
"improve it further:"
msgstr ""
"Como sempre, existem várias coisas que podem ser feitas nesta lição para "
"melhorar ela ainda mais:"

#. type: Content of: <ul><li>
#: src/lessons/recursion/lego/Main.html:13
msgid ""
"The Sierpinski triangle can be drawn using a simpler L-system. See "
"http://jpvallon.free.fr/recursivite.html"
msgstr ""
"O triângulo de Sierpinski pode ser desenhado a usar um L-system mais "
"simples. Veja em http://jpvallon.free.fr/recursivite.html"

#. type: Content of: <ul><li>
#: src/lessons/recursion/lego/Main.html:14
msgid ""
"The arrowhead curve is also interesting: "
"http://www.mathcurve.com/fractals/sierpinski/sierpinskitriangle.shtml"
msgstr ""
"A curva \"arrowhead\" também é interessante: http://www.mathcurve.com/"
"fractals/sierpinski/sierpinskitriangle.shtml"

#. type: Content of: <ul><li>
#: src/lessons/recursion/lego/Main.html:15
msgid ""
"The dragon curve could be explained as a L-system: "
"http://ecademy.agnesscott.edu/~lriddle/ifs/heighway/heighway.htm"
msgstr ""
"A curva do dragão pode ser explicada como um L-system: http://ecademy."
"agnesscott.edu/~lriddle/ifs/heighway/heighway.htm"

#. type: Content of: <ul><li>
#: src/lessons/recursion/lego/Main.html:16
msgid ""
"The dragon2 curve is called the twin dragon: "
"http://ecademy.agnesscott.edu/~lriddle/ifs/heighway/twindragon.htm"
msgstr ""
"A curva do dragão2 é chamada de \"twin dragon\": http://ecademy.agnesscott."
"edu/~lriddle/ifs/heighway/twindragon.htm"

#. type: Content of: <ul><li>
#: src/lessons/recursion/lego/Main.html:17
msgid ""
"The space filling curves could be added (Peano, Hildebert, etc).  See: "
"http://teachout1.net/village/fill.html"
msgstr ""
"As curvas de preenchimento de spaço podem ser adicionadas (Peano, Hildebert, "
"etc).  Veja: http://teachout1.net/village/fill.html"

#. type: Content of: <ul><li>
#: src/lessons/recursion/lego/Main.html:19
msgid ""
"We could do another exercise on embeeded polygons: "
"http://www.inrialpes.fr/helix/people/genoud/ENSJAVA/tds/sujets/dessinsReccursifs/actionsrecursives.html"
msgstr ""
"Podemos fazer outro exercício em polígonos \"embeeded\": http://www.inrialpes"
".fr/helix/people/genoud/ENSJAVA/tds/sujets/dessinsReccursifs/"
"actionsrecursives.html"

#. type: Content of: <h3>
#: src/lessons/recursion/lego/short_desc.html:2
msgid "Bases of recursion"
msgstr "As bases da recursão"

#. type: Content of: <p>
#: src/lessons/recursion/lego/short_desc.html:3
msgid ""
"Discover the recursive way of thinking by drawing trees and other figures "
"with the Logo turtle."
msgstr ""
"Descobrir a forma recursiva de pensar a desenhar árvores e outras figuras "
"com a tartaruga do Logo."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/square/FourSquare.html:2
msgid "The small cousines of Buggles"
msgstr "Os primos menores dos buggles"

#. type: Content of: <p>
#: src/lessons/recursion/lego/square/FourSquare.html:4
msgid ""
"Today, we will meet the small cousines of the buggles: the turtles. In fact, "
"turtles are much olders than the buggles. They were invented in the 70's by "
"a scientific from MIT called Seymour Papert to help teaching programming, "
"and the buggles are a variation on the idea invented by Lyn Turbak from "
"Wellesley College later."
msgstr ""
"Hoje vamos conhecer os primos menores dos buggles: as tartarugas. Na "
"verdade, as tartarugas são muito mais velhas que os buggles. Elas foram "
"inventadas nos anos 70 por um cientista do MIT chamado Seymour Papert para "
"ajudar no ensino de programação e os buggles são uma variação da idéia "
"seguinte de Lyn Turbak do Wellesley College."

#. type: Content of: <p>
#: src/lessons/recursion/lego/square/FourSquare.html:10
msgid ""
"Turtles are thus a bit like buggles, but smaller. Just like buggles, you can "
"order them to move forward, to turn, to move backward, etc. Just like "
"buggles, they leave a line on their path when they move (but the line is "
"much smaller)."
msgstr ""
"Tartarugas então, são meio parecidas com buggles, mas menores. Como os "
"buggles, pode mandar que elas se movam para a frente, virem, se movam para "
"trás, etc. Como os buggles, elas deixam uma linha no caminho por onde passam "
"(mas a linha é muito menor)."

#. type: Content of: <p>
#: src/lessons/recursion/lego/square/FourSquare.html:15
msgid ""
"The main difference is that where buggles can only move of right angles, "
"turtles can move of any arbitrary angles specified by a real number (a "
"double). This gives them much more liberty in their movings. The buggles can "
"do several other tricks, like reading and writting messages, picking or "
"dropping objects, and there is sometimes walls in their worlds (but all this "
"is completely above the capacities of turtles)."
msgstr ""
"A principal diferença é que enquanto os buggles podem se mover apenas em "
"ângulos retos, as tartarugas podem se mover em qualquer ângulo especificado "
"por um número real (um double). Isto dá-lhes muito mais liberdade nos "
"movimentos deles. Já os buggles podem fazer vários outros truques, como ler "
"e escrever mensagens, apanhar e soltar objetos e às vezes lidar com paredes "
"existentes nos mundos (mas isto está totalmente além da capacidade das "
"tartarugas)."

#. type: Content of: <p>
#: src/lessons/recursion/lego/square/FourSquare.html:22
msgid ""
"From a practical point of view, most of the methods you knew about buggles "
"still work with turtles, with some minor adaptations. In particular, the "
"<code>forward()</code> method takes the amount of steps to do not as an "
"integer, but as a [!python]point number[/!][!java|scala|c]double[/!] (see "
"\"About this world\" for more details)."
msgstr ""
"De um ponto de vista prático, a maioria dos métodos que conhece sobre "
"buggles ainda funciona com tartarugas, com pequenas adaptações. Em "
"particular, o método <code>forward()</code> leva a quantidade de passos a "
"dar não como inteiro, mas como [!python]point "
"number[/!][!java|scala|c]double[/!] (veja \"Sobre este mundo\" para maiores "
"detalhes)."

#. type: Content of: <h3>
#: src/lessons/recursion/lego/square/FourSquare.html:29
msgid "Doubles? But what is it?"
msgstr "Doubles? Mas o que é isto?"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/square/FourSquare.html:30
msgid "It's simply a point number. Example:"
msgstr "é simplesmente um número com vírgula. Por exemplo:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/square/FourSquare.html:32
#, no-wrap
msgid ""
"double x = 3.72;\n"
"x + 1.234 // Value = 4.954\n"
"x + 2. // Value = 5.72 (2. means 2.0)\n"
"x + 2 // [!java|c]Value = 5.72 (2 automatically converted to "
"2.0)[/!][!scala]Type error (+ operator don't mix Double and Int); manual "
"conversion mandatory[/!]\n"
"x * 2. // Value = 7.44 \n"
"x / 2. // Value = 1.86 \n"
"[!java|c](int) x[/!][!scala]x.asInstanceOf[Int][/!] // Value = 1 (“casting "
"to int”, converted to integer by truncating)\n"
"Math.round(x) // Value = 2 (1.86 rounded to nearest integer)\n"
"Math.floor(x) // Value = 1 (1.86 rounded toward minus infinity)\n"
"Math.floor(-5.12) // Value = -6 (rounded toward minus infinity)\n"
"Math.ceiling(x) // Value = 2 (1.86 rounded toward plus infinity)\n"
"Math.ceiling(-5.12) // Value = -5 (rounded toward plus infinity)\n"
"[!java|c](double) 17[/!][!scala]17.asInstanceOf[Double][/!] // Value = 17.0 "
"(“casted to double”, converted to double)\n"
msgstr ""
"double x = 3.72;\n"
"x + 1.234 // Valor = 4.954\n"
"x + 2. // Valor = 5.72 (2. significa 2.0)\n"
"x + 2 // [!java|c]Value = 5.72 (2 convertido automaticamente em 2."
"0)[/!][!scala]Erro de tipo (o operador + não mistura Double e Int); é "
"obrigatória a conversão manual[/!]\n"
"x * 2. // Valor = 7.44 \n"
"x / 2. // Valor = 1.86 \n"
"[!java|c](int) x[/!][!scala]x.asInstanceOf[Int][/!] // Valor = 1 (“a fazer "
"cast para int”, convertido para integer a truncar)\n"
"Math.round(x) // Valor = 2 (1.86 arredondado ao inteiro mais próximo)\n"
"Math.floor(x) // Valor = 1 (1.86 rounded toward minus infinity)\n"
"Math.floor(-5.12) // Valor = -6 (rounded toward minus infinity)\n"
"Math.ceiling(x) // Valor = 2 (1.86 rounded toward plus infinity)\n"
"Math.ceiling(-5.12) // Valor = -5 (rounded toward plus infinity)\n"
"[!java|c](double) 17[/!][!scala]17.asInstanceOf[Double][/!] // Valor = 17.0 "
"(“feito cast para double”, convertido para double)\n"

#. type: Content of: <p>
#: src/lessons/recursion/lego/square/FourSquare.html:49
msgid ""
"Even if this is the first exercise on the recursivity lesson, the code you "
"have to write is not recursive. The goal is to get familiar with the turtle "
"world before getting on serious matter."
msgstr ""
"Mesmo este a ser o primeiro exercício da lição de recursividade, o código "
"que tem que escrever não é recursivo. O objetivo é se familiarizar com o "
"mundo da tartaruga antes da coisa começar a ficar séria."

#. type: Content of: <p>
#: src/lessons/recursion/lego/square/FourSquare.html:53
msgid ""
"You must reproduce a simple geometrical painting constituted of four 100 "
"steps long squares (see the objective world for more details). It is "
"obviously a good idea to write a method to draw a square, and then use it in "
"your code."
msgstr ""
"Deve reproduzir uma pintura geometricamente simples de quatro quadrados de "
"comprimento de 100 passos (veja o mundo objetivo para mais detalhes). É "
"obviamente uma boa ideia escrever um método para desenhar um quadrado e "
"então usá-lo no nosso código."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/polygonfractal/PolygonFractal.html:2
msgid "Fractal of polygons"
msgstr "Fractal de polígonos"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/polygonfractal/PolygonFractal.html:4
msgid ""
"The fractal we will now draw is formed of a polygon, with little polygons on "
"each corner. The prototype of the method drawing it is the following:"
msgstr ""
"O fractal que vamos desenhar agora é formado de um polígono, com pequenos "
"polígonos em cada canto. O protótipo do método que vai desenhá-lo é o "
"seguinte:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/polygonfractal/PolygonFractal.html:6
#, no-wrap
msgid ""
"[!java|c]void [/!]polygonFractal ([!java|c]int [/!]levels[!scala]:Int[/!], "
"[!java|c]int [/!]sides[!scala]:Int[/!], [!java|c]double "
"[/!]length[!scala]:Double[/!], [!java|c]double "
"[/!]shrink[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]fractalDoPolígono ([!java|c]int [/!]níveis[!scala]:Int[/!]"
", [!java|c]int [/!]lados[!scala]:Int[/!], [!java|c]double "
"[/!]comprimento[!scala]:Double[/!], [!java|c]double "
"[/!]shrink[!scala]:Double[/!])"

#. type: Content of: <p>
#: src/lessons/recursion/lego/polygonfractal/PolygonFractal.html:8
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:26
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:45
msgid ""
"Have a look at each world's objective view to understand how to write the "
"function."
msgstr ""
"Dê uma olhada em cada visão de mundo objetivo para entender como escrever a "
"função."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/Koch.html:2
msgid "Snow flake"
msgstr "Floco de neve"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/koch/Koch.html:4
msgid ""
"We will now draw snow flakes using the Koch fractal. A fractal is a "
"geometric pattern repeated at every scale."
msgstr ""
"Vamos agora desenhar flocos de neve a usar o Koch fractal. Um fractal é um "
"padrão geométrico repetido em cada escala."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Koch.html:7
msgid ""
"The general form is a triangle, with each side given by several recursive "
"calls. Your work is only to write the code of the <code>snowSide</code> "
"method so that it draws one side of the triangle. To make it easier, each "
"sides are represented in a specific color. Just draw the red things (without "
"changing your pen color), and the other colors will be drawn automatically."
msgstr ""
"A forma geral é um triângulo, com cada lado dado por várias chamadas "
"recursivas. O seu trabalho é apenas escrever o código do método "
"<code>snowSide</code> de forma que desenhe um lado do triângulo. Para "
"facilitar, cada um dos lados é representado numa cor específica. "
"Simplesmente desenhe as coisas vermelhas (sem mudar a cor da sua caneta) e "
"as outras cores serão desenhadas automaticamente."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Koch.html:13
msgid ""
"Observe the drawing in each world's objective to understand the pattern's "
"logic, and then reproduce it. At level 0, the Koch curve is just a straight "
"line.  At level 1, the curve is divided in three thirds, and the middle part "
"is replaced by the two sides of an equilateral triangle of the same length "
"as the segment being removed.  At level 2, the process is repeated, whith "
"each segments split in three parts and the middle part being replaced by the "
"two sides of an equilateral triangle."
msgstr ""
"Observe o desenho em cada um dos mundos objetivo para entender a lógica do "
"padrão e então reproduza ele. No nível 0, a curva de Koch é apenas uma linha "
"reta. No nível 1, a curva é dividida em três terços e a parte média é "
"substituída pelos dois lados de um triângulo equilátero do mesmo comprimento "
"do segmento a ser removido. No nível 2, o processo é repetido, com cada um "
"dos segmentos dividido em três partes e a parte do meio a ser substituída "
"pelos dois lados de um triângulo equilátero."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Koch.html:20
msgid "The pseudo-code of the general case is the following:"
msgstr "O pseudo-código do caso geral é o seguinte:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/koch/Koch.html:22
#, no-wrap
msgid ""
"  Draw recursively a smaller segment\n"
"  Turn 60 degrees to the left\n"
"  Draw recursively a smaller segment  \n"
"  Turn 120 degrees to the right\n"
"  Draw recursively a smaller segment\n"
"  Turn 60 degrees to the left\n"
"  Draw recursively a smaller segment\n"
msgstr ""
"  Desenhe recursivamente um segmento menor\n"
"  Gire 60 graus para a esquerda\n"
"  Desenhe recursivamente um segmento menor\n"
"  Gire 120 graus para a direita\n"
"  Desenhe recursivamente um segmento menor\n"
"  Gire 60 graus para a esquerda\n"
"  Desenhe recursivamente um segmento menor\n"

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Koch.html:30
msgid ""
"As you can see, the function forward() is not called from the recursive "
"case, only in the base case when there is no recursive call."
msgstr ""
"Como pode ver, a função forward() não é chamada no caso recursivo, apenas no "
"caso base quando não existe chamada recursiva."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/recursion/lego/koch/Koch.html:34
msgid "Too much letters. Please picture it."
msgstr "Muitas letras. Favor \"picture it\"."

#. type: Content of: <p><div><p>
#: src/lessons/recursion/lego/koch/Koch.html:35
#: src/lessons/recursion/lego/koch/SquareKoch.html:9
msgid "Here are the results of the first levels of recursion."
msgstr "Aqui estão os resultados dos primeiro níveis da recursão."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Koch.html:39
msgid ""
"You must write the <code>snowSide()</code> method, which is recursive but "
"<b>do not call snowFlake from snowSide</b>, or you will get very strange and "
"unexpected behaviors."
msgstr ""
"Deve escrever o método <code>snowSide()</code>, que é recursivo mas <b>não "
"chame snowFlake de dentro de snowSide</b>, ou vão acontecer resultados "
"estranhos e inesperados."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/SquareKoch.html:2
msgid "Snow square"
msgstr "Snow square"

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/SquareKoch.html:4
msgid ""
"This exercise is a variation over the snow flake that we saw previously.  "
"The main difference is that we are growing little squares instead of "
"triangles on the sides of the figure."
msgstr ""
"Este exercício é uma variação sobre o snow flake que vimos previamente. A "
"principal diferença é que vamos fazer crescer pequenos quadrados ao invés de "
"triângulos nos lados da figura."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/recursion/lego/koch/SquareKoch.html:8
msgid "I don't see it, sorry. Please picture it."
msgstr "Desculpe, não vi isto. Favor \"picture it\"."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/SquareKoch.html:14
msgid ""
"As previously, your <code>squareSide</code> function should only draw one "
"side of the figure, and the template will call it for all sides "
"automatically (with one color per side)."
msgstr ""
"Como anteriormente, a sua função <code>squareSide</code> deve apenas "
"desenhar um lado da figura e o modelo vai chamar ela para todos os lados "
"automaticamente (com uma cor por lado)."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/PentaKoch.html:2
msgid "Snow pentagon"
msgstr "Snow pentagon"

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/PentaKoch.html:4
msgid ""
"Here comes yet another variation of the Koch curve. This time, we grow "
"little pentagons (ie, polygons with five sides each). I'm sure you get it "
"now."
msgstr ""
"Aqui vai outra variação da curva de Koch. desta vez, vamos crescer pequenos "
"pentágonos (ie, polígonos com cinco lados cada). Tenho certeza que agora "
"compreendeu."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/PentaKoch.html:7
msgid ""
"Another difference with earlier is that the length is not divided by three "
"at each step anymore, but multiplied by 0.4. The curve looks better this way "
":)"
msgstr ""
"Outra diferença com o anterior é que o comprimento não é mais dividido por "
"três em cada passo, mas multiplicado por 0.4. A curva parece melhor desta "
"forma :)"

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/PentaKoch.html:10
msgid ""
"We draw only one side in this exercise so your code will be called only once "
"this time."
msgstr ""
"Desenhamos apenas um lado neste exercício de forma que o seu código vai ser "
"chamado apenas uma vez agora."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/HexaKoch.html:2
msgid "Snow hexagon"
msgstr "Snow hexagon"

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/HexaKoch.html:4
msgid ""
"This time, we will draw the curve that is known as the (6, 0.14)-Koch "
"curve. This means that you have to grow 6-sided polygons on the segments, "
"and that the length should be multiplied by 0.14 at each recursion level."
msgstr ""
"Agora vamos desenhar a curva conhecida por curva (6, 0.14)-Koch. Isto "
"significa que tem que crescer polígonos de 6 lados nos segmentos e que o "
"comprimento deve ser multiplicado por 0.14 em cada nível de recursão."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/HexaKoch.html:8
msgid ""
"For the record, the original Koch curve is the (3, 1/3)-Koch curve, the Snow "
"square would be (4,1/3)-Koch curve while the Snow pentagon is also called "
"the (5, 0.4)-Koch curve. If you want, you can switch to the creative mode in "
"the menu and explore freely other Koch curves. Just change the initial call "
"to hexaKoch to what you want."
msgstr ""
"Para que conste, a curva de Koch original é a curva (3, 1/3)-Koch, a Snow "
"square será a curva (4,1/3)-Koch enquanto a Snow pentagon é também chamada "
"de curva (5, 0.4)-Koch. Se quiser, pode mudar ao modo criativo no menu e "
"explorar livremente outras curvas de Koch. Simplesmente mude a chamada "
"inicial de hexaKoch para o que quiser."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/HexaKoch.html:13
msgid ""
"For further reference, please see <a "
"href=\"http://ecademy.agnesscott.edu/~lriddle/ifs/kcurve/kcurve.htm\">http://ecademy.agnesscott.edu/~lriddle/ifs/kcurve/kcurve.htm</a>."
msgstr ""
"Para mais referências, favor ler <a href=\"http://ecademy.agnesscott.edu/~"
"lriddle/ifs/kcurve/kcurve.htm\">http://ecademy.agnesscott.edu/~lriddle/ifs/"
"kcurve/kcurve.htm</a>."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/Crab.html:2
msgid "Fractal Crab"
msgstr "Carangueijo Fractal"

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Crab.html:4
msgid ""
"The Crab curve is not exactly a Koch curve, but that's still a fractal and "
"it's built rather similarly.  This time, we grow square triangle on the side "
"of the figure: the angle is 45 degrees, and the length is divided by "
"[!java|scala]Math.sqrt(2)[/!][!python]math.sqrt(2)[/!][!c]sqrt(2);[/!] at "
"each step."
msgstr ""
"A curva do carangueijo não é exatamente uma curva de Koch, mas ainda é um "
"fractal e e construída de forma similar. Desta vez, vamos crescer um "
"triângulo retângulo na lateral da figura: o ângulo é de 45 graus e o "
"comprimento é dividido por [!java|scala]Math.sqrt(2)[/!][!python]math."
"sqrt(2)[/!][!c]sqrt(2);[/!] em cada passo."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Crab.html:8
msgid ""
"Check the figures produced by the first steps of recursion to understand the "
"pattern."
msgstr ""
"Verifique as figuras produzidas pelos primeiros passos da recursão para "
"entender o padrão."

#. type: Content of: <h3>
#: src/lessons/recursion/lego/koch/Crab.html:10
msgid "Bibliographical note"
msgstr "nota bibliográfica"

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Crab.html:11
msgid ""
"This curve, also called the Lévy C curve was invented in 1938 by the French "
"mathematician Paul Lévy.  As usual, the wikipedia page is very instructive, "
"and the page provide very good additions: <a "
"href=\"http://www.mathcurve.com/fractals/c/c.shtml\">http://www.mathcurve.com/fractals/c/c.shtml</a>."
msgstr ""
"Esta curva, também chamada de curva C de Lévy foi inventada em 1938 pelo "
"matemático francês Paul Lévy in 1938. Como sempre, a página da wikipédia é "
"bem instrutiva, além de fornecer ótimos extras: <a href=\"http://www."
"mathcurve.com/fractals/c/c.shtml\">http://www.mathcurve.com/fractals/c/c."
"shtml</a>."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/tree/Tree.html:2
msgid "Trees"
msgstr "Árvores"

#. type: Content of: <p>
#: src/lessons/recursion/lego/tree/Tree.html:4
msgid ""
"We will now draw trees. For that, we will write a method using double "
"recursion following this prototype"
msgstr ""
"Vamos agora construir árvores. Para isto, vamos escrever um método a usar "
"recursão dupla a seguir este protótipo"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/tree/Tree.html:6
#, no-wrap
msgid ""
"[!java|c]void [/!]tree([!java|c]int [/!]steps[!scala]:Int[/!], "
"[!java|c]double [/!]length[!scala]:Double[/!], [!java|c]double "
"[/!]angle[!scala]:Double[/!], [!java|c]double [/!]shrink[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]árvore([!java|c]int [/!]passos[!scala]:Int[/!], [!java|c]"
"double [/!]comprimento[!scala]:Double[/!], [!java|c]double "
"[/!]ângulo[!scala]:Double[/!], [!java|c]double [/!]shrink[!scala]:Double[/!])"

#. type: Content of: <p>
#: src/lessons/recursion/lego/tree/Tree.html:8
msgid ""
"To draw a tree of four levels, you have to draw a trunk of the given length, "
"turn right of the given angle, draw a tree of level 3, turn left twice of "
"the given angle, draw another tree of level 3, and come back to your initial "
"location. Don't forget to come back to the initial location!"
msgstr ""
"Para desenhar uma árvore de quatro níveis, deve desenhar um tronco do "
"comprimento dado, virar à direita num ângulo dado, desenhar uma árvore de "
"nível 3, virar a esquerda duas vezes no ângulo dado, desenhar outra árvore "
"de nível 3 e voltar à posição inicial. Não se esqueça de voltar à posição "
"inicial!"

#. type: Content of: <p><p><p>
#: src/lessons/recursion/lego/tree/Tree.html:13
msgid ""
"If a tree's trunk is of length 'len', the trunk of the next level tree will "
"be of length 'len*shrink'."
msgstr ""
"Se um tronco da árvore é de comprimento 'len', o tronco da árvore no próximo "
"nível será de comprimento 'len*shrink'."

#. type: Content of: <p><p><p><p><p>
#: src/lessons/recursion/lego/tree/Tree.html:16
msgid ""
"At the end, here is the pseudo-code of the general case (you should add the "
"base case yourself):"
msgstr ""
"Finalmente, aqui está o pseudo-código do caso geral (deve adicionar o caso "
"base por si só):"

#. type: Content of: <p><p><p><p><pre>
#: src/lessons/recursion/lego/tree/Tree.html:18
#, no-wrap
msgid ""
"  Move forward of the desired length\n"
"  Draw (recursively) the right subtree\n"
"  Draw (recursively) the left subtree\n"
"  Move back to your initial position\n"
msgstr ""
"  Mova para a frente no comprimento desejado\n"
"  Desenhe (recursivamente) a sub-árvore da direita\n"
"  Desenhe (recursivamente) a sub-árvore da esquerda\n"
"  Mova para trás para a posição inicial\n"

#. type: Content of: <p><p><p><p><p>
#: src/lessons/recursion/lego/tree/Tree.html:23
msgid ""
"Don't forget to add the base case to your code, or your buggle will enter an "
"infinite loop.  Then, drawing the right subtree comes down to turn right and "
"then draw the subtree."
msgstr ""
"Não se esqueça de adicionar o caso base ao seu código, ou o seu buggle vai "
"entrar num loop infinito. Então, desenhar a sub-árvore da direita é virar a "
"direita e desenhar a sub-árvore."

#. type: Content of: <p><p><p><p><p>
#: src/lessons/recursion/lego/tree/Tree.html:26
msgid ""
"As you can see, each recursion level is represented by a distinctive "
"color. For that, you have to call the <code>current(step)</code>, passing "
"the current recursion level as a parameter. This will pick the right color "
"for you.  Don't erase your great colors when you move back to your initial "
"location."
msgstr ""
"Como pode ver, cada nível de recursão é representado por uma cor diferente. "
"Para isto, tem que chamar o <code>current(step)</code>, passar o nível de "
"recursão atual como parâmetro. Isto vai escolher a cor certa para si. Não "
"apague as suas belas cores quando se mover de volta para sua posição inicial."

#. type: Content of: <p><p><p><p><p>
#: src/lessons/recursion/lego/tree/Tree.html:30
msgid ""
"If you get your function wrong, this can easily become hairly to debug as "
"your errors will appear at each level of the recursion, completely changing "
"the drawing.  For debugging purpose, you can use the <code>subtree()</code> "
"that will draw a correct subtree. This function is then very similar to the "
"one you are trying to write. The only difference is that "
"<code>subtree()</code> only draws in black. So, you can use it instead of a "
"recursive call to debug your code, but you have to change for a proper "
"recursive call to your own code (once it works)  to get the colors right, "
"and pass the exercise."
msgstr ""
"Se a função foi feita errada, pode rapidamente ficar muito difícil de "
"depurar, pois, os erros vão aparecer em cada nível da recursão, a mudar "
"completamente o desenho. Por questões de depuração, pode usar o "
"<code>subtree()</code> que vai desenhar uma sub-árvore corretamente. Esta "
"função é, portanto muito similar àquela que está a tentar escrever. A única "
"diferença é que <code>subtree()</code> apenas desenha em preto. Logo, pode "
"usar ela no lugar da chamada recursiva para depurar o seu código, mas vai "
"ter que mudar para uma chamada recursiva adequada no seu próprio código (uma "
"vez que funcione) para obter as cores certas e passar no exercício."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/sierpinski/Sierpinski.html:2
msgid "Sierpinski's Triangle"
msgstr "Triângulo de Sierpinski"

#. type: Content of: <p>
#: src/lessons/recursion/lego/sierpinski/Sierpinski.html:4
msgid ""
"The fractal we will now draw is formed of a big triangle inside which "
"several smaller triangles are embedded. The prototype of the function to "
"draw it is the following:"
msgstr ""
"O fractal que vamos desenhar é formado de um grande triângulo dentro do qual "
"há vários pequenos triângulos. O protótipo da função que desenha isto é o "
"seguinte:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/sierpinski/Sierpinski.html:7
#, no-wrap
msgid ""
"[!java|c]void [/!]sierpinski([!java|c]int [/!]level[!scala]:Int[/!], "
"[!java|c]double [/!]length[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]sierpinski([!java|c]int [/!]nível[!scala]:Int[/!], "
"[!java|c]double [/!]comprimento[!scala]:Double[/!])"

#. type: Content of: <p>
#: src/lessons/recursion/lego/sierpinski/Sierpinski.html:9
msgid ""
"Have a look at each world's objective view to understand how to write the "
"function.  To draw one side of the triangle, draw a smaller recursive "
"triangle (halve the length) and move forward by the requested length.  "
"Globally, you have to draw 3 such sides and turn by 120 between each side."
msgstr ""
"Dê uma olhada em cada uma das visões do mundo objetivo para entender como "
"escrever a função. Para desenhar um lado do triângulo, desenhe um triângulo "
"recursivo menor (metade do comprimento) e mova para a frente a distancia "
"desejada. Globalmente, tem que desenhar 3 destes lados e girar 120 graus a "
"cada lado."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/spiral/Spiral.html:2
msgid "Spirals"
msgstr "Espirais"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/spiral/Spiral.html:4
msgid ""
"We will now draw our first recursive function with the turtle. The goal is "
"to draw different kind of spirals with the same function, which prototype is "
"the following:"
msgstr ""
"Vamos agora desenhar nossa primeira função recursiva com a tartaruga. O "
"objetivo é desenhar diferentes tipos de espirais com a mesma função, cujo "
"protótipo é o seguinte:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/spiral/Spiral.html:7
#, no-wrap
msgid ""
"[!java|c]void [/!]spiral([!java|c]int [/!]steps[!scala]:Int[/!], "
"[!java|c]int [/!]angle[!scala]:Int[/!], [!java|c]int "
"[/!]length[!scala]:Int[/!], [!java|c]int [/!]increment[!scala]:Int[/!])"
msgstr ""
"[!java|c]void [/!]espiral([!java|c]int [/!]passos[!scala]:Int[/!], [!java|c]"
"int [/!]ângulo[!scala]:Int[/!], [!java|c]int [/!]comprimento[!scala]:Int[/!]"
", [!java|c]int [/!]incremento[!scala]:Int[/!])"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/spiral/Spiral.html:9
msgid ""
"To help you understanding how to write it, here is an example of how the "
"parameters change during one specific call:"
msgstr ""
"Para ajudar a entender como escrever isto, aqui está um exemplo de como os "
"parâmetros mudam durante uma chamada específica:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/spiral/Spiral.html:12
#, no-wrap
msgid ""
"spiral(5, 90, 0, 3);\n"
"  forward(0);\n"
"  left(90);\n"
"  spiral(4,90,3,3);\n"
"    forward(3);\n"
"    left(90);\n"
"    spiral(3,90,6,3);\n"
"      forward(6);\n"
"      left(90);\n"
"      spiral(2,90,9,3);\n"
"        forward(9);\n"
"        left(90);\n"
"        spiral(1,90,12,3);\n"
"          forward(12);\n"
"          left(90);\n"
"          spiral(0,90,12,3);\n"
msgstr ""
"espiral(5, 90, 0, 3);\n"
"  avançar(0);\n"
"  esquerda(90);\n"
"  espiral(4,90,3,3);\n"
"    avançar(3);\n"
"    esquerda(90);\n"
"    espiral(3,90,6,3);\n"
"      avançar(6);\n"
"      esquerda(90);\n"
"      espiral(2,90,9,3);\n"
"        avançar(9);\n"
"        esquerda(90);\n"
"        espiral(1,90,12,3);\n"
"          avançar(12);\n"
"          esquerda(90);\n"
"          espiral(0,90,12,3);\n"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/spiral/Spiral.html:30
msgid ""
"Note that you only have to write the function, not the initial call.  Each "
"world will provide a specific set of initial parameters (use the combobox to "
"switch to other worlds). For example, the \"Square Pyramid\" world will call "
"your function as follows:"
msgstr ""
"Note que só tem de escrever a função, não a chamada inicial.  Cada mundo irá "
"fornecer um conjunto específico de parâmetros iniciais (use a combobox para "
"mudar para outros mundos). Por exemplo, o mundo \"Pirâmide Quadrada\" irá "
"chamar a sua função da seguinte forma:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/spiral/Spiral.html:36
#, no-wrap
msgid "spiral(100, 90, 0, 3);\n"
msgstr "spiral(100, 90, 0, 3);\n"

#. type: Content of: <h2>
#: src/lessons/recursion/lego/spiral/SpiralUse.html:2
msgid "Drawing spirals"
msgstr "Desenhar espirais"

#. type: Content of: <p>
#: src/lessons/recursion/lego/spiral/SpiralUse.html:4
msgid ""
"This exercise is not really an exercise in that sense that you just have to "
"click on the Execute button to get the reward: All the needed code is "
"already provided. Instead, you can here explore the possibilities of the "
"code you just wrote by changing the parameters of the call to the "
"<code>spiral</code> function. You can move on to the next exercise if you "
"are short on time, and come back later to play around."
msgstr ""
"Este exercício não é realmente um exercício pois tem que simplesmente clicar "
"no botão Executar para ter uma recompensa: todo o código necessário já está "
"pronto. Na verdade, pode explorar as possibilidades do código que acabou de "
"escrever a mudar os parâmetros da chamada da função <code>spiral</code>. "
"Pode mover ao próximo exercício se estiver com pressa e voltar depois para "
"experimentar este."

#. type: Content of: <p>
#: src/lessons/recursion/lego/spiral/SpiralUse.html:10
msgid ""
"Here are some of the figures that you can produce with your "
"<code>Spiral</code> function, provided that you come with the right "
"parameters. You can switch to the creative mode (from the Exercise menu)  to "
"disable the world comparison when you explore with these spirals."
msgstr ""
"Aqui estão algumas figuras que pode produzir com a sua função <code>Spiral</"
"code>, dado que passe os parâmetros certos. Pode mudar ao modo criativo (do "
"menu Exercício) para desativar a comparação de mundos quando estiver a "
"explorar com estas espirais."

#. type: Content of: <p>
#: src/lessons/recursion/lego/spiral/SpiralUse.html:21
msgid ""
"If you discover a cool figure, don't forget to send your parameters (menu "
"Help/feedback) so that we can add it to the list!"
msgstr ""
"Se descobrir uma figura legal, não se esqueça de enviar os seus parâmetros ("
"menu Ajuda/\"Dizer o que achou\") para que possamos adicionar a esta lista!"

#. type: Content of: <h2>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:2
msgid "Dragon curve (1)"
msgstr "Curva do Dragão (1)"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:4
msgid "The dragon curve is a classical example of recursive method."
msgstr "A curva do dragão é um exemplo clássico de método recursivo."

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:6
msgid "The definition of this curve is the following:"
msgstr "A definição desta curva é a seguinte:"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:7
msgid "the dragon curve of order 1 is a vector between to arbitrary points P and Q,"
msgstr ""
"A curva do dragão de ordem 1 é um vetor entre dois pontos P e Q arbitrários,"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:8
msgid ""
"the dragon curve of order n is the dragon curve of order n-1 between P and "
"R, followed by the same curve of order n-1 between Q and R, where PRQ is an "
"isosceles triangle with angle R being a right angle, and R being at the "
"right of the PQ vector. Thus, if P and Q coordinates are (x, y)  and (z, t), "
"the coordinate (u, v) of R are given by:"
msgstr ""
"A curva do dragão de ordem n é a curva do dragão de ordem n-1 entre P e R, "
"seguida da mesma curva de ordem n-1 entre Q e R, onde PRQ é um triângulo "
"isósceles com o ângulo em R a ser um ângulo reto e R situado a direita do "
"vetor PQ. Logo, se as coordenadas P e Q são (x, y) e (z, t), as coordenadas ("
"u, v) de R são dadas por:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:14
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:27
#, no-wrap
msgid ""
"u = (x + z)/2 + (t - y)/2\n"
"v = (y + t)/2 - (z - x)/2\n"
msgstr ""
"u = (x + z)/2 + (t - y)/2\n"
"v = (y + t)/2 - (z - x)/2\n"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:18
msgid "The prototype of the method drawing the curve is the following:"
msgstr "O protótipo do método a desenhar a curva é o seguinte:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:19
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:23
#, no-wrap
msgid ""
"[!java|c]void [/!]dragon([!java|c]int [/!]order[!scala]:Int[/!], "
"[!java|c]double [/!]x[!scala]:Double[/!], [!java|c]double "
"[/!]y[!scala]:Double[/!], [!java|c]double [/!]z[!scala]:Double[/!], "
"[!java|c]double [/!]t[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]dragão([!java|c]int [/!]ordem[!scala]:Int[/!], [!java|c]"
"double [/!]x[!scala]:Double[/!], [!java|c]double [/!]y[!scala]:Double[/!], "
"[!java|c]double [/!]z[!scala]:Double[/!], [!java|c]double "
"[/!]t[!scala]:Double[/!])"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:22
msgid ""
"You should use the method <code>setPos(x,y)</code> to put your turtle at "
"coordinates (x,y) and the method <code>moveTo(z,t)</code> to draw a line "
"between the turtle position and the point(z,t)."
msgstr ""
"Deve usar o método <code>setPos(x,y)</code> para pôr a sua tartaruga nas "
"coordenadas (x,y) e o método <code>moveTo(z,t)</code> para desenhar uma "
"linha entre a posição da tartaruga e o ponto (z,t)."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:2
msgid "The dragon curve (2)"
msgstr "A curva do dragão (2)"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:4
msgid ""
"Previous solution induce that the turtle teleports to other location, or at "
"the very least, that it moves its pen up during the drawing. Indeed, the end "
"of the drawing of the first recursive call does not match the beginning of "
"the second recursive call. That is why we had to use the method "
"<code>setPos()</code>"
msgstr ""
"A solução anterior \"induz\" que a tartaruga se teleporta para outro local, "
"ou pelo menos, que ela levanta a caneta durante o desenho. Na verdade, o "
"final do desenho da primeira chamada recursiva não coincide com o começo da "
"segunda chamada recursiva. É por isto que temos que usar o método "
"<code>setPos()</code>"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:10
msgid ""
"In this lesson, you will write a recursive method allowing to draw the "
"dragon curve without taking the pen up. For that, we need another recursive "
"method drawing the mirror side of the curve."
msgstr ""
"Nesta lição, vai escrever um método recursivo que permita desenhar a curva "
"do dragão sem levantar a caneta. Para isto, precisamos de outro método "
"recursivo que desenhe o lado espelhado da curva."

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:14
msgid ""
"The method <code>dragon()</code> is then recursively defined using itself "
"and <code>dragonReverse()</code>. Likewise, the method "
"<code>dragonReverse()</code> is defined recursively using itself and "
"<code>dragon()</code>. This is thus an example of <i>mutual recursion</i>."
msgstr ""
"O método <code>dragon()</code> é então definido recursivamente a usá-lo "
"próprio e <code>dragonReverse()</code>. Da mesma forma, o método "
"<code>dragonReverse()</code> é definido recursivamente a usá-lo próprio e "
"<code>dragon()</code>. Este é, portanto, um exemplo de <i>recursão mútua</i>."

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:21
msgid ""
"The prototype of the <code>dragon()</code> method remains unchanged from "
"previous exercise:"
msgstr ""
"O protótipo do método <code>dragon()</code> é o mesmo do exercício anterior:"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:25
msgid ""
"The new point's coordinate (u, v) introduced by the <code>dragon()</code> "
"are:"
msgstr ""
"A coordenada do novo ponto (u, v) introduzida pelo <code>dragon()</code> é:"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:31
msgid "The prototype of the method <code>dragonReverse</code> is similar:"
msgstr "O protótipo do método <code>dragonReverse</code> é similar:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:32
#, no-wrap
msgid ""
"[!java|c]void [/!]dragonReverse([!java|c]int [/!]order[!scala]:Int[/!], "
"[!java|c]double [/!]x[!scala]:Double[/!], [!java|c]double "
"[/!]y[!scala]:Double[/!], [!java|c]double [/!]z[!scala]:Double[/!], "
"[!java|c]double [/!]t[!scala]:Double[/!])"
msgstr ""
"[!java|c]void [/!]inverterDragão([!java|c]int [/!]order[!scala]:Int[/!], "
"[!java|c]double [/!]x[!scala]:Double[/!], [!java|c]double "
"[/!]y[!scala]:Double[/!], [!java|c]double [/!]z[!scala]:Double[/!], [!java|c]"
"double [/!]t[!scala]:Double[/!])"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:34
msgid ""
"The new point's coordinate (u, v) introduced by the "
"<code>dragonReverse()</code> are:"
msgstr ""
"A coordenada do novo ponto (u, v) introduzida pelo <code>dragonReverse()</"
"code> é:"

#. type: Content of: <pre>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:36
#, no-wrap
msgid ""
"u = (x + z)/2 - (t - y)/2\n"
"v = (y + t)/2 + (z - x)/2\n"
msgstr ""
"u = (x + z)/2 - (t - y)/2\n"
"v = (y + t)/2 + (z - x)/2\n"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:40
msgid ""
"To make the work of each method recursiv more visible, the line painted by "
"the <code>dragon()</code> must be red (<code>Color.red</code>) while the "
"line painted by the <code>dragonReverse()</code> must be blue "
"(<code>Color.blue</code>)."
msgstr ""
"Para deixar o trabalho de cada um dos dois métodos recursivos mais visíveis, "
"a linha pintada pelo <code>dragon()</code> deve ser vermelha (<code>Color."
"red</code>) enquanto a linha pintada pelo <code>dragonReverse()</code> deve "
"ser azul(<code>Color.blue</code>)."

#. type: Content of: <h3>
#: src/lessons/recursion/hanoi/Main.html:2
#: src/lessons/recursion/hanoi/short_desc.html:2
msgid "Hanoi towers"
msgstr "Torres de Hanoi"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/Main.html:3
msgid ""
"Here comes the super classical exercise on recursion along with some "
"variations. If you have any other nice variations, please submit them.  At "
"some point, someone should also probably contribute these variations to "
"wikipedia, as only the base problem is nicely described there."
msgstr ""
"Aqui está o exercício super-clássico sobre recursão junto com algumas "
"variações. Se tiver quaisquer outras variações legais, favor envie elas. Em "
"algum momento, alguém deve enviar estas variações também à wikipédia, pois "
"por enquanto apenas o problema básico é descrito lá."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/Main.html:8
msgid ""
"The Interleaved and Split variations come from the following article: "
"\"Exploring Recursion with Variations on the Towers of Hanoi\", Daniel "
"W. Palmer. Available at "
"http://www.ccscjournal.willmitchell.info/Vol12-96/No2a/Daniel%20W%20Palmer.pdf"
msgstr ""
"As variações intercalada e separada vêm do seguinte artigo: \"Exploring "
"Recursion with Variations on the Towers of Hanoi\", Daniel W. Palmer. "
"Available at http://www.ccscjournal.willmitchell.info/Vol12-96/No2a/"
"Daniel%20W%20Palmer.pdf"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/Main.html:13
msgid ""
"The Linear Hanoi is briefly discussed in the article presenting the Linear "
"Twin Towers of Hanoi: \"The Linear Twin Towers of Hanoi Problem\", Steven "
"Minsker (ACM SIGCSE Bulletin Volume 39 Issue 4, December 2007). This article "
"can only be accessed through the paywall of the editor, sorry."
msgstr ""
"Hanoi linear é discutida rapidamente na artigo a apresentar as Torres Gêmeas "
"Lineares de Hanoi: \"The Linear Twin Towers of Hanoi Problem\", Steven "
"Minsker (ACM SIGCSE Bulletin Volume 39 Issue 4, December 2007). Este artigo "
"só pode ser acessado através da via paga do editor, desculpe."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/Main.html:18
msgid ""
"The 3-colors Towers of Hanoi problem was presented on this web page: "
"http://www.cut-the-knot.org/recurrence/TricolorHanoiAuto.shtml"
msgstr ""
"O problema das Torres de Hanoi de 3 cores foi apresentado nesta página: "
"http://www.cut-the-knot.org/recurrence/TricolorHanoiAuto.shtml"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/Main.html:21
msgid ""
"The Cyclic Towers of Hanoi was proposed by M.D. Atkinson in an article of "
"1981 titled \"The cyclic towers of Hanoi\" (Information Processing Letters, "
"Volume 13:3).  The article is available at "
"http://www.cs.otago.ac.nz/staffpriv/mike/Papers/Hanoi/CyclicHanoi.pdf."
msgstr ""
"As Torres de hanoi cíclicas foram propostas por M.D. Atkinson num artigo de "
"1981 intitulado \"The cyclic towers of Hanoi\" (Information Processing "
"Letters, Volume 13:3). O artigo está disponível em http://www.cs.otago.ac.nz/"
"staffpriv/mike/Papers/Hanoi/CyclicHanoi.pdf."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/short_desc.html:3
msgid "Here comes the super classical exercise on recursion."
msgstr "Aqui está o exercício super-clássico de recursão."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/short_desc.html:5
msgid ""
"This is an application exercise of recursion, that you should master to take "
"this lesson."
msgstr ""
"Este é um exercício de aplicação em recursão, que deve dominar para fazer "
"esta lição."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/HanoiBoard.html:2
msgid "Tower of Hanoi"
msgstr "Torre de Hanoi"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/HanoiBoard.html:4
msgid ""
"The Tower of Hanoi or Towers of Hanoi, also called the Tower of Brahma or "
"Towers of Brahma, is a mathematical game or puzzle. It consists of three "
"pegs, and a number of disks of different sizes which can slide onto any "
"peg. The puzzle starts with the disks in a neat stack in ascending order of "
"size on one peg, the smallest at the top, thus forming a pyramid."
msgstr ""
"A Torre de Hanoi (ou Torres de Hanoi), também conhecida como Torre de Brahma "
"(ou Torres de Brahma), é um quebra-cabeça ou jogo matemático. Consiste de "
"três varas e uma quantidade de discos de tamanhos diferentes que podem "
"encaixar em qualquer das varas. O jogo começa com os discos todos numa vara "
"ordenados em ordem crescente, o menor em cima, a formar uma pirâmide."

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/hanoi/HanoiBoard.html:10
msgid ""
"The objective of the puzzle is to move the entire stack to another peg, "
"obeying the following rules:"
msgstr ""
"O objetivo do jogo é mover a pilha completa para outra vara, a obedecer as "
"seguintes regras:"

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:12
msgid "Only one disk may be moved at a time."
msgstr "Apenas um disco pode ser movido por vez."

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:14
msgid ""
"Each move consists of taking the upper disk from one of the pegs and sliding "
"it onto another peg, on top of the other disks that may already be present "
"on that peg."
msgstr ""
"Cada movimento consiste em tirar o disco de cima de uma vara e colocá-lo em "
"outra vara, no topo dos discos que já estiverem presentes."

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:18
msgid "No disk may be placed on top of a smaller disk."
msgstr "Nenhum disco pode ser posto sobre um disco menor."

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/hanoi/HanoiBoard.html:23
msgid ""
"Write the core of the method: <code>[!java|c]void "
"[/!]hanoi[!c]Rec[/!]([!java|c]int [/!]height[!scala]:Int[/!], [!java|c]int "
"[/!]src[!scala]:Int[/!], [!java|c]int [/!]other[!scala]:Int[/!],[!java|c]int "
"[/!]dst[!scala]:Int[/!])</code>"
msgstr ""
"Escreva o núcleo do método: <code>[!java|c]void "
"[/!]hanoi[!c]Rec[/!]([!java|c]int [/!]height[!scala]:Int[/!], [!java|c]int "
"[/!]src[!scala]:Int[/!], [!java|c]int [/!]other[!scala]:Int[/!],[!java|c]int "
"[/!]dst[!scala]:Int[/!])</code>"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/HanoiBoard.html:26
msgid ""
"This method will recursively solve the presented problem. The first "
"parameter named <code>height</code> is the height of the tower to move; The "
"second parameter <code>src</code> is the index of the initial tower, the "
"third parameter <code>other</code> is the index of the unused peg while the "
"fourth parameter <code>dst</code> is the index of the expected final tower."
msgstr ""
"Este método vai, recursivamente, resolve o problema apresentado. O primeiro "
"parâmetro chamado <code>height</code> é a altura da torre a mover; o segundo "
"parâmetro <code>src</code> é o índice da torre inicial, o terceiro parâmetro "
"<code>other</code> é o índica da vara não utilizada enquanto que o quarto "
"parâmetro <code>dst</code> é o índice da torre final experada."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/HanoiBoard.html:32
msgid ""
"A key to solving this puzzle is to recognize that it can be solved by "
"breaking the problem down into a collection of smaller problems and further "
"breaking those problems down into even smaller problems until a solution is "
"reached."
msgstr ""
"O segredo para resolver este enigma é reconhecer que pode ser dividido em "
"problemas menores e este em problemas menores até que uma solução é "
"encontrada."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/HanoiBoard.html:36
msgid "I don't get it, please give me some extra indications"
msgstr "Ainda não captei, por favor me dê mais orientações"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/HanoiBoard.html:37
msgid "Here is the pseudo-code of the solution:"
msgstr "Aqui está um pseudo-código da solução:"

#. type: Content of: <div><ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:39
msgid "label the pegs A, B, C (these labels may move at different steps)"
msgstr ""
"Rotule as varas como A, B, C (estes rótulos pode se mover com diferentes "
"passos)"

#. type: Content of: <div><ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:40
msgid "let n be the total number of discs (the height of the initial tower)"
msgstr "Seja n a quantidade total de discos (A altura da torre inicial)"

#. type: Content of: <div><ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:41
msgid "number the discs from 1 (smallest, topmost) to n (largest, bottommost)"
msgstr ""
"quantidade de discos a partir de 1 (menor, mais alto) até n (maior, mais "
"baixo)"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/HanoiBoard.html:44
msgid "To move n discs from peg A to peg C:"
msgstr "Para mover n discos da vara A para a vara C:"

#. type: Content of: <div><ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:46
msgid "move n−1 discs from A to B. This leaves disc number n alone on peg A"
msgstr "mova n−1 discos de A para B. Isto deixa o disco n sozinho na vara A"

#. type: Content of: <div><ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:47
msgid "move disc number n from A to C"
msgstr "Mova o disco de número n de A para C"

#. type: Content of: <div><ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:48
msgid "move n−1 discs from B to C so they sit on disc number n"
msgstr ""
"Mova n−1 discos de B para C de forma que eles fiquem sobre o disco de número "
"n"

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/InterleavedHanoi.html:2
msgid "Interleaved Towers of Hanoi"
msgstr "Torres de Hanoi Intercaladas"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/InterleavedHanoi.html:4
msgid ""
"In this classical variation of the Towers of Hanoi, you are given 4 pegs "
"with 2 stacks, one white and one black. You should mix the two stacks as "
"depicted in the Objective world.  As previously, you cannot move a disk on a "
"smaller disk."
msgstr ""
"Nesta variação clássica das Torres de Hanoi tem 4 varas com duas pilhas, uma "
"branca e outra preta. Deve misturar as duas pilhas como descrito no mundo "
"objetivo. Como antes, não pode mover um disco para cima de um disco menor."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/InterleavedHanoi.html:8
msgid ""
"You will probably need to reuse the <code>hanoi()</code> method that you "
"wrote in the previous exercise."
msgstr ""
"Provavelmente vai precisar reutilizar o método <code>hanoi()</code> que "
"escreveu no exercício anterior."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/InterleavedHanoi.html:10
#: src/lessons/recursion/hanoi/SplitHanoi1.html:10
msgid "Please show me an intermediate step"
msgstr "Favor me mostra um passo intermediário"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/InterleavedHanoi.html:12
#: src/lessons/recursion/hanoi/SplitHanoi1.html:12
msgid "If your initial situation is as follows:"
msgstr "Se a sua situação é a seguinte:"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/InterleavedHanoi.html:15
#: src/lessons/recursion/hanoi/SplitHanoi1.html:15
msgid "then you have the following situation right before the main recursive call:"
msgstr ""
"Então tem a seguinte situação exatamente antes da chamada recursiva "
"principal:"

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/SplitHanoi1.html:2
msgid "Split Towers of Hanoi"
msgstr "Torres de hanoi Separadas"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/SplitHanoi1.html:4
msgid ""
"Given one interleaved stack (e.g. resulting from the previous exercise), you "
"should build two separate stacks.  In other words, your code should revert "
"the operations done to solve the previous exercise."
msgstr ""
"Dada uma pilha intercalada (e.g. o resultado do exercício anterior), deve "
"construir duas pilhas separadas. Em outras palavras, o seu código deve "
"reverter as operações feitas para resolver o exercício anterior."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/SplitHanoi1.html:7
msgid ""
"You will need an extra function that can move an interleaved stack of n "
"pairs of disks, without changing the relative positions of disks of the same "
"size."
msgstr ""
"Vai precisar de uma função adicional que mova uma pilha intercalada de n "
"pares de discos, sem mudar as posições relativas dos discos de mesmo tamanho."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:2
msgid "Better Split Towers of Hanoi"
msgstr "Better Split Towers of Hanoi"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:4
msgid ""
"Surprisingly, our solution to split the towers generates much more moves "
"than our solution to interleave them. As both problems are symmetric, this "
"should not be."
msgstr ""
"Surpreendentemente, a nossa solução de dividir (split) as torres gera muito "
"mais movimentos que a solução de intercalá-las. Como os problemas são "
"simétricos, isto não deveria acontecer."

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:7
#: src/lessons/recursion/hanoi/SplitHanoi3.html:21
msgid "Disks amount"
msgstr "Quantidade de discos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:7
#: src/lessons/recursion/hanoi/SplitHanoi3.html:21
msgid "Interleaved"
msgstr "Intercalada"

#. type: Content of: <table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:7
msgid "Split"
msgstr "Split"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:8
#: src/lessons/recursion/hanoi/SplitHanoi3.html:22
msgid "5 pairs"
msgstr "5 pares"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:8
#: src/lessons/recursion/hanoi/SplitHanoi3.html:22
msgid "62 moves"
msgstr "62 movimentos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:8
#: src/lessons/recursion/hanoi/SplitHanoi3.html:22
msgid "88 moves"
msgstr "88 movimentos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:9
#: src/lessons/recursion/hanoi/SplitHanoi3.html:23
msgid "6 pairs"
msgstr "6 pares"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:9
#: src/lessons/recursion/hanoi/SplitHanoi3.html:23
msgid "126 moves"
msgstr "126 movimentos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:9
#: src/lessons/recursion/hanoi/SplitHanoi3.html:23
msgid "183 moves"
msgstr "183 movimentos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:10
#: src/lessons/recursion/hanoi/SplitHanoi3.html:24
msgid "7 pairs"
msgstr "7 pares"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:10
#: src/lessons/recursion/hanoi/SplitHanoi3.html:24
msgid "254 moves"
msgstr "254 movimentos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:10
#: src/lessons/recursion/hanoi/SplitHanoi3.html:24
msgid "374 moves"
msgstr "374 movimentos"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:13
msgid "Can you make the split tower as efficient as the interleaved one?"
msgstr "Consegue deixar o \"split\" tão eficiente quanto o intercalada?"

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:15
msgid "I need a starter hint"
msgstr "Preciso de uma dica de principiante"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:16
msgid ""
"The source of discrepancy is an inefficient problem decomposition.  "
"Satisfied that it merely worked, we looked no futher for a better solution.  "
"Keeping the disks of the interleaved tower in the correct order during every "
"move is unnecessary.  In fact, we can avoid moving the interleaved tower at "
"all.  A better problem decomposition splits the pair of disks into two "
"colored towers as they are removed from the interleaved tower."
msgstr ""
"A fonte de discrepância é uma decomposição ineficiente do problema. "
"Satisfeitos com o fato dele simplesmente funcionar, não procuramos mais por "
"uma solução melhor. Manter os discos da torre intercalada na ordem correta "
"durante cada movimento é desnecessário. De fato, podemos evitar "
"completamente mover a torre intercalada. Uma decomposição melhor do problema "
"divide o par de discos em duas torres coloridas à medida em que eles são "
"removidos da torre intercalada."

#. type: Attribute 'alt' of: <br><br><div>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:24
msgid "The starter hint was not enough"
msgstr "A dica de principiante não foi suficiente"

#. type: Content of: <br><br><div>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:25
msgid ""
"If someone could split the (n-1) pairs of disks beforehand, could you split "
"the remaining pair?"
msgstr ""
"Se alguém puder dividir os (n-1) pares de discos previamente, poderia "
"dividir o par restante?"

#. type: Attribute 'alt' of: <br><br><br><br><div>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:30
msgid "You need to be more explicit"
msgstr "Precisa ser mais explícito"

#. type: Content of: <br><br><br><br><div><ul><li>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:32
msgid ""
"First split the first (n-1) pairs of disks from the interleaved stack into a "
"white tower and a black tower (calling recursively your main function)."
msgstr ""
"Primeiro divida os primeiros (n-1) pares de discos da pilha intercalada em "
"uma torre branca e uma torre preta (a chamar recursivamente a sua função "
"principal)."

#. type: Content of: <br><br><br><br><div><ul><li>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:33
msgid "Then move the large white disk on its target pole."
msgstr "Então mova o disco branco grande para sua vara objetivo."

#. type: Content of: <br><br><br><br><div><ul><li>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:34
msgid "Then move the (n-1) smaller white disks on top of the large one."
msgstr "Então mova os (n-1) discos brancos menores ao topo do maior."

#. type: Content of: <br><br><br><br><div><ul><li>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:35
msgid "Then move the large black disk on its target pole."
msgstr "Então mova o disco preto grande para sua vara objetivo."

#. type: Content of: <br><br><br><br><div><ul><li>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:36
msgid "Then move the smaller black disks in position."
msgstr "Então mova os discos pretos pequenos para a posição."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:2
msgid "Fast Split Towers of Hanoi"
msgstr "Fast Split Towers of Hanoi"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:4
msgid ""
"Again, our previous solution is working, but it is far from being optimal.  "
"When moving the towers, we use the algorithm for 3 pegs even if we have 4 "
"pegs.  Of course, movements to the last peg are restricted since it contains "
"the other stack, but we can always store the smallest disk on top of the "
"other stack before moving our stack."
msgstr ""
"Novamente, nossas soluções anteriores funcionam, mas estão longe de serem "
"ótimas. Quando movemos as torres, usamos o algoritmo de 3 varas mesmo quando "
"temos 4 varas. Obviamente, movimentos para a última vara são restritos pois "
"ela contém a outra pilha, mas podemos sempre armazenar o menor disco no topo "
"da outra pilha antes de mover nossa pilha."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:9
msgid ""
"For that, we need to devise a new function <code>hanoi_fast(height, src, "
"free, full, dst)</code> that moves the stack from <code>src</code> to "
"<code>dst</code> using <code>free</code>, but storing the smallest disk onto "
"<code>full</code> beforehand."
msgstr ""
"Para isto, precisamos criar uma função <code>hanoi_fast(height, src, free, "
"full, dst)</code> que move a pilha de <code>src</code> para <code>dst</code> "
"a usar <code>free</code>, mas a armazenar o menor disco em <code>full</code> "
"antes."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:13
msgid "I'm lost"
msgstr "Estou perdido"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:14
msgid ""
"The <code>hanoi_fast(height, src, free, full, dst)</code> function is not "
"recursive.  It moves the first disk and then call the regular "
"<code>hanoi()</code> function."
msgstr ""
"A função <code>hanoi_fast(height, src, free, full, dst)</code> não é "
"recursiva. Ela move o primeiro disco e então chama a função regular "
"<code>hanoi()</code>."

#. type: Content of: <br><p>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:18
msgid ""
"This change greatly improve the performance, as you can see below. Of "
"course, this trick could also be used for the interleaved algorithm, leading "
"as expected to the exact same performance."
msgstr ""
"Esta mudança melhora enormemente a eficiência, como pode ver abaixo. "
"Obviamente, este truque também pode ser usado para o algoritmo intercalado, "
"a levar, como esperado, a exatamente a mesma eficiência."

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:21
msgid "Slow Split"
msgstr "Slow Split"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:21
msgid "Fast Split"
msgstr "Fast Split"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:22
msgid "46 moves"
msgstr "46 movimentos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:23
msgid "82 moves"
msgstr "82 movimentos"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:24
msgid "150 moves"
msgstr "150 movimentos"

#. type: Content of: <br><p>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:27
msgid ""
"As a conclusion, most of us are satisfied with a working solution and we "
"easily overlook possibilities to improve the problem "
"decomposition. <b>You</b> should not do that ;)"
msgstr ""
"Como uma conclusão, a maioria das pessoas se satisfaz com uma solução que "
"funcione e rapidamente ignora possibilidades para melhorar a decomposição do "
"problema. <b>Você</b> não deve fazer isto ;)"

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/LinearHanoi.html:2
msgid "Linear Towers of Hanoi"
msgstr "Linear Towers of Hanoi"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearHanoi.html:4
msgid ""
"This is a classical variation over the Towers of Hanoi where some moves are "
"forbidden.  Specifically, disks cannot move directly between the left-most "
"and the right-most pegs.  The middle peg must be involved in every moves."
msgstr ""
"Esta é uma variação clássica das Torres de Hanoi onde alguns movimentos são "
"proibidos. Especificamente, os disco não podem ser movidos diretamente da "
"vara mais à esquerda para a vara mais a direita. A vara do meio deve ser "
"envolvida em cada movimento."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearHanoi.html:8
msgid ""
"Beside of that extra complexity, the problem remains unchanged: you are "
"requested to move the whole stack of disks from one extremity peg to the "
"other one. You can only move one disk at a time, and a bigger disk cannot be "
"placed over a smaller one."
msgstr ""
"Apesar desta complexidade, o problema permanece o mesmo: tem que mover toda "
"a pilha de discos da vara numa extremidade para a vara na outra extremidade. "
"Só pode mover um disco por vez e um disco não pode ficar sobre outro menor."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearHanoi.html:12
msgid ""
"As with the classical version, it is much easier to produce a recursive "
"solution, and you are absolutely able to devise this solution if you think "
"hard enough about it."
msgstr ""
"Como na versão clássica, é muito fácil produzir uma solução recursiva e é "
"totalmente capaz de \"devise\" esta solução se pensar com atenção nela."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/LinearHanoi.html:15
msgid "I tried, but I don't get it"
msgstr "Tentei, mas não consegui"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/LinearHanoi.html:16
msgid ""
"The standard recursive algorithm for classical Hanoi is of complexity "
"<i>2^n-1</i> where the standard recursive algorithm for this variation is of "
"complexity <i>3^n-1</i>."
msgstr ""
"O algortimo recursivo padrão para as torres de Hanoi clássicas é de "
"complexidade <i>2^n-1</i> enquanto que o algoritmo recursivo padrão para "
"esta variação é de complexidade <i>3^n-1</i>."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/LinearHanoi.html:20
msgid "That first tip was not enough"
msgstr "A primeira dica não foi suficiente"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/LinearHanoi.html:21
msgid ""
"The standard recursive algorithm for classical Hanoi involves two recursive "
"calls sandwiching one movement of the largest disk, the standard recursive "
"algorithm for Linear Hanoi involves three recursive calls sandwiched around "
"two movements of the same disk."
msgstr ""
"A algoritmo recursivo padrão para as torres de Hanoi clássicas envolve duas "
"chamadas recursivas a sanduichar um movimento do disco maior, O algoritmo "
"recursivo padrão para Hanoi Linear envolve três chamadas recursivas a "
"sanduichar dois movimentos do mesmo disco."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:2
msgid "Linear Twin Towers of Hanoi"
msgstr "Torres gêmeas de Hanoi Lineares"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:4
msgid ""
"This is a mix between both the Split and Interleaved problems, and the "
"linear problem.  We are given two stacks of disks, on three pegs. We are "
"expected to swap the stacks' position while respecting the classical Hanoi "
"movement restrictions (one disk at a time, and no large disk over smaller "
"disks) and the linear movement restriction (no direct exchange between the "
"left-most and right-most pegs)."
msgstr ""
"Esta é uma mistura entre os problemas \"Split\", Intercalado e linear. Temos "
"duas pilhas de discos, em três varas. Devemos trocar a posição das pilhas a "
"respeitar as restrições clássicas de movimento (um disco por vez, disco "
"grande não pode ficar sobre disco pequeno) e a restrição do movimento linear "
"(proibido mudança diretamente da vara mais à esquerda para a vara mais à "
"direita)."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:10
msgid "You will use three recursive functions:"
msgstr "Vai usar três funções recursivas:"

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:12
msgid ""
"<b>moveDouble(k,from, to)</b>: moves an interleaved stack of k pairs of "
"disks, without changing the relative positions of disks of the same size. As "
"in the Split Hanoi problem, an interleaved stack alternates white and black "
"disks of each sizes. This function is not completely new: you wrote a "
"version with 4 pegs (but using only 3 of them) for the first version of the "
"Split Hanoi problem."
msgstr ""
"<b>moveDouble(k,from, to)</b>: move uma pilha intercalada de k pares de "
"discos, sem mudar as posições relativas dos discos de mesmo tamanho. Como no "
"problema de hanoi \"Split\", uma pilha intercalada alterna discos brancos e "
"pretos de cada tamanho. Esta função não é completamente nova: escreveu uma "
"versão com 4 varas (mas a usar apenas 3 delas) para a primeira versão do "
"problema de hanoi \"split\"."

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:17
msgid ""
"<b>gather(k)</b>: from the initial split situation, build on peg #2 an "
"interleaved stack of k pairs of disks. You may parametrize your function so "
"that it can be used to gather the disk on any peg passed as parameter, but "
"in practice, your function will only be used to gather on the last peg."
msgstr ""
"<b>gather(k)</b>: da situação inicial do caso \"separado\", constrói na vara "
"#2 uma pilha intercalada de k pares de discos. Pode parametrizar a sua "
"função de forma que ela possa ser usada para obter o disco de qualquer vara "
"passado como parâmetro, mas, na prática, a sua função vai apenas ser usada "
"para obter na última vara."

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:21
msgid ""
"<b>scatter(k)</b>: from a situation where k pairs of disks are interleaved "
"on peg #0, split it down by moving the white disks to peg #1 and black ones "
"to peg #2."
msgstr ""
"<b>scatter(k)</b>: de uma situação onde k pares de discos são intercalados "
"na vara #0, separe eles a mover os discos brancos para a vara #1 e os pretos "
"para a vara #2."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:25
msgid ""
"In <code>gather()</code>, the recursive call comes before two calls to "
"<code>moveDouble()</code> while in <code>scatter()</code>, the calls to "
"<code>moveDouble()</code> come before the recursive call.  The main function "
"that you should write is not recursive, but simply gather almost all disks, "
"moves directly the remaining disks, and then scatters back the small disks."
msgstr ""
"Em <code>gather()</code>, a chamada recursiva vem antes das duas chamadas a "
"<code>moveDouble()</code> enquanto em <code>scatter()</code>, as chamadas "
"para <code>moveDouble()</code> vem depois da chamada recursiva. A função "
"principal que deve escrever não é recursiva, mas simplesmente obtém quase "
"todos os discos, move os discos restantes diretamente e então espalha ("
"\"scatters\") de volta os discos menores."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:31
msgid ""
"The linearity naturally induces some extra complexity as you have to "
"decompose every move between pegs 0 and 2. I am still confident in your "
"ability to overcome the challenge :)"
msgstr ""
"A linearidade naturalmente induz alguma complexidade adicional, pois tem que "
"decompor cada movimento entre as varas 0 e 2. Ainda estou confiante na sua "
"capacidade de vencer este desafio :)"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:35
msgid ""
"Note that the requested algorithm was proved optimal for that problem, so "
"you don't need to fiddle the performance this time."
msgstr ""
"Observe que foi provado que o algoritmo requerido é ótimo para este "
"problema, então não precisa mexer no desempenho desta vez."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:2
msgid "Tricolor Hanoi: stack move"
msgstr "Hanoi de tricolor: movimentação de pilhas"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:4
msgid ""
"In this set of exercises, we will devise an algorithm for the Tricolor Hanoi "
"problem.  There will be 3 stacks on 3 pegs, each stack of a differing color, "
"and the problem is to exchange the stacks' positions under the classical "
"move rules (one disk at a time, and no bigger disk over smaller disk)."
msgstr ""
"Neste conjunto de exercícios, vamos \"devise\" um algoritmo para o problema "
"de Hanoi Tricolor. Vão existir 3 pilhas em 3 varas, cada pilha de uma cor "
"diferente e o problema é alternar a posição das pilhas seguindo as regras "
"clássicas do movimento (um disco por vez, disco grande não pode ficar sobre "
"disco pequeno)."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:9
msgid "As in previous exercises, our solution will use three functions:"
msgstr "Como nos exercícios anteriores, nossa solução vai usar três funções:"

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:11
msgid ""
"<code>move3(n, src, mid, dst)</code>: moves a stack of interleaved disks, ie "
"a stack of (n*3) disks of alternating colors from peg <code>src</code> to "
"peg <code>dst</code>."
msgstr ""
"<code>move3(n, src, mid, dst)</code>: move uma pilha de discos intercalados, "
"p.ex. uma pilha de (n*3) discos de cores alternadas de uma vara <code>src</"
"code> para uma vara <code>dst</code>."

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:13
msgid ""
"<code>gather()</code>: builds an interleaved stack from the regular split "
"ones."
msgstr ""
"<code>gather()</code>: constrói uma pilha intercalada a partir de três "
"pilhas \"split\"."

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:14
msgid ""
"<code>scatter()</code>: splits an interleaved stack into several regular "
"ones."
msgstr ""
"<code>scatter()</code>: separa uma pilha intercalada em três pilhas normais."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:17
msgid ""
"The goal of this first exercise in the series is to devise the "
"<code>move3()</code> function.  This starter task should not block you for "
"too long, actually. It is ok if your function changes the order of the "
"bottom triplet of disks, but it must preserve the order of the other "
"triplets."
msgstr ""
"O objetivo deste primeiro exercício na série é \"devise\" a função "
"<code>move3()</code>. Esta tarefa inicial não o deve segurar muito, na "
"verdade. Tudo bem se a sua função muda a ordem do trio de discos mais no "
"fundo, mas ela deve preservar a ordem dos outros trios."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/TricolorHanoi2.html:2
msgid "Tricolor Hanoi: the Gathering"
msgstr "Tricolor Hanoi: the Gathering"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi2.html:4
msgid ""
"It is now time to write the second function required by the Tricolor Hanoi "
"problem.  <code>gather()</code> builds an interleaved stack from the regular "
"split ones. This function takes four arguments, the last one being the "
"target peg where the interleaved stack must be assembled.  As you can see in "
"the examples, the colors of must be in the same order for each triplet of "
"disks."
msgstr ""
"Agora é a hora de escrever a segunda função necessária para o problema de "
"Hanoi Tricolor. <code>gather()</code> constrói uma pilha intercalada a "
"partir de pilhas \"split\". Esta função recebe quatro argumentos, o último a "
"ser a vara de destino onde a pilha intercalada deve ser montada. Como pode "
"ver nos exemplos, as cores devem estar na mesma ordem para cada trio de "
"discos."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi2.html:9
msgid ""
"That function actually uses the <code>move3()</code> that you wrote just "
"before. Simply copy/paste your code over to reuse it. If you're lost, please "
"refer to the Interleaved Hanoi exercise. Gathering 3 stacks on 3 pegs is "
"rather similar to gathering 2 stacks on 4 pegs. You can find that exercise "
"<a href=\"plm://lessons.recursion.hanoi/InterleavedHanoi\">here</a>."
msgstr ""
"Esta função, na verdade, usa o <code>move3()</code> que escreveu agora a "
"pouco. Simplesmente copie-e-cole o seu código e reuse-o. Se estiver perdido, "
"favor olhe o exercício Hanoi Intercalada. Obter 3 pilhas em 3 varas é muito "
"similar a obter 2 pilhas em 4 varas. Pode encontrar este exercício <a href="
"\"plm://lessons.recursion.hanoi/InterleavedHanoi\">aqui</a>."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/TricolorHanoi3.html:2
msgid "Tricolor Hanoi: the Final"
msgstr "Hanoi Tricolor: o Final"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi3.html:4
msgid ""
"We are almost ready to write the whole tricolor algorithm. We just need the "
"<code>scatter()</code> function, very inspired from the first one that we "
"wrote for the <a href=\"plm://lessons.recursion.hanoi/SplitHanoi1\">Split "
"Hanoi problem</a>. Assuming that your interleaved stack is placed on the "
"<code>mid</code> peg, spread the disks over all pegs. Make sure to use "
"<code>move3()</code> an even amount of time at each recursive level to "
"ensure that the bottom disks are in the correct order."
msgstr ""
"Estamos quase prontos para escrever o algoritmo tricolor. Precisamos apenas "
"da função <code>scatter()</code>, bastante inspirada na primeira que "
"escrevemos para o <a href=\"plm://lessons.recursion.hanoi/SplitHanoi1\""
">problema de Hanoi Separado</a>. A assumir que a sua pilha intercalada "
"esteja na vara do <code>meio</code>, espalhe os discos por todas as varas. "
"Certifique-se de usar <code>move3()</code> uma quantidade par de vezes em "
"cada nível recursivo para garantir que os discos de baixo estejam na ordem "
"correta."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi3.html:10
msgid ""
"As you can see, the initial situation is not the one expected by "
"<code>scatter()</code>. You first have to apply <code>gather()</code> and "
"<code>move3()</code> (twice to get the bottom triplet in the right "
"order). These few steps plus the new <code>scatter()</code> function are "
"enough to entirely solve the Tricolor Hanoi problem."
msgstr ""
"Como pode ver, a situação inicial não é a esperada por <code>scatter()</"
"code>. Primeiro tem que aplicar <code>gather()</code> e <code>move3()</code> "
"(duas vezes para pôr o trio do fundo na ordem correta). Estes poucos passos "
"mais a nova função <code>scatter()</code> são o suficiente para resolver "
"inteiramente o problema de Hanoi Tricolor."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/CyclicHanoi.html:2
msgid "Cyclic Towers of Hanoi"
msgstr "Torres de Hanoi cíclicas"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/CyclicHanoi.html:4
msgid ""
"This variation of the Towers of Hanoi is very similar to the regular "
"problem: you are given one stack of disks and three pegs, and you cannot "
"move a larger disk over a smaller one.  The change is that you can only move "
"disks clockwise: 0->1 or 1->2 or 2->0, but never in the other direction."
msgstr ""
"Esta variação das torres de Hanoi é muito similar ao problema normal: recebe "
"uma pilha de discos e três varas e não pode mover um disco maior sobre um "
"menor. A diferença é que só pode mover discos no sentido horário: 0->1 ou 1-"
">2 ou 2->0, mas nunca na outra direção."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/CyclicHanoi.html:8
msgid ""
"Obviously, the movements are not symmetric anymore. Moves from A to B are "
"now very different from moves to B to A.  As a result, you need two "
"recursive functions depending on whether you are moving the stack clockwise "
"or counterclockwise."
msgstr ""
"Obviamente, os movimentos não são simétricos de forma alguma. Movimentos de "
"A para B são agora muito diferentes de movimentos de B para A. Como "
"resultado, precisa de duas funções recursivas a depender de estar a mover a "
"pilha no sentido horário ou anti-horário."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/CyclicHanoi.html:11
msgid ""
"That being said, the problem decomposition is very similar to the classical "
"Hanoi. The twist is that each function call the other one, constituting a "
"nice example of mutual recursion."
msgstr ""
"Dito isto, a decomposição do problema é muito similar ao Hanoi clássico. A "
"diferença é que cada função chama a outra, a constituir um bom exemplo de "
"recursão mútua."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:2
msgid "Iterative Towers of Hanoi"
msgstr "Torres de Hanoi Iterativas"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:4
msgid ""
"In this last exercise of the series, we will implement an iterative "
"algorithm for the base problem of the Towers of Hanoi (one stack, 3 pegs, no "
"extra movement restriction)."
msgstr ""
"Neste último exercício da série, vamos implementar um algoritmo iterativo "
"para o problema básico das Torres de hanoi (uma pilha, 3 varas, sem "
"restrição de movimento adicional)."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:8
msgid ""
"This algorithm is actually very simple: On odd moves, the smallest disk is "
"moved in a given direction (either increasing 0-&gt;1-&gt;2-&gt;0 or "
"decreasing 2-&lt;1-&lt;0-&lt;2) while on even moves, the only possible move "
"that does not imply the smallest disk is made. You stop as soon as the stack "
"is rebuilt on another location."
msgstr ""
"Na verdade, este algoritmo é bastante simples: em movimentos ímpares, o "
"disco menor é movido numa dada direção (tanto a aumentar 0-&gt;1-&gt;2-&gt;0 "
"ou a diminuir 2-&lt;1-&lt;0-&lt;2) enquanto em movimentos pares, o único "
"movimento possível que não usa o disco menor é feito. Pare assim que a pilha "
"é reconstruída na outra localização."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:13
msgid ""
"The function that you now need to write takes two parameters: the initial "
"position of the smallest disk (i.e., the peg initially containing the stack) "
"and a boolean indicating whether the smallest disk should move in the "
"increasing order or not."
msgstr ""
"A função que precisa escrever agora tem dois parâmetros: a posição inicial "
"do disco menor (p.ex., a vara inicialmente a conter a pilha) e um booleano a "
"indicar se o disco menor deve mover na ordem de aumento ou não."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:17
msgid ""
"The simplicity of this algorithm is actually almost deceiving. One could "
"wonder on the interest of the recursive algorithms when such a simple "
"iterative algorithm exists. My personal feeling is that this solution is "
"nice to execute, but almost impossible to devise in the first place (I even "
"suspect that the authors built this iterative solution from observations of "
"the recursive execution)..."
msgstr ""
"A simplicidade deste algoritmo é, na verdade, enganosa. Podemos pensar sobre "
"o interesse em algoritmos recursivos quando algoritmos iterativos tão "
"simples existem. A minha impressão é que esta solução é boa de executar, mas "
"quase impossível de ser concebida desde o princípio (suspeito que os autores "
"construíram esta solução iterativa da observação da execução da solução "
"recursiva)..."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:23
msgid ""
"Predicting the effect of this function is also difficult: When the small "
"disk moves in the increasing order, the stack is reconstructed on the right "
"peg with 5 disks but on the left with 6 disks."
msgstr ""
"Prever o efeito desta função também é difícil: quando o pequeno disco move "
"na ordem crescente, a pilha é reconstruída na cavilha direita com 5 discos, "
"mas na esquerda com 6 discos."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:27
msgid ""
"An interesting question is whether such simple iterative algorithms exist "
"for the other variation of the problem. Some were given in the literature "
"(e.g. for the cyclic variation). I would happily integrate your solutions to "
"the PLM, especially if you can hint (without spoiling) the solution to guide "
"the next ones."
msgstr ""
"Uma questão interessante é se tais algoritmos simples existem para a outra "
"variante do problema. Alguns estão na literatura (p.ex. para a variante "
"cíclica). Integraria as suas soluções no PLM com alegria, especialmente se "
"puder dar uma dica (sem estragar a surpresa) da solução para guiar as outras "
"pessoas."

#. type: Content of: <h1>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:2
msgid "HanoiWorld"
msgstr "HanoiWorld"

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:5
msgid ""
"This world implements the ultra-classical Hanoi problem. You are asked to "
"move the disk pile from the stick where they are to the target stick (given "
"as second parameter in the world's name -- number 1 for the default "
"world). There is some extra constraint: you can only move one disk at a "
"time, and you cannot move a big disk over a smaller one."
msgstr ""
"Este mundo implementa o problema ultra clássico das torres de Hanói. Deve "
"mover a pilha de discos da pilha onde eles estão para outra pilha (dado um "
"segundo parâmetro no nome do mundo -- número 1 para o mundo predefinido). "
"Existem algumas restrições adicionais: pode mover apenas um disco por vez e "
"não pode pôr um disco sobre um menor."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:12
msgid "Only 4 functions are provided:"
msgstr "Apenas 4 funções são fornecidas:"

#. type: Content of: <pre>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:14
#, no-wrap
msgid "[!java|c]void [/!]move([!java|c]int [/!]src, [!java|c]int [/!]dst)"
msgstr "[!java|c]void [/!]mover([!java|c]int [/!]src, [!java|c]int [/!]dst)"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:16
msgid ""
"Moves one disk from the stick <code>src</code> onto the stick "
"<code>dst</code>. If you try to do an invalid move (like laying a disk over "
"a smaller one), an IllegalArgumentException is thrown."
msgstr ""
"Move um disco da vara <code>src</code> para a vara <code>dst</code>. Se "
"tentar fazer um movimento inválido (como pôr um disco sobre outro menor), "
"uma IllegalArgumentException é lançada."

#. type: Content of: <pre>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:20
#, no-wrap
msgid "[!java|c]int [/!]getSlotSize([!java|c]int [/!]slot)[!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getTamanhoSlot([!java|c]int [/!]slot)[!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:21
msgid ""
"Returns the amount of disks placed on the specified slot. This is mainly "
"used to initialize the recursion and set the amount of recursive call to "
"execute."
msgstr ""
"Retorna a quantidade de discos postos num ponto específico. É usado "
"principalmente para inicializar a recursão e ajustar a quantidade de "
"chamadas recursivas para executar."

#. type: Content of: <pre>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:24
#, no-wrap
msgid "[!java|c]int [/!]getSlotRadius([!java|c]int [/!]slot)[!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getSlotRadius([!java|c]int [/!]slot)[!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:25
msgid "Returns the radius of the top-most disk of the specified slot."
msgstr "Retorna o raio do disco no topo da vara especificada."

#. type: Content of: <h3>
#: src/lessons/maze/Main.html:2 src/lessons/maze/short_desc.html:2
msgid "Labyrinths"
msgstr "Labirintos"

#. type: Content of: <p>
#: src/lessons/maze/Main.html:4 src/lessons/maze/short_desc.html:4
msgid "This lesson proposes several exercises about labyrinths in the buggle world."
msgstr ""
"Esta lição propõe vários exercícios sobre labirintos no mundo dos buggles."

#. type: Content of: <h2>
#: src/lessons/maze/randommouse/RandomMouseMaze.html:2
msgid "The crazy mouse"
msgstr "O rato doido"

#. type: Content of: <p>
#: src/lessons/maze/randommouse/RandomMouseMaze.html:4
msgid ""
"The day of your buggle starts badly. Out of luck, it got trapped into a "
"maze. Help it finding its path out of there."
msgstr ""
"O dia do seu buggle começou ruim. Com falta de sorte, ficou preso num "
"labirinto. Ajude-o a encontrar o caminho para a saída."

#. type: Content of: <p>
#: src/lessons/maze/randommouse/RandomMouseMaze.html:9
msgid ""
"The exit is represented by a baggle and you need to pick this baggle in "
"order to exit the maze."
msgstr ""
"A saída é representada por um baggle e precisa apanhar este baggle para sair "
"do labirinto."

#. type: Content of: <p>
#: src/lessons/maze/randommouse/RandomMouseMaze.html:14
msgid ""
"Since the maze is so small, we can write the dumbest possible algorithm to "
"do so. It relies on randomness and proves quite inefficient."
msgstr ""
"Como o labirinto é muito pequeno, vamos escrever o algoritmo mais bobo "
"possível. É aleatório e vai mostrar-se bem ineficiente."

#. type: Content of: <p>
#: src/lessons/maze/randommouse/RandomMouseMaze.html:19
msgid ""
"While the buggle didn't find the path to the escape, it must proceed the "
"following way: pick a random integer between 0 and 2 by using the provided "
"<code>random3()</code> method and make one of the following actions: moving "
"forward if possible, turn left or turn right."
msgstr ""
"Enquanto o buggle não encontra o caminho para a saída, deve fazer o seguinte:"
" escolher um número inteiro entre 0 e 2 a usar o método <code>random3()</"
"code> fornecido e fazer uma das seguintes ações: andar em frente se for "
"possível, virar à esquerda ou virar à direita."

#. type: Content of: <p>
#: src/lessons/maze/randommouse/RandomMouseMaze.html:25
msgid ""
"You don't believe that it could work? Well, give it a try, you will see...  "
"Don't forget to pick up the baggle once you've reached it."
msgstr ""
"Julga que isto não vai funcionar? Bem, experimente e verá... Não se esqueça "
"de apanhar o baggle quando lhe chegar."

#. type: Content of: <h2>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:2
msgid "Following the walls"
msgstr "Seguir as paredes"

#. type: Content of: <p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:4
msgid ""
"This time, the maze is a bit more complicated. Random won't be enough, we "
"ough to be smart!"
msgstr ""
"Agora, o labirinto é um pouco mais complicado. Aleatoriedade pode não ser "
"suficiente, devemos ser espertos!"

#. type: Content of: <p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:7
msgid ""
"The good news is that this maze is simpler that it seems at the first "
"glance: every wall are connected to each other. To get out of this kind of "
"maze, the buggle only have to follow a wall (the one on its left or the one "
"on its right, it doesn't matter).  While keeping a paw on the wall, the "
"buggle must move forward until it finds the maze exit and this biscuit it "
"loves so much."
msgstr ""
"A boa notícia é que este labirinto é mais simples do que pode parecer à "
"primeira vista: todas as paredes são conectadas às outras. Para sair deste "
"tipo de labirinto, o buggle tem que simplesmente seguir uma parede (a que "
"fica à esquerda ou à direita dele, não importa). Enquanto manter uma pata na "
"parede, o buggle deve mover para a frente até encontrar a saída do labirinto "
"e o biscoito que tanto gosta."

#. type: Content of: <p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:14
msgid ""
"This works here because there is no island of isolated walls, so our buggle "
"cannot loop around for ever without encountering its baggle."
msgstr ""
"Isto funciona aqui porque não existem ilhas ou paredes isoladas, pois o "
"nosso buggle não vai entrar num loop para sempre sem encontrar o baggle dele."

#. type: Content of: outside any tag (error?)
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:18
msgid ""
"The goal of this exercise is to write an algorithm allowing the buggle to "
"get out of this maze."
msgstr ""
"O objetivo deste exercício é escrever um algoritmo que permita que o buggle "
"saia do labirinto."

#. type: Content of: <p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:21
msgid ""
"As said earlier, it does not matter whether you decide to follow the left "
"wall or the right one. Simply, the demo follows the left one, so you should "
"do the same in your solution to ease the comparison of your solution and the "
"demo."
msgstr ""
"Como dito anteriormente, não importa se decide seguir a parede à esquerda ou "
"à direita. Simplesmente, a demonstração segue a da esquerda, logo deve fazer "
"o mesmo na sua solução para facilitar a comparação da sua solução e da "
"demonstração."

#. type: Content of: <p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:26
msgid ""
"Write a method <code>keepHandOnSideWall()</code> which lets the buggle move "
"one step forward while keeping the paw on the wall of the selected side. You "
"must ensure that the buggle always keep the paw on the wall, but also that "
"it won't crash into a wall. You can check the tip for more info on this, but "
"only do so if you're stuck. Try to do it without the tip first."
msgstr ""
"Escreva um método <code>keepHandOnSideWall()</code> que faz o buggle andar "
"uma casa para a frente enquanto mantém a pata na parede do lado selecionado. "
"Deve garantir que o buggle sempre mantenha a pata na parede, mas também que "
"não bata numa parede. Pode controlar a dica para mais informações, mas faça-"
"o apenas se estiver perdido. Tente primeiro fazer sem a dica."

#. type: Content of: <p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:33
msgid ""
"Then, write the whole algorithm to traverse the maze step by step (using "
"<code>keepHandOnSideWall()</code>) until it finds the biscuit and the "
"exit. Don't forget to pick the baggle up once you've found it."
msgstr ""
"Depois escreva o algoritmo inteiro para percorrer o labirinto passo a passo ("
"a usar <code>keepHandOnSideWall()</code>) até encontrar o biscoito e a "
"saída. Não se esqueça de apanhar o baggle quando o encontrar."

#. type: Attribute 'alt' of: <div>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:38
msgid "I'm lost, please give me some extra indications"
msgstr "Estou perdido, dê-me orientações adicionais"

#. type: Content of: <div><p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:39
msgid ""
"When your buggle has a wall on the left, there is three situations to "
"consider, depending on the surrounding walls. The following table depicts "
"each initial situation, and where you should let your buggle end after one "
"step."
msgstr ""
"Quando o seu buggle tem uma parede à esquerda, existem três situações a "
"considerar, dependente das paredes à volta. A tabela a seguir explica cada "
"situação inicial e onde deve deixar o seu buggle parar depois de cada passo."

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:46
msgid "Case 1"
msgstr "Caso 1"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:47
msgid "Case 2"
msgstr "Caso 2"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:48
msgid "Case 3"
msgstr "Caso 3"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:50
msgid "Initial situation"
msgstr "Situação inicial"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:55
msgid "Where is the next step"
msgstr "Onde é o próximo passo"

#. type: Content of: <div><p>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:61
msgid ""
"If you do a <code>right()</code> in any case at the end of your function, "
"it's possible to write it in 3 lines with a <code>while</code> loop."
msgstr ""
"Se faz um <code>right()</code> em qualquer caso no final da sua função, é "
"possível escreve-la com 3 linhas com um loop <code>while</code>."

#. type: Content of: <h2>
#: src/lessons/maze/pledge/PledgeMaze.html:2
msgid "Pledge algorithm"
msgstr "Algoritmo de Pledge"

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:4
msgid ""
"Once again, you thought that your algorithm were good enough to escape the "
"maze, and once again, you buggle is now in a maze where your previous "
"algorithm fails. Just give it a try: copy/paste your code and hit the "
"\"Run\" button and see your creation fail. The trap is shaped like an upper "
"case \"G\". The buggle enters the trap and follows the inner border. At some "
"point, it finds the north direction free, run into that direction, and falls "
"again in the trap."
msgstr ""
"Novamente, pensou que o seu algoritmo era bom o suficiente para escapar do "
"labirinto e novamente, o seu buggle está agora num labirinto onde o seu "
"algoritmo anterior falhou. Dê-lhe uma hipótese: copie-e-cole o seu código e "
"aperte o botão \"Executar\" e veja a sua criação falhar. A armadilha é no "
"formato de um \"G\" maiúsculo. O buggle entra na armadilha e segue a borda "
"interior. Num determinado momento, encontra a direção norte livre, vai nesta "
"direção e cai de novo na armadilha."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:14
msgid ""
"The Pledge's algorithm (named after Jon Pledge of Exeter) can solve this "
"maze."
msgstr ""
"O algoritmo de Pledge (em homenagem a Jon Pledge of Exeter) pode resolver "
"este labirinto."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:17
msgid ""
"This algorithm is a modification of the previous one thought to avoid "
"obstacles. It randomly picks a heading and let the buggle move in that "
"direction. When it encounters an obstacle, a paw (for example the left one)  "
"is kept on the wall following the obstacle while counting the turns. When "
"the buggle is back to its original heading and when the sum of the turns is "
"0, the buggle leaves the obstacle and continues keeping its original "
"heading."
msgstr ""
"Este algoritmo é uma modificação do anterior para evitar obstáculos. Escolhe "
"aleatoriamente uma direção e deixe o buggle ir nesta direção. Quando "
"encontra um obstáculo, uma pata (por exemplo, a da esquerda) é mantida na "
"parede a seguir o obstáculo enquanto conta as curvas. Quando o buggle está "
"de volta à direção original dele e a soma das curvas deu 0, o buggle deixa o "
"obstáculo e continua a manter a direção original dele."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:25
msgid ""
"Note that the use of \"total turning\" rather than just the \"current "
"direction\" allows the algorithm to avoid G-shapped traps. If one proceeds "
"left into the trap, one gets turned around a full 360 degrees by the "
"walls. As we said before, the naive \"current direction\" algorithm gets "
"into a limit cycle as it leaves the lower rightmost wall heading left and "
"runs into the curved section on the left again."
msgstr ""
"Observe que o uso de \"total turning\" ao invés de simplesmente o \"current "
"direction\" permite que o algoritmo evite armadilhas no formato G. Se alguém "
"escolhe a esquerda para dentro da armadilha acaba a girar 260 graus pelas "
"paredes. Como dissemos antes, o algoritmo simplório \"current direction\" "
"entra num ciclo limitado à medida que deixa a parede mais à direita a "
"apontar para a esquerda e anda para a secção curvada na esquerda de novo."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:32
msgid ""
"The Pledge's algorithm does not leave the rightmost wall due to the total "
"turning not being zero at that point. It follows the wall all the way "
"around, finally leaving it heading left on the bottom outside"
msgstr ""
"O algoritmo de Pledge não deixa a parede mais à direita devido ao total de "
"curvas não ser zero neste ponto. Segue a parede na volta toda, a deixa-o "
"finalmente a apontar para a esquerda no \"fundo exterior\""

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:39
msgid ""
"<a name=\"Objective\"/>You now have to modify your solution to implement the "
"Pledge algorithm to escape this maze."
msgstr ""
"<a name=\"Objective\"/>Agora tem que modificar a sua solução para "
"implementar o algoritmo de Pledge para escapar deste labirinto."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:42
msgid ""
"Change your <code>keepHandOnSideWall()</code> method to count the amount of "
"turns done by the buggle (+1 when it turns left, and -1 when it turns "
"right). This counting may require the addition of an <code>angleSum</code> "
"integer value in your program."
msgstr ""
"Mude o seu método <code>keepHandOnSideWall()</code> para contar a quantidade "
"de curvas feitas pelo buggle (+1 quando gira para a esquerda e -1 quando "
"gira para a direita). Esta contagem pode necessitar a adição de um valor "
"inteiro <code>angleSum</code> no seu programa."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:47
msgid ""
"Write a boolean method <code>isDirectionFree(dir)</code> indicating if the "
"provided direction is free, ie, if you can move in that direction (Note that "
"the demo uses the NORTH direction for that).  You can retrieve the current "
"direction of the buggle using the method <code>getDirection()</code>. You "
"can change your direction (without moving) using "
"<code>setDirection(dir)</code>. Don't forget to store the previous direction "
"of your buggle (in a dedicated variable) before checking if your favorite "
"direction is free in order to restore your state afterward."
msgstr ""
"Escreva um método booleano <code>isDirectionFree(dir)</code> a indicar se a "
"direção dada está livre, ou seja, se pode mover naquela direção (Observe que "
"a demonstração usa a direção NORTH para isto). Pode recuperar a direção "
"atual do buggle a usar o método <code>getDirection()</code>. Pode mudar a "
"sua direção (sem se mover) a usar <code>setDirection(dir)</code>. Não se "
"esqueça de guardar a direção anterior do seu buggle (numa variável exclusiva)"
" antes de verificar se a sua direção favorita está livre para depois "
"recuperar o seu estado."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:56
msgid ""
"You may have to change the rest of your code also, but these changes should "
"remain limited."
msgstr ""
"Também pode ter que mudar o resto do seu código, mas estas mudanças podiam "
"ser poucas."

#. type: Content of: <p>
#: src/lessons/maze/pledge/PledgeMaze.html:59
msgid ""
"Don't forget that if you have a method modifying a global variable (such as "
"angleSum), you should ensure that it declares this variable as "
"global. Without it, the method creates a new variable of the same name, and "
"the global never gets modified."
msgstr ""
"Não se esqueça que se tem um método que modifica uma variável global (como "
"angleSum), deve garantir que declara esta variável como global. Sem ele, o "
"método cria uma variável de mesmo nome e a global nunca é modificada."

#. type: Content of: <pre>
#: src/lessons/maze/pledge/PledgeMaze.html:63
#, no-wrap
msgid ""
"def myMethod():\n"
"  global angleSum\n"
"  ...\n"
"  angleSum = angleSum + 1\n"
msgstr ""
"def myMethod():\n"
"  global angleSum\n"
"  ...\n"
"  angleSum = angleSum + 1\n"

#. type: Attribute 'alt' of: <div>
#: src/lessons/maze/pledge/PledgeMaze.html:70
msgid "Show an additional tip"
msgstr "Mostre uma dica adicional"

#. type: Content of: <div>
#: src/lessons/maze/pledge/PledgeMaze.html:71
msgid ""
"You should set your direction to your favorite one (NORTH is advised). Then, "
"you should write the algorithm main loop. In other words, while your buggle "
"did not find its biscuit, you have to move forward until next obstacle in "
"the favorite direction. Then, put a paw on a wall (using "
"<code>keepHandOnSideWall()</code>) while the sum of turns is not null and "
"the favorite direction is not free. Do that until you find your baggle."
msgstr ""
"Deve ajustar a sua direção para a sua favorita (NORTH é a recomendada). "
"Então, deve escrever o loop principal algoritmo. Em outras palavras, "
"enquanto o seu buggle não encontra o biscoito dele, tem que mover para a "
"frente até ao próximo obstáculo na sua direção favorita. Então, ponha uma "
"pata na parede (a usar <code>keepHandOnSideWall()</code>) enquanto a soma de "
"curvas não for null (nula) e a direção favorita não estiver livre. Faça-o "
"até que encontre o seu baggle."

#. type: Content of: <h2>
#: src/lessons/maze/island/IslandMaze.html:2
msgid "Lost between islands"
msgstr "Perdido entre ilhas"

#. type: Content of: <p>
#: src/lessons/maze/island/IslandMaze.html:4
msgid ""
"You thought that your algorithm was enough to escape mazes? Well, not every "
"mazes..."
msgstr ""
"Julga que o seu algoritmo é suficiente para escapar de labirintos? Bem, não "
"de todos..."

#. type: Content of: <p>
#: src/lessons/maze/island/IslandMaze.html:8
msgid ""
"The <i>wall follower algorithm</i> we used so far only works if the entry "
"and the exit are placed near to walls connected to the external wall. But if "
"the buggle begins in the middle of the maze, it may exist wall sections "
"disconnected from the external wall."
msgstr ""
"O <i>algoritmo de seguir paredes</i> que usamos até agora só funciona se a "
"entrada e a saída estão próximas de paredes conectadas ao muro externo. Mas "
"se o buggle começa na metade do labirinto, podem existir sessões de paredes "
"desconectadas da parede externa."

#. type: Content of: <p><p>
#: src/lessons/maze/island/IslandMaze.html:13
msgid ""
"That is why the previous strategy would let the buggle round around for "
"ever. Indeed, the maze you should now escape from contains islands, and the "
"buggle does not start along one of the external walls. Just give it a try if "
"you want: copy your code over, push the run button and see your previous "
"solution failing miserabily."
msgstr ""
"É por isto que a estratégia anterior pode deixar o buggle a dar voltas para "
"sempre. Na verdade, o labirinto do qual deve escapar agora contém ilhas e o "
"buggle não começa próximo de um dos muros externos. Experimente se quiser: "
"copie o seu código aqui, aperte o botão executar e veja a sua solução "
"anterior falhar vergonhosamente."

#. type: Content of: <p><p>
#: src/lessons/maze/island/IslandMaze.html:19
msgid ""
"The method of following a wall is still good and allow to escape very "
"efficiently some sections of the maze, so we do not want to remove it "
"entierely. Instead, we want to stop following the wall under some "
"conditions. Notice that the baggle lays near to the external border of the "
"maze. So, we want to reach the border and then follow that wall. We need for "
"example to search for the north wall before following it to the baggle."
msgstr ""
"O método de seguir uma parede ainda é bom e permite escapar com muita "
"eficiência de algumas secções do labirinto, por isso não precisamos removê-"
"lo inteiramente. Ao invés disto, queremos parar de seguir a parede sob "
"certas condições. Observe que o baggle fica próximo da borda externa do "
"labirinto. Queremos chegar à borda e então seguir aquela parede. Precisamos, "
"por exemplo, procurar a parede norte antes de segui-la até ao baggle."

#. type: Content of: <p><p><p>
#: src/lessons/maze/island/IslandMaze.html:27
msgid ""
"To find the north wall, you simply run to the north as long as it's "
"possible, and when facing an obstacle, you avoid it (using previous method)."
msgstr ""
"Para encontrar a parede do norte, simplesmente ande para o norte enquanto "
"for possível e quando encontrar um obstáculo, deve desviar dele (a usar o "
"método anterior)."

#. type: Attribute 'alt' of: <p><p><div>
#: src/lessons/maze/island/IslandMaze.html:31
msgid "I'm lost now, please give me some extra indications"
msgstr "Estou perdido agora, por favor dê-me algumas orientações adicionais"

#. type: Content of: <p><p><div>
#: src/lessons/maze/island/IslandMaze.html:32
msgid ""
"Our new run() method will consist in two modes: our buggle will alternate "
"between the \"north runner mode\" and the \"left follower mode\". You begin "
"in \"north runner mode\", and switch to \"left follower\" when you have a "
"wall at the north (do not forget to make sure you have a wall at your left "
"before switching to \"left follower\" mode). You switch to \"north runner\" "
"as soon as your buggle is facing north and is not in front of a wall during "
"its trip around its left wall. The easiest way to write such a state machine "
"is something like"
msgstr ""
"O nosso novo método run() consistirá de dois modos: o nosso buggle vai "
"alternar entre o \"modo de andar para o norte\" e o \"modo de seguir à "
"esquerda\". Começa no \"modo de andar para o norte\" e alternar para \"seguir"
" à esquerda\" quando tiver uma parede ao norte (não se esqueça de garantir "
"que tem uma parede à sua esquerda antes de alternar para o modo \"seguir a "
"esquerda\"). Alterna para \"andar para o norte\" assim que o seu buggle "
"estiver a olhar para o norte e não estiver em frente de um muro durante a "
"sua viagem ao redor do muro à esquerda dele. O mais fácil de escrever tal "
"máquina de estado é algo como"

#. type: Content of: <p><p><div><pre>
#: src/lessons/maze/island/IslandMaze.html:40
#, no-wrap
msgid ""
"[!scala]var state=0;\n"
"state match  {\n"
"  case 0 => // North runner\n"
"     ...\n"
"     state = 1;\n"
"  case 1 => // Left follower\n"
"     ...\n"
"     state = 0;\n"
"  case _ => println(\"This case should not happen. Please fix me\")\n"
"}[/!][!java|c]int state=0;\n"
"switch (state) {\n"
"  case 0: // North runner\n"
"     ...\n"
"     state = 1;\n"
"     break;\n"
"  case 1: // Left follower\n"
"     ...\n"
"     state = 0;\n"
"     break;\n"
"}[/!][!python]northRunner = True\n"
"if northRunner:\n"
"     ...\n"
"     northRunner = False\n"
"else: # left follower\n"
"     ...\n"
"     northRunner = True[/!]"
msgstr ""
"[!scala]var state=0;\n"
"state match  {\n"
"  case 0 => // para o norte\n"
"     ...\n"
"     state = 1;\n"
"  case 1 => // seguir a esquerda\n"
"     ...\n"
"     state = 0;\n"
"  case _ => println(\"Isto não deveria acontecer. Favor me conserte\")\n"
"}[/!][!java|c]int state=0;\n"
"switch (state) {\n"
"  case 0: // para o norte\n"
"     ...\n"
"     state = 1;\n"
"     break;\n"
"  case 1: // seguir a esquerda\n"
"     ...\n"
"     state = 0;\n"
"     break;\n"
"}[/!][!python]northRunner = True\n"
"if northRunner:\n"
"     ...\n"
"     northRunner = False\n"
"else: # left follower\n"
"     ...\n"
"     northRunner = True[/!]"

#. type: Content of: <p><p><div>
#: src/lessons/maze/island/IslandMaze.html:67
msgid ""
"Don't forget the default case (matching _), or scala will issue an error "
"since your matching would be incomplete.[/!]"
msgstr ""
"Não se esqueça do caso default (matching _), ou scala irá dar um erro já que "
"o seu \"matching\" vai estar incompleto.[/!]"

#. type: Content of: <p><p><p>
#: src/lessons/maze/island/IslandMaze.html:70
msgid "Don't forget to let the buggle pick the baggle at the end of your code."
msgstr "Não se esqueça de deixar o buggle apanhar o baggle no final do código."

#. type: Content of: <p><p><p>
#: src/lessons/maze/island/IslandMaze.html:73
msgid ""
"You're up. That should be enough for you to figure out how to escape this "
"maze, but if not, you can always request for the tip. But you do not need "
"any more help, do you?"
msgstr ""
"Tudo pronto. Isto deve ser o suficiente para descobrir como sair deste "
"labirinto e se não for o caso, sempre pode pedir uma dica. Mas não vai "
"precisar, correto?"

#. type: Content of: <h2>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:2
msgid "Basic Shortest Path algorithm"
msgstr "Algoritmo básico do caminho mais curto"

#. type: Content of: <p>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:4
msgid ""
"To conclude with this introductory lesson to maze solving algorithms, we "
"will investigate another way to find the exit. The buggle in this lesson is "
"a special buggle: he is a jedi. He can feel the Force. This means he is able "
"to feel his environment."
msgstr ""
"Para concluir com esta lição introdutória em algoritmos de resolução de "
"labirintos, vamos investigar outra forma de encontrar a saída. O buggle "
"nesta lição é um buggle especial: é um jedi. Pode sentir a Força. Isto "
"significa que pode sentir o ambiente."

#. type: Content of: <p>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:8
msgid ""
"Without even leaving his position, he can retrieve information about the "
"world he is leaving in, with the following functions:"
msgstr ""
"Sem nem sequer sair da posição dele, pode recuperar informações sobre o "
"mundo que está a viver, com as seguintes funções:"

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:10
msgid "<code>getWorldWidth()</code> gives the width of its world."
msgstr "<code>getWorldWidth()</code> da a largura (\"width\") do mundo."

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:11
msgid "<code>getWorldHeight()</code> gives the height of its world."
msgstr "<code>getWorldHeight()</code> da a altura (\"height\") do mundo."

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:12
msgid ""
"<code>hasTopWall(x,y)</code> tells whether the cell (x,y) of this world has "
"a wall on top."
msgstr ""
"<code>hasTopWall(x,y)</code> diz se a célula (x,y) deste mundo tem uma "
"parede no topo."

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:13
msgid ""
"<code>hasLeftWall(x,y)</code> tells whether the cell (x,y) of this world has "
"a wall on the left."
msgstr ""
"<code>hasLeftWall(x,y)</code> diz se a célula (x,y) deste mundo tem uma "
"parede na esquerda."

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:14
msgid ""
"<code>hasBaggle(x,y)</code> tells whether the cell (x,y) of this world has a "
"baggle."
msgstr ""
"<code>hasBaggle(x,y)</code> diz se a célula (x,y) deste mundo tem um baggle."

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:15
msgid ""
"<code>setIndication(x,y,i)</code> adds the integer indication <code>i</code> "
"to the cell (x,y)."
msgstr ""
"<code>setIndication(x,y,i)</code> adiciona a indicação inteira <code>i</"
"code> à célula (x,y)."

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:16
msgid ""
"<code>getIndication(x,y,i)</code> retrieves the integer indication of the "
"cell (x,y) (or 9999 if there is no indication)."
msgstr ""
"<code>getIndication(x,y,i)</code> obtém a indicação inteira da célula (x,y) ("
"ou 9999 se não houver indicação)."

#. type: Content of: <p>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:19
msgid ""
"It has to be noted that it is not possible to build a wall on the bottom "
"edge or on the right edge of a cell.  Therefore when such wall exists, it "
"means it was built on a sibling cells -- as a top (respectively left) wall "
"on the cell that is located below (respectively at the right of) the current "
"cell."
msgstr ""
"Note que não é possível construir uma parede na borda de baixo ou na borda à "
"direita de uma célula. Portanto, se tal parede existe, significa que foi "
"construído nas células vizinhas -- como uma parede na borda de cima ("
"respetivamente da esquerda) da célula que é localizada abaixo ("
"respetivamente à direita) da célula atual."

#. type: Content of: <p>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:25
msgid ""
"Your buggle should first write the distance to the exit on each cell (or at "
"least the useful ones)."
msgstr ""
"O seu buggle deve primeiro escrever a distância à saída em cada célula (ou "
"pelo menos nas células úteis)."

#. type: Content of: <p>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:26
msgid ""
"For that, find the exit and write 0 there.  Then, write 1 on every "
"neighboring cells that is not separated from the exit with a wall.  And then "
"mark every cells from which you can reach the exit in 2 steps, and iterate "
"for all cells until all cells are marked."
msgstr ""
"Para isto, encontre a saída e escreva 0 lá. Então, escreva 1 em cada célula "
"vizinha que não esteja separada da saída por uma parede. E depois marque "
"cada célula a partir da qual possa alcançar a saída em 2 passos e itere para "
"todas as células até que todas as células estejam marcadas."

#. type: Content of: <p>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:31
msgid ""
"Once the cells are marked, get your jedi buggle to follow the shortest "
"path.  Basically the buggle has only to walk on each case with the lesser "
"distance from the exit. You can use the method "
"<code>setDirection(direction)</code> to make your buggle look at the "
"specific direction such as "
"<code>[!scala|java|python]Direction.[/!]NORTH</code> or "
"<code>[!scala|java|python]Direction.[/!]EAST</code>."
msgstr ""
"Uma vez que as células estejam marcadas, faça o seu buggle jedi percorrer a "
"caminho mais curto. Basicamente o buggle tem apenas que andar em cada caso "
"com a menor distância à saída. Pode usar o método "
"<code>setDirection(direction)</code> para fazer o seu buggle virar para a "
"direção específica como <code>[!scala|java|python]Direction.[/!]NORTH</code> "
"ou <code>[!scala|java|python]Direction.[/!]EAST</code>."

#. type: Attribute 'alt' of: <div>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:36
msgid "I'm lost now. Please give me some extra indications."
msgstr "Estou perdido agora. Por favor, dê-me algumas indicações adicionais."

#. type: Content of: <div>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:37
msgid "Use the Force, Luke!"
msgstr "Usa a Força, Luke!"

#. type: Content of: <h2>
#: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:2
msgid "Finding the walls to follow"
msgstr "Encontrar as paredes para seguir"

#. type: Content of: <p>
#: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:4
msgid ""
"This is exactly the same maze than before, but the buggle does not start at "
"the same location. In particular, it does not have any wall to its left at "
"the beginning."
msgstr ""
"Este é o mesmo labirinto que o anterior, mas o buggle não inicia na mesma "
"localização. Em particular, não existe nenhuma parede à esquerda dele no "
"início."

#. type: Content of: <p>
#: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:8
msgid ""
"As a result, the method you wrote for the previous exercise probably don't "
"work for this one. If you use it here with no modification, your buggle "
"probably start looping over the four free cells around its start position "
"(if that's not the case, well, you didn't really stick to the mission on "
"previous exercise. Feel lucky and proceed to the next :)"
msgstr ""
"O resultado é que o método que escreveu para o exercício anterior "
"provavelmente não vai funcionar neste agora. Se usá-lo aqui sem "
"modificações, o seu buggle provavelmente vai iniciar a percorrer as quatro "
"células ao redor do ponto inicial (se este não é o caso, bem, é porque não "
"fez o exercício anterior completamente. Sinta-se sortudo e vá para o próximo "
"exercício :)"

#. type: Content of: <p>
#: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:15
msgid ""
"This is because your <code>keepHandOnSideWall()</code> method has an "
"implicit <b>pre-condition</b>: it works well if and only if the buggle has a "
"wall to its left when you call it. Such pre-condition are very heavily used "
"when programming. Specifying them explicitly helps understanding the code "
"written by other, and they even allow sometimes to prove that the code works "
"correctly."
msgstr ""
"Isto é porque o seu método <code>keepHandOnSideWall()</code> tem uma "
"<b>pré-condição</b> implícita: funciona bem apenas se o buggle tem uma "
"parede à esquerda quando o chama. Tais pré-condições são muito usadas em "
"programação. Especificá-las explicitamente ajuda a entender o código escrito "
"por outros e até servem, às vezes, para provar que o código funciona "
"corretamente."

#. type: Content of: <p>
#: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:25
msgid ""
"Fixing the problem should be very easy. Simply make sure that the "
"pre-condition of <code>keepHandOnSideWall()</code> is verified before "
"calling it. For that, update your code to first look for a wall on its left "
"before the big <code>while</code> loop."
msgstr ""
"Consertar o problema deve ser bem fácil. Simplesmente garanta que a pré-"
"condição de <code>keepHandOnSideWall()</code> seja verificada antes de chamá-"
"lo. Para isto, atualize o seu código para primeiro olhar a uma parede à sua "
"esquerda antes do loop <code>while</code> maior."

#. type: Content of: <h3>
#: src/lessons/lightbot/universe/LightBotWorld.html:2
#: src/lessons/lightbot/Main.html:2 src/lessons/lightbot/short_desc.html:2
msgid "LightBot"
msgstr "LightBot"

#. type: Content of: outside any tag (error?)
#: src/lessons/lightbot/universe/LightBotWorld.html:4
msgid ""
"This universe introduces a little programming puzzle which can somehow be "
"used to introduce programmation to non-reading kids since it is programmed "
"graphically.  The goal of each board is to light up all the lights. Your "
"robot understands the following orders:"
msgstr ""
"Este universo introduz um pequeno quebra-cabeças de programação que pode num "
"sentido ser usado para introduzir programação a crianças que não sabem ler "
"desde ser programado graficamente. O objetivo de cada tabuleiro é ligar "
"todas as luzes. O seu robô entende as seguintes ordens:"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:8
msgid "<b>Order</b>"
msgstr "<b>Order</b>"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:8
msgid "<b>Meaning</b>"
msgstr "<b>Meaning</b>"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:9
msgid "<b>Move forward</b>"
msgstr "<b>Mover para frente</b>"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:9
msgid "Cannot be done if the destination cell is of another height than source cell"
msgstr ""
"Não pode ser feito se a célula de destino é de outra altura que a célula de "
"origem"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:10
msgid "<b>Jump forward</b>"
msgstr "<b>Pular pra frente</b>"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:10
msgid ""
"Can only be done if the destination cell is one step higher than source "
"cell, or if destination is lower than source. Cannot be used for plain "
"moves."
msgstr ""
"Só pode ser feito se a célula de destino está um passo mais alto que a "
"célula de origem, ou se o destino é mais baixo que a origem. Não pode ser "
"usado para movimentos normais."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:11
msgid "<b>Turn left</b>."
msgstr "<b>Virar à esquerda</b>."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:12
msgid "<b>Turn right</b>."
msgstr "<b>Virar à direita</b>."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:13
msgid "<b>Switch the light</b>."
msgstr "<b>trocar a luz</b>."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:13
msgid ""
"Turn it on if it was off, and off if it was on. No effect if the cell does "
"not contain any light."
msgstr ""
"Liga-a se estiver desligada e desliga-a se estiver ligada. Sem efeito se a "
"célula não contém nenhuma luz."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:14
msgid "<b>Call function 1</b>."
msgstr "<b>Chamar função 1</b>."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:15
msgid "<b>Call function 2</b>."
msgstr "<b>Chamar função 2</b>."

#. type: Content of: <p>
#: src/lessons/lightbot/universe/LightBotWorld.html:18
msgid ""
"Please note that this world is not completely suited to small kids since the "
"main difficulty comes from the fact that your are highly limited in the "
"amount of instructions you can give to your robot. Advanced levels thus "
"require to write sound functions, and are often above the capacities of "
"small kids."
msgstr ""
"Por favor observe que este mundo não é completamente adequado para crianças "
"pequenas uma vez que a principal dificuldade vem do fato de que a quantidade "
"de instruções é muito limitada. Níveis avançados então necessitam que "
"algumas funções de sons são escritas e estão acima das capacidades de "
"crianças pequenas."

#. type: Content of: <p>
#: src/lessons/lightbot/universe/LightBotWorld.html:20
msgid ""
"This game is heavily inspirated from a flash game of the same name, which "
"can for example be played on kongregate.com. It was written by Danny "
"Yaroslavski (Coolio-Niato), the original idea being of Matt Chase."
msgstr ""
"Este jogo é fortemente inspirado dum jogo de flash com o mesmo nome, que "
"pode, por exemplo, ser jogado em kongregate.com. Foi escrito por Danny "
"Yaroslavski (Coolio-Niato) e a ideia original é de Matt Chase."

#. type: Content of: outside any tag (error?)
#: src/lessons/lightbot/Main.html:3
msgid ""
"This lesson introduces a little programming puzzle inspired from a flash "
"game."
msgstr ""
"Esta lição introduz um pequeno quebra-cabeças de programação inspirado num "
"jogo em flash."

#. type: Content of: <p>
#: src/lessons/lightbot/Main.html:5
msgid "See the <i>About this world</i> dialog for more details."
msgstr "Veja o diálogo <i>Sobre este mundo</i> para mais detalhes."

#. type: Content of: <p>
#: src/lessons/lightbot/short_desc.html:4
msgid ""
"This lesson constitutes a little brain teaser for programmers. You have to "
"instruct your robot to turn off all lights. The trick is that you program "
"your robot graphically, and that you are limited in the amount of "
"instructions."
msgstr ""
"Esta lição constitui um pequeno \"brain teaser\" para programadores. Tem que "
"instruir o seu robô a desligar todas as luzes. O truque é que programa o seu "
"robô graficamente e tem uma quantidade limitada de instruções."

#. type: Content of: <p>
#: src/lessons/lightbot/short_desc.html:9
msgid "No previous experience is expected to take this lesson."
msgstr "Espera-se experiência prévia para fazer esta lição."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board01TwoSteps.html:2
msgid "Welcome"
msgstr "Bem-vindo"

#. type: Content of: <p>
#: src/lessons/lightbot/Board01TwoSteps.html:4
msgid ""
"Welcome to the lightbot world. This is merely a programmer puzzle rather "
"than a real lesson (although some use it to teach programming).  The robot "
"is not programmed in Java, but rather graphically. You can see the existing "
"orders in the documentation using the <i>About this world</i> menu."
msgstr ""
"Bem-vindo ao mundo lightbot. Este é apenas um quebra-cabeça para "
"programadores ao invés de uma lição real (embora algumas pessoas usem isto "
"para ensinar programação). O robô não é programado em Java, mas sim "
"graficamente. Pode ver as ordens existentes na documentação a usar o menu "
"<i>Sobre este mundo</i>."

#. type: Content of: <p><</p><p>
#: src/lessons/lightbot/Board01TwoSteps.html:7
msgid ""
"The goal of each board is simply to switch on every lights of the board "
"using your little robot."
msgstr ""
"O objetivo de cada tabuleiro é simplesmente ligar todas as luzes do "
"tabuleiro a usar o seu pequeno robô."

#. type: Content of: <p><</p><p>
#: src/lessons/lightbot/Board01TwoSteps.html:9
msgid ""
"This is a introduction exercise, which should be solvable by only moving "
"forward and switching the light, using respectively"
msgstr ""
"Este é um exercício introdutório, que pode ser resolvido simplesmente a "
"mover em frente e a apertar o interruptor, a usar respetivamente"

#. type: Content of: <p>
#: src/lessons/lightbot/Board01TwoSteps.html:11
#: src/lessons/lightbot/Board02Turn.html:5
#: src/lessons/lightbot/Board06Func.html:4
msgid "and"
msgstr "e"

#. type: Content of: <p><</p><p>
#: src/lessons/lightbot/Board01TwoSteps.html:11
msgid "."
msgstr "."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board02Turn.html:2
msgid "Turn around"
msgstr "Virar"

#. type: Content of: <p>
#: src/lessons/lightbot/Board02Turn.html:4
msgid "Now, you probably need to turn in addition (using"
msgstr "Agora, provavelmente precisa virar adicionalmente (a usar"

#. type: Content of: <p>
#: src/lessons/lightbot/Board02Turn.html:5
msgid ")."
msgstr ")."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board03Jump.html:2
msgid "Jump"
msgstr "Pular"

#. type: Content of: <p>
#: src/lessons/lightbot/Board03Jump.html:4
msgid "You can also jump using"
msgstr "Também pode pular a usar"

#. type: Content of: <p>
#: src/lessons/lightbot/Board03Jump.html:4
msgid ""
"to pass obstacles. You can either jump one level up or any amount of levels "
"down, but you cannot jump to go on a cell of the same height."
msgstr ""
"para passar obstáculos. Pode tanto pular um nível ou qualquer quantidade de "
"níveis para baixo, mas não pode pular para uma célula da mesma altura."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board04Stairs.html:2
msgid "Stairs"
msgstr "Degraus"

#. type: Content of: <p>
#: src/lessons/lightbot/Board04Stairs.html:4
msgid "Can you pass these stairs?"
msgstr "Pode passar estes degraus?"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board05Higher.html:2
msgid "Higher"
msgstr "Mais alto"

#. type: Content of: <p>
#: src/lessons/lightbot/Board05Higher.html:4
msgid "Let's go higher"
msgstr "Vamos mais alto"

#. type: Content of: <p>
#: src/lessons/lightbot/Board06Func.html:4
msgid "You can use"
msgstr "Pode usar"

#. type: Content of: <p>
#: src/lessons/lightbot/Board06Func.html:4
msgid ""
"to call respectively the first and second functions. Define their code in "
"their own tab."
msgstr ""
"chamar respetivamente as primeira e segunda funções. Defina o código na "
"própria guia dele."

#. type: Content of: <p><p>
#: src/lessons/lightbot/Board06Func.html:6
msgid "This is great if you get out of space in your main function"
msgstr "Isto é muito bom se ficar sem espaço na sua função principal"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board07Repeat.html:2
msgid "Repetitive tasks"
msgstr "Tarefas repetitivas"

#. type: Content of: <p>
#: src/lessons/lightbot/Board07Repeat.html:4
msgid "Functions are also of great use for repetitive tasks"
msgstr "Funções também são muitos úteis para tarefas repetitivas"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board08Rec.html:2
msgid "Calling functions from functions"
msgstr "Chamar funções de dentro de funções"

#. type: Content of: <p>
#: src/lessons/lightbot/Board08Rec.html:4
msgid "It is perfectly okay to call a function from within a function!"
msgstr "Não tem nada de errado em chamar uma função de dentro de uma função!"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board09Castle.html:2
msgid "Castle"
msgstr "Castelo"

#. type: Content of: <p>
#: src/lessons/lightbot/Board09Castle.html:4
msgid "You're getting good at this..."
msgstr "Está a ficar bom nisto..."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board10Wall.html:2
msgid "Wall"
msgstr "Parede"

#. type: Content of: <p>
#: src/lessons/lightbot/Board10Wall.html:4
msgid "Ready to climb the wall?"
msgstr "Preparado para subir a parede?"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board11Sea.html:2
msgid "Sea"
msgstr "Mar"

#. type: Content of: <p>
#: src/lessons/lightbot/Board11Sea.html:4
msgid "You now have to surf these waves of lamps."
msgstr "Agora vai ter que surfar neste mar de lâmpadas."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board12Escher.html:2
msgid "Escher Castle"
msgstr "Castelo de Escher"

#. type: Content of: <p>
#: src/lessons/lightbot/Board12Escher.html:4
msgid "This one aint easy."
msgstr "Este não é fácil."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Close10.html:2
msgid "Close to 10"
msgstr "Próximo de 10"

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/Close10.html:3
msgid ""
"Given 2 int values, return whichever value is nearest to the value 10, or "
"return 0 in the event of a tie.  [!java|scala]Note that Math.abs(n) returns "
"the absolute value of a number.[/!] [!python]Note that math.fabs(n) returns "
"the absolute value of a number.  This function can only be used if you "
"imported the math module.[/!]"
msgstr ""
"Dados dois valores int, retorne o valor que for mais próximo do 10 ou "
"retorne 0 no caso de um empate.  [!java|scala]Note que Math.abs(n) retorna o "
"valor absoluto de um número.[/!] [!python]Note que math.fabs(n) retorna o "
"valor absoluto de um número.  Esta função só pode ser usada se importar o "
"módulo math.[/!]"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/CountTeen.html:2
msgid "Count Teen"
msgstr "Contar Adolescentes"

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/CountTeen.html:3
msgid ""
"We'll say that a number is \"teen\" if it is in the range 13..19 "
"inclusive. Given 4 int values, return the amount of teen ones."
msgstr ""
"Diremos que um número é \"adolescente\" se estiver no intervalo 13..19 "
"inclusive. Dados 4 valores int, retorne a quantidade de adolescentes."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Diff21.html:2
msgid "Diff 21"
msgstr "Diferença 21"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/Diff21.html:3
msgid ""
"Given an int n, return the absolute difference between n and 21, except "
"return double the absolute difference if n is over 21."
msgstr ""
"Dado um int n, retorne a diferença absoluta entre n e 21, exceto que retorna "
"a diferença absoluta, se n for maior que 21."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/HasTeen.html:2
msgid "Has Teen"
msgstr "Tem Adolescente"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/HasTeen.html:3
msgid ""
"We'll say that a number is \"teen\" if it is in the range 13..19 "
"inclusive. Given 3 int values, return true if 1 or more of them are teen."
msgstr ""
"Diremos que um número é \"adolescente\" se está entre 13..19 inclusive. "
"dados 3 valores int, retorne true se 1 ou mais deles são adolescentes."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/IcyHot.html:2
msgid "Icy Hot"
msgstr "Frio Quente"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/IcyHot.html:3
msgid ""
"Given two temperatures, return true if one is less than 0 and the other is "
"greater than 100."
msgstr ""
"Dadas duas temperaturas, retorne true se uma é menor que 0 e a outra é maior "
"que 100."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/In1020.html:2
msgid "In [10;20]"
msgstr "In [10;20]"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/In1020.html:3
msgid ""
"Given 2 int values, return true if either of them is in the range 10..20 "
"inclusive."
msgstr ""
"Dados 2 valores int, retorne true se qualquer um deles estiver no intervalo "
"10..20 inclusive."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/In3050.html:2
msgid "In [30;50]"
msgstr "In [30;50]"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/In3050.html:3
msgid ""
"Given 2 int values, return true if they are both in the range 30..40 "
"inclusive, or they are both in the range 40..50 inclusive."
msgstr ""
"Dados 2 valores int, retorne true se estão ambos no intervalo 30..40 "
"inclusive, ou se eles estão ambos no intervalo 40..50 inclusive."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/LastDigit.html:2
msgid "LastDigit"
msgstr "Último Dígito"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/LastDigit.html:3
msgid ""
"Given two non-negative int values, return true if they have the same last "
"digit, such as with 27 and 57. Note that the % \"mod\" operator computes "
"remainders, so 17 % 10 is 7."
msgstr ""
"Dados dois valores int não negativos, retorne true se têm o mesmo dígito "
"final, como com 27 e 57. Note que o operador % \"mod\" calcula os restos, "
"pois 17 % 10 é 7."

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/LastDigit.html:10
#: src/lessons/welcome/bat/bool2/ShareDigit.html:10
msgid ""
"This exercise was converted to PLM from the excellent exercising site "
"http://javabat.com/"
msgstr ""
"Este exercício foi convertido para o PLM do excelente sítio de exercícios "
"http://javabat.com/"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/LoneTeen.html:2
msgid "Lone Teen"
msgstr "Lone Teen"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/LoneTeen.html:3
msgid ""
"We'll say that a number is \"teen\" if it is in the range 13..19 "
"inclusive. Given 2 int values, return true if one or the other is teen, but "
"not both."
msgstr ""
"Diremos que um número é \"adolescente\" se está no intervalo entre 13..19 "
"inclusive. Dados 2 valores, retorne true se um ou o outro é adolescente, mas "
"não ambos."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Main.html:2
msgid "Boolean fun"
msgstr "Boolean fun"

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/Main.html:4
msgid ""
"Boolean operations are one of the very basic task in programming.  As long "
"as you cannot write a not so simple boolean test under the minute, you "
"probably will have a very bad time writing a real program."
msgstr ""
"Operações booleanas são algumas das mais básicas tarefas na programação. "
"Enquanto não puder escrever um teste booleano não muito simples em menos de "
"um minuto, provavelmente terá dificuldades em escrever programas no mundo "
"real."

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/Main.html:9
msgid ""
"That is why this lesson provides you a bunch of such exercises, so that you "
"can get trained in this."
msgstr ""
"É por isto que esta lição fornece vários exercícios deste tipo, de forma que "
"fique treinado nisto."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Makes10.html:2
msgid "Makes 10"
msgstr "Makes 10"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/Makes10.html:3
msgid ""
"Given 2 ints, a and b, return true if one of them is 10 or if their sum is "
"10."
msgstr ""
"Dados 2 inteiros, a e b, retorne true se um deles é 10 ou se a a soma deles "
"é 10."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Max1020.html:2
msgid "Max1020"
msgstr "Max1020"

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/Max1020.html:3
msgid ""
"Given 2 positive int values, return the larger value that is in the range "
"10..20 inclusive, or return 0 if neither is in that range."
msgstr ""
"Dados 2 valores int positivos, retorne o maior valor que está no intervalo "
"10..20 inclusive, ou retorne 0 se nenhum dos dois estiver neste intervalo."

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/Max1020.html:6
msgid ""
"Note that Math.max(Int,Int):Int and Math.min(Int,Int):Int return the maximum "
"and minimum of two integers"
msgstr ""
"Observe que Math.max(Int,Int):Int e Math.min(Int,Int):Int retornam o máximo "
"e o mínimo de dois inteiros"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/MonkeyTrouble.html:2
msgid "MonkeyTrouble"
msgstr "MonkeyTrouble"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/MonkeyTrouble.html:4
msgid ""
"We have two monkeys, a and b, and the parameters aSmile and bSmile indicate "
"if each is smiling.  We are in trouble if they are both smiling or if "
"neither of them is smiling.  Return true if we are in trouble."
msgstr ""
"Temos dois macacos, a e b, e os parâmetros aSmile e bSmile indicam se cada "
"um está a sorrir. Teremos problemas se os dois estiverem a sorrir ou nenhum "
"deles estiver a sorrir. Retorne true se estivermos com problemas."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/NearHundred.html:2
msgid "Near Hundred"
msgstr "Near Hundred"

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool1/NearHundred.html:3
msgid ""
"Given an int n, return true if it is within 10 of 100 or 200.  "
"[!java|scala]Note that Math.abs(n) returns the absolute value of a "
"number.[/!] [!python]Note that math.fabs(n) returns the absolute value of a "
"number.  This function can only be used if you imported the math module.[/!]"
msgstr ""
"Dado um int n, retorna true se estiver entre 10 a 100 ou 200. [!java|scala]"
"Note que Math.abs(n) retorna o valor absoluto de um número.[/!] [!python]"
"Note que math.fabs(n) retorna o valor absoluto de um número. Esta função só "
"pode ser usada se importar o módulo math.[/!]"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/ParotTrouble.html:2
msgid "Parot Trouble"
msgstr "Parot Trouble"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/ParotTrouble.html:4
msgid ""
"We have a loud talking parrot. The \"hour\" parameter is the current hour "
"time in the range 0..23. We are in trouble if the parrot is talking and the "
"hour is before 7 or after 20. Return true if we are in trouble."
msgstr ""
"Temos um papagaio que fala alto. O parâmetro \"hora\" é a hora atual no "
"intervalo 0..23. Estamos com problemas se o papagaio fala e a hora for antes "
"de 7 ou depois de 20. Retorne true se estivermos com problemas."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/PosNeg.html:2
msgid "Positive Negative"
msgstr "Positivo Negativo"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/PosNeg.html:3
msgid ""
"Given 2 int values, return true if one is negative and one is "
"positive. Unless negative is true, then they both must be negative."
msgstr ""
"Dados 2 valores int, retorne true se um é negativo e o outro é positivo. A "
"menos que o negativo seja true, neste caso ambos devem ser negativos."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/SleepIn.html:2
msgid "SleepDay"
msgstr "SleepDay"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/SleepIn.html:4
msgid ""
"The parameter weekday is true if it is a weekday, and the parameter vacation "
"is true if we are on vacation. We sleep in if it is not a weekday or we're "
"on vacation. Return true if we sleep in."
msgstr ""
"O parâmetro dia da semana é true se estivermos num dia de semana e o "
"parâmetro vacation (férias) é true se estivermos de férias. Dormimos de "
"manhã se não for dia de semana ou se estivermos de férias. Retorne true se "
"dormimos de manhã."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/SumDouble.html:2
msgid "Sum Double"
msgstr "Soma dupla"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool1/SumDouble.html:3
msgid ""
"Given two int values, return their sum. Unless the two values are the same, "
"then return double their sum."
msgstr ""
"Dados dois valores int, retorne a soma deles. A menos que dois valores sejam "
"os mesmos, neste caso retorne o dobro da soma dele."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/AlarmClock.html:2
msgid "AlarmClock"
msgstr "Despertador"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/AlarmClock.html:3
msgid ""
"Given a day of the week encoded as 0=Sun, 1=Mon, 2=Tue, ...6=Sat, and a "
"boolean indicating if we are on vacation, return a string of the form "
"\"7:00\" indicating when the alarm clock should ring. Weekdays, the alarm "
"should be \"7:00\" and on the weekend it should be \"10:00\". Unless we are "
"on vacation -- then on weekdays it should be \"10:00\" and weekends it "
"should be \"off\"."
msgstr ""
"Dado o dia da semana, codificado da seguinte forma: 0=Domingo, 1=Segunda, "
"2=Terça, ... 6=Sábado e um booleano férias a indicar se estamos de férias, "
"retorne uma cadeia de caracteres da forma \"7:00\" que indica a que horas "
"devemos tocar o despertador. Nos dias da semana, devemos acordar às 7h e nos "
"finais de semana às 10h. Durante as férias, devemos acordar às 10h e nos "
"finais de semana desligar o despertador."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/AnswerCell.html:2
msgid "AnswerCell"
msgstr "secretária eletrônica"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/AnswerCell.html:3
msgid ""
"Your cell phone rings. Return true if you should answer it. Normally you "
"answer, except in the morning you only answer if it is your mom calling. In "
"all cases, if you are asleep, you do not answer."
msgstr ""
"O seu telemóvel toca. Retorne true se deve atender. Normalmente responde, "
"exceto de manhã, quando só a sua mãe lhe liga. De qualquer forma, se estiver "
"a dormir, não responde."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/BlueTicket.html:2
msgid "BlueTicket"
msgstr "bilhete azul"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/BlueTicket.html:3
msgid ""
"You have a blue lottery ticket, with ints a, b, and c on it. This makes "
"three pairs, which we'll call ab, bc, and ac. Consider the sum of the "
"numbers in each pair. If any pair sums to exactly 10, the result is 10.  "
"Otherwise if the ab sum is exactly 10 more than either bc or ac sums, the "
"result is 5. Otherwise the result is 0."
msgstr ""
"Tem um bilhete de loteria azul, com os inteiros a, b e c. Eles fazem três "
"pares que chamaremos de ab, bc e ac. Considere a soma dos números de cada "
"par. Se a soma de um dos pares vale exatamente 10, o resultado é 10. Senão, "
"se a soma ab vale exatamente 10 mais que bc ou ac, o resultado é 5. Senão, o "
"resultado é 0."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/CaughtSpeeding.html:2
msgid "CaughtSpeeding"
msgstr "Radar de velocidade"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/CaughtSpeeding.html:3
msgid ""
"You are driving a little too fast, and a police officer stops you. Write "
"code to compute the result, encoded as an int value: 0=no ticket, 1=small "
"ticket, 2=big ticket. If speed is 60 or less, the result is 0. If speed is "
"between 61 and 80 inclusive, the result is 1. If speed is 81 or more, the "
"result is 2. Unless it is your birthday -- on that day, your speed can be 5 "
"higher in all cases."
msgstr ""
"Está a conduzir um pouco rápido demais e um guarda o para. Escreva o código "
"para calcular o resultado, codificado na forma de um inteiro: 0=sem multa, "
"1=multa leve, 2=multa pesada. Se a velocidade é inferior a 60, o resultado é "
"0. Se a velocidade está entre 61 e 80 (inclusive), o resultado é 1. Se a "
"velocidade é 81 ou maior, o resultado é 2. Estes casos são para dias que não "
"são o seu aniversário. No seu dia de aniversário a sua velocidade pode ser 5 "
"maior em todos os casos."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/CigarParty.html:2
msgid "CigarParty"
msgstr "Festa dos charutos"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/CigarParty.html:3
msgid ""
"When squirrels get together for a party, they like to have cigars. A "
"squirrel party is successful when the number of cigars is between 40 and 60, "
"inclusive. Unless it is the weekend, in which case there is no upper bound "
"on the number of cigars. Return true if the party was successful."
msgstr ""
"Quando os esquilos fazem uma festa, eles gostam de ter charutos. Uma festa "
"de esquilos é boa quando a quantidade de charutos está entre 40 e 60 "
"(inclusive). A menos que seja finais de semana, onde não há limite superior "
"para a quantidade de charutos. Retorne true se a festa foi um sucesso."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/DateFashion.html:2
msgid "DateFashion"
msgstr "Encontro elegante"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/DateFashion.html:3
msgid ""
"You and your date are trying to get a table at a restaurant. The parameter "
"\"you\" is the stylishness of your clothes, in the range 0..10, and \"date\" "
"is the stylishness of your date's clothes. The result getting the table is "
"encoded as an int value with 0=no, 1=maybe, 2=yes. If either of you is very "
"stylish, 8 or more, then the result is 2 (yes). With the exception that if "
"either of you has style of 2 or less, then the result is 0 (no). Otherwise "
"the result is 1 (maybe)."
msgstr ""
"Você e o seu par estão a tentar conseguir uma mesa no restaurante. O "
"parâmetro \"you\" (você) é o nível de elegância das suas roupas, no "
"intervalo 0..10 e \"date\" (par) é o nível de elegância do seu par. O "
"resultado da tentativa de obter uma mesa é codificado como um valor inteiro "
"com 0=no (não), 1=maybe (talvez), 2=yes (sim). Se um de vocês está muito "
"elegante, 8 ou mais, o resultado é 2 (yes). Com uma exceção: se um dos dois "
"tem um estilo de 2 ou menos o resultado é 0 (no). Caso contrário o resultado "
"é 1 (maybe)."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/FizzBuzz.html:2
msgid "Fizz Buzz"
msgstr "Fizz Buzz"

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool2/FizzBuzz.html:3
msgid ""
"According to Wikipedia, Fizz buzz is a group word game for children to teach "
"them about division.  Players take turns to count incrementally, replacing "
"any number divisible by three with the word \"Fizz\", and any number "
"divisible by five with the word \"Buzz\". Any number that is divisible by "
"both three and five is replaced with the string \"Fizz Buzz\"."
msgstr ""
"De acordo com a Wikipedia, Fizz buzz é um jogo de \"group word\" para "
"crianças para ensinar divisão.  Os jogadores jogam em turnos numéricos que "
"vão a aumentar, a substituir qualquer número divisível por três com a "
"palavra \"Fizz\" e qualquer número divisível por cinco com a palavra \"Buzz\""
". Qualquer número que é divisível tanto por 3 quanto por 5 é substituído "
"pela cadeia \"Fizz Buzz\"."

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool2/FizzBuzz.html:8
msgid ""
"Unchanged numbers are simply returned as a string.  [!java|scala]The easiest "
"for that is to use that [!thelang] idiomatic: <code>\"\"+a</code>[/!] "
"[!python]The function <code>str(a)</code> changes an integer <code>a</code> "
"into a string.[/!]"
msgstr ""
"números que não são substituídos são simplesmente retornados como uma "
"cadeia  [!java|scala]O eito mais fácil é usar esta construção em [!thelang]: "
"<code>\"\"+a</code>[/!] [!python]A função <code>str(a)</code> transforma um "
"inteiro <code>a</code> numa cadeia.[/!]"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/GreenTicket.html:2
msgid "GreenTicket"
msgstr "bilhete verde"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/GreenTicket.html:3
msgid ""
"You have a green lottery ticket, with ints a, b, and c on it. If the numbers "
"are all different from each other, the result is 0. If all of the numbers "
"are the same, the result is 20. If two of the numbers are the same, the "
"result is 10."
msgstr ""
"Tem um bilhete de loteria verde, com os inteiros a, b e c inscritos nele. Se "
"os números são todos diferentes uns dos outros, o resultado é 0. Se todos os "
"números são idênticos, o resultado é 20. Se dois dos números são os mesmos, "
"o resultado é 10."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/In1To10.html:2
msgid "In1To10"
msgstr "De 1 a 10"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/In1To10.html:3
msgid ""
"Given a number n, return true if n is in the range 1..10, inclusive. Unless "
"\"outsideMode\" is true, in which case return true if the number is less or "
"equal to 1, or greater or equal to 10."
msgstr ""
"Seja um número n, retorne true se n está no intervalo [1..10]. Exceto se "
"\"outsideMode\" é true e neste caso retorne true se o número é menor ou "
"igual a 1, ou maior ou igual a 10."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/InOrderEqual.html:2
msgid "InOrderEqual"
msgstr "Em ordem crescente"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/InOrderEqual.html:3
msgid ""
"Given three ints, a b c, return true if they are in strict increasing order, "
"such as 2 5 11, or 5 6 7, but not 6 5 7 or 5 5 7. However, with the "
"exception that if \"equalOk\" is true, equality is allowed, such as 5 5 7 or "
"5 5 5."
msgstr ""
"Dados três inteiros, a b c, retorne true se estão em ordem estritamente "
"crescente, como 2 5 11, ou 5 6 7, mas não 6 5 7 ou 5 5 7. Entretanto, com a "
"exceção de se \"equalOk\" for true, igualdade é permitida, como 5 5 7 ou 5 5 "
"5."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/InOrder.html:2
msgid "InOrder"
msgstr "Na ordem"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/InOrder.html:3
msgid ""
"Given three ints, a b c, return true if b is greater than a, and c is "
"greater than b. However, with the exception that if \"bOk\" is true, b does "
"not need to be greater than a."
msgstr ""
"Dados três inteiros, a b c, retorne true se b é maior que a, e c é maior que "
"b. Entretanto, com a exceção que se \"bOk\" é true, b não precisa ser maior "
"que a."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/LastDigit2.html:2
msgid "LastDigit 2"
msgstr "Último dígito 2"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/LastDigit2.html:3
msgid ""
"Given three ints, a b c, return true if two or more of them have the same "
"rightmost digit. The ints are non-negative. Note: the % \"mod\" operator "
"computes the remainder, e.g. 17 % 10 is 7."
msgstr ""
"Dados três inteiros, a b c, retorne true se dois ou mais deles têm o mesmo "
"último dígito. Os inteiros são não negativos. Nota: o operador % \"mod\" "
"calcula o resto, p.ex. 17 % 10 é 7."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/LessBy10.html:2
msgid "LessBy10"
msgstr "Menor por 10"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/LessBy10.html:3
msgid ""
"Given three ints, a b c, return true if one of them is 10 or more less than "
"one of the others."
msgstr ""
"Dados três inteiros, a b c, retorne true se um deles é 10 ou menor que um "
"dos outros."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/Main.html:2
msgid "Boolean (even more) fun"
msgstr "(mais) diversão com booleanos"

#. type: Content of: <p>
#: src/lessons/welcome/bat/bool2/Main.html:4
msgid ""
"A very good introduction to this type is available here: "
"http://codingbat.com/doc/java-if-boolean-logic.html"
msgstr ""
"Uma ótima introdução a este tipo está disponível em: http://codingbat.com/"
"doc/java-if-boolean-logic.html"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/MaxMod5.html:2
msgid "MaxMod5"
msgstr "MaxMod5"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/MaxMod5.html:3
msgid ""
"Given two int values, return whichever value is larger. However if the two "
"values have the same remainder when divided by 5, then the return the "
"smaller value. However, in all cases, if the two values are the same, return "
"0.  Note: the % \"mod\" operator computes the remainder, e.g. 7 % 5 is 2."
msgstr ""
"Sejam dois valores inteiros, retorne o maior dos dois. Entretanto, se os "
"dois valores possuem o mesmo resto quando divididos por 5, retorne o menor "
"dos dois. Entretanto, em todo caso, se os dois valores forem iguais, retorne "
"0. Nota: o operador % \"mod\" calcula o resto, p.ex. 7 % 5 é 2."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/NearTen.html:2
msgid "NearTen"
msgstr "Próximo de dez"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/NearTen.html:3
msgid ""
"Given a non-negative number \"num\", return true if num is within 2 of a "
"multiple of 10. Note: (a % b) is the remainder of dividing a by b, so (7 % "
"5) is 2."
msgstr ""
"Dado um inteiro positivo \"num\", retorne true se num estiver dentro de 2 de "
"um múltiplo de 10. Nota: ( a % b ) é o resto da divisão de a por b, assim (7 "
"% 5) é 2."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/RedTicket.html:2
msgid "RedTicket"
msgstr "Bilhete vermelho"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/RedTicket.html:3
msgid ""
"You have a red lottery ticket showing ints a, b, and c, each of which is 0, "
"1, or 2. If they are all the value 2, the result is 10. Otherwise if they "
"are all the same, the result is 5. Otherwise so long as both b and c are "
"different from a, the result is 1. Otherwise the result is 0."
msgstr ""
"Tem um bilhete de loteria vermelho com três inteiros a, b e c. Cada um com o "
"valor 0, 1, ou 2. Se todos têm o valor 2, o resultado é 10. Senão, se eles "
"são iguais, o resultado é 5. Senão, e se b e c são diferentes de a, o "
"resultado é 1. Senão, o resultado é 0."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/ShareDigit.html:2
msgid "ShareDigit"
msgstr "dígitos compartilhados"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/ShareDigit.html:3
msgid ""
"Given two ints, each in the range 10..99, return true if there is a digit "
"that appears in both numbers, such as the 2 in 12 and 23. (Note: division, "
"e.g. n/10, gives the left digit while the % \"mod\" n%10 gives the right "
"digit.)"
msgstr ""
"Dados dois inteiros, cada um no intervalo 10..99, retorne true se existe um "
"dígito que aparece nos dois números, como 2 em 12 e 23. (Nota: divisão, "
"p.ex. n/10, retorna o dígito à esquerda e % \"mod\" n%10 retorna o dígito a "
"direita.)"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/SortaSum.html:2
msgid "SortaSum"
msgstr "Soma de inteiros"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/SortaSum.html:3
msgid ""
"Given 2 ints, a and b, return their sum. However, sums in the range 10..19 "
"inclusive, are forbidden, so in that case just return 20."
msgstr ""
"Dados 2 inteiros, a e b, retorne a soma deles. Entretanto, somas no "
"intervalo 10..19 inclusive, são proibidas. Neste caso, simplesmente retorne "
"20."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/SquirrelPlay.html:2
msgid "SquirrelPlay"
msgstr "Jogo do Esquilo"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/SquirrelPlay.html:3
msgid ""
"The squirrels in Palo Alto spend most of the day playing. In particular, "
"they play if the temperature is between 60 and 90 (inclusive). Unless it is "
"summer, then the upper limit is 100 instead of 90. Given an int temperature "
"and a boolean isSummer, return true if the squirrels play and false "
"otherwise."
msgstr ""
"Os esquilos em Palo Alto passam a maior parte do dia a jogar. Em particular, "
"eles jogam se a temperatura está entre 60 e 90 °F (inclusive). A menos que "
"seja verão e neste caso o limite superior é de 100 ao invés de 90. Seja uma "
"temperatura inteira e um isSummer (éVerão) booleano. Retorne true se eles "
"jogam e false caso contrário."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/TeaParty.html:2
msgid "TeaParty"
msgstr "Festa do chá"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/TeaParty.html:3
msgid ""
"We are having a party with amounts of tea and candy. Return the int outcome "
"of the party encoded as 0=bad, 1=good, or 2=great. A party is good (1) if "
"both tea and candy are at least 5. However, if either tea or candy is at "
"least double the amount of the other one, the party is great (2).  However, "
"in all cases, if either tea or candy is less than 5, the party is always bad "
"(0)."
msgstr ""
"Estamos a ter uma festa com chá e doces. Retorne o resultado inteiro da "
"festa codificado como 0=ruim, 1=bom, ou 2=excelente. Uma festa é boa (1) se "
"o chá e os doces são pelo menos 5. Entretanto, se tanto os doces como o chá "
"forem pelo menos o dobro do outro, a festa é excelente (2). Entretanto, em "
"todo caso, se tanto o chá quanto os doces forem menos que 5, a festa é "
"sempre ruim (0)."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/TeenSum.html:2
msgid "TeenSum"
msgstr "Soma de adolescentes"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/TeenSum.html:3
msgid ""
"Given 2 ints, a and b, return their sum. However, \"teen\" values in the "
"range 13..19 inclusive, are extra lucky. So if either value is a teen, just "
"return 19."
msgstr ""
"Dados dois números inteiros (a e b), retorne a soma deles. Entretanto, os "
"valores adolescentes no intervalo 13..19 são particularmente sortudos. "
"Portanto, se um dos números for um adolescente, retorne simplesmente 19."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/TwoAsOne.html:2
msgid "TwoAsOne"
msgstr "Dois como um"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/TwoAsOne.html:3
msgid ""
"Given three ints, a b c, return true if it is possible to add two of the "
"ints to get the third."
msgstr ""
"Dados três inteiros a, b e c, retorne true se é possível adicionar dois "
"deles e o resultado ser o terceiro."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/WithoutDoubles.html:2
msgid "WithoutDoubles"
msgstr "Sem dobros"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bat/bool2/WithoutDoubles.html:3
msgid ""
"Return the sum of two 6-sided dice rolls, each in the range 1..6. However, "
"if noDoubles is true, if the two dice show the same value, increment one die "
"to the next value, wrapping around to 1 if its value was 6."
msgstr ""
"Retorne a soma das rolagens de dois dados de 6 lados. Entretanto, se "
"noDoubles é true e os dois dados derem o mesmo valor, incremente um dos "
"dados para o valor seguinte, e volte a 1 se o valor for 6."

#. type: Content of: <h1>
#: src/lessons/bat/string1/Main.html:2
msgid "String fun"
msgstr "Diversão com cadeias"

#. type: Content of: <p>
#: src/lessons/bat/string1/Main.html:4
msgid ""
"Strings are the simplest of the complex data types :) They provide several "
"operations, such as getting the length of the string, or a substring of it."
msgstr ""
"Cadeias são os mais simples dos tipos de dados complexos :) Elas fornecem "
"diferentes operações, como obter o tamanho da cadeia ou uma sub-cadeia."

#. type: Content of: <p>
#: src/lessons/bat/string1/Main.html:8
msgid ""
"A very good introduction to this type is available here: "
"http://codingbat.com/doc/java-string-introduction.html"
msgstr ""
"Uma introdução muito boa a este tipo encontra-se em: http://codingbat.com/"
"doc/java-string-introduction.html"

#. type: Content of: <h3>
#: src/lessons/bat/string1/short_desc.html:2
msgid "Small exercises about strings"
msgstr "Pequenos exercícios com cadeias"

#. type: Content of: <p>
#: src/lessons/bat/string1/short_desc.html:4
msgid ""
"These are some training exercises around strings. But unfortunately, its "
"integration within PLM is still ongoing."
msgstr ""
"Aqui estão alguns exercícios sobre cadeias. Mas infelizmente, a integração "
"dele no PLM ainda está a ser construída."

#. type: Content of: <p>
#: src/lessons/bat/string1/short_desc.html:7
msgid "Please be patient with us."
msgstr "Por favor seja paciente conosco."

#. type: Content of: <h1>
#: src/lessons/bat/string1/AltPairs.html:2
msgid "AltPairs"
msgstr "Pares alternados"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/AltPairs.html:3
msgid ""
"Given a string, return a string made of the chars at indexes 0,1, 4,5, 8,9 "
"... so \"kittens\" yields \"kien\"."
msgstr ""
"Dada uma cadeia, retorne outra cadeia feita com os caracteres de índices "
"0,1, 4,5, 8,9 ... por exemplo \"kittens\" retorna \"kien\"."

#. type: Content of: <h1>
#: src/lessons/bat/string1/FrontTimes.html:2
msgid "FrontTimes"
msgstr "FrontTimes"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/FrontTimes.html:3
msgid ""
"Given a string and a non-negative int n, we'll say that the front of the "
"string is the first 3 chars, or whatever is there if the string is less than "
"length 3. Return n copies of the front;"
msgstr ""
"Seja uma cadeia e um inteiro n. Definiremos o começo de uma cadeia como os "
"três primeiros caracteres dela, ou toda se o comprimento dela é menor que 3. "
"Retorne n cópias do começo de uma cadeia;"

#. type: Content of: <h1>
#: src/lessons/bat/string1/Last2.html:2
msgid "Last2"
msgstr "Último2"

#. type: Content of: <p>
#: src/lessons/bat/string1/Last2.html:4
msgid ""
"Given a string, return the amount of times that the two last letters appear "
"as a substring of the string. So \"hixxxhi\" yields 1 (we won't count the "
"end substring) while \"aaaNaa\" yields 2 (substrings may overlap)."
msgstr ""
"Dada uma cadeia retorne a quantidade de vezes que os dois últimos dígitos "
"aparecem como uma sub-cadeia. Assim, \"hixxxhi\" retorna 1 (não contamos a "
"última sub-cadeia) enquanto \"aaaNaa\" retorna 2 (as ocorrências podem "
"sobrepor-se parcialmente)."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringBits.html:2
msgid "StringBits"
msgstr "StringBits"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/StringBits.html:3
msgid ""
"Given a string, return a new string made of every other char starting with "
"the first, so \"Hello\" yields \"Hlo\"."
msgstr ""
"Dada uma cadeia, retorne uma nova cadeia formada a escolher um caractere "
"sim, outro não, a começar com o primeiro. Assim, \"Primeiro\" torna-se \"Pier"
"\"."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringMatch.html:2
msgid "StringMatch"
msgstr "Comparação de cadeia"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/StringMatch.html:3
msgid ""
"Given 2 strings, a and b, return the number of the positions where they "
"contain the same length 2 substring. So \"xxcaazz\" and \"xxbaaz\" yields 3, "
"since the \"xx\", \"aa\", and \"az\" substrings appear in the same place in "
"both strings."
msgstr ""
"Sejam duas cadeia a e b, retorne a quantidade de posições onde elas contêm a "
"mesma subcadeia de tamanho 2. Assim, \"xxcaazz\" e \"xxbaaz\" retornam 3, "
"pois as subcadeias \"xx\", \"aa\" e \"az\" aparecem nas mesmas posições nas "
"duas cadeias."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringSplosion.html:2
msgid "StringSplosion"
msgstr "Explosão de cadeias"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/StringSplosion.html:3
msgid "Given a non-empty string like \"Code\" return a string like \"CCoCodCode\"."
msgstr ""
"Dada uma cadeia não vazia como \"Code\" retorna uma cadeia como \"CCoCodCode"
"\"."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringTimes.html:2
msgid "StringTimes"
msgstr "Multiplicação de cadeias"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/StringTimes.html:3
msgid ""
"Given a string and a non-negative int n, return a larger string that is n "
"copies of the original string."
msgstr ""
"Dada uma cadeia e um inteiro positivo retorna uma cadeia mais comprida que "
"consiste em n cópias da cadeia original."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringX.html:2
msgid "StringX"
msgstr "StringX"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/StringX.html:3
msgid ""
"Given a string, return a version where all the \"x\" have been "
"removed. Except an \"x\" at the very start or end should not be removed."
msgstr ""
"Dada uma cadeia, retorne uma versão onde todos os \"x\" são removidos. "
"Exceto os \"x\" no começo e no final que devem permanecer."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringYak.html:2
msgid "StringYak"
msgstr "StringYak"

#. type: Content of: outside any tag (error?)
#: src/lessons/bat/string1/StringYak.html:3
msgid ""
"Suppose the string \"yak\" is unlucky. Given a string, return a version "
"where all the \"yak\" are removed, but the \"a\" can be any char. The "
"\"yak\" strings will not overlap."
msgstr ""
"A string \"yak\" não tem sorte. Dada uma cadeia, retorna uma versão onde "
"todas as \"yak\" são removidas (qualquer que seja o caractere no lugar do "
"'a'). As diferentes cadeias \"yak\" não se sobrepõem."

#. type: Content of: <h2>
#: src/lessons/lander/Main.html:2 src/lessons/lander/short_desc.html:2
#: src/lessons/lander/universe/DelegatingLanderWorld.html:2
msgid "Lunar Lander"
msgstr "Módulo lunar"

#. type: Content of: <p>
#: src/lessons/lander/Main.html:4 src/lessons/lander/short_desc.html:4
msgid ""
"In this lesson you pilot a lunar landing module in increasingly complex "
"situations."
msgstr ""
"Nesta lição vai pilotar um módulo lunar em situações de complexidade "
"crescente."

#. type: Content of: <p>
#: src/lessons/lander/Main.html:7
msgid ""
"At each step of the simulation, the player issues a command controlling how "
"much the angle and thrust of the lander should change"
msgstr ""
"A cada passo da simulação, o jogador envia um comando a controlar quanto o "
"ângulo e a potência do módulo devem mudar"

#. type: Content of: <p>
#: src/lessons/lander/Main.html:10
msgid "Ideas concerning the progression of exercises:"
msgstr "Ideias a respeito da progressão dos exercícios:"

#. type: Content of: <ul><li>
#: src/lessons/lander/Main.html:12
msgid ""
"A lander in vertical position above flat ground, the player can only control "
"thrust (done)"
msgstr ""
"Um módulo em posição vertical sobre solo plano, o jogador só controla a "
"potência (feito)"

#. type: Content of: <ul><li>
#: src/lessons/lander/Main.html:14
msgid ""
"A lander in vertical position not above flat ground, the player control "
"thrust and angle (done)"
msgstr ""
"Um módulo em posição vertical sobre solo inclinado, o jogador controla "
"potência e ângulo (feito)"

#. type: Content of: <ul><li>
#: src/lessons/lander/Main.html:16
msgid ""
"A lander with difficult angle and speed not above flat ground, the player "
"control thrust and angle"
msgstr ""
"Um módulo com ângulo ruim e rápido sobre solo inclinado, o jogador controla "
"potência e ângulo"

#. type: Content of: <ul><li>
#: src/lessons/lander/Main.html:18
msgid ""
"A lander with difficult angle and speed not above flat ground, with "
"difficult ground, the player control thrust and angle"
msgstr ""
"Um módulo com ângulo difícil e rápido sobre superfície inclinada, com solo "
"difícil, o jogador controla potência e ângulo"

#. type: Content of: <ul><li>
#: src/lessons/lander/Main.html:20
msgid "Same with wind?"
msgstr "O mesmo com vento?"

#. type: Content of: <p>
#: src/lessons/lander/short_desc.html:7
msgid "This lesson assumes some basic programming and physics skills."
msgstr "Esta lição assume algum conhecimento de física e programação básica."

#. type: Content of: <p>
#: src/lessons/lander/universe/DelegatingLanderWorld.html:4
msgid ""
"In this universe you pilot a lunar lander. At each simulation step you're "
"given the lander's position, speed, angle and thrust and must issue a "
"command adjusting its angle and thrust."
msgstr ""
"Pilota um módulo lunar neste universo. A cada passo da simulação recebe a "
"posição, velocidade, ângulo e potência do módulo e deve enviar um comando a "
"ajustar o ângulo e a potência."

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:12
msgid "Get the X and Y position of the lander."
msgstr "Obter (Get) as posições X e Y do módulo."

#. type: Content of: <pre>
#: src/lessons/lander/universe/DelegatingLanderWorld.html:13
#, no-wrap
msgid ""
"[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
"[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"
msgstr ""
"[!java|c]double [/!]getSpeedX()[!scala]:Double[/!]\n"
"[!java|c]double [/!]getSpeedY()[!scala]:Double[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:15
msgid "Get the horizontal and vertical speed of the lander."
msgstr "Obter a velocidade horizontal e vertical do módulo."

#. type: Content of: <pre>
#: src/lessons/lander/universe/DelegatingLanderWorld.html:17
#, no-wrap
msgid ""
"[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
"[!java|c]void [/!]setDesiredAngle([!java|c]double "
"[/!]desiredAngle[!scala]:Double[/!])"
msgstr ""
"[!java|c]double [/!]getAngle()[!scala]:Double[/!]\n"
"[!java|c]void [/!]setDesiredAngle([!java|c]double "
"[/!]desiredAngle[!scala]:Double[/!])"

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:19
msgid "Get or set the angle of the lander."
msgstr "Obter ou ajustar o ângulo do módulo."

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:20
msgid ""
"An angle of 0° denotes a vertical position where the \"head\" of the lander "
"points up.  This is the angle you must land with. A positive angle denotes a "
"left-leaning lander, a negative angle a right-leaning one. You cannot lean "
"more than by ±90°, and the angle can vary by at most ±5° in one step."
msgstr ""
"Um ângulo de 0° denota uma posição vertical onde a \"cabeça\" do módulo "
"aponta para cima. É o ângulo com que deve pousar. Um ângulo positivo denota "
"a inclinação para a esquerda, um ângulo negativo denota inclinação para a "
"direita. Não pode inclinar mais que ±90° e o ângulo pode sofrer uma variação "
"de no máximo ±5° a cada passo."

#. type: Content of: <pre>
#: src/lessons/lander/universe/DelegatingLanderWorld.html:25
#, no-wrap
msgid ""
"[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
"[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"
msgstr ""
"[!java|c]int [/!]getThrust()[!scala]:Int[/!]\n"
"[!java|c]void [/!]setDesiredThrust([!java|c]int [/!]thrust[!scala]:Int[/!])"

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
msgid "Get or set the thrust of the lander."
msgstr "Obter ou ajustar a potência do módulo."

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:27
msgid ""
"You can only increment or decrement the thrust by 1 between two simulation "
"steps, so if the current thrust is 2 and you ask for 4, you'll only get 3 in "
"the next step. If you ask for less than 0 (resp. more than 4), everything "
"will be as if you had asked for 0 (resp. 4)."
msgstr ""
"Só pode aumentar ou diminuir a potência de 1 a cada passo. pois se a "
"potência atual é 2 e pede 4, ela vai mudar para 3 no próximo passo. Se pedir "
"menos que 0 (ou, respetivamente, mais que 4), vai ser como se tivesse pedido "
"0 (ou, respetivamente, 4)."

#. type: Content of: <pre>
#: src/lessons/lander/universe/DelegatingLanderWorld.html:33
#, no-wrap
msgid "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"
msgstr "[!java|c]int [/!]getFuel()[!scala]:Int[/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:34
msgid ""
"Get the remaining fuel in the lander.  At each step of the simulation the "
"lander consumes as many fuel units as the current thrust. Once you run out "
"of fuel you're in free fall so beware!"
msgstr ""
"Obter o combustível restante no módulo.  A cada passo da simulação o módulo "
"consome tantas unidades de combustível como a potência atual. Uma vez que "
"fique sem combustível entra em queda livre. Portanto, cuidado!"

#. type: Content of: <pre>
#: src/lessons/lander/universe/DelegatingLanderWorld.html:38
#, no-wrap
msgid "[!java]List&lt;Point&gt; [/!]getGround() [!scala]:List[Point][/!]"
msgstr "[!java]List&lt;Point&gt; [/!]getGround() [!scala]:List[Point][/!]"

#. type: Content of: outside any tag (error?)
#: src/lessons/lander/universe/DelegatingLanderWorld.html:39
msgid ""
"Get the vertices of the ground's profile from left to right.  "
"[!java|scala]You can retrieve the X and Y coordinates of each point with the "
"corresponding methods of your point: <code>p.x()</code> and "
"<code>p.y()</code>.[/!] [!python]Each point is an array of two integers "
"denoting respectively the X and Y coordinates of that point.[/!]"
msgstr ""
"Obter os vértices do perfil do solo da esquerda para a direita.  "
"[!java|scala]Pode recuperar as coordenadas X e Y de cada ponto com os "
"métodos correspondentes do seu ponto: <code>p.x()</code> e <code>p."
"y()</code>.[/!] [!python]Cada ponto é uma array de dois inteiros a denotar "
"respetivamente as coordenadas X e Y de cada ponto.[/!]"

#. type: Content of: <h1>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:2
msgid "Lander 101"
msgstr "Lander 101"

#. type: Content of: <p>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:4
msgid ""
"Congratulations! You won a (one-way) trip to Mars in a cereal box. NASA was "
"kind enough to donate the Lunar Excursion Module for this mission, so that's "
"what you'll be flying."
msgstr ""
"Parabéns! Ganhou uma viagem (só de ida) para Marte numa caixa de cereais. A "
"NASA é orgulhosa em doar o módulo da excursão lunar para esta missão e é o "
"que vai pilotar."

#. type: Content of: <p>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:8
msgid ""
"Before you take off, you must go through some basic landing simulation. You "
"shouldn't have to fly the lander if all goes as planned but, as they say, "
"\"better safe than sorry\"."
msgstr ""
"Antes de pousar, vai realizar algumas simulações de pouso. Não tem que "
"pilotar o módulo se tudo for como planeado, mas, como dizem, \"é melhor "
"prevenir que remediar\"."

#. type: Content of: <p>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:12
msgid ""
"Your mission is to <b>land the lander with a vertical speed of at most 10 "
"m/s.</b> There are two ways you can influence the lander's course: by "
"adjusting its angle or by adjusting its thrust. In this simulation we only "
"care about adjusting the thrust, expressed in m/s²."
msgstr ""
"A sua missão é <b>pousar o módulo com a velocidade vertical máxima de 10 m/"
"s.</b> Existem duas formas de influenciar o curso do módulo: a ajustar o "
"ângulo dele ou a ajustar a potência dele. Nesta simulação vamos nos "
"preocupar apenas a ajustar a potência, expressa em m/s²."

#. type: Content of: <p>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:17
msgid ""
"The [!python]<code>step()</code> function[/!][!scala|java|c]code[/!] that "
"you should write now will be called every 0.1 second during the "
"simulation. Make sure that your code does not last too long, with no while "
"loop! It should only set the desired thrust of the next simulation step, by "
"calling <code>[!java]void [/!]setDesiredThrust([!java]int "
"[/!]desiredThrust[!scala]:Integer[/!])</code> where "
"<code>desiredThrust</code> is some integer between 0 and 4 (that is, a "
"thrust between 0 m/s² and 4 m/s²). You can only increment or decrement the "
"thrust by 1 between two simulation steps, so if the current thrust is 2 and "
"you ask for 4, you'll only get 3 in the next step. If you ask for less than "
"0 (resp. more than 4), everything will be as if you had asked for 0 "
"(resp. 4)."
msgstr ""
"[!scala|java|c]O código[/!] [!python] da função <code>step()</code> [/!], "
"que vai escrever, agora vai ser chamada a cada 0,1 segundos durante a "
"simulação. Certifique-se que o seu código não demora muito para executar, "
"sem usar o loop while! Apenas deve ajustar a potência desejada para o "
"próximo passo da simulação, a chamar <code>[!java]void "
"[/!]setDesiredThrust([!java]int [/!]desiredThrust[!scala]:Integer[/!])</"
"code> onde <code>desiredThrust</code> é algum inteiro entre 0 e 4 (ou seja, "
"uma potência entre 0 m/s² e 4 m/s²). Só pode aumentar ou diminuir a potência "
"por 1 entre dois passos da simulação. Portanto, se a potência atual é 2 e "
"pede 4, vai conseguir apenas 3 no próximo passo. Se pede por menos que 0 ("
"ou, respetivamente, mais que 4), vai ser como se tivesse pedido 0 (ou, "
"respetivamente, 4)."

#. type: Content of: <p>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:28
msgid ""
"In order to take informed decisions, you can query the lander's state. In "
"this simulation you'll probably be interested in its vertical position: "
"<code>[!java]double [/!]getY()[!scala]:Double[/!]</code>, and its vertical "
"speed: <code>[!java]double [/!]getSpeedY()[!scala]:Double[/!]</code>. You "
"can also ask for the thrust via <code>[!java]int "
"[/!]getThrust()[!scala]:Integer[/!]</code> in case you don't remember what "
"you asked for. Remember that Mars' gravity is 3.711 m/s², it might come in "
"handy."
msgstr ""
"Para tomar decisões informadas, pode consultar o estado do módulo. Nesta "
"simulação provavelmente vai estar interessado na posição vertical: "
"<code>[!java]double [/!]getY()[!scala]:Double[/!]</code> e na velocidade "
"vertical: <code>[!java]double [/!]getSpeedY()[!scala]:Double[/!]</code>. "
"Também pode pedir a potência com <code>[!java]int "
"[/!]getThrust()[!scala]:Integer[/!]</code> caso não se lembre o que pediu. "
"Lembre-se que a gravidade de Marte é 3,711 m/s². Isto pode ser útil."

#. type: Content of: <p>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:36
msgid ""
"One last thing: the lander is pretty small so you don't have much fuel. At "
"each step of the simulation the lander consumes as many fuel units as the "
"current thrust. Once you run out of fuel you're in free fall so beware! You "
"can consult the remaining amount of available fuel units using "
"<code>[!java]int [/!]getFuel()[!scala]:Integer[/!]</code>."
msgstr ""
"Uma última coisa: o módulo é bem pequeno, logo não tem muito combustível. Em "
"cada passo da simulação o módulo consome tantas unidades de combustível "
"quanto a potência atual. Uma vez que fique sem combustível vai cair em queda "
"livre, portanto cuidado! Pode consultar a quantidade de unidades de "
"combustível restante a usar <code>[!java]int "
"[/!]getFuel()[!scala]:Integer[/!]</code>."

#. type: Content of: <h2>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:2
msgid "Locate a Landing Zone"
msgstr "Localizar uma área de pouso"

#. type: Content of: <p>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:4
msgid ""
"After 200 days of traveling space and eating cereals you finally reach "
"Mars. Time to land at last!"
msgstr ""
"Depois de 200 dias a viajar no espaço e a comer cereais finalmente chegou ao "
"Marte. Hora de pousar, finalmente!"

#. type: Content of: <p>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:7
msgid ""
"The lander is on autopilot and all you have to do is look around and tell it "
"where to land. The lander must <b>land on a flat zone</b> if you want to "
"remain in one piece. You indicate the lander where to land by modifying the "
"<code>getLandingZone</code> function so that it returns a "
"[!java|scala]<code>Segment</code> representing the zone of your choice."
msgstr ""
"O módulo está no piloto-automático e tudo que tem que fazer é dar uma olhada "
"e dizer ao módulo onde pousar. O módulo deve <b>pousar numa área plana</b> "
"se quiser ficar inteiro. Indica ao módulo onde pousar a modificar a função "
"<code>getLandingZone</code> de forma que retorne um "
"[!java|scala]<code>Segment</code> a representar a área da sua escolha."

#. type: Content of: <p><p>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:13
msgid ""
"A segment is composed of two <code>Point</code>s, each of them composed of "
"two <code>double</code>s. A segment is built via the "
"<code>Segment([!java]Point [/!]start[!scala]:Point[/!], [!java]Point "
"[/!]end[!scala]:Point[/!])</code> constructor.  A point is built via the "
"<code>Point([!java]double [/!]x[!scala]:Double[/!], [!java]double "
"[/!]y[!scala]:Double[/!])</code> constructor. A point's coordinates are "
"accessible via its <code>[!java]double [/!]x()[!scala]:Double[/!]</code> and "
"<code>[!java]double [/!]y()[!scala]:Double[/!]</code> methods."
msgstr ""
"Um segmento é composto de dois <code>Ponto</code>s, cada um deles composto "
"de dois <code>double</code>s. Um segmento é construído com o construtor "
"<code>Segment([!java]Point [/!]start[!scala]:Point[/!], [!java]Point "
"[/!]end[!scala]:Point[/!])</code>. Um ponto é construído com o construtor "
"<code>Point([!java]double [/!]x[!scala]:Double[/!], [!java]double "
"[/!]y[!scala]:Double[/!])</code>. As coordenadas de um ponto são acessíveis "
"através dos métodos <code>[!java]double [/!]x()[!scala]:Double[/!]</code> e "
"<code>[!java]double [/!]y()[!scala]:Double[/!]</code> dele."

#. type: Content of: <p>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:18
msgid ""
"[/!] [!python]tuple of two X coordinates representing the zone of your "
"choice.[/!]"
msgstr ""
"[/!] [!python]tupla de duas coordenadas X a representar a área escolhida.[/!]"

#. type: Content of: <p><p>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:22
msgid ""
"In order to determine which zone to return, you'll need to call "
"<code>[!java]List&lt;Point&gt; "
"[/!]getGround()[!scala]List[Point][/!]</code>, which returns the vertices of "
"the ground's profile as a list of [!java|scala]<code>Point</code>[/!] "
"[!python]tuples (x,y)[/!]."
msgstr ""
"Para determinar para qual área retornar, precisa chamar "
"<code>[!java]List&lt;Point&gt; [/!]getGround()[!scala]List[Point][/!]</"
"code>, que retorna os vértices do perfil do solo como uma lista de [!python]"
"tuples (x,y)[/!] [!java|scala]<code>Point</code>s[/!]."

#. type: Content of: <p><p>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:27
msgid ""
"One more thing: your function should return a valid flat zone in any kind of "
"situation, not just for the currently visualized one. That's because it will "
"be not only tested against that world, but also against the one we had in "
"the previous exercise. As usual, you can see the other existing worlds with "
"the appropriate combobox."
msgstr ""
"Mais um detalhe: a sua função deve retornar uma área plana válida em "
"qualquer situação, não apenas para a atualmente vista. Isto é porque não vai "
"ser testado apenas neste mundo, mas também naquele do exercício anterior. "
"Como sempre, pode ver os outros mundos existentes com a combobox apropriada."

#. type: Content of: <p><p>
#: src/lessons/lander/lvl2_locate_landing_zone/LocateLandingZone.html:33
msgid "Have a safe landing! Don't forget to put on your space suit on your way out."
msgstr ""
"Tenha um bom pouso! Não se esqueça de vestir seu traje espacial quando for "
"sair."

#. type: Content of: <h1>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:2
msgid "Fly the Lander!"
msgstr "Pilote o módulo!"

#. type: Content of: <p>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:4
msgid ""
"After 30 days of staring at rocks and eating cereals you decide it's time to "
"go explore other parts of the planet."
msgstr ""
"Depois de 30 dias a olhar a rochas e a comer cereais decide que é hora de "
"explorar outras partes do planeta."

#. type: Content of: <p>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:7
msgid ""
"You fly for a while and suddenly realize you're almost out of fuel.  "
"Unfortunately you're in a delicate situation and the autopilot is helpless.  "
"You will have to pilot the lander yourself. Your mission is to <b>land the "
"lander on a flat zone with a vertical speed less than 10 m/s, an horizontal "
"speed less than 5 m/s and an angle of 0°.</b>"
msgstr ""
"Voa por um tempo e repentinamente repara que está quase sem combustível. "
"Infelizmente, está numa situação delicada e o piloto automático é inútil.  "
"Você mesmo terá que pilotar o módulo. A sua missão é <b>pousar o módulo numa "
"área plana com uma velocidade vertical menor que 10 m/s, uma velocidade "
"horizontal menor que 5 m/s e um ângulo de 0°.</b>"

#. type: Content of: <p>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:13
msgid ""
"You must define two functions: <code>[!java]void [/!]initialize()</code> and "
"<code>[!java]void [/!]step()</code>. <code>initialize()</code> is called "
"once just after you press \"Run\". You can use it to chose some flat "
"zone. As before, <code>step()</code> is called every 0.1 second and is used "
"for adjusting the lander's thrust and angle. As in the first exercise the "
"lander's thrust is adjusted via <code>[!java]void "
"[/!]setDesiredThrust([!java]int "
"[/!]desiredThrust[!scala]:Integer[/!])</code>.  But you can also control its "
"angle via <code>[!java]void [/!]setDesiredAngle([!java]double "
"[/!]desiredAngle[!scala]:Double[/!])</code>.  An angle of 0° denotes a "
"vertical position where the \"head\" of the lander points up.  This is the "
"angle you must land with. A positive angle denotes a left-leaning lander, a "
"negative angle a right-leaning one. You cannot lean more than by ±90°, and "
"the angle can vary by at most ±5° in one step."
msgstr ""
"Precisa definir duas funções: <code>[!java]void [/!]initialize()</code> e "
"<code>[!java]void[/!]step()</code>. <code>initialize()</code> é chamada uma "
"única vez depois de apertar \"Executar\". Pode usá-lo para escolher uma área "
"plana. Como antes, <code>step()</code> é chamado a cada 0,1 segundos e é "
"usada para ajustar a potência e ângulo do módulo. Como no primeiro "
"exercício, a potência do módulo é ajustada através de <code>[!java]void "
"[/!]setDesiredThrust([!java]int [/!]desiredThrust[!scala]:Integer[/!])</"
"code>.  Mas também pode controlar o ângulo dele através de <code>[!java]void "
"[/!]setDesiredAngle([!java]double [/!]desiredAngle[!scala]:Double[/!])</"
"code>.  Um ângulo de 0° denota uma posição vertical onde a \"cabeça\" do "
"módulo  aponta para cima. Este é o ângulo com o qual deve pousar. Um ângulo "
"positivo denota um módulo inclinado para a esquerda, um ângulo negativo um "
"inclinado para a direita. Não pode inclinar mais que ±90° e o ângulo pode "
"mudar por no máximo ±5° em cada passo."

#. type: Content of: <p>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:26
msgid ""
"As in the previous exercise, <code>[!java]List&lt;Point&gt; "
"[/!]getGround()[!scala]:List[Point][/!]</code> returns the vertices of the "
"ground's profile from left to right.  Please refer to the documentation "
"(Help/About this world) for a reference manual of your lunar lander."
msgstr ""
"Como no exercício anterior, <code>[!java]List&lt;Point&gt; "
"[/!]getGround()[!scala]:List[Point][/!]</code> retorna os vértices do perfil "
"do solo da esquerda para a direita. Favor consulte a documentação (Ajuda/"
"Sobre este mundo) para um manual de referência do módulo lunar."

#. type: Content of: <p>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:30
msgid ""
"As before, your program must safely land the lander in all the situations "
"encountered so far in addition to this new one."
msgstr ""
"Como antes, o seu programa deve pousar o módulo com segurança em todas as "
"situações encontradas além desta nova."

#. type: Content of: <p>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:33
msgid "Good luck, try not to crash!"
msgstr "Boa sorte, tente não cair!"

#. type: Content of: <h2>
#: lib/doc/MainWindow.html:1
msgid "The PLM Main Window"
msgstr "A Janela Principal do PLM"

#. type: Content of: outside any tag (error?)
#: lib/doc/MainWindow.html:3
msgid ""
"The PLM working environment should be self-explanatory, in particular with "
"the tool tips appearing when your mouse is over the elements.  Here is a "
"little explanation of the components in case you fail to understand "
"something. The main window is made of 5 main components:"
msgstr ""
"O ambiente de trabalho do PLM é auto-explicativo, principalmente com as "
"dicas que aparecem quando o mouse passa sobre elementos. Aqui está uma breve "
"explicação dos componentes caso não entenda algo. A janela principal é "
"composta de 5 componentes principais:"

#. type: Content of: <ul><li>
#: lib/doc/MainWindow.html:10
msgid ""
"<b>The menu:</b> Placed on top of the window, it gives you access to some "
"advanced commands such as exiting the program, and some other that we will "
"detail later."
msgstr ""
"<b>O menu:</b> posto na parte de cima da janela, dá-lhe acesso a alguns "
"comandos avançados, como sair do programa e alguns outros que falaremos mais "
"tarde."

#. type: Content of: <ul><li>
#: lib/doc/MainWindow.html:14
msgid ""
"<b>The tool bar:</b> Placed just below the menu, it gives you access to the "
"four main commands:"
msgstr ""
"<b>A barra de ferramentas:</b> Posta logo abaixo do menu, ela te dá acesso "
"aos quatro comandos principais:"

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:19
msgid ""
"The <b>Start</b> button, which begins the compilation and execution of the "
"code you may have typed in the editor. At the end of the execution, it "
"verifies whether you reach the situation constituting the objective of the "
"exercise or not. If yes, you gain access to the next exercise using the "
"<b>Exercise</b> menu. If not, you need to rework your code."
msgstr ""
"O botão <b>início</b>, que começa a compilação e a execução do código que "
"digitou no editor. No final da execução, verifica se alcançou uma situação "
"que constitui o objetivo do exercício ou não. Se sim, ganha acesso ao "
"próximo exercício a usar o menu <b>Exercício</b>. Se não, vai precisar "
"refazer o seu código."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:25
msgid ""
"The <b>Stop</b> button allows you to interupt the execution of your code, "
"what may reveal useful if you encounter an <i>infinite loop</i>."
msgstr ""
"O botão <b>Parar</b> sempre serve para interromper a execução do seu código, "
"o que pode ser útil se entrar num <i>loop infinito</i>."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:28
msgid ""
"The <b>Reset</b> button can be used to reset the world into its initial "
"state."
msgstr ""
"O botão <b>Reset</b> pode ser usado para reconfigurar o mundo para o estado "
"inicial."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:31
msgid ""
"The <b>Demo</b> button shows you the execution of the expected "
"solution. During its execution, you may want to switch the seen world to see "
"the different expected solutions."
msgstr ""
"O botão <b>Demo</b> mostra a execução da solução esperada. Durante a "
"execução pode alternar o mundo visto para ver as diferentes soluções "
"esperadas."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:34
msgid ""
"Please note that there is often several ways of achieving the awaited "
"solution, and that the one presented during the demo is not more or less "
"correct than the others. You are completely free to not follow strictly the "
"process shown by the demo, as long as your final solution matches the "
"exercise expectations."
msgstr ""
"Note que às vezes existem várias maneiras de alcançar a solução esperada e "
"que aquela apresentada durante a demonstração não é mais ou menos certa que "
"as outras. É completamente livre para não seguir estritamente o processo "
"mostrado pela demonstração, desde que a sua solução final atinja o que "
"exercício pede."

#. type: Content of: <ul><li>
#: lib/doc/MainWindow.html:41
msgid ""
"<b>Mission and editor tabs:</b> this is were you read this very text. This "
"area contains several tabs to which you can access by clicking on their name "
"on the top left. The first tab (which is always named <b>Mission</b>)  "
"contains a presentation of the current exercise. To solve an exercise, you "
"need to write your code in the other tabs. For example, you can now clic on "
"the <b>Source Code</b> tab to see the actual source. If it is empty, that's "
"because you did not write any code yet."
msgstr ""
"<b>Guias de missão e editor:</b> é onde está a ler este texto. Esta área "
"contém várias abas as quais pode acessar a clicar no nome deles no canto "
"superior esquerdo. A primeira guia (que se chama sempre <b>Missão</b>) "
"contém uma apresentação do exercício atual. Para resolver um exercício, "
"precisa escrever o seu código nas outras guias. Por exemplo, pode agora "
"clicar na guia <b>Código Fonte</b> para ver o código real. Se estiver vazia, "
"é por que ainda não escreveu nenhum código."

#. type: Content of: <ul><li>
#: lib/doc/MainWindow.html:49
msgid ""
"<b>The console:</b> Placed under the tabs, this is where any messages of the "
"application will appear. This area is initially empty and white."
msgstr ""
"<b>O console:</b> localizado abaixo das abas, é onde aparece qualquer "
"mensagem da aplicação. Esta área inicialmente é vazia e branca."

#. type: Content of: <ul><li>
#: lib/doc/MainWindow.html:52
msgid ""
"<b>World view</b> Placed on the right of the tabs, it is constituted of five "
"elements:"
msgstr ""
"<b>Visão do mundo</b> localizada à direita das abas, é constituída de cinco "
"elementos:"

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:57
msgid ""
"A scrolling menu allows to choose the world. Indeed, the program you write "
"may be executed in several worlds to test it in differing conditions. This "
"menu allows you to choose the world you want to see. Note that this "
"scrolling menu is hidden if there is only one world in your exercise."
msgstr ""
"Um menu rolante serve para escolher o mundo. Na verdade, o programa que "
"escreveu pode ser executado em vários mundos para testá-lo em diferentes "
"condições. Este menu é para escolher o mundo que quer ver. Observe que este "
"menu rolante fica oculto se houver apenas um mundo no seu exercício."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:62
msgid ""
"A slider placed right bellow allows to choose the animation speed of the "
"world. More precisely, it allows to choose the delay (in milliseconds) that "
"the buggles must wait after each action to allow you to see what they are "
"doing."
msgstr ""
"Um \"slider\" posto logo abaixo serve para escolher a velocidade da animação "
"do mundo. Mais precisamente, permite escolher o atraso (em milisegundos) que "
"os buggles devem esperar depois de cada ação para permitir que veja o que "
"eles estão a fazer."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:67
msgid ""
"A tab <b>World</b> represents the view of the world currently selected (from "
"the scrolling menu). This view is thus constitued of a grid forming the "
"several cells of the world, as well as several <i>buggles</i> awaiting for "
"your orders."
msgstr ""
"Uma guia <b>Mundo</b> representa a visão de mundo atualmente selecionada (de "
"menu rolante). Esta visão é então constituída de uma grade a formar várias "
"células do mundo, assim como vários \"<i>buggles</i>\" a esperar as suas "
"ordens."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:72
msgid ""
"An <b>Objective</b> tab displaying the world as it must be by the end of the "
"exercise."
msgstr ""
"Uma guia <b>Objetivo</b> a mostrar o mundo como deveria ser no final do "
"exercício."

#. type: Content of: <ul><li><ul><li>
#: lib/doc/MainWindow.html:76
msgid ""
"<b>The interactive controls</b>. Placed under the world view, these buttons "
"allows you to interactively control the buggles. This way, you can try to "
"<i>manually</i> bring your buggle to the scenario objective before writting "
"the needed code in the editor."
msgstr ""
"<b>Os controles interativos</b>. Localizados abaixo da Visão do mundo, estes "
"botões servem para controlar interativamente os buggles. Desta forma, pode "
"tentar trazer <i>manualmente</i> o seu buggle ao objetivo do cenário antes "
"de escrever o código necessário no editor."

#. type: Content of: <ul><li><ul><li><ul><li>
#: lib/doc/MainWindow.html:82
msgid "A scrolling menu allows to select the buggle you want to control."
msgstr "Um menu rolante serve para selecionar o \"buggle\" que quer controlar."

#. type: Content of: <ul><li><ul><li><ul><li>
#: lib/doc/MainWindow.html:84
msgid "The <b>Forward</b> button let your buggle do one step forward."
msgstr "O botão <b>Avançar</b> faz o seu \"buggle\" dar um passo à frente."

#. type: Content of: <ul><li><ul><li><ul><li>
#: lib/doc/MainWindow.html:86
msgid "The <b>Backward</b> button let it do one step backward."
msgstr "O botão <b>Recuar</b> fá-lo dar um passo para trás."

#. type: Content of: <ul><li><ul><li><ul><li>
#: lib/doc/MainWindow.html:88
msgid "The <b>Turn left</b> button ask your buggle to turn of 90° to its left."
msgstr ""
"O botão <b>Virar à esquerda</b> manda o seu \"buggle\" virar 90° à esquerda."

#. type: Content of: <ul><li><ul><li><ul><li>
#: lib/doc/MainWindow.html:90
msgid ""
"The <b>Turn right</b> button asks the buggle to turn to the right (isn't "
"this amazing?)."
msgstr ""
"O botão <b>Virar à direita</b> manda o seu \"buggle\" virar à direita ("
"surpreendente, né?)."

#. type: Content of: <ul><li><ul><li><ul><li>
#: lib/doc/MainWindow.html:93
msgid ""
"The <b>Mark</b> button requests your buggle to leave a mark behind it when "
"it goes."
msgstr ""
"O botão <b>Marcar</b> pede que o seu \"buggle\" deixe uma marca atrás dele "
"depois que sair."
