Skip to content

Commit

Permalink
parcourt d'un échiquier (fin)
Browse files Browse the repository at this point in the history
  • Loading branch information
sdpython committed Mar 22, 2015
1 parent a246598 commit 6a445d6
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 17 deletions.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Expand Up @@ -69,7 +69,7 @@ Bibliographie
avec le langage Python. Le livre est gratuit en ligne.


Lorsqu'on programme, il ne faut hésiter à chercher les réponses
Lorsqu'on programme, il ne faut pas hésiter à chercher les réponses
sur Internet avec un moteur de recherche. On tombe sur des sites,
des forums où on trouve le plus souvent
pas mal de réponses à pas mal de questions.
Expand Down
61 changes: 48 additions & 13 deletions _doc/sphinxdoc/source/programmation/parcours_echiquier.rst
Expand Up @@ -8,33 +8,68 @@ Parcours d'un échiquier

A partir de 7 ans.

L'objectif de l'exercice est de découvrir que pour décrire un algorithme,
il faut être très précis. C'est pourquoi on a inventé les langages informatiques.

Mise en scène
-------------

* On dispose un échiquier.
* Il y a trois personnes.
* On cache les yeux du troisième.
* La première personne parcourt à sa façon toutes les pièces de l'échiquier devant le
la seconde personne.
* La seconde personne explique à la troisième ce qu'elle a vu,
celle-ci a toujours les yeux bandés.
* On enlève le bandeau.
* La troisième personne doit reproduire ce qu'a fait la première à partir
ce ce qu'on lui a expliqué.
#. On dispose un échiquier.
#. Il y a trois personnes.
#. On cache les yeux du troisième.
#. La première personne prend un pion et parcourt avec ce pion
toutes les pièces de l'échiquier devant le
la seconde personne, de la manière de son choix (pas trop compliquée quand même).
#. La seconde personne explique à la troisième ce qu'elle a vu,
celle-ci a toujours les yeux bandés.
#. On enlève le bandeau.
#. La troisième personne doit reproduire ce qu'a fait la première à partir
de ce qu'on lui a expliqué.


.. image:: https://raw.githubusercontent.com/sdpython/code_beatrix/master/src/code_beatrix/scratch/example_echiquier/echiquier.png
:width:500
.. image:: ../../../../src/code_beatrix/scratch/example_echiquier/echiquier.png
:width: 300 px

On recommence avec d'autres façons de parcourir l'échiquier.

Questions
---------

#. Lors des différentes description de parcours proposées, y a-t-il des répétitions ?
#. Est-il possible de prendre n'importe quelle parcours
et de reformuler sa description avec les trois instructions :
* répéter *n* fois,
* avancer d'une case dans une direction (droite, gauche, haut, bas),
* sauter à une case précise ?
#. Peut-on choisir un parcours et donner la liste ordonnées des cases parcourues ?


Exercice 1
----------

Il faut programmer un des parcours de l'échiquier
avec `Scratch <https://scratch.mit.edu/>`_.
On pourra compléter ce projet
:download:`echiquier0.sb2 <https://github.com/sdpython/code_beatrix/raw/master/src/code_beatrix/scratch/example_echiquier/echiquier0.sb2>`_.
:download:`echiquier0.sb2 <../../../../src/code_beatrix/scratch/example_echiquier/echiquier0.sb2>`.


Exercice 2
----------

On repère chaque case de l'échiquier par son numéro de ligne et son numéro de colonne
(en commançant à 0 et non pas 1).
Pour chaque case, on calcule ::

(numéro de ligne) * 8 + numéro de colonne
#. On calcule de nombre pour chaque case. Y-a-il des cases qui portent le même numéro ?
Comment décrire le trajet d'un pion qui parcourt tous les cases dans le sens croissant
des numéros ?
#. Donner une formule qui correspond au parcourt suivant ?
Les numéros ne doivent pas forcément être contigüs.

