forked from Open-CT/openct-tasks
144 lines
7.1 KiB
HTML
144 lines
7.1 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>training-array-1D</title>
|
|
<script>
|
|
window.stringsLanguage = 'fr';
|
|
</script>
|
|
<script class="remove" type="text/javascript" src="../../../_common/modules/pemFioi/importModules-1.4-mobileFirst.js" id="import-modules"></script>
|
|
<script class="remove" type="text/javascript">
|
|
var modulesPath = '../../../_common/modules/'
|
|
importModules([
|
|
'jquery-1.7.1', 'JSON-js', 'raphael-2.2.1', 'beaver-task-2.0', 'jschannel', 'raphaelFactory-1.0', 'delayFactory-1.0', 'simulationFactory-1.0',
|
|
'platform-pr', 'buttonsAndMessages', 'beav-1.0', 'installationAPI.01', 'miniPlatform',
|
|
'conceptDisplay-1.0', 'conceptViewer-1.0', 'conceptViewer_css-1.0',
|
|
'taskStyles-mobileFirst', 'blockly-robot-1.0']);
|
|
// set Blockly as default language when none is specified through ?language=
|
|
importLanguageModules('blockly');
|
|
</script>
|
|
<script class="remove" type="text/javascript">
|
|
var json = {
|
|
"id": "http://castor-informatique.fr/questions/algorea_training/training-array-1D",
|
|
"language": "fr",
|
|
"version": "fr.01",
|
|
"authors": "Mathias Hiron",
|
|
"translators": [],
|
|
"license": "",
|
|
"taskPathPrefix": "",
|
|
"modulesPathPrefix": "",
|
|
"browserSupport": [],
|
|
"acceptedAnswers": [""],
|
|
"fullFeedback": true,
|
|
"minWidth": "auto"
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="task.js"></script>
|
|
</head>
|
|
<body onresize="task.displayedSubTask.updateScale()">
|
|
<div id="task">
|
|
<h1>Dernière ligne</h1>
|
|
<img src="red_robot.png" style="display:none" />
|
|
<img src="paint.png" style="display:none" />
|
|
<img src="marker.png" style="display:none" />
|
|
<img src="marker_white.png" style="display:none" />
|
|
<img src="icon.png" style="display:none" />
|
|
|
|
<div id="tabsContainer"></div>
|
|
<div id="taskContent" style="text-align:left;position:relative">
|
|
<div id="taskIntro">
|
|
<div>
|
|
<p>
|
|
Programmez le robot pour qu'il peigne toutes les cases contenant un marqueur noir.
|
|
<span class="easy">Il s'agit des cases qui sont juste en dessous d'une case ayant un marqueur blanc.</span>
|
|
<span class="medium">Les marqueurs noirs de la rangée du bas correspondent aux marqueurs blanc de la rangée du haut, retournée : la case 2 contient un marqueur noir si la case 15 de la première ligne a un marqueur blanc, la case 3 a un marqueur noir si la case 14 de la première ligne a un marqueur blanc, etc.</span>
|
|
<span class="hard">Une case de la rangée du bas est marquée en noir s'il y a plus de marqueurs que de cases vides au-dessus d'elle.</span>
|
|
</p>
|
|
<p>
|
|
La difficulté est qu'une fois qu'il est passé sur la deuxième ligne, votre robot ne peut plus remonter !
|
|
</p>
|
|
<p>
|
|
Votre programme doit fonctionner sur les deux tests.
|
|
</p>
|
|
</div>
|
|
<div class="long">
|
|
<div class="easy">
|
|
<p>
|
|
Votre programme doit donc mémoriser quelles cases ont des marquers sur la première ligne, puis utiliser cette mémoire pour déterminer quelle cases peindre sur la deuxième ligne.
|
|
</p>
|
|
<p>
|
|
Une possibilité serait de créer une variable par case pour stocker les valeurs du capteur :
|
|
</p>
|
|
<img data-lang="blockly" src="nolist_write_blockly.png" style="height:160px"/>
|
|
<img data-lang="scratch" src="nolist_write_scratch.png" style="height:220px"/>
|
|
<pre data-lang="python">
|
|
droite()
|
|
peintureSurCase2 = peintureSurCase()
|
|
droite()
|
|
peintureSurCase3 = peintureSurCase()
|
|
droite()
|
|
peintureSurCase4 = peintureSurCase()
|
|
...
|
|
</pre>
|
|
<p>
|
|
Puis pour chaque case de la deuxième ligne, lire la variable correspondante pour déterminer s'il faut peindre :
|
|
</p>
|
|
<pre data-lang="python">
|
|
droite()
|
|
if (peintureSurCase2):
|
|
peindre()
|
|
droite()
|
|
if (peintureSurCase3):
|
|
peindre()
|
|
...
|
|
</pre>
|
|
<img data-lang="blockly" src="nolist_read_blockly.png" style="height:180px"/>
|
|
<img data-lang="scratch" src="nolist_read_scratch.png" style="height:200px"/>
|
|
<p>
|
|
Plutôt que d'utiliser 15 variables différentes pour stocker pour chacune des 15 cases devant le robot, si elle est peinte ou non, vous allez utiliser une liste. Une liste est une variable qui peut contenir plusieurs cases. On commence par créer une liste <span data-lang="blockly">vide</span><span data-lang="python">de 17 cases à 0</span>, que l'on met dans une variable :
|
|
</p>
|
|
<pre data-lang="python">
|
|
peintureSurCases=[0]*17
|
|
</pre>
|
|
<img data-lang="blockly" src="list_init_blockly.png" style="height:35px"/>
|
|
<img data-lang="scratch" src="list_init_scratch.png" style="height:55px"/>
|
|
<p>
|
|
On peut ensuite stocker des valeurs dans des cases de la liste, en indiquant leur numéro et la valeur que l'on souhaite stocker dans la case qui porte ce numéro.
|
|
</p>
|
|
<p>
|
|
Ici, on veut stocker la valeur du capteur pour chacune des 15 cases devant le robot. On utilise donc un capteur qui indique le numéro de la colonne
|
|
du robot, comme numéro de case où stocker la réponse du capteur quand on se trouve sur cette case :
|
|
</p>
|
|
<pre data-lang="python">
|
|
for loop in range(15):
|
|
droite()
|
|
peintureSurCases[colonne()] = peintureSurCase()
|
|
</pre>
|
|
<img data-lang="blockly" src="list_write_blockly.png" style="height:110px"/>
|
|
<img data-lang="scratch" src="list_write_scratch.png" style="height:140px"/>
|
|
<p>
|
|
Une fois sur la deuxième case, on pourra relire la valeur mémorisée comme ceci :
|
|
</p>
|
|
<pre data-lang="python">
|
|
if (peintureSurCases[colonne()]):
|
|
peindre()
|
|
</pre>
|
|
<img data-lang="blockly" src="list_read_blockly.png" style="height:80px"/>
|
|
<img data-lang="scratch" src="list_read_scratch.png" style="height:110px"/>
|
|
</div>
|
|
<div class="medium">
|
|
<p>
|
|
Votre programme devra donc faire des calculs et comparaisons simples sur les numéros de colonnes.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="gridContainer"></div>
|
|
<div id="blocklyLibContent"></div>
|
|
</div>
|
|
|
|
</div><!-- task -->
|
|
</body>
|
|
</html>
|
|
|