# French translations for PACKAGE package
# Copyright (C) 2009 Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# Automatically generated, 2009.
# Martin Quinson <Martin.Quinson@loria.fr>, 2014.
msgid ""
msgstr ""
"Project-Id-Version: PLM mission texts\n"
"POT-Creation-Date: 2015-07-31 10:14+0200\n"
"PO-Revision-Date: 2015-11-10 21:05+0100\n"
"Last-Translator: Martin Quinson\n"
"Language-Team: French <>\n"
"Language: fr\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: Poedit 1.7.5\n"

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

#. 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 ""
"Ce monde a été inventé par Lyn Turbak, du Wellesley College. Il est peuplé "
"de Buggles, petites bêtes qui comprennent des ordres simples, et offre de "
"nombreuses possibilités d'interaction avec le monde : prendre ou poser des "
"objets, colorier le sol, se cogner à des murs, etc."

#. type: Content of: <h2>
#: src/plm/universe/bugglequest/BuggleWorld.html:8
msgid "Methods understood by buggles"
msgstr "Méthodes comprises par les buggles"

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

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:10
msgid "(See also the note on exceptions, below)"
msgstr "(voir aussi la note sur les exceptions, plus bas)"

#. 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>Tourner à gauche"

#. 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 "Tourner à droite"

#. 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 "Se retourner"

#. 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 "Avancer"

#. 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 "Reculer</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 [/!]gauche()"

#. 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 [/!]droite()"

#. 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 [/!]retourne()"

#. 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]avance()[/!][!c]avancePas()[/!] or [!"
"java|c]void [/!]avance([!java|c]int [/!]nbPas[!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]recule()[/!][!c]reculePas()[/!] or [!"
"java]void [/!]recule([!java|c]int [/!]nbPas[!scala]:Int[/!])"

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

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "Get Y coordinate"
msgstr "Obtenir l'ordonnée"

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

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "Set Y coordinate"
msgstr "Changer l'ordonnée"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:17
msgid "Set position</b>"
msgstr "Changer la position</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 ""
"L'origine (0, 0) est dans le coin en haut à gauche, comme c'est souvent le "
"cas en informatique."

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:25
msgid "<b>Information on the buggle</b>"
msgstr "<b>Informations sur la 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>Obtenir la couleur de la buggle</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:26
msgid "Set the color of the body</b>"
msgstr "Changer la couleur de la buggle</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 [/!]getCouleurCorps()[!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 [/!]setCouleurCorps([!java|c]Color [/!]c[!scala]:Color[/!])"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:29
msgid "<b>Look for a wall forward"
msgstr "<b>Chercher un mur devant"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:29
msgid "Look for a wall backward</b>"
msgstr "Chercher un mur derrière</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 [/!]estFaceMur()[!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 [/!]estDosMur()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:32
msgid "<b>Get heading"
msgstr "<b>Obtenir la direction"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:32
msgid "Set heading</b>"
msgstr "Changer la direction</b>"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:32
msgid "valid directions are:"
msgstr "Les directions valides sont :"

#. 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 [/!]setDirection([!java|c]Direction [/!]dir[!scala]:"
"Direction[/!])"

#. 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]Direction.[/!]NORTH (nord), [!scala|java|"
"python]Direction.[/!]EAST (est), [!scala|java|python]Direction.[/!]SOUTH "
"(sud) et [!scala|java|python]Direction.[/!]WEST (ouest)"

#. 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 ""
"Renvoi si la buggle est actuellement <b>sélectionnée dans l'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 [/!]estChoisie()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:39
msgid "<b>About the brush</b>"
msgstr "<b>À propos de la brosse</b>"

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

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

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:40
msgid "Get brush position</b>"
msgstr "Obtenir la position de la brosse</b>"

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

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

#. 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 [/!]estBrosseBaissee()[!scala]:Boolean[/!]"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:44
msgid "<b>Change the brush color"
msgstr "<b>Modifier la couleur de la brosse"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:44
msgid "Get the color of the brush</b>"
msgstr "Obtenir la couleur de la brosse</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 [/!]setCouleurBrosse([!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 [/!]getCouleurBrosse()[!scala]:Color[/!]"

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:48
msgid "<b>Interacting with the world</b>"
msgstr "<b>Interagir avec le monde</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>Obtenir la couleur du sol</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 [/!]getCouleurSol()[!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>Vrai si biscuit par terre"

#. type: Content of: <table><tr><td><b>
#: src/plm/universe/bugglequest/BuggleWorld.html:52
msgid "Look for a baggle in bag"
msgstr "Vrai si on porte un biscuit"

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

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

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:53
msgid "(see the note on exceptions)"
msgstr "(voir la note sur les exceptions)"

#. 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 [/!]estSurBiscuit()[!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 [/!]porteBiscuit()[!scala]:Boolean[/!]"

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

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

#. 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>Chercher un message"

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

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

#. type: Content of: <table><tr><td>
#: src/plm/universe/bugglequest/BuggleWorld.html:60
msgid "Erase the message</b>"
msgstr "Effacer le message</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 [/!]estSurMessage()[!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 [/!]ecritMessage([!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* [/!]litMessage()[!scala]:String[/!]"

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

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

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

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

#. 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]Color.[/!]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]Color.[/!]blue"

#. 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]Color.[/!]cyan"

#. 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]Color.[/!]darkGray"

#. 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]Color.[/!]gray"

#. 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]Color.[/!]green"

#. 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]Color.[/!]lightGray"

#. 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]Color.[/!]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]Color.[/!]orange"

#. 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]Color.[/!]pink"

#. 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]Color.[/!]red"

#. 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]Color.[/!]white"

#. 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]Color.[/!]yellow"

#. type: Content of: <h2>
#: src/plm/universe/bugglequest/BuggleWorld.html:85
msgid "Note on exceptions"
msgstr "Note sur les exceptions"

#. 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 ""
"Les buggles normales lèvent une exception BuggleWallException si on cherche "
"à leur faire traverser un mur.\n"
"Elles lèvent une exception NoBaggleUnderBuggleException si vous cherchez à "
"prendre un biscuit dans une case qui n'en contient pas, ou une exception "
"AlreadyHaveBaggleException si vous portez déjà un biscuit.\n"
"Tenter de déposer un biscuit sur une case qui en contient déjà lève une "
"exception AlreadyHaveBaggleException.\n"
"Tenter de poser un biscuit alors qu'on n'en a pas lève une exception "
"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 ""
"Les \"SimpleBuggles\" (c.-à-d., celles utilisées dans les premiers "
"exercices) affichent un message d'erreur sans que vous ayez à vous soucier "
"de ce qu'est une exception."

#. 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 ""
"Ce monde contient un environnement simpliste de tests largement inspiré de "
"http://codingbat.com inventé par 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 ""
"Les exercices classiques sont très courts, et visent à améliorer les "
"capacités de stratégie de programmation des étudiants. C'est pour vous "
"prévenir que vous allez faire face à une très longue liste de très petits "
"exercices à propos de choses très simples. L'idée est de vous entraîner sur "
"ces problèmes jusqu'à ce que cela devienne automatique."

#. 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 ""
"Contrairement aux autres mondes, le BatWorld ne fournit ni de belles "
"abstractions ni de belles visualisations. Vous aurez à remplier une fonction "
"qui sera appelée avec plusieurs ensembles différents de paramètres, et c'est "
"tout."

#. 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 ""
"Pour plus d'informations, vous devriez consulter la documentation de "
"CodingBat.com qui contient par exemple une documentation très utile sur les "
"opérateurs booléens : 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 "Premiers pas"

#. 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 ""
"Cette première leçon va vous guider dans vos premiers pas en programmation. "
"Elle est destinée aux débutants. Liste des notions vues par exercice :"

#. 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 "Instructions"

#. 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 "Commentaires"

#. 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 "Instructions conditionnelles et expressions"

#. 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 "Boucles tant que <tt>(while)</tt>"

#. 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 "Variables"

#. 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 "Boucles pour <tt>(for)</tt>"

#. 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 "Boucles jusqu'à"

#. 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éthodes"

#. 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 "Tableaux"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:23
#: src/lessons/welcome/environment/Environment.html:2
msgid "Welcome in the Buggles' World"
msgstr "Bienvenue dans le monde des buggles"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:37
msgid "Java Instructions"
msgstr "Les instructions Java"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:51
#: src/lessons/welcome/instructions/InstructionsDrawG.html:2
msgid "Writing more complex programs"
msgstr "Écrire des programmes plus complexes"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:65
#: src/lessons/welcome/conditions/Conditions.html:2
msgid "Conditional instructions"
msgstr "Instructions conditionnelles"

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

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:120
#: src/lessons/welcome/variables/Variables.html:2
msgid "Storing and manipulating data"
msgstr "Stocker et manipuler des données"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:148
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:2
msgid "Do .. while loops"
msgstr "Boucles jusqu'à<tt> (do ... while)</tt>"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:188
#: src/lessons/welcome/methods/basics/MethodsDogHouse.html:2
msgid "Building methodically"
msgstr "Construire avec méthode"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:202
msgid "Methods returning a result"
msgstr "Méthodes retournant un résultat"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:215
#: src/lessons/welcome/methods/args/MethodsArgs.html:2
msgid "Methods with parameters"
msgstr "Méthodes avec paramètres"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:229
#: src/lessons/welcome/methods/picture/PictureMono1.html:2
msgid "Methodically drawing"
msgstr "Dessiner avec méthode"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:242
#: src/lessons/welcome/methods/picture/PictureMono2.html:2
msgid "Methodically drawing (only bigger)"
msgstr "Dessiner avec méthode (en plus grand)"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:268
#: src/lessons/welcome/methods/picture/PictureMono3.html:2
msgid "Drawing bigger and bigger"
msgstr "Dessiner de plus en plus grand"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:281
msgid "Even more pattern to draw"
msgstr "Encore des motifs à dessiner"

#. 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 "Chasse à la limace"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:336
#: src/lessons/welcome/methods/slug/SlugTracking.html:2
msgid "Slug Tracking"
msgstr "Pistage de la limace"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:362
#: src/lessons/welcome/traversal/Snake.html:2
msgid "Snake World"
msgstr "Monde de serpents"

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

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:390
msgid "Knitting, Arrays and modulos"
msgstr "Tricots, tableaux et modulos"

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

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

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

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

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:483
msgid "Meaning of the symbols"
msgstr "Légende"

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

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:489
msgid "Working on the concept"
msgstr "L'exercice travaille sur le concept"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:492
msgid "Concept assumed mastered"
msgstr "Le concept est supposé maîtrisé"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/Main.html:495
msgid "Concept not mandated by the exercise"
msgstr "Le concept n'est pas indispensable à l'exercice"

#. type: Content of: <h2>
#: src/lessons/welcome/Main.html:501
msgid "What will I learn?"
msgstr "Que vais-je apprendre ?"

#. 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 ""
"Vous allez apprendre les bases de la programmation. Disons au moins que les "
"principaux concepts vous auront été présentés, vous permettant de lire et "
"comprendre la plupart des algorithmes. Vous ne pourrez toujours pas écrire "
"ou même lire des programmes complets en [!thelang] car la notion d'objet ne "
"fait pas partie des objectifs de cette leçon, mais vous maîtriserez ce qu'on "
"appelle la « programmation tactique », ce qui veut dire que votre maîtrise "
"de la syntaxe vous permettra de vous concentrer sur les problèmes à résoudre "
"sans vous battre contre le compilateur à propos de la syntaxe."

#. 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 ""
"Cette première leçon va vous guider dans vos premiers pas en programmation. "
"Elle est destinée aux débutants."

#. 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 ""
"Dans le doute, faites cette leçon qui vous enseignera les bases de la "
"programmation."

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:4
msgid ""
"You just started the Programmer's Learning Machine. This is a Learning "
"Management System aiming at teaching the art of computer programming through "
"interactive exercises. It is constituted by a set of exercises grouped by "
"lessons, allowing you to practice at your own pace. Currently, the "
"environment is configured to be programmed in the [!thelang/] programming "
"language, but you can change it from the Language menu if you want, or by "
"clicking on the [!thelang/] icon at the right of the status bar below."
msgstr ""
"Vous venez de lancer la PLM, l'exerciseur du programmeur (Programmer's "
"Learning Machine). Il s'agit d'une plate-forme pédagogique destinée à "
"simplifier l'apprentissage de la programmation. Il est constitué d'un "
"ensemble d'exercices groupés par leçons, pour vous permettre de progresser à "
"votre rythme. Pour l'instant, l'outil est configuré pour vous permettre de "
"programmer en [!thelang/], mais vous pouvez changer de langage de "
"programmation grâce au menu Langage si vous le désirez, ou en cliquant sur "
"l'icône du [!thelang/] à droite de la barre d'état (en bas de la fenêtre)."

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:11
msgid ""
"In this first lesson, the buggles will lead your first steps in programming."
msgstr ""
"Dans cette première leçon, les buggles guideront vos premiers pas en "
"programmation."

#. type: Content of: <h3>
#: src/lessons/welcome/environment/Environment.html:13
msgid "The <i>buggles</i>? What is this??"
msgstr "Les <i>buggles</i> ? Qu'est ce que c'est ??"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:15
msgid ""
"The buggles are little animals obeying any order you may give them. In each "
"exercise, you have to provide them with the right instructions so that the "
"world turns into the objective of the exercise. For example in this "
"exercise, you should instruct your buggle to move forward once. You can see "
"that by checking the difference between the <i>World</i> view and the "
"<i>Objective</i> one.  Depending on the exercise (and your settings in the "
"Language menu), your code must be written in either C, Java, Python or Scala."
msgstr ""
"Les buggles sont de petites bêtes qui obéissent aux ordres que vous leur "
"donnez. Dans chaque exercice, vous devez donner des ordres à vos buggles "
"pour faire en sorte que le monde ressemble à l'objectif de l'exercice. Par "
"exemple dans cet exercice, vous devez instruire votre buggle pour qu'elle "
"avance d'un pas. Observez la différence entre l'état initial et l'objectif "
"en utilisant les panneaux à droite. En fonction de l'exercice (et vos "
"réglages), vous devez écrire vos programme dans l'un des langages de "
"programmation suivant : Java, Python, Scala ou C (en fonction de l'exercice)."

#. type: Content of: <h3>
#: src/lessons/welcome/environment/Environment.html:23
msgid "Working environment"
msgstr "L'environnement de travail"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:25
msgid ""
"Before going any further, get familiar with the working environment. Have a "
"look at the several elements composing the main window, move your mouse over "
"them to show the tooltip, and experiment with the elements to see what they "
"do.  The white area below is the console: this is where errors and messages "
"get displayed."
msgstr ""
"Avant d'aller plus loin, familiarisez vous avec l'environnement. Observez "
"les différents éléments composant la fenêtre, placez la souris dessus pour "
"voir les bulles d'aide, et essayez les pour voir ce qu'ils font. La zone "
"blanche en bas est la console : c'est là que les erreurs et messages sont "
"affichés."

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:31
msgid ""
"If your code contains errors (and code always do at some point), the "
"computer will display error messages in the console. You obviously have to "
"fix the errors to pass the exercises. The messages that get displayed may "
"sound scary at first glance, but don't panic. The compiler is only somehow "
"limited in its communication abilities, but he's not mean. If you look "
"closer, the solution to solve your issue is written in the middle of those "
"cryptic messages. You will see, with a bit of habit, we get used to it."
msgstr ""
"Si votre code contient des erreurs (et les programmes finissent toujours par "
"en contenir), l'ordinateur affichera les messages d'erreur sur la console. "
"Vous devez bien entendu corriger ces erreurs pour réussir les exercices. Les "
"messages affichés peuvent paraître inquiétant au premier abord, mais pas de "
"panique. Le compilateur est seulement pas très doué pour communiquer, il "
"n'est pas fondamentalement méchant. En regardant de plus près, la solution "
"pour corriger les problèmes est inscrite dans ces messages cryptiques. Vous "
"verrez, avec un peu d'entraînement, vous vous y habituerez."

#. type: Content of: <h3>
#: src/lessons/welcome/environment/Environment.html:39
msgid "What am I supposed to do?"
msgstr "Que dois-je faire ?"

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:41
msgid ""
"It's time to write your first program. Simply ask your buggle to move one "
"step forward using the Source Code pane. For that, simply write the "
"following code (clicking on the interactive controls is not enough: You have "
"to write the code after experimenting interactively)."
msgstr ""
"Il est temps d'écrire votre premier programme. Demandez simplement de faire "
"un pas en avant dans le panneau de Code Source. Pour cela, écrivez "
"simplement le code suivant. Cliquer sur les contrôles interactifs ne suffit "
"pas. Il faut écrire le code après avoir expérimenté interactivement."

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

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

#. type: Content of: <p>
#: src/lessons/welcome/environment/Environment.html:46
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'oubliez pas le <code>;</code> final, car cela indique au compilateur que "
"l'instruction est terminée (oui, les ordinateurs sont si stupides qu'il faut "
"leur préciser des choses aussi simples)."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/environment/Environment.html:48
#: src/lessons/welcome/instructions/Instructions.html:35
#: 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/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:60 src/lessons/welcome/bdr/BDR.html:195
#: 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:50
msgid ""
"Once done, click on run. You can proceed to next exercise once it works."
msgstr ""
"Une fois terminé, cliquez sur «Exécuter». Quand cela fonctionne, vous pouvez "
"passer à l'exercice suivant."

#. 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 ""
"Félicitations ! Vous venez d'écrire votre premier programme ! Vous avez "
"compris l'idée maintenant : programmer, c'est simplement donner des "
"instructions à l'ordinateur, qui les applique aveuglément. La plus grande "
"difficulté est d'expliquer quoi faire à quelque chose d'aussi bête que "
"l'ordinateur..."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:9
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>.  In "
"your programs, such built instructions are called functions or methods, and "
"you should add parenthesis to invoke them:"
msgstr ""
"Le programme le plus simple est formé d'une suite d'ordres simples donnés à "
"la machine. C'est assez comparable à une recette de cuisine où l'on dit "
"<i>cassez les œufs puis ajoutez du sel puis mélangez le tout puis faites "
"cuire</i>. Dans les programmes, de tels instructions  sont appelées "
"fonctions ou méthodes, et vous devez les doter de parenthèses:"

#. type: Content of: <pre>
#: src/lessons/welcome/instructions/Instructions.html:14
#, no-wrap
msgid "nameOfTheMethod()"
msgstr "nomDeLaMethode()"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:16
msgid ""
"[!thelang] wants to have the instructions separated by semi-columns (;)[!"
"python|scala] or by new lines[/!].  The previous example 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 ""
"[!thelang] veut que les instructions soient séparées [!python|scala]soit "
"[/!]par des points-virgules (;)[!python|scala], soit par des retours à la "
"ligne[/!].\n"
"L'exemple ci-dessus de recette s'écrirait donc à peu près comme ci-"
"dessous. \n"
"[!python|scala] (Vous pouvez aussi ajouter des points-virgules en fin de "
"lignes, mais ce n'est pas indispensable)[/!]."

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

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

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:29
msgid ""
"It could also be written in the following way, but it's generally considered "
"as a bad practice to group several instructions on the same line since it "
"greatly hinders the readability."
msgstr ""
"Il serait également possible de l'écrire sous la forme suivante, mais placer "
"plusieurs instructions sur la même ligne est généralement considéré comme "
"une très mauvaise habitude car cela complique grandement la relecture du "
"code après coup."

#. type: Content of: <pre>
#: src/lessons/welcome/instructions/Instructions.html:33
#, no-wrap
msgid "meltTheChocolatePieces(); addSugar(); coolMix(); serve()\n"
msgstr "casserLesOeufs(); ajouterDuSel(); melangerLeTout(); faireCuire();\n"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:37
msgid ""
"Of course, these specific methods do not exist by default in [!thelang], but "
"it may be possible to define them by yourself (we'll see later how to define "
"your how methods)."
msgstr ""
"Bien entendu, ces méthodes n'existent pas en [!thelang], mais il serait "
"possible de les définir par vous même (nous verrons plus tard comment "
"définir vos propres méthodes)."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:41
msgid ""
"For now, we'll simply go for the buggle instructions. 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 ""
"Pour l'instant, nous allons utiliser les instructions de la buggle. Il\n"
"y a une méthode pour chaque bouton du contrôle interactif.  Pour faire la "
"même\n"
"chose que le bouton <b>avance</b> (faire avancer la buggle d'un pas), il "
"faut\n"
"écrire dans l'éditeur :"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:47
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 ""
"De même, pour faire l'équivalent des boutons <b>[!java|scala|"
"python]recule[/!][!c]reculePas[/!]</b>, <b>gauche</b> et <b>droite</b>, il "
"faut utiliser respectivement :"

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

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:55
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 ""
"Le bouton <b>marquer</b> est un peu particulier, puisqu'il correspond à deux "
"méthodes : la première lève le crayon, tandis que la seconde le baisse."

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

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:61
msgid ""
"The buggle offers other methods, that are presented from the \"Help/about "
"this world\" menu and will be introduced on need."
msgstr ""
"La buggle offre d'autres méthodes, présentées dans le menu \"Aide/À propos "
"de ce monde\". Elles seront introduites au fur et à mesure des besoins."

#. type: Content of: <h3>
#: src/lessons/welcome/instructions/Instructions.html:65
#: 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:23
#: src/lessons/welcome/bdr/BDR.html:150 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 "Objectif de cet exercice"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/instructions/Instructions.html:65
msgid ""
"<a name=\"Objectives\"/> 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 ""
"<a name=\"Objectives\"/> Notre second programme sera un peu plus compliqué, "
"mais pas tellement. L'objectif de votre buggle est simplement de se dessiner "
"une maison (une boîte), et de se cacher dedans. Vérifiez le monde objectif "
"pour voir exactement ce que cela veut dire."

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:70
msgid ""
"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). The full list of all "
"instructions understood by your buggle can be found in \"Help/About this "
"world\"."
msgstr "Utilisez votre brosse pour marquer le sol en marchant. Commencez à marquer le sol avec <code>baisseBrosse()</code>, et arrêtez avec <code>leveBrosse()</code> (par exemple pour entrer dans votre maison sans marquer le sol). La liste complète des instructions comprises par votre buggle est accessible dans le menu \"Aide/À propos de ce monde\"."

#. type: Content of: <h3>
#: src/lessons/welcome/instructions/Instructions.html:75
msgid "After this exercise"
msgstr "Après cet exercice"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:76
msgid ""
"When switching to the next exercise, please note that there is a sub-"
"exercise following this one.  By default, it is hidden in the menu and you "
"have to open the sub-menu to see it.  When you switch the exercise, most of "
"the exercises are hidden because the tree is folded, as follows:"
msgstr ""
"Quand vous changerez d'exercice, n'oubliez pas l'exercice d'application qui "
"suit. Par défaut, il n'est pas visible dans la fenêtre de sélection, et il "
"faut ouvrir le sous-arbre pour le voir. Lorsque vous ouvrez la fenêtre de "
"sélection des exercices, la plupart d'entre eux sont cachés, comme cela:"

#. type: Content of: <p>
#: src/lessons/welcome/instructions/Instructions.html:81
msgid ""
"You have to click on the little symbol to the left of the buggle to unfold "
"the tree, as follows:"
msgstr ""
"Vous devez cliquer sur le petit symbole à gauche de la buggle pour déplier "
"l'arbre, comme cela :"

#. 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 ""
"Maintenant que vous savez écrire des choses sur le sol, nous allons utiliser "
"cette compétence pour dessiner un merveilleux G par terre. Consultez le "
"panneau d'objectif pour les détails de ce qui est attendu."

#. 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 ""
"Quand vous écrivez un programme un peu complexe, il est souvent pratique "
"d'ajouter des <b>commentaires</b> pour simplifier la relecture du code après "
"coup. Ici par exemple, il est assez facile de se perdre dans les ordres "
"nécessaires au dessin. Il peut être pratique d'ajouter des commentaires "
"comme <i>fin de la barre verticale</i> ou <i>Fini de dessiner le G. "
"Retournons à la position initiale</i>. Documenter votre code est presque "
"toujours nécessaire si quelqu'un (vous ou quelqu'un d'autre) veut le lire "
"après coup. Cependant, sur-commenter des choses triviales est une mauvaise "
"idée car cela dilue les informations dans des commentaires trop verbeux."

#. 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 ""
"Il y a [!java]trois[/!][!python|scala|c]deux[/!] sortes de commentaires en [!"
"thelang], indiquant [!java|scala|c]au compilateur[/!][!python]à "
"l'interpréteur[/!] qu'il ne doit pas lire le texte ajouté pour les humains."

#. 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>Commentaires sur une seule ligne</b>. Quand le [!java|scala|"
"c]compilateur[/!][!python]interpréteur[/!] rencontre le symbole [!java|scala|"
"c]//[/!][!python]#[/!], il ignore la fin de la ligne."

#. 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>Commentaires sur plusieurs lignes</b>. [!java|scala|c]Le compilateur[/!][!"
"python]L'interpréteur[/!] ignore tout ce qui se trouve entre [!java|scala|"
"c]les symboles /* et */, même s'ils sont sur des lignes différentes.[/!]\n"
"[!python]une ligne commençant par ''' et la prochaine ligne terminant par "
"'''.[/!]"

#. 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 ""
"methodeAppeleeParLe[!java|scala|c]Compilateur[/!][!python]Interpreteur[/!]()[!java|c];[/!] <span class=\"comment\">[!java|scala|c]//[/!][!python]#[/!] tout ceci est ignoré</span>\n"
"autreAppel()[!java|c];[/!] [!java|scala|c]<span class=\"comment\">/* Ceci est</span>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class=\"comment\"> également ignoré */</span>[/!]\n"
"[!python]<span class=\"comment\">''' Ceci est</span>\n"
"<span class=\"comment\">également ignoré '''</span>[/!]\n"
"encoreUneAutreAppel()[!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 ""
"Il existe une troisième forme de commentaires en Java, entre /** et */, qui "
"sont lus par un programme nommé JavaDoc pour générer automatiquement la "
"documentation expliquant comment utiliser le code. Ces commentaires doivent "
"suivre un formalisme précis."

#. 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 ""
"Les commentaires sur plusieurs lignes sont souvent utilisés pour documenter\n"
"comment utiliser le code, tandis que les autres types de commentaires sont\n"
"souvent utilisés pour documenter comment le code fonctionne."

#. 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 ""
"Les programmes faits d'une simple suite d'instructions comme celui de "
"l'exercice précédent sont bien ennuyeux. Ils font toujours la même chose, et "
"ne peuvent pas réagir aux conditions extérieurs. Une <b>instruction "
"conditionnelle</b> permet au programme de s'adapter en disant quelque chose "
"comme <i>S'il pleut, prend un parapluie</i>."

#. type: Content of: <p>
#: src/lessons/welcome/conditions/Conditions.html:9
msgid "The [!thelang] syntax is the following:"
msgstr "La syntaxe en [!thelang] est la suivante :"

#. 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>condition</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireSiVraie();</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireEnsuiteSiVraie();</b>\n"
"}[/!][!python]if <b>condition</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireSiVraie()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireEnsuiteSiVraie()</b>[/!]\n"
"<b>aFaireDansTousLesCas()[!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 ""
"Le mot <code>if</code> signifie «si» en anglais. Si la condition est vraie, "
"alors le code du bloc suivant sera exécuté, puis l'exécution se poursuivra "
"avec la suite du code, après le bloc. Sinon, si la condition est fausse, le "
"bloc suivant sera ignoré et l'exécution passera directement au code placé "
"après lui. Le bloc conditionnel peut contenir plusieurs instructions. Il "
"peut même contenir d'autre tests, avec leurs sous-blocs associés."

#. 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 ""
"Dans cet exemple, les instructions <code>aFaireSiVraie()</code> et "
"<code>aFaireEnsuiteSiVraie()</code> seront exécutée si (et seulement si) la "
"condition est vraie tandis que l'instruction <code>aFaireDansTousLesCas()</"
"code> sera exécutée que la condition soit vraie ou fausse."

#. 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 ""
"En [!thelang], les blocs sont \n"
"[!java|scala|c]délimités par des accolades : le symbole { commence un bloc "
"tandis\n"
"que le symbole } le ferme.  Les caractères blancs ne sont pas pris en \n"
"compte[/!][!java|c].[/!][!scala], tant que les instructions restent séparées "
"soit par des points-virgules, soit par des retour à la ligne.[/!] \n"
"[!java|scala|c]Il reste très important d'indenter correctement votre code "
"pour qu'il reste lisible.[/!] \n"
"[!python]marqués par l'indentation : toutes les lignes indentés (=décalées "
"vers la droite par des espaces) font partie du bloc. Il est assez courant "
"d'utiliser quatre espaces pour indenter le code, mais cela fonctionne quel "
"que soit le nombre de caractères blancs utilisés pour cela. Simplement, "
"toutes les lignes d'un bloc donné doivent utiliser le même nombre de blancs. "
"La fin des blocs de code n'est pas marquée par un symbole particulier: il "
"s'arrête dès que les lignes ne sont plus indentées. N'oubliez pas les deux "
"points (:) à la fin de la ligne <code>if</code>, python en a besoin pour "
"savoir qu'un nouveau bloc commence.\n"
"Le fait que python utilise l'indentation pour maquer les blocs est un "
"avantage pour les débutants: cela vous forcera à respecter des critères "
"stricts de mise en forme de votre code.[/!] \n"
"Il est très facile de se perdre dans un code qui n'est pas correctement "
"indenté. Il est donc important que vous fassiez en sorte que votre code "
"reste clair et lisible pour que le relire et le modifier reste plaisant et "
"productif."

#. 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 ""
"Toutes les instructions d'un bloc doivent avoir la même indentation, et il "
"n'est pas possible de couper un bloc. Les deux exemples suivants de code "
"sont incorrects et vont générer des erreurs."

#. 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>condition</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>quoiFaire()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>quoiFaireEnsuite()</b> <span class=\"comment\"># une espace de trop</span>\n"
"<b>quoiFaireDansTousLesCas()</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 ""
"if <b>condition</b>:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>quoiFaire()</b>\n"
"<b>quoiFaireDansTousLesCas()</b>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>quoiFaireEnsuite()</b> <span class=\"comment\"># Ce bloc n'est rattaché à aucune ligne de condition</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 ""
"La condition doit être une expression de type <code>[!c]int[/!][!"
"java]boolean[/!][!scala|python]Boolean[/!]</code> (expression booléenne).  "
"Le sous-bloc sera exécuté seulement si cette expression vaut <code>[!c]1[/!]"
"[!java|scala]true[/!][!python]True[/!]</code> (vrai), et il sera ignoré si "
"sa valeur est <code>[!c]0[/!][!java|scala]false[/!][!python]False[/!]</code> "
"(faux).\n"
"<code>[!java|scala]true[/!][!python]True[/!]</code> et <code>[!java|"
"scala]false[/!][!python]False[/!]</code> sont des constantes définies "
"directement par [!thelang], tout comme 0 ou 1 en mathématiques."

#. 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 ""
"La condition peut aussi être une variable booléenne (nous reviendrons sur "
"les variables dans un autre exercice, pas de panique) ou un test "
"arithmétique,comme <code>x == 5</code>, qui teste si la valeur actuelle de "
"<tt>x</tt> est 5, ou bien comme <b>!=</b> (teste l'inégalité, càd si le "
"membre gauche a une valeur différente du membre droit), <b>&lt;</b> "
"(inférieur à), <b>&gt;</b> (supérieur à), <b>&lt;=</b> (inférieur ou égal "
"à), <b>&gt;=</b> (supérieur ou égal à)."

#. 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 ""
"Attention au piège classique, qui consiste à tester l'égalité d'une variable "
"avec = au lieu de ==. Heureusement, [!java|scala|c]le compilateur[/!][!"
"python]l'interpréteur[/!] détecte le plus souvent ce problème et vous le "
"signale, mais pas tout le temps. Si la variable est de type booléen, il peut "
"se faire prendre au piège, et il convient donc d'être attentif..."

#. 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 ""
"La condition peut également être un appel à certaines méthodes "
"particulières, dont le résultat est un booléen. Par exemple, la méthode "
"<tt>estFaceMur()</tt> de la buggle renvoie [!c]1[/!][!java|python|"
"scala]vrai[/!] si la buggle est face à un mur, et [!c]0[/!][!java|python|"
"scala]faux[/!] sinon."

#. 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 ""
"Enfin, il est possible de construire une condition composée de plusieurs "
"sous-conditions reliées par des opérations booléennes:"

#. 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> est vraie si "
"<tt>cond1</tt> <b>et</b> <tt>cond2</tt> est vraie (d'ailleurs, si <tt>cond1</"
"tt> est fausse, <tt>cond2</tt> n'est même pas évaluée puisqu'on sait déjà "
"que la conjonction des deux propositions ne peut pas être vraie)."

#. 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> est vraie si "
"<tt>cond1</tt> <b>ou</b> <tt>cond2</tt> est vraie (d'ailleurs, si <tt>cond1</"
"tt> est vraie, <tt>cond2</tt> n'est même pas évaluée puisqu'on sait déjà que "
"la disjonction des deux propositions ne peut pas être fausse)."

#. 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> est vraie si "
"<tt>cond</tt> ne l'est pas."

#. 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 ""
"Quand les expressions deviennent compliquées, il est préférable d'ajouter "
"quelques parenthèses pour lever toute ambiguïté sur l'ordre d'évaluation. "
"N'hésitez pas à mettre suffisamment de parenthèses pour la rendre plus "
"lisible."

#. 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 ""
"Pour finir, il est possible de spécifier ce qu'il faut faire quand la "
"condition est fausse, en utilisant la syntaxe suivante («else» signifie "
"«sinon» en anglais). Dans ce cas, l'instruction "
"<code>aFaireSiLaConditionEstFausse()</code> ne sera exécutée que si la "
"condition est fausse."

#. 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>condition</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireSiLaConditionEstVraie();</b>\n"
"} else {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireSiElleEstFausse();</b>\n"
"}[/!][!python]if (<b>condition</b>):\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireSiLaConditionEstVraie()</b>\n"
"else:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>aFaireSiElleEstFausse()</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'oubliez pas les deux points (:) après le else, ils indiquent qu'un nouveau "
"bloc débute."

#. 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=\"Objectifs\"/> Si la buggle est face à un mur, il faut reculer d'un "
"pas; Sinon, il faut avancer d'un pas.\n"
"Pour savoir si on est face à un mur, il suffit d'utiliser la méthode "
"prédéfinie des buggles nommée <code>estFaceMur()</code>."

#. 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 ""
"Cet exercice est un peu particulier : il faut que votre programme fonctionne "
"pour plusieurs buggles, chacune étant dans une situation initiale "
"différente. Le même code sera utilisé pour chacune d'entre elles."

#. 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 ""
"Quand votre programme fonctionne, passez à l'exercice suivant (qui est caché "
"par défaut dans un sous-arbre de la fenêtre de sélection)."

#. 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 ""
"En plus des instructions conditionnelles, une autre construction pratique "
"est de pouvoir répéter une action tant qu'une condition particulière n'est "
"pas arrivée. On utilise pour cela une boucle <tt>while</tt>, dont la syntaxe "
"est la suivante :"

#. 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>condition</b>) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;<b>action()</b>;\n"
"}[/!][!python]while <b>condition</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 ""
"Le bloc est alors exécuté encore et encore, tant que la condition est vraie. "
"Plus précisément, la buggle teste la valeur de la condition. Si elle est "
"fausse, le bloc est ignoré et l'exécution continue avec la suite. Si la "
"condition est vraie, le bloc est exécuté. Ensuite, la buggle réévalue la "
"condition. Si elle est devenue fausse (par exemple parce que les "
"déplacements du bloc nous ont mis face au mur), le bloc est maintenant "
"ignoré et on continue avec la suite. Mais si la condition est toujours "
"vraie, on exécute une nouvelle fois le bloc avant de réévaluer une fois de "
"plus la condition. Cela continue ainsi tant que la condition reste vraie."

#. 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 ""
"Évidement, si l'action en question ne modifie pas la valeur de la condition, "
"la buggle va exécuter l'action à l'infini. C'est dans ce genre de cas que le "
"bouton <b>stop</b> de l'interface devient utile. Pour tester cela, vous "
"pouvez essayer de taper le code suivant dans l'éditeur :"

#. 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;gauche();\n"
"}[/!][!c]while (1) {\n"
"&nbsp;&nbsp;&nbsp;&nbsp;gauche();\n"
"}[/!][!python]while True:\n"
"&nbsp;&nbsp;&nbsp;&nbsp;gauche()[/!]"

#. 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 ""
"La buggle va tourner vers la gauche tant que <code>[!c]1[/!][!java|"
"scala]true[/!][!python]True[/!]</code> est vrai (sans fin donc) jusqu'à ce "
"que vous l'arrêtiez manuellement avec le bouton stop."

#. 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 ""
"Il vous faut maintenant écrire le code nécessaire pour que vos buggles "
"avancent jusqu'à rencontrer un mur. L'idée est donc de faire :"

#. 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 ""
"tant que l'on est pas face à un mur, faire :\n"
"&nbsp;&nbsp;avancer();"

#. 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 ""
"Référez-vous à la documentation (dans le menu \"Aide/À propos de ce monde\") "
"pour la liste complète des méthodes comprises par les 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 ""
"Le monde des buggles contient parfois des petits biscuits ronds que les "
"buggles peuvent déplacer d'un endroit à un autre. Pour cela, elles peuvent "
"utiliser des fonctions spécifiques : <code>estSurBiscuit(), porteBiscuit(), "
"prendBiscuit()<code> et <code>poseBiscuit()</code>. Tous les détails se "
"trouvent dans la documentation accessible depuis «Aide/À propos de ce monde»."

#. 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 ""
"Faites en sorte que chaque buggle trouve son baggle en adaptant le code que "
"vous aviez écrit pour l'exercice précédent (vous êtes libre de faire un "
"copie/colle de ce que vous aviez fait si vous le souhaitez)."

#. 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 ""
"Les programmes que nous avons écrit jusque là passent à coté d'un point "
"fondamental en informatique. En effet, la science informatique est celle de "
"traiter des <b>données</b> grâce à des <b>instructions</b>. Dans le monde "
"des buggles, les principales données sont cachées derrière la représentation "
"graphique, mais ce n'est pas une raison pour ne jamais manipuler "
"explicitement des données."

#. type: Content of: <h3>
#: src/lessons/welcome/variables/Variables.html:9
msgid "Data in [!thelang]"
msgstr "Les données en [!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 ""
"Dans un programme, on peut utiliser différents <i>types</i> de données, tels "
"que les entiers, les nombres à virgules ou les chaînes de caractères. Si on "
"veut utiliser une donnée plusieurs fois, il faut la stocker dans une "
"<i>variable</i>, qui est une sorte de case contenant une valeur: vous rangez "
"votre donnée (disons '5') dans la variable (disons «longueur»), et vous "
"pouvez la retrouver plus tard quand vous en avez besoin. C'est exactement "
"comme prendre une boîte avec une étiquette (disons «cadeau») et d'y ranger "
"quelque chose dedans (disons, un flacon de Channel Numéro 5)."

#. type: Content of: <h3>
#: src/lessons/welcome/variables/Variables.html:17
msgid "Variable declarations"
msgstr "Déclaration de Variables"

#. 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 ""
"Il est très simple de <b>déclarer</b> (c'est-à-dire, créer) une variable en "
"[!thelang]. Il suffit d'écrire\n"
"[!java]son type, une espace et le nom de la variable.[/!] \n"
"[!scala]le mot-clé <code>var</code>, le nom de la variable, deux points (:), "
"le type de la variable, un signe égal (=) et une valeur initiale.[/!] \n"
"[!python]le nom de la variable, un signe égal (=) et sa valeur initiale."
"[/!] \n"
"Le nom de la variable est un label pour la retrouver plus tard[!python]."
"[/!] \n"
"[!java|scala] tandis que son type est le genre de données qu'on va pouvoir "
"stocker dans cette variable.[/!] \n"
"Il est interdit de mettre des espaces dans les noms de variable. \n"
"On peut nommer une variable <code>dejaFait</code>, mais <code>deja fait</"
"code> n'est pas un identificateur de variable valide."

#. 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 ""
"Ainsi, pour créer une variable nommée <b>x</b> contenant des entiers, on "
"écrira :"

#. 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 ""
"Si vous le souhaitez, vous pouvez donner une valeur initiale à votre "
"variable en ajoutant le symbole égal (=) suivi d'une valeur après la "
"déclaration."

#. 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 "Ainsi, pour une variable ayant la valeur initiale 5, il faut écrire :"

#. 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 ""
"Ainsi, pour créer une variable nommée <b>x</b> contenant des entiers avec 42 "
"en valeur initiale, on écrira :"

#. 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 ""
"Dans la plupart des cas, le compilateur est capable de deviner le type de la "
"variable d'après la valeur initiale. On peut alors omettre le type de la "
"variable:"

#. 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 ""
"Il est nécessaire de spécifier le type de la variable lorsque l'on "
"initialise ses variables avec des valeurs génériques, telles que la valeur "
"très particulière <code>null</code>, dont le type se trouve être ambigu. "
"Même quand le type est clair, vous pouvez le spécifier si vous le souhaitez. "
"Ainsi, pour une variable contenant 5 en valeur initiale, on peut écrire:"

#. 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\">// je peux quand même donner le type si je veux</span>\n"
"var y = 10       <span class=\"comment\">// ou bien je peux l'omettre</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 ""
"Comme vous pouvez le voir, les variables sont <b>typées</b> en [!thelang]. "
"Cela veut dire qu'elles sont en quelque sorte spécialisées: une variable "
"donnée ne peut stocker qu'un type de données spécifique. N'essayez même pas "
"de ranger des nombres dans une variable faite pour recevoir des lettres ! On "
"dit que [!thelang] est un langage <b>typé statiquement</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 ""
"D'autres langages (comme le python) sont moins regardants, et on peut ranger "
"n'importe quel type de données dans n'importe quelle variable sans "
"restriction. À première vue, cela semble plus simple, mais ce genre de "
"restriction permet au compilateur de détecter plus d'erreurs de logiques "
"pour vous, ce qui n'est pas dommage. En quelque sorte, il est plus facile "
"d'écrire du python, mais le typage empêche certaines erreurs de se glisser "
"dans vos programmes."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:62
msgid "Here are some existing types in [!thelang]:"
msgstr "Voici quelque uns des types de données existants en [!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>, pour les entiers;"

#. 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>, pour les nombres à virgule;"

#. 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>, pour les booléens, "
"c'est-à-dire les variables dont la valeur est soit \"[!c]1[/!][!java|"
"scala]vrai[/!]\" soit \"[!c]0[/!][!java|scala]faux[/!]\";"

#. 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>, pour les chaînes de caractères."

#. 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 ""
"Comme vous pouvez le voir, les variables ne sont pas <b>typées</b> en "
"Python, ce qui veut dire qu'elles ne sont pas spécialisées sur un type de "
"données particulier. Il est tout à fait envisageable de stocker des nombres "
"dans une variable, puis d'y mettre des lettres un peu plus tard. Les valeurs "
"elles-mêmes ont bien entendu un type, mais pas les variables. On dit alors "
"que python est un langage <b>dynamiquement typé</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 ""
"D'autres langages (comme le Java, le Scala ou le C) sont plus restrictifs et "
"imposent de spécialiser chaque variable pour un type donné (on dit que ce "
"sont des langages <b>statiquement typés</b>). Cela semble bien plus "
"contraignant à première vue, mais ce genre de restriction permet au "
"compilateur de détecter plus d'erreurs de logique pour vous. D'une certaine "
"manière, il est plus facile d'écrire du Python, mais le typage de ces "
"langages empêche certaines erreurs de se glisser dans les programmes."

#. 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 ""
"Si vous savez que votre «variable» ne va jamais changer de valeur (par "
"exemple parce qu'il s'agit de la taille de l'écran ou une autre constante du "
"genre), alors vous devriez en faire une <b>valeur</b> plutôt qu'une "
"variable.\n"
"Utilisez simplement le mot-clé <code>val</code> au lieu de <code>var</"
"code>. \n"
"Le compilateur pourra alors faire plus de vérifications pour aider les "
"étourdis cherchant à modifier les constantes. Plus intéressant, le "
"compilateur parvient également à produire du code plus rapide dans certains "
"cas."

#. 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 ""
"C'est la même histoire pour les chaînes, nombres à virgule flottante et les "
"booléens."

#. 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* nom = \"Martin Quinson\";\n"
"double taille=1.77; <span class=\"comment\">// en mètres</span>\n"
"boolean marie=1; <span class=\"comment\">// Signifie vrai; le contraire (faux) s'écrirait 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 ""
"String nom = \"Martin Quinson\";\n"
"double taille=1.77; <span class=\"comment\">// en mètres</span>\n"
"boolean marie=true; <span class=\"comment\">// Signifie vrai; le contraire (faux) s'écrirait \"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 nom:String = \"Martin Quinson\"; <span class=\"comment\">// impossible de le modifier (c'est une valeur)</span>\n"
"var taille: Double = 1.77; <span class=\"comment\">// en metre</span>\n"
"var marie = true; <span class=\"comment\">// Signifie vrai; le contraire (faux) s'écrirait \"false\"</span>\n"
"<span class=\"comment\">// Scala sait que 'true' est une valeur de type Boolean, pas besoin de le répéter</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 ""
"prenom = \"Martin\"\n"
"nom = 'Quinson' <span class=\"comment\"># les simples et les doubles quotes fonctionnent ici</span>\n"
"devise = \"Je ne finis jam' (mais je continue d'essayer)\" <span class=\"comment\"># avoir des quotes simples dans des doubles quotes fonctionne</span> \n"
"taille=1.77 <span class=\"comment\"># en mètre</span>\n"
"marie=True <span class=\"comment\"># Signifie 'vrai'; le contraire (faux) serait marqué 'False'</span>"

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

#. 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 ""
"Une fois que votre variable est déclarée, vous pouvez y <i>affecter</i> une "
"nouvelle valeur plus tard dans votre programme. C'est vraiment très simple :"

#. 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 ""
"À droite du signe égal, on peut mettre une expression quelconque, qui peut "
"contenir des constantes, des variables et des opérations :"

#. 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]greeting = \"Hello \"+name[!java];[/!] <span class=\"comment\">[!python]#[/!][!scala|java]//[/!] + est (également) l'opérateur pour concaténer les chaînes (càd pour les fusionner)[/!]</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 ""
"Il est temps de faire un exercice un peu plus dur, n'est ce pas ? L'objectif "
"cette fois est d'avancer jusqu'au biscuit qui se trouve devant la buggle, le "
"ramasser, revenir à la position initiale, puis de poser le biscuit."

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

#. 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 ""
"Pour résoudre ce problème, il faut le décomposer en parties que vous savez "
"résoudre. Par exemple, on peut vouloir faire les étapes suivantes :"

#. type: Content of: <p><ol><li>
#: src/lessons/welcome/variables/Variables.html:129
msgid "Move forward until located over a baggle"
msgstr "Avancer jusqu'à se trouver sur un biscuit"

#. type: Content of: <p><ol><li>
#: src/lessons/welcome/variables/Variables.html:130
msgid "Pickup the baggle"
msgstr "Ramasser le biscuit au sol"

#. 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 "Reculer du même nombre de cases que ce qu'on a avancé"

#. type: Content of: <p><ol><li>
#: src/lessons/welcome/variables/Variables.html:132
msgid "Drop back the baggle"
msgstr "Reposer le biscuit au sol"

#. 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 ""
"Bien entendu, il est impossible de reculer du bon nombre de case à l'étape 3 "
"si l'on a pas compté le nombre de pas faits à la première étape. On va pour "
"cela utiliser une variable, que l'on peut nommer <code>nbPas</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 ""
"On crée cette variable (de type <code>int</code>) avant l'étape 1, on "
"l'initialise à 0, et chaque fois qu'on avance d'un pas, on l'incrémente de 1 "
"(<code>nbPas = nbPas + 1;</code>[!java|c] ou <code>nbPas++;</code>, les deux "
"écritures sont équivalentes[/!])."

#. 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 ""
"Si vous connaissez le Java ou d'autres langages du genre, vous serez "
"probablement tenté d'utiliser l'opérateur <code>++</code> pour incrémenter "
"la variable. Malheureusement, cet opérateur n'existe pas en [!thelang]. "
"C'est parce qu'il serait difficile de savoir quoi faire quand on l'applique "
"à un nombre complexe ou à une chaîne de caractères. Le problème ne se pose "
"pas en Java, où ++ est défini pour le type <code>int</code> qui n'est pas un "
"type d'objet mais un type primitif (si vous ne connaissez pas l'opérateur +"
"+, ignorez simplement ce paragraphe : cela n'existe pas en [!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 ""
"Ensuite, l'étape 3 consiste simplement à créer une nouvelle variable entière "
"<code>dejaFait</code> initialisée à zéro, et reculer d'un pas tant que "
"<code>dejaFait</code> n'est pas égal à <code>nbPas</code>, en incrémentant "
"<code>dejaFait</code> à chaque fois. Il faut utiliser l'opérateur <code>!=</"
"code> pour tester l'inégalité entre deux valeurs."

#. type: Content of: <p>
#: src/lessons/welcome/variables/Variables.html:161
msgid "It's your turn now!"
msgstr "À vous de jouer !"

#. type: Content of: <h2>
#: src/lessons/welcome/variables/RunFour.html:2
msgid "Run Four bases"
msgstr "La course des quatre 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 ""
"Aujourd'hui est un grand jour : la Grande Course des Buggles a commencé. "
"C'est une compétition traditionnelle par laquelle les jeunes buggles "
"prouvent leur valeur à la tribu. C'est à la fois une épreuve de force et "
"d'intelligence puisqu'il faut courir le plus vite possible, mais s'arrêter "
"dès que vous avez rejoint votre quatrième biscuit. Il faut que vous aidiez "
"les buggles à avancer tout en comptant les biscuits pour déterminer quand "
"s'arrêter."

#. type: Content of: <h2>
#: src/lessons/welcome/variables/RunHalf.html:2
msgid "The Four Halves run"
msgstr "La course des quatre moitiés"

#. 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 ""
"C'est le second jour de la Grande Course des Buggles. Comme d'habitude, il "
"faut courir jusqu'à trouver la case où vous devez vous arrêter. Mais cette "
"fois, vous devez vous arrêter quand vous aurez compté deux fois moins de "
"biscuits que de cases oranges plus une. En d'autres termes, la condition "
"d'arrêt est la suivante : <code>2 * biscuits = caseOrange + 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 ""
"Vous pouvez déterminer si vous vous trouvez sur une case orange avec la "
"méthode <code>estSurOrange()</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 ""
"Les boucles <tt>while</tt> sont bien adaptées aux situations où l'on veut "
"réaliser une action tant qu'une condition est réalisée, mais elles sont "
"moins pratiques pour réaliser une action un nombre prédéterminé de fois. Par "
"exemple, lorsque nous voulions reculer de <code>nbPas</code> dans l'exercice "
"précédent, il fallait créer une nouvelle variable, l'initialiser, et "
"demander à reculer tant que la nouvelle variable n'était pas égale à "
"<code>nbPas</code>, en incrémentant cette variable à la main à la fin du "
"corps de la boucle."

#. 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 ""
"Dans ce genre de cas, les boucles de type <code>for</code> sont plus "
"pratique. Leur syntaxe est la suivante :"

#. 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>initialisation</b>; <b>condition</b>; <b>increment</b>) {\n"
"    <b>action</b>();\n"
"}[/!][!python]for <b>variable</b> in <b>sequence de valeurs</b>:\n"
"    <b>action</b>()[/!][!scala] for (<b>variable</b> &lt;- <b>premiereValeur</b> to <b>derniereValeur</b>) { \n"
"    <b>action</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 ""
"Par exemple, pour répéter le corps de boucle <code>n</code> fois, \n"
"[!python]il est pratique d'utiliser l'instruction <code>range(n)</code>\n"
"  pour générer la séquence de n entiers allant de 0 à n-1.[/!]\n"
"[!java|scala|c]il faut écrire:[/!]"

#. 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 compteur=0; compteur&lt;n; compteur++) {\n"
"    <b>action</b>();\n"
"}[/!][!c]int compteur;\n"
"for (compteur=0; compteur&lt;n; compteur++) {\n"
"    <b>action</b>();\n"
"}[/!][!python]for <b>compteur</b> in <b>range(n)</b>:\n"
"    <b>action</b>()[/!][!scala] for (<b>compteur</b> &lt;- <b>1</b> to <b>10</b>) { \n"
"    <b>action</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 ""
"Ce code est équivalent du point de vue de l'ordinateur, mais du point de vue "
"du programmeur, ce n'est pas forcément la même chose. L'une ou l'autre forme "
"peut rendre le code plus facile à lire, en fonction de la situation. C'est "
"donc à vous, le programmeur, de choisir la forme de boucle est la plus "
"adaptée à chaque cas. L'objectif absolu doit être de garder votre code aussi "
"simple que possible en toute situation. De la sorte, vos journées resteront "
"plaisantes et productives."

#. 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 compteur = 0;\n"
"while (compteur &lt; n) {\n"
"    <b>action</b>();\n"
"    <b>compteur++</b>;\n"
"}[/!][!python]compteur=0\n"
"while compteur &lt; n: \n"
"    action()\n"
"    compteur = compteur + 1[/!][!scala]\n"
"var compteur = 0\n"
"while (compteur &lt; n) {\n"
"    <b>action</b>()\n"
"    compteur = compteur + 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 ""
"Dans ce cas, le code avec une boucle <code>for</code> est plus simple à "
"lire, non?"

#. 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 ""
"On peut imaginer des utilisations bien plus avancées des boucles <tt>for</"
"tt> car toute instruction valide peut être utilisée comme initialisation, "
"condition et incrémentation. L'exemple suivant est un peu extrême, puisqu'il "
"n'y a même pas de corps de boucle. La buggle est avancée jusqu'à se "
"retrouver face au mur dans la condition et l'incrémentation."

#. 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 (; !estFaceMur() ; avance()) { \n"
"   <span class=\"comment\">/* rien dans le corps de boucle */</span>\n"
"}\n"
"<span class=\"comment\">/* la buggle est maintenant face à un mur */</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 ""
"Si vous avez l'intention d'imbriquer plusieurs boucles, il est possible de "
"l'écrire en une seule ligne en Scala. Les deux morceaux de code sont "
"équivalents:"

#. 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 (compteur1 &lt;- 1 to n) {\n"
"    for (compteur2 &lt;- 1 to m) {\n"
"       actions()\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 (compteur1 &lt;- 1 to n; compteur2 &lt;- 1 to m) { <span class=\"comment\">// Séparez simplement les deux conditions de boucle par un point-virgule (;)</span>\n"
"    actions()\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 ""
"Il s'agit maintenant de refaire le même exercice que précédemment (avancer "
"jusqu'à trouver un baggle, le ramasser, revenir là où on était au début puis "
"reposer le baggle), mais en utilisant une boucle <tt>for</tt> pour revenir "
"au point de départ à la place d'une boucle <code>while</code>."

#. type: Content of: <p>
#: src/lessons/welcome/loopfor/LoopFor.html:88
msgid "Once done, you can proceed to next exercise."
msgstr "Une fois ceci fait, vous pouvez passez à l'exercice suivant."

#. type: Content of: <h2>
#: src/lessons/welcome/loopfor/LoopStairs.html:2
msgid "Stairway to Heaven"
msgstr "la voie du paradis"

#. 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 ""
"Votre buggle est un peu déprimée aujourd'hui, mais elle est face à un "
"escalier magique&nbsp;: il mène directement au paradis, et des couleurs "
"joyeuses jaillissent de partout quand on l'emprunte."

#. 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 ""
"Votre objectif est de prendre cet escalier, une marche après l'autre. "
"Commencez par trouver les quatre instructions à réaliser pour gravir une "
"marche, puis placez-les dans une boucle pour gravir toutes les marches."

#. 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 ""
"Avant cela, vous devez marcher un peu pour atteindre l'escalier et vous "
"assurer que vous êtes dans la bonne position pour que le contenu de votre "
"boucle s'exécute correctement. \n"
"Une fois que vous avez atteint le paradis, faites quelques pas dans votre "
"nouvelle demeure.\n"
"Chemin faisant, les couleurs apparaissent d'elles-mêmes sans que vous n'ayez "
"rien à faire."

#. type: Content of: <h2>
#: src/lessons/welcome/loopfor/LoopCourse.html:2
msgid "Training Buggle"
msgstr "Entraînement de 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 ""
"Aujourd'hui, votre buggle veut s'entraîner sérieusement. Elle veut courir "
"jusqu'à brûler la piste! Ses super-chaussures, sont parfaites pour courir "
"comme une dingue, mais malheureusement, elles abîment un peu la piste à la "
"longue..."

#. 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 ""
"Votre objectif est de faire 10 tours de piste, quel que soit le résultat. "
"Même si la piste souffre un peu, vous <b>DEVEZ</b> le faire. Souvenez vous, "
"la piste a 4 cotés, qui prennent chacun 8 pas à parcourir. Maintenant allez-"
"y et montrez-leur ce dont ces super-chaussures sont capables."

#. 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 ""
"Vous n'avez rien à faire de particulier à propos de la couleur de la piste : "
"vos chaussures la changeront pour vous. Contentez vous de courir."

#. type: Content of: <h2>
#: src/lessons/welcome/loopfor/LoopCourseForest.html:2
msgid "Outdoor Training Buggle"
msgstr "Course en forêt"

#. 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 ""
"Bon, notre dernier entraînement ne s'est pas très bien passé. La piste a "
"effectivement brûlé, et vous voilà banni des pistes d'athlétisme de la "
"région. Cette fois, notre buggle a décidé de s'entraîner en forêt, et avec "
"des chaussures normales pour être plus sûr. Le problème est qu'il faut faire "
"attention à ne pas tomber dans l'eau. La piste sur laquelle on peut courir "
"est plutôt étroite&nbsp;: pour un coté, il faut faire quatre pas en avant, "
"deux pas à gauche, quatre pas à droite, deux pas à droite, et quatre pas à "
"gauche. Il faut faire 7 tours de circuit."

#. 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 ""
"Raaah, mince. Courir sur l'herbe semble l'endommager également ! Bon, tant "
"pis. Faites vos 7 tours, et passez vite à l'exercice suivant avant que "
"quelqu'un ne constate les dégâts que vous avez fait..."

#. 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 ""
"Certaines cases du monde sont jaunes, mais les buggles ne supportent pas de "
"s'y trouver. Écrivez le code nécessaire pour avancer jusqu'à ce que le sol "
"devienne blanc. Vous pourrez utiliser la méthode <code>estSurBlanc()</code> "
"qui retourne vrai si le sol est blanc.."

#. 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 ""
"Le truc est que la plupart des buggles de ce monde se trouvent actuellement "
"sur ce sol jaune qui les énerve tant. Cela explique sans doute leur état de "
"panique, et le fait que toutes les buggles se ruent vers l'avant au début, "
"même la buggle qui ne se trouve pas sur du jaune. En d'autres mots, même si "
"le sol est blanc le premier coup, il faut quand même avancer d'un pas."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:13
msgid "The general idea is to do something like:"
msgstr "L'idée générale est donc de faire:"

#. type: Content of: <pre>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:14
#, no-wrap
msgid "move forward until located in a white cell"
msgstr "avancer jusqu'à se trouver sur une case blanche"

#. 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 ""
"La principale difficulté est que nous voulons exécuter le corps de boucle au "
"moins une fois, même si la buggle se trouve déjà sur une case blanche. Il "
"serait facile de dupliquer le corps de la boucle avant la boucle pour cela, "
"mais  ça serait une <b>très mauvaise idée</b>. Dupliquer du code est une "
"<b>très mauvaise habitude</b> et il faut toujours éviter de le faire."

#. 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 ""
"Quand on duplique le code, sa maintenance tourne facilement au cauchemar : "
"la lecture du code est très pénible puisque le lecteur doit s'assurer qu'il "
"n'y a effectivement aucune différence, même minime, entre les versions du "
"même code. Debugger le code devient plus long, puisqu'il faut corriger "
"toutes les versions. En fait, toutes les modifications deviennent pénibles. "
"Alors, vraiment, vous devrez <b>toujours</b> vous efforcer d'éviter la "
"duplication du code quand c'est possible. Et la bonne nouvelle est que c'est "
"toujours possible..."

#. type: Content of: <h3>
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:25
msgid "Executing the loop body at least once"
msgstr "Exécuter le corps de boucle au moins une fois"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:26
#: 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 ""
"Certain langage ont une construction spécifique pour cela, mais pas Python. "
"Qu'à cela ne tienne, on s'en sort très bien sans. Une bonne manière est "
"d'avoir une variable dédiée indiquant si c'est la première fois que l'on "
"rentre dans la boucle :"

#. 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 ""
"premiereFois = True\n"
"while premiereFois or (les autres conditions):\n"
"  premiereFois = False\n"
"  (le corps de la boucle)\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 ""
"Quand <code>premiereFois</code> est vraie, le corps de la boucle est exécuté "
"même si les autres conditions impliqueraient le contraire. Une fois que le "
"corps de boucle a été exécuté, <code>premiereFois</code> est mis à faux et "
"n'influe plus jamais la décision d'entrer dans le corps de boucle."

#. 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 ""
"Dans une boucle <tt>while</tt>, la condition est évaluée avant toute chose, "
"et si elle est fausse, le corps de la boucle n'est jamais exécuté. Il arrive "
"parfois que l'on veuille que le corps de la boucle soit évalué au moins une "
"fois, même si la condition est initialement fausse. On utilise pour cela une "
"variante de la boucle <tt>while</tt>, dont la syntaxe est la suivante en [!"
"thelang].[!java|c]Ne pas oublier le point virgule (;) après la condition, "
"c'est obligatoire.[/!]"

#. 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>action()</b>[!java];[/!]\n"
"} while (<b>condition</b>)[!java];[/!]"

#. type: Content of: <h2>
#: src/lessons/welcome/loopdowhile/Poucet1.html:2
msgid "Tracks of buggles"
msgstr "La buggle Petite Poucette"

#. 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 ""
"Votre buggle est perdue dans un étrange labyrinthe, et elle a besoin de vous "
"pour trouver la sortie (représentée par les cases orange). Vous ne pouvez "
"pas lui donner son chemin tout simplement avec quelque chose comme "
"<code>droite();avance();avance();</code> parce qu'il faut secourir deux "
"buggles à la fois, perdues dans des labyrinthes similaires mais différents. "
"Vous pouvez passer à l'autre monde en cliquant sur le menu défilant au "
"dessus de l'endroit où est dessiné le monde. C'est là où il est écrit \"Deep "
"Forest\" pour l'instant (forêt profonde), et si vous passez à \"Deeper Forest"
"\" (forêt encore plus profonde), vous verrez l'autre monde."

#. 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 ""
"La bonne nouvelle est que le chemin vers la sortie est en quelque sorte "
"écrit au sol. Ces mondes sont composés de plusieurs corridors, avec des "
"baggles par terre. À chaque embranchement, il faut prendre à gauche si le "
"corridor qu'on vient de parcourir contient 3 baggles ou plus, ou à droite "
"s'il contient 2 baggles ou moins."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:14
msgid ""
"You should count exactly 5 cells per corridor, the one at the intersection "
"counting as the last cell of the previous corridor, not as the first cell "
"after your turn."
msgstr ""
"Vous devez compter exactement 5 cases par couloir. Les cases aux "
"intersections doivent être comptées comme les dernières de leur couloir, pas "
"comme les premières après avoir tourné."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:17
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 ""
"La forme générale de votre code doit donc être quelque chose comme «tant que "
"je n'ai pas trouvé la sortie, prendre le prochain couloir pour décider s'il "
"faut tourner à gauche ou à droite au prochain embranchement». Vous pouvez "
"déterminer si vous avez rejoint la sortie (indiquée en orange) avec la "
"méthode <code>sortieTrouvee()</code> fournie."

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:21
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 ""
"Pour prendre un couloir, il suffit de courir d'une intersection à l'autre "
"tout en comptant les biscuits en chemin. C'est facile : il y a 5 cases dans "
"chaque corridor, donc une simple boucle <code>for</code> fera l'affaire."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/welcome/loopdowhile/Poucet1.html:25
msgid "I cannot imagine how to count the baggles I see."
msgstr "Je n'arrive pas à imaginer comment compter les baggles que je vois"

#. type: Content of: <p><div>
#: src/lessons/welcome/loopdowhile/Poucet1.html:26
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 ""
"Il vous faut une variable initialisée à zéro et incrémentée à chaque fois "
"que vous voyez un baggle. Une variable utilisée ainsi est souvent appelée un "
"<i>compteur</i>."

#. type: Content of: <p><div>
#: src/lessons/welcome/loopdowhile/Poucet1.html:28
msgid ""
"Don't forget to reset your counter to 0 at the beginning of each corridor!"
msgstr "N'oubliez pas de remettre le compteur à 0 au début de chaque couloir!"

#. type: Content of: <p>
#: src/lessons/welcome/loopdowhile/Poucet1.html:31
msgid ""
"Oh, and when you reach the exit, don't forget to take an extra step to "
"actually exit the maze!"
msgstr ""
"Oh, et quand vous parviendrez à trouver la sortie, n'oubliez pas de faire un "
"pas de plus pour vous échapper effectivement."

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

#. 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 ""
"L'objectif de cet exercice est de reproduire le motif de la première colonne "
"en le décalant d'une case (voir l'onglet «Objectif» pour plus de détails). "
"La grande différence entre cet exercice et les précédents sur les motifs, "
"c'est qu'il faut maintenant lire (sur la première colonne) le motif "
"souhaité, puis le reproduire ensuite. Il est impossible de faire autrement "
"car votre programme sera exécuté par trois buggles dans trois mondes "
"différents, chacune ayant un motif propre à reproduire."

#. 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 ""
"Une possibilité est de lire la prochaine case, puis d'aller la recopier en "
"position, avant de revenir lire la case suivante, etc. Mais comme vous "
"n'avez pas le droit d'utiliser les méthodes permettant de téléporter la "
"buggle à une case particulière (<code>setPos()</code> et autres), cette "
"façon de faire va être très pénible à mettre en place."

#. 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 ""
"Le plus simple est de stocker l’enchaînement de couleurs constituant le "
"motif dans \n"
"[!java|scala]un <b>tableau</b>[/!][!python]une <b>liste</b>[/!].  \n"
"Mais avant de pouvoir faire cela, nous devons en apprendre un peu plus sur "
"les [!java|scala]tableau[/!][!python]listes[/!]."

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

#. 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]Un tableau[/!][!python]Une liste[/!] est une séquence ordonnée "
"de variables qui marchent ensemble. \n"
"C'est un peu similaire à une commode dont les différents tiroirs peuvent "
"stocker des valeurs différentes. \n"
"Chaque variable de la séquence est identifiée par sa position et peut "
"stocker une valeur spécifique.\n"
"[!java|scala]Toutes les cellules d'un tableau doivent stocker des valeurs du "
"même type de données parce que les tableaux sont homogènes en [!thelang]. \n"
"Il est cependant possible de contourner cette restriction en utilisant le "
"type de données <code>[!java]Object[/!][!scala]Any[/!]</code> qui peut "
"contenir [!java]presque[/!] tous les autres type de données[!scala] («any» "
"veut dire «n'importe» en anglais)[/!].\n"
"[!java]Les types primitifs comme ceux que nous avons utilisé jusqu'à présent "
"(int, boolean, double, char, etc) ne peuvent pas être stockés dans une "
"variable Object, mais leurs variantes objectifiées (Integer, Boolean, "
"Double, Char, Boolean, etc) peuvent l'être.[/!] \n"
"Il est cependant raisonnable de rendre ses tableaux aussi spécifiques que "
"possible. Si vous avez l'intention de stocker des entiers, faites en un "
"tableau de [!java]integer[/!][!scala]Int[/!], pas de [!java]Object[/!][!"
"scala]Any[/!].[/!] \n"
"[!python]Les listes peuvent contenir des données de différents types, en "
"mélangeant par exemple quelques valeurs entières dans certaines cellules "
"avec des entiers dans d'autres cellules.[/!]"

#. 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 est le nom [!python]de la liste[/!][!scala|java]du tableau[/!], \n"
"[!java|python]T[0][/!][!scala]T(0)[/!] est le nom de la première case, \n"
"[!java|python]T[1][/!][!scala]T(1)[/!] de la deuxième case, \n"
"[!java|python]T[2][/!][!scala]T(2)[/!] de la troisième case, etc... \n"
"Et oui, la première case est [!java|python]T[0][/!][!scala]T(0)[/!] et la "
"dernière case\n"
"[!python]d'une liste[/!][!scala|java]d'un tableau[/!] de taille N est \n"
"[!java|python]T[N-1][/!][!scala]T(N-1)[/!]. \n"
"Cela peut sembler étrange de commencer à compter à partir de 0 et non de 1, "
"mais c'est ainsi (et cela s'explique par des raisons historiques obscures)."

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:48
msgid "Basic usage"
msgstr "Usage de base"

#. 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 ""
"On peut utiliser une variable entière <i>i</i> pour accéder avec [!java|"
"python]T[i][/!][!scala]T(i)[/!] aux cases.\n"
"Quand <i>i</i> vaut 0 alors [!java|python]T[i][/!][!scala]T(i)[/!] dénote la "
"case [!java|python]T[0][/!][!scala]T(0)[/!]; \n"
"lorsque <i>i</i> vaut 10,  [!java|python]T[i][/!][!scala]T(i)[/!] dénote  [!"
"java|python]T[10][/!][!scala]T(10)[/!].\n"
"On dit alors que <i>i</i> est un <b>indice</b> dans [!java|scala]le "
"tableau[/!][!python]la liste[/!] T.\n"
"<code>[!java|python]T[i][/!][!scala]T(i)[/!]</code> peut être utilisé comme "
"n'importe quelle variable.\n"
"On peut lui affecter une nouvelle valeur:"

#. 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 "On peut réutiliser et tester cette valeur :"

#. 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 "On peut tester cette valeur :"

#. 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]#[/!] instructions...\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 ""
"Il est également très simple de parcourir [!java|scala]tout le tableau[/!][!"
"python]toute la liste[/!], par exemple pour initialiser chaque cellule."

#. 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]La notation <code>T.length</code> permet d'accéder à la taille "
"(«length» en anglais) du tableau T,[/!]\n"
"[!python]La fonction <code>len()</code> renvoie la longueur de la liste T,"
"[/!] \n"
"ce qui permet de construire facilement la boucle.\n"
"[!python]En fait, la fonction <code>len()</code> est bien plus générique et "
"peut être utilisée pour calculer la taille de nombreux objets. Appliquée à "
"une chaîne de caractères par exemple, elle retourne le nombre de caractères "
"composant cette chaîne.[/!]\n"
"[!scala]N'oubliez pas de commencer à <code>0</code> pour terminer à <code>T."
"length-1</code> au lieu de <code>1</code> to <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 ""
"Si vous souhaitez simplement parcourir les valeurs de T sans avoir besoin de "
"l'index de chaque valeur, vous pouvez écrire simplement :"

#. 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"
"  action()[!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]Cette construction s'appelle une boucle <code>for</code> étendue en "
"Java. \n"
"La variable <i>i</i> prend successivement toutes les valeurs de l'ensemble "
"placé à droite des deux-points (:).[/!] \n"
"[!python|scala]Cette écriture est finalement très semblable à la "
"précédente. \n"
"Simplement, <code>[!python]range(n)[/!][!scala]i to j[/!]</code> retourne un "
"ensemble d'entiers sur lequel la boucle <code>for</code> itère.\n"
"En fait, [!thelang] offre d'autres moyens très élégants de traverser des [!"
"python]listes[/!][!scala]tableaux[/!] \n"
"et d'autres collections de données. Mais cela devrait être le sujet "
"d'exercices spécifiques (qui restent à écrire dans PLM).[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:98
msgid "Declaring [!python]a list[/!][!java|scala]an array[/!]"
msgstr "Déclarer [!python]une liste[/!][!java|scala]un tableau[/!]"

#. 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 ""
"Si vous connaissez à l'avance le contenu de votre liste, vous pouvez "
"affecter ces valeurs directement. Placez-les simplement entre crochets et "
"séparées par des virgules comme ceci&nbsp;:"

#. 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 est maintenant une liste de 5 valeurs, toutes des entiers</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 ""
"Dans le cas contraire, le plus simple est de créer une liste vide puis "
"d'ajouter chaque valeur séparément à la liste&nbsp;:"

#. 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\"># L2 est maintenant une liste vide</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\"># Son contenu est maintenant le même que celui de L ci-dessus</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 ""
"Pour créer une variable nommée <b>T</b> pouvant contenir un tableau "
"d'entiers, on écrira :"

#. 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> indique que les éléments du tableau sont de type "
"entier;\n"
"<code>[]</code> indique que nous parlons d'un tableau tandis que <code>T</"
"code> est le nom de la variable. \n"
"Pour des raisons historiques, cela peut également être écrit sous la forme "
"<code>int T[]</code> (avec [] à droite du nom de la variable), \n"
"mais cette forme est moins lisible et devrait probablement être évitée.[/!]\n"
"[!scala]La notation <code>[Int]</code> spécialise le type <code>Array</code> "
"(«tableau» en anglais), qui est générique. Cela spécifie que chaque case du "
"tableau est un entier. Le type d'un tableau de booléens s'écrirait "
"simplement <code>Array[Boolean]</code>.[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/array/basics/Array1.html:130
msgid "Allocating an array"
msgstr "Allocation d'un tableau"

#. 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 ""
"Déclarer un tableau <code>T</code> nous réserve juste le nom <code>T</code> "
"pour l'utiliser plus tard, mais pas la place en mémoire pour stocker les "
"cases. Le tableau n'est pas initialisé : il n'a pas de valeur. Que voudrait "
"dire <code>T[4]</code> si nous n'avons pas encore dit que <code>T</code> est "
"un tableau de 5 éléments ?"

#. 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 "Avant tout, il faut donc lui affecter une valeur à <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> indique qu'il faut créer quelque chose, et \n"
"<code>[!java]int[10][/!][!scala]Array[Int](10)[/!]</code> indique qu'il "
"s'agit d'un tableau de 10 valeur entières. En réponse, un tableau d'entiers "
"de longueur 10 est crée en mémoire, et la variable <code>T</code> "
"<b>référence</b> ce tableau."

#. 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 ""
"La taille d'un tableau est fixée et ne peut plus être changée après la "
"création du tableau. Pour connaître la taille d'un tableau <code>T</code>, "
"on peut consulter la variable <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 ""
"Lors de l'allocation, vous pouvez spécifier la taille à utiliser avec une "
"variable: \n"
"<code>[!java]int[] T = new int[i];[/!][!scala]var T = new Array[Int](i);"
"[/!]</code> \n"
"Dans ce cas, la taille du tableau est fixée à la valeur de <code>i</code> "
"<i>quand <code>new</code> a été appelé</i>. \n"
"La taille du tableau ne peut toujours pas être modifiée. Même si la valeur "
"de <code>i</code> est modifiée ensuite, la taille reste la même.\n"
"[!java]Enfin, il est interdit d'écrire quelque chose comme <code>int T[10];</"
"code> pour déclarer la variable. Il faut absolument utiliser <code>new</"
"code> pour l'allouer, comme dans <code>int[] T = new int[10];</code> [/!]"

#. type: Content of: <h4>
#: src/lessons/welcome/array/basics/Array1.html:157
msgid "Declaration and initialization"
msgstr "Déclaration et initialisation"

#. 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 ""
"Si vous connaissez le contenu de votre tableau à l'avance, vous pouvez le "
"déclarer, l'allouer et l'initialiser en un coup:"

#. 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 ""
"Pour connaître la taille du tableau à allouer, le compilateur compte les "
"valeurs données.  Ce code est équivalent à :"

#. 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 "C'est aussi équivalent au code :"

#. 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 ""
"Les [!python]listes[/!][!scala|java]tableaux[/!] et les paramètres de "
"méthodes"

#. 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 ""
"On peut tout à fait passer [!java|scala]un tableau[/!][!python]une liste[/!] "
"en paramètre d'une méthode. La méthode peut alors l'utiliser comme si la "
"variable avait été définie localement:"

#. 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 a42Premier(int[] tableau) {\n"
"    return tableau[0] == 42;\n"
"}[/!][!python]def a42Premier(liste):\n"
"  return liste[0] == 42[/!][!scala]def a42Premier(tableau:Array[Int]):Boolean = {\n"
"  return tableau(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 "Coté appelant, c'est aussi simple :"

#. 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\">// Initialisation des valeurs omise</span>\n"
"[/!]if (a42Premier(tab))[!java|scala] {[/!][!python]:[/!]\n"
"   <span class=\"comment\">[!java|scala]//[/!][!python]#[/!] faire des choses</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 ""
"Si vous voulez allouer et initialiser le tableau au vol lors du passage de "
"paramètre, c'est un peu plus compliqué car il faut dire au compilateur le "
"type du paramètre que vous construisez. Il faut alors utiliser la "
"construction suivante, même si elle n'est pas très belle."

#. 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\">// faire des choses</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 ""
"Les méthodes peuvent également retourner des [!java|scala]tableaux[/!][!"
"python]listes[/!] comme résultat sans aucun problème.\n"
"Voici une méthode retournant [!java|scala]un tableau[/!][!python]une "
"liste[/!] de la taille demandée après avoir initialisé toutes les cases à la "
"valeur 42."

#. 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[] remplir42(int taille) {\n"
"    int[] res = new int[taille];\n"
"    for (int i=0; i&lt;taille; i++) \n"
"        res[i] = 42;\n"
"    return res;\n"
"}[/!][!scala]def remplir42(taille:Int):Array[Int] = {\n"
"    var res = new Array[int] (taille)\n"
"    for (i &lt;- 0 to taille -1) {\n"
"        res(i) = 42;\n"
"    }\n"
"    return res;\n"
"}[/!][!python]def remplir42(taille):\n"
"    res = []\n"
"    for i in range(taille):\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 "Objectif de l'exercice"

#. 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 ""
"Enfin ! Après toutes ces explications, nous pouvons revenir à l'exercice."

#. 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 ""
"Votre mission est plutôt simple au fond. Votre code doit sauvegarder le "
"motif de couleurs observé sur la première colonne. Il faut bien entendu "
"sauvegarder ces valeurs dans [!java|scala]un tableau[/!][!python]une "
"liste[/!].  \n"
"[!python]Le plus simple pour cela est de créer une liste vide puis d'y "
"adjoindre (avec <code>append()</code> les différentes couleurs lues sur le "
"sol de la première colonne (avec <code>getCouleurSol()</code>).[/!] \n"
"[!java|scala]Pour cela, il faut déclarer et créer un tableau de variables de "
"type <code>Color</code>. Attention, les différents mondes ne sont pas tous "
"de la même taille et il faut utiliser <code>getMondeHauteur()</code> pour "
"trouver la taille du monde courant. Une fois créé, remplissez le tableau en "
"lisant les couleurs au sol de la première colonne (avec "
"<code>getCouleurSol()</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 ""
"Une fois le motif de la première colonne lu et sauvegardé, il faut le "
"répliquer sur toutes les colonnes, par exemple en exécutant "
"<code>getMondeLargeur()</code> fois une méthode écrite tout exprès."

#. type: Content of: <h1>
#: src/lessons/welcome/array/basics/Array2.html:2
msgid "[!java|scala]Arrays[/!][!python]Lists[/!], Knotting and Modulos"
msgstr "[!java|scala]Tableaux[/!][!python]Listes[/!], tricot et modulo"

#. 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 ""
"Cet exercice ressemble au précédent : il faut reproduire le motif de "
"couleurs de la première colonne dans les colonnes suivantes."

#. 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 ""
"La première différence est que le monde est entouré d'un mur : il faut donc "
"modifier légèrement les parcours pour s'assurer que la buggle ne se cogne "
"pas sur les bords. Le plus simple est de traiter la première case de la "
"colonne en dehors de la boucle <code>for</code> (avant la boucle), et faire "
"seulement <code>getWorldHeight()-1</code> pas dans la boucle."

#. 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 ""
"La seconde différence est que le décalage à effectuer entre les colonnes "
"n'est pas fixe, mais écrit sur la première case de chaque colonne. Pour "
"obtenir l'information sous forme d'un entier, on peut utiliser:"

#. 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 decalage = Integer.parseInt(litMessage())[/!][!python]decalage = int( litMessage() )[/!][!scala]val decalage = litMessage().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>litMessage()</code> lit l'indication au sol sous forme d'une chaîne de "
"caractères, \n"
"tandis que <code>[!java]Integer.parseInt(ch)[/!][!scala]ch.toInt[/!][!"
"python]int(ch)[/!]</code> \n"
"transforme la chaîne <code>ch</code> en un entier en la <i>lisant</i>."

#. 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 ""
"Ensuite, pour trouver la bonne couleur à utiliser, le plus simple est "
"d'utiliser l'opérateur <code>%</code> (modulo). Par exemple, <code>(i + 5) % "
"taille</code> permet de trouver la <code>i</code>ieme case d'un tableau de "
"taille <code>taille</code> quand on applique un décalage de <code>5</code> "
"cases."

#. type: Content of: <p>
#: src/lessons/welcome/array/basics/Array2.html:28
msgid "You're up."
msgstr "À vous de jouer."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/IndexOfValue.html:2
msgid "Searching for a given value"
msgstr "Chercher une valeur donnée"

#. 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 ""
"L'objectif de cet exercice est de chercher la case contenant une valeur "
"donnée, et de retourner sa position."

#. 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 ""
"Pour cela, il vous faut remplir le corps de la méthode <code>indexOf()</"
"code>. Ses paramètres sont le tableau <code>tab</code> à explorer et la "
"valeur <code>lookingFor</code> à chercher. Si la valeur <code>lookingFor</"
"code> n'est pas dans le tableau <code>tab</code>, la méthode doit renvoyer "
"-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 ""
"L'idée de l'algorithme est de parcourir tout le tableau en vérifiant la "
"valeur\n"
"contenue dans chaque case. S'il s'agit de la valeur cherchée, vous devez\n"
"renvoyer l'indice de la case actuellement explorée."

#. 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 ""
"N'oubliez pas que les cases sont numérotées à partir de 0. Donc, si vous "
"avez 3 cases, leurs indices seront 0, 1 et 2. Il n'y aura pas de case "
"numérotée 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 ""
"Ensuite, souvenez vous que le nombre de cases d'un tableau peut être "
"retrouvé\n"
"grâce à l'attribut <code>length</code>. Donc, si votre tableau s'appelle\n"
"<code>tableau</code>, sa taille sera <code>tableau.length</code>. Notez "
"qu'il\n"
"n'y a pas de () après <code>length</code>. Un attribut est une sorte de\n"
"variable embarquée dans un autre objet (ici, le tableau)."

#. 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 ""
"Donc, la dernière valeur d'un tableau est donnée par <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 ""
"Ensuite, souvenez vous que le nombre de cases d'un tableau peut être "
"retrouvé\n"
"grâce à la fonction <code>len()</code>. Donc, si votre tableau s'appelle\n"
"<code>tableau</code>, sa taille sera <code>len(tableau)</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 ""
"Donc, la dernière valeur d'un tableau est donnée par <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 "Indice de la valeur maximale"

#. 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 ""
"Dans cet exercice, vous devez calculer l'indice de la case contenant la plus "
"grande valeur du tableau."

#. 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 ""
"Pour cela, remplissez la méthode <code>indexOfMaximum()</code> dont le "
"paramètre est le tableau à explorer. Si jamais la plus grande des valeurs du "
"tableau est répétée plusieurs fois, votre méthode doit renvoyer la position "
"de la première occurrence."

#. 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 ""
"Pour résoudre cet exercice, vous devez parcourir le tableau. Pour chaque "
"case,\n"
"si sa valeur est plus grande que la plus grande des valeurs que vous avez\n"
"rencontré jusque là, sauvegardez cette nouvelle championne et sa position. "
"Il\n"
"vous faut donc deux nouvelles variables; la valeur initiale de la "
"championne\n"
"pourrait être la valeur rangée dans la première case."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/AverageValue.html:2
msgid "Average value"
msgstr "Valeur moyenne"

#. 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 ""
"L'objectif de cet exercice est de calculer la valeur moyenne d'un tableau de "
"valeur entière."

#. 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 ""
"Vous devez donc remplir le corps de la méthode <code>average()</code> qui "
"prend en paramètre le tableau, et qui retourne en résultat la valeur "
"moyenne. Notez bien que cette méthode doit renvoyer un entier."

#. 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 ""
"Pour calculer la valeur moyenne d'un tableau, il faut parcourir l'ensemble "
"des valeurs du tableau, en faire la somme (vous aurez donc besoin d'une "
"variable pour conserver le résultat intermédiaire), puis diviser cette somme "
"par le nombre de valeur contenu dans le tableau."

#. 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 ""
"En Java, vous pouvez retrouver la taille d'un tableau <code>monTableau</"
"code> en consultant son attribut <code>length</code> (autrement dit, "
"<code>monTableau.length</code>). Notez qu'il n'y a pas de parenthèses après "
"<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 ""
"En python, retrouver la taille d'un tableau est aussi simple qu'appeler "
"<code>len(monTableau)</code>."

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

#. 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 ""
"Dans cet exercice, vous devez retrouver le maximum des valeurs stockées dans "
"un tableau. Pour cela, remplissez le corps de la méthode <code>maximum()</"
"code>, dont le paramètre est le tableau à explorer."

#. 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 ""
"Pour résoudre cet exercice, parcourez le tableau. Pour chaque case, si sa\n"
"valeur est plus grande que la plus grande des valeurs que vous avez "
"rencontré\n"
"jusque là, sauvegardez cette nouvelle championne pour retrouver sa valeur "
"plus\n"
"tard. Il vous faut donc une nouvelle variable, dont la valeur initiale peut "
"être\n"
"la valeur de la première case du tableau."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/OccurrenceOfValue.html:2
msgid "Occurrence of a value"
msgstr "Occurrences d'une valeur"

#. 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 ""
"Dans cet exercice, il vous faut calculer le nombre d'occurrences d'une "
"valeur donnée, c'est à dire le nombre de fois que cette valeur apparaît dans "
"le tableau. Pour cela, remplissez le corps de la méthode "
"<code>occurrences()</code>, qui retourne le nombre d'occurrences de la "
"valeur <code>lookingFor</code> dans le tableau <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 ""
"Pour calculer cette valeur, parcourez simplement le tableau en comptant le\n"
"nombre de cases contenant la valeur cherchée que vous rencontrez. Il vous "
"faut\n"
"donc un paramètre supplémentaire pour cela."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/Extrema.html:2
msgid "Maxima and Minima"
msgstr "Maximum et minimum"

#. 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 ""
"Dans cet exercice, vous devez renvoyer la différence entre le maximum (c'est "
"à dire la plus grande valeur du tableau) et le minimum (c'est à dire la plus "
"petite des valeurs). La valeur renvoyée est donc un nombre positif. "
"Attention, vous ne pouvez balayer les valeurs qu'une seule fois pour "
"récupérer toutes les informations dont vous avez besoin."

#. type: Content of: <h1>
#: src/lessons/welcome/array/search/SecondMaxValue.html:2
msgid "Second Biggest Value"
msgstr "La seconde plus grande valeur"

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

#. 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 "Comme d'habitude, vous ne devez effectuer qu'un seul parcours pour obtenir les informations nécessaires. Vous pouvez supposer que la seconde plus grande valeur existe effectivement (qu'il y a au moins deux valeurs dans le tableau) et que toutes les valeurs du tableau sont plus grandes que [!python] -100000000.[/!] [!java|scala]<code>Integer.MIN_VALUE</code> (qui est le plus petit entier existant en [!thelang]).[/!] "

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

#. 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 ""
"Soit un tableau d'entiers, renvoyez vrai si .. 1, 2, 3, .. apparaissent "
"quelque part dans le tableau."

#. 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 ""
"Cet exercice a été extrait pour PLM depuis l'excellent site d'exercices "
"http://codingbat.com/"

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

#. 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 ""
"Soit un tableau d'entiers, renvoyez le nombre de fois que deux 6 sont l'un à "
"la suite de l'autre dans le tableau. Comptez également le nombre de fois où "
"le deuxième \"6\" est en fait un 7."

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

#. 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 "Soit un tableau d'entiers, renvoyez le nombre de 9 dans ce tableau."

#. type: Content of: <h1>
#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:2
msgid "ArrayFront9"
msgstr "Tableau commençant par 9"

#. 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 ""
"Soit un tableau d'entiers, renvoyez vrai si l'un des 4 premiers éléments "
"dans ce tableau est un 9. Le tableau peut contenir moins de 4 éléments."

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

#. 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 ""
"Soit un tableau d'entiers, on dira qu'un triplet est une valeur qui apparaît "
"3 fois à la suite dans le tableau. Renvoyez vrai si le tableau ne contient "
"pas de triplet."

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

#. 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 ""
"Soit un tableau d'entiers, renvoyez vrai si il contient un motif 2,7,1 -- "
"une valeur, suivie de cette valeur plus 5, suivie par cette valeur moins "
"1. \n"
"Par exemple, 2,7,1 est un tel motif car 7=5+2 et 1=2-1. 3,8,2 est un autre "
"motif correspondant."

#. 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 ""
"De plus, le 271 compte même si le \"1\" diffère de 2 ou moins de la valeur "
"correcte.<"

#. type: Content of: <h1>
#: src/lessons/welcome/array/golomb/Golomb.html:2
msgid "Golomb sequence"
msgstr "La suite 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 ""
"La suite de Golomb est une suite d'entiers non décroissante où a(n) indique "
"le nombre de fois où n apparaît dans la suite, avec 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 ""
"Puisque a(1)=1, nous savons que 1 n'apparaît qu'une seule fois dans la "
"suite, ce qui impose à a(2) d'avoir une autre valeur. Comme a(2) est non-"
"décroissante, cette autre valeur doit être plus grande que 1. Puisque "
"a(2)>1, le chiffre 2 apparaît plus d'une fois dans la suite. Donc, 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 ""
"Puisque a(2)=2, le chiffre 2 apparaît deux fois dans la suite, ce qui nous "
"donne la valeur de a(3). Et ainsi de suite pour les valeurs suivantes de la "
"suite."

#. 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 "Écrivez une fonction calculant le Nième élément de la suite."

#. type: Content of: <h1>
#: src/lessons/welcome/array/island/Island.html:2
msgid "Buggles' Island"
msgstr "L'île des 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 ""
"Vous venez de recevoir les notes de voyage que votre vieille tante a rédigé "
"lors de ses visites aux Îles des Buggles. Elle a noté l'altitude à chaque "
"kilomètre pendant son voyage, ce qui donne des suites de nombres comme suit."

#. 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 "Voici une vue en coupe de l'île sur le parcours de votre tante :"

#. 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 mètres au dessus du niveau de la mer\n"
"   /***********\\ /*******\\     &lt;-- 1 mètre au dessus du niveau de la mer\n"
"***************************    &lt;-- niveau de la mer\n"
"| | | | | | | | | | | | | |\n"
"0 0 1 1 2 2 1 1 0 1 2 1 1 0    &lt;-- altitude en chaque point\n"

#. type: Content of: <p>
#: src/lessons/welcome/array/island/Island.html:21
msgid "This example is constituted of four levels of island:"
msgstr "Cet exemple est constitué de quatre niveaux d'île :"

#. 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 (l'île sur la gauche)"

#. 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 (la montagne au sommet de l'île à gauche)"

#. 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 (l'île de droite)"

#. type: Content of: <ul><li>
#: src/lessons/welcome/array/island/Island.html:27
msgid "2 (the mountain on the right)"
msgstr "2 (la montagne sur l'ile à droite)"

#. type: Content of: <p>
#: src/lessons/welcome/array/island/Island.html:30
msgid "This can also be visualized this way:"
msgstr "Cela peut également être visualisé ainsi :"

#. 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 ""
"Pourriez vous écrire un petit programme calculant le nombre de niveaux "
"d'îles dans une séquence d'altitudes donnée ? En fait, il existe une "
"solution itérative et une solution récursive à ce problème."

#. 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 ""
"Nous allons maintenant voir comment écrire nos propres méthodes. Il s'agit "
"en quelque sorte d'étendre le vocabulaire de la buggle en lui apprenant à "
"faire de nouvelles choses."

#. 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 ""
"Par exemple, nous avons vu dans un exercice précédent comment demander à la "
"buggle d'aller chercher le biscuit qui se trouve devant elle, et la ramener "
"à sa position initiale. S'il y a maintenant plusieurs biscuits sur le "
"plateau, et que nous voulons tous les ramener sur la ligne du bas, il faut "
"soit répéter ce code plusieurs fois, soit l'inclure dans une boucle. Dans "
"les deux cas, il faut que vous évitiez de dupliquer votre code pour qu'il "
"reste simple et lisible. Il serait mieux que la buggle comprenne un ordre de "
"type <code>vaChercher()</code> tout comme elle comprend un <code>[!"
"c]avancePas()[/!][!scala|java|python]avance()[/!]</code>."

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

#. 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 ""
"La syntaxe [!thelang] pour écrire une méthode simple nommée "
"<code>vaChercher</code> est la suivante:"

#. 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 vaChercher() {[/!][!python]def vaChercher():[/!][!scala]def vaChercher() {[/!]\n"
"  actions()[!java|c];[/!]\n"
"  encoreDesActions()[!java|c];[/!]\n"
"  dautresTrucs()[!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 ""
"Le corps de la méthode\n"
"[!java|scala|c](c'est-à-dire le bloc entre accolades)[/!]\n"
"[!python](c'est-à-dire le bloc indenté)[/!]\n"
"sera exécuté à chaque appel de cette méthode (c'est-à-dire à chaque fois que "
"nous écrirons <code>vaChercher()</code> quelque part dans notre code).\n"
"Ce corps de boucle peut contenir autant d'instructions que l'on veut, et "
"toutes les constructions que nous avions vu jusque là (comme les boucles et "
"les conditionnelles).\n"
"[!java]Le mot-clé <code>void</code> («néant» en anglais) signifie que cette "
"méthode ne renvoie pas de résultat. Au contraire, la méthode "
"<code>estSurBiscuit()</code> renvoie un résultat booléen indiquant si nous "
"nous trouvons oui ou non sur un biscuit. Nous apprendrons bientôt à faire de "
"telles méthodes. En attendant, écrivez juste <code>void</code> à cet endroit."
"[/!]"

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

#. 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 ""
"Vous devez toujours vous efforcer de documenter votre code pour qu'il reste "
"lisible. À l'instant où vous l'écrivez, son objectif et ses limitations vous "
"semblent clairs, mais la plupart du temps, ça ne dure pas. On oublie vite "
"les détails d'une méthode particulière, et quand cela arrive, on est content "
"de pouvoir lire sa documentation. \n"
"Dans l'exemple ci-dessous, nous utilisons le formalisme spécifique de [!"
"java]javadoc[/!][!scala]scaladoc[/!][!python]pydoc[/!], un programme qui "
"extrait la documentation du code source pour en faire de belles pages web. "
"Le principal avantage de cette approche est que la documentation se trouve à "
"coté du code. Donc, quand on change le code, il y a un peu plus de chance "
"pour qu'on pense à mettre la documentation à jour."

#. 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 ""
"[!java|scala]Les commentaires [!java]javadoc[/!][!scala]scaladoc[/!] "
"commencent avec le marqueur <code>/**</code> (avec deux étoiles). Ces "
"commentaires doivent être placés juste avant la méthode qu'ils documentent "
"pour que l'outil les trouve[/!]\n"
"[!python]Les commentaire pydoc doivent être placés au début du corps de la "
"méthode pour que l'outil les trouve. Ils doivent être placés entre <code>"
"\"\"\"</code>, qui marquent les chaînes de caractères sur plusieurs lignes "
"en python.[/!]\n"
"La première ligne devrait décrire brièvement la méthode tandis que le reste "
"de la documentation devrait donner tous les points importants de la méthode."

#. 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|c]/**\n"
" *  Avance, récupère le biscuit, et le ramène à la position d'origine\n"
" *\n"
" *  Ne vérifie pas la présence de mur; à ne pas l'utiliser en cas de risques de mur.\n"
" */[/!]\n"
"[!java|c]void goAndGet() {[/!]\n"
"[!scala]def goAndGet() {[/!]\n"
"[!python]def goAndGet():\n"
"  \"\"\"Avance, récupère le biscuit, et le ramène à la position d'origine\n"
"\n"
"  Ne vérifie pas la présence de mur; à ne pas l'utiliser en cas de risques de mur.\"\"\"[/!]\n"
"  actions()[!java|c];[/!]\n"
"  a()[!java|c];[/!]\n"
"  faire()[!java|c];[/!]\n"
"[!java|scala|c]}[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/methods/basics/Methods.html:75
msgid "Naming conventions"
msgstr "Conventions de nommage"

#. 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 ""
"La plupart des langages de programmation interdisent d'utiliser des espaces "
"dans les noms de variables et de méthodes. Certains langages (comme le [!"
"thelang]) autorisent l'usage des caractères accentués dans ces "
"identificateurs, mais cela pose parfois des problèmes de portabilité entre "
"les systèmes d'exploitation. C'est pourquoi PLM n'utilise pas d'accents dans "
"les identificateurs, même si c'est parfois désagréable en français."

#. 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 ""
"Parmi tous les langages de programmation, il y a deux conventions de nomage "
"majeures. La première consiste à concaténer tous les mots en ne laissant que "
"la première lettre de chaque mot en majuscule. «va chercher le biscuit» "
"devient VaChercherLeBiscuit(). Cette convention est nommée CamelCase en "
"anglais, c'est-à-dire casse du chameau, car les identificateurs écrits de "
"cette façon font un peu penser au dos d'un chameau. L'autre convention, "
"nommée snake_case (casse du serpent), consiste à concaténer tous les mots en "
"minuscule en les séparant du caractère souligné (_). «va chercher le "
"biscuit» devient va_chercher_le_biscuit()."

#. 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 ""
"Le choix de la convention de nommage est le sujet de «discussions» très "
"animées entre programmeurs, mais certaines habitudes prédominent pour chaque "
"langage. En Python, Ruby, Perl ou en langage C, la casse_du_serpent "
"prédomine pour les noms de variables et de méthodes. En Java et en Scala, on "
"préfère habituellement la casseDuChameau, en laissant la toute première "
"lettre en minuscule."

#. 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 ""
"La casseDuChameau est utilisé partout dans PLM car c'est un programme écrit "
"en Java à la base, et que nous avons gardé nos habitudes en écrivant le "
"support pour d'autres langages. Mais nous considérons le fait Python ne soit "
"pas en casse_du_serpent comme un bug, que nous corrigerons dans une version "
"future."

#. 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 ""
"L'objectif de cet exercice est donc d'écrire une méthode nommée "
"<code>goAndGet()</code> (va chercher) et qui fait la même chose que dans un "
"exercice précédent (avance tant qu'on ne trouve pas de baggle, ramasser le "
"baggle, reculer à la case départ, poser le 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 ""
"Cet exercice est un peu différent : vous n'allez pas écrire tout le code "
"exécuté par la buggle, mais juste une méthode qui sera invoquée "
"automagiquement quand vous exécutez l'exercice. Votre buggle va alors "
"appeler votre méthode <code>goAndGet()</code> sur chaque colonne du monde, "
"jusqu'à trouver le biscuit. [!python|scala]Le code pour cela est déjà donné "
"(en anglais) sous la méthode <code>goAndGet()</code> qui reste à écrire, "
"mais vous ne devriez pas le modifier.[/!] [!java]Vous n'avez pas à écrire "
"vous-même le code qui va appeler<code>goAndGet()</code>. Il est "
"automagiquement donné, même si vous ne pouvez pas le voir.[/!]"

#. 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 ""
"Mais pour que cela fonctionne, il faut que vous écriviez maintenant cette "
"fonction <code>goAndGet()</code>..."

#. 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 ""
"Nous souhaitons maintenant apprendre à la buggle à se faire une niche.  La "
"première approche, la plus simple au premier abord, est d'écrire directement "
"le code permettant de le faire, comme ci-dessous (cela marche car la buggle "
"de cet exercice laisse une traînée rouge dans son sillage quand elle se "
"déplace)."

#. 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]avancePas()[/!][!python|java|scala]avance()[/!][!java|c];[/!]\n"
"[!c]avancePas()[/!][!python|java|scala]avance()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]avancePas()[/!][!python|java|scala]avance()[/!][!java|c];[/!]\n"
"[!c]avancePas()[/!][!python|java|scala]avance()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]avancePas()[/!][!python|java|scala]avance()[/!][!java|c];[/!]\n"
"[!c]avancePas()[/!][!python|java|scala]avance()[/!][!java|c];[/!]\n"
"left()[!java|c];[/!]\n"
"[!c]avancePas()[/!][!python|java|scala]avance()[/!][!java|c];[/!]\n"
"[!c]avancePas()[/!][!python|java|scala]avance()[/!][!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 ""
"Les problèmes commencent quand nous voulons faire faire deux cabanes à la "
"buggle : Il faut réécrire le code deux fois, ce qui n'est pas très pratique. "
"Quand le code devient un peu long comme dans ce cas, on voit mieux pourquoi "
"il faut toujours éviter de dupliquer du code. En effet, si vous vous rendez "
"compte que vous vous êtes trompé dans votre code, et que vous l'avez "
"recopier à plusieurs endroits, il va falloir le corriger plusieurs fois. Et "
"gare si vous oubliez de corriger un exemplaire."

#. 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 ""
"Ce principe de programmation a même un nom en anglais : DRY/SPOT (qui "
"signifie «point sec»). C'est l'acronyme de «Don't Repeat Yourself» (ne vous "
"répétez pas) et «Single Point Of Truth» (point unique de vérité). Chaque "
"information doit se trouver à un seul endroit de votre programme pour éviter "
"que les différentes copies ne se désynchronisent quand vous modifiez votre "
"programme."

#. 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 ""
"Nous allons donc appliquer ce beau principe et <b>factoriser le code</b>, "
"c'est-à-dire écrire le code une seule fois, par exemple dans une méthode. "
"Vous devriez même aller plus loin en factorisant le code de la méthode avec "
"une boucle <code>for</code> comme vu précédemment. Si vous vous y prenez "
"bien (ce que vous devriez faire), vous n'écrirez qu'un seul appel à la "
"méthode <code>gauche()</code> dans votre programme."

#. 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 ""
"L'objectif de cet exercice est d'écrire une méthode nommée <code>dogHouse()</"
"code> et ayant un comportement identique au code ci-dessus. La buggle "
"invoquera plusieurs fois votre œuvre afin de dessiner des cabanes un peu "
"partout."

#. 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 ""
"Dans cet exercice, nous allons reproduire un dessin géométrique, que vous "
"pouvez voir en cliquant sur l'onglet «Objectif»."

#. 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 ""
"Votre objectif (ici, et dans tous les programmes bien faits) est d'écrire le "
"code le plus simple possible. Pour cela, vous veillerez à décomposer le "
"travail à faire en sous-étape, et à faire réaliser chaque sous-étape par une "
"méthode particulière."

#. 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 ""
"Si on observe attentivement le modèle à dessiner, on remarque qu'il est "
"composé de quatre formes en sorte de V à des positions différentes.  Un "
"découpage possible est d'écrire une fonction chargée de faire un V à partir "
"de la position courante. Son prototype peut être : <code>[!java|c]void "
"[/!]faireV()</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 ""
"Dans cette méthode, vous devez utiliser les méthodes <code>baisseBrosse()</"
"code> et <code>leveBrosse()</code> pour marquer le sol. Peut-être que "
"marquer le sol devrait faire l'objet d'une méthode séparée? Il faudrait "
"également que  méthode <code>faireV()</code> place directement la buggle en "
"position pour dessiner le prochain 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 ""
"À vous de jouer. Votre code ne devrait pas prendre plus de quatre lignes "
"(sans compter <code>faireV</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 ""
"Nous allons maintenant reproduire un dessin géométrique plus grand. Encore "
"une fois, vous pouvez voir le modèle en cliquant sur l'onglet «Objectif»."

#. 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 ""
"Vous pouvez bien entendu réutiliser tout le code que vous aviez tapé à "
"l'exercice précédent (sélectionnez l'autre exercice, allez dans le code, "
"sélectionner tout, faites Ctrl-C, revenez dans le code de l'exercice "
"courant, faites 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 ""
"Mais pour que votre méthode principale reste aussi simple que possible, il "
"faudra définir de nouvelles méthodes afin de gérer simplement les répétions "
"du motif. Par exemple, une méthode <code>faireMotif()</code> réalisant le "
"motif de l'exercice précédent semble être un bon départ (mais ce n'est sans "
"doute pas suffisant)."

#. 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 ""
"À vous de jouer. Le code principal ne devrait pas prendre plus de 2 lignes "
"( incluses dans une boucle 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 ""
"Vous vous en doutez, il vous faut encore une fois reproduire un dessin "
"géométrique dont le modèle se trouve dans l'onglet «Objectif». Comme vous le "
"voyez, il est encore plus grand que le précédent."

#. 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 ""
"Il va donc falloir définir encore plus de méthodes afin de tirer partie des "
"répétitions du motif pour factoriser votre code. À vous de jouer..."

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

#. 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 ""
"Souvent, on souhaite écrire une méthode calculant une valeur donnée, et qui "
"la retourne. On appelle <b>fonctions</b> ces méthodes qui renvoient un "
"résultat.Écrire une fonction n'est pas tellement plus dur que pour les "
"méthodes sans résultat.\n"
"[!java|c]Il suffit d'écrire le type de données renvoyées par votre fonction "
"avant son nom (là où nous écrivions <code>void</code> avant).[/!] \n"
"[!scala]Il suffit d'ajouter deux points (:), le type de données renvoyées "
"par votre fonction et le signe égal (=) entre  les parenthèses de la "
"déclaration et l'accolade du bloc. Cette syntaxe est assez proche de la "
"définition d'une variable (avec son type) dont la valeur serait une fonction."
"[/!]\n"
"Vous pouvez utiliser l'instruction <code>return</code> n'importe ou dans le "
"corps de votre fonction pour spécifier que le calcul est fini (la suite de "
"la fonction n'est pas exécutée) et donner la valeur à donner à l'appelant "
"après le mot-clé <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 ""
"En fait, vous pouvez également utiliser le mot-clé <code>return</code> dans "
"les méthodes ne renvoyant pas de résultat, pour interrompre leur exécution. "
"Dans ce cas, il ne faut bien entendu pas donner de valeur à droite du "
"<code>return</code>."

#. 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 ""
"Il est possible d'avoir plusieurs instructions <code>return</code> dans "
"différentes branches de <code>if</code>. Ce qui est interdit, c'est d'avoir "
"une branche du code qui n'est pas terminée par un <code>return</code>, ou "
"d'écrire du code après le <code>return</code>.\n"
"En effet, si la machine arrive à la fin de la fonction sans avoir rencontré "
"de <tt>return</tt>, elle ne peut pas savoir quelle valeur communiquer à "
"celui qui a appelé la fonction. De plus, le <tt>return</tt> interrompt "
"immédiatement l'exécution de la fonction (pourquoi continuer à chercher "
"quand on a déjà trouvé le résultat de la fonction?). Donc, s'il y a du code "
"après un <tt>return</tt>, c'est sans doute une erreur, et le compilateur "
"vous l'indique."

#. 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][!java]boolean [/!][!c]int [/!] [/!][!scala]def [/!]estDevantLibre()[!scala]:Boolean =[/!] {\n"
"    if (estFaceMur() == [!java|scala]true[/!][!c]1[/!]) {\n"
"        return [!java|scala]false[/!][!c]0[/!];\n"
"        <span class=\"comment\">/* interdit d'écrire du code ici */</span>\n"
"    } else {\n"
"        return [!java|scala]true[/!][!c]1[/!];\n"
"        <span class=\"comment\">/* pareil ici */</span>\n"
"    }\n"
"    <span class=\"comment\">/* même ici, oubliez */</span>\n"
"}[/!][!python]def estDevantLibre():\n"
"    if estFaceMur() == True:\n"
"        return False\n"
"        <span class=\"comment\"># interdit d'écrire du code ici</span>\n"
"    else\n"
"        return True\n"
"        <span class=\"comment\"># pareil ici</span>\n"
"<span class=\"comment\"># même ici, oubliez</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 ""
"Vous allez encore une fois écrire une fonction qui sera utilisée par la "
"buggle. Son nom doit être <code>haveBaggle</code>, et elle doit renvoyer un "
"booléen indiquant si la colonne face à la buggle contient un biscuit ou non. "
"Votre buggle va s'en servir pour chercher la première colonne contenant un "
"biscuit et s'y arrêter."

#. 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 ""
"Le plus simple pour écrire cette fonction est peut être d'utiliser une "
"variable booléenne <code>vuBiscuit</code> indiquant si on a vu un biscuit "
"jusque là. Initialement, elle contient faux («[!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 ""
"Ensuite, on avance de 6 cases (le monde contient 7 cases, et on est déjà sur "
"l'une d'entre elles). Pour chaque case, si elle contient un biscuit, on "
"range la valeur vrai dans <tt>vuBiscuit</tt> (et on ne fait rien d'autre "
"qu'avancer si non)."

#. 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 ""
"Quand on est arrivé à la fin, on recule de 6 cases, et on retourne le "
"contenu de <tt>vuBiscuit</tt> à l'appelant."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:67
msgid ""
"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 ""
"Cet exercice est un peu particulier, puisqu'il a deux mondes initiaux, "
"chacun ayant un objectif particulier. Votre code doit fonctionner pour "
"chacun d'entre eux. Remarquez que le menu déroulant de sélection du monde "
"(juste sous la barre de réglage de la vitesse) permet de spécifier le monde "
"que vous souhaitez observer."

#. type: Content of: <p>
#: src/lessons/welcome/methods/returning/MethodsReturning.html:72
msgid ""
"When your function <code>haveBaggle</code> works, proceed to next exercise."
msgstr ""
"Quand votre fonction <tt>haveBaggle</tt> fonctionne, passez à l'exercice "
"suivant."

#. 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'êtes vous pas fatigué d'écrire encore et encore le code qui permet "
"d'avancer ou de reculer d'un nombre prédéterminé de pas ? Oui, mais écrire "
"les méthode <tt>avance2()</tt>, <tt>avance3()</tt>, <tt>avance4()</tt>, et "
"<tt>recule2()</tt>, <tt>recule3()</tt>, <tt>recule4()</tt>, et ainsi de "
"suite, ça ne constitue pas un réel gain de temps. Et puis, c'est carrément "
"moche !"

#. 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 ""
"Heureusement, il est possible de donner des <b>paramètres</b> à vos "
"méthodes. Il faut marquer leur type et leur nom entre les parenthèses qui "
"suivent le nom de la méthode. Ensuite, on peut les utiliser dans le corps de "
"la fonction comme s'il s'agissait de variables définies ici."

#. 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 [/!]diviseParDeux([!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 ""
"À l'usage, il faut indiquer les valeurs qu'elles doivent prendre entre les "
"parenthèses de l'appel."

#. 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 [/!]resultat = diviseParDeux(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 ""
"Si on veut avoir plusieurs paramètres, il faut les séparer par des virgules, "
"lors de la déclaration comme lors de l'appel."

#. 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 divise(double x, double y) {[/!]\n"
"[!scala]def divise(x:Double, y:Double): Double = {[/!]\n"
"[!python]def divise(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 = divise(3.14 , 1.5);[/!]\n"
"[!scala]val res = divise(3.14 , 1.5)[/!]\n"
"[!python]res = divise(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 ""
"En [!thelang], il est possible d'avoir plusieurs méthodes du même nom, à "
"condition qu'elles n'aient pas la même <b>signature</b>, c'est à dire le "
"même nombre de paramètres et les mêmes types de paramètres."

#. 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 ""
"Remarquez que nous avons ici laissé de coté les <tt>else</tt> de chaque "
"alternative. Cela fonctionne tout de même car un <tt>return</tt> interrompt "
"l'exécution de la méthode. Si on arrive à la dernière ligne de <code>[!"
"java]max(int,int)[/!][!scala]max(Int,Int):Int[/!]</code>, on est donc sûr "
"que <code>x&lt;=y</code> car dans le cas contraire, le <tt>return</tt> de la "
"deuxième ligne aurait arrêté l'exécution de la fonction."

#. 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 ""
"Cette fois, vous devez écrire une méthode \n"
"<code>[!java|c]move(int nbPas,[!java]boolean[/!][!c]int[/!] versLAvant)[/!] "
"[!scala]move(nbPas: Int,versLAvant: Boolean)[/!] [!python]move(nbPas,"
"versLAvant)[/!] </code> qui se déplace de <code>nbPas</code> pas. Si "
"<code>versLAvant</code> est vrai, il faut avancer de ce nombre de pas; dans "
"le cas contraire, il faut reculer."

#. 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 ""
"Cette fois, il y a un seul monde, et sept buggles, qui exécutent toutes le "
"code que vous allez écrire.\n"
"Cet exercice ne devrait pas vous poser de problème particulier."

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

#. 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 ""
"Votre buggle a décidé de fleurir un peu le pot de fleur dans lequel elle "
"vit. Vous devez l'aider à reproduire le motif dont elle rêve (vous pouvez le "
"voir dans l'onglet «Objectif»)."

#. 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. As the pattern is a "
"bit complex, you should try to decompose this 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 ""
"Pour cela, vous devez écrire une méthode nommée <code>growFlowers()</code> "
"(«fait pousser les fleurs» en anglais). Cette méthode ne prend aucun "
"paramètre et ne renvoie aucun résultat. Comme le motif est un peu complexe, "
"il faut que vous le décomposiez en sous-motifs pour que votre code reste "
"simple et agréable à lire. Une méthode dessinant une fleur est un bon début, "
"même si ce n'est probablement pas assez."

#. type: Content of: <p>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:13
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 ""
"Pour information, ce dessin utilise les cinq couleurs ci-dessous. \n"
"[!java|scala|c]Le type de données de ces constantes est <code>Color</code>, "
"qui décrit naturellement une couleur donnée[/!]"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:18
msgid "<tt>[!scala|java|python]Color.[/!]RED</tt>"
msgstr "<tt>[!scala|java|python]Color.[/!]RED</tt> pour le rouge"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:19
msgid "<tt>[!scala|java|python]Color.[/!]PINK</tt>"
msgstr "<tt>[!scala|java|python]Color.[/!]PINK</tt> pour le rose"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:20
msgid "<tt>[!scala|java|python]Color.[/!]CYAN</tt>"
msgstr "<tt>[!scala|java|python]Color.[/!]CYAN</tt> pour le bleu clair"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:21
msgid "<tt>[!scala|java|python]Color.[/!]ORANGE</tt>"
msgstr "<tt>[!scala|java|python]Color.[/!]ORANGE</tt> pour le orange"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:22
msgid "<tt>[!scala|java|python]Color.[/!]GREEN</tt>"
msgstr "<tt>[!scala|java|python]Color.[/!]GREEN</tt> pour le vert"

#. type: Content of: <ul><li>
#: src/lessons/welcome/methods/flowerpot/FlowerPot.html:23
msgid "<tt>[!scala|java|python]Color.[/!]YELLOW</tt>"
msgstr "<tt>[!scala|java|python]Color.[/!]YELLOW</tt> pour le jaune"

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

#. 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 ""
"Whaou! Ce n'est plus un petit pot de fleurs, c'est carrément une énorme "
"jardinière! Votre buggle est déjà partie la fleurir, et vous devriez aller "
"l'aider pour éviter qu'elle ne se cogne à une bordure..."

#. 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: La nouvelle couleur utilisée (pour le bleu) est <code>Color.BLUE</code>"

#. type: Content of: <h2>
#: src/lessons/welcome/methods/picture/MethodsPicture.html:2
msgid "Colorful drawing"
msgstr "Dessins colorés"

#. 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 ""
"Si on observe attentivement le modèle à dessiner, on remarque qu'il est "
"composé de quatre formes en sorte de V de couleurs différentes, et à des "
"positions différentes.  Un découpage possible est d'écrire une fonction "
"chargée de faire un V de la couleur indiquée à partir de la position "
"courante. Son prototype peut être :"

#. 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 [/!]faireV([!java|c]Color [/!]c[!scala]: Color[/!])[!python]  <span class=\"comment\"># le paramètre c est de type Color</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 ""
"Le type de données <code>Color</code> représente naturellement une couleur "
"en particulier.  Votre code invoquera sans doute <code>faireV</code> avec "
"les arguments suivants (une couleur différente à chaque appel) :"

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

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

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

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

#. 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 ""
"Dans la méthode <code>faireV()</code>, il faut utiliser la méthode "
"<code>setCouleurBrosse()</code>, qui est prédéfinie dans la buggle, pour "
"changer la couleur du pinceau, ainsi que <code>leveBrosse()</code> et "
"<code>baisseBrosse()</code> pour lever et baisser le pinceau."

#. 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 ""
"Il faudrait également que la méthode <code>faireV()</code> place la buggle "
"en position pour dessiner le prochain V directement."

#. 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 ""
"À vous de jouer. Je suis sûr que vous parviendrez à trouver d'autres "
"méthodes à ajouter pour décomposer ce problème et faire en sorte que votre "
"code reste simple et agréable à lire. Complétez la méthode <code>run()</"
"code> qui sera appelée automatiquement une fois. \n"
"[!java]Le mot-clé <code>public</code> signifie plus ou moins que tout le "
"monde a le droit d'invoquer cette méthode. Ça tombe bien, l'infrastructure "
"de la PLM va l'invoquer directement.[/!]"

#. type: Content of: <h2>
#: src/lessons/welcome/methods/picture/MethodsPictureLarge.html:2
msgid "Larger colorful drawing"
msgstr "Grand dessin coloré"

#. 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 ""
"Il va donc falloir définir encore plus de méthodes afin de tirer partie des "
"répétitions du motif pour factoriser votre code. Ou alors, il va falloir "
"<i>paramétrer</i> vos fonctions pour réutiliser ce que vous aviez écrit en "
"changeant les tailles."

#. 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 "À vous de jouer..."

#. type: Content of: <h2>
#: src/lessons/welcome/methods/picture/PatternPicture.html:2
msgid "Another Colorful Pattern"
msgstr "Autre motif coloré"

#. 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 ""
"Voici de nouveau un exercice où il faut reproduire un motif donné dans "
"l'onglet «Objectif»."

#. 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 ""
"Celui-ci est un peu plus difficile que ceux vus précédemment. Cherchez les "
"motifs qui se répètent, même si la couleur change, et faites une méthode "
"dessinant chacun d'entre eux."

#. 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 "Bon courage !"

#. 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 ""
"Maintenant que votre méthode <code>isFacingTrail()</code> fonctionne, il est "
"temps d'écrire le code de la chasse à proprement parler. Copie/collez le "
"code que vous aviez fait pour l'exercice précédent, et complétez la méthode "
"<code>hunt()</code> (<i>hunt</i> signifie <i>chasse</i> en anglais)."

#. 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 ""
"Suivre une piste n'est pas très difficile : avancez tant que vous êtes face "
"à la piste. Si la piste n'est plus devant vous, cherchez si elle se trouve à "
"gauche ou à droite, et suivez-la encore."

#. 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 ""
"Pour ne pas confondre la partie de la trace à suivre avec celle que votre "
"buggle a déjà suivie, il est conseillé d'effacer la piste derrière vous. "
"Pour cela, utilisez la méthode <code>baisseBrosse()</code> pour baisser "
"votre brosse, et <code>leveBrosse()</code> pour la relever."

#. 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 ""
"Enfin, n'oubliez de capturer votre proie une fois que vous l'aurez débusquée "
"(avec <code>prendBiscuit()</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=\"Objectifs\"> Complétez la méthode <code>hunt()</code>. Vous voulez "
"probablement copier votre méthode <code>isFacingTrail()</code> de l'exercice "
"précédent."

#. 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 ""
"Votre buggle est super contente ! Elle vient de trouver une grosse traînée "
"baveuse sur le sol, certainement laissée par une grosse limace. Au bout de "
"cette piste, la buggle est sûre de se régaler d'un bon jus de limace "
"(représentée par un baggle)."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugTracking.html:8
msgid ""
"To reach that goal, you had to write a boolean method <tt>isFacingTrail</"
"tt>, which determines whether we are facing a green cell or 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 ""
"Pour arriver au résultat, vous devez écrire la méthode booléenne "
"<code>isFacingTrail()</code>, qui permet de savoir si on est face à une case "
"verte ou non. Bien sûr, si on est face à un mur, elle doit répondre faux "
"sans se cogner. Il faudrait de plus que cette méthode soit <b>sans effet de "
"bord</b>, c'est-à-dire qu'elle ne modifie ni la buggle qui l'appelle, ni le "
"monde environnant."

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugTracking.html:13
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 ""
"Votre outil pour cela est la méthode <code>getCouleurSol()</code> qui "
"retourne la couleur du sol dans la case où se trouve la buggle. Il vous faut "
"vous rendre dans la case à tester avant d'appeler cette méthode. \n"
"[!java]Vous ne pouvez pas simplement utiliser <code>==</code> pour tester si "
"la couleur retournée est le vert, mais vous devez plutôt écrire quelque "
"chose comme <code>getCouleurSol().equals(Color.green)</code>. C'est parce "
"que les couleurs sont des <i>objets</i> en Java, et que <code>.equals()</"
"code> est la marche à suivre pour tester l'égalité d'objets Java.[/!]\n"
"[!python|scala|c]Il suffit ensuite de tester si la couleur renvoyée par "
"cette fonction est égale à la valeur <code>[!scala|python]Color.green[/!][!"
"c]GREEN[/!]</code>, qui représente la couleur verte.[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/methods/slug/SlugTracking.html:24
msgid ""
"Complete the <code>isFacingTrail()</code> method (which gets called "
"automatically)."
msgstr ""
"Complétez la méthode <code>isFacingTrail()</code> qui sera appelée "
"automatiquement comme il faut."

#. type: Content of: <h2>
#: src/lessons/welcome/methods/slug/SlugSnail.html:2
msgid "Slugs and Snails"
msgstr "Limaces et escargots"

#. 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 ""
"YES! Cette fois encore, votre buggle a débusqué de bonnes proies! Dans le "
"premier monde, c'est une délicieuse limace Kitty (qui laisse des traces "
"rose) tandis que dans le second monde, un bon gros escargot du désert attend "
"la buggle au bout de sa piste orange."

#. 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 ""
"Il vous faut copie/coller votre code encore une fois, et le modifier pour "
"que vos méthodes prennent la couleur de piste à suivre en paramètre. À part "
"cela, votre code devrait faire comme avant."

#. 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 ""
"Attention aux fausses pistes ! La méthode <code>hunt()</code> a un paramètre "
"qui indique la colueur à suivre (et ce n'est pas la même dans tous les "
"mondes). Ajoutez un paramètre à votre méthode <code>isFacingTrail()</code> "
"et assurez-vous de ne suivre que cette couleur. Les autres couleurs mènent à "
"des impasses..."

#. 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 ""
"Après toutes ces courses, il est temps de faire la fête ! Pour cela, nous "
"allons apprendre à nos buggles à jouer à Dance Revolution, ce jeu très prisé "
"de certains étudiants où le joueur doit bouger sur un tapis prévu à cet "
"effet en fonction des consignes présentées à l'écran en rythme avec la "
"musique. Mais avant cela, nous avons quelques détails à étudier."

#. 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 "Conditionnelles sans accolades"

#. 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 ""
"Il y a un détail que nous avons omis à propos de la syntaxe des "
"conditionnelles : si une branche ne contient qu'une seule instruction, les "
"accolades sont optionnelles. Ainsi, les deux extraits suivants sont "
"équivalents:"

#. 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>condition</b>) {\n"
"    <b>quoiFaireSiLaConditionEstVraie();</b>\n"
"} else {\n"
"    <b>quoiFaireSinon();</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>condition</b>)\n"
"    <b>quoiFaireSiLaConditionEstVraie();</b>\n"
"else\n"
"    <b>quoiFaireSinon();</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 ""
"Vous pouvez faire de même avec les boucles dont le corps se réduit à une "
"seule instruction. Mais attention, ceci peut être dangereux si on enchaîne "
"les <tt>if</tt> comme dans l'exemple suivant."

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

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:35
msgid ""
"In fact, it does not turn right when there is no baggle on the ground AND x "
"equals 5, but when the buggle found a baggle on the ground and x equals "
"anything but 5. Putting this otherwise, the buggle understands the previous "
"code as if it were written the following way (note that the <tt>else</tt> "
"were moved to the right):"
msgstr ""
"En fait, ça ne tourne pas à droite quand il n'y a pas un baggle par terre ET "
"que x vaut 5, mais quand la buggle a trouvé un baggle, et que x vaut une "
"autre valeur. Autrement dit, la buggle lit le code précédent comme suit "
"(notez que le <tt>else</tt> est décalé vers la droite par rapport à "
"précédemment) :"

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

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:47
msgid ""
"The first lesson of this is that the indentation is very important to help "
"humans understanding, even if it does not change the actual meaning of the "
"code. We could have written the following code and obtain the same result. "
"But if you want a human to read and review your code, you really want to "
"indent it correctly. That's for example the case if you want a professor to "
"read it (to grade it or to answer a question about it), or if you want to "
"reuse your code later, or even if you need to debug your code yourself."
msgstr ""
"La première leçon, c'est que l'indentation est très importante pour que les "
"humains puissent comprendre le code, mais elle ne change pas la "
"signification du code pour la machine. On aurait tout aussi bien pu écrire "
"le code suivant et obtenir le même résultat. Mais attention, si on veut "
"qu'un humain puisse relire le code, l'indentation est quasi indispensable. "
"C'est par exemple le cas si votre code doit être relu par un professeur "
"(pour qu'il le note ou pour lui poser une question), ou si vous comptez "
"réutiliser votre code plus tard, ou même si vous devez debugger votre propre "
"code après l'avoir écrit."

#. 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 (estSurBiscuit()) if (x == 5) gauche(); else droite(); [!c]avancePas();[/!][!java|scala]avance();[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:57
msgid ""
"The second lesson is that a <tt>else</tt> branch always connects to the "
"closest <tt>if</tt>. This may be a bit troublesome in some case, and it may "
"be easier to add more braces than strictly needed to remove any ambiguity."
msgstr ""
"La seconde leçon, c'est qu'une branche <tt>else</tt> se raccroche toujours "
"au <tt>if</tt> le plus proche. C'est parfois un peu contre-intuitif, et il "
"est préférable d'ajouter plus d'accolades que nécessaire pour lever toute "
"ambiguïté."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:62
msgid "Chaining conditionals"
msgstr "Enchaînements de conditionnelles"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:64
msgid "You sometimes want to ask the buggle something similar to:"
msgstr ""
"Il arrive que l'on veuille demander à la buggle quelque chose similaire à :"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:65
#, 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 ""
"s'il pleut, prend un parapluie; \n"
"si non, s'il fait chaud, prend une bouteille d'eau; \n"
"si non, si nous sommes le 14 juillet, prend un drapeau français"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:69
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 ""
"Le piège étant que nous voudrions qu'au plus l'une de ces actions soient "
"réalisées. C'est à dire, que s'il pleut un 14 juillet très chaud, on ne veut "
"pas que la buggle sorte avec un parapluie, de l'eau et un drapeau, mais "
"juste avec un parapluie. Le code suivant est donc faux."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:74
#, 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 ""
"[!java|c|scala]if (ilPleut())\n"
"    prendreParapluie();\n"
"if (ilFaitChaud())\n"
"    prendreDeLEau();\n"
"if (sommes14Juillet())\n"
"    prendreDrapeau();[/!][!python]if ilPleut():\n"
"    prendreParapluie()\n"
"if ilFaitChaud():\n"
"    prendreDeLEau()\n"
"if sommes14Juillet():\n"
"    prendreDrapeau()[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:87
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 ""
"En effet, toutes les conditions sont évaluées les unes après les autres, et "
"on risque donc d'aller au défilé un jour de pluie. À la place, il faut donc "
"écrire quelque chose comme ce qui suit pour s'assurer que si l'on trouve une "
"condition vraie, on n'évalue pas les suivants."

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:92
#, 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 (ilPleut()) {\n"
"    prendreParapluie();\n"
"} else {\n"
"    if (ilFaitChaud()) {\n"
"        prendreDeLEau();\n"
"    } else {\n"
"        if (sommes14Juillet()) {\n"
"            prendreDrapeau();\n"
"        }\n"
"    }\n"
"}[/!][!python]if ilPleut():\n"
"    prendreParapluie()\n"
"else:\n"
"    if ilFaitChaud():\n"
"        prendreDeLEau()\n"
"    else:\n"
"        if sommes14Juillet():\n"
"            prendreDrapeau()[/!]"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:112
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 ""
"Une telle cascade de conditionnelles est un peu difficile à lire, et il est "
"préférable\n"
"[!java|scala|c] d'omettre les accolades associées aux <tt>else</tt> comme "
"suit. Il y a même certains langages qui introduisent un mot-clé spécial pour "
"ces <tt>else if</tt> (mais pas [!thelang]).[/!]\n"
"[!python] d'introduire les sous-blocs avec le mot-clé <code>elif</code> "
"(abréviation de «else if») pour expliciter ces branches «sinon si».[/!]"

#. type: Content of: <pre>
#: src/lessons/welcome/bdr/BDR.html:119
#, 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 (ilPleut()) { \n"
"    prendreParapluie();\n"
"} else if (ilFaitChaud()) {\n"
"    prendreDeLEau();\n"
"} else if (sommes14Juillet()) {\n"
"    prendreDrapeau();\n"
"}[/!][!python]if ilPleut():\n"
"    prendreDrapeau()\n"
"elif ilFaitChaud():\n"
"    prendreDeLEau()\n"
"elif sommes14Juillet():\n"
"    prendreDrapeau()[/!]"

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:132
msgid "Graffiti in the Buggle World"
msgstr "Les graffitis dans le monde des buggles"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:134
msgid ""
"Buggles can tag graffitis on the ground of their world. For that, they use "
"the four following methods:"
msgstr ""
"Les buggles peuvent écrire des choses par terre dans leur monde. Pour ce "
"faire, elles utilisent les quatre méthodes suivantes:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:138
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[/!] estSurMessage()[!scala]:Boolean[/!]</"
"code>: renvoie <code>[!c]1[/!][!java|scala]true[/!][!python]True[/!]</code> "
"si et seulement s'il y a un message écrit par terre."

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:141
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 [/!]litMessage()[!scala]: String[/!]</"
"code> : renvoie le message qu'il y a écrit par terre (s'il y a rien, on "
"obtient une chaîne vide)."

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:143
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[/!] ecritMessage([!c]char*[/!][!java]String [/!]msg[!"
"scala]: String[/!])</code> : écrit le message spécifié en argument par "
"terre. S'il y a déjà quelque chose écrit par terre, on ajoute le nouveau "
"message à la fin du précédent."

#. type: Content of: <ul><li>
#: src/lessons/welcome/bdr/BDR.html:146
msgid ""
"<code>[!java|c]void [/!]clearMessage()</code>: clears what is written on the "
"ground."
msgstr ""
"<code>[!java|c]void [/!]clearMessage()</code> : efface ce qui est écrit par "
"terre."

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR.html:150
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 ""
"L'objectif est donc d'organiser une partie de BDR entre les buggles en leur "
"apprenant à bouger en fonction des indications écrites par terre.  Ces "
"indications sont des messages au sol, avec le code suivant:"

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

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:157 src/lessons/welcome/bdr/BDR2.html:140
msgid "What to do"
msgstr "Quoi faire"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:158
msgid "Mnemonic"
msgstr "Mnémotechnique"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:160 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:160 src/lessons/welcome/bdr/BDR2.html:142
msgid "Turn right and move one step forward"
msgstr "Tourner à droite et avancer d'une case"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:160
msgid "Right"
msgstr "Right (signifie «droite» en anglais)"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:161 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:161 src/lessons/welcome/bdr/BDR2.html:143
msgid "Turn left and move one step forward"
msgstr "Tourner à gauche et avancer d'une case"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:161
msgid "Left"
msgstr "Left (signifie «gauche» en anglais)"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:162 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:162
msgid "Turn back (U-turn) and move one step forward"
msgstr "Se retourner (demi-tour) et avancer d'une case"

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

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:164 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:164 src/lessons/welcome/bdr/BDR2.html:146
msgid "Move one step forward"
msgstr "Avancer d'une case"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:164
msgid "First letter of the alphabet"
msgstr "Première lettre de l'alphabet"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:165 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:165 src/lessons/welcome/bdr/BDR2.html:147
msgid "Move two steps forward"
msgstr "Avancer de deux cases"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:165
msgid "Second letter of the alphabet"
msgstr "Deuxième lettre de l'alphabet"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:166 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:166 src/lessons/welcome/bdr/BDR2.html:148
msgid "Move three steps forward"
msgstr "Avancer de trois cases"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:166
msgid "Third letter of the alphabet"
msgstr "Troisième lettre de l'alphabet"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:168 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:168 src/lessons/welcome/bdr/BDR2.html:153
msgid "Move one step backward"
msgstr "Reculer d'une case"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:168
msgid "One letter before the end of the alphabet"
msgstr "A une lettre de la fin de l'alphabet"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:169 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:169 src/lessons/welcome/bdr/BDR2.html:154
msgid "Move two steps backward"
msgstr "Reculer de deux cases"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:169
msgid "Two letters before the end of the alphabet"
msgstr "A deux lettres de la fin de l'alphabet"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:170 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:170 src/lessons/welcome/bdr/BDR2.html:155
msgid "Move three steps backward"
msgstr "Reculer de trois cases"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:170
msgid "Three letters before the end of the alphabet"
msgstr "A trois lettres de la fin de l'alphabet"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:171 src/lessons/welcome/bdr/BDR2.html:159
msgid "<i>(anything else)</i>"
msgstr "<i>(n'importe quoi d'autre)</i>"

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR.html:171 src/lessons/welcome/bdr/BDR2.html:159
msgid "Stop dancing."
msgstr "Arrêter de danser."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:174
msgid "Indications"
msgstr "Indications"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR.html:176
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 ""
"Cet exercice peut sembler un peu compliqué, mais il s'agit principalement de "
"traduire le contenu du tableau ci-dessus dans un enchaînement de "
"conditionnelles."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:179
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 ""
"Vous devez continuer à danser tant qu'il reste des pas de danse à faire. c-à-"
"d tant qu'on est sur une case décrite dans le tableau. Le plus simple pour "
"cela est d'utiliser une variable booléenne (<code>fini</code>) en condition "
"d'arrêt d'une boucle while. Cette variable est initialisée à la valeur faux "
"(<code>[!c]0[/!][!java|scala]false[/!][!python]False[/!]</code>). Si on "
"trouve une case ne répondant à aucune ligne du tableau, on change la valeur "
"de cette variable à vrai (<code>[!c]1[/!][!java|scala]true[/!][!"
"python]True[/!]</code>). Cela arrête la boucle, et le programme."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:189
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 ""
"Une autre subtilité est qu'il est un peu pénible en Java de déterminer si "
"deux chaînes de caractères sont identiques. Nous utiliserons donc la méthode "
"<code>char getIndication[!c]Bdr[/!]()</code> à la place de <code>[!"
"java]String[/!][!c]char*[/!] litMessage()</code>. Cette méthode, qui n'est "
"connue que des buggles des exercices BDR, renvoie le premier caractère du "
"message au sol (ou ' ' --une espace-- s'il n'y a rien d'écrit au sol). Cela "
"nous permet de travailler avec des caractères (<code>char</code>), qui sont "
"moins pénibles que les chaînes en [!thelang]."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR.html:197
msgid "Tips and Hints"
msgstr "Trucs et astuces"

#. type: Content of: outside any tag (error?)
#: src/lessons/welcome/bdr/BDR.html:199
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 ""
"Si vous ne parvenez plus à comprendre pourquoi votre buggle n'exécute pas "
"les pas de danse demandés, essayez d'ajouter <code>baisseBrosse()</code> "
"dans votre méthode. Cela demandera à la buggle de poser une brosse par "
"terre, laissant une trace au sol quand elle avance. Cela devrait vous aider "
"à suivre sa trajectoire, mais pensez à retirer cette appel lorsque vous "
"voulez tester si votre solution marche : on vous demande de faire danser les "
"buggles, pas de dégrader le dance floor."

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR.html:206
msgid "When your program finally works, move on to the next exercise."
msgstr "Quand votre programme fonctionne enfin, passez à l'exercice suivant."

#. 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 ""
"Le BDR, c'est cool, mais c'est un peu le chaos. Tout d'abord, les buggles "
"gigotent en tout sens, et en plus, le code que vous avez écrit pour les "
"faire bouger est très difficile à lire. Voici un nouveau monde de BDR, où "
"les buggles vont faire une gentille petite ronde plus reposante. Nous "
"profiterons de cette accalmie pour nettoyer un peu le code grâce aux "
"nouveaux éléments que nous allons maintenant étudier."

#. type: Content of: <h3>
#: src/lessons/welcome/bdr/BDR2.html:11
msgid ""
"[!java|c]<code>switch</code> conditionals[/!][!scala]Pattern matching[/!]"
msgstr ""
"[!java|c]Conditionnelle <code>switch</code>[/!][!scala]Les filtrages[/!]"

#. 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 ""
"Le plus difficile à lire du code précédent est certainement la cascade de "
"conditionnelles. Quelque part dans votre programme, vous avez sans doute "
"écrit quelque chose comme:"

#. 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]getIndication() == 'R'[/!][!scala]litMessage() == \"R\"[/!]) {\n"
"  droite();\n"
"  avance();\n"
"} else if ([!java|c]getIndication() == 'L'[/!][!scala]litMessage() == \"L\"[/!]) {\n"
"  gauche();\n"
"  avance();\n"
"} else if ([!java|c]getIndication() == 'I'[/!][!scala]litMessage() == \"I\"[/!]) {\n"
"  retourne();\n"
"  avance();\n"
"<span class=\"comment\">/* d'autre if */</span>\n"
"} else {\n"
"  fini = 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 ""
"À la première lecture du code, il n'est pas évident qu'il ne s'agit que d'un "
"choix avec 4 branches en fonction du résultat de [!java]getIndication()[/!][!"
"scala]litMessage()[/!].\n"
"Pour améliorer ceci, nous allons utiliser [!java]un <code>switch</code>, "
"dont la syntaxe est la suivante en Java.[/!]\n"
"[!scala] un filtrage (pattern matching en anglais), qui est une construction "
"très agréable généralisant le <code>if</code>. Il s'agit sans aucun doute de "
"l'un des avantages majeurs du langage Scala par rapport à d'autres tels que "
"le Java ou le Python. Cette construction n'est cependant pas révolutionnaire "
"puisqu'elle existe depuis assez longtemps dans des langages comme OCaml ou "
"Haskell, mais il n'empêche. Elle est carrément cool![/!]"

#. 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>premierValeur</b>: \n"
"    <b>queFaireSiExpressionVautPremiereValeur();</b>\n"
"    break;\n"
"  case <b>deuxiemeValeur</b>: \n"
"    <b>queFaireSiExpressionVautDeuxiemeValeur();</b>\n"
"    break;\n"
"  case <b>troisiemeValeur</b>: \n"
"    <b>queFaireSiExpressionVautTroisiemeValeur();</b>\n"
"    break;\n"
"    /* autant de cas sur le même modèle qu'on le souhaite */\n"
"  default: \n"
"    <b>queFaireSiExpressionVautAucuneDesValeursProposees();</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 ""
"Remarquez que chaque branche du <tt>switch</tt> doit être terminée par un "
"<code>break</code>. Si on l'oublie, la machine continue d'exécuter le cas "
"suivant dans la liste quand elle a fini le code du cas où elle a sauté dans "
"le switch. Il y a même quelques <b>très rares</b> cas où ce comportement est "
"pratique."

#. 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 ""
"On peut réécrire le code BDR précédent bien plus clairement grâce à la "
"construction <tt>switch</tt> de la façon suivante."

#. 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 (getIndication()) {\n"
"  case 'R':\n"
"    droite(); \n"
"    [!c]avancePas()[/!][!java]avance()[/!]; \n"
"    break;\n"
"  case 'L':\n"
"    gauche();\n"
"    [!c]avancePas()[/!][!java]avance()[/!]; \n"
"    break;\n"
"  case 'I':\n"
"    retourne();\n"
"    [!c]avancePas()[/!][!java]avance()[/!];\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>expression</i> <b>match</b> {\n"
"  <b>case</b> <i>valeur possible</i>  <b>=></b> instructions\n"
"  <b>case</b> <i>autre valeur</i>     <b>=></b> d'autres instructions\n"
"  <b>case</b> <i>troisième valeur</i> <b>=></b> encore d'autres instructions\n"
"  <b>case _                 =></b> instructions par défaut\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 ""
"L'expression fournie avant le mot-clé <code>match</code> est évaluée, et "
"ensuite, les branches sont évaluées les unes après les autres jusqu'à en "
"trouver une où la valeur entre le <code>case</code> et le <code>=&gt;</code> "
"correspond à la valeur de l'expression. Le symbole <code>_</code> agit comme "
"un joker qui correspond à tout. Cela veut dire que la dernière ligne telle "
"qu'elle est écrite correspond toujours à la valeur fournie, quelle qu'elle "
"soit. Voici un petit exemple où une variable <code>nom</code> est mis en "
"correspondance."

#. 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 ""
"nom match {\n"
"  case \"Martin\" => println(\"Salut Martin, comment vas-tu?\")\n"
"  case \"Gerald\" => println(\"He Gerald! Ça va?\")\n"
"  case _            => println(\"Bonjour, étranger.\")\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 ""
"Il est aussi possible d'avoir plusieurs instructions par branches, et même "
"d'avoir plusieurs valeurs sur une branche donnée, séparées par le caractère "
"<code>|</code>."

#. 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 ""
"nom match {\n"
"  case \"Martin\" | \"Gerald\" => println(\"Bonjour \"+nom+\", entre.\"); ouvreLaPorte()\n"
"  case _                            => println(\"Bonjour étranger. Passe ton chemin sans entrer.\"); fermeLaPorte()\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 ""
"Il est même possible d'ajouter des gardes à vos branches. Il s'agit de "
"conditions supplémentaires qui doivent être respectées pour que la branche "
"soit appliquée. C'est par exemple pratique pour faire du filtrage sur un "
"ensemble de valeurs."

#. 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(\"Salut gamin!\")\n"
"  case i if i&lt;20 => println(\"Salut mec\")\n"
"  case i if i&lt;30 => println(\"Bonjour jeune homme\")\n"
"  case _           => println(\"Bonjour monsieur\")\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 ""
"Remarquez qu'il n'est pas nécessaire de vérifier à la seconde ligne que la "
"valeur est supérieure à 10 puisque les lignes sont considérées dans l'ordre. "
"Si la seconde ligne est considérée, c'est que la première ne correspondait "
"pas."

#. 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 ""
"Enfin, il est même possible de filtrer sur plusieurs variables à la fois!"

#. 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(\"C'est le point origine\")\n"
" case (_,0) => println(\"C'est un point de l'ordonnée\")\n"
" case (0,_) => println(\"C'est un point de l'abscisse\")\n"
" case (_,_) => println(\"C'est un point quelconque\")\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 ""
"Je vous avais bien dit que le filtrage scala était une construction "
"surpuissante ! Je l'adore !"

#. 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]Appliquez les améliorations que nous venons de voir pour "
"adapter le code de votre buggle au nouveau pas de danse explicité ci-dessous."
"[/!] \n"
"[!python]Nous allons maintenant apprendre un nouveau pas de danse à nos "
"buggles. Il est un peu plus complexe, mais sinon, c'est toujours la même "
"histoire.[/!] \n"
"Remarquez qu'il est maintenant possible d'avancer jusqu'à 6 cases à la fois."

#. type: Content of: <table><tr><td>
#: src/lessons/welcome/bdr/BDR2.html:144
msgid "Turn back and move one step forward"
msgstr "Se retourner (faire demi-tour) et avancer d'une case"

#. 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 "Avancer de quatre cases"

#. 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 "Avancer de cinq cases"

#. 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 "Avancer de six cases"

#. 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 "Reculer de quatre cases"

#. 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 "Reculer de cinq cases"

#. 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 "Reculer de six cases"

#. type: Content of: <p>
#: src/lessons/welcome/bdr/BDR2.html:163
msgid "When you program works again, proceed to next exercise."
msgstr ""
"Quand votre programme fonctionne de nouveau, passez à l'exercice suivant."

#. 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 ""
"Nous allons maintenant apprendre à la buggle à explorer son monde. Sa "
"position de départ est en bas à gauche, et elle doit visiter toutes les "
"cases jusqu'en haut (en coloriant le sol sur son passage).  La boucle "
"principale de votre code doit être de la forme :"

#. 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 ""
" baisser le crayon\n"
" tant que l'on est pas à la position finale\n"
"   avancer comme un serpent\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 ""
"Il faut donc écrire deux méthodes spécifiques. L'une renvoie un booléen "
"indiquant si l'on se trouve à la position finale, tandis que l'autre avance "
"d'un pas de serpent."

#. 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 ""
"On se trouve sur une position finale si et seulement si les deux conditions "
"suivantes sont vraies.:"

#. type: Content of: <ul><li>
#: src/lessons/welcome/traversal/Snake.html:19
msgid "We are facing a wall"
msgstr "On est face à un mur"

#. 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 ""
"Il y a un mur au nord de la buggle. Donc, si la buggle regarde à l'est, il "
"faut vérifier s'il y a un mur à gauche, et si la buggle regarde à l'ouest, "
"il faut vérifier s'il y a un mur à droite."

#. 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 ""
"On obtient la direction actuelle de la buggle avec la méthode "
"<code>getDirection()</code>, et on sait si elle regarde à l'est avec le test "
"<code>getDirection() == [!scala|python|java]Direction.[/!]EST</code> (ou "
"bien OUEST)."

#. 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 ""
"Pour la vérification elle-même, rien de magique : il faut se tourner et "
"regarder si on est face à un mur une fois tourné."

#. 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 ""
"Ensuite un pas de serpent se fait en avançant d'un pas si l'on est pas face "
"à un mur, et en montant à la ligne du dessus sinon (dit autrement, si on "
"regarde à l'ouest face à un mur, il faut tourner à droite, avancer, tourner "
"à droite)."

#. 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 ""
"Indication: la boucle principale de votre code doit continuer tant que la "
"fonction adéquate renvoie faux. On peut l'écrire de deux façons:"

#. 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 (fonctionTest() == [!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]Vous pouvez préférer l'écrire ainsi:[/!] \n"
"[!java|scala|c]Comme le point d'exclamation (!) dénote la négation booléenne "
"en [!thelang], vous pouvez aussi l'écrire:[/!]"

#. 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 [/!]fonctionTest())[!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 ""
"L'objectif de cette série d'exercices est de faire parcourir le monde à la "
"buggle.  Elle doit de plus numéroter les différentes cases rencontrées pour "
"montrer son ordre de parcours."

#. type: Content of: <p>
#: src/lessons/welcome/traversal/column/TraversalByColumn.html:7
msgid "The main loop of your code should be something like:"
msgstr "La boucle principale du code que vous devez écrire est de la forme :"

#. 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 ""
" tant que l'on n'est pas à la position finale\n"
"   aller à la prochaine position\n"
"   marquer le numéro de case au sol\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 ""
"À la différence des exercices vus jusque là, nous n'allons pas utiliser les "
"méthodes <code>avance()</code>, <code>recule()</code> et autres, mais nous "
"allons calculer les coordonnées de la prochaine position de la buggle, et "
"utiliser la méthode <code>setPos(x, y)</code> pour <i>téléporter</i> la "
"buggle directement à cette position. Par exemple, <code>setPos(3, 5)</code> "
"téléporte la buggle sur la case où x=3 et 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 ""
"Le premier objectif est donc d'écrire une fonction booléenne indiquant si la "
"buggle a atteint la position finale ou non, càd si elle est arrivée en bas à "
"droite du monde.  Vous utiliserez pour cela les méthodes "
"<code>getMondeHauteur()</code> et <code>getMondeLargeur()</code> qui "
"retournent respectivement la hauteur et la largeur du monde.  Votre test est "
"de comparer les coordonnées actuelles de votre buggle (que vous pouvez "
"retrouver avec les méthodes <code>getX()</code> et <code>getY()</code>) aux "
"dimensions du monde."

#. 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 ""
"Attention, la première ligne et la première colonne sont numérotées 0 au "
"lieu de 1, et l'origine (0, 0) est dans le coin en haut à gauche. Cela peut "
"sembler étonnant, mais ces choses sont traditionnelles en informatique."

#. 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 ""
"Ensuite, il faut écrire le code pour aller à la position suivante. Dans cet "
"exercice, il faut parcourir le monde colonne par colonne. Donc, si on est "
"tout en bas d'une colonne, il faut aller en haut de la colonne suivante. "
"Sinon, il faut aller à la case du dessous."

#. 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 ""
"À ce point, vous pouvez lancer votre programme pour vérifier que la buggle "
"parcours bien le monde dans l'ordre souhaité, et s'arrête bien quand il "
"faut. Pensez à utiliser le bouton <b>stop</b> pour arrêter l'exécution si "
"votre programme ne se termine pas correctement."

#. 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 ""
"Il est temps d'écrire au sol les numéros de case. Pour cela, vous aurez "
"besoin d'un compteur initialisé à zéro au début de votre code, et incrémenté "
"à chaque pas (par exemple avec <code>cpt += 1;</code>). Ensuite, il faut "
"écrire cette valeur au sol (avec <code>ecritMessage()</code>)."

#. 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 ""
"Il est sans doute nécessaire d'écrire la valeur de la première[!java|scala|"
"c] ou dernière[/!] case en dehors de la boucle principale[!java|scala|c], "
"selon que vous utilisez une boucle <code>while</code> ou <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 ""
"Il faut encore faire parcourir le monde à la buggle en numérotant les cases "
"au passage, mais l'objectif de cet exercice est d'écrire un parcours ligne "
"par ligne. La plupart du code écrit à l'exercice précédent reste utilisable, "
"mais la méthode calculant les prochaines coordonnées de la buggle doit être "
"modifiée en conséquence : si l'on est tout à droite d'une ligne, il faut "
"aller au début de la ligne précédente. Si non, il faut aller sur la case à "
"droite."

#. 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 ""
"Cette fois, il faut parcourir le monde en diagonale. Regardez le monde "
"objectif pour voir les détails de l'ordre de parcours demandé."

#. 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 ""
"Il vous est recommandé d'utiliser une variable entière <code>diag</code> "
"conservant le numéro de la diagonale que la buggle est en train de parcourir."

#. 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 ""
"Cette fois, il faut parcourir le monde en zig-zag. Regardez le monde "
"objectif pour voir les détails de l'ordre de parcours demandé."

#. type: Content of: <h2>
#: src/lessons/welcome/summative/Moria.html:2
msgid "Lost in the Moria"
msgstr "Perdu dans la 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 ""
"Vos buggles sont coincées dans la mine de la Moria ! Des rochers bloquent la "
"sortie, et il va falloir dégager le chemin pour passer. Bon, ok, ce ne sont "
"pas vraiment des rochers mais juste des biscuits, et vos buggles pourraient "
"facilement passer au dessus sans se fatiguer. Mais il est probablement plus "
"simple de programmer vos buggles pour qu'elles déplacent ces «rochers» "
"plutôt que de tenter de les convaincre de passer à la suite sans avoir "
"résolu le problème. Les nains sont souvent un peu têtus..."

#. 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 ""
"Donc, il vous faut trouver le premier biscuit en travers de votre chemin "
"(marchez vers l'est jusqu'à vous trouver au dessus d'un biscuit), le "
"ramasser, et retourner à l'autre extrémité du couloir pour le déposer "
"(marchez vers l'ouest jusqu'à vous trouver au dessus d'un biscuit puis "
"reculez d'un pas). Il faut ensuite faire de même pour tous les biscuits "
"jusqu'à trouver la sortie. Une fois ceci fait, marchez vers l'air frais "
"comme dans le monde objectif, cela ne sera plus qu'à quelques pas de là."

#. 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 ""
"Pour compliquer encore les choses, vous devez écrire un programme qui "
"fonctionne pour toutes les buggles, même si écrire un programme spécifique à "
"chacune serait peut-être un peu plus simple. Il semblerait qu'utiliser une "
"boucle <code>while</code> soit la seule solution pour déplacer vos buggles "
"correctement."

#. 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 ""
"Quand vous serez parvenu à sortir de ce piège, vous pouvez passez à "
"l'exercice suivant. Cet exercice est un peu plus difficile que les autres, "
"et vous pouvez tout à fait le laisser momentanément de coté pour y revenir "
"plus tard si vous n'y parvenez pas pour l'instant."

#. type: Content of: <h3>
#: src/lessons/turmites/Main.html:2 src/lessons/turmites/short_desc.html:2
msgid "The turmites"
msgstr "Les 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 ""
"Cet ensemble d'activités vous permet de jouer avec les fourmis de Langton, "
"qui sont des machines de Turing à deux dimensions. Il s'agit d'exercices "
"d'application très simple, à la portée de débutants, mais ils ouvrent la "
"porte sur un univers fascinant."

#. 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 ""
"Ce mécanisme a été inventé en 1986 par Chris Langton, et généralisé après de "
"plusieurs façons (comme nous le verrons dans les prochains exercices). Il a "
"été prouvé que les turmites et les machines de Turing sont aussi puissantes "
"les unes que les autres : une trajectoire de  fourmi peut être utilisée pour "
"calculer n'importe quel circuit booléen, et la fourmi est donc capable de "
"calcul universel (dit autrement, n'importe quel calcul possible peut être "
"réalisé en utilisant la fourmi comme instrument de calcul). Encore un autre "
"sujet de fascination..."

#. 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 ""
"Les fourmis de Langton multicolores ont été découvertes en 1995 par Propp et "
"Al. Un fait amusant est que les fourmis dont le nom est une paire de lettres "
"identiques (LL et RR) produisent des dessins symétriques. Ce fait a même été "
"prouvé formellement."

#. 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 ""
"Consultez la page correspondante sur Wikipedia, à partir de laquelle cet "
"exercice est inspiré, pour d'avantages de détails."

#. 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 "Que puis-je faire pour améliorer cet univers de 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 ""
"Comme souvent, plusieurs points pourraient être améliorés dans le code de "
"cet univers pour l'améliorer&nbsp;:"

#. 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 ""
"Il nous manque probablement quelques exercices progressifs. Celui sur la "
"création de turmites est particulièrement aride. Nous devrions probablement "
"introduire les motifs de façon plus pédagogique."

#. 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 ""
"Il serait peut-être amusant d'introduire un exercice sur les castors occupés "
"(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 ""
"Découvrez les fourmis de Langton, qui sont des machines de Turing à deux "
"dimensions."

#. 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 ""
"Ces activités sont très simples, à la portée de débutants, et elles ouvrent "
"la porte sur un univers fascinant."

#. type: Content of: <h2>
#: src/lessons/turmites/langton/Langton.html:2
msgid "Langton's ant"
msgstr "La fourmi 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 ""
"Dans cet exercice, vous aller métamorphoser votre buggle en une <i>fourmi de "
"Langton</i>. Ces petits animaux artificiels sont très intéressants parce "
"qu'ils suivent des règles simples qui dépendent seulement de leur "
"environnement local, et qu'après une période d'un comportement d'apparence "
"chaotique, un schéma général <i>apparaît</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 ""
"Les règles sont absolument triviales: pour calculer quel sera le prochain "
"pas, vous devez regarder la couleur actuelle du sol ( en utilisant "
"<code>getCouleurSol()</code>). Si c'est blanc, changez la en noir, tournez à "
"droite et avancez d'une case. Si la couleur du sol est le noir, changez la "
"en blanc, tournez à gauche et avancez d'une case."

#. 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 ""
"Il est difficile de trouver des règles plus simples, n'est-ce pas ? Et bien, "
"allons-y et codons-les maintenant. Vous avez à compléter la méthode "
"<code>step()</code>, qui définit le comportement de la fourmi à chaque pas. "
"Vous utiliserez probablement la méthode <code>getCouleurSol()</code> pour "
"récupérer la valeur de la case sur laquelle la fourmi se trouve. Les "
"couleurs intéressantes sont tout simplement <code>Color.black</code> pour le "
"noir ou <code>Color.white</code> pour le blanc."

#. 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 ""
"Pour comparer les couleurs, il n'est pas possible d'utiliser le double signe "
"égal (==) parce ces choses ne sont pas des valeurs scalaires normales mais "
"des objets. À la place, vous devez écrire quelque chose comme cela&nbsp;:"

#. 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 ""
"Color c /* = une initialisation*/;\n"
"if (c.equals(Color.black)) {\n"
"  /* c'était égal */\n"
"} else {\n"
"  /* ce n'était pas égal */\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 ""
"Changer la couleur du sol n'est pas difficile, seulement un peu long : vous "
"avez à changer la couleur de la brosse de votre buggle, l'abaisser (pour "
"marquer la case courante -- avec <code>baisseBrosse()</code>), et relever la "
"brosse (avec <code>leveBrosse()</code>) pour éviter des problèmes lorsque la "
"buggle va se déplacer. Vous être naturellement libre d'organiser votre code "
"comme vous le souhaitez, mais vous pouvez vouloir écrire une méthode "
"<code>setCouleurSol(couleur)</code> pour factoriser le tout."

#. 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 ""
"Comme vous pouvez le constater avec l'exécution de cet exercice, l'intérêt "
"dans cet algorithme est qu'après environ 10 000 pas de comportement "
"relativement chaotique, la fourmi commence à suivre un schéma régulier. "
"L'émergence de ce schéma régulier à partir du chaos est réellement "
"fascinant, n'est-ce pas ? Passez à l'exercice suivant pour en voir plus."

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

#. 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 ""
"Il y a plusieurs façons de changer le concept de la fourmi de Langton. Dans "
"cet exercice, nous allons tout d'abord étudier le fait d'utiliser plus de "
"deux couleurs. Cela reste très similaire au cas de base : le comportement à "
"chaque pas dépendra toujours de la couleur du sol, mais vous aurez plus de "
"deux possibilités. Cela permet d'avoir plus qu'une seule sorte de fourmi, "
"selon ce que l'on décide de faire pour chaque couleur. Par exemple, la "
"fourmi LRL reconnaît trois couleurs. Elle tourne à gauche sur la première, à "
"droite sur la seconde et à gauche sur la troisième. Selon cette définition, "
"la fourmi de base est de type RL ( puisqu'elle tourne à droite sur les cases "
"blanches et à gauche sur les noires)."

#. 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 ""
"Certaines de ces fourmis dessinent des schémas fascinants ( changez de monde "
"pour les voir ):LLRR construit une figure symétrique ressemblant vaguement à "
"une balle. LRRRRRLLR dessine un carré, LLRRRLRLRLLR dessine un schéma "
"régulier tordu après une période ressemblant à un comportement chaotique, et "
"RRLLLRLLLRRR semble remplir un sablier..."

#. 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 ""
"Métamorphoser votre buggle en une fourmi de Langton générique n'est pas très "
"compliqué, même si ce n'est pas complètement trivial. Comme précédemment, "
"vous avez à écrire une fonction <code>step</code>. Mais cette fois, elle "
"reçoit deux tableaux comme paramètres. Le premier définit les règles à "
"suivre selon la couleur du sol tandis que le deuxième donne la séquence de "
"couleurs à utiliser. Par exemple, la fourmi de base aurait \n"
"[!java]<code>{'R', 'L'}</code> et <code>{Color.white, Color.black}</"
"code>[/!]\n"
"[!python]<code>['R', 'L']</code> et <code>[Color.white, Color.black]</"
"code>[/!]\n"
"[!scala]<code>Array('R', 'L')</code> et <code>Array(Color.white, Color."
"black)</code>[/!]\n"
"comme arguments."

#. 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 "A chaque pas, vous avez toujours à appliquer le pseudo-code suivant :"

#. 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 "Trouver la position de la couleur du sol dans la séquence de couleur;"

#. 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 ""
"Tourner à gauche ou à droite selon le contenu du tableau de règle à cette "
"position;"

#. 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 ""
"Marquer le sol de la case courante avec la prochaine couleur dans la "
"séquence ( la dernière couleur est suivie par la première);"

#. type: Content of: <ul><li>
#: src/lessons/turmites/langtoncolors/LangtonColors.html:34
msgid "Move forward by one step."
msgstr "Avancer d'un pas"

#. 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 "Vous devriez maintenant avoir assez d'informations pour réussir."

#. 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 ""
"Cette exercice explore une nouvelle façon d'étendre le concept de la fourmi "
"de Langton. Maintenant, le comportement de la fourmi ne dépend plus "
"seulement de la couleur du sol, mais aussi de son état interne (représenté "
"par une valeur entière). L'idée de changer la fourmi en un automate découle "
"naturellement du concept de la machine de Turing. Ceci explique le nom de "
"ces nouveaux animaux, qui est un mélange de <i>Turing</i> et de <i>Termite</"
"i> (si vous ne savez pas ce qu'est une machine de Turing, vous devriez vous "
"jeter sur Wikipedia parce qu'il est tout simplement impossible d'être un "
"vrai informaticien sans le savoir)."

#. 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 ""
"Une fois encore, vous devez seulement écrire la méthode <code>step()</code>, "
"qui s'occupe de faire faire un pas à la turmite. Une fois encore, vous devez "
"tout d'abord trouver le rang de la couleur actuelle du sol dans la liste des "
"couleurs. Mais cette fois, <code>rule</code> dépend à la fois de la couleur "
"courante et de l'état courant. <code>rule</code> contient en fait trois "
"informations dans chaque situation : la couleur à mettre, le mouvement à "
"effectuer, et la valeur du prochain état. \n"
"Par exemple, [!java|python]rule[1][0][/!][!scala]rule(1)(0)[/!] contient "
"l'information à utiliser quand <code>state==1</code> et <code>color==0</"
"code>. En d'autres mots, vous pouvez récupérer l'information relative à "
"votre situation actuelle en utilisant \n"
"<code>[!java|python]rule[etatCourant][couleurActuelle][/!][!"
"scala]rule(etatCourant)(couleurActuelle)[/!]</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 ""
"Chaque ensemble d'informations contient trois valeurs.\n"
"La première est le rang de la couleur à mettre sur le sol.\n"
"La deuxième est le mouvement à effectuer, avec la notation suivante : "
"0=stop, 1=pas de virage, 2=gauche, 4=demi-tour, 8=droite. Veuillez noter que "
"si l'instruction est stop, vous ne devez même pas avancer sur cette étape "
"(mais vous ne devez pas arrêter votre programme pour autant : les prochains "
"pas peuvent faire quelque chose d'autre). Finalement, le troisième entier "
"est la valeur du prochain <code>state</code> à avoir après cette itération."

#. 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 ""
"Puisque ces notations arbitraires sont parfois difficiles à se souvenir, "
"vous devriez définir un ensemble de constantes que vous pouvez utiliser à la "
"place des valeurs numériques. Leurs noms pourraient être GAUCHE, DROITE, "
"etc.\n"
"[!scala]Déclarez simplement ces valeurs avec le mot-clé <code>val</code> au "
"lieu de <code>var</code>. De toute façon, on devrait toujours utiliser "
"<code>val</code> au lieu de <code>var</code> quand on peut.[/!]\n"
"[!java]Les modificateurs <code>final static</code> devant le nom du type est "
"la façon Java de marquer des constant en Java. \n"
"  Vous devriez écrire par exemple <code>static final int TOUTDROIT=1;</"
"code>\n"
"  Désolé de la complexité de cette notation. [/!]\n"
"[!python]Par convention, de telles «variables constantes» sont écrites tout "
"en majuscule en Python.\n"
"  Rien ne vous empêche d'un point de vue technique de les modifier, mais ca "
"serait une très mauvaise idée.[/!]\n"
"Vous devriez les écrire en dehors de toute méthode pour les rendre visible "
"de partout."

#. 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 ""
"Utilisez de telles constantes aident beaucoup à rendre le code plus "
"lisible.\n"
"Comparez les deux morceaux de code suivant:"

#. 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[etat][couleurActuelle][MVT_SUIVANT] == GAUCHE) {[/!][!python]if rule[etat][couleurActuelle][MVT_SUIVANT] == GAUCHE:[/!][!scala]if (rule(etat)(couleurActuelle)(MVT_SUIVANT) == GAUCHE) {[/!]\n"
"    gauche()[!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 "C'est un peu plus long, mais bien plus agréable à lire que ceci&nbsp;:"

#. 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"
"    gauche()[!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 ""
"Enfin, vous devriez également écrire une branche <code>elif</code> pour la "
"condition <code>STOP</code>. Avoir une branche <code>else</code> qui affiche "
"un message d'erreur tel que \"situation inattendue\" est une bonne pratique. "
"Celà permet d'expliciter les présupposés du code, et assure un message "
"d'erreur plus explicite si ces suppositions s'avèrent erronées. Le problème "
"suivant est que nous n'avons rien à faire faire dans la branche du cas "
"<code>STOP</code>, mais que python n'autorise pas de branche <code>else</"
"code> vide. Il faut alors utiliser l'instruction <code>pass</code> là où il "
"n'y a rien à faire. Cela indique à Python qu'il y a bien une branche à cet "
"emplacement, mais qu'elle ne fait rien."

#. 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 ""
"Vous devriez probablement utiliser un [!java]switch[/!][!scala]filtrage[/!] "
"pour que votre code reste lisible. Si vous avez oublié ce que c'est, "
"retournez à <a href=\"plm://lessons.welcome/bdr.BDR2\">cet exercice</a>."

#. type: Content of: <h2>
#: src/lessons/turmites/helloturmite/HelloTurmite.html:69
msgid "Bibliographical notes"
msgstr "Notes bibliographiques"

#. 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 ""
"D'après Wikipedia, les turmites ont été inventés indépendamment à la fin des "
"années 80. Il a été démontré que les turmites en général sont exactement "
"équivalent en terme de puissance à des machines de Turing à une dimension "
"avec un ruban infini, et peut donc simuler les autres. Cela signifie "
"qu'absolument tous les programmes auxquels vous pouvez penser peuvent "
"théoriquement être calculé sur cet outil."

#. type: Content of: <h2>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:2
msgid "Creating Turmites"
msgstr "Créer des 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 ""
"Cet exercice vous permet de construire vos propres turmites. Pour réussir "
"cet exercice, vous devez simplement écrire une méthode <code>init()</code> "
"qui initialise <code>rule</code> pour utiliser les tables de transitions "
"suivantes (de Wikipedia), met la position initiale de la buggle à (8;33), et "
"demande de faire 8342 pas."

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

#. 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 "Couleur à mettre"

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

#. type: Content of: <table><tr><th>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:21
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:24
msgid "Next state"
msgstr "État suivant"

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

#. 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 ""
"Où les virages à effectuer sont \n"
"<b>L</b> (90° vers la gauche -- left), \n"
"<b>R</b> (90° vers la droite -- right), \n"
"<b>N</b> (rien -- no turn),\n"
"<b>U</b> (demi tour de 180° -- U-turn)."

#. type: Content of: <h2>
#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:51
msgid "Going further"
msgstr "Aller plus loin"

#. 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 ""
"Cet exercice est naturellement une excuse pour vous laisser expérimenter vos "
"propres turmites. Vous êtes libres de changer la table de transition et le "
"nombre de pas pour expérimenter par vous-même. A ce propos, vous pouvez "
"trouver la bibliothèque Ed Pegg Jr's utile. Si vous trouvez de nouveaux "
"schémas intéressants, envoyez-les nous pas email afin que nous les puissions "
"les ajouter à cette liste."

#. 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 ""
"De plus, Wikipedia manque désespérément de quelques beaux et colorés "
"turmites : seuls des noirs et blancs sont décrits. Vous pouvez considérer "
"l'idée de soumettre vos créations directement à l'encyclopédie libre."

#. 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 ""
"Voici quelques turmites bicolores, issues de http://demonstrations.wolfram."
"com/Turmites/ \n"
"[!scala|python]Elles n'ont pas été écrites avec la syntaxe [!thelang], mais "
"les convertir ne devrait pas poser beaucoup de problèmes.[/!]"

#. 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: La fourmi de Langton\n"
"{{{1, RIGHT , 0}, {0, NOTURN, 0}}}  # 2: Compteur binaire\n"
"{{{0, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 3: Triangle rempli\n"
"{{{0, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {0, NOTURN, 1}}} # 4: Spirale dans une boite\n"
"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 5: Spirale rayurée\n"
"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {1, NOTURN, 0}}} # 6: Pyramide à étages\n"
"{{{0, RIGHT , 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {1, LEFT  , 0}}} # 7: Île entourée\n"
"{{{0, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {0, RIGHT , 1}}} # 8: Set tissé\n"
"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {1, LEFT  , 0}}} # 9: Sorte de flocon de neige\n"
"{{{1, LEFT  , 0}, {0, NOTURN, 1}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 10: Constructeur de ville lent\n"
"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 0}, {0, LEFT  , 1}}} # 11: Art informatisé en boîte\n"
"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 1}, {1, LEFT  , 0}}} # 12: Décollage de ballon (fait une autoroute)\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 13: Autoroute horizontale\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 1}, {1, RIGHT , 0}}} # 14: Autoroute à 45 degrés\n"
"{{{1, LEFT  , 1}, {0, LEFT  , 1}}, {{1, RIGHT , 1}, {0, LEFT  , 0}}} # 15: Autoroute à 45 degrés\n"
"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{1, NOTURN, 0}, {1, RIGHT , 0}}} # 16: Spirale dans une boîte remplie\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: Rectangle doré!\n"
"{{{1, LEFT  , 1}, {1, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 19: Fontaine pétillante\n"
"{{{1, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 20: Armoires imbriquées\n"
"{{{1, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {1, NOTURN, 1}}} # 21: Croix\n"
"{{{1, NOTURN, 1}, {0, NOTURN, 0}}, {{0, RIGHT , 0}, {1, LEFT  , 0}}} # 22: Croissance en dents de scie\n"
"{{{1, NOTURN, 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 23: Croissance par blocs\n"
"{{{1, NOTURN, 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 24: Croissance texturée\n"
"{{{1, NOTURN, 1}, {0, RIGHT , 1}}, {{1, LEFT  , 0}, {1, RIGHT , 0}}} # 25: Croissance en diamands\n"
"{{{1, NOTURN, 1}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 26: Corde enroulée\n"
"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, NOTURN, 1}}} # 27: (croissance)\n"
"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, RIGHT , 1}}} # 28: (spirale carrée)\n"
"{{{1, RIGHT , 0}, {1, RIGHT , 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}} # 29: Croissance ébourifée\n"
"{{{1, RIGHT , 1}, {0, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 30: La fourmi de Langton en carrés\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 1}, {1, LEFT  , 0}}} # 31: Croissance avec des courbes et des blocs\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, NOTURN, 0}, {1, RIGHT , 1}}} # 32: Constructeur de spirales distrait\n"
"{{{1, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 33: Tige de choux-fleur (autoroute à 45 degrés)\n"
"{{{1, RIGHT , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, RIGHT , 0}}} # 34: Piste de vers (croissance cyclique!)\n"
"{{{1, RIGHT , 1}, {1, NOTURN, 0}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 35: Fini par faire une autoroute à deux voies!\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, NOTURN, 0}, {0, NOTURN, 0}}} # 36: Éclosion de moisissure presque symétrique\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, RIGHT , 0}, {1, NOTURN, 1}}} # 37: Fait un 1 dans une autoroute à deux gradients\n"
"{{{1, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 38: Fait immédiatement un 1 dans une autoroute à 3\n"
"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{0, LEFT  , 2}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {1, LEFT  , 0}}} # 39: Croissance de carrés et diagonales\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: Croissance en labyrinthe\n"
"{{{1, LEFT  , 2}, {0, RIGHT , 0}}, {{1, LEFT  , 0}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 43: Croissance en corniches\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 ""
"Les fourmis de Langton ne partagent peut être pas la capacité d'expression "
"des turmites, mais elles restent fascinantes elles aussi. Vous pouvez "
"expérimenter avec elles en utilisant la méthode initLangton(), fournie dans "
"le code de base, qui vous permet de construire une table de transition pour "
"Turmite a partir du nom d'une fourmi de Langton. De petits changements "
"peuvent engendrer de grandes choses. Par exemple, \"RRL\" ne semble pas "
"mener à un quelconque schéma, même après un million de pas, mais \"RLL\" "
"commence à construire un dessin très simple de route au bout de moins de 100 "
"pas !"

#. 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 ""
"Beaucoup de fourmis de Langton construisent des routes: RL, bien entendu, "
"mais aussi RLRLRLLRLR (environ 2500 pas). Le comportement chaotique des "
"fourmis avant la route peut être très court (comme avec RLL qui a seulement "
"besoin de 100 pas pour converger) ou très long, comme avec LLLLLLRRLRRR qui "
"semble chaotique jusqu'à plus de 500 000 pas avant de construire la route ou "
"encore RRLLLRRRLRRR qui nécessite 1 170 000 pour commencer à converger. "
"Certaines sont étroites, d'autres très larges, comme avec RRLRLLRLRR (200 "
"000 pas). Cette fourmi est aussi notable puisque c'est quelque peu carré "
"avant même que la route commence, là où d'autres ne montrent rien de "
"transcendant avant leur route."

#. 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 ""
"Certaines fourmis remplissent des secteurs entiers, comme avec RRLLLRLLLRRR "
"(16 000 pas), RRLLLRLLLRRR (30 000 pas), RRLLLRRRRRLR (125 000 pas) ou "
"RRLRLLRRRRRR (20 000 pas). D'autres encore remplissent tout l'espace (RRLRR "
"après 3000 pas). Certaines de mes favorites sont celles où la fourmi semble "
"rebondir dans une boite qui devient plus grande à chaque rebond, comme avec "
"LRRRRRLLR (30 000 pas). LRRRRLLLRRR est encore plus impressionnant puisque "
"les rebonds dans la boite sont réguliers et puisque la fourmi atteint "
"rapidement son comportement stable (15 000 pas suffisent)."

#. 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 ""
"Enfin, certaines fourmis construisent juste des schémas artistiques. Vous "
"devriez regarder cette vidéo pour un bel aperçu : http://www.youtube.com/"
"watch?v=1X-gtr4pEBU .\n"
"Si vous voulez les implémenter dans votre code, vous devez les permuter de "
"un : Par exemple, celle décrite à 3:42 n'est pas RRLRLRLLRL, mais RLRLRLLRLR "
"(le premier mouvement visible doit être vu comme le dernier)."

#. 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 ""
"Comme vous pouvez le constater en explorant l'ensemble ci-dessus de "
"turmites, elles ne sont généralement pas aussi colorées que les fourmis, "
"mais c'est peut-être car très peu de couleurs sont nécessaires pour "
"expliciter des comportements complexes. Par exemple, il y a un classe "
"spécifique de turmites appelée <i>busy beavers</i> qui sont des turmites qui "
"écrivent énormément de choses avant de s'arrêter ( les <i>busy beavers</i> "
"sont généralement des machines de Turing classiques, mais l'idée correspond "
"parfaitement aux turmites). Il y a une sorte de compétition internationale "
"où les participants font tout leur possible pour trouver le turmite qui "
"couvre la plus grande surface avant de s'arrêter.\n"
"La page web est ici : http://code.google.com/p/ruletablerepository/wiki/"
"TwoDimensionalTuringMachines"

#. type: Content of: <h1>
#: src/lessons/turmites/universe/TurmiteWorld.html:2
msgid "Turmite universe"
msgstr "L'univers des 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 ""
"Cet univers est très semblable à celui des buggles, mais vous n'utiliserez "
"probablement pas toutes les méthodes des buggles. Cette page résume donc les "
"quelques méthodes que vous serez amenés à utiliser."

#. 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]avancePas()[/!][!java|python|scala]avance()[/!] or [!"
"java|c]void [/!]avance([!java|c]int [/!]nbPas[!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]reculePas()[/!][!java|python|scala]recule()[/!] or [!"
"java|c]void [/!]recule([!java|c]int [/!]nbPas[!scala]:Int[/!])"

#. type: Content of: <h1>
#: src/plm/universe/sort/SortingWorld.html:2
msgid "Sorting World"
msgstr "Monde des tris"

#. 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 ""
"Ce monde vous donne les outils pour expérimenter les algorithmes de tris. On "
"peut l'utiliser de deux manières différentes : la première est bien sûr "
"d'écrire les algorithmes de tri demandés. Mais on peut aussi se contenter "
"dans un premier temps de lancer la démo de chaque exercice et observer les "
"algorithmes de tri fonctionner. Cela permet de mieux se rendre compte des "
"différences d'efficacité entre eux."

#. type: Content of: <h2>
#: src/plm/universe/sort/SortingWorld.html:9
msgid "Methods available to sorting algorithms"
msgstr "Méthodes disponibles pour les algorithmes de tri"

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

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

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:11
msgid "<b>Cost</b>"
msgstr "<b>Coût</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 [/!]getNombreValeurs() [!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 "Retourne le nombre de valeurs dans le tableau"

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

#. 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 [/!]plusPetit([!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 ""
"Retourne vrai si le contenu de la case i est strictement inférieur à celui "
"de la case j"

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

#. 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 [/!]plusPetitQue([!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 ""
"Retourne vrai si le contenu de la case i est strictement inférieur à la "
"valeur <code>value</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 "une lecture"

#. 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 [/!]echange([!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 "Échange le contenu de la case i avec celui de la case j"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:21
msgid "two reads, two writes"
msgstr "deux lectures, deux écritures"

#. 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 [/!]copie([!java|c]int [/!]depuis[!scala]:Int[/!], [!java|"
"c]int [/!]vers[!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 "Copie le contenu de la case 'depuis' dans la case 'vers'"

#. type: Content of: <table><tr><td>
#: src/plm/universe/sort/SortingWorld.html:23
msgid "one read, one write"
msgstr "une lecture, une écriture"

#. 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 [/!]getValeur([!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 "Retourne la valeur de la case 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 [/!]setValeur([!java|c]int [/!]idx[!scala]:Int[/!], [!java|"
"c]int [/!]valeur[!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 "Affecte la valeur '<code>valeur</code>' à la case 'idx'"

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

#. 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 [/!]estSelectionne() [!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 "Renvoi si le monde actuel est sélectionné dans l'interface graphique."

#. type: Content of: <h2>
#: src/plm/universe/sort/SortingWorld.html:35
msgid "History view"
msgstr "Vue de l'historique du monde"

#. 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 ""
"Il ne suffit pas de trier le tableau pour passer les exercices. Votre "
"solution doit suivre scrupuleusement le comportement attendu de chaque "
"exercice. Ceci est vérifié en comptant le nombre d'opérations de lecture et "
"d'écriture sur le tableau effectuées lors de ce tri. En cas de problème, il "
"est souvent assez difficile de comprendre la différence entre le "
"comportement attendu et le comportement effectif."

#. 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 ""
"Pour cela, il est possible d'explorer graphiquement l'historique de "
"n'importe quel monde de tri. Passez par exemple au monde Objectif et "
"utilisez son menu contextuel (clic droit) pour choisir entre la vue de "
"l'état courant du monde et la vue de son histoire."

#. 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 ""
"La vue de l'historique n'est pas aussi complexe qu'elle en a l'air à "
"première vue. Le temps s'écoule de gauche à droite, et les cases du tableau "
"sont représentée de haut en bas. Les lignes de différentes couleurs qui "
"serpentent représentent les différentes valeurs contenues dans le tableau. "
"Quand deux lignes se croisent, cela signifie que les valeurs du tableau ont "
"été échangées à ce moment de l'historique; un embranchement signifie que la "
"valeur a été copiée; une valeur en violet suivie d'un point d'interrogation "
"a été lue avec getValeur() et une valeur en rouge suivie d'un point "
"d'exclamation a été écrite avec setValeur()."

#. 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 ""
"Cette vue, inspirée d'Aldo Cortesi, est très pratique pour comprendre le "
"comportement des algorithmes de tri."

#. type: Content of: <h3>
#: src/lessons/sort/basic/Main.html:2 src/lessons/sort/basic/short_desc.html:2
msgid "Sorting Algorithms"
msgstr "Algorithmes de tri"

#. 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 ""
"Cette leçon vous permet d'expérimenter avec les algorithmes de tri "
"classiques (et certaines optimisations moins courantes de ceux-ci). "
"L'objectif est double: il s'agit tout d'abord de mieux comprendre le "
"principe de ces algorithmes en les codant vous-même.  Mais même si vous ne "
"codez pas les algorithmes, vous pouvez utiliser le mode démo pour organiser "
"des \"courses\" entre ces algorithmes afin d'expérimenter en pratique ce "
"qu'implique la différence de complexité asymptotique entre deux algorithmes."

#. 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 ""
"Plus d'exercices sont prévus à l'avenir. Certain porteront sur les tris\n"
"récursifs (en particulier QuickSort et MergeSort) tandis que d'autres\n"
"s'appuieront sur d'autres micro-mondes pour appliquer ces algorithmes à "
"d'autres\n"
"situations."

#. 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 ""
"D'autres représentations graphiques pourraient être proposées, telles que "
"celles\n"
"présentées sur le site <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 ""
"Cette leçon vous permet d'expérimenter avec des algorithmes de tri "
"classiques (ainsi qu'avec certaines variantes moins classiques :)"

#. 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 ""
"Vous êtes supposé maîtriser les bases de la programmation avant de tenter "
"cette leçon."

#. type: Content of: <h1>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:2
msgid "BubbleSort"
msgstr "Tri à bulle"

#. 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 ""
"Bienvenue dans l'univers des tris. Il permet d'expérimenter avec les "
"algorithmes de tri existants. La liste des primitives que vous pouvez "
"utiliser dans vos programmes est disponible dans la documentation de "
"référence du monde (Aide / À propos de cet univers)."

#. 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 ""
"Il ne suffit pas de trier le tableau pour passer les exercices. Votre "
"solution doit suivre scrupuleusement le comportement attendu de chaque "
"exercice. Ceci est vérifié en comptant le nombre d'opérations de lecture et "
"d'écriture sur le tableau effectuées lors de ce tri."

#. 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 ""
"Quand votre algorithme diverge de l'attendu, il peut être difficile de "
"comprendre la différence de comportement. Pour cela, il est possible "
"d'explorer graphiquement l'historique de n'importe quel monde de tri. Passez "
"par exemple au monde Objectif et utilisez son menu contextuel (clic droit) "
"pour choisir entre la vue de l'état courant du monde et la vue de son "
"histoire."

#. type: Content of: <h2>
#: src/lessons/sort/basic/bubble/AlgBubbleSort1.html:28
msgid "First attempt at BubbleSort"
msgstr "Première tentative pour le tri à bulle"

#. 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 ""
"Le premier algorithme de tri est le plus simple existant : le tri à bulles "
"ou tri par propagation consiste à faire remonter progressivement les plus "
"petits éléments d'une liste, comme les bulles d'air remontent à la surface "
"d'un liquide. L'algorithme parcourt la liste, et compare les couples "
"d'éléments successifs. Lorsque deux éléments successifs ne sont pas dans "
"l'ordre croissant, ils sont échangés. Après chaque parcours complet de la "
"liste, l'algorithme recommence l'opération. Lorsque aucun échange n'a lieu "
"pendant un parcours, cela signifie que la liste est triée : l'algorithme "
"peut s'arrêter.  La simplicité de cet algorithme justifie son étude, mais "
"ses piètres performances (O(n^2) en moyenne) font qu'il n'est quasiment "
"jamais utilisé en pratique."

#. 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 "Montrer l'indice (le pseudo-code)"

#. 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 "Le pseudo-code de l'algorithme du tri à bulles est donc le suivant :"

#. 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 ""
"faire: \n"
"        Pour tout i dans [0,lgr-2]\n"
"          Si les cases i et i+1 doivent être inversées, le faire\n"
"     tant qu'on a inversé des choses lors du dernier parcours\n"

#. type: Content of: <h1>
#: src/lessons/sort/basic/bubble/AlgBubbleSort2.html:2
msgid "BubbleSort (take 2)"
msgstr "Tri à bulle (deuxième version)"

#. 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 ""
"En étudiant le comportement du tri à bulle, on peut voir une première "
"optimisation facile à effectuer: Après un parcours, le dernier élément du "
"tableau est forcément le plus grand d'entre tous car le parcours l'a fait "
"remonter comme une bulle à sa position. Plus généralement, après N parcours, "
"on sait que les N derniers éléments du tableau sont déjà triés. En "
"conclusion, il n'est pas utile de les recomparer sur les parcours suivants. "
"Dans un premier temps, nous ferons autant de parcours qu'il y a d'éléments "
"dans le tableau."

#. 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 "Le pseudo-code de l'algorithme BubbleSort2 est le suivant :"

#. 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 ""
"Pour tout i dans [lgr-2,0] (parcours du plus grand au plus petit)\n"
"       Pour tout j dans [0, i]\n"
"          Si les cases j et j+1 doivent être inversées, le faire\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 ""
"Lorsqu'on exécute cet algorithme, il peut être un peu décevant de constater "
"qu'il s'exécute à la même vitesse que la version de base de BubbleSort. "
"C'est un effet graphique seulement puisque seules les changements de valeurs "
"dans le tableau sont représentées. Comme cette variante consiste à éviter "
"des comparaisons inutiles, elle effectue très exactement le même nombre "
"d'échanges que la version de base. Il est donc normal que notre interface "
"graphique la représente à la même vitesse que la version de base. Mais les "
"statistiques sur le nombre de lectures montrent bien que l'on a économisé "
"plus d'un quart du nombre de lectures, ce qui n'est pas si 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 ""
"D'un point de vue complexité algorithmique, cela ne change rien: cette "
"variante est toujours en O(n2) en moyenne (on ne gagne que sur la constante)."

#. type: Content of: <h1>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:2
msgid "BubbleSort (take 3)"
msgstr "Tri à bulle (troisième version)"

#. 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 ""
"Réintroduisons maintenant la petite optimisation que nous avions retiré à "
"l'étape précédente : Si un parcours n'a rien inversé, c'est que le tableau "
"est maintenant trié. Dans ce cas, il faut arrêter le processus de tri."

#. 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]Pour cela, utilisez simplement le mot-clé <code>break></"
"code>, qui coupe l'exécution de la boucle englobante. Attention, si vous "
"avez plusieurs boucles imbriquées, c'est celle situé tout au fond (au plus "
"près du mot-clé break) qui est cassée.[/!]\n"
"[!scala]Pour cela, quittez simplement la fonction courante en appelant "
"<code>return</code> sans lui associer de valeur.[/!]"

#. type: Attribute 'alt' of: <div>
#: src/lessons/sort/basic/bubble/AlgBubbleSort3.html:14
msgid "If you want, this tip shows the pseudo-code."
msgstr "Si vous le désirez, cet indice montre le pseudo-code."

#. 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 ""
"Pour tout i dans [lgr-2,0] (parcours du plus grand au plus petit)\n"
"       Pour tout j dans [0, i]\n"
"          Si les cases j et j+1 doivent être inversées, le faire\n"
"       Si le parcours sur les j n'a rien inversé, casser la boucle\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 ""
"Cet optimisation est encore plus décevante : on ne gagne que quelques pour-"
"cents en nombre de lectures sur BubbleSort2."

#. type: Content of: <h1>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort1.html:2
msgid "CocktailSort"
msgstr "Tri Cocktail"

#. 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 ""
"Pour améliorer encore notre algorithme, il faut regarder un peu plus en "
"détail son comportement. On peut constater que les grands éléments sont très "
"rapidement mis en place tandis que les petits éléments se déplacent très "
"lentement vers leur destination. On parle classiquement de lièvres et de "
"tortues pour désigner respectivement les grandes valeurs et les petites "
"valeurs."

#. 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 ""
"Pour permettre aux tortues d'aller plus vite, le tri cocktail parcours "
"alternativement le tableau de gauche à droite et de droite à gauche. Voici "
"son pseudo-code:"

#. 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 ""
"Faire\n"
"  Pour tout i dans [0,lgr-2], faire:\n"
"    si i et i+1 doivent être échangées, le faire\n"
"  Pour tout i dans [lgr-2,0] en descendant, faire:\n"
"    si i et i+1 doivent être échangées, le faire\n"
"tant qu'au moins l'un des parcours a inversé un élément\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 ""
"On constate que le tri cocktail fait très exactement le même nombre "
"d'échanges que le tri à bulle, mais qu'il améliore les choses sur le nombre "
"de lectures. Il reste cependant moins bon que BubbleSort2 en la matière."

#. type: Content of: <h1>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort2.html:2
msgid "CocktailSort (take 2)"
msgstr "Tri Cocktail (seconde version)"

#. 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 ""
"Nous allons appliquer la même optimisation que BubbleSort2 à CocktailSort. "
"Il nous faut nous souvenir des bornes du tableau pas encore trié, et le "
"parcourir alternativement de droite à gauche et de gauche à droite:"

#. 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 ""
"debut=0; fin=lgr-2\n"
"Faire\n"
"  Pour tout i dans [debut,fin], faire:\n"
"    si i et i+1 doivent être échangées, le faire\n"
"  fin -= 1 (cela veut dire fin = fin -1)\n"
"  Pour tout i dans [fin, debut] en descendant, faire:\n"
"    si i et i+1 doivent être échangées, le faire\n"
"  debut += 1 (ce qui veut dire debut = debut + 1)\n"
"tant qu'au moins l'un des parcours a inversé un élément\n"

#. type: Content of: <h1>
#: src/lessons/sort/basic/cocktail/AlgCocktailSort3.html:2
msgid "CocktailSort (take 3)"
msgstr "Tri Cocktail (troisième version)"

#. 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 ""
"Même si la complexité algorithmique de CocktailSort2 est la même que le tri "
"à bulle, il semble bien mieux s'en tirer en pratique. On peut encore "
"l'améliorer un tout petit peu en arrêtant tout si le parcours dans l'ordre "
"croissant n'a rien inversé, sans faire le parcours dans l'ordre décroissant. "
"De même, on peut quitter si le parcours croissant a inversé des choses, mais "
"pas le parcours décroissant."

#. type: Content of: <h1>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:2
msgid "InsertionSort"
msgstr "Tri par insertion"

#. 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 ""
"Ce tri est relativement simple à comprendre et à écrire, même s'il n'offre "
"pas les meilleures performances possibles.  Il s'agit d'un algorithme "
"quadratique (complexité asymptotique en O(n2)), mais il est plus efficace en "
"pratique (linéaire dans le meilleur des cas, ie quand le tableau déjà trié "
"et N2/4 en moyenne)."

#. 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 ""
"L'idée est de parcourir tous les éléments du tableau, et d'insérer chacun à "
"sa place dans la partie du tableau déjà triée.  Lorsque l'on regarde un "
"élément x du tableau, on est dans la situation suivante : tous les éléments "
"à gauche du tableau sont déjà triés, et il faut insérer x à sa place dans le "
"tableau."

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:18
msgid "Once this is done, the situation is the following:"
msgstr "Une fois ceci fait, on se retrouve dans la situation suivante:"

#. type: Content of: <p>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:22
msgid "The pseudo-code of this algorithm is thus the following:"
msgstr "Le pseudo-code de cet algorithme est donc le suivant :"

#. 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 ""
"Pour tout i dans [1,lgr-1]\n"
"  stocker la valeur de la case i dans une variable v\n"
"  recopier la case i-1 dans i, si i-1 contient une valeur plus grande que v\n"
"  recopier la case i-2 dans i-1, si i-2 contient une valeur plus grande que v\n"
"  recopier la case i-3 dans i-2, si i-3 contient une valeur plus grande que v\n"
"  recopier la case i-4 dans i-3, si i-4 contient une valeur plus grande que v\n"
"  ...\n"
"  recopier v dans la dernière case recopiée plus haut\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 ""
"Bien entendu, il faut utiliser une boucle pour écrire la grosse permutation "
"circulaire au cœur de la boucle.  L'écrire explicitement de la sorte serait "
"vraiment ... contre-productif."

#. 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 ""
"Si vous vous étiez toujours demandé ce que font les chercheurs en "
"informatique à notre époque, voici un élément de réponse: certains d'entre "
"eux améliorent des algorithmes fondamentaux pour permettre à d'autres de "
"faire des programmes efficaces..."

#. type: Content of: <h2>
#: src/lessons/sort/basic/insertion/AlgInsertionSort.html:40
msgid "Other variation of insertion sort"
msgstr "D'autres variantes du tri par insertion"

#. 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 construit un arbre binaire équilibré des données pour les trier. "
"Cela lui permet d'être en O(nlog n) en moyenne (mais O(n^2) dans le pire "
"cas). Nous n'étudierons pas cet algorithme ici puisque comprendre son "
"fonctionnement demande de savoir ce qu'est un arbre binaire, ce qui est au "
"delà de nos objectifs présents."

#. 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 ""
"Il existe d'autres variantes du tri par insertion, comme PatienceSorting, "
"qui fait des paquets des valeurs et trie ensuite chaque paquet. Cet "
"algorithme présente un pire cas en O(nlog n), et une complexité spatiale en "
"O(n).  LibrarySort (proposé en 2004) échange également un peu d'espace pour "
"du temps puisqu'il présente une complexité moyenne en O(n log n), mais "
"nécessite de stocker des données supplémentaires."

#. 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 ""
"Wikipedia (en anglais) propose une description détaillée de tous ces "
"algorithmes que nous n'avons pas le temps de détailler ici."

#. type: Content of: <h2>
#: src/lessons/sort/basic/shell/AlgShellSort.html:2
msgid "ShellSort"
msgstr "Tri Shell"

#. 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 ""
"Cet algorithme porte le nom de son auteur, Donald Shell, qui l'a publié en "
"1959. Son principe peut être vu comme une application de l'idée du CombSort "
"(faire prendre des raccourcis aux éléments ayant beaucoup de chemin à faire) "
"au tri par insertion (le CombSort est une variante du tri à bulle).  Au lieu "
"de comparer les valeurs adjacentes lors du tri par insertion, on compare des "
"valeurs séparées par un <i>écart</i> plus grand. Plus l'écart est grand et "
"plus les éléments sont déplacés rapidement vers leur position finale, mais "
"aussi plus le déplacement est imprécis. Il faut donc appliquer l'algorithme "
"avec une séquence d'écarts décroissante vers un. Ainsi, à la dernière étape "
"quand l'écart vaut un, on applique l'algorithme de tri par insertion de "
"base, mais sur un tableau déjà presque trié par les étapes précédentes."

#. 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 propose d'utiliser <code>lgr/2</code> comme première valeur de "
"l'écartement, puis de le diviser par deux à chaque étape.  Le pseudo-code "
"est donc le suivant:"

#. 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 ""
"ecart=lgr/2\n"
"tant que ecart>0:\n"
"  appliquer l'algorithme de tri par insertion en comparant i-ecart et i, puis i-2ecart et i-ecart, puis i-3ecart et i-2ecart, 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 ""
"Comme dans le cas du CombSort, la séquence des valeurs prises par l'écart se "
"révèle être d'une importance capitale pour les performances du tri de Shell. "
"Il existe des cas pathologiques qui font que la séquence que nous avons "
"utilisée ici présente une complexité en O(n^2) dans le pire des cas. "
"D'autres séquences ont été proposé: la séquence des incréments de Hibbard "
"(2^k − 1) permet une complexité dans le pire des cas de O(n^(3/2)), les "
"incréments de Pratt (2^i*3^j) permettent un pire cas en O(n log(n)log(n)).  "
"Ces résultats font du tri de Shell un candidat tout à fait valide pour des "
"instances de tableau de quelques centaines de milliers d'éléments quand il "
"est correctement implémenté."

#. 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 ""
"Dans notre cas, les instances de tableaux que nous utilisons sont trop "
"petites pour que ces optimisations présentent un réel avantage. Si on "
"voulait le faire, il faudrait prendre en valeur initiale de l'écart la plus "
"grande valeur de la suite utilisée, puis prendre les valeurs successives en "
"descendant ensuite."

#. 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 ""
"De façon intéressante, déterminer la meilleure séquence d'écart pour le "
"shell sort s'avère être un problème de recherche de notre siècle en "
"informatique. Par exemple, un article publié en 2001 propose la suite "
"suivante, qui semble optimale en pratique pour des tailles de tableau allant "
"jusqu'à 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 "Tri par sélection"

#. 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 ""
"Cet exercice est l'occasion d'implémenter un autre algorithme très "
"classique : le tri par sélection."

#. 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 ""
"Son principe est simplement de sélectionner pour chaque case du tableau la "
"plus petite valeur de la partie pas encore triée. Ainsi, pour la première "
"case, je prend la plus petite valeur du tableau. Pour la seconde, je prend "
"la seconde plus petite valeur, qui se trouve être la plus petite des cases "
"n'étant pas encore triées. Bien entendu, il n'est pas nécessaire de trier la "
"dernière case du tableau, puisqu'elle est déjà triée lorsque vous la "
"considérez."

#. 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 ""
"Plus généralement, pour la case N, je cherche la case M de [N;lgr] contenant "
"la plus petite valeur possible. Ensuite, j'inverse le contenu de la case N "
"et celui de la case M."

#. type: Content of: <p><p><h2>
#: src/lessons/sort/basic/selection/AlgSelectionSort.html:18
msgid "Existing variations"
msgstr "Variantes possibles"

#. 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 ""
"Un autre algorithme classique dont le principe repose sur la sélection des "
"bons éléments est le tri par tas, mais il utilise une structure de données "
"en tas, que nous n'avons pas encore introduite. Sachez simplement que ce tri "
"présente un coût en O(n log n) dans le pire des cas, ce qui en fait un "
"algorithme très intéressant en pratique."

#. type: Content of: <h1>
#: src/lessons/sort/basic/comb/AlgCombSort.html:2
msgid "CombSort"
msgstr "Tri à peigne"

#. 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 ""
"Nous avons vu que le tri cocktail permet d'améliorer un peu les choses pour "
"les tortues (ie, les petites valeurs près de la fin du tableau), mais on "
"peut faire mieux. Le tri à peigne revient à leur faire prendre un "
"raccourci&nbsp;: Au lieu de comparer les valeurs adjacentes, on compare des "
"valeurs séparés par un écart plus grand que 1. Ainsi, les tortues vont se "
"déplacer de <i>ecart</i> cases à chaque parcours. Bien entendu, il faut "
"appliquer l'algorithme avec des écarts de plus en plus petit et terminer "
"avec <i>ecart=1</i> pour s'assurer que le tableau est entièrement trié à la "
"fin. Choisir comment réduire l'écart entre les parcours est une question "
"difficile (voir Wikipedia), mais en pratique, le diviser par 1.3 à chaque "
"fois amène de bons résultats. Voici le pseudo-code correspondant :"

#. 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 ""
" ecart = lgr;\n"
" faire \n"
"   si ecart>1 alors\n"
"     ecart = ecart / 1.3\n"
"   i = O\n"
"   tant que i+ecart &lt; lgr faire:\n"
"     si i et i+ecart doivent être inversés, le faire\n"
"     incrémenter i de 1\n"
" tant que l'écart est plus grand que 1 ou que le dernier parcours a inversé au moins un élément\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 ""
"L'un des problèmes à résoudre est que la variable <code>ecart</code> est "
"entière (de type <code>Int</code>), et que nous voulons la diviser par 1.3, "
"qui est un nombre à virgule (de type <code>Double</code>). Le système de "
"types de scala ne vous laissera pas faire une chose pareil sans broncher. "
"C'est que ce genre de disparité est souvent le signe de problèmes que le "
"programmeur n'a pas vu. Comme ce n'est pas une erreur dans notre cas, nous "
"allons devoir convertir <code>ecart</code> en double pour le temps de "
"l'opération, puis convertir le résultat de retour en entier pour le stocker "
"dans <code>ecart</code>. Cela s'écrit de la manière suivante:"

#. type: Content of: <pre>
#: src/lessons/sort/basic/comb/AlgCombSort.html:31
#, no-wrap
msgid "gap = (gap.asInstanceOf[Double] / 1.3).asInstanceOf[Int]"
msgstr "ecart = (ecart.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 ""
"C'est un peu bavard, mais finalement, cette écriture n'est pas très "
"complexe. Et n'oubliez pas que le système de types est votre ami. Il est un "
"peu tatillon et parfois un peu pénible (comme aujourd'hui), mais au fond, il "
"trouve souvent des bugs bizarres qui auraient été très pénibles à débugger "
"s'il ne les avait pas attrapé à la source. Et comme de plus les auteurs de "
"Scala sont pragmatiques, cela peut aussi s'écrire de manière simplifiée :"

#. type: Content of: <pre>
#: src/lessons/sort/basic/comb/AlgCombSort.html:36
#, no-wrap
msgid "gap = (gap.toDouble / 1.3).toInt"
msgstr "ecart = (ecart.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> et <code>toInt</code> sont simplement des raccourcis "
"pour les expressions équivalentes <code>asInstanceOf[Double]</code> et "
"<code>asInstanceOf[Int]</code>. Ce n'est pas très générique, mais c'est "
"extrêmement pratique."

#. 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 ""
"Cet algorithme a été inventé par Wlodek Dobosiewicz en 1980 et redécouvert "
"et popularisé par Stephen Lacey et Richard Box, qui l'ont décrit dans le "
"magazine Byte d'avril 1991."

#. type: Content of: <h1>
#: src/lessons/sort/basic/comb/AlgCombSort11.html:2
msgid "CombSort11"
msgstr "Tri à peigne 11"

#. 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 ""
"Les auteurs de l'algorithme du tri à peigne ont constaté que l'on améliore "
"les performances en s'assurant que les dernières valeurs de l'écart sont "
"(11, 8, 6, 4, 3, 2, 1) plutôt que (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2, 1). "
"Reprenez donc le code du tri à peigne, et indiquez juste après la mise à "
"jour de l'écart que si la valeur est 9 ou 10, il faut utiliser 11 à la place."

#. type: Content of: <h1>
#: src/lessons/sort/basic/gnome/AlgGnomeSort.html:2
msgid "GnomeSort"
msgstr "Tri du gnome"

#. 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 ""
"Le tri du gnome s'apparente au tri par insertion, à ceci près que les "
"éléments sont déplacés par une série d'échange comme dans le tri à bulle. Le "
"nom vient du comportement supposé des gnomes des jardins quand ils rangent "
"une série de pots de fleurs. Voici la description de l'algorithme par son "
"auteur:"

#. 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 ""
"L'algorithme de tri du gnome repose sur la manière habituelle de travailler "
"des nains de jardin pour trier une ligne de pots de fleurs: Le nain regarde "
"le pot de fleur qui est à côté de lui et il regarde également le pot de "
"fleurs juste après&nbsp;; si ces deux pots sont alignés dans le bon ordre, "
"le nain se déplace en avant d'un pot de fleurs, sinon il les échange et se "
"déplace en arrière d'un pot de fleur. Condition aux limites&nbsp;: si il n'y "
"a pas de pot de fleurs précédent, le nain avance ; si il n'y a pas de pot "
"suivant alors il a terminé sa tâche."

#. 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 "Le problème du drapeau hollandais"

#. 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 ""
"Ce problème a été proposé pour la première fois par E.W.Dijkstra en 1976 "
"(dans le chapitre 14 de son livre «A discipline of Programming»). C'est une "
"variation très étudiée du tri par insertion depuis. Ce tri est parfois utile "
"dans la vraie vie, mais il est surtout célèbre pour ses vertus "
"pédagogiques : calculer sa complexité n'est ni trop simple ni trop dur, "
"démontrer sa correction est très accessible sans être complètement trivial."

#. type: Content of: <ul><li>
#: src/lessons/sort/dutchflag/Main.html:13
msgid "A temporal view could be welcomed."
msgstr "Une vue temporelle serait bienvenue."

#. 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 ""
"D'autres exercices, par exemple avec seulement deux couleurs ou avec plus de "
"3 couleurs, pourraient généraliser l'approche."

#. type: Content of: <ul><li>
#: src/lessons/sort/dutchflag/Main.html:15
msgid "This problem could be solved recursively."
msgstr "Ce problème peut être résolu récursivement."

#. 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 ""
"C'est un problème classique, qui constitue une variation du tri par "
"insertion."

#. 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 ""
"Votre travail est de trier les couleurs du drapeau hollandais. La seule "
"primitive à votre disposition permet d'échanger deux lignes données. De "
"plus, vous ne devez pas créer de nouvelles variables (à l'exception de "
"quelques indices)."

#. 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 ""
"À la réflexion, on peut le faire en temps linéaire, en triant un élément à "
"chaque étape de la boucle. Vous devriez peut-être réviser comment se passe "
"le <a href=\"plm://lessons.sort.basic/insertion.AlgInsertionSort\">tri par "
"insertion</a>, car le tri du drapeau hollandais est une variation sur le "
"thème. La principale différence est que vous n'avez pas un seul point "
"d'insertion, mais 3..."

#. type: Attribute 'alt' of: <div>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:11
msgid "I need an hint to start"
msgstr "J'ai besoin d'un indice pour commencer."

#. type: Content of: <div>
#: src/lessons/sort/dutchflag/DutchFlagAlgo.html:12
msgid "Do a traversal over your data, saving 3 indices:"
msgstr "Traversez vos données, en maintenant trois indices :"

#. 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>apresBleu</code> est initialisé à 0. Assurez vous de n'avoir que des "
"cellules bleues entre 0 et <code>apresBleu</code> à tout moment."

#. 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>blancRouge</code> est initialisé à taille-1. Assurez vous de n'avoir "
"que des cellules rouges après <code>blancRouge</code>."

#. 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>avantBlanc</code> est initialisé à taille-1. Assurez vous de n'avoir "
"que des cellules blanches entre <code>avantBlanc</code> et <code>blancRouge</"
"code>."

#. 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 ""
"Remarques que les cellules non triées sont toujours entre <code>apresBleu</"
"code> et <code>avantBlanc</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 ""
"À chaque étape de votre traversée, regardez la couleur de la case pointée "
"par <code>apresBleu</code> et effectuez les échanges qui s'imposent. La "
"boucle s'arrête quand <code>apresBleu</code> devient plus grand que "
"<code>avantBlanc</code>."

#. type: Content of: <h2>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:4
msgid "Provided values"
msgstr "Valeurs fournies"

#. 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 ""
"Les couleurs sont représentées par les constantes suivantes : BLEU, BLANC et "
"ROUGE. Vous pouvez les utiliser directement dans votre code."

#. type: Content of: <h2>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:9
#: src/lessons/lander/universe/DelegatingLanderWorld.html:8
msgid "Provided functions"
msgstr "Fonctions fournies"

#. type: Content of: <p>
#: src/lessons/sort/dutchflag/universe/DutchFlagWorld.html:11
msgid "This world is very simple, with only 5 provided functions."
msgstr "Cet univers est très simple, avec seulement cinq fonctions fournies."

#. 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 [/!]echange([!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 "Échange les lignes numéros <code>x</code> et <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 [/!]getTaille()  [!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 "Retourne le nombre de lignes sur ce drapeau."

#. 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 [/!]getCouleur([!java|c]int [/!]ligne[!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 "Retourne la couleur d'une ligne donnée."

#. 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 [/!]estTrie() [!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 "Renvoie si le drapeau est correctement trié."

#. 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 [/!]estSelectionne() [!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 "Renvoi si le monde actuel est sélectionné dans l'interface graphique."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:2
msgid "PancakeWorld"
msgstr "Monde des crêpes"

#. type: Content of: <p>
#: src/lessons/sort/pancake/universe/PancakeWorld.html:4
msgid "This universe is very simple, with only five functions provided."
msgstr "Cet univers est très simple, avec seulement cinq fonctions fournies."

#. 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 [/!]getTaillePile()  [!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 ""
"Renvoie la taille du tas de crêpes, c'est à dire le nombre de crêpes qui le "
"compose."

#. 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 [/!]getRayonCrepe([!java|c]int [/!]rang[!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 ""
"Renvoie le rayon de la crêpe passée en argument, sachant que le rang de la "
"crêpe du haut est 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 [/!]estCrepeRetournee([!java|c]int [/!]rang[!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 ""
"Renvoie si la crêpe passée en paramètre (la crêpe du haut étant de rang 0) "
"est à l'envers, c'est-à-dire si sa face brûlée est en haut."

#. 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 [/!]retourne([!java|c]int [/!]quantité[!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 ""
"Retourne les <code>quantité</code> premières crêpes de la pile, en partant "
"du sommet de celle-ci."

#. 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 [/!]estTriee()   [!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 "Renvoie si la pile de crêpes est correctement triée."

#. 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 [/!]estSelectionne() [!scala]:Boolean[/!]"

#. type: Content of: <h1>
#: src/lessons/sort/pancake/Main.html:2
#: src/lessons/sort/pancake/BasicPancake.html:2
msgid "Pancake Sorting"
msgstr "Trier des crêpes"

#. 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 ""
"Cette activité est inspirée d'un problème introduit pour la première fois en "
"1975 par Harry Dweighter dans le journal de mathématique «American "
"Mathematical Monthly». La question n'est pas tant de trier les crêpes que de "
"déterminer <code>f(n)</code>, le nombre <i>minimal</i> de retournements "
"nécessaires pour trier n'importe quelle pile de taille <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 ""
"Ce problème est maintenant célèbre car Bill Gates a publié son seul article "
"scientifique sur ce sujet (avec C. Papadimitriou). Ils ont proposé un "
"algorithme plus rapide et démontré ainsi que <code>17n/16 ≤ f(n) ≤ (5n+5)</"
"code>. Ce fut la seule publication de Bill Gates avant qu'il n'invente "
"Windows et devienne riche."

#. 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 ""
"Par la suite, David X. Cohen, l'inventeur du dessin animé Futurama aux "
"nombreuses références mathématiques, introduit en 1993 la variante des "
"crêpes brûlées et étudie sa complexité avec Manuel Blum."

#. type: Content of: <p>
#: src/lessons/sort/pancake/Main.html:15
msgid ""
"An article of 2012 (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 ""
"Un article de 2013 (par L. Bulteau, G. Fertin and I. Rusu) a prouvé que ce "
"problème est NP-Complet, c'est à dire qu'il n'existe pas d'algorithme "
"efficace pour déterminer le nombre minimal de retournements pour toute "
"taille de pile. Naturellement, le problème du tri de la pile n'est pas NP-"
"complet en lui-même puisqu'on peut le résoudre en 2n-3 étapes avec "
"l'algorithme naïf et (5n+5)/3 étapes avec l'algorithme de Gates. C'est la "
"détermination du nombre minimal de coups qui est 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 ""
"Pour plus d'information, référez vous à la page anglophone de Wikipedia "
"(http://en.wikipedia.org/wiki/Pancake_sorting) ou à cette page, très bien "
"faite: http://eljjdx.canalblog.com/archives/2013/02/03/26309722.html"

#. 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 ""
"Cette activité est également intégrée à SMN (mon dépôt d'activités "
"débranchées <i>libres</i> pour introduire la science informatique, "
"disponible à l'adresse http://www.loria.fr/~quinson/Mediation/SMN/), et il "
"peut être intéressant de faire les activités débranchées avant d'implémenter "
"ces algorithmes dans 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 ""
"Une vue temporelle comme celle de l'univers des tris pourrait être pratique."

#. 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 ""
"D'autres exercices, comme le tri des cheese nans, avec une pile de nans qui "
"doivent chacun toucher le grill sur les deux faces pour être bien grillés "
"(voir  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 "Le crêpier psychorigide"

#. 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 "Aidez le pauvre crêpier psychorigide à trier sa pile de crêpes !"

#. 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 ""
"Ce problème amusant débouche sur des algorithmes un peu plus compliqués à "
"implémenter. Vous devez maîtriser les bases de la programmation ainsi que "
"quelques algorithmes de tri avant de tenter cette leçon."

#. 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 ""
"Le problème du tri des crêpes est un puzzle simple où vous avez une pile de\n"
"crêpes, toutes de taille différente. Le crêpier étant légèrement "
"psychorigide,\n"
"il déteste quand ses crêpes ne sont pas bien ordonnées dans l'assiette. Il "
"ne se\n"
"sent bien que quand elles sont bien rangées, avec les petites au dessus des\n"
"grandes. Comme tous les crêpiers, il est passé maître dans l'art du "
"retournement\n"
"de crêpes à la spatule. Il peut retourner une crêpe au sommet de la pile, "
"ou\n"
"même plusieurs à la fois. Le truc est qu'il n'a qu'une seule assiette et que "
"la\n"
"table est trop sale pour poser des crêpes dessus, même temporairement. La "
"seule\n"
"opération autorisée est alors de retourner un certain nombre de crêpes au "
"sommet\n"
"de la pile."

#. 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 ""
"Vous devez aider ce pauvre homme à trier sa pile en retournant des crêpes. "
"Chaque crêpe est définie par son rayon et son rang dans la pile. La pile la "
"plus haute est de rang 0, et celle placée au dessous d'elle est de rang 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 ""
"Il est conseillé de commencer par jouer physiquement avec des bouts de "
"papier ou de carton pour bien comprendre le problème. C'est même l'une des "
"activités que j'utilise dans mon projet SMN (Sciences Manuelles du "
"Numérique) pour introduire le concept d'algorithme aux débutants curieux de "
"notre science. Pour plus d'information, allez visiter le site du projet: "
"http://www.loria.fr/~quinson/Mediation/SMN/"

#. 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 "Je suis perdu, j'ai besoin d'aide."

#. 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 ""
"Vous devez tout d'abord parvenir à placer la plus grande crêpe en bas de la "
"pile et ensuite placer celle juste plus petite au dessus, puis celle plus "
"petite et ainsi de suite."

#. 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 "Ce premier indice n'était pas suffisant, j'ai besoin de plus d'aide."

#. 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 ""
"Il vous faut donc amener la plus grande des crêpes tout en bas de la pile."

#. 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 ""
"Est ce que vous pouvez imaginer une situation où il est facile d’emmener "
"cette satanée grande crêpe tout en bas ?"

#. type: Content of: <p><div>
#: src/lessons/sort/pancake/BasicPancake.html:31
msgid "How could you reach this situation from the current one?"
msgstr ""
"Et comment pourriez vous parvenir à cette situation à partir de la situation "
"courante?"

#. type: Content of: <h1>
#: src/lessons/sort/pancake/BubblePancake.html:2
msgid "Bubble Pancakes"
msgstr "Crêpes et bulle"

#. 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 ""
"Cet exercice ressemble au précédent: il faut que vous triiez les crêpes, la "
"plus petite en haut de la pile, et la plus grande en bas de la pile, sauf "
"que vous ne pouvez seulement en retourner qu’un certain nombre."

#. 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 ""
"L'objectif ici est de trier les crêpes en utilisant l'algorithme du tri à "
"bulle, où une crêpe est déplacée vers le bas de la pile jusqu'à qu'elle en "
"rencontre une plus grande. Dans les représentations graphiques, cela se "
"matérialise par une bulle qui prend un élément et le déplace sur toute la "
"pile, d'où le nom de \"tri à bulle\"."

#. 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 ""
"Maintenant, l'utilisation de crêpes rend l'algorithme un peu plus difficile "
"à écrire, car vous devez trouver un moyen d'échanger de place seulement deux "
"crêpes à la fois."

#. 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 ""
"Le tri à bulle consiste à parcourir la pile entière, de haut en bas, et "
"d'effectuer des comparaisons entre deux crêpes. Chaque fois que la crêpe du "
"dessus est plus grande que celle du dessous, il faut que vous les échangiez, "
"puis que vous compariez la crêpe que vous venez de déplacer avec celle du "
"dessous, et ainsi de suite. Vous devez continuer à parcourir toute la pile "
"jusqu'à que vous ne déplaciez plus aucune crêpe, auquel cas la pile est "
"triée."

#. 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 ""
"Si vous ne comprenez pas l'algorithme de tri à bulle de base, vous devriez "
"d'abord essayer les exercices le concernant dans la leçon \"Algorithmes de "
"tri\". Si c'est plutôt le fait d'échanger seulement deux crêpes à la fois "
"qui vous pose problème, cherchez une situation où seulement deux crêpes sont "
"échangées, et trouver un moyen d'arriver à cette situation."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/BurnedPancake.html:2
msgid "Burned Pancakes"
msgstr "Crêpes brûlées"

#. 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 ""
"Coup dur pour le crêpier! Les crêpes ont brûlé sur une face! Il est "
"strictement impossible qu'il serve une pile de crêpes où l'on voit la face "
"brûlée! Vous devez absolument l'aider à s'assurer qu'aucune face visible ne "
"soit brûlée tandis qu'il trie sa pile."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/GatesPancake.html:2
msgid "Faster Pancake Sorting"
msgstr "Tri rapide de crêpes"

#. 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 ""
"Contrairement aux problèmes classiques de tri, l'opération coûteuse à "
"économiser n'est pas la comparaison des valeurs, mais le retournement des "
"crêpes. Dans cet exercice, nous allons explorer un autre algorithme "
"permettant de réduire le nombre de retournements nécessaires pour trier la "
"pile. Fait amusant, cet algorithme a été proposé pour la première fois par "
"Bill Gates, avant qu'il n'invente 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 ""
"L'idée de base est de faire grandir des séquences de crêpes triées, pas "
"forcément en commençant du bas de la pile. On dira qu'un ensemble de crêpes "
"dans l'ordre constitue un <b>block</b> tandis qu'une crêpe qui n'est pas "
"dans un bloc est dite <b>libre</b>. L'algorithme considère la crêpe tout en "
"haut de la pile, dont la taille est notée <code>t</code>, et cherche les "
"deux crêpes de taille <code>t-1</code> et <code>t+1</code> (le voisin ainsi "
"considéré est noté <code>t+o</code>). Huit cas sont possibles alors&nbsp;:"

#. 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>Cas a</b>: <code>t</code> et <code>t+o</code> sont tous les deux libres. "
"Ils sont alors fusionnés en un retournement."

#. 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>Cas b</b>: <code>t</code> est libre, et <code>t+o</code> est le premier "
"élément d'un bloc. Ils sont fusionnés en un bloc."

#. 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>Cas c</b>: <code>t</code> est libre, mais <code>t-1</code> et <code>t+1</"
"code> sont tous les deux les derniers éléments de blocs. Ces deux blocs "
"ainsi que <code>t</code> sont tous fusionnés en 4 retournements. Prenez "
"garde, si <code>t-1</code> ou <code>t+1</code> n'existe pas (parce que "
"<code>t</code> est 0 ou max), seulement deux de ces retournements sont "
"nécessaires."

#. 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>Cas d</b>: <code>t</code> est dans un bloc, mais <code>t+o</code> est "
"libre. Ils sont fusionnés en un retournement."

#. 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>Cas e</b>: <code>t</code> est dans un bloc, et <code>t+o</code> est le "
"premier élément d'un bloc. Ils sont fusionnés en un retournement."

#. 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>Cas f</b>: <code>t</code> est dans un bloc, et <code>t+o</code> est le "
"dernier élément d'un autre bloc. Ils sont fusionnés en trois retournements "
"comme suit."

#. 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>Cas g</b>: <code>t</code> est dans un bloc de taille k+1 (le dernier "
"élément est <code>t+ko</code>), <code>t+(k+1)o</code> est soit libre soit le "
"dernier élément d'un autre bloc. Les deux blocs sont fusionnés en deux "
"retournements:"

#. 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>Cas h</b>: <code>t</code> est dans un bloc de taille k+1 (le dernier "
"élément est <code>t+ko</code>), <code>t+(k+1)o</code> est le premier élément "
"d'un autre bloc (la différence avec le cas g est que <code>t+(k+1)o</code> "
"est maintenant le <i>premier</i> élément de son bloc). Les deux blocs sont "
"fusionnés en deux retournements:"

#. 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>Cas i</b>: <code>t</code> est dans un bloc de taille <code>n</code>, qui "
"contient donc toutes les crêpes. Si <code>t</code> n'est pas 1, toute la "
"pile est retournée. Ensuite, l'algorithme s'arrête."

#. 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 ""
"Chaque itération augmente la taille des blocs, donc la terminaison de "
"l'algorithme est certaine. Une analyse plus fine montre qu'il prend au plus "
"<code>(5n+5)/3</code> étapes pour trier la pile. C'est mieux que "
"l'algorithme naïf, qui nécessite <code>2n-3</code> étapes pour cela."

#. type: Content of: <h2>
#: src/lessons/sort/pancake/GatesPancake.html:61
msgid "Your turn"
msgstr "À vous de jouer"

#. 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 ""
"Vous avez maintenant quasi assez d'informations pour implémenter cet "
"algorithme par vous-même. Il faut juste lever les dernières ambiguïtés pour "
"que vous implémentiez exactement le même algorithme que la correction. Si "
"plusieurs cas s'appliquent à la situation courante, appliquez le premier. "
"Par exemple, si les cas a et b s'appliquent (avec <code>t-1</code> pour le "
"cas a et <code>t+1</code> pour le cas b), vous devez appliquer les "
"instructions du cas <b>a</b>. Si un cas donné s'applique à la fois pour "
"<code>t+1</code> et <code>t-1</code>, appliquez le pour <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 ""
"Cet exercice est plus difficile que ceux que nous avons fait jusque là, et "
"il ne serait pas choquant que vous ayez besoin d'un peu plus de temps que "
"les autres pour le résoudre. Mais n'abandonnez pas, vous pouvez le faire !"

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/sort/pancake/GatesPancake.html:71
msgid "Well, I need some help to start."
msgstr "Heu, j'ai besoin d'un peu d'aide pour commencer."

#. 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 ""
"Commencez par écrire des fonctions d'aide, comme <code>estLibre()</code> ou "
"<code>estPremier()</code>. Cela simplifiera l'écriture de votre algorithme, "
"qui peut être écrit sous une forme très similaire à l'énoncé si vous faites "
"les bonnes fonctions d'aide. Factoriser ainsi votre code aide très souvent à "
"améliorer la lisibilité du code."

#. 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 "Mon code ne fonctionne pas, et je ne sais pas comment le débugger"

#. 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 ""
"Pour débugger un monde après l'autre, il est préférable d'éviter que les "
"affichages de tous les mondes se mélangent. Le plus simple pour cela est "
"d'utiliser la méthode <code>isSelected()</code> qui ne renvoi vrai que si le "
"monde courant est celui sélectionné dans l'interface. Cela aidera à réduire "
"la complexité en résolvant les problèmes les uns après les autres."

#. 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 ""
"En particulier, afficher l'état du monde sous forme textuelle à chaque fois "
"que vous rentrez dans la boucle principale peut aider."

#. type: Content of: <h1>
#: src/lessons/sort/pancake/CohenPancake.html:2
msgid "Faster Burned Pancake Sorting"
msgstr "Tri rapide de crêpes brûlées"

#. 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 ""
"L'algorithme de Gates que nous avons vu dans l'exercice précédent trie "
"rapidement les crêpes non brûlées en augmentant constamment la taille de "
"sous-séquences triées dans la pile. Cela va bien plus vite que l'algorithme "
"naïf qui déplace à chaque étape la plus grande crêpe en bas de la pile non-"
"triée. L'algorithme de Gates trie une pile de <i>n</i> crêpes en moins de  "
"<i>(5n + 5)/3</i> étapes dans le pire des cas là où l'algorithme naïf "
"nécessite <i>2n</i> étapes. L'algorithme de Gates est donc un tiers plus "
"rapide dans le pire des cas."

#. 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 ""
"Dans cet exercice, nous allons explorer une adaptation de la même idée aux "
"crêpes brûlées. Cet algorithme fut tout d'abord publié par David X. Cohen et "
"Manuel Blum. Quelques années après, David Cohen lançait avec un ami la série "
"Futurama, remplie de blagues mathématiques. Décidément, ce petit problème de "
"crêpes a inspiré des gens intéressant..."

#. 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 ""
"L'algorithme de Cohen est un peu plus simple que celui de Gates, car il "
"distingue moins de cas :"

#. 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>Cas 1 :</b> Au moins une crêpe est à l'endroit dans la pile. Soit <i>p</"
"i> la plus grande des crêpes à l'endroit. Notez que <i>p + 1</i> est donc "
"forcément à l'envers, à moins que <i>p = n</i> (auquel cas il n'y a pas de "
"crêpe <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>Cas 1.a :</b> <i>p+1</i> est placée plus bas que <i>p</i> dans la pile."

#. 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>Cas 1.b :</b> <i>p+1</i> est placée plus haut que <i>p</i> dans la pile."

#. 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>Cas 1.c :</b> Il n'y a pas de crêpe <i>p + 1</i> car <i>p</i> est la plus "
"grande crêpe de la pile (c'est à dire que <i>p = n</i>). Si la crêpe <i>p</"
"i> est déjà en position, il n'y a rien à faire. Dans le cas contraire, on "
"peut l'amener en bas de la pile en deux opérations :"

#. 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>Le truc est que la crêpe <i>p</i> ne doit plus jamais être considérée "
"après cela.</b> Dans le cas contraire, vous allez considérer cette crêpe "
"encore et encore puisqu'elle est à l'endroit et que c'est la plus grande des "
"crêpes. Pour la laisser en paix, vous devez garder trace de la taille de la "
"pile restant à trier. Tout balayage de la pile de crêpes doit se limiter aux "
"crêpes restant à trier, sans considérer celles étant déjà en position en bas "
"de la pile."

#. 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>Cas 2 :</b> Toutes les crêpes sont à l'envers. À nouveau, nous "
"distinguons deux sous-cas."

#. 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>Cas 2.a :</b> Il y a au moins une crêpe <i>p</i> pour laquelle <i>p+1</i> "
"est placée au dessus de <i>p</i> dans la pile (s'il y a plusieurs tels <i>p</"
"i>, prenez le plus grand)."

#. 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>Cas 2.b:</b> Chaque crêpe <i>p</i> est placée plus bas que sa crêpe <i>p"
"+1</i>. Dans ce cas, nous avons forcément la situation suivante :"

#. 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 ""
"Dans les cas 1 ou 2.a, nous pouvons fusionner deux crêpes qui doivent se "
"suivre en deux opérations. Puisque nous devons réaliser n fusions de ce "
"genre pour trier la pile, nous pouvons trier la pile en <i>2n</i> opérations "
"si le cas 2.b n'arrive jamais."

#. 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 ""
"Ce cas 2.b nécessite un traitement particulier puisqu'il est impossible de "
"fusionner deux crêpes qui doivent se suivre en deux étapes seulement. Fort "
"heureusement, une seule configuration de pile rentre dans ce cas de figure. "
"Nous pouvons alors utiliser l'algorithme suivant, conçu pour tirer partie de "
"cette configuration. Cet algorithme trie alors toute la pile en exactement "
"<i>2n</i> opérations."

#. 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 ""
"Répéter n fois\n"
"    Inverser toute la pile de n crêpes \n"
"    Inverser les (n-1) crêpes placées au sommet de la pile\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 ""
"Cela peut sembler un peu magique, mais cela fonctionne. Le dessin ci-dessous "
"montre même comment."

#. 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 ""
"Donc, dans tous les cas, l'algorithme de Cohen parvient à trier une pile de "
"crêpes brûlées en <i>2n</i> étapes, dans tous les cas. C'est mieux que "
"l'algorithme naïf pour crêpes brûlées, qui nécessite <i>3n</i> étapes."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/sort/pancake/CohenPancake.html:68
msgid "I cannot get it right."
msgstr "Je n'y arrive pas."

#. 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 ""
"Pas de panique, cet exercice est très difficile, et il est donc normale de "
"ne pas y parvenir du premier coup. Ajouter des affichages à votre code pour "
"voir les différentes étapes, et ainsi comprendre le moment où votre "
"algorithme cesse de se comporter correctement. Assurez vous d'utiliser la "
"méthode <code>isSelected()</code> pour que vos affichages n'aient lieu que "
"pour le monde en cours d'affichage. En particulier, cela peut aider "
"d'afficher textuellement l'état du monde à chaque fois que vous entrez dans "
"la boucle principale."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/Main.html:2
msgid "The Rainbow Baseball Game"
msgstr "Le jeu du baseball multicolore"

#. 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 ""
"Cette activité est inspirée du jeu de l'orange dans le recueil d'activités "
"«Computer Science Unplugged». Elle a cependant été profondément réarrangée "
"depuis, d'abord pour SMN (mon recueil d'activités <i>libres</i> pour "
"introduire la science informatique, disponible depuis http://www.loria.fr/"
"~quinson/Mediation/SMN/), et maintenant pour 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 ""
"Dans la littérature scientifique, la forme généralisée de ce problème se "
"nomme «le problème du déplacement des galets» (Pebble motion problem). Les "
"bases peuvent être connectées par un graphe quelconque, et les affinités "
"entre les galets et les bases peuvent être différentes. La plus connue des "
"variantes de ce problème est le jeu du taquin, avec un seul joueur par base "
"et une grille carrée à deux dimensions. On trouve énormément d'informations "
"sur ces problèmes sur les pages Wikipedia anglophones, comme d'habitude."

#. 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 ""
"Comment pouvez vous être sûr que l'algorithme naïf ne boucle pas sur cette "
"situation initiale ?"

#. 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 ""
"Et bien, nous avons testé toutes les situations initiales possibles pour "
"étudier les cas où l'algorithme boucle et ceux où l'algorithme termine "
"correctement. Nous avons trouvé qu'il fonctionne pour toutes les situations "
"où aucun joueur ne se trouve dans sa base (il y a 84 situations de ce genre "
"pour 4 bases, si on élimine les symétries). Bien entendu, l'algorithme "
"fonctionne correctement pour de nombreuses situations ne respectant pas ce "
"critère (telles que toutes les situations rencontrées quand on commence de "
"l'une de ces 84 situations), mais c'est une autre histoire. Avoir un tel "
"critère nous permet de générer des situations initiales pour ce premier "
"exercice de manière pseudo-aléatoire tout en étant sûrs que l'algorithme "
"proposé se comportera correctement."

#. 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 ""
"Nous avons également exploré des instances plus grande de ce problème, et "
"malheureusement, nous ne connaissons pas de critère sûr dans ce cas. Avec 5 "
"bases, l'algorithme part en boucle infinie pour 24 des 1824 plateaux "
"possibles où aucun joueur n'est à la maison (cela représente 1,31%). Avec 6 "
"bases, il boucle pour 1251 des 58860 plateaux respectant ce critère (2,12%). "
"Avec 7 bases, il boucle dans 84444 cas sur 2633940 (càd 3,2%). Nous "
"cherchons encore un critère permettant de garantir que l'algorithme ne "
"bouclera pas. Si vous en découvrez un, merci de nous l'indiquer. Ce serait "
"encore mieux s'il était possible de vérifier le critère de tête afin que les "
"animateurs puissent s'en servir pendant les activités débranchées."

#. 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 ""
"D'autres représentations graphiques pourraient être proposées, comme une "
"représentation linéaire (pour les exercices proposés) ou d'autres comme une "
"grille ou un arbre, si un exercice sur ce type de graphe s'avère intéressant."

#. 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 ""
"D'autres exercices à propos d'autres algorithmes pour cette variante du "
"problème, ou bien d'autres variantes comme le jeu du taquin."

#. type: Content of: <h3>
#: src/lessons/sort/baseball/short_desc.html:2
msgid "Rainbow baseball"
msgstr "Baseball multicolore"

#. 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 ""
"Il s'agit d'un autre problème amusant autour des algorithmes de tri, "
"adaptant les principaux algorithmes de tri à un contexte inhabituel."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:2
msgid "Rainbow Baseball"
msgstr "Baseball multicolore"

#. 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 ""
"Les couleurs sont représentées comme des entiers, entre <code>0</code> et "
"<code>nombre de bases - 1</code>. Le trou est représenté par la valeur "
"spéciale <code>-1</code>. La couleur de chaque base est son rang, ce qui "
"fait que la base <code>1</code> est de couleur <code>1</code>. Dans "
"l'interface graphique, la base <code>0</code> est la bleue foncée tandis que "
"la base <code>1</code> est celle 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 ""
"Une fois que tous les joueurs du terrain sont chez eux, le trou se trouve "
"dans la dernière base, celle de rang <code>getNombreBases()-1</code>."

#. type: Content of: <h2>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:12
msgid "Functions to retrieve the world's dimensions"
msgstr "Fonctions pour découvrir les dimensions du monde"

#. 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 [/!]getNombreBases() [!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 "Retourne le nombre de bases dans le terrain."

#. 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 [/!]getNombrePositions() [!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 "Retourne le nombre de positions disponibles par base."

#. type: Content of: <h2>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:20
msgid "Functions to retrieve the world's state"
msgstr "Fonctions pour découvrir l'état du monde"

#. 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 [/!]getTrouBase() [!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 "Retourne l'index de la base où se trouve le trou."

#. 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 [/!]getTrouPosition() [!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 "Retourne la position du trou dans sa base."

#. 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 [/!]getCouleurJoueur([!java|c]int [/!]base[!scala]:Int[/!], [!java|c]int [/!]position[!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 "Retourne la couleur d'un joueur donné à partir de sa position."

#. 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 "Retourne si tous les joueurs présents sur le terrain sont chez eux."

#. 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 [/!]estBaseTriee([!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 "Retourne si tous les joueurs d'une base donnée sont chez eux."

#. type: Content of: <h2>
#: src/lessons/sort/baseball/universe/BaseballWorld.html:39
msgid "Functions to change the world"
msgstr "Fonctions pour changer le monde"

#. 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 [/!]deplace([!java|c]int [/!]base[!scala]:Int[/!], [!java|c]int [/!]position[!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 ""
"Déplace un joueur dans le trou. Une exception IllegalArgumentException est "
"levée si le joueur indiqué n'est pas suffisamment près du trou. Il peut être "
"au plus à une base du trou."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/NaiveBaseball.html:2
msgid "Naive Rainbow Baseball"
msgstr "Baseball multicolore naïf"

#. 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 ""
"Aujourd'hui, les buggles ont décidé de faire une partie de baseball, mais il "
"faut avouer que ce n'est pas très bien engagé : elles ne se souviennent plus "
"très bien des règles, et ... euh ... elles ont perdu les battes et les "
"balles. Elles ont donc décidé «d'adapter un peu» les règles. Comme il n'y a "
"plus de balle, la seule chose qu'elles peuvent faire est de courir sur le "
"terrain. C'est d'ailleurs ce qu'elles ont fait pendant un moment : toutes "
"les buggles présentes se sont mises à courir en tous sens sur le terrain."

#. 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 ""
"Mais après quelques collisions plus ou moins douloureuses, elles décident "
"d'inventer de nouvelles règles pour organiser la partie. Elles décident de "
"faire une équipe par base sur le terrain et deux joueurs par équipes. L'une "
"des équipes n'a qu'un seul joueur pour que l'une des bases ait un "
"emplacement vide. Ensuite, les joueurs se répartissent aléatoirement sur les "
"bases, et le jeu est de faire en sorte que chaque joueur retourne sur sa "
"base. La partie s’arrête quand tous les joueurs sont chez eux. Il n'y a pas "
"d'équipe gagnante : soit tous les joueurs remportent la partie, soit ils la "
"perdent tous. Oui, c'est vrai, ce jeu est très différent du baseball "
"habituel. La seule règle qui reste est qu'il faut courir autour du terrain, "
"de base en base, sans jamais passer au centre du terrain."

#. 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 ""
"Maintenant, les buggles ont besoin de vous pour décider qui doit bouger à "
"quel moment de façon à ce que chacune rejoigne sa base. Une seule buggle "
"peut bouger à chaque tour, de sa position jusqu'à l'emplacement vide. De "
"plus, la distance maximale qu'une buggle peut parcourir en un tour est de "
"une seule 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 ""
"Ainsi, à chaque tour, l'emplacement vide se trouve sur une base (disons "
"<code>B</code>), et vous devez décider quelle buggle occupera cette place. "
"Il y a quatre candidates : deux de la base <code>B-1<code>, et deux de la "
"base <code>B+1</code>. En fait, il y a une cinquième candidate puisque la "
"buggle qui se trouve sur la même base que le trou peut aller l'occuper, mais "
"ça ne fait pas vraiment avancer le problème."

#. type: Content of: <h3>
#: src/lessons/sort/baseball/NaiveBaseball.html:27
msgid "The Naïve algorithm"
msgstr "Algorithme naïf"

#. 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 ""
"Dans cet exercice, nous allons explorer un premier algorithme très simple. "
"Pour décider laquelle des quatre candidates doit aller occuper l'emplacement "
"vide, nous commençons par nous restreindre à tourner dans le sens des "
"aiguilles d'une montre. Ensuite, parmi les deux candidates restantes, nous "
"prenons celle qui a encore le plus de chemin à parcourir jusqu'à sa base "
"(dans le sens des aiguilles d'une montre). Essayez la démonstration : cela "
"marche plutôt bien en pratique."

#. 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 ""
"Il est difficile d'imaginer un algorithme plus simple pour ce problème : "
"tant que ce n'est pas trié, chercher la base contenant les candidates. Si le "
"trou est sur la base <code>B</code>, il s'agit de la base <code>B+1</code> "
"(modulo le nombre de bases). Ensuite, il faut calculer la distance que "
"chacune des buggles de cette base doit encore parcourir (0 si elle est déjà "
"chez elle). Une fois que vous avez sélectionné l'heureuse élue, utilisez la "
"méthode <code>deplace</code> pour la faire bouger, avant de passer à "
"l'itération suivante."

#. 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 ""
"La principale difficulté est peut-être d'écrire les quelques équations "
"nécessaires sans se tromper. Trouver quelle est la base après le trou "
"devrait être assez facile, mais calculer la distance que chaque joueur doit "
"encore parcourir peut s'avérer plus problématique. N'hésitez pas à faire des "
"dessins pour vérifier que votre équation marche dans tous les cas, il n'y a "
"pas tant de cas possibles que cela après tout."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/SelectBaseball.html:2
msgid "Selection Baseball"
msgstr "Baseball par sélection"

#. 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 ""
"L'algorithme précédent est très plaisant : il est plutôt simple, assez "
"rapide à implémenter, mais malheureusement, il est également carrément faux. "
"Dans certains cas, il ne s'arrête jamais, ce qui n'est pas très bon. Si vous "
"ne le croyez pas, copie/collez votre code et appuyez sur le bouton "
"«Exécuter». Le premier monde de cet exercice est l'un de ces cas malheureux "
"où notre algorithme devient fou."

#. 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 ""
"Il nous faut donc trouver un autre algorithme. De préférence un qui marche "
"dans tous les cas."

#. 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 ""
"Pour cela, la meilleure solution est d'adapter un algorithme connu au lieu "
"de tenter de partir de zéro comme nous venons de faire. Quand on réfléchi un "
"peu à ce problème, on reconnaît un certain air de famille avec le problème "
"du tri : il suffit de <b>trier</b> les joueurs en fonction de leur couleur "
"pour le résoudre. Et tant que nous y sommes, nous pouvons généraliser un peu "
"le problème en utilisant plus de quatre 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 ""
"Adaptons le tri par sélection à notre situation. Les grandes lignes de cet "
"algorithme sont les suivantes : «pour chaque base, trouver dans la zone pas "
"encore triée les joueurs qui doivent occuper cette base, puis les y placer». "
"De la sorte, on va faire grandir une zone triée qu'on ne modifie plus "
"jamais, tout en faisant réduire la taille de la zone pas encore triée."

#. 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 ""
"Choisir les joueurs à déplacer ne devrait pas poser de problème. N'hésitez "
"pas à définir quelques fonctions comme <code>trouveJoueur</code> ou "
"<code>trouveBaseJoueur()</code>. Cela améliorera la lisibilité de votre "
"code, ce qui est toujours une bonne chose."

#. 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 ""
"L'aspect le plus problématique est de déplacer les joueurs sélectionnés "
"jusqu'à leur position. Pour cela, il vous faut déplacer le trou jusqu'à la "
"base où se trouve le joueur, puis bouger ensuite le trou et le joueur de "
"base en base jusqu'à celle avant la cible (au moyen d'une boucle). Enfin, on "
"peut mettre le joueur dans la bonne case de sa base de prédilection."

#. 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 ""
"Comme souvent en programmation, le diable est dans les détails, et il y a un "
"certain nombre de cas particuliers à détecter et à gérer correctement, comme "
"quand le joueur est déjà dans sa base de prédilection (mais pas dans la "
"bonne position), ou quand le trou se trouve en fait à droite du joueur "
"(probablement quand vous triez la première base). Mais vous allez trouver et "
"résoudre ces problèmes quand vous débugguerez votre code."

#. type: Content of: <h1>
#: src/lessons/sort/baseball/InsertBaseball.html:2
msgid "Insertion Baseball"
msgstr "Baseball par insertion"

#. 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 ""
"Le coté positif d'adapter le tri par sélection à notre problème est que nous "
"savons que cela fonctionne (à condition que notre adaptation soit correcte). "
"C'est bien mieux que notre premier algorithme naïf, qui était incapable de "
"converger vers la solution dans certains cas. Cependant, le tri par "
"sélection n'est pas parfait non plus, puisqu'il requiert beaucoup "
"d'échanges : il faut amener le trou jusqu'au joueur sélectionné puis amener "
"le joueur ET le trou vers la bonne base. On doit pouvoir faire mieux."

#. 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 ""
"Par exemple, chaque joueur peut avoir à parcourir un chemin relativement "
"long pour arriver à sa position finale. Au lieu de cela, il serait peut-être "
"intéressant de couper le terrain en deux parties : l'une à gauche où tous "
"les joueurs sont triés relativement les uns aux autres, et une autre à "
"droite où les joueurs n'ont pas encore bougé de leur position de départ. "
"Ensuite, à chaque itération, on prend le joueur à la frontière entre les "
"deux zones (c'est à dire, le joueur le plus à gauche de la zone non triée) "
"et on le déplace vers la gauche jusqu'à sa position dans la zone triée "
"(c'est à dire, jusqu'à ce qu'il soit plus grand que son voisin de gauche). "
"Cela réduirait au moins la distance que les joueurs doivent parcourir pour "
"rentrer dans la zone triée, puisqu'on prend systématiquement le joueur à la "
"frontière."

#. 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 ""
"En fait, c'est exactement ce qu'un tri par insertion ferait: maintenir une "
"zone triée à gauche, et y insérer à chaque itération l'élément qui se trouve "
"à la frontière en le décalant vers la gauche jusqu'à sa position dans la "
"zone triée. C'est une bonne chose, car cela veut dire que notre algorithme "
"n'est pas fondamentalement faux, puisqu'il s'agit d'une adaptation d'un "
"algorithme connu."

#. 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 ""
"Le plus simple pour adapter le tri par insertion au problème du baseball est "
"de considérer toutes les positions comme adjacentes sans tenir compte des "
"différentes bases. Pour cela, il faut définir les méthodes "
"<code>couleurJoueur[!c]Insert[/!](pos)</code>, <code>deplace[!c]Insert[/!]"
"(pos)</code> et <code>trouveTrou[!c]Insert[/!]()</code> qui utilisent un "
"seul entier pour désigner une position donnée et appellent les fonctions de "
"base de cet univers pour faire leur travail. Pour convertir une position "
"encodée sur un seul entier <code>index</code> en une position encodée sur "
"deux entiers <code>base,pos</code>, il faut appliquer les formules "
"suivantes: <code>base=index/2</code> et <code>pos=index%2</code>. Pour faire "
"le calcul inverse, il faut utiliser <code>index=base*2+pos</code> (qui "
"fonctionne car il y a deux positions par base)."

#. 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 ""
"Pour l'algorithme lui-même, vous devriez tout d'abord bouger le trou en "
"position 1. On considère alors que la zone triée se limite pour l'instant à "
"la position 0 (elle est alors de taille 1) tandis que la zone non triée "
"commence à partir de la position 2. Ensuite, on fait une itération par "
"élément à trier. Comme le corps de cet itération est un peu plus compliqué "
"que ce que nous avons écrit jusque là, vous devriez réfléchir à l'invariant "
"de cette boucle, c'est à dire à la condition qui est vraie avant et après un "
"passage dans la boucle, et qui fait que la boucle fait son travail. Ici, "
"l'invariant a deux parties : tout d'abord, l'emplacement vide se trouve "
"entre les parties triées et non triées, et ensuite, la zone triée est ... "
"triée, c'est à dire que tous les éléments de cette zone sont bien triés par "
"rapport à leurs voisins."

#. 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 ""
"Ensuite, le corps de la boucle devrait trier un élément en descendant cet "
"élément et le trou dans la zone triée jusqu'au point où l'élément est à sa "
"place dans la zone triée (cela demande deux déplacements par case à "
"parcourir), avant de remonter le trou à sa place à la frontière (un "
"déplacement par case à parcourir)."

#. 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 ""
"Une fois que vous avez inséré le dernier élément dans la zone triée, tout "
"votre ensemble est trié et vous avez fini. Je vous laisse la surprise des "
"cas limites nécessitant de petits ajustements à votre algorithme pour lui "
"permettre de fonctionner dans tous les cas :)"

#. type: Content of: <h1>
#: src/lessons/sort/baseball/BubbleBaseball.html:2
msgid "Bubble Baseball"
msgstr "Baseball à bulle"

#. 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 ""
"Zut, nous avions adapté le tri par insertion parce que notre tri par "
"sélection nécessitait trop de déplacements pour mener les joueurs "
"sélectionnés à leur position, mais le tri par insertion impose une quantité "
"déraisonnable de déplacements pour déplacer les joueurs de la frontière "
"jusqu'à leur place dans la section triée. Au final, notre variante par "
"sélection était plus efficace, avec au pire <code>3*nombre de bases</code> "
"déplacement par élément à trier (1 pour apporter le trou jusqu'au joueur à "
"bouger, et 2 pour amener le joueur et le trou jusqu'à leur position "
"finale).  De son coté, notre variante par insertion nécessite au pire "
"<code>3*nombre de joueurs</code> déplacements pour trier un élément (2 pour "
"descendre le joueur et le trou à leur place, et 1 pour remonter le trou). "
"C'est deux fois pire puisqu'il y a deux joueurs par base. Il serait "
"probablement possible d'améliorer un peu notre variante par insertion en "
"descendant plus vite le trou et le joueur, mais cela semble assez difficile "
"(il ne faut pas mélanger les éléments déjà triés pendant la descente), et "
"cela ne permettrait que de rendre cette variante aussi efficace que celle "
"par sélection, pas de faire vraiment mieux."

#. 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 ""
"Si nous ne pouvons pas rendre ce tri plus rapide, au moins nous pouvons le "
"faire plus simplement. Quand on y pense, il semble assez naturel d'adapter "
"le tri à bulle à ce problème : le trou devient la bulle qui monte et qui "
"descend, en sortant peu à peu le tableau. Les grandes lignes de l'algorithme "
"sont très simples : «tant que ce n'est pas trier, déplacer le trou vers le "
"bas puis vers le haut. À chaque pas, c'est le plus petit des deux joueurs de "
"la base qui descend, et le plus grand des deux qui monte (en fonction du "
"sens de déplacement).». Après un moment, <code>estTrie()</code> devient "
"vrai, et votre algorithme s'arrête."

#. 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 ""
"C'est tellement simple que nous pouvons nous payer le luxe d'une autre "
"variante du problème, avec plus de deux joueurs par base. Mais cela ne va "
"pas vous ralentir longtemps, n'est ce pas?"

#. 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 ""
"De manière étonnante, la variante à bulle semble nécessiter beaucoup moins "
"de déplacements que les autres variantes. C'est assez surprenant car "
"habituellement, le tri à bulle est la pire des variantes possibles, mais "
"cela s'explique sans peine par les analogies entre cet algorithme et le "
"problème du baseball multicolore. Il est relativement courant qu'un "
"algorithme écrit simplement et naturellement se comporte bien en pratique. "
"Il ne s'agit cependant pas d'une règle absolue, comme prouvé par "
"l'algorithme simple et faux du premier exercice !"

#. type: Content of: <h1>
#: src/plm/universe/turtles/TurtleWorld.html:2
msgid "The universe of turtles"
msgstr "L'univers des tortues"

#. 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 ""
"Cet univers est une adaptation de LOGO pour la 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 ""
"Il est directement inspiré des travaux du mathématicien Seymour Papert dans "
"les années 60. Inspiré par le psychologue suisse Jean Piaget, il a inventé "
"une méthode d'apprentissage de la programmation accessible aux jeunes "
"enfants nommée LOGO. Le monde est peuplé de tortues qui laissent une trace "
"là où elles marchent et à qui on peut donner des ordres simples."

#. type: Content of: <h2>
#: src/plm/universe/turtles/TurtleWorld.html:12
msgid "Functions to move the turtle"
msgstr "Fonctions pour déplacer la tortue"

#. 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 [/!]avance([!java|c]double [/!]nbPas[!scala]:Double[/!])\n"
"[!java|c]void [/!]recule([!java|c]double [/!]nbPas[!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 "Avance ou recule du nombre de pas demandé."

#. 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 [/!]droite([!java|c]double [/!]angle[!scala]:Double[/!])\n"
"[!java|c]void [/!]gauche([!java|c]double [/!]angle[!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 "Tourne à gauche ou à droite de l'angle indiqué (en degrés)."

#. 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 ""
"Renvoie la position courante de la tortue. L'origine (0; 0) est dans le coin "
"en haut à gauche, comme c'est souvent le cas en informatique."

#. 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 "Téléporte la tortue à une nouvelle position (sans laisser de trace)."

#. 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 [/!]allerVers([!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 "Déplace la tortue à une nouvelle position."

#. 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 [/!]cercle([!java|c]double [/!]rayon[!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 "Dessine un cercle du rayon demandé et centré sur la tortue."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:38
#, no-wrap
msgid "[!java|c]void [/!]hide()"
msgstr "[!java|c]void [/!]cache()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:39
msgid "Hides the turtle."
msgstr "Cache la tortue."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:41
#, no-wrap
msgid "[!java|c]void [/!]show()"
msgstr "[!java|c]void [/!]montre()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:42
msgid "Shows the turtle back."
msgstr "Montre la tortue."

#. 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 [/!]estVisible()[!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 "Renvoie vrai si la tortue est actuellement visible."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:47
#, no-wrap
msgid "[!java|c]void [/!]clear()"
msgstr "[!java|c]void [/!]efface()"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:48
msgid "Removes any trail on the sheet."
msgstr "Efface toutes les traces de la feuille."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:50
#, no-wrap
msgid "[!java|c]double [/!]getHeading()[!scala]:Double[/!]"
msgstr "[!java|c]double [/!]getCap()[!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 "Retourne le cap actuel de la tortue (en degrés)."

#. 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 [/!]setCap([!java|c]double [/!]angle[!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 "Change le cap de la tortue à l'angle indiqué (en degrés)."

#. type: Content of: <h2>
#: src/plm/universe/turtles/TurtleWorld.html:56
msgid "Functions about the pen"
msgstr "Fonctions à propos du stylo"

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:58
#, no-wrap
msgid "[!java|c]void [/!]penUp()"
msgstr "[!java|c]void [/!]leveCrayon()"

#. 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 ""
"Remonte le crayon de la tortue (les tortues ont des crayons, pas des brosses "
"comme les buggles). La tortue ne laissera plus de trace lors de ses "
"déplacements suivants."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:62
#, no-wrap
msgid "[!java|c]void [/!]penDown()"
msgstr "[!java|c]void [/!]baisseCrayon()"

#. 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 ""
"Descend le stylo. La tortue laissera une trace lors de ses prochains "
"déplacements."

#. 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 [/!]estCrayonBaisse()[!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 "Retourne si le stylo est actuellement baissé ou non."

#. type: Content of: <pre>
#: src/plm/universe/turtles/TurtleWorld.html:68
#, no-wrap
msgid "[!java|c]Color [/!]getColor()[!scala]:Color[/!]"
msgstr "[!java|c]Color [/!]getCouleur()[!scala]:Color[/!]"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:69
msgid "Returns the current pen color."
msgstr "Retourne la couleur actuelle du stylo."

#. 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 [/!]setCouleur([!java|c]Color [/!]couleur[!scala]:Color[/!])"

#. type: Content of: outside any tag (error?)
#: src/plm/universe/turtles/TurtleWorld.html:72
msgid "Changes the pen color."
msgstr "Modifier la couleur du stylo."

#. type: Content of: <h2>
#: src/plm/universe/turtles/TurtleWorld.html:74
msgid "Other functions"
msgstr "Autres fonctions"

#. 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 ""
"Renvoie si la tortue actuelle est sélectionnée dans l'interface graphique."

#. type: Content of: <h3>
#: src/lessons/turtleart/Main.html:2 src/lessons/turtleart/short_desc.html:2
msgid "Turtle Art"
msgstr "L'art de la tortue"

#. 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 ""
"Dès sa conception dans les années 60, la tortue LOGO s'est révélé être un "
"outil fascinant pour dessiner sur ordinateur. Cette leçon vous permet "
"d'explorer certaines des figures les plus classiques, et de dessiner les "
"vôtres."

#. 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 ""
"La syntaxe du langage n'est absolument pas présentée, mais si vous "
"connaissez les bases (ou si quelqu'un peut répondre à vos questions), vous "
"pouvez faire ces exercices même si vous êtes un débutant absolu en "
"programmation."

#. 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 ""
"Envoyez nous vos plus belles contributions pour que nous les ajoutions à "
"cette galerie afin d'inspirer les futurs utilisateurs."

#. 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 ""
"D'autres exercises devraient être ajoutés. Une mine d'inspiration quasi "
"inépuisable se trouve à l'adresse <a href=\"http://neoparaiso.com/logo/"
"#sect4\">http://neoparaiso.com/logo/#sect4</a>, tandis que d'autres "
"challenges intéressants se trouvent à l'adresse <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 ""
"Il manque des primitives arc() et arcVers() pour dessiner un arc de cercle, "
"en restant sur place ou en bougeant jusqu'à la fin de l'arc."

#. 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 ""
"Dessinez de belles figures avec la tortue Logo, et apprenez la programmation "
"en jouant."

#. 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 ""
"Vous devez connaître la syntaxe de base du langage que vous allez choisir, "
"mais aucune expérience n'est nécessaire pour entreprendre cette leçon."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/universe/ConsWorld.html:2
msgid "ConsWorld"
msgstr "Monde des listes récursives"

#. 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 ""
"Ce monde vous permettra d'expérimenter avec les listes récursives, telles "
"qu'elles ont été définies en Lisp à l'origine. Ce monde est assez similaire "
"au BatWorld, mais vous êtes supposé écrire des fonctions récursives agissant "
"sur des [!python|java]listes récursives. Comme [!thelang] ne propose rien de "
"tel en natif, ce monde défini un nouveau type nommé <code>RecList</code> "
"pour cela.[/!] [!scala]listes d'entiers (<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 ""
"Une telle liste peut être soit la liste vide (notée <code>[!scala]Nil[/!][!"
"java]null[/!][!python]None[/!]</code>), soit un entier suivi d'une liste. Si "
"une liste n'est pas vide, vous pouvez retrouver son premier entier avec "
"<code>list.head</code>. On dit qu'on extrait alors la tête de la liste.La "
"liste contenant ses autres éléments (tous sauf la tête) peut être retrouvée "
"avec <code>list.tail</code>. On dit qu'on extrait la suite de la liste.Bien "
"entendu, la liste vide n'a ni tête ni suite, et vous ne devriez pas tenter "
"d'accéder à ces éléments sous peine d'obtenir un message d'erreur "
"(particulièrement déplaisant)."

#. 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 ""
"Pour construire votre propre liste, vous devez concaténer une tête et une "
"suite comme suit : [!java|python]<code>cons(tête, suite)</code>[/!] [!"
"scala]<code>tête::suite</code>. Il se trouve que <code>::</code> est un "
"opérateur générique du langage Scala pour construire des listes.[/!]"

#. 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 ""
"En résumé, vous pouvez résoudre tous les exercices de cette leçon avec les "
"constructions suivantes :"

#. type: Content of: <ul><li>
#: src/lessons/recursion/cons/universe/ConsWorld.html:30
msgid "<b>The empty list:</b>"
msgstr "<b>La liste vide:</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|c]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>Obtenir le premier élément 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>Obtenir la suite de la liste</b>, privée de son premier élément:"

#. 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>Construire une liste</b> à partir d'une <code>valeur</code> et d'une "
"<code>liste</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(valeur, liste)"

#. type: Content of: <ul><li><pre>
#: src/lessons/recursion/cons/universe/ConsWorld.html:35
#, no-wrap
msgid "value::list"
msgstr "valeur::liste"

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Main.html:2
msgid "Recursive Lists"
msgstr "Listes récursives"

#. 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 ""
"Cette leçon propose un paquet d'exercices classiques sur les listes "
"récursives. Il ne s'agit certainement pas de la leçon la plus drôle de la "
"PLM, mais il s'agit certainement de la plus simple des leçons PLM sur la "
"récursivité."

#. 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 ""
"De nouveaux exercices pourraient être proposés, par exemple inspirés de "
"http://webloria.loria.fr/~quinson/Teaching/TOP/02-td-recursivite-enonce.pdf "
"Si vous en connaissez d'autres, nous vous serions reconnaissant de nous en "
"parler dans un rapport d'anomalie."

#. 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 ""
"Il serait intéressant de vérifier la complexité algorithmique du code "
"proposé par les étudiants, mais cela semble assez difficile à faire. En "
"Python et Java, nous proposons un type de donnée spécifique (les "
"<code>RecList</code>) alors nous pourrions compter le nombre de cons "
"réalisés dans chaque exercice, mais il risque d'être compliqué de trouver le "
"test auquel rattacher chaque opération. En Scala, cela s'annonce encore plus "
"difficile car nous utilisons directement des mots-clés du langage. Il serait "
"probablement difficile d'y injecter un mécanisme comptant les opérations. On "
"pourrait vouloir assurer que la pile d'appel ne dépasse pas une profondeur "
"donnée, mais cela semble également difficile à implémenter. Si vous avez des "
"idées, merci de nous en faire part."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Length.html:2
msgid "Length"
msgstr "Longueur"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] "
"retournez sa longueur[!scala], sans utiliser la méthode <code>size</code> de "
"la liste, bien entendu[/!].[!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]Attention, vous n'êtes pas supposé utiliser les listes classiques "
"de Python, mais celles définies dans cet exercice. [/!] Veuillez vous "
"référer à la documentation de ce monde pour plus d'information sur les "
"listes récursives."

#. 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 "Votre solution devrait être linéaire en temps."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/IsMember.html:2
msgid "IsMember"
msgstr "EstMembre"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] et "
"un entier, retournez <code>true</code> si cet entier fait partie des "
"éléments de la liste, et <code>false</code> sinon."

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] et "
"un entier, retournez le nombre d'occurences de cet entier dans la liste. Si "
"l'entier n'est pas membre de la liste, la fonction doit renvoyer 0."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Last.html:2
msgid "Last"
msgstr "Dernier"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!], "
"retournez son dernier élément. Vous pouvez supposer que la liste n'est pas "
"vide."

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!], "
"retournez la plus petite de ses valeurs. Vous aurez probablement besoin "
"d'une fonction supplémentaire, mais vous pouvez supposer que la liste n'est "
"pas vide."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Increasing.html:2
msgid "Increasing"
msgstr "Croissante"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!], "
"retournez <code>true</code> si ses éléments forment une suite croissante "
"(c'est-à-dire si ses éléments sont classés du plus petit au plus grand)."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/ButLast.html:2
msgid "But Last"
msgstr "Sauf Dernier"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!], "
"retournez la liste contenant tous ses éléments sauf le dernier. Vous pouvez "
"supposer que la liste n'est pas vide."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/PlusOne.html:2
msgid "PlusOne"
msgstr "PlusUn"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!], "
"retournez une nouvelle liste dont les éléments sont ceux de votre paramètre, "
"incrémentés de un."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Remove.html:2
msgid "Remove"
msgstr "Retire"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] "
"<code>L</code> et un entier, retournez une nouvelle liste contenant tous les "
"éléments de <code>L</code> n'étant pas égaux à l'entier passé en paramètre."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Nth.html:2
msgid "Nth"
msgstr "Nième"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] et "
"un entier <code>N</code>, retournez le <code>N</code>ième élément de la "
"liste."

#. 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 ""
"Vous pouvez supposer que la liste est suffisamment longue, c'est à dire "
"qu'elle contient au moins <code>N</code> éléments. Votre solution devrait "
"être linéaire en temps."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Nfirst.html:2
msgid "Nfirst"
msgstr "nPremiers"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] et "
"un entier <code>N</code>, retournez la liste constituée de ses <code>N</"
"code> premiers éléments. Vous pouvez supposer que la liste est suffisamment "
"longue, c'est à dire qu'elle contient au moins <code>N</code> éléments."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Nlast.html:2
msgid "Nlast"
msgstr "nDerniers"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] et "
"un entier <code>N</code>, retournez la liste constituée de ses <code>N</"
"code> derniers éléments. "

#. 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 ""
"Votre solution devrait être linéaire en temps, mais vous aurez probablement "
"besoin de définir plusieurs fonctions pour atteindre cette complexité."

#. 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 "Je n'arrive pas à le faire en temps linéaire"

#. 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 ""
"L'astuce est de calculer une seule fois (et à l'avance) combien d'éléments "
"il faut garder."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/ButNfirst.html:2
msgid "But Nfirst"
msgstr "Sauf nPremiers"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] et "
"un entier <code>N</code>, retournez la liste privée de ses <code>N</code> "
"premiers éléments. "

#. type: Content of: <h1>
#: src/lessons/recursion/cons/ButNlast.html:2
msgid "But Nlast"
msgstr "Sauf nDerniers"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!] et "
"un entier <code>N</code>, retournez la liste privée de ses <code>N</code> "
"derniers éléments."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Reverse.html:2
msgid "Reverse"
msgstr "Inverse"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!], "
"retournez la liste constituée de ses éléments en ordre inverse."

#. 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 ""
"Cette fonction est très importante et vous ne devriez pas passer ce défi "
"sans trouver la réponse, qui doit être linéaire grâce à l'aide de fonctions "
"supplémentaires."

#. 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 ""
"Il faut réaliser une fonction d'aide dont le résultat est accumulé "
"(construit) à chaque étape."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/Concat.html:2
msgid "Concat"
msgstr "Concaténation"

#. 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 ""
"Étant donnée deux [!scala]List[Int][/!][!java|python]listes récursives[/!] "
"<code>l1</code> et <code>l2</code>, retournez la liste constituée de tous "
"les éléments de <code>l1</code> suivis de tous les éléments 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 ""
"Il faut modifier <code>l1</code> au préalable pour s'assurer que chaque "
"étape récursive soit en temps constant."

#. type: Content of: <h1>
#: src/lessons/recursion/cons/AllDifferent.html:2
msgid "All Different"
msgstr "Tous différents"

#. 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 ""
"Étant donnée une [!scala]List[Int][/!][!java|python]liste récursive[/!], "
"retournez <code>false</code> si deux éléments ont la même valeur, et "
"<code>true</code> si tous les éléments sont différents deux à deux."

#. 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 ""
"La solution la plus simple est en O(n²), ce qui veut dire qu'elle s'exécute "
"en temps quadratique. Vous aurez probablement besoin de définir une fonction "
"supplémentaire pour cela. Une autre solution bien plus complexe s'exécute en "
"O(n log(n))."

#. type: Content of: <h1>
#: src/lessons/recursion/lego/Main.html:2
msgid "Recursive algorithms"
msgstr "Algorithmes récursifs"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/Main.html:3
msgid "This lesson allows to experiment with recursive algorithms."
msgstr "Cette leçon vous permet d'expérimenter avec des algorithmes récursifs."

#. 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 ""
"Si vous cherchez d'autres algorithmes récursifs, un exercice sur les tris "
"récursifs (en particulier QuickSort et MergeSort) est prévu à l'avenir dans "
"la leçon sur les tris."

#. type: Content of: <h3>
#: src/lessons/recursion/lego/Main.html:9
msgid "What can I do to improve this lesson?"
msgstr "Que puis-je faire pour améliorer cette leçon ?"

#. 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 ""
"Comme souvent, plusieurs points pourraient être améliorés dans cette "
"leçon&nbsp;:"

#. 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 ""
"Le triangle de Sierpinski peut être tracé de façon bien plus simple en "
"utilisant un L-système. Voir 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 ""
"la courbe de Sierpinski est également intéressante: 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 ""
"La courbe du dragon pourrait être expliquée comme un L-système. 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 ""
"La courbe du dragon2 s'appelle la courbe des dragons jumeaux: 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 ""
"Les courbes remplissant l'espace (Peano, Hildebert, etc) pourraient être "
"ajoutées. 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 ""
"Un exercice sur les polygones inscrits serait intéressant: 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 "Les bases de la récursion"

#. 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 ""
"Découvrez la récursion en dessinant des arbres et d'autres figures avec la "
"tortue Logo."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/square/FourSquare.html:2
msgid "The small cousines of Buggles"
msgstr "Les petites cousines des 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 ""
"Aujourd'hui, nous allons faire la connaissance des petites cousines des "
"buggles : les tortues. En fait, les tortues sont bien plus vieilles que les "
"buggles. Elles ont été inventées dans les années 70 par un scientifique du "
"MIT nommé Seymour Papert pour aider à l'enseignement de la programmation, et "
"les buggles sont une variation sur le thème inventée par Lyn Turbak du "
"Wellesley College plus tard."

#. 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 ""
"Les tortues sont donc un peu comme les buggles, en plus petit.  Comme les "
"buggles, vous pouvez leur demander d'avancer, de tourner, de reculer, etc. "
"Comme les buggles, elles laissent une trace sur leur passage quand elles "
"avancent (simplement, le trait est bien plus fin)."

#. 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 ""
"La principale différence est que là où les buggles ne peuvent tourner que de "
"quarts de tour, les tortues peuvent tourner d'un angle quelconque précisé "
"par un nombre réel (double). Cela leur donne bien plus de liberté dans leur "
"mouvement. Les buggles savent faire plusieurs trucs qui échappent aux "
"tortues, comme lire et écrire des messages sur le sol ou ramasser des "
"objets, et il y a parfois des murs dans leur univers, mais tout cela dépasse "
"complètement les tortues."

#. 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 ""
"D'un point de vue pratique, la plupart des méthodes que vous connaissez à "
"propos des buggles fonctionnent également avec les tortues, à quelques "
"variantes près. En particulier, la méthode <code>avance</code> prend en "
"argument le nombre de pas donné comme un [!python]nombre à virgule[/!][!java|"
"scala|c]double[/!] (voir «Aide / À propos de ce monde» dans le menu pour "
"plus de détails)."

#. type: Content of: <h3>
#: src/lessons/recursion/lego/square/FourSquare.html:29
msgid "Doubles? But what is it?"
msgstr "Des doubles ? Mais qu'est ce que c'est ?"

#. type: Content of: outside any tag (error?)
#: src/lessons/recursion/lego/square/FourSquare.html:30
msgid "It's simply a point number. Example:"
msgstr "C'est simplement un nombre à virgule. Exemple:"

#. 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 // Valeur = 4.954\n"
"x + 2. // Valeur = 5.72 (2. signifie 2.0)\n"
"x + 2 // [!java|c]Valeur = 5.72 (2 converti en 2.0 automatiquement)[/!][!scala]Erreur de typage (l'opérateur + operator ne mélange pas les Double avec les Int). Il faut convertir explicitement[/!]\n"
"x * 2. // Valeur = 7.44\n"
"x / 2. // Valeur = 1.86 (2 converti en 2.0 automatiquement)\n"
"[!java|c](int) x[/!][!scala]x.asInstanceOf[Int][/!] // Valeur = 1 (“transtypage en int”, converti en entier en tronquant)\n"
"Math.round(x) // Valeur = 2 (1.86 arrondi à l'entier le plus proche)\n"
"Math.floor(x) // Valeur = 1 (1.86 arrondi en direction de moins l'infini)\n"
"Math.floor(-5.12) // Vale = -6 (Arrondi en direction de moins l'infini)\n"
"Math.ceiling(x) // Value = 2 (1.86 arrondi en direction de plus l'infini)\n"
"Math.ceiling(-5.12) // Value = -5 (Arrondi en direction de plus l'infini)\n"
"[!java|c](double) 17[/!][!scala]17.asInstanceOf[Double][/!] // Value = 17.0 (“transtypage en double”, converti en 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 ""
"Bien que ce soit le premier exercice de la leçon sur la récursivité, le code "
"que vous devez écrire n'est pas récursif. L'objectif est de se familiariser "
"avec le monde des tortues avant d'attaquer les choses sérieuses."

#. 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 ""
"Vous devez reproduire une forme géométrique simple faite de quatre carrés de "
"longueur 100 de coté (voir le monde objectif pour plus de détails). C'est "
"sans doute une bonne idée d'écrire une méthode pour faire un carré, et de la "
"réutiliser lors de l'écriture de votre code."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/polygonfractal/PolygonFractal.html:2
msgid "Fractal of polygons"
msgstr "Fractales de polygones"

#. 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 ""
"La fractale que nous allons dessiner maintenant est formée d'un polygone "
"auquel sont ajoutés des petits polygones sur chaque angle. Le prototype de "
"la fonction le traçant est le suivant:"

#. 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 [/!]polygonFractal ([!java|c]int [/!]niveaux[!scala]:Int[/!], [!java|c]int [/!]cotés[!scala]:Int[/!], [!java|c]double [/!]longueur[!scala]:Double[/!], [!java|c]double [/!]multiplicateur[!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 ""
"Consultez les objectifs de chaque monde pour comprendre comment écrire la "
"fonction."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/Koch.html:2
msgid "Snow flake"
msgstr "Flocons de neige"

#. 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 ""
"Nous allons maintenant dessiner des flocons de neige en utilisant la "
"fractale de Koch.  Une fractale est un dessin géométrique dont le motif se "
"reproduit à n'importe quelle échelle."

#. 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 ""
"La forme générale est une sorte de triangle, dont chaque coté est généré par "
"des appels récursifs.\n"
"Vous ne devez dessiner qu'un coté de ce triangle dans la fonction "
"<code>snowSide</code>. \n"
"Pour simplifier les choses, chaque coté a une couleur particulière. "
"Contentez vous de dessiner les choses en rouge (sans changer votre couleur), "
"et les autres couleurs seront dessinées automatiquement."

#. 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 ""
"Observez l'objectif de chaque monde pour comprendre la logique du motif à "
"dessiner, puis reproduisez-le.\n"
"Au niveau 0, la courbe de Koch est une simple ligne droite.\n"
"Au niveau 1, elle est divisée en trois tiers, et la partie du milieu est "
"remplacée par deux cotés d'un triangle équilatéral de même longueur que le "
"segment supprimé.\n"
"Au niveau 2, le processus est répété avec le tiers central de chaque segment "
"remplacé par un petit triangle équilatéral."

#. type: Content of: <p>
#: src/lessons/recursion/lego/koch/Koch.html:20
msgid "The pseudo-code of the general case is the following:"
msgstr "Le pseudo-code du cas général est le suivant :"

#. 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 ""
"Dessiner récursivement un segment plus petit\n"
"Tourner à 60 degrés vers la gauche\n"
"Dessiner récursivement un segment plus petit\n"
"Tourner à 120 degrés vers la droite\n"
"Dessiner récursivement un segment plus petit\n"
"Tourner à 60 degrés vers la gauche\n"
"Dessiner récursivement un segment plus petit\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 ""
"Comme vous pouvez le constater, la fonction avance() n'est pas appelée dans "
"le cas récursif, mais seulement dans le cas de base, quand il n'y a plus "
"d'appel récursif."

#. type: Attribute 'alt' of: <p><div>
#: src/lessons/recursion/lego/koch/Koch.html:34
msgid "Too much letters. Please picture it."
msgstr "TL;DR. Vous pouvez me dessiner tout ça ?"

#. 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 "Voici le résultat des premiers niveaux de récursion."

#. 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 ""
"Vous devez écrire la fonction snowSide, qui est récursive. Mais <b>n'appelez "
"pas snowFlake depuis snowSide</b>, car sinon le résultat sera vraiment "
"étrange et inattendu."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/SquareKoch.html:2
msgid "Snow square"
msgstr "Carrés de neige"

#. 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 ""
"Cet exercice est une variation sur le flocon de neige vu précédemment. \n"
"La principale différence est qu'il faut maintenant faire pousser des petits "
"carrés au lieu des triangles sur les segments de cette figure."

#. 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 "Je ne vois pas. Je peux voir un dessin ?"

#. 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 ""
"Comme précédemment, votre fonction <code>squareSide</code> doit seulement "
"dessiner un coté de la figure, et le code fourni l'appellera 4 fois pour "
"dessiner tous les cotés (chacun avec sa couleur)."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/PentaKoch.html:2
msgid "Snow pentagon"
msgstr "Pentagone de neige"

#. 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 ""
"Voici une autre variation de la courbe de Koch. Cette fois, ce sont de "
"petits pentagones (c'est à dire des polygones à 5 cotés) qui doivent pousser "
"sur les faces de la figure. Je suis sûr que vous commencez à prendre le truc."

#. 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 ""
"Une autre différence avec les exercices précédents est que cette fois, vous "
"ne devez pas diviser la taille du segment par 3 à chaque niveau de "
"récursion, mais vous devez le multiplier par 0,4. La courbe est plus jolie "
"ainsi :)"

#. 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 ""
"Nous dessinons un seul coté dans cet exercice, donc votre code ne sera "
"appelé qu'une seule fois."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/koch/HexaKoch.html:2
msgid "Snow hexagon"
msgstr "Hexagone de neige"

#. 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 ""
"Cette fois, nous allons dessiner une courbe surnommée la courbe de Koch-(6; "
"0,14). Cela signifie que nous allons faire pousser des hexagones (des "
"polygones à 6 faces) sur les segments, et que les longueurs doivent être "
"multipliées par 0,14 à chaque étage de la récursion."

#. 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 ""
"Pour info, la courbe de Koch originale est la (3; 1/3). Le carré de neige "
"est la courbe (4; 1/3). Le pentagone de neige est la courbe (5; 0,4). Si "
"vous le souhaitez, vous pouvez passer en mode créatif pour explorer d'autres "
"courbes de Koch. Remplacez simplement l'appel à hexaKoch par ce que vous "
"voulez."

#. 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 ""
"Pour plus d'informations, référez vous à <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 "La fractale du crabe"

#. 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 ""
"La courbe du crabe n'est pas exactement une courbe de Koch, mais cette "
"fractale est construite de façon très similaire. Cette fois, nous ne "
"remplaçons pas le tiers central de chaque segment, mais le segment entier. À "
"la place, il faut faire pousser des triangles isocèles et rectangles. "
"L'angle initial est de 45°, et la longueur est divisée par [!java|scala]Math."
"sqrt(2)[/!][!python]math.sqrt(2)[/!][!c]sqrt(2);[/!] à chaque étape."

#. 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 ""
"Vérifiez les figures produites par les premiers niveaux de récursivité pour "
"comprendre le motif."

#. type: Content of: <h3>
#: src/lessons/recursion/lego/koch/Crab.html:10
msgid "Bibliographical note"
msgstr "Note bibliographique"

#. 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 ""
"Cette courbe, également appelée la courbe C de Lévy, a été inventée en 1938 "
"par le mathématicien Français Paul Lévy. Comme souvent, la page Wikipedia "
"sur le sujet est très instructive. La page suivante apporte également des "
"compléments intéressants : <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 "Arbres"

#. 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 ""
"Nous allons maintenant dessiner des arbres. Pour cela, nous allons écrire "
"une fonction doublement récursive de prototype"

#. 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 [/!]tree([!java|c]int [/!]nbPas[!scala]:Int[/!], [!java|c]double [/!]longueur[!scala]:Double[/!], [!java|c]double [/!]angle[!scala]:Double[/!], [!java|c]double [/!]multiplicateur[!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 ""
"Pour dessiner un arbre à quatre étages, il faut dessiner un tronc de la "
"taille indiquée, tourner à droite de l'angle indiqué, faire un arbre à 3 "
"étages, tourner à gauche de deux fois l'angle indiqué, faire un autre arbre "
"à 3 étages, puis revenir à sa position initiale. N'oubliez pas de revenir à "
"la position initiale !"

#. 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 ""
"Si le tronc d'un arbre mesure length à l'étage N, il mesure shrink*length à "
"l'étage N+1."

#. 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 ""
"Au final, voici le pseudo-code du cas général de la récursivité (il manque "
"bien sûr le cas de base, laissé en exercice)."

#. 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 ""
"Avancer de la longueur désirée\n"
"Dessiner (récursivement) le sous-arbre de droite\n"
"Dessiner (récursivement) le sous-arbre de gauche\n"
"Reculer de la longueur désirée pour retourner au point de départ\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'oubliez pas d'ajouter le cas de base dans votre code, ou la buggle va "
"entrer en boucle infinie. De plus, dessiner le sous-arbre droit revient à "
"tourner à droite puis dessiner un sous-arbre."

#. 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 ""
"Comme vous pouvez le voir, chaque étage de la récursion est représenté par "
"une couleur distinctive. Pour cela, appelez la fonction <code>current(step)</"
"code> en lui passant en paramètre l'étage actuel de la récursion. Elle se "
"chargera de choisir la couleur adéquate. N'effacez pas vos couleurs quand "
"vous retournez à votre position initiale."

#. 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 ""
"Si vous vous trompez dans votre fonction, il peut facilement devenir très "
"compliqué de debugger votre code. Vos erreurs se produisant à tous les "
"étages de la récursion, le dessin peut vite devenir illisible. Pour vous "
"aider à debugger, vous pouvez utiliser la fonction <code>subtree()</code> "
"qui dessine un sous-arbre correct. Cette fonction est très (très) semblable "
"par ailleurs à la fonction que vous tentez d'écrire. La seule différence est "
"que <code>subtree()</code> ne dessine qu'en noir. Vous pouvez donc "
"l'utiliser à la place de vos appels récursifs pendant le debug, mais vous "
"devez changer pour des appels récursifs à votre propre code (quand il "
"marche) pour avoir les couleurs justes, et donc pour passer l'exercice."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/sierpinski/Sierpinski.html:2
msgid "Sierpinski's Triangle"
msgstr "Triangle 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 ""
"La fractale que nous allons dessiner maintenant est formée d'un triangle "
"dans lequel sont imbriqués des triangles plus petits.  Le prototype de la "
"fonction le traçant est le suivant :"

#. 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 [/!]niveau[!scala]:Int[/!], [!java|c]double [/!]longueur[!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 ""
"Consultez les objectifs des différents mondes pour comprendre le code que "
"vous devez écrire. Pour dessiner un coté du triangle, vous devez dessiner un "
"triangle récursif plus petit (avec la moitié de la taille) et avancer de la "
"longueur demandée. Au total, vous devez dessiner 3 cotés de la sorte en "
"tournant de 120 entre chaque."

#. type: Content of: <h2>
#: src/lessons/recursion/lego/spiral/Spiral.html:2
msgid "Spirals"
msgstr "Spirales"

#. 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 ""
"Nous allons maintenant écrire notre première fonction récursive avec les "
"tortues. L'objectif est de dessiner des spirales de différentes formes avec "
"la même fonction, dont le prototype est le suivant:"

#. 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 [/!]spiral([!java|c]int [/!]nbPas[!scala]:Int[/!], [!java|c]int [/!]angle[!scala]:Int[/!], [!java|c]int [/!]longueur[!scala]:Int[/!], [!java|c]int [/!]increment[!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 ""
"Pour vous aider à comprendre comment l'écrire, voici un exemple de la suite "
"des différentes valeurs prises par les paramètres dans un cas:"

#. 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 ""
"spiral(5, 90, 0, 3);\n"
"  avance(0);\n"
"  gauche(90);\n"
"  spiral(4,90,3,3);\n"
"    avance(3);\n"
"    gauche(90);\n"
"    spiral(3,90,6,3);\n"
"      avance(6);\n"
"      gauche(90);\n"
"      spiral(2,90,9,3);\n"
"        avance(9);\n"
"        gauche(90);\n"
"        spiral(1,90,12,3);\n"
"          avance(12);\n"
"          gauche(90);\n"
"          spiral(0,90,12,3);\n"

#. type: Content of: <h2>
#: src/lessons/recursion/lego/spiral/SpiralUse.html:2
msgid "Drawing spirals"
msgstr "Faire des spirales"

#. 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 ""
"Cet exercice est un peu particulier, car vous n'avez rien à faire pour le "
"passer. Tout le code nécessaire pour le passer est fourni, et il suffit de "
"cliquer sur le bouton «Exécuter». Il est là pour vous permettre d'explorer "
"les possibilités du code que vous venez d'écrire en changeant les paramètres "
"de l'appel à la fonction <code>spiral</code>. Vous pouvez passer à "
"l'exercice suivant si le temps vous manque, puis revenir jouer ici plus tard."

#. 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 ""
"Voici quelques figures que l'on peut produire avec votre fonction "
"<code>spiral</code> en lui passant les bons paramètres. Passez en mode "
"créatif (dans le menu Exercice) pour désactiver la correction de votre code "
"quand vous explorez ces spirales."

#. 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 ""
"Si vous découvrez une figure sympa n'oubliez pas de nous envoyer vos "
"paramètres (menu Aide/envoyer une anomalie) pour que nous puissions "
"l'ajouter à la liste!"

#. type: Content of: <h2>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:2
msgid "Dragon curve (1)"
msgstr "Courbe du Dragon (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 "Un exemple classique de la méthode récursive est la courbe du Dragon."

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve1.html:6
msgid "The definition of this curve is the following:"
msgstr "La définition de cette courbe est la suivante :"

#. 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 ""
"la courbe du Dragon d'ordre 1 est un vecteur entre deux points quelconques P "
"et Q,"

#. 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 ""
"la courbe du Dragon d'ordre n est la courbe du Dragon d'ordre n-1 entre P et "
"R suivie de la même courbe d'ordre n-1 entre Q et R, où PRQ est le triangle "
"isocèle rectangle en R, et R est à droite du vecteur PQ.  Donc, si P et Q "
"sont les points de coordonnées (x, y) et (z,t), les coordonnées (u, v) de R "
"sont les suivantes:"

#. 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 "Le prototype de la méthode traçant la courbe est le suivant :"

#. 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 [/!]dragon([!java|c]int [/!]ordre[!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 ""
"Vous utiliserez la méthode <code>setPos(x,y)</code> pour déplacer votre "
"tortue aux coordonnées (x,y) et la méthode <code>allerVers(z,t)</code> pour "
"tracer un trait depuis le point où la tortue est positionnée vers le point "
"de coordonnées (z,t)"

#. type: Content of: <h2>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:2
msgid "The dragon curve (2)"
msgstr "Courbe du Dragon (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 ""
"La solution précédente nécessite que la tortue se téléporte ou qu'elle lève "
"parfois le crayon pour tracer la courbe.  En effet, entre la destination du "
"trait tracé par le premier appel récursif ne correspond pas à la source du "
"trait qui doit être tracé par le second appel récursif.  C'est pourquoi il "
"était nécessaire d'utiliser la méthode <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 ""
"Dans cette leçon, vous allez donc réaliser une méthode récursive qui permet "
"de tracer la courbe du dragon sans lever le crayon. Pour ce faire, vous "
"définirez une seconde méthode récursive qui trace la courbe à l'envers."

#. 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 ""
"La méthode <code>dragon()</code> sera définie récursivement en fonction des "
"méthodes <code>dragon()</code> et <code>dragonInverse()</code>. De même, la "
"méthode <code>dragonInverse()</code> sera définie récursivement en terme de "
"<code>dragon()</code> et de <code>dragonInverse()</code>. Voici un bien bel "
"exemple de <i>récursivité croisée</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 ""
"Le prototype de la méthode <code>dragon()</code> reste le même que "
"précédemment :"

#. 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 ""
"Les coordonnées (u, v) du nouveau point introduit par la méthode "
"<code>dragon()</code> seront :"

#. type: Content of: <p>
#: src/lessons/recursion/lego/dragoncurve/DragonCurve2.html:31
msgid "The prototype of the method <code>dragonReverse</code> is similar:"
msgstr ""
"Le prototype de la méthode <code>dragonInverse()</code> est identique : :"

#. 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 [/!]dragonReverse([!java|c]int [/!]ordre[!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 ""
"Les coordonnées (u, v) du nouveau point introduit par la méthode "
"<code>dragonInverse()</code> seront :"

#. 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 ""
"Afin de rendre, plus visible le travail de chacune des deux méthodes "
"récursives, le trait tracé par la méthode <code>dragon()</code> devra être "
"rouge (<code>Color.red</code>) et le trait tracé par la méthode "
"<code>dragonInverse</code> devra être bleu (<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 "Les tours de Hanoï"

#. 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 ""
"Voici le problème ultra classique des tours de Hanoï, accompagné de quelques "
"variantes moins courantes. Si vous connaissez d'autres variantes "
"intéressantes, n'hésitez pas à nous en faire part. Un jour, quelqu'un "
"devrait probablement rédiger ces variantes sur wikipédia. Pour l'instant, "
"seul le problème de base est décrit sur l'encyclopédie libre (même en "
"anglais)."

#. 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 ""
"Les variantes au sujet des tours interclassées et séparées sont issues de "
"l'article suivant : \"Exploring Recursion with Variations on the Towers of "
"Hanoi\", Daniel W. Palmer. Il est disponible (en anglais) depuis l'adresse "
"suivante 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 ""
"Les tours de Hanoï linéaires sont rapidement décrites dans l'article "
"présentant les tours jumelles linéaires : \"The Linear Twin Towers of Hanoi "
"Problem\", Steven Minsker (ACM SIGCSE Bulletin Volume 39 numéro 4, Décembre "
"2007). Cet article n'est disponible que derrière le paywall de l'éditeur, "
"désolé."

#. 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 ""
"Le problème des tours de Hanoï tricolores est présenté à l'adresse "
"suivante : http://www.cut-the-knot.org/recurrence/TricolorHanoiAuto.shtml "
"(en anglais)"

#. 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 ""
"Le problème des tours de Hanoï cycliques a été proposé par M.D. Atkinson "
"dans un article de 1981 intitulé \"The cyclic towers of Hanoi\" (Information "
"Processing Letters, Volume 13:3).  Cet article est disponible (en anglais) à "
"l'adresse 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 "Voici l'exercice ultra classique de récursivité."

#. 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 ""
"C'est un exercice d'application de la récursivité, que vous devez maîtriser "
"avant de tenter cette leçon."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/HanoiBoard.html:2
msgid "Tower of Hanoi"
msgstr "Les tours de Hanoï"

#. 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 ""
"La tour de Hanoï, ou les tours de Hanoï, aussi appelé la Tour de Brahma ou "
"les tours de Brahma, est un jeu ou puzzle mathématique. Il consiste en trois "
"tours, et un nombre de disques de différentes tailles qui peuvent glisser "
"sur n'importe quelle tour. Le puzzle commence avec tous les disques en une "
"belle pile selon l'ordre croissant de la taille, le plus petit en haut, sur "
"une tour, formant donc une pyramide. L'objectif du puzzle est de déplacer la "
"pile entière jusqu'à une autre tour, en respectant les règles suivantes :"

#. 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 ""
"Le but de ce puzzle est de déplacer tous les disques de la pile vers un "
"autre piquet en respectant les règles suivantes :"

#. type: Content of: <ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:12
msgid "Only one disk may be moved at a time."
msgstr "Seul un disque peut être bougé à la fois."

#. 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 ""
"Chaque mouvement consiste à prendre le disque supérieur de l'une des tours "
"et à le déposer sur une autre tour, au sommet des autres disques qui peuvent "
"déjà être présents sur cette tour."

#. 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 "Aucun disque ne peut être placé au dessus d'un disque plus petit."

#. 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 ""
"Écrivez le corps de la méthode : <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 ""
"Cette méthode résout récursivement le problème. \n"
"Le premier paramètre (nommé <code>hauteur</code>) est la taille de la pile à "
"déplacer.\n"
"Le second paramètre (nommé <code>src</code>) est l'index de la pile "
"initiale.\n"
"Le troisième paramètre (nommé <code>other</code>) est l'index du piquet "
"inutilisé,\n"
"tandis que le quatrième paramètre (nommé <code>dst</code>) est l'index du "
"piquet vers lequel la pile dont être déplacée."

#. 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 ""
"La clé pour résoudre de puzzle est de reconnaître qu'il peut être résolu en "
"cassant le problème en un ensemble de problèmes de plus petites tailles et "
"de continuer cette réduction de la taille du problème jusqu'à atteindre une "
"solution."

#. 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 "Je suis perdu, je voudrais plus d'indications"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/HanoiBoard.html:37
msgid "Here is the pseudo-code of the solution:"
msgstr "Voici le pseudo-code de la solution :"

#. 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 ""
"Étiquetons les tours A, B, C (ces étiquettes peuvent changer à différentes "
"étapes)"

#. 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 "Soit n le nombre total de disques (la hauteur de la tour initiale)"

#. 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 ""
"Numérotez les disques de 1 (le plus petit, le plus en haut) à n (le plus "
"large, le plus en bas)"

#. type: Content of: <div>
#: src/lessons/recursion/hanoi/HanoiBoard.html:44
msgid "To move n discs from peg A to peg C:"
msgstr "Pour déplacer n disques du poteau A au poteau 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 ""
"déplacer n-1 disques de A vers B. Cela laisse le disque numéro n seul sur le "
"poteau A"

#. type: Content of: <div><ul><li>
#: src/lessons/recursion/hanoi/HanoiBoard.html:47
msgid "move disc number n from A to C"
msgstr "déplacer le disque numéro n de A vers 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 ""
"déplacer n-1 disques de B vers C afin qu'ils reposent sur le disque numéro n"

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/InterleavedHanoi.html:2
msgid "Interleaved Towers of Hanoi"
msgstr "Les tours de Hanoï interclassées"

#. 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 ""
"Cette variante classique des Tours de Hanoï comporte deux piles de disques "
"sur quatre piquets. Vous devez interclasser les deux piles de la façon "
"représentée sur le monde objectif. Comme précédement, vous ne pouvez pas "
"placer un disque sur un disque plus petit."

#. 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 ""
"Vous aurez probablement besoin de la méthode <code>hanoi()</code> que vous "
"avez écrite dans l'exercice précédent."

#. 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 "Je voudrais voir une étape intermédiaire"

#. 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 "Si votre situation initiale est la suivante :"

#. 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 ""
"alors vous avez la situation suivante juste avant l'appel récursif "
"principal :"

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/SplitHanoi1.html:2
msgid "Split Towers of Hanoi"
msgstr "Les tours de Hanoï séparées"

#. 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 ""
"Étant donnée le résultat de l'exercice précédent (càd une pile "
"interclassée), vous devez construire deux tours séparées. Votre code doit "
"donc inverser les opérations réalisées à l'exercice précédent."

#. 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 ""
"Vous aurez besoin d'une fonction supplémentaire pour déplacer une pile de n "
"paires de disques sans changer les positions relatives des disques de même "
"taille."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:2
msgid "Better Split Towers of Hanoi"
msgstr "De meilleures tours de Hanoï séparées"

#. 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 ""
"Étonnamment, notre solution pour séparer les tours génère beaucoup plus de "
"mouvements que notre solution pour les interclasser. Comme les deux "
"problèmes sont symétriques, cela ne devrait pas être le cas."

#. 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 "Nombre de disques"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:7
#: src/lessons/recursion/hanoi/SplitHanoi3.html:21
msgid "Interleaved"
msgstr "Interclassement"

#. type: Content of: <table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:7
msgid "Split"
msgstr "Séparation"

#. 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 paires"

#. 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 mouvements"

#. 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 mouvements"

#. 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 paires"

#. 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 mouvements"

#. 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 mouvements"

#. 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 paires"

#. 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 mouvements"

#. 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 mouvements"

#. 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 ""
"Pouvez-vous rendre la séparation des tours aussi efficace que "
"l'interclassement ?"

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:15
msgid "I need a starter hint"
msgstr "J'ai besoin d'un indice pour commencer."

#. 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 ""
"La différence vient du fait que notre décomposition du problème n'est pas la "
"bonne. Contents d'avoir trouvé une solution fonctionnelle, nous n'avons pas "
"cherché à l'améliorer. Préserver l'ordre des disques interclassés à chaque "
"déplacement est inutile. En fait, on peut même éviter de déplacer la tour "
"interclassée et simplement séparer les paires de disques en tours colorées "
"au fur et à mesure qu'ils sont retirés de la tour interclassée."

#. type: Attribute 'alt' of: <br><br><div>
#: src/lessons/recursion/hanoi/SplitHanoi2.html:24
msgid "The starter hint was not enough"
msgstr "Le premier indice n'était pas suffisant"

#. 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 ""
"Si quelqu'un pouvait séparer les (n-1) paires de disques auparavent, sauriez-"
"vous séparer la paire 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 "Il va falloir être plus explicite"

#. 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 ""
"Séparez tout d'abord les (n-1) premières paires de disques de la tour "
"interclassée en une tour blanche et une tour noire (grâce à un appel "
"récursif de votre fonction principale)."

#. 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 "Déplacez ensuite le grand disque blanc à la position où il doit finir."

#. 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 ""
"Déplacez ensuite les (n-1) disques blancs plus petits sur le grand disque "
"blanc."

#. 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 "Déplacez ensuite le grand disque noir jusqu'à sa destination."

#. 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 "Déplacez enfin les petits disques noirs en position."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:2
msgid "Fast Split Towers of Hanoi"
msgstr "Les tours de Hanoï séparées rapides"

#. 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 ""
"Une fois encore, notre solution est fonctionnelle, mais elle est loin d'être "
"optimale. Nous utilisons l'algorithme classique de déplacement des tours, "
"celui inventé pour la situation avec trois piquets, alors que nous avons "
"quatre piquets. Bien entendu, on ne peut pas disposer librement de ce "
"quatrième piquet puisqu'il contient l'autre pile, mais nous pouvons toujours "
"placer le plus petit disque au sommet de l'autre pile avant d'en déplacer "
"une."

#. 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 ""
"Pour cela, il faut écrire une nouvelle fonction <code>hanoi_rapide(hauteur, "
"src, libre, plein, dst)</code> qui déplace une pile depuis <code>src</code> "
"vers <code>dst</code> en utilisant <code>libre</code> pour le stockage "
"temporaire, après avoir placé le plus petit disque sur le piquet "
"<code>plein</code>."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:13
msgid "I'm lost"
msgstr "Je suis perdu"

#. 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 ""
"La fonction <code>hanoi_rapide(hauteur, src, libre, plein, dst)</code> n'est "
"pas récursive. Elle place le petit disque, puis appelle la fonction "
"<code>hanoi()</code> classique."

#. 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 ""
"Ce changement améliore considérablement les performances, comme vous pouvez "
"le constater dans le tableau. Bien entendu, cette astuce pourrait être "
"utilisée pour l'algorithme d'interclassement, ce qui boosterait les "
"performances exactement de la même façon. "

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:21
msgid "Slow Split"
msgstr "Séparation lente"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:21
msgid "Fast Split"
msgstr "Séparation rapide"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:22
msgid "46 moves"
msgstr "46 mouvements"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:23
msgid "82 moves"
msgstr "82 mouvements"

#. type: Content of: <br><table><tr><td>
#: src/lessons/recursion/hanoi/SplitHanoi3.html:24
msgid "150 moves"
msgstr "150 mouvements"

#. 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 ""
"En conclusion, nous nous contentons souvent d'une solution fonctionnelle, et "
"nous manquons souvent des occasions d'améliorer la décomposition du "
"problème. <b>Vous</b> ne devriez pas faire cela ;)"

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/LinearHanoi.html:2
msgid "Linear Towers of Hanoi"
msgstr "Les tours de Hanoï linéaires"

#. 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 ""
"Voici une variante classique des tours de Hanoï où certains mouvements sont "
"interdits. Plus précisément, les disques ne peuvent plus passer directement "
"du piquet le plus à gauche au piquet le plus à droite. Le piquet central "
"doit être utilisé dans tous les déplacements."

#. 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 ""
"À part cela, le problème reste inchangé : vous devez déplacer toute la pile "
"de disques d'une extrémité à une autre. Vous ne pouvez déplacer qu'un seul "
"disque à la fois, et il est interdit de placer un grand disque sur un disque "
"plus petit."

#. 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 ""
"Comme dans la version classique, ce problème se résout plus facilement de "
"manière récursive, et vous êtes tout à fait capable de trouver cette "
"solution récursive si vous y réfléchissez suffisamment."

#. type: Attribute 'alt' of: <div>
#: src/lessons/recursion/hanoi/LinearHanoi.html:15
msgid "I tried, but I don't get it"
msgstr "J'ai essayé, mais je n'y arrive pas"

#. 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 ""
"L'algorithme récursif habituel pour le problème classique des tours de Hanoï "
"est de complexité <i>2^n-1</i> tandis que l'algorithme récursif habituel "
"pour cette variante est de complexité <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 "Ce premier indice n'était pas suffisant"

#. 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 ""
"L'algorithme récursif habituel pour le problème classique des tours de Hanoï "
"implique deux appels récursifs enveloppant un mouvement du grand disque. "
"L'algorithme récursif habituel pour les tours linéaires de Hanoï implique "
"trois appels récursifs enveloppant deux mouvement de ce disque."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:2
msgid "Linear Twin Towers of Hanoi"
msgstr "Les tours jumelles de Hanoï linéaire"

#. 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 ""
"Cette variante est un mélange entre d'une part les tours séparées et "
"interclassées, et d'autre part les tours linéaires. Nous avons deux piles de "
"disques, et trois piquets. Il faut inverser la position des piles en "
"respectant les règles de mouvement habituelles des tours de Hanoï (un seul "
"disque à la fois, et pas de grand disque sur les petits disques) ainsi que "
"les restrictions du mouvement linéaire (pas d'échange direct entre les "
"piquets des extrémités)."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/LinearTwinHanoi.html:10
msgid "You will use three recursive functions:"
msgstr "Vous aurez besoin de trois fonctions récursives :"

#. 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>deplaceInterclassee(k, src,dst)</b> : déplace une pile interclassée de k "
"paires de disques, sans changer l'ordre relatif des disques de même taille. "
"Comme dans le problème des tours séparées, une tour interclassée alterne des "
"disques blancs et noirs de chaque taille. Cette fonction n'est pas "
"entièrement nouvelle : vous avez écrit une version avec quatre piquets (mais "
"en n'en utilisant que trois) dans la première version des tours séparées."

#. 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>rassemble(k)</b> : à partir d'une situation séparée, construire sur le "
"piquet n°2 une pile interclassée de k paires de disques. Vous pouvez rendre "
"votre fonction paramétrable afin qu'elle puisse rassembler les disque sur "
"n'importe quel piquet passé en paramètre, mais en pratique, elle ne sera "
"utilisée que pour rassembler les disques sur le dernier piquet."

#. 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>repartis(k)</b> : à partir d'une situation où k paires de disques sont "
"interclassés sur le piquet n°0, séparez là en déplaçant les disques blancs "
"sur le piquet n°1 et les noirs sur le piquet n°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 ""
"Dans <code>rassemble()</code>, l'appel récursif vient avant deux appels à "
"<code>deplaceInterclassee</code> tandis que dans <code>repartis()</code> les "
"appels à <code>deplaceInterclassee</code> arrivent avant l'appel récursif. "
"La fonction principale que vous devez écrire n'est pas récursive, mais "
"rassemble simplement la plupart des disques, déplace les disques restants, "
"puis répartit de nouveau les petits disques. "

#. 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 ""
"La linéarité ajoute certainement un peu de complexité puisqu'il faut "
"décomposer tous les mouvements entre les piquets n°0 et n°2, mais je reste "
"confiant dans votre capacité à résoudre cette épreuve :)"

#. 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 ""
"Remarquez que l'algorithme demandé a été prouvé optimal pour ce problème. Il "
"n'est donc pas utile aujourd'hui de chercher à optimiser plus que demandé."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:2
msgid "Tricolor Hanoi: stack move"
msgstr "Tours de Hanoï tricolores : déplacer"

#. 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 ""
"Dans cette série d'exercices, nous allons mettre au point un algorithme pour "
"le problème des tours de Hanoï tricolores. Il y aura trois piles de couleurs "
"différentes sur trois piquets, et il s'agira d'échanger la position des "
"piles en respectant les règles de mouvement habituelles (un disque à la "
"fois, et pas de gros disques sur des petits disques)."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/TricolorHanoi1.html:9
msgid "As in previous exercises, our solution will use three functions:"
msgstr "Comme précédement, notre solution sera basée sur trois fonctions :"

#. 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>: déplace une pile de disques "
"interclassée, c'est-à-dire une pile de (n*3) disques de couleurs alternées, "
"depuis le piquet <code>src</code> jusqu'au piquet <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>rassemble()</code> : construit une pile interclassée à partir de trois "
"piles séparées."

#. 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>repartis()</code> : démonte une pile interclassée en trois piles "
"normales."

#. 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 ""
"L'objectif de ce premier exercice de la série est d'écrire la fonction "
"<code>move3()</code>. Cet échauffement ne devrait pas vous bloquer très "
"longtemps. Cela ne pose pas de problème si votre fonction change l'ordre des "
"disques du triplet du bas, mais les autres triplets doivent rester dans le "
"même ordre."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/TricolorHanoi2.html:2
msgid "Tricolor Hanoi: the Gathering"
msgstr "Tours de Hanoï tricolores : rassembler"

#. 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 ""
"Il est maintenant temps d'écrire la seconde fonction nécessaire pour les "
"tours de Hanoï tricolores. La fonction <code>gather()</code> construit une "
"pile interclassée à partir de piles séparées (gather veut dire «rassembler» "
"en anglais). Cette fonction prend quatre arguments, le dernier étant le "
"numéro du piquet où il faut construire la pile interclassée. Comme vous "
"pouvez voir dans les exemples, l'ordre des couleurs doit être le même pour "
"tous les triplets de disques."

#. 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 ""
"Cette fonction utilise la fonction <code>move3()</code> que vous venez "
"d'écrire. Faites un copie/colle de votre code pour le réutiliser ici. Si "
"vous avez besoin de plus d'explications, référez vous à l'exercice des tours "
"interclassées. Rassembler 3 piles sur 3 piquets est assez similaire à "
"rassembler 2 piles sur 4 piquets. Vous trouverez cet exercice <a href="
"\"plm://lessons.recursion.hanoi/InterleavedHanoi\">ici</a>."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/TricolorHanoi3.html:2
msgid "Tricolor Hanoi: the Final"
msgstr "Tours de Hanoï tricolores : séparer et terminer"

#. 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 ""
"Nous sommes presque prêts à écrire l'algorithme entier des tours tricolores. "
"Il ne nous manque plus qu'une fonction <code>separe()</code>, très inspirée "
"de la première que nous avions écrite pour le problème des <a href=\"plm://"
"lessons.recursion.hanoi/SplitHanoi1\">Tours de Hanoï séparées</a>. En "
"supposant que votre tour interclassée se trouve sur le piquet <code>mid</"
"code>, il faut répartir les disques sur tous les piquets. Assurez-vous "
"d'utiliser la fonction <code>move3</code> un nombre pair de fois à chaque "
"étage récursif afin que les disques du triplet du bas soient dans le bon "
"ordre."

#. 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 ""
"Comme vous pouvez le voir, la situation initiale n'est pas celle attendue "
"par la méthode <code>separe()</code>. Il faut auparavant utiliser les "
"méthodes <code>gather()</code> puis <code>move3()</code> (deux fois pour que "
"le triplet du bas soit dans le bon ordre). Ces quelques étapes suivies de la "
"fonction <code>separe()</code> suffisent à résoudre intégralement le "
"problème des tours tricolores de Hanoï."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/CyclicHanoi.html:2
msgid "Cyclic Towers of Hanoi"
msgstr "Les tours de Hanoï cycliques"

#. 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 ""
"Cette variante des tours de Hanoï est très similaire au problème de base : "
"vous avez une pile de disques, trois piquets et il est interdit de placer un "
"gros disque sur un disque plus petit. La nouveauté est que vous ne pouvez "
"bouger les disques que dans un seul sens : 0->1 ou 1->2 ou 2->0, mais jamais "
"dans l'autre sens."

#. 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 ""
"Manifestement, les mouvements ne sont plus symétriques. Déplacer un disque "
"de A vers B est maintenant très différent de le déplacer de B vers A. Du "
"coup, vous aurez besoin de deux fonctions récursives permettant "
"respectivement de déplacer la pile dans le sens indiqué (<code>clockwise</"
"code>), ou dans l'autre sens."

#. 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 ""
"Ceci étant, la décomposition récursive du problème est très similaire à "
"celle du problème classique. Simplement, chacune des deux fonctions appelle "
"l'autre, constituant un bel exemple de récursivité mutuelle."

#. type: Content of: <h2>
#: src/lessons/recursion/hanoi/IterativeHanoi.html:2
msgid "Iterative Towers of Hanoi"
msgstr "Les tours de Hanoï itératives"

#. 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 ""
"Dans ce dernier exercice de la série, nous allons implémenter une solution "
"itérative au problème de base des tours de Hanoï (une pile, trois piques, "
"pas de restriction de mouvement particulière)."

#. 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 ""
"Cet algorithme est très simple, en fait : Lors des déplacements pairs, le "
"plus petit disque se déplace dans une direction donnée (soit dans le sens "
"ascendant 0-&gt;1-&gt;2-&gt;0 soit dans le sens descendant 2-&gt;1-&gt;0-"
"&gt;2). Lors des déplacements impaires, on fait le seul mouvement possible "
"n'impliquant pas le petit disque. On s'arrête dès que la pile est "
"reconstruite quelque part."

#. 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 ""
"La fonction que vous devez écrire pour cela prend deux paramètres : la "
"position initiale du petit disque (càd le numéro du piquet contenant "
"initialement la pile) et un booléen indiquant si le petit disque doit se "
"déplacer dans le sens ascendant ou non."

#. 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 ""
"La simplicité de cet algorithme est presque décevante ! On peut s'interroger "
"sur l'intérêt des solutions récursives que nous avons construit jusqu'ici "
"alors qu'il existe un algorithme itératif aussi simple. Mon avis personnel "
"est que cette solution est facile à exécuter une fois qu'on l'a, mais "
"pratiquement impossible à découvrir par soit-même (je soupçonne même les "
"auteurs de l'avoir découverte en observant les effets de la solution "
"itérative)..."

#. 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 ""
"Il est également malaisé de prédire le résultat de cet algorithme : quand le "
"petit disque se déplace dans l'ordre ascendant, la pile est reconstruite à "
"droite pour cinq disques, mais à gauche pour six disques."

#. 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 ""
"Une question intéressante est de savoir s'il existe des algorithmes "
"itératifs aussi simples pour les différentes variantes du problème. Certains "
"ont été proposés dans la littérature (en particulier pour la variante "
"cyclique). J'intégrerais vos solutions avec plaisir dans la PLM, surtout si "
"vous trouvez des indications permettant de guider la réflexion sans donner "
"la solution."

#. type: Content of: <h1>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:2
msgid "HanoiWorld"
msgstr "Le monde des tours de Hanoï"

#. 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 ""
"Ce monde implémente le problème ultra classique de Hanoï. Il vous est "
"demandé de déplacer une pile de disques du piquet où ils se trouvent vers un "
"piquet cible (passé comme second paramètre dans le nom du monde -- numéro 1 "
"pour le monde par défaut). Il y a quelques contraintes supplémentaires: il "
"est interdit de déplacer plus d'un disque à la fois, ainsi que de placer un "
"disque plus grand sur un disque plus petit."

#. type: Content of: <p>
#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:12
msgid "Only 4 functions are provided:"
msgstr "Seules quatre fonctions sont fournies&nbsp;:"

#. 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 [/!]deplace([!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 ""
"Elle déplace un disque d'un piquet <code>src</code> vers le piquet "
"<code>dst</code>. Si vous demandez un déplacement invalide (comme le "
"placement d'un disque sur un disque plus petit), une exception "
"IllegalArgumentException est levée."

#. 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 [/!]getTaillePiquet([!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 ""
"Retourne le nombre de disques placés sur un piquet donné. Cette fonction est "
"surtout utile pour initialiser la récursion et déterminer le nombre d'appels "
"récursifs à réaliser."

#. 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 [/!]getRayonPiquet([!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 "Retourne le rayon du disque placé en haut du piquet spécifié."

#. type: Content of: <h3>
#: src/lessons/maze/Main.html:2 src/lessons/maze/short_desc.html:2
msgid "Labyrinths"
msgstr "Labyrinthes"

#. 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 ""
"Cette leçon propose divers exercices à propos des labyrinthes dans le monde "
"des buggles."

#. type: Content of: <h2>
#: src/lessons/maze/randommouse/RandomMouseMaze.html:2
msgid "The crazy mouse"
msgstr "La souris folle"

#. 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 ""
"La journée de votre buggle commence mal. Elle n'a pas eu de chance. Elle est "
"tombée dans un piège.  Aidez-la à sortir de ce labyrinthe."

#. 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 ""
"La sortie est représentée par un baggle et vous devez le ramasser afin de "
"vous échapper du labyrinthe."

#. 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 ""
"Nous allons profiter du fait que le labyrinthe ne soit pas trop grand pour "
"écrire l'algorithme le plus bête possible.  Cet algorithme repose sur le "
"hasard et est très inefficace."

#. 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 ""
"Tant que notre buggle n'a pas trouvé la sortie, elle doit progresser de la "
"façon suivante&nbsp;: choisir un entier entre 0 et 2 au hasard à l'aide de "
"la méthode <code>random3()</code> fournie et prendre l'une des décisions "
"suivantes selon l'entier choisi&nbsp;: avancer si elle le peut, tourner à "
"droite ou bien tourner à gauche."

#. 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 ""
"Vous ne croyez pas qu'une méthode aussi stupide puisse fonctionner ? Et "
"bien, essayez, vous verrez bien.\n"
"N'oubliez pas de ramasser le biscuit quand vous l'avez trouvé."

#. type: Content of: <h2>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:2
msgid "Following the walls"
msgstr "Longer les murs"

#. 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 ""
"Cette fois-ci le labyrinthe est beaucoup plus compliqué. Le hasard ne sera "
"pas suffisant, il va falloir être intelligent !"

#. 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 ""
"Heureusement, ce labyrinthe est plus simple qu'il n'y paraît: tous les murs "
"sont connectés les uns aux autres. Pour sortir de ce genre de labyrinthe, il "
"suffit à votre buggle de longer un mur (celui à sa droite, ou celui à sa "
"gauche: c'est sans importance). Tout en gardant sa patte posée sur ce mur, "
"votre buggle doit avancer jusqu'à ce qu'elle trouve la sortie du labyrinthe "
"et ce biscuit qu'il apprécie tant."

#. 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 ""
"Cet algorithme fonctionne ici car il n'y a pas d'île de murs isolés, ce qui "
"fait que la buggle ne peut pas boucler autour des murs sans rencontrer le "
"biscuit qu'elle cherche."

#. 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 ""
"L'objectif de cet exercice est d'écrire un algorithme permettant à votre "
"buggle de sortir du labyrinthe."

#. 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 ""
"Comme dit précédemment, le mur choisi n'a pas d'importance. Simplement, la "
"démo suit le mur gauche, et il serait donc avisé d'en faire de même pour "
"simplifier la comparaison de votre solution et de la démo."

#. 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 ""
"Écrivez une méthode <code>keepHandOnSideWall()</code> qui fait avancer votre "
"buggle d'une case tout en gardant la patte sur le mur du côté choisi. Vous "
"devez vous assurer que votre buggle garde toujours la patte sur le mur et "
"également qu'elle ne risque pas de percuter un mur. Vous pouvez regarder "
"l'indice (hint) si vous êtes coincé, mais vous devriez d'abord essayer de le "
"faire par vous-même."

#. 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 ""
"Enfin, écrivez l'algorithme complet qui parcourt le labyrinthe pas à pas "
"jusqu'à trouver le biscuit et la sortie. N'oubliez pas de prendre le baggle."

#. type: Attribute 'alt' of: <div>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:38
msgid "I'm lost, please give me some extra indications"
msgstr "Je suis perdu, je voudrais plus d'indications"

#. 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 ""
"Quand votre buggle a un mur à sa gauche, il faut considérer trois situations "
"possibles, qui dépendent des murs alentours. Le tableau suivant représente "
"graphiquement chaque situation initiale, et où vous devez placer votre "
"buggle à la fin de l'étape."

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:46
msgid "Case 1"
msgstr "Cas 1"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:47
msgid "Case 2"
msgstr "Cas 2"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:48
msgid "Case 3"
msgstr "Cas 3"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:50
msgid "Initial situation"
msgstr "Situation initiale"

#. type: Content of: <div><table><tr><td>
#: src/lessons/maze/wallfollower/WallFollowerMaze.html:55
msgid "Where is the next step"
msgstr "Étape suivante"

#. 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 ""
"Si vous faites un <code>right()</code> dans tous les cas à la fin de votre "
"fonction, il est possible de l'écrire en trois lignes avec une boucle "
"<code>while</code>."

#. type: Content of: <h2>
#: src/lessons/maze/pledge/PledgeMaze.html:2
msgid "Pledge algorithm"
msgstr "Algorithme 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 ""
"Une fois de plus, vous pensiez que votre algorithme vous permettait de vous "
"échapper des labyrinthes, et une fois de plus, votre buggle est prise dans "
"un labyrinthe mettant votre algorithme en défaut. Essayez de copier votre "
"code et de l'exécuter pour voir : votre création précédente échoue "
"lamentablement. Le piège a la forme d'un «G» majuscule : la buggle entre "
"dans le piège, suit le bord interne. Au bout d'un moment, la direction nord "
"est libre et votre buggle se met donc à courir dans cette direction. Pour "
"retomber dans le piège..."

#. 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 ""
"L'algorithme de Pledge (nommé d'après Jon Pledge d'Exeter) peut sortir de ce "
"labyrinthe."

#. 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 ""
"Cet algorithme est une version modifiée de l'algorithme précédent conçu pour "
"éviter les obstacles. Il nécessite de choisir de manière arbitraire une "
"direction vers laquelle la buggle se dirigera. Quand un obstacle est "
"rencontré, une patte (disons la patte de gauche) est gardée le long des "
"obstacles tandis que les virages sont comptabilisés. Quand la buggle est "
"face à nouveau à la direction originale, et que la somme des virages est "
"égale à 0, la buggle quitte l'obstacle et continue de se déplacer dans sa "
"direction d'origine."

# type: Content of: <p><p>
#. 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 ""
"Notez que l'utilisation de la \"somme des virages\" à la place de la "
"\"direction courante\" permet à l'algorithme d'éviter les pièges tel que les "
"formes en \"G\" majuscule. Si l'on rentre par la gauche dans le piège, on "
"tourne de 360 degrés autour des murs. Un algorithme qui se contenterait "
"naïvement de se retrouver dans la même direction qu'à l'origine rentre dans "
"un cycle infini puisque qu'il quitte le mur le plus à droite en étant dirigé "
"vers la gauche, et entre à nouveau dans la section incurvée."

# type: Content of: <p><p>
#. 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 ""
"L'algorithme de Pledge ne quitte pas le mur en bas à droite puisque la somme "
"des virages ne vaut pas zéro à ce moment. Il continue de suivre le mur "
"jusqu'à avoir complètement fait le tour, et le quitte en regardant à gauche "
"une fois parvenu sous l'obstacle."

#. 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=\"Objectifs\"/> L'objectif de cet exercice est d'écrire une "
"implémentation de l'algorithme de Pledge qui permettra à votre buggle de "
"sortir du labyrinthe."

#. 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 ""
"Reprenez la méthode <code>keepHandOnSideWall()</code> de l'exercice "
"précédent. Modifiez cette méthode pour compter les virages pris par votre "
"buggle (+1 lorsqu'il a tourné à gauche par rapport à son origine, -1 "
"lorsqu'il a tourné à droite). Pour comptabiliser vous aurez besoin d'ajouter "
"une variable <code>sommeAngle</code> de type entière à votre programme."

#. 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 ""
"Écrivez une méthode booléenne <code>isDirectionFree(dir)</code> indiquant si "
"la direction fournie en paramètre est libre, c'est-à-dire si vous pouvez "
"vous déplacer dans cette direction. Notez que la démo utilise la direction "
"NORD pour cela. Vous pouvez retrouver la direction courante de la buggle en "
"utilisant la méthode <code>Direction getDirection()</code>.  Vous pouvez "
"diriger (sans se déplacer) votre buggle dans une direction en utilisant la "
"méthode <code>setDirection(dir)</code>.  Pensez à mémoriser (dans une "
"variable dédiée) la direction courante de votre buggle avant de vérifier si "
"votre buggle peut se diriger vers sa direction de prédilection pour pouvoir "
"restaurer l'état après coup."

#. 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 ""
"Vous pouvez être amenés à modifier également le reste de votre code, mais "
"ces changements devraient rester limités."

#. 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'oubliez pas que si l'une de vos méthodes modifie une variable globale "
"(telle que sommeAngles), vous devez vous assurer qu'elle définie cette "
"globale correctement. Sinon, la méthode crée une nouvelle variable locale de "
"même nom, et la globale n'est jamais modifiée."

#. 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 sommeAngle\n"
"  ...\n"
"  sommeAngle = sommeAngle + 1\n"

#. type: Attribute 'alt' of: <div>
#: src/lessons/maze/pledge/PledgeMaze.html:70
msgid "Show an additional tip"
msgstr "Montrer un indice supplémentaire"

#. 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 ""
"Vous devez changer votre cap vers votre direction favorite (probablement le "
"nord -- Direction.NORD). Il vous faut ensuite écrire la boucle principale de "
"votre algorithme. Tant que votre buggle n'a pas trouvé son biscuit, il faut "
"avancer jusqu'à un obstacle dans la direction de prédilection. Quand un "
"obstacle est rencontré, il faut garder la patte sur un mur (en utilisant "
"<code>keepHandOnSideWall()</code>) tant que la somme des virages n'est pas "
"nulle et que la direction de prédilection n'est pas libre. Faites cela "
"jusqu'à trouver votre biscuit."

#. type: Content of: <h2>
#: src/lessons/maze/island/IslandMaze.html:2
msgid "Lost between islands"
msgstr "Perdu dans les îles"

#. 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 ""
"Vous pensiez que votre algorithme était suffisant pour échapper de tous les "
"labyrinthes ? Et bien, pas tous les labyrinthes..."

#. 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 ""
"L'algorithme de suivi de mur que nous avons utilisé jusqu'à présent "
"fonctionne seulement si l'entrée et la sortie sont placées à côté de murs "
"connectés à un mur externe. Mais si la buggle commence au milieu du "
"labyrinthe, il peut exister des pans de mur déconnectés du mur externe."

#. 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 ""
"Dans cette situation, notre précédente stratégie ferait notre buggle tourner "
"en rond pour toujours sur l'un de ces îlots. En effet, le labyrinthe dont "
"vous devez vous échapper maintenant contient des îles, et la buggle ne "
"commence pas sur un des murs externes. Vous pouvez essayer si vous voulez : "
"Copie/collez votre code et appuyez sur le bouton 'Exécuter' pour admirez "
"votre solution précédente échouer lamentablement."

#. 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 ""
"Cette méthode de suivre un mur est toujours efficace est permet d'échapper "
"de manière assez efficace à certaines parties du labyrinthe, on ne va donc "
"pas la supprimer entièrement. À la place, nous allons cesser de suivre le "
"mur sous certaines conditions. Notez que le baggle repose près d'un mur "
"externe du labyrinthe. Donc nous voulons atteindre un mur externe et ensuite "
"le suivre. Nous avons par exemple de rechercher le mur nord avant de le "
"suivre jusqu'au 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 ""
"Pour trouver le mur nord, vous avez tout simplement à foncez vers le nord "
"tant que c'est possible, et quand vous faites face à un obstacle, vous "
"l'évitez (en utilisant la méthode précédente)."

#. 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 "Je suis perdu, je voudrais plus d'indications"

#. 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 ""
"Notre nouvelle méthode run() va consister en deux états: notre buggle va "
"alterner entre le mode «coureur au nord» et le mode «suiveur à gauche». Vous "
"commencez dans le mode «coureur au nord», et vous passerez au mode «suiveur "
"à gauche» quand il y aura un mur au nord (n'oubliez pas de vous assurez "
"d'avoir un mur à votre gauche avant de changer de passer au mode «suiveur à "
"gauche»). Vous repasserez au mode «coureur au nord» dès que votre buggle "
"fera face au nord et qu'elle n'est pas face à un mur. La manière la plus "
"simple d'écrire une telle machine à état est quelque chose de ce type:"

#. 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 etat=0;\n"
"etat match  {\n"
"  case 0 => // courir au nord\n"
"     ...\n"
"     etat = 1;\n"
"  case 1 => // suivre à gauche\n"
"     ...\n"
"     etat = 0;\n"
"  case _ => println(\"Ce cas ne devrait pas arriver. Corrigez ce problème svp.\")\n"
"}[/!][!java|c]int etat=0;\n"
"switch (etat) {\n"
"  case 0: // courir au nord\n"
"     ...\n"
"     etat = 1;\n"
"     break;\n"
"  case 1: // suivre à gauche\n"
"     ...\n"
"     etat = 0;\n"
"     break;\n"
"}[/!][!python]coureurNord = True\n"
"if coureurNord:\n"
"     ...\n"
"     coureurNord = False\n"
"else: # suiveur à gauche\n"
"     ...\n"
"     coureurNord = 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'oubliez pas le cas par défaut (qui accepte _), ou scala vous donnera un "
"message d'erreur en échange de votre filtrage incomplet."

#. 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'oubliez pas de faire ramasser le baggle par votre buggle à la fin de votre "
"code."

#. 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 ""
"Vous êtes prêts. Tout ceci devrait suffire pour vous permettre de trouver "
"comment sortir de ce labyrinthe, mais si ce n'est pas le cas, vous pouvez "
"toujours demander l'astuce. Mais vous n'avez plus besoin d'aide, n'est-ce "
"pas ?"

#. type: Content of: <h2>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:2
msgid "Basic Shortest Path algorithm"
msgstr "Algorithme basique de recherche du plus court chemin"

#. 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 ""
"Pour conclure avec cette leçon d'introduction aux algorithmes de sortie de "
"labyrinthe, nous allons étudier un autre moyen de trouver la sortie. La "
"buggle de cette leçon est spéciale : c'est une jedi. Elle peut ressentir la "
"Force. Cela signifie qu'elle peut ressentir son environnement."

#. 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 ""
"Sans même changer de place, elle peut retrouver des informations sur le "
"monde qui l'entoure, avec les instructions suivantes&nbsp;:"

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:10
msgid "<code>getWorldWidth()</code> gives the width of its world."
msgstr "<code>getMondeLargeur()</code> pour connaître la largeur du monde"

#. type: Content of: <ul><li>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:11
msgid "<code>getWorldHeight()</code> gives the height of its world."
msgstr "<code>getMondeHauteur()</code> pour connaître la hauteur du monde."

#. 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>aMurNord(x,y)</code> indique si la cellule (x,y) de ce monde est "
"fermée par un mur en haut."

#. 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>aMurOuest(x,y)</code> indique si la cellule (x,y) de ce monde est "
"fermée par un mur à gauche."

#. 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>aBiscuit(x,y)</code> indique si un baggle se trouve dans la cellule (x,"
"y) de ce monde."

#. 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> ajoute une indication entière <code>i</"
"code> sur le sol de la cellule (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)</code> retourne l'indication entière qui se trouve "
"dans la cellule (x,y) (ou bien la valeur 9999 s'il n'y a pas d'indication à "
"l'endroit indiqué)."

#. 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 ""
"Il est bon de noter qu'il n'est pas possible de construire un mur sur le "
"côté inférieur ou le coté droit d'une case. Néanmoins, quand de tels murs "
"existent, cela signifie qu'il a été construit sur une case voisine -- comme "
"mur supérieur (respectivement gauche) sur la case qui est située en dessous "
"(respectivement sur à droite) de la case courante."

#. 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 ""
"Votre buggle devrait tout d'abord écrire sur chaque case importante la "
"distance qui la sépare de la sortie."

#. 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 ""
"Pour cela, trouvez la sortie et écrivez 0 dessus. Ensuite, écrivez 1 sur "
"toutes les cases adjacentes à la sortie qui n'en sont pas séparées par un "
"mur. Ensuite, écrivez 2 sur toutes les cases à partir desquelles on peut "
"atteindre une case marquée 1, puis faites de même pour toutes les cases "
"jusqu'à avoir numéroté toutes les cases du monde."

#. 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 ""
"Une fois que toutes les cases sont marquées, faites en sorte que votre "
"buggle jedi trouve le plus court chemin en suivant les indications écrites "
"au sol. Pour cela, il lui suffit à chaque pas d'aller sur la case de plus "
"petite distance parmi celles accessibles. Vous pouvez utiliser la méthode "
"<code>void setDirection(Direction d)</code> pour faire regarder votre buggle "
"dans une direction spécifique comme <code>[!scala|java|python]Direction."
"[/!]NORD</code>, <code>[!scala|java|python]Direction.[/!]SUD</code>, <code>[!"
"scala|java|python]Direction.[/!]EST</code> ou <code>[!scala|java|"
"python]Direction.[/!]OUEST</code>, qui correspondent respectivement au nord, "
"sud, est et ouest."

#. type: Attribute 'alt' of: <div>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:36
msgid "I'm lost now. Please give me some extra indications."
msgstr "Je suis perdu, je voudrais plus d'indications"

#. type: Content of: <div>
#: src/lessons/maze/shortestpath/ShortestPathMaze.html:37
msgid "Use the Force, Luke!"
msgstr "Utilises la Force Luke !"

#. type: Content of: <h2>
#: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:2
msgid "Finding the walls to follow"
msgstr "Trouver les murs à longer"

#. 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 ""
"C'est exactement le même labyrinthe que précédemment, mais la buggle ne "
"commence plus au même emplacement. En particulier, elle n'a plus de mur à sa "
"gauche dès le départ."

#. 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 ""
"Ceci fait que la méthode écrite à l'exercice précédent ne fonctionne plus. "
"Si vous l'utilisez ici sans modification, votre buggle va probablement "
"commencer à tourner sur les quatre cases à côté de sa position de départ (si "
"ça n'est pas le cas, et bien, vous n'avez pas réellement suivi la mission de "
"l'exercice précédent. Sentez vous chanceux et passez à l'exercice suivant "
"une fois que vous aurez lu ce texte)."

#. 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 ""
"C'est parce que votre méthode <code>keepHandOnSideWall()</code> a une <b>pré-"
"condition</b> implicite : la méthode marche bien si et seulement si la "
"buggle a un mur sur sa gauche quand vous appelez cette méthode. De telles "
"pré-conditions sont très utilisées en programmation. Les spécifier "
"explicitement aide à comprendre le code écrit par d'autres personnes, et "
"peuvent même parfois prouver que le code marche correctement."

#. 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 ""
"Réparer le problème devrait être très facile. Assurez-vous simplement que la "
"pré-condition de <code>keepHandOnSideWall()</code> est vérifiée avant de "
"l'appeler. Pour ce faire, mettez à jour votre code pour tout d'abord "
"rechercher à avoir un mur à sa gauche avant de rentrer dans la grande boucle "
"<code>while</code>."

#. 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 ""
"Cet univers introduit un petit puzzle de programmation qui peut être utilisé "
"pour introduire la programmation aux enfants ne sachant pas lire. En effet, "
"il est programmé de manière graphique. L'objectif de chaque niveau est "
"d'allumer toutes les lumières du plateau en utilisant le petit robot. Celui-"
"ci comprend les ordres suivants :"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:8
msgid "<b>Order</b>"
msgstr "<b>Ordre</b>"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:8
msgid "<b>Meaning</b>"
msgstr "<b>Signification</b>"

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:9
msgid "<b>Move forward</b>"
msgstr "<b>Avancer</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 ""
"Ne peut être utilisé que si la case d'arrivée est à la même altitude que la "
"case de départ."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:10
msgid "<b>Jump forward</b>"
msgstr "<b>Sauter en avant</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 ""
"Ne peut être utilisé que si la case d'arrivée est un étage plus haute que la "
"case de départ, ou si l'arrivée est plus basse que le départ. Il est "
"impossible de sauter sur un terrain plat."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:11
msgid "<b>Turn left</b>."
msgstr "<b>Tourner à gauche</b>."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:12
msgid "<b>Turn right</b>."
msgstr "<b>Tourner à droite</b>."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:13
msgid "<b>Switch the light</b>."
msgstr "<b>Allumer ou éteindre</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 ""
"Allumer l'ampoule si elle était éteinte, et éteindre si elle était allumée. "
"Sans effet s'il n'y a pas d'ampoule dans la case courante."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:14
msgid "<b>Call function 1</b>."
msgstr "<b>Appeler la fonction 1</b>."

#. type: Content of: <table><tr><td>
#: src/lessons/lightbot/universe/LightBotWorld.html:15
msgid "<b>Call function 2</b>."
msgstr "<b>Appeler la fonction 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 ""
"Veuillez noter que ce jeu n'est pas vraiment adapté aux jeunes enfants "
"puisque la principale difficulté vient de la limitation du nombre "
"d'instructions utilisable dans chaque programme. Les niveaux avancés ne "
"peuvent être résolus sans écrire des fonctions pour factoriser le code, ce "
"qui est souvent au delà des capacités des jeunes enfants."

#. 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 ""
"Ce jeu est très largement inspiré d'un jeu en flash du même nom, que l'on "
"peut par exemple trouver sur kongregate.com. Il a été écrit par Danny "
"Yaroslavski (Coolio-Niato), d'après une idée originale 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 ""
"Cette leçon introduit un petit jeu de programmation inspiré d'un jeu en "
"flash."

#. type: Content of: <p>
#: src/lessons/lightbot/Main.html:5
msgid "See the <i>About this world</i> dialog for more details."
msgstr ""
"Référez vous à l'aide <i>À propos de ce monde</i> pour plus de détails."

#. 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 ""
"Cette leçon constitue un casse-tête pour programmeurs, où vous devez "
"apprendre à votre robot à éteindre toutes les lumières. Le truc est que vous "
"le programmez graphiquement, et que vous n'avez droit qu'à un nombre limité "
"d'instructions."

#. type: Content of: <p>
#: src/lessons/lightbot/short_desc.html:9
msgid "No previous experience is expected to take this lesson."
msgstr "Aucune expérience préalable n'est nécessaire pour tenter cette leçon."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board01TwoSteps.html:2
msgid "Welcome"
msgstr "Bienvenue"

#. 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 ""
"Bienvenue dans le monde de LightBot. Il s'agit plus d'une sorte de puzzle "
"pour programmeur que d'une vraie leçon (bien qu'il puisse être utilisé pour "
"enseigner la programmation). Le robot n'est pas programmé en Java, mais "
"graphiquement. Vous trouverez les ordres disponibles dans la documentation "
"en utilisant le menu <b>À propos de ce monde</b>."

#. 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 ""
"L'objectif de chaque niveau est simplement de faire allumer toutes les "
"ampoules du tableau à votre petit robot."

#. 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 ""
"Ce premier exercice est une simple mise en bouche. Vous devriez pouvoir le "
"résoudre simplement en avançant et en allumant la lampe, grâce aux ordres "
"suivants :"

#. 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 "et"

#. 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 "Se retourner"

# type: Content of: <p>
#. type: Content of: <p>
#: src/lessons/lightbot/Board02Turn.html:4
msgid "Now, you probably need to turn in addition (using"
msgstr "Maintenant, vous avez probablement besoin de tourner (en utilisant"

# type: Content of: <p>
#. type: Content of: <p>
#: src/lessons/lightbot/Board02Turn.html:5
msgid ")."
msgstr ")."

# type: Content of: <h1>
#. type: Content of: <h1>
#: src/lessons/lightbot/Board03Jump.html:2
msgid "Jump"
msgstr "Sauter"

# type: Content of: <p>
#. type: Content of: <p>
#: src/lessons/lightbot/Board03Jump.html:4
msgid "You can also jump using"
msgstr "Vous pouvez également sauter en utilisant"

# type: Content of: <p>
#. 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 ""
"pour passer les obstacles. Vous pouvez soit sauter un étage vers le haut, ou "
"vers le bas (même de plusieurs étages), mais vous ne pouvez pas sauter pour "
"vous déplacer à plat."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board04Stairs.html:2
msgid "Stairs"
msgstr "Escaliers"

#. type: Content of: <p>
#: src/lessons/lightbot/Board04Stairs.html:4
msgid "Can you pass these stairs?"
msgstr "Parviendrez vous à passer ces escaliers ?"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board05Higher.html:2
msgid "Higher"
msgstr "Toujours plus haut"

#. type: Content of: <p>
#: src/lessons/lightbot/Board05Higher.html:4
msgid "Let's go higher"
msgstr "Il est temps de nous élever de plus en plus haut."

#. type: Content of: <p>
#: src/lessons/lightbot/Board06Func.html:4
msgid "You can use"
msgstr "Vous pouvez utiliser"

#. 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 ""
"Pour appeler respectivement la première et la seconde fonction. Définissez "
"leur code dans leur boîte respective."

#. 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 ""
"Cela peut s'avérer pratique si vous n'avez plus assez d'espace dans votre "
"fonction principale."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board07Repeat.html:2
msgid "Repetitive tasks"
msgstr "Des tâches répétitives"

#. type: Content of: <p>
#: src/lessons/lightbot/Board07Repeat.html:4
msgid "Functions are also of great use for repetitive tasks"
msgstr "Les fonctions sont également très pratique pour les tâches répétitives"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board08Rec.html:2
msgid "Calling functions from functions"
msgstr "Invoquer des fonctions depuis les fonctions"

#. type: Content of: <p>
#: src/lessons/lightbot/Board08Rec.html:4
msgid "It is perfectly okay to call a function from within a function!"
msgstr ""
"Rien ne vous interdit d'invoquer une fonction depuis une autre fonction !"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board09Castle.html:2
msgid "Castle"
msgstr "Château"

#. type: Content of: <p>
#: src/lessons/lightbot/Board09Castle.html:4
msgid "You're getting good at this..."
msgstr "Vous vous en sortez de mieux en mieux..."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board10Wall.html:2
msgid "Wall"
msgstr "Mur"

#. type: Content of: <p>
#: src/lessons/lightbot/Board10Wall.html:4
msgid "Ready to climb the wall?"
msgstr "Êtes-vous prêt à escalader ce mur ?"

#. type: Content of: <h1>
#: src/lessons/lightbot/Board11Sea.html:2
msgid "Sea"
msgstr "Mer"

#. type: Content of: <p>
#: src/lessons/lightbot/Board11Sea.html:4
msgid "You now have to surf these waves of lamps."
msgstr "Vous devez maintenant surfer sur cette mer de lampes."

#. type: Content of: <h1>
#: src/lessons/lightbot/Board12Escher.html:2
msgid "Escher Castle"
msgstr "Le château d'Escher"

#. type: Content of: <p>
#: src/lessons/lightbot/Board12Escher.html:4
msgid "This one aint easy."
msgstr "Celui-ci est loin d'être facile."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Close10.html:2
msgid "Close to 10"
msgstr "Proche 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 ""
"Étant donné deux nombres entiers, retourner la valeur la plus proche de 10, "
"ou 0 en cas de match nul.\n"
"[!java|scala]Remarquez que Math.abs(n) retourne la valeur absolue d'un "
"nombre.[/!] \n"
"[!python]Remarquez que math.fabs(n) retourne la valeur absolue d'un nombre. "
"Remarquez également que vous ne pouvez utiliser cette fonction que si vous "
"avez importé le module math.[/!]"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/CountTeen.html:2
msgid "Count Teen"
msgstr "Compter les ados"

#. 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 ""
"On dira qu'un nombre est \"ado\" s'il appartient est entre 13 et 19 "
"(inclus). Étant donné quatre nombres entiers, retournez combien d'entre eux "
"sont ados."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Diff21.html:2
msgid "Diff 21"
msgstr "Diff 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 ""
"Étant donné un entier n, retournez la différence absolue entre n et 21, sauf "
"si n est plus grand que 21. Dans ce cas, doublez la différence absolue."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/HasTeen.html:2
msgid "Has Teen"
msgstr "A des ados"

#. 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 ""
"On dira qu'un nombre est \"ado\" s'il appartient à l'intervalle [13;19]. "
"Étant donné trois nombres entiers, retournez vrai seulement si un ou "
"plusieurs d'entre eux sont ados."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/IcyHot.html:2
msgid "Icy Hot"
msgstr "Feu glacé"

#. 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 ""
"Étant donné deux températures, retournez vrai si l'une est inférieure à zéro "
"et l'autre supérieure à 100."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/In1020.html:2
msgid "In [10;20]"
msgstr "Dans [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 ""
"Étant donné deux nombres entiers, retournez vrai si l'un d'entre eux est "
"dans l'intervalle [10;20]."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/In3050.html:2
msgid "In [30;50]"
msgstr "Dans [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 ""
"Étant donné deux nombres entiers, retournez vrai s'ils sont tous les deux "
"dans l'intervalle [30;40], ou s'ils sont tous les deux dans l'intervalle "
"[40;50]."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/LastDigit.html:2
msgid "LastDigit"
msgstr "Dernier chiffre"

#. 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 ""
"Étant donné deux nombres entiers positifs, retournez vrai s'ils ont le même "
"dernier chiffre, comme 27 et 57. Remarquez que l'opérateur % (modulo) "
"calcule le reste de la division entière (donc 17 % 10 vaut 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 ""
"Cet exercice a été extrait pour PLM depuis l'excellent site d'exercices "
"http://javabat.com/"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/LoneTeen.html:2
msgid "Lone Teen"
msgstr "Ado solitaire"

#. 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 ""
"On dira qu'un nombre est \"ado\" s'il appartient à l'intervalle [13;19]. "
"Étant donné deux nombres entiers, retournez vrai si l'un d'entre eux est "
"ado, mais pas les deux."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Main.html:2
msgid "Boolean fun"
msgstr "Jeux booléens"

#. 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 ""
"Les opérations booléennes sont l'une des fondements de la programmation. "
"Tant que vous ne pourrez pas écrire des tests booléens (même non triviaux) "
"en moins d'une minute, il vous sera difficile d'écrire un vrai programme."

#. 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 ""
"C'est pourquoi cette leçon vous propose une certaine quantité de tels "
"exercices pour vous permettre de vous entraîner."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/Makes10.html:2
msgid "Makes 10"
msgstr "Font 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 ""
"Étant donné deux nombres entiers, retournez vrai si l'un d'entre eux vaut "
"10, ou si leur somme vaut 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 ""
"Étant donné deux nombres entiers, retournez la plus grande valeur dans "
"l'intervalle 10..20 inclus, ou retournez 0 si aucun des nombres n'est dans "
"cet intervalle."

#. 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 ""
"Notez que Math.max(Int,Int):Int et Math.min(Int,Int):Int retournent "
"respectivement le maximum et le minimum de deux entiers."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/MonkeyTrouble.html:2
msgid "MonkeyTrouble"
msgstr "Problème de singe"

#. 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 ""
"Nous avons deux singes, a et b, et les paramètres aSmile et bSmile indiquent "
"s'ils sourient. Nous avons un problème s'ils sourient tous les deux en même "
"temps, ou si aucun des deux ne sourit. Retournez vrai si nous avons un "
"problème."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/NearHundred.html:2
msgid "Near Hundred"
msgstr "Presque 100"

#. 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 ""
"Étant donné deux nombres entiers, retourner vrai si et seulement si la "
"valeur est à moins de 10 de la valeur 100 ou de la valeur 200.\n"
"[!java|scala]Remarquez que Math.abs(n) retourne la valeur absolue d'un "
"nombre.[/!] \n"
"[!python]Remarquez que math.fabs(n) retourne la valeur absolue d'un nombre. "
"Remarquez également que vous ne pouvez utiliser cette fonction que si vous "
"avez importé le module math.[/!]"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/ParotTrouble.html:2
msgid "Parot Trouble"
msgstr "Problème de perroquet"

#. 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 ""
"Nous avons un perroquet très bruyant. Le paramètre \"hour\" indique l'heure "
"courante (dans l'intervalle [0;23]). Nous avons un problème si le perroquet "
"parle avant 7h ou après 20h. Retournez vrai si nous avons un problème."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/PosNeg.html:2
msgid "Positive Negative"
msgstr "Positif Négatif"

#. 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 ""
"Étant donné deux entiers, retournez vrai si l'un d'entre eux est positif et "
"l'autre négatif. Sauf si le paramètre négative est vrai, auquel cas il faut "
"que les deux nombres soient négatifs."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/SleepIn.html:2
msgid "SleepDay"
msgstr "Grasse matinée"

#. 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 ""
"Le paramètre weekday est vrai si nous sommes un jour de semaine, et le "
"paramètre vacation est vrai si nous sommes en vacances. Nous pouvons dormir "
"ce matin s'il ne s'agit pas d'un jour de semaine ou si nous sommes en "
"vacances. Retournez vrai si nous pouvons faire la grasse matinée."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool1/SumDouble.html:2
msgid "Sum Double"
msgstr "Somme doublée"

#. 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 ""
"Étant donné deux entiers, retournez leur somme. Sauf si les valeurs sont "
"égales, auquel cas vous devez retourner le double de leur somme."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/AlarmClock.html:2
msgid "AlarmClock"
msgstr "Radio réveil"

#. 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 ""
"Étant donné le jour de la semaine, codé de la façon suivante : 0=Dimanche, "
"1=Lundi, 2=Mardi, ... 6=Samedi, et un booléen vacation indiquant si nous "
"sommes en vacances, retournez une chaîne de caractères de la forme \"7:00\" "
"indiquant à quelle heure nous devons régler le radio-réveil. Les jours de la "
"semaine, nous devons nous réveiller à 7h tandis que nous pouvons dormir "
"jusqu'à 10h le week-end. Pendant les vacances, il nous faut nous lever à 10h "
"la semaine tandis que le réglage pour le radio-réveil doit être \"off\" le "
"week-end."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/AnswerCell.html:2
msgid "AnswerCell"
msgstr "Répondeur"

#. 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 ""
"Votre téléphone sonne. Renvoyez vrai si vous décrochez. Vous le faites "
"habituellement, sauf le matin où vous ne répondez que si votre mère appelle. "
"Dans tous les cas, vous ne répondez pas si vous dormez."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/BlueTicket.html:2
msgid "BlueTicket"
msgstr "Ticket bleu"

#. 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 ""
"Vous avez un ticket de loterie bleu, avec des entiers a, b et c inscrits "
"dessus. Cela fait trois paires que l'on appellera ab, bc et ac. Considérez "
"la somme des nombres de chaque paire. Si la somme de l'une des paires vaut "
"exactement 10, le résultat est 10. Sinon, si la somme ab vaut exactement 10 "
"de plus que les sommes bc ou ac, le résultat est 5. Sinon, le résultat est 0."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/CaughtSpeeding.html:2
msgid "CaughtSpeeding"
msgstr "Radar de vitesse"

#. 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 ""
"Vous conduisez un peu trop vite et un officier de police vous arrête. "
"Écrivez le code pour calculer le résultat, encodé sous forme d'un entier : "
"0=pas d'amende, 1=petite amende, 2=grosse amende. Si votre vitesse est "
"inférieure à 60, le résultat est 0. Si la vitesse est incluse entre 61 et 80 "
"(inclus), le résultat est 1. Si la vitesse est 81 ou plus, le résultat est "
"2. Tout ceci ne vaut que si ce n'est pas votre anniversaire aujourd'hui, car "
"sinon, votre vitesse peut être supérieure de 5 dans tous les cas."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/CigarParty.html:2
msgid "CigarParty"
msgstr "Cigares de fête"

#. 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 ""
"Quand les écureuils font la fête, ils aiment avoir des cigares. Une fête "
"d'écureuils est réussie si le nombre de cigares est entre 40 et 60 (inclus). "
"Sauf si c'est le week-end, auquel cas il n'y a pas de limite supérieure au "
"nombre de cigares. Renvoyez vrai si la fête est réussie."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/DateFashion.html:2
msgid "DateFashion"
msgstr "Rendez-vous élégant"

#. 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 ""
"Vous et votre compagne/compagnon essayez d'obtenir une table au restaurant. "
"Le paramètre \"you\" est l'élégance de vos vêtements, dans l'intervalle "
"[0,10], et \"date\" est l'élégance des vêtements de votre compagne/"
"compagnon. Le résultat à obtenir la table est encodé comme une valeur "
"entière avec 0=non, 1=peut-être et 2=oui. Si l'un de vous deux est très "
"élégant (8 ou plus) alors le résultat est 2 (oui). Avec l'exception que si "
"l'un de vous deux a un style de 2 ou moins, alors le résultat est 0 (no). "
"Sinon, le résultat est 1 (peut-être)."

#. 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 ""
"D'après Wikipedia, Fizz Buzz est un jeu collectif visant à entraîner les "
"enfants à la division. Les joueurs comptent chacun à leur tour, en "
"remplaçant tous les nombres divisibles par trois par le mot « Fizz ». Tous "
"les nombres divisibles par cinq sont remplacés par le mot « Buzz ». Les "
"nombres divisibles à la fois par trois et par cinq sont remplacés par la "
"chaîne « 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 ""
"Les nombres inchangés sont simplement renvoyés sous forme d'une chaîne de "
"caractères.  \n"
"[!java|scala]Le plus simple pour cela est d'utiliser l'idiomatisme suivant "
"du [!thelang] : <code>\"\"+a</code>[/!] \n"
"[!python]La fonction <code>str(a)</code> change l'entier <code>a</code> en "
"une chaîne.[/!]"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/GreenTicket.html:2
msgid "GreenTicket"
msgstr "Ticket vert"

#. 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 ""
"Vous avez un ticket de loterie vert, avec des entiers a, b et c inscrits "
"dessus. Si les nombres sont tous différents les uns des autres, le résultat "
"est 0. Si tous les nombres sont identiques, le résultat est 20. Si deux des "
"nombres sont les mêmes, le résultat est 10."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/In1To10.html:2
msgid "In1To10"
msgstr "De 1 à 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 ""
"Soit un nombre n, renvoyez vrai si n est dans l'intervalle [1,10]. Sauf si "
"\"outsideMode\" est vrai, auquel cas renvoyez vrai si le nombre est plus "
"petit ou égal à 1 ou bien s'il est plus grand ou égal à 10"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/InOrderEqual.html:2
msgid "InOrderEqual"
msgstr "Dans l'ordre croissant"

#. 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 ""
"Soit trois entiers, a b c, renvoyez vrai si ils sont dans un ordre croissant "
"strict, tel que 2 5 11, ou 5 6 7, mais pas 6 5 7 ou 5 5 7. Cependant, avec "
"l'exception que si \"equalOk\" est vrai, alors l'égalité est permise, comme "
"5 5 7 ou 5 5 5."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/InOrder.html:2
msgid "InOrder"
msgstr "Dans l'ordre"

#. 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 ""
"Soit trois entiers, a b c, renvoyez vrai si b est plus grand que a, et si c "
"est plus grand que b. Cependant, avec l'exception que si \"bOk\" est vrai, b "
"n'a pas besoin d'être plus grand que a."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/LastDigit2.html:2
msgid "LastDigit 2"
msgstr "L'autre dernier chiffre"

#. 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 ""
"Soit trois entiers, a b c, renvoyez vrai si deux ou plus d'entre eux ont le "
"même chiffre le plus à droite. Les entiers sont positifs. Note: l'opérateur "
"% \"mod\" calcule le reste, i.e. 17 % 10 vaut 7."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/LessBy10.html:2
msgid "LessBy10"
msgstr "Plus petit par 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 ""
"Soit trois entiers, a b c, renvoyez vrai si l'un d'entre eux est plus petit "
"de 10 ou plus que l'un des autres."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/Main.html:2
msgid "Boolean (even more) fun"
msgstr "Encore des jeux booléens"

#. 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 ""
"Une très bonne introduction à ce type est disponible ici : http://codingbat."
"com/doc/java-if-boolean-logic.html"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/MaxMod5.html:2
msgid "MaxMod5"
msgstr "Maximum Mod 5"

#. 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 ""
"Soit deux valeurs entières, renvoyez la plus grande des deux. Cependant, si "
"les deux valeurs ont le même reste quand elles sont divisées par 5, alors "
"renvoyez la plus petite des deux. Cependant, dans tous les cas, si les deux "
"valeurs sont égales, renvoyez 0. Note: l'opérateur % \"mod\" calcule le "
"reste, i.e. 7 % 5 vaut 2."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/NearTen.html:2
msgid "NearTen"
msgstr "Près de dix"

#. 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 ""
"Soit un entier positif \"num\", renvoyez vrai si num est à distance 2 ou "
"moins d'un multiple de 10. Note: ( a % b ) est le reste de la division de a "
"par b, donc (7 % 5) vaut 2."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/RedTicket.html:2
msgid "RedTicket"
msgstr "Ticket rouge"

#. 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 ""
"Vous avez un ticket de loterie rouge comportant trois entiers a, b et c. "
"Chacun d'entre eux est 0, 1, ou 2. Si ils ont tous comme valeur 2, le "
"résultat vaut 10. Sinon, si ils sont égaux, le résultat vaut 5. Sinon, tant "
"que b et c sont différents de a, le résultat vaut 1. Sinon, le résultat est "
"0."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/ShareDigit.html:2
msgid "ShareDigit"
msgstr "Chiffre partagé"

#. 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 ""
"Soit deux entiers, chacun étant dans l'intervalle [10,99], renvoyez vrai si "
"il y a un chiffre qui apparaît dans les deux nombres, comme 2 dans 12 et 23. "
"(Note: division, i.e.  n/10, renvoie le chiffre à gauche tant que le % \"mod"
"\" n%10 renvoie le bon chiffre.)"

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/SortaSum.html:2
msgid "SortaSum"
msgstr "Sommes d'entiers"

#. 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 ""
"Soit deux entiers, a et b, renvoyez leur somme. Cependant, les sommes entre "
"10 et 19 inclus sont interdites, dans ce cas, renvoyez 20."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/SquirrelPlay.html:2
msgid "SquirrelPlay"
msgstr "Jeu de l'écureuil"

#. 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 ""
"Les écureuils dans Palo Alto passent la majorité de leurs journées à jouer. "
"En particulier, ils jouent si la température est entre 60 et 90 (inclus). A "
"moins que ce soit l'été, alors la limite supérieure est de 100 au lieu de "
"90. Soit une température entière et un booléen isSummer.\n"
"Renvoyez vrai si les écureuils jouent et faux sinon."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/TeaParty.html:2
msgid "TeaParty"
msgstr "Goûter"

#. 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 ""
"Nous avons un goûter avec quantité de thé et de bonbons. Renvoyez l'entier "
"'outcome' du goûter encodé comme 0=mauvais, 1=bien, ou 2=excellent. Un "
"goûter est bien (1) si le thé et les bonbons sont à 5 au moins. Cependant, "
"si soit le thé soit les bonbons est à au moins le double de la quantité de "
"l'autre, le goûter est excellent (2). Cependant, dans tous les cas, si soit "
"le thé soit les bonbons sont à moins de 5, le goûter est toujours mauvais "
"(0)."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/TeenSum.html:2
msgid "TeenSum"
msgstr "Somme d'ados"

#. 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 ""
"Étant donné deux nombres entiers (a et b), renvoyez leur somme. Cependant, "
"les valeurs ados (dans l'intervalle [13;19]) sont particulièrement "
"chanceuses. Donc, si l'un des nombres est ado, renvoyez simplement 19."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/TwoAsOne.html:2
msgid "TwoAsOne"
msgstr "Deux pour un"

#. 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 ""
"Soit trois entiers, a b c, renvoyez vrai si il est possible d'en additionner "
"deux d'entre eux pour obtenir le troisième."

#. type: Content of: <h1>
#: src/lessons/welcome/bat/bool2/WithoutDoubles.html:2
msgid "WithoutDoubles"
msgstr "Sans double"

#. 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 ""
"Renvoyez la somme du jet de deux dés à six faces. Cependant, si noDoubles "
"est vrai et que les deux dés ont la même valeur, incrémentez l'un des dés à "
"la valeur suivante, en le mettant à 1 si sa valeur était 6."

#. type: Content of: <h1>
#: src/lessons/bat/string1/Main.html:2
msgid "String fun"
msgstr "Jouer avec les chaînes"

#. 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 ""
"Les chaînes de caractères (\"String\") sont les plus simples des types de "
"données complexes :) Elles fournissent différentes opérations, comme obtenir "
"la longueur de la chaîne ou une sous-chaîne."

#. 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 ""
"Une très bonne introduction à ce type est disponible ici : 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 "Petits exercices sur les chaînes"

#. 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 ""
"Il s'agit d'exercices d'entraînement au sujet des chaînes de caractères. "
"Mais malheureusement, leur intégration à PLM est encore en cours."

#. type: Content of: <p>
#: src/lessons/bat/string1/short_desc.html:7
msgid "Please be patient with us."
msgstr "Merci de votre patience."

#. type: Content of: <h1>
#: src/lessons/bat/string1/AltPairs.html:2
msgid "AltPairs"
msgstr "Sans les paires"

#. 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 ""
"Soit une chaîne de caractères, renvoyez la chaîne composée des caractères  "
"aux index 0,1,4,5,8,9 ... par exemple \"kittens\" devient \"kien\"."

#. type: Content of: <h1>
#: src/lessons/bat/string1/FrontTimes.html:2
msgid "FrontTimes"
msgstr "Multiplication de début"

#. 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 ""
"Soit une chaîne de caractère et un entier n.\n"
"On définit le début d'une chaîne de caractère comme les trois premiers "
"caractères, ou tout ce qu'il y a si la chaîne a une longueur de moins de 3.\n"
"Renvoyez n copies du début de la chaîne."

#. type: Content of: <h1>
#: src/lessons/bat/string1/Last2.html:2
msgid "Last2"
msgstr "Deux derniers"

#. 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 ""
"Étant donné une chaîne de caractères, retournez le nombre de fois que les "
"deux\n"
"dernières lettres apparaissent. Par exemple, \"hixxxhi\" renvoie 1 (on ne "
"compte pas la dernière sous-chaîne) tandis que \"aaaNaa\" renvoie 2 (les "
"occurences peuvent se chevaucher partiellement)."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringBits.html:2
msgid "StringBits"
msgstr "Éclats de chaîne"

#. 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 ""
"Étant donné une chaîne de caractères, retournez une nouvelle chaîne formée "
"en\n"
"prenant un caractère sur deux dans le paramètre, en commençant avec le "
"premier\n"
"caractère. Ainsi, \"Bonjour\" donne \"Bnor\"."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringMatch.html:2
msgid "StringMatch"
msgstr "Comparaison de chaînes"

#. 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 ""
"Soit deux chaînes de caractères a et b.\n"
"Renvoyez le nombre de position où elles contiennent la même sous-chaîne de "
"longueur 2.\n"
"Ainsi, \"xxcaazz\" et \"xxbaaz\" renvoient 3, puisque les sous-chaînes \"xx"
"\", \"aa\", et \"az\" apparaissent dans les mêmes emplacement dans les deux "
"chaînes."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringSplosion.html:2
msgid "StringSplosion"
msgstr "Explosion de chaîne"

#. 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 ""
"Soit une chaîne de caractères non vide comme \"Code\".\n"
"Renvoyez une chaîne de caractères comme \"CCoCodCode\"."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringTimes.html:2
msgid "StringTimes"
msgstr "Multiplication de chaînes"

#. 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 ""
"Soit une chaîne et un entier n positif.\n"
"Renvoyez une chaîne plus grande qui consiste en n copies de la chaîne "
"originale."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringX.html:2
msgid "StringX"
msgstr "Chaîne X"

#. 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 ""
"Soit une chaîne de caractère, renvoyez une version où tous les \"x\" ont été "
"supprimés.\n"
"Seuls les \"x\" au tout début ou en toute fin ne doivent pas être supprimés."

#. type: Content of: <h1>
#: src/lessons/bat/string1/StringYak.html:2
msgid "StringYak"
msgstr "String Yak"

#. 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 ""
"La chaîne \"yak\" n'a pas de chance. Soit une chaîne de caractères, renvoyez "
"une version où tous les \"yak\" sont supprimées (quel que soit le caractère "
"à la place du 'a'). Les différentes chaînes \"yak\" ne se chevauchent pas."

#. 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 "Alunisseur"

#. 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 ""
"Dans cette leçon, vous pilotez un alunisseur dans des situations de plus en "
"plus complexes."

#. 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 ""
"À chaque pas de la simulation, le joueur donne des commandes contrôlant "
"l'angle et la poussée du module d'alunissage."

#. type: Content of: <p>
#: src/lessons/lander/Main.html:10
msgid "Ideas concerning the progression of exercises:"
msgstr "Idées d'exercices à ajouter à la progression proposée :"

#. 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 ""
"Un alunisseur en position verticale au dessus d'un sol plat. Le joueur ne "
"peut régler que la poussée (c'est fait)."

#. 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 ""
"Un alunisseur en position verticale pas au dessus d'un sol plat. Le joueur "
"peut régler la poussée et l'angle (c'est fait)."

#. 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 ""
"Un alunisseur avec un angle et une vitesse difficile, pas au dessus d'un sol "
"plat. Le joueur contrôle la poussée et l'angle."

#. 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 ""
"Un alunisseur avec un angle et une vitesse difficile, pas au dessus d'un sol "
"plat dans une configuration difficile. Le joueur contrôle la poussée et "
"l'angle."

#. type: Content of: <ul><li>
#: src/lessons/lander/Main.html:20
msgid "Same with wind?"
msgstr "La même chose avec du vent ?"

#. type: Content of: <p>
#: src/lessons/lander/short_desc.html:7
msgid "This lesson assumes some basic programming and physics skills."
msgstr ""
"Vous êtes supposé maîtriser les bases de la programmation et posséder "
"quelques notions de mécanique du point avant de tenter cette leçon."

#. 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 ""
"Dans cet univers, vous contrôlez un module d'alunissage. À chaque pas de la "
"simulation, vous avez accès à la position du module, sa vitesse, son angle "
"et la poussée de son moteur. Vous devez alors décider de l'angle et de la "
"poussée pour l'étape suivante. "

#. 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 "Retourne la position en X et Y du module d'alunissage."

#. 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 [/!]getVitesseX()[!scala]:Double[/!]\n"
"[!java|c]double [/!]getVitesseY()[!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 "Obtenir les vitesses horizontale et verticale du module."

#. 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 [/!]setAngleDesire([!java|c]double [/!]angle[!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 "Retourne ou fixe l'angle du module d'alunissage."

#. 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 ""
"Un angle de O° dénote une position verticale, avec le sommet du module "
"dirigé vers le haut. C'est l'angle avec lequel vous devez vous poser. Un "
"angle positif indique que le module penche vers la gauche tandis qu'un angle "
"négatif indique au contraire qu'il penche à droite. Il est impossible de se "
"pencher à plus de ±90°, et on ne peut pas pencher le module de plus de ±5° "
"en une fois."

#. 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 [/!]getPoussee()[!scala]:Int[/!]\n"
"[!java|c]void [/!]setPousseeDesiree([!java|c]int [/!]poussée[!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 "Retourne ou fixe la poussée du module."

#. 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 ""
"Vous ne pouvez incrémenter ou décrémenter la poussée que d'une unité à "
"chaque fois. Si votre poussée actuelle est de 2 et que vous demandez une "
"poussée de 4, vous n'obtiendrez que 3 au prochain pas de temps. Si vous "
"demandez moins que 0 (ou plus que 4), tout se passera comme si vous "
"demandiez 0 (ou 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 ""
"Obtient la quantité de fuel restant dans le réservoir. À chaque pas de "
"simulation, le module consomme entre 0 et 4 unités de fuel, en fonction de "
"sa poussée. Une fois que vous avez utilisé tout votre carburant, vous êtes "
"en chute libre alors prenez garde !"

#. 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; [/!]getSol()[! 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 ""
"Obtenir les points du sol de gauche à droite. [!java|scala]Vous pouvez "
"retrouver les coordonnées X et Y de chaque point avec les méthodes "
"correspondantes de votre point : <code>p.x()</code> et <code>p.y()</code>."
"[/!] [!python]Chaque point est un tableau de deux entiers représentant "
"respectivement les coordonnées X et Y de chaque point.[/!]"

#. type: Content of: <h1>
#: src/lessons/lander/lvl1_lander_101/Lander101.html:2
msgid "Lander 101"
msgstr "Se poser pour les nuls"

#. 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 ""
"Bravo ! Vous avez gagné dans une boîte de céréales un voyage (aller simple) "
"pour Mars. La NASA vous a même fourni un module d'excursion lunaire pour "
"l'occasion, et c'est donc avec ce véhicule que vous voyagerez."

#. 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 ""
"Avant le décollage, vous devez vous entraîner sur simulateur aux bases de "
"l'alunissage. Si tout se passe comme prévu, vous ne devriez pas avoir à "
"voler en mode manuel, mais mieux vaut prévenir que guérir, comme ils disent."

#. 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 ""
"Votre mission est de <b>poser le module avec une vitesse verticale "
"inférieure à 10 m/s</b>. Il y a deux façons d'influer sur la trajectoire du "
"module : en modifiant son angle, ou en réglant la poussée de son moteur. "
"Dans cette simulation, nous ne nous intéressons qu'à la poussée, exprimée en "
"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 ""
"Vous devez écrire le [!python]corps de la fonction <code>step()</code>, qui "
"sera appelée[/!][!scala|java|c]code qui sera appellé[/!] tous les dixièmes "
"de seconde pendant la simulation. Assurez vous que votre code ne dure pas "
"trop longtemps, et évitez en particulier les boucles <code>while</code>. Il "
"faut juste ajuster la poussée du moteur en utilisant la fonction <code>[!"
"java]void [/!]setPousseeDesiree([!java]int [/!]poussee[!scala]:Integer[/!])</"
"code> où <code>poussee</code> est un entier entre 0 et 4 (représentant une "
"poussée entre 0 m/s² et 4 m/s²). Vous ne pouvez incrémenter ou décrémenter "
"la poussée que de 1 entre deux pas de la simulation. Ainsi, si la poussée du "
"moteur est actuellement de 2 et que vous demandez 4, vous n'aurez que 3 à la "
"prochaine étape. Si vous demandez une valeur inférieure à 0 (ou supérieure à "
"4), tout se passera comme si vous aviez demandé 0 (ou 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 ""
"Afin de prendre des décisions informées, vous pouvez demander des "
"informations sur l'état actuel du module. Dans cette simulation, vous ne "
"serez probablement intéressé que par sa position verticale (accessible grâce "
"à <code>[!java]double [/!]getY()[!scala]:Double[/!]</code>) et sa vitesse "
"verticale (accessible grâce à <code>[!java]double [/!]getVitesseY()[!scala]:"
"Double[/!]</code>). Vous pouvez également demander la poussée actuelle du "
"moteur (avec <code>[!java]int [/!]getPoussee()[!scala]:Integer[/!]</code>) "
"si vous avez oublié ce que vous avez demandé. Rappelez vous que la gravité "
"martienne est de 3.711 m/s², cela peut vous être utile."

#. 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 ""
"Une dernière chose : le module est plutôt petit, et vous n'avez pas tant de "
"carburant que cela. À chaque pas de simulation, il consomme autant d'unité "
"de carburant que la poussée actuelle du moteur. Si vous tombez en panne "
"sèche, vous serez en chute libre alors attention ! Vous pouvez consulter le "
"niveau du réservoir avec <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 "Repérer une zone plate"

#. 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 ""
"Après 200 jours de voyage intersidéral à manger des céréales, vous êtes "
"enfin parvenu à la planète rouge. Il est enfin temps de se poser !"

#. 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 ""
"Le module est en pilote automatique, et vous n'avez qu'à regarder autour de "
"vous pour sélectionner une zone d'alunissage. Vous devez vous poser sur "
"<b>une zone plate</b> si vous ne voulez pas vous scratcher. Vous indiquez au "
"pilote automatique où se poser en modifiant la fonction "
"<code>getLandingZone</code> de façon à ce qu'elle retourne [!java|scala]un "
"Segment représentant la zone de votre choix."

#. 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 ""
"Un Segment est composé de deux <code>Point</code>s, chacun composé de deux "
"doubles. On construit un nouveau segment de la façon suivante : "
"<code>Segment([!java]Point [/!]debut[!scala]:Point[/!], [!java]Point "
"[/!]fin[!scala]:Point[/!])</code>. Pour créer de nouveaux points, il faut "
"utiliser le constructeur <code>Point([!java]double [/!]x[!scala]:Double[/!], "
"[!java]double [/!]y[!scala]:Double[/!])</code>. Les coordonnées d'un point "
"sont accessibles grâce à ses méthodes <code>[!java]double [/!]x()[!scala]:"
"Double[/!]</code> et <code>[!java]double [/!]y()[!scala]:Double[/!]</code>."

#. 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]tuple de deux coordonnées X délimitant la zone de votre choix."
"[/!]"

#. 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 ""
"Pour déterminer la zone cible, vous devez appeler <code>[!java]List&lt;"
"Point&gt; [/!]getSol()[!scala]:List[Point][/!]</code>, qui retourne les "
"points qui composent la surface sous la forme d'une list de [!java|"
"scala]<code>Point</code>[/!] [!python]tuples (x,y)[/!]."

#. 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 ""
"Une dernière chose : votre fonction doit retourner une zone valide dans "
"toutes les situations, pas seulement celle que l'on voit en ce moment. C'est "
"que votre code sera utilisé dans ce cas, mais également dans la "
"configuration que nous avions dans l'exercice précédent. Comme d'habitude, "
"vous pouvez voir les autres mondes en les sélectionnant dans le combobox au "
"dessus de la vue du monde."

#. 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 ""
"Bon alunissage ! N'oubliez pas de mettre votre combinaison spatiale en "
"sortant."

#. type: Content of: <h1>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:2
msgid "Fly the Lander!"
msgstr "Aux commandes du module"

#. 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 ""
"Après 30 jours à regarder des cailloux en mangeant des céréales, vous "
"décidez qu'il est temps d'aller explorer d'autres coins de cette planète."

#. 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 ""
"Vous volez un moment, avant de réaliser soudain que vous êtes presque à "
"court d'essence. Le pilote automatique est malheureusement inutile dans ce "
"genre de situation périlleuse, et vous allez devoir vous poser en mode "
"manuel. Votre mission et de vous <b>poser sur une zone plate, avec une "
"vitesse verticale inférieure à 10 m/s, une vitesse horizontale inférieure à "
"5 m/s et un angle 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 ""
"Vous devez définir deux fonctions : <code>[!java]void [/!]initialize()</"
"code> et <code>[!java]void [/!]step()</code>. <code>initialize()</code> est "
"appelée au moment où l'on appuie sur le bouton «Exécuter». Vous pouvez "
"l'utiliser pour choisir une zone plate. Comme avant, <code>step()</code> est "
"appelée tous les dixièmes de seconde pour vous permettre d'ajuster la "
"poussée (avec la fonction  <code>[!java]void [/!]setPousseedesiree([!"
"java]int [/!]poussee[!scala]:Integer[/!])</code>). Vous pouvez également "
"contrôler l'angle du module avec la fonction <code>[!java]void "
"[/!]setAngleDesire([!java]double [/!]angle[!scala]:Double[/!])</code>. Un "
"angle de O° dénote une position verticale, avec le sommet du module dirigé "
"vers le haut. C'est l'angle avec lequel vous devez vous poser. Un angle "
"positif indique que le module penche vers la gauche tandis qu'un angle "
"négatif indique au contraire qu'il penche à droite. Il est impossible de se "
"pencher à plus de ±90°, et on ne peut pas pencher le module de plus de ±5° "
"en une fois."

#. 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 ""
"Comme dans les exercices précédents, <code>[!java]List&lt;Point&gt; "
"[/!]getSol()[!scala]:List[Point][/!]</code> retourne les points qui "
"composent l'horizon. Le manuel de référence de votre module est disponible "
"dans la documentation (Aide/À propos de ce monde)."

#. 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 ""
"Comme d'habitude, votre programme doit se poser sans heurt dans toutes les "
"situations que nous avons rencontré jusqu'à présent, ainsi que dans ce "
"nouveau cas."

#. type: Content of: <p>
#: src/lessons/lander/lvl3_fly_the_lander/FlyTheLander.html:33
msgid "Good luck, try not to crash!"
msgstr "Bonne chance. Essayez de ne pas vous scratcher ;)"

#. type: Content of: <h2>
#: lib/doc/MainWindow.html:1
msgid "The PLM Main Window"
msgstr "La fenêtre principale de 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 ""
"L'environnement de travail de PLM devrait être immédiat à maîtriser, en "
"particulier avec les bulles d'aide qui apparaissent quand votre souris "
"survole les éléments. Voici une petite explication des composants au cas où "
"quelque chose vous échappe. La fenêtre principale est faite de 5 composants "
"majeurs :"

#. 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>Le menu :</b> Placé en haut de la fenêtre, il vous permet de quitter le "
"programme, et d'accéder à certaines commandes avancées que nous détaillerons "
"plus tard."

#. 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>La barre de commandes : </b> Placée juste en dessous du menu, celle-ci "
"vous donne accès aux quatre commandes principales :"

#. 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 ""
"Le bouton <b>Exécuter</b> qui lance la compilation et l'exécution du code "
"que vous aurez tapé dans l'éditeur.  A la fin de l'exécution, il vérifie que "
"vous arrivez bien à la situation finale de l'exercice. Si c'est le cas, vous "
"aurez accès à l'exercice suivant par le menu <b>Exercise</b>.  Sinon, il "
"vous faudra corriger votre code."

#. 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 ""
"Le bouton <b>Stop</b> permet d'interrompre l'exécution de votre code, ce qui "
"est pratique si vous avez une <i>boucle infinie</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 ""
"Le bouton <b>Réinitialiser</b> permet de remettre le monde dans son état "
"initial."

#. 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 ""
"Le bouton <b>Démo</b> vous montre l'exécution de la solution attendue. "
"Pendant l'exécution, vous êtes autorisés à changer de monde afin de voir les "
"différentes exécutions attendues."

#. 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 ""
"Notez qu'il y a souvent plusieurs moyens d'atteindre la solution escomptée, "
"et que celle présentée lors de la démo n'est pas plus ou moins correcte que "
"les autres. Libre à vous de ne pas suivre à la lettre le procédé de la démo, "
"à condition que le résultat final corresponde bien à ce qui est demandé."

#. 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>Les onglets de consigne et d'édition :</b> C'est ici que vous lisez le "
"texte actuel.  Cette zone contient plusieurs onglets, auxquels on peut "
"accéder en cliquant sur leur nom en haut à gauche.  Le premier onglet (qui "
"est toujours intitulé <b>Mission</b>)  contient une présentation de "
"l'exercice en cours.  Pour résoudre un exercice, vous devez écrire votre "
"code dans les autres onglets.  Par exemple, vous pouvez maintenant cliquer "
"sur l'onglet <b>Source Code</b> pour voir le code actuel.  S'il est vide, "
"c'est que vous n'avez pas encore écrit de code."

#. 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>La console :</b> Placée sous les onglets, c'est ici que s'afficheront "
"tous les messages de l'application. Cette zone est initialement vide et "
"blanche."

#. 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>La vue du monde :</b> Placée à droite des onglets, elle est constituée de "
"cinq éléments:"

#. 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 ""
"Un menu déroulant permettant de choisir un monde. En effet, le programme que "
"vous devez écrire sera parfois exécuté dans plusieurs monde pour vous "
"confronter à différentes situations. Ce menu déroulant vous permettra de "
"choisir le monde que vous souhaitez voir. Notez que ce menu est masqué si "
"l'exercice courant n'offre qu'un seul monde."

#. 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 ""
"Un réglet placé en dessous permet de choisir la vitesse d'animation du "
"monde. Plus exactement, il permet de choisir le délai (en millisecondes) que "
"les buggles doivent attendre après chaque action afin que vous ayez le temps "
"de voir ce qu'elles font."

#. 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 ""
"Un onglet <b>Monde</b> qui représente la vue du monde actuellement "
"sélectionné (dans le menu déroulant). Cette vue est constituée d'une grille "
"représentant les différentes cases du monde, ainsi que d'une ou plusieurs "
"<i>buggles</i> qui attend vos ordres."

#. 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 ""
"Un onglet <b>Objectif</b> qui permet d'afficher la vue du monde tel qu'il "
"doit être à la fin de l'exercice."

#. 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>Les contrôles interactifs</b> Placés sous la vue du monde, ces boutons "
"vous permettent de contrôler interactivement les buggles.  Vous pouvez ainsi "
"essayer d'amener la buggle à l'objectif du scénario <i>à la main</i> avant "
"d'écrire le code nécessaire dans l'éditeur."

#. 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 ""
"Un menu déroulant permettant de sélectionner la buggle que vous souhaitez "
"contrôler."

#. 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 "Le bouton <b>avance</b> fait avancer votre buggle d'un pas."

#. 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 "Le bouton <b>recule</b> fait reculer votre buggle d'un pas."

#. 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 ""
"Le bouton <b>gauche</b> demande à votre buggle de tourner vers la gauche."

#. 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 ""
"Le bouton <b>droite</b> demande à votre buggle de tourner vers la droite "
"(incroyable, non?)."

#. 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 ""
"Le bouton <b>marquer</b> demande à votre buggle de faire un trait au sol "
"quand elle avance."

#~ msgid ""
#~ "This <b>experimental</b> lesson aims at teaching students about "
#~ "backtracking. It is not ready for consumtion yet, not even the first "
#~ "exercises. It will feature several exercices on the topic allowing to "
#~ "progressively build the relevant notions and mental representation in the "
#~ "students mind."
#~ msgstr ""
#~ "Cette leçon <b>expérimentale</b> a pour but d'enseigner aux étudiants le "
#~ "principe du \"backtracking\". Ce n'est pas encore prêt à être utilisé, ne "
#~ "serait-ce que les premiers exercices. Cette leçon contiendra plusieurs "
#~ "exercices sur le sujet permettant d'introduire pas à pas les notions "
#~ "nécessaires et de construire une représentation mentale dans l'esprit de "
#~ "l'étudiant."

#~ msgid ""
#~ "For now, it contains a Backtracking exercise which lacks a graphical "
#~ "representation to be usable. It is based on an entity KnapsackSolver "
#~ "which works on a KnapsackPartialSolution. This latter is not a World, but "
#~ "a passive world component. It is used by the solver to store the "
#~ "currently best solution and the working solution. This design should be "
#~ "rather generic and other backtracking problems, such as the ones used in "
#~ "my TOP teaching (pyramid, recipients) should be implmentable following "
#~ "this design. That is why Backtracking classes derive from generic ones: "
#~ "BacktrackingEntity and BacktrackingPartialSolution.  There is also a "
#~ "BacktrackingWorld, that specific universes should need to not override, "
#~ "and BacktrackingExercise, dealing with this specificity where the world "
#~ "does not only contain solving entities, but also two partial solutions "
#~ "(best know and current)."
#~ msgstr ""
#~ "A l'heure actuelle, cela contient un exercice sur le Backtracking qui a "
#~ "besoin d'une représentation graphique pour être utilisable. Cet exercice "
#~ "est base sur une entité KnapsackSolver qui travaille sur une "
#~ "KnapsackPartialSolution. Ce dernier n'est pas un World, mais un composant "
#~ "passif du monde. Il est utilisé par le solveur pour sauvegarder la "
#~ "meilleure solution actuelle et la solution courante. Le design devrait "
#~ "être assez générique et d'autres problèmes de backtracking, tels que ceux "
#~ "utilisés dans mes enseignements de TOP (pyramides, récipients ) devraient "
#~ "être implémentables en copiant ce design. C'est pourquoi les classes "
#~ "Backtracking dérivent d'une classe générique: BacktrackingEntity et "
#~ "BacktrackingPartialSolution. Il y a aussi un BacktrackingWorld; que les "
#~ "univers spécifiques ne doivent en aucun cas surchargé; et "
#~ "BacktrackingExercise, gérant cette spécificité où le monde ne contient "
#~ "pas seulement des entités solutions, mais aussi deux solutions partielles "
#~ "(meilleur connue et actuelle)."

#~ msgid ""
#~ "This exercise should be introduced by an interactive discovery activity "
#~ "such as the one used here: http://interstices.info/jcms/c_19213/le-"
#~ "probleme-du-sac-a-dos"
#~ msgstr ""
#~ "Cet exercice devrait être introduit par une activité de découverte "
#~ "interactive comme celle qui est utilisée ici : http://interstices.info/"
#~ "jcms/c_19213/le-probleme-du-sac-a-dos"

#~ msgid ""
#~ "Although this exercise seems almost usable, there is a fundamental "
#~ "difficulty to solve in the visualization. It is envisionned that the call "
#~ "graph is used here, to help the students building their mental "
#~ "representation of recursion. The actual representation of the graph "
#~ "should be quite easy, thanks to the jung library. But I fail to see how "
#~ "to get the needed info so far. Adding sensors to the stepUI()  method is "
#~ "probably the best way to go, but I would need to inspect the complete "
#~ "call stack where Thread.currentThread().getStack() only give the static "
#~ "stack (method called, file location, etc). I think I need to inspect the "
#~ "parameters passed to each method call to rebuild the proper call tree."
#~ msgstr ""
#~ "Même si cet exercice semble presque utilisable, il y a une difficulté "
#~ "fondamentale à résoudre dans la visualisation. Il a été imaginé que le "
#~ "graphe des appels est utilisé ici pour aider les étudiants à construire "
#~ "leur propre représentation mentale de la récursion. La représentation "
#~ "actuelle du graphe devrait être assez simple, grâce à la bibliothèque "
#~ "JUNG. Mais j'ai échoué jusqu'à présent à trouver comment obtenir les "
#~ "informations nécessaires. Ajouter des capteurs à la méthode stepUI() est "
#~ "probablement la meilleur façon de procéder, mais j'aurai besoin "
#~ "d'inspecter la pile d'appel en entier alors que Thread.currentThread()."
#~ "getStack() ne fournit que la pile statique (méthodes appelées, locations "
#~ "des fichiers, etc). Je pense que j'ai besoin d'inspecter les paramètres "
#~ "passés à chaque appel de méthode pour reconstruire le bon arbre d'appel."

#~ msgid ""
#~ "The first thing that I tried to use was dtrace, but it seems non-portable "
#~ "and somehow linked to solaris so I didn't dig any further."
#~ msgstr ""
#~ "La première chose que j'ai essayé d'utiliser fut dtrace, mais il semble "
#~ "non portable et en quelque sorte lié à solaris donc je n'ai pas plus "
#~ "creusé dans cette direction."

#~ msgid ""
#~ "Then, I tried to use the debugging infrastructure (JPDA), but never "
#~ "managed to get it working. It seems to me that the original com.sun.jdi "
#~ "package is somehow deprecated since com.sun.jdi.BootStrap."
#~ "virtualMachineManager() returns null while org.eclipse.jdi.Bootstrap."
#~ "virtualMachineManager() does not. But when I'm using the eclipse version, "
#~ "it seem to take an endless amount of dependencies, which I'm not inclined "
#~ "to do. The root of my problem may be that I was using a jdi.jar comming "
#~ "from eclipse, but I didn' find any other. I just realised that the com."
#~ "sun.jdi package is also implemented in /usr/lib/jvm/java-6-sun-1.6.0.26/"
#~ "lib/tools.jar on my disk. It seem to be functional, I should give it "
#~ "another spin."
#~ msgstr ""
#~ "Ensuite, j'ai essayé d'utiliser l'infrastructure de débuggage (JPDA), "
#~ "mais je ne suis jamais parvenu à la faire fonctionner. J'ai l'impression "
#~ "que le package com.sun.jdi original est en quelque sorte déprécié puisque "
#~ "com.sun.jdi.BootStrap.virtualMachineManager() renvoie null tandis que  "
#~ "org.eclipse.jdi.Bootstrap.virtualMachineManager() ne le fait pas. Mais "
#~ "quand j'utilise la version d'eclipse, il semble nécessiter un nombre "
#~ "infini de dépendances, que je ne suis pas enclin à installer. La cause de "
#~ "mon problème pourrait être que j'utilisais un jdr.jar venant d'eclipse, "
#~ "mais je n'en ai pas trouvé d'autres. Je viens juste de réaliser que le "
#~ "package com.sun.jdi est aussi disponible dans /usr/lib/jvm/java-6-"
#~ "sun-1.6.0.26/lib/tools.jar sur mon disque. Il a l'air fonctionnel, je "
#~ "devrais essayer à nouveau."

#~ msgid ""
#~ "Afterward, I tried to reuse the debugging infrastructure of DrJava. It "
#~ "looks like a good idea because they have several helper interfaces for "
#~ "debugging and compiling. Also, they have a good editor that we could "
#~ "reuse. Finally, they have a strong testing infrastructure with junit "
#~ "ensuring that their tool still work after modifications (that's something "
#~ "we are seriously missing in PLM). I'm really thinking that the two tools "
#~ "should converge to something stronger. The only argument for not doing so "
#~ "(beside the amount of work it'll take) is that each of us get the credit "
#~ "for each tool where things would be more fuzzy on a mixed tool. But I "
#~ "don't care, the mixed tool would be so much cooler that I'd like to find "
#~ "the time to ensure this convergence."
#~ msgstr ""
#~ "Après cela, j'ai réessayé d'utiliser l'infrastructure de débuggage de "
#~ "DrJava. Cela semble être une bonne idée parce qu'il dispose de plusieurs "
#~ "interfaces d'aide pour le débuggage et la compilation. Il y a aussi un "
#~ "bon éditeur que l'on pourrait réutiliser. Finalement, ils ont un "
#~ "infrastructure solide de tests avec junit assurant que leur outil "
#~ "fonctionne toujours après modifications ( c'est quelque chose qui manque "
#~ "sérieusement dans la PLM). Je pense vraiment que les deux outils "
#~ "devraient fusionner en quelque chose de plus fort. Le seul argument pour "
#~ "ne pas le faire ( en plus de la quantité de travail nécessaire ) est que "
#~ "chacun d'entre nous reçoit les honneurs pour son outil alors que les "
#~ "choses seraient plus ambiguës sur un outil fusionné. Mais ce n'est pas "
#~ "important, l'outil fusionné serait bien plus cool que j'aimerai trouver "
#~ "le temps pour m'assurer que cela converge."

#~ msgid ""
#~ "But the debugging feature of DrJava seems to suffer from an issue: http://"
#~ "sourceforge.net/tracker/index.php?"
#~ "func=detail&aid=3004294&group_id=44253&atid=438935 I was suspecting a "
#~ "permission error (something related to com.sun.jdi.JDIPermission), but "
#~ "even with a java.security.AllPermission as permission file, I still have "
#~ "the issue."
#~ msgstr ""
#~ "Mais la fonction de débuggage de DrJava semble souffrir d'un problème : "
#~ "http://sourceforge.net/tracker/index.php?"
#~ "func=detail&aid=3004294&group_id=44253&atid=438935 je suspectais une "
#~ "erreur de permission (quelque chose lié com.sun.jdi.JDIPermission ), mais "
#~ "même avec un java.security.AllPermission comme fichier des permissions, "
#~ "j'ai encore ce problème."

#~ msgid ""
#~ "Another lead to get it working it to use lib ASM to modify the student "
#~ "code so that their recursive method gets traced. With the static "
#~ "backtrace and the tracing information, I guess I could rebuild the actual "
#~ "call tree. That seem to be possible: 2 sec of googling gave me something "
#~ "like http://rejeev.blogspot.com/2009/04/method-tracing.html"
#~ msgstr ""
#~ "Un autre moyen pour le faire fonctionner est d'utiliser la bibliothèque "
#~ "ASM pour modifier le code de l'étudiant afin que leur méthode récursive "
#~ "soit tracée. Avec le backtrace statique et l'information de traçage, je "
#~ "pense que je pourrais reconstruire l'arbre d'appels. Cela semble "
#~ "possible: deux secondes sur Google m'ont donné quelque chose comme http://"
#~ "rejeev.blogspot.com/2009/04/method-tracing.html"

#~ msgid ""
#~ "So, here I am. The lesson would be very interesting to students, and "
#~ "quite easy to finish once I manage to get the information I need, but I "
#~ "didn't manage to do so so far, despite my efforts. If you have any hint "
#~ "(or patch!), please email martin.quinson#loria.fr."
#~ msgstr ""
#~ "Donc, j'en suis là. La leçon serait très intéressante pour les étudiants, "
#~ "et assez facile à terminer une fois que j'aurais réussi à obtenir les "
#~ "informations dont j'ai besoin, mais je n'y suis pas parvenu jusqu'à "
#~ "présent, malgré mes efforts. Si vous avez un conseil ( ou un patch! ), "
#~ "merci d'envoyer un email à martin.quinson#loria.fr."

#~ msgid ""
#~ "This gives me the following todo actions: * Check whether tools.jar gives "
#~ "a working com.sun.jdi package * Find the DrJava bug around debugging to "
#~ "help them, and so that I can steal parts of their code about it for PLM "
#~ "(it's BSD'ed while PLM is mainly GPL'ed for now -- I'll have to ask them "
#~ "for an exception). That would be better since their helper interface seem "
#~ "to be able to deal with several debuggers (eclipse, sun or openjdk). "
#~ "That's quite a large amount of work I'd like to avoid duplicating.  * "
#~ "Check wheter I can get tracing info from ASM. It may be more robust to "
#~ "JVM variants than the debugging approach. On the other hand, debugging is "
#~ "a neat feature for PLM as is.  * Work on the convergence of PLM and "
#~ "DrJava. Beside of the licencing issue, it will also complicate the "
#~ "ongoing integration of PLM within Debian, since DrJava is composed of [[5 "
#~ "separated modules|http://drjava.org/docs/developer/ch02s03.html]] that "
#~ "can only be integrated as separated source packages. As every java "
#~ "package, no source archive is distributed, and they must be retrieved "
#~ "directly from the svn. Finally, they are quite huge, with sloccount "
#~ "reporting"
#~ msgstr ""
#~ "protected World [] initialWorld; \n"
#~ "protected World [] currentWorld; \n"
#~ "protected World [] answerWorld;  \n"

#~ msgid "Creating a new PLM world"
#~ msgstr "Créer un nouveau monde PLM (\"World\")"

#~ msgid ""
#~ "Welcome to the PLM Meta-Lesson. Its goal is to teach you how to write new "
#~ "universes in PLM. For that, we will reimplement the Hanoi world "
#~ "(available in the recursion lesson) step-by-step. This lesson covers "
#~ "quite advanced topics and suppose that you are fluent in Java and "
#~ "confident with the use of the PLM framework already. If you are not used "
#~ "to the framework already, you probably want to take another lesson "
#~ "before, like the welcome one or (maybe more fun) the maze one."
#~ msgstr ""
#~ "Bienvenue dans la Meta-Leçon PLM. Son but est de vous apprendre comment "
#~ "écrire de nouveaux univers dans la PLM. Pour ce faire, nous allons "
#~ "réimplanter le monde des tours de Hanoï ( disponible dans la leçon "
#~ "récursion ) pas à pas. Cette leçon couvre des sujets assez avancés et "
#~ "supporse que vous êtes à l'aise en Java et que vous connaissez déjà bien "
#~ "l'utilisation du framework de la PLM. Si vous n'êtes pas déjà habitué au "
#~ "frameword, vous voudrez probablement suivre une autre leçon avant, comme "
#~ "Welcome ou ( sans doute plus amusant ) Maze."

#~ msgid "Every PLM universe is composed of 4 main components:"
#~ msgstr "Chaque univers PLM est composé de quatre composants principaux"

#~ msgid "<b>The world</b>: it contains the state of the universe."
#~ msgstr "<b>Le monde (\"world\")</b> : il contient l'état de l'univers."

#~ msgid ""
#~ "<b>The view</b>: it allows to draw the world and the entities on the "
#~ "screen."
#~ msgstr ""
#~ "<b>La vue (\"View\")</b>: elle permet de dessiner le monde et les "
#~ "entitées à l'écran."

#~ msgid ""
#~ "<b>The entity ancestor</b>: the code written by the student will derive "
#~ "from this class, which contains some state specific to the entity, and "
#~ "every accessor to let the entity interact with its world."
#~ msgstr ""
#~ "<b>L' \"entity ancestor\"</b> :  le code écrit par l'étudiant sera dérivé "
#~ "de cette classe, qui contient certains états spécifiques à l'entité, et "
#~ "chaque accesseur pour permettre à l'entité d'intéragir avec le monde."

#~ msgid ""
#~ "<b>The entity interactive control panel</b>: this is the little panel "
#~ "displayed under the world view in the PLM interface. It allows to "
#~ "interactively control the selected entity. As you can see from the "
#~ "existing universes, this is optional, and if you don't provide any, the "
#~ "panel will remain blank, preventing the users from interactively "
#~ "controlling the entities."
#~ msgstr ""
#~ "<b>Le panneau de contrôle interactif de l'entité</b> : c'est le petit "
#~ "panneau affiché en dessous de la vue du monde dans l'interface de la PLM. "
#~ "Il permet de contrôler interactivement l'entité sélectionnée. Comme vous "
#~ "pouvez le voir avec les univers existants, c'est optionnel, et si vous "
#~ "n'en fournissez pas, le panneau restera vide, empêchant l'utilisateur de "
#~ "controler interactivement l'entité."

#~ msgid ""
#~ "In addition, worlds are used by exercises, themselves sorted in lessons."
#~ msgstr ""
#~ "De plus, les mondes sont utilisés pas les exercices, eux-mêmes rangés en "
#~ "leçons."

#~ msgid ""
#~ "<b>Lessons</b> are just a list of exercise. They can be sequential "
#~ "(meaning that the student has to finish one exercise before being allowed "
#~ "to see the next one in the list), altrough most of them are not (ie, "
#~ "students are free to attempt the exercises in the order they like)."
#~ msgstr ""
#~ "<b>Les leçons (\"Lessons\")</b> sont juste une liste d'exercices. Elles "
#~ "peuvent être séquentielles (ce qui signifie que l'étudiant doit finir "
#~ "l'exercise avant de pouvoir voir le suivant ), même si la grande majorité "
#~ "des leçons ne le sont pas ( ie, les étudiants sont libre d'essayer les "
#~ "exercices dans l'ordre qu'ils souhaitent)."

#~ msgid ""
#~ "In the future, we would like to have richer exercise ordering schema, "
#~ "where the requirements to fulfill to be allowed to try an exercise could "
#~ "be more complex.  The dependencies would probably turn into a graph "
#~ "instead of a chain.  But this is still to be done."
#~ msgstr ""
#~ "A l'avenir, nous aimerions disposer d'un ordonnancement d'exercices plus "
#~ "riche, où les conditions à remplir pour pouvoir essayer un exercice "
#~ "pourrait être plus complexes. Les dépendances deviendraient probablement "
#~ "un graphe au lieu d'être une chaîne. Mais cela reste encore à réaliser."

#~ msgid ""
#~ "The main element of each lesson is a class classically called Main, which "
#~ "simply contains a constructor adding each exercise of the lesson in row."
#~ msgstr ""
#~ "L'élément principal de chaque leçon est la classe communément appelée "
#~ "Main, qui contient simplement un constructeur ajoutant chaque exercice de "
#~ "la leçon l'un à la suite de l'autre."

#~ msgid ""
#~ "Each <b>exercise</b> object is in charge of instantiating the worlds "
#~ "used, set them up (adding walls and baggles in BuggleWorld, or changing "
#~ "the elevation and adding lamps in the LightBotWorld, etc), and populate "
#~ "them with entities correctly setup (location, color, etc)."
#~ msgstr ""
#~ "Chaque objet <b>exercise</b> a pour mission d'instancier les mondes "
#~ "utilisés, de les initialiser ( ajouter des murs et des baggles dans "
#~ "BuggleWorld, ou changer l'altitude et ajouter des lampes dans "
#~ "LightBotWorld, etc), et les peupler avec des correctement initialisées "
#~ "( emplacement, couleur, etc) ."

#~ msgid ""
#~ "Most of the exercises also provide a specific <b>answer entity</b> able "
#~ "to solve the exercise.  It serve both to compute the initial content of "
#~ "the code editor, and to compute the objective world. We will come back on "
#~ "this in a latter exercise of this meta-lesson."
#~ msgstr ""
#~ "La plupart des exercices fournissent aussi une <b>entité réponse "
#~ "<b>(\"answer entity\")</b> capable de résoudre l'exercice. Cela sert à la "
#~ "fois à afficher le contenu initial de l'éditeur de code, et à calculer le "
#~ "monde objectif. Nous reviendrons là-dessus plus tard dans un exercice de "
#~ "cette meta-leçon."

#~ msgid ""
#~ "The very first element you want to write in a new PLM universe is a "
#~ "partial world implementation including the internal state. In subsequent "
#~ "exercises, we will complete the World class to provide entities ways to "
#~ "interact and modify their world, and we will also implement the other "
#~ "elements of the universe."
#~ msgstr ""
#~ "Le premier élément que vous voulez écrire dans un nouvel univers de la "
#~ "PLM est une implémentation partielle du monde incluant l'état interne. "
#~ "Dans des exercices ultérieurs, nous complèterons la classe World pour "
#~ "fournir aux entités des moyens d'intéragir et de modifier leur monde, et "
#~ "nous implémenterons aussi les autres éléments de l'univers."

#~ msgid ""
#~ "Before you jump in writing your World implementation, you should "
#~ "understand the big PLM picture, and how worlds are used internally."
#~ msgstr ""
#~ "Avant que vous vous jetiez dans l'écriture de votre implémentation de "
#~ "World, vous devez comprendre le schéma de la PLM, et comment les mondes "
#~ "sont utilisés en interne."

#~ msgid "PLM worlds big picture"
#~ msgstr "Schéma des mondes de la PLM"

#~ msgid ""
#~ "As you know, every PLM exercise can contain one or several worlds, each "
#~ "containing one or several entities. The code written by the student is "
#~ "executed in the entities, which must interact with their world to change "
#~ "it from its initial state to its goal state."
#~ msgstr ""
#~ "Comme vous le savez, chaque exercice de la PLM peut contenir un ou "
#~ "plusieurs mondes, chacun contenant une ou plusieures entitées. Le code "
#~ "écrit par les étudiants est éxécutés dans les entitées, qui doivent "
#~ "intéragir avec leur monde pour le faire passer de son état initial à "
#~ "l'état objectif."

#~ msgid ""
#~ "This multiplication of worlds and entities is used to test the student "
#~ "code in several conditions. It can thus be parallelized to test cases, "
#~ "aiming at full testing coverage of the student code."
#~ msgstr ""
#~ "La multiplication des mondes et des entitées est utilisé pour tester le "
#~ "code de l'étudiant dans différentes conditions. Cela peut être comparé à "
#~ "des cas de tests, cherchant à tester entièrement le code de l'étudiant."

#~ msgid ""
#~ "Technically, in a given exercise, for every world accessible from the "
#~ "relevant combobox, there is three World objects. They live in plm.lesson."
#~ "Exercise:"
#~ msgstr ""
#~ "Techniquement, dans un exercice donné, pour chaque monde accessible "
#~ "depuis la liste déroulante, il y a trois objets World. Ils se trouvent "
#~ "dans plm.lesson.Exercise."

#~ msgid ""
#~ "The line number of the combobox gives the index to use in these arrays.  "
#~ "Each <code>initialWorld</code> is created by the exercise constructor."
#~ msgstr ""
#~ "Le numéro de ligne de la liste déroulante donne l'index utilisé dans ces "
#~ "tableaux. Chaque <code>initialWorld</code> est crée par le constructeur "
#~ "de l'exercice."

#~ msgid ""
#~ "<code>currentWorld</code> is the one displayed in the \"World\" tab of "
#~ "the interface. At the beginning, it is a plain copy of the initialWorld, "
#~ "but it gets modified when the student uses the interactive controls or "
#~ "when the program gets run. The \"Reset\" button reset it to be a perfect "
#~ "copy of the initial world."
#~ msgstr ""
#~ "<code>currentWorld</code> est celui affiché dans l'onglet \"World\" de "
#~ "l'interface. Au début, il s'agit d'une simple copie de initialWorld, mais "
#~ "il est modifié quand l'étudiant utilise les contrôles interactifs ou "
#~ "quand le programme est lancé. Le bouton \"Reset\" le remet à zéro afin "
#~ "qu'il redevienne une copie parfaite du monde initial."

#~ msgid ""
#~ "<code>answerWorld</code> is the one displayed by the \"Objective\" world. "
#~ "Basically, it's a copy of the initial world, on which we let the specific "
#~ "answer entity of this exercise run.  This default behavior can be "
#~ "overloaded by exercises, but you'll probably never have to do so. We will "
#~ "come back on this in a subsequent exercise."
#~ msgstr ""
#~ "<code>answerWorld</code> est celui affiché par le monde \"Objective\". "
#~ "Concrètement, il s'agit d'une copie du monde initial, sur lequel on a "
#~ "lancé le programme de l'\"answer entity\" de l'exercice. Ce comportement "
#~ "par défaut peut être modifié par les exercices, mais vous n'aurez "
#~ "probablement jamais à le faire. Nous reviendrons là dessus dans un "
#~ "exercice ultérieur."

#~ msgid "Implementing basic Worlds"
#~ msgstr "Implémenter des mondes basiques"

#~ msgid ""
#~ "The internal use of Worlds hidden, but the important point is that every "
#~ "World object has extend the plm.universe.World class and define the "
#~ "following methods and constructors:"
#~ msgstr ""
#~ "L'utilisation interne des mondes est cachée, mais le point important est "
#~ "que chaque objet World hérite de la classe plm.universe.World et définit "
#~ "les méthodes et constructeurs suivants :"

#~ msgid ""
#~ "<b>a copy constructor</b> which is used to copy initial worlds into "
#~ "currentWorld and answerWorld.  Its argument must be of the exact same "
#~ "type than the class itself, not Object (this is because we use Java "
#~ "introspection mechanism to search for such a constructor of the class).  "
#~ "For example, if you create a TotoWorld, your copy constructor must be "
#~ "declared as this:"
#~ msgstr ""
#~ "<b>un constructeur copie</b> qui est utilisé pour copier le monde initial "
#~ "en currentWorld et answerWorld. Son argument doit être du même type que "
#~ "la classe elle-même, et non pas de type Object ( c'est parce que nous "
#~ "utilisons le mécanisme d'introspection Java pour rechercher un tel "
#~ "constructeur dans la classe). Par exemple, si vous créer un TotWorl, "
#~ "votre constructeur votre constructeur copie doit être déclaré ainsi :"

#~ msgid ""
#~ "public TotoWorld(TotoWorld other) {...} // Correct\n"
#~ "public TotoWorld(Object other) {...} // FALSE\n"
#~ "public TotoWorld(World other) {...} // also FALSE\n"
#~ msgstr ""
#~ "public TotoWorld(TotoWorld other) {...} // Correct\n"
#~ "public TotoWorld(Object other) {...} // Faux\n"
#~ "public TotoWorld(World other) {...} // Faux\n"

#~ msgid ""
#~ "The content of this constructor is usually a simple call to the "
#~ "<code>super(World w)</code> constructor, but this constructor cannot be "
#~ "omitted."
#~ msgstr ""
#~ "Le contenu de ce constructeur est généralement un simple appel au "
#~ "constructeur<code>super(World w)</code>, mais ce constructeur copie doit "
#~ "exister."

#~ msgid ""
#~ "One or several <b>regular constructors</b> initializing the state of the "
#~ "object. They will be used by the exercise constructor to instantiate your "
#~ "world. Since you usually write both the world and the lessons, you are "
#~ "completely free to specify the parameters you want to your constructor. "
#~ "It should use the <code>super(String name)</code> constructor to setup "
#~ "the very basic elements of your world."
#~ msgstr ""
#~ "Un ou plusieurs <b>constructeurs normaux</b> initialisant l'état de "
#~ "l'objet. Ils seront utilisés par le constructeur de l'exercice pour "
#~ "instancier votre monde. Puisque vous écrivez généralement le monde et les "
#~ "leçons, vous êtes complètement libre de spécifier les paramètres que vous "
#~ "voulez pour votre constructeur. Il doit néanmoins utilise le constructeur "
#~ "<code>super(String name)</code> pour initialiser les éléments basiques de "
#~ "votre monde."

#~ msgid ""
#~ "Optionally, you may also want to use the <code>setDelay(int delay)</code> "
#~ "method to change the initial animation delay. For example, the "
#~ "SortingWorld set this to 1 to speed animations up. This is the delay in "
#~ "milliseconds between each animation step during a continuous run."
#~ msgstr ""
#~ "Vous pouvez, de manière facultative, utiliser la méthode "
#~ "<code>setdelay(int delay)</code> pour changer le délai initial de "
#~ "l'animation. Par exemple, dans SortingWorld, mettez le à 1 pour accélérer "
#~ "l'animation. C'est le délai en millisecondes entre chaque pas d'animation "
#~ "durant un programme continu."

#~ msgid ""
#~ "A <b>reset() method</b> taking one World as parameter, and in charge of "
#~ "copying the state of the parameter into the current world. This is "
#~ "naturally used when you press the \"Reset\" button, or at the beginning "
#~ "of each run."
#~ msgstr ""
#~ "Une méthode <b>reset()</b> prenant un World en paramètre, et ayant pour "
#~ "mission d'affecter l'état du paramètre dans le monde courant. C'est "
#~ "naturellement utilisé quand vous appuyez sur le bouton \"Reset\", ou au "
#~ "début de chaque lancement de programme."

#~ msgid ""
#~ "The length of this method naturally depends on the complexity of your "
#~ "world state. In hanoi, there is only 3 slots containing a list of disc so "
#~ "that will be quite easy, but this can be quite complicated for complex "
#~ "worlds such as BuggleWorld."
#~ msgstr ""
#~ "La longueur de cette méthode dépend naturellemetn de la complexité de "
#~ "l'état de votre monde. Dans Hanoi, il y a seulement trois tours contenant "
#~ "une liste de disques, cela sera donc très facile, mais cela peut être "
#~ "bien plus compliqué avec des mondes complexes comme BuggleWorld."

#~ msgid "Allowing the graphical rendering of Worlds"
#~ msgstr "Permettre le rendu graphique des mondes"

#~ msgid ""
#~ "Some specific steps naturally must be taken so that PLM can graphically "
#~ "display your world. Usually, you must write a specific class extending "
#~ "plm.universe.WorldView, and provide some protected methods so that the "
#~ "View can retrieve the state to display. In this particular exercise, the "
#~ "view is provided (you will write you own one in next exercise), so you "
#~ "only have to implement the right accessor."
#~ msgstr ""
#~ "Certaines étapes spécifiques doivent naturellement être prise afin que la "
#~ "PLM puisse afficher graphique votre monde. Usuellement, vous devez écrire "
#~ "une classe spécifique héritant de plm.universe.WorldView, et fournissant "
#~ "des méthodes \"protected\", afin que la vue puisse récupérer l'état à "
#~ "afficher. Dans cet exercice particulier, la vue vous est fournie ( vous "
#~ "en écrirez une dans le prochain exercice ), donc vous n'avez qu'à "
#~ "implémenter le bon accesseur."

#~ msgid "Implementing your HanoiWorld"
#~ msgstr "Implémenter votre HanoiWorld"

#~ msgid ""
#~ "The main task of this exercise is to modify the provided template to "
#~ "store the state of the world. Since the exercise provides a view and "
#~ "automatically instantiate your world, you cannot change the instantiation "
#~ "constructor, nor the rendering accessor (see the code template for there "
#~ "prototype). But you are completely free about how you actually store the "
#~ "state in your object."
#~ msgstr ""
#~ "La tâche principale de cet exercice est de modifié le code fourni pour "
#~ "sauvegarder l'état du monde. Puisque l'exercice fournit une  vue et "
#~ "instancie automatiquement le monde, vous ne pouvez pas changer le "
#~ "constructeur d'instanciation, ni l'accesseur de rendu graphique "
#~ "( regardez le code fourni pour leurs prototypes ). Mais vous êtes "
#~ "complètement libre sur comment vous allez sauvegarder l'état dans votre "
#~ "object."

#~ msgid ""
#~ "During the implementation of the Hanoi world, I changed my internal "
#~ "representation several times, to adapt to the code needs. My first try "
#~ "was only simply three ArrayList&lt;Integer>, for each slots, while the "
#~ "final design used an inner class called HanoiSlot, containing an integer "
#~ "array and providing friendly functions such as <code>push()</code>, "
#~ "<code>pop()</code> and <code>top()</code>. Even if it really becomes "
#~ "necessary when implementing the action methods allowing the entities to "
#~ "interact with their world, I advise you to design an inner class from the "
#~ "beginning."
#~ msgstr ""
#~ "Pendant l'implémentation du monde des Tours de Hanoï, j'ai changé ma "
#~ "représentation interne à plusieures reprises, afin de l'adapter aux "
#~ "besoins du code. Mon premier essai était simplement trois ArrayList&lt;"
#~ "Integer>, une pour chaque tour, tandis que la version finale fournit une "
#~ "classe interne, nommé HanoiSlot, contenant un tableau d'entier et "
#~ "fournissant des fonctions sympathiques telles que <code>push()</code>, "
#~ "<code>pop()</code> and <code>top()</code>. Même si cela ne devient "
#~ "réellement nécessaire que quand vous implémenter les méthodes d'actions "
#~ "permettant aux entitées d'intéragir avec leur monde, je vous conseille de "
#~ "concevoir une classe interne dès le départ."

#~ msgid ""
#~ "You probably want to add 3 fields to your World, one for each slot (we "
#~ "will never try to have worlds with more than 3 slots), store the content "
#~ "of each slot in the instantiation constructor, and retrieve the content "
#~ "of a specific slot in the rendering accessor (<code>Integer[] "
#~ "values(Integer i)</code>)."
#~ msgstr ""
#~ "Vous voudrez probablement ajouter trois champs à votre monde, un pour "
#~ "chaque tour (on n'essayera jamais d'avoir des mondes avec plus de trois "
#~ "tours), sauvegarder le contenu de chaque tour dans le construction "
#~ "d'instanciation, et récupérer le contenu d'une tour donnée dans "
#~ "l'accesseur de rendu graphique (<code>Integer[] values(Integer i)</code>)."

#~ msgid ""
#~ "That seems quite a lot of code to write compared to the other PLM "
#~ "exercises, but at the end, my HanoiWorld implementation is less than 100 "
#~ "lines long, which is not that much."
#~ msgstr ""
#~ "Cela semble être beaucoup de code à écrire comparé aux autres exercices "
#~ "de la PLM, mais en fin de compte, mon implémentation de HanoiWorld fait "
#~ "moints de cent lignes, ce qui n'est pas beaucoup."