.. image:: parcours_diag.png




Expand Down
Expand Up @@ -9,15 +9,101 @@ Parcours d'un échiquier (solution)
Solution de :ref:`l-prog_parcours_echiquier`.


.. image:: echiquier1.png

Questions
---------

#. Sauf si le parcours est tout-à-faire aléatoire, il y aura des répétitions.
Par exemple, répéter 8 fois : avancer d'une case vers la droite.

#. On considère le parcours suivant qui consiste à parcourir toutes les lignes de gauche à droite
et de bas en haut :

.. image:: echiquier_parcours1.png
:width: 300 px

On le décrit comme suit :
* Répéter 8 fois pour toutes les lignes de bas en haut
* Aller au début de la ligne
* Répéter 8 fois, avancer d'une case vers la droite

#. La première étape consiste à nommer chaque case.
On reprend la désignation courante d'un `échiquier <http://fr.wikipedia.org/wiki/%C3%89chiquier>`_ ::
A1 B1 C1 D1 E1 F1 G1 H1
A2 B2 C2 D2 E2 F2 G2 H2
...
A8 B8 C8 D8 E8 F8 G8 H8
Si on remplace les lettres par des nombres puis on enlève 1, cela donne ::

0,0 1,0 2,0 3,0 4,0 5,0 6,0 7,0
0,1 1,1 2,1 3,1 4,1 5,1 6,1 7,1
...
0,7 1,7 2,7 3,7 4,7 5,7 6,7 7,7


Exercice 1
----------

Le programme scratch :download:`parcours 1 <https://github.com/sdpython/code_beatrix/raw/master/src/code_beatrix/scratch/example_echiquier/echiquier.sb2>`
Le programme scratch :download:`parcours 1 <../../../../src/code_beatrix/scratch/example_echiquier/echiquier.sb2>`
reproduit un parcours de l'échiquier
toujours de gauche à droite en partant des lignes du bas pour
remonter jusqu'à la première ligne.

Les variables *x* et *y* prennent tour à tour les positions décrites lors de la
question 3 du paragraphe précédent.


.. image:: echiquier1.png


Exercice 2
----------

Lorsqu'on numérote toutes les cases en appliquant la formule ::

(numéro de ligne) * 8 + numéro de colonne
Cela donne ::

56 57 58 59 60 61 62 63
48 49 50 51 52 53 54 55
40 41 42 43 44 45 46 47
32 33 34 35 36 37 38 39
24 25 26 27 28 29 30 31
16 17 18 19 20 21 22 23
8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7


Ce parcourt correspond à celui décrit lors de la question 2.


105 98 91 84 77 70 63 56
97 90 83 76 69 62 55 48
89 82 75 68 61 54 47 40
81 74 67 60 53 46 39 32
73 66 59 52 45 38 31 24
65 58 51 44 37 30 23 16
57 50 43 36 29 22 15 8
49 42 35 28 21 14 7 0

Et la formule qui a permis de le construire ::

(numéro de ligne - numéro de colonne) * 8 + numéro de colonne + 49
Et le programme python ::

row = []
for i in range(0,8):
s = ""
for j in range(0,8):
x = (i-j)*8 + j + 49
s += " %03d" % x
row.append(s)
row.reverse()
print("\n".join(row))
Pour obtenir le parcours, il suffit de trier les cases de l'échiquier en les classant
selon les valeurs croissantes de la formule.
4 changes: 3 additions & 1 deletion _doc/sphinxdoc/source/sessions/session_2015_03_25.rst
Expand Up @@ -43,13 +43,15 @@ Découverte des données :

Découverte de la programmation :

* l'échiquier
* :ref:`l-prog_parcours_echiquier`



Solutions
---------

* :ref:`l-prog_parcours_echiquier_sol`


Pour aller plus loin
--------------------
Expand Down

0 comments on commit 6a445d6

Please sign in to comment.