Outils pour utilisateurs

Outils du site


nsi:tds:entrepot

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

L'entrepôt et le robot cariste

Cet exercice permet de réviser les fondamentaux de la programmation.

On utilise une animation représentant un robot qui manipule des caisses dans un entrepôt.

Je vous fourni le fichier entrepot.py qui permet à l'animation de fonctionner. Vous n'avez pas besoin de connaître ou comprendre le détail du contenu de ce fichier. Il vous suffit de savoir comment vous en servir.

Le module

Exemple d'utilisation

Pour résoudre un problème, vous allez définir un script python, par exemple script.py. Ce script initialise l'animation et fait déplacer une caisse au robot.

On utilise souvent le mot script pour désigner un programme dans le cas de langages interprétés comme Python. L'idée est que l'intégralité du programme tient en un fichier très simple qui tiendrait sur une feuille de papier. On n'utiliserait pas le terme script pour un gros programme.

# script.py
from entrepot import robot, docks

robot.set_speed(10)
docks.set_sortie(9)
docks.set_caisses([2, 3, 2, 0, 0, 0, 5])

robot.prendre()
robot.droite()
robot.poser()

robot.fin()

Pour que cela fonctionne vous devez enregistrer votre script et placer entrepot.py dans le même dossier que script.py.

Explications

  • ligne 2 : on importe les objets robot et docks du module fourni. robot représente le robot et docks l'ensemble des compartiments.
  • lignes 4-6 : on définit les propriétés de l'entrepôt en indiquant comment sont réparties les caisses, où est la rampe de sortie…
  • lignes 8-10 : le robot fait ce qu'il a à faire…
  • ligne 12 : cette ligne permet de maintenir l'affichage de l'animation quand le programme est fini.

Les commandes disponibles

Concernant le robot

robot.position      # donne la position du robot
robot.gauche()      # déplace le robot d'un compartiment à gauche
robot.droite()      # déplace le robot d'un compartiment à droite
robot.prendre()     # le robot prend l'éventuelle caisse située en-dessous de lui
robot.poser()       # le robot pose la caisse qu'il tient dans le compartiment
robot.set_speed(10) # définit la vitesse d'animation. Ajustez selon la puissance du PC

Concernant les docks

docks.taille        # nombre de compartiments
docks.sortie        # position du dock de sortie, -1 s'il n'y en a pas
docks.occupation(i) # nombre de caisses dans le compartiment i
                    # compartiment courant si i pas précisé
docks.est_plein(i)  # indique si le compartiment est complètement rempli
                    # compartiment courant si i pas précisé
docks.est_vide(i)   # indique si le compartiment est vide
                    # compartiment courant si i pas précisé
docks.est_sortie(i) # indique si le compartiment est une rampe de sortie
                    # compartiment courant si i pas précisé

Aide

En console, après une première exécution, vous pourrez écrire :

>>> help(docks)

Vous verrez alors s'afficher l'aide indiquant toutes les fonctions utiles concernant docks. Idem pour robot.

Les problèmes

Les problèmes suivants sont progressifs.

Si vous implémentez une fonction dans l'un des problème, elle pourra resservir dans un autre.

Si vous avez déjà de bonnes notations de programmation, il est très probable que vous produisiez dès le début un programme pouvant répondre à plusieurs problèmes. C'est très bien. Les problèmes sont très découpés pour permettre à tous une progression en douceur.

Problème 1

# problème 1
from entrepot import robot, docks

robot.set_speed(10)
docks.set_sortie(9)    # rampe de sortie dans le compartiment 9
docks.set_caisses([1]) # 1 caisse dans le compartiment 0

# amener la caisse à la rampe de sortie

Problème 2

# Problème 2
from entrepot import robot, docks

robot.set_speed(10)
docks.set_sortie(9)
docks.set_caisses([5]) # 5 caisses dans le compartiment 0

# amener les 5 caisses à la rampe de sortiesortie.
Dans cette nouvelle version du problème, on peut bien sûr faire 5x la même chose que dans le problème 1, mais l'utilisation d'une boucle serait plus judicieuse.

Problème 3

# Problème 3
from entrepot import robot, docks
from random import randrange # pour générer entier à aléatoire

robot.set_speed(10)
docks.set_sortie(9)
docks.set_caisses([randrange(1, 5)]) # nombre de caisses aléatoire dans le compartiment 0

# amener les N caisses à la rampe de sortie
À présent, au moment de programmer, on ne sait pas combien il y aura de caisses dans le compartiment 0. Il faut donc programmer de façon plus générale.
Pensez à exécuter votre programme plusieurs fois pour voir s'il fonctionne pour différentes situations.

Fonction 1

La suite nécessite de savoir ce qu'est une fonction. Vous pouvez poursuivre si vous savez déjà, sinon il faudra y revenir plus tard dans le cours.

Écrire une fonction aller_au_compartiment(i) qui fait aller le robot au compartiment i, quelque soit le compartiment où il se trouve actuellement.

Problème 4

# Problème 4
from entrepot import robot, docks

robot.set_speed(10)
docks.set_sortie(9)
docks.set_caisses([0, 2, 3])

# amener toutes les caisses à la rampe de sortie

Problème 5

# Problème 5
from entrepot import robot, docks
from random import randrange

robot.set_speed(10)
docks.set_sortie(9)
docks.set_caisses([randrange(5) for i in range(4)]) # état des compartiments aléatoire...

# amener toutes les caisses à la rampe de sortie

Problème 6

Pour résoudre ce problème, il sera préférable que vous écriviez les fonctions suivantes :

  • compartiment_max() qui renvoie le numéro de compartiment contenant le plus de caisses.
  • compartiment_min() qui renvoie le numéro de compartiment contenant le moins de caisses.
# Problème 6
from entrepot import robot, docks
from random import randrange # pour générer entier à aléatoire

robot.set_speed(10)
docks.set_max(10) # augmente la capacité des compartiments
docks.set_caisses([randrange(10) for i in range(20)])

# égaliser la hauteur des caisses dans les compartiments
Attention, pas de rampe de sortie dans cet exercice. On déplace les caisses d'un compartiment à l'autre afin d'égaliser les hauteurs.
nsi/tds/entrepot.txt · Dernière modification : de goupillwiki