Histoire de sac-à-dos

Dans cet exercice on va manipuler des objets que l'on va pouvoir empiler éventuellement dans un sac-à-dos virtuel. Ce sac-à-dos sera représenté par un tableau bidimensionnel pouvant contenir des formes. Ces Formes sont des Glomes (hypersphère de dimension 4), des Cubes, des Spheres, des Cylindres, des Carres et des Cercles.

Les formes possèdent un nom qui est consultable. Les formes de dimension 2 respectent un contrat qui consiste à pouvoir leur demander leur surface. De même les formes de dimension 3 et 4 respectent un contrat qui consiste à pouvoir obtenir leur volume. Certaines formes sont éventuellement empilables d'autre pas. Ainsi les formes de dimension 2 ne le sont pas, par contre celle de dimension 3 le sont et l'on va considérer que celle de dimension 4 ne l'est pas. Pour deux formes données elles sont empilables, si celle du dessous a une base plus grande que celle de la forme que l'on cherche à empiler. On considérera que la base d'une sphère est nulle.

Au départ on a donc un ensemble de Formes généré aléatoirement et un sac-à-dos de taille fixée à l'avance. Un sac-à-dos est un objet que l'on peut remplir par l'intermédiaire d'une méthode à l'aide des formes contenues dans l'ensemble généré en respectant la règle d'empilement déjà citées. On considère que le sac-à-dos est structuré en lignes et colonnes et on ne peut ajouter une forme dans le sac que si c'est sur la ligne du bas ou s'il existe déjà une forme dans la ligne du dessous pour la colonne donnée. D'autre part si l'on essaye d'empiler une forme non empilable on lévera une exception FormeNonEmpilable. On pourra interroger un sac-à-dos pour connaître le volume total des formes qu'il contient.

Vous testerez votre programme sur différentes situations : trop de Formes, sac-à-dos trop grand ; sac-à-dos suffisamment grand mais il faut organiser les Formes sinon certaines ne peuvent pas être mises dans le sac-à-dos.

Travail à rendre

  • Archive contenant les fichiers java commentés et des traces d'exécution.
  • La qualité du code sera prise en considération. Vous pouvez donc ajouter des méthodes et des classes qui ne sont pas évoquées ici, de façon à rendre vos classes les plus "propres" possibles.
  • Le travail est à déposer sur la plate-forme Eureka (Java avancé).

Volume d'un glome

0.5(π²)r⁴