Permalink
Browse files

tsp+

  • Loading branch information...
sdpython committed Mar 24, 2015
1 parent ba5f185 commit 49ce8dfc7544fe5c935136640e299fbb418f3dfa
@@ -1,12 +1,8 @@
Les enfants codaient
====================
On dira bientôt cela.
*On dira bientôt cela.*
**Liens :** `pypi <https://pypi.python.org/pypi/code_beatrix/>`_,
`github <https://github.com/sdpython/code_beatrix/>`_,
`documentation <http://www.xavierdupre.fr/app/code_beatrix/helpsphinx/index.html>`_,
`wheel <http://www.xavierdupre.fr/site2013/index_code.html#code_beatrix>`_
On programme pour faire des jeux, des sites internets, des recherches scientifiques,
pour automatiser une tâche qu'on ne souhaite plus faire à la main.
@@ -16,15 +12,18 @@ cultiver son imagination. Lire, lire
n'importe quel livre, pratiquer mais ne pas faire que ça.
Les exercices qui suivent ont pour objectif de faire découvrir la programmation
aux enfants principalement.
aux enfants principalement. Le début des exercices, dès qu'il
s'agit de manipuler, est accessible dès 6 ans (voir :ref:`l-difficulte`).
*L'intégralité de ce contenu est accessible via *
`github <https://github.com/sdpython/code_beatrix/>`_.
Patchworks
----------
Ces patchwork sont des découvertes organisées pour des groupes d'enfants.
Ces patchwork sont des parcours de découverte prévus pour un groupe d'enfants.
Les sujets abordées sont choisis dans la partie :ref:`l-contenu-range`.
@@ -36,8 +35,8 @@ Les sujets abordées sont choisis dans la partie :ref:`l-contenu-range`.
.. _l-contenu-range:
Contenu rangé
-------------
Contenu rangé par thèmes
------------------------
.. toctree::
:maxdepth: 1
@@ -47,18 +46,80 @@ Contenu rangé
programmation/index_programmation
arduino/index_arduino
.. _l-difficulte:
Niveaux de difficulté
---------------------
Apprendre la programmation ne nécessite pas nécessairement un écran
(lire `26 recommandations pour un usage raisonné des écrans par les enfants et adolescents (Académie des Sciences) <http://www.netpublic.fr/2013/01/recommandations-enfants-ecrans/>`_).
Il n'y a pas de manière idéale d'apprendre, chacun à sa manière de comprendre.
Pour moi, l'objectif n'est pas de tout comprendre mais de donner
à l'enfant l'envie d'apprendre seul, d'avoir envie de résoudre
un problème de la vie quotidienne par un programme.
A partir de là, c'est gagné.
Au gré de mes lectures, je distinguerais les niveaux suivants :
#. **Mémoriser, ordonner** : l'enfant sait ordonner des éléments : un grand objet est plus grand qu'un petit.
Il sait jouer au `memory <http://fr.wikipedia.org/wiki/Memory_%28jeu%29>`_.
#. **Compter, lire** : l'enfant sait lire et compter jusqu'à 100 et faire des additions et des multiplications
par des entiers.
#. **Métaphore** (ou *pseudonyme*) : ce terme est volontairement flou, il signifie que l'enfant est
capable de désigner les choses par un autre nom que celui qu'il connaît,
d'utiliser un pseudonyme,
de raconter une histoire avec ce nouveau nom,
de comprendre un niveau d'abstraction.
Par exemple, en mathématique, lorsqu'on résoud une équation, on désigne par *x*
la solution de l'équation. Elle est inconnue au moment où on commence
la résolution, elle est connue lorsque l'équation est résolue mais on
la manipule tout au long du calcul sans pour autant savoir ce qu'elle est.
A partir du moment où on écrit un programme informatique,
il faut assimiler le concept similaire de
`variable informatique <http://fr.wikipedia.org/wiki/Variable_%28informatique%29>`_.
Dès qu'on sait mémoriser et ordonner, on peut faire la plupart des débuts d'exercices,
surtout s'ils sont manuels. Il est préférable de savoir lire et compter pour commencer
à bâtir un raisonnement, décrire une méthode, expliquer une méthode.
Enfin, il faut assimiler ce qu'est une variable pour finalement rédiger cette méthode
avec un langage de programmation (voir également :ref:`l-variable_combien`).
**langages de programmation**
Pour apprendre à programmer, il faut programmer avec un langage de programmation.
Il faut savoir lire et compter. `Scratch <https://scratch.mit.edu/>`_
est très bien et bénéficie d'une communauté très active. Autrement dit,
si vous ne connaissez pas la solution, Internet le saura (via un moteur de recherche).
Lorsqu'on sait manipuler les variables, un langage plus écrit s'impose.
Je recommande `Python <https://www.python.org/>`_ qui est présent dans la plupart
des universités (pas seulement en France)
(voir également :ref:`l-choix_langage`).
Un bon langage de programmation est nécessairement de syntaxe anglaise.
Annexes
-------
.. toctree::
:maxdepth: 1
remerciements
getting_started
glossary
FAQ
index_et_autre
Pour les plus chevronnés, certains bouts de codes en python
pourront être réutilisés via
`pypi <https://pypi.python.org/pypi/code_beatrix/>`_
(ou `wheel <http://www.xavierdupre.fr/site2013/index_code.html#code_beatrix>`_).
@@ -191,7 +191,8 @@ <h3><a href="{{ pathto(master_doc) }}">{{ _('Top') }}</a></h3>
{%- if last_updated %}
<p class="last-updated">
{% trans last_updated=last_updated|e %}Dernière mise à jour {{ last_updated }}.{% endtrans %}
<a href="http://www.xavierdupre.fr/">Xavier Dupré</a>
<a href="http://www.xavierdupre.fr/">Xavier Dupré</a> -
<a href="http://lesenfantscodaient.fr">lesenfantscodaient.fr</a>
</p>
{%- endif %}
</footer>
@@ -11,8 +11,10 @@ Ce n'est qu'une indication, pour ma part, j'ai commencé à 11 ans
sur un `Amstrad CPC 464 <http://fr.wikipedia.org/wiki/Amstrad_CPC_464>`_.
J'installais des jeux depuis des `cassettes <http://fr.wikipedia.org/wiki/Cassette_audio>`_.
Préambule
---------
.. _l-choix_langage:
Quel langage de programmation pour commencer ?
----------------------------------------------
Comment commencer ? Comment apprendre lorsqu'on est tout seul et qu'on ne connaît
personne qui puisse aider ?
@@ -118,3 +118,21 @@ Et le programme python ::
Pour obtenir le parcours, il suffit de trier les cases de l'échiquier en les classant
selon les valeurs croissantes de la formule.
.. _l-variable_combien:
Combien vaut une variable ?
---------------------------
Lorsqu'on se sert de Scratch, on voit d'un côté un dessin qui représente un programme,
de l'autre une animation. D'un côté, le scénario, de l'autre, le film.
Quand on pose la question : combien vaut la variable *x* ?
Il est impossible de répondre si on n'arrête pas le film, il faut le mettre en pause.
A ce moment, on peut regarder combien vaut la variable *x*. Mais à l'instant d'après,
dès que le film se remet en marche, sa valeur change.
On ne se pose pas la question quand on voit le compte à rebours d'une bombe.
Que vaut-il ? Il reste cinq secondes, quatre, trois, ... Une variable,
même si on ne la voit pas, fonctionne de la même manière : ça bouge
tout le temps mais ça donne une information précise au moment où on la consulte.
@@ -0,0 +1,32 @@
Remerciements
=============
Je remercie Natacha Morsa qui m'invité chez `Coding And Bricks <http://www.codingandbricks.com/>`_
à animer un coding goûter sans ordinateur autour des
algorithmes. Ce fut le point de départ de ce site.
L'idée des codings goûter me trottait dans la tête depuis longtemps après qu'un ami
m'a fait découvrir le premier site qui en parlait
`coding goûter <https://www.facebook.com/groups/codinggouter/>`_.
Mais comme pour beaucoup de choses, j'ai besoin d'une deadline pour avancer.
Je remercie aussi Emmanuel Guérin sans qui je ne serais pas capable
de mettre ce site en ligne (et tous les autres aussi).
Enfin, mes amis, ma famille ont écouté patiemment toutes mes idées les plus folles,
les châteaux de riz dans la baignoire, des pavages sur le carrelage de la salle de bain...
Ils ont participé à la sélection des meilleures idées.
Contenu et apparence
^^^^^^^^^^^^^^^^^^^^
Le site est généré à l'aide des outils Python et du module Sphinx et aussi grâce
à la machinerie mise en place pour mes enseignements à
l'`ENSAE <http://www.ensae.fr/>`_ et dont
vous trouverez la trace à `modules python <http://www.xavierdupre.fr/site2013/index_code.html>`_.
Le design utilise le template `hachibee <https://github.com/hachibeeDI/Sphinx-hachibee-theme>`_.
@@ -23,6 +23,9 @@ On oublie tout le chemin qu'il faut parcourir pour **imaginer** une solution
à un problème. J'emploie le terme *imaginer* car, la plupart du temps,
il existe plein de solutions et déterminer la meilleure n'est pas toujours évident.
Il faut plein d'idées pour en avoir une bonne. On avance plus vite à deux,
les idées de l'un complètent celles de l'autre.
Sujets
@@ -44,7 +44,7 @@ sur le reste du chemin ?
Solution
--------
Voir :ref:`l-tsp_sol`.
Voir :ref:`l-algo_tsp_sol`.
A quoi ça sert ?
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,71 @@
.. issue.
.. _l-algo_tsp_sol:
Le voyageur de commerce (solution)
==================================
**Q1 :**
Le bouteille de départ n'est pas importante puisqu'il s'agit de faire le tour.
On peut donc démarrer de n'importe quelle bouteille, ce sera toujours le même tour.
**Q2 :**
Regardons sur la figure suivante :
.. image:: tsp_croix.png
Avec le chemin rouge qui se croise, on parcourt : Lyon, Paris, Strasbourg, Nantes.
Avec le chemin bleu qui ne se croise pas, on parcourt : Lyon, Strasbourg, Paris, Nantes.
Les points de départ et d'arrivée sont les mêmes. On a juste permuter
Strasbourg et Paris.
Pourquoi c'est plus court de ne pas croiser ?
Le parcours rouge est de même longueur que : Lyon, **C**, Strasbourg, Paris, **C**, Nantes
qui parcourt les villes dans le même ordre que le parcours bleu.
Sauf que aller de Lyon à Strasbourg en passant **C** est plus long que d'y aller
directement : c'est un détour. Donc, il suffit de ne pas passer par C. C'est plus court.
**Q3 :**
Quel est le chemin de plus court, le rouge ou le bleu ? Vaut-il mieux
faire ``ABC`` ou ``BAC`` ?
.. image:: tsp_croix2.png
La différence entre les deux parcours ? On a permuté les villes ``A`` et ``B``.
Peut-on faire pareil avec les points ``IJK`` ? La réponse est oui.
Par extension, si on a déjà tracé un chemin qui passe par toutes les villes,
on peut permuter deux villes consécutives et voir si cela raccourcit le chemin.
Par exemple, on peut essayer de permuter n'importe quelle ville avec n'importe
quelle autre. On peut imaginer à peu près n'importe quelle transformation à
partir de là.
Pour aller plus loin
--------------------
On rappelle le problème...
On considère un problème un petit peu différent. Pour recevoir des amis, il faut faire les courses en ville
et à pied. Il faut du pain (500 grammes), des pommes de terre (3 kg), du fromage (2 kg),
du vin (2 kg) et de la viande (1 kg).
Il faut donc aller à la boulangerie, chez le marchant de légumes, le fromager, le marchand de vin
et le boucher. On suppose que ce sont les commerçants de votre ville.
Dans quel sens faut-il faire les courses pour porter le moins possible ?
La solution complète attendra un peu. Mais en attendant voici deux indices sous forme
de questions :
#. Au début du chemin, combien de kilos porte celui qui fait les courses ? Et à la fin ?
#. Comment comparer deux chemins ?

0 comments on commit 49ce8df

Please sign in to comment.