Algorithmique & Programmation Semestre 2 ST 2014-2015 Evaluation intermédiaire Vendredi 13 mars 2015 13h30 - 15h |
|||||
|
|||||
|
|||||
Clavier.class - Ecran.class - Documentation | |||||
|
|||||
|
|||||
Les implantations demandées dans cette épreuve sont à réaliser en langage algorithmique à l'exception des questions 3a et 3c pour lesquelles
les codages en langage Java et en langage algorithmique sont demandés. a) Dans quelle mesure est-il possible de développer un type agrégé dont un ou plusieurs champs sont eux-mêmes de type agrégé? L'utilisation d'un type agrégé en tant que type de définition pour un champ créé au sein d'un type agrégé est possible. La seule restriction est que la création d'un cycle est interdite. C'est à dire qu'un type agrégé A ne peut pas contenir parmi ses champs un champ lui-même défini de type agrégé A. La notion de cycle est à étendre aux cycles plus longs. Par exemple, en longueur 2, le type agrégé A ne peut pas utiliser le type agrégé B si celui-ci utilise le type A pour l'un de ses champs. b) Quel est le rôle des paramètres d'entête d'un sous-algorithme?
Les paramètres d'entête permettent l'échange d'informations entre un sous-algorithme et l'algorithme qui va l'utiliser (l'appeler).
Chacun des paramètres est défini dans la liste des paramètres par son nom, par son type et par un modificateur qui indique dans quel sens est réalisée
la communication: c) De quels types peuvent être définis les composantes élémentaires d'un tableau? Les composantes élémentaires d'un tableau peuvent être définies de n'importe quel type prédéfini (booléen, réel, entier, caractère, chaîne de caractères) ou n'importe quel type défini/créé par le développeur (type agrégé voire type tableau). d) Un tableau étant défini de taille N entière, quel est l'intervalle de validité des indices de ses composantes? [0, N-1]
Lorsque l'on génère une série de 20 valeurs booléennes calculées individuellement avec la probabilité p d'obtenir un "vrai", le
nombre nbv de vrais comptabilisés sur cette série peut être 0, 1, 2, 3, 4, ..., 20. On souhaite analyser la distribution des valeurs nbv sur un échantillon
de 1000000 de séries de 20 booléens. On souhaite donc calculer combien de fois 0 vrai, combien de fois 1 vrai, combien de fois 2 vrais, ..., combien
de fois 20 vrais ont été obtenus.
Un certain nombre de problèmes élémentaires peuvent être extraits du problème complexe à programmer: constante N : entier <- 21 Un porte-monnaie peut contenir des pièces de 1, 2, 5, 10, 20, 50 centimes et des pièces de 1 et 2 euros. On souhaite modéliser et manipuler des porte-monnaie dans une application informatique. a) Définir un type agrégé porteMonnaie. Donner les codages en langage algorithmique et en langage Java. On stocke les nombres de pièces de 1, 2, 5, 10, 20, 50 centimes et les nombres de pièces de 1 et 2 euros. structure porteMonnaie En langage Java static class PorteMonnaie { On s'intéresse au problème consistant à déterminer si, pour une somme donnée sm comptée en euros et centimes d'euros, il existe une combinaison de tout ou partie des pièces contenues dans un porteMonnaie donné pm telle que le total des pièces de cette combinaison est égal à sm. Il est possible que 0, 1 ou plusieurs combinaisons existent suivant les valeurs respectives de sm et pm. Dit autrement, le problème consiste à déterminer si le contenu d'un porte-monnaie permet de rendre exactement une certaine somme. b) Décrire sans l'implanter informatiquement une technique utilisable pour tester si, une somme sm comptée en euros étant donnée, il existe une combinaison de tout ou partie des pièces contenues dans un porteMonnaie lui aussi donné telle que le total des pièces de cette combinaison est égal à sm.
Une technique simple à base de divisions entières et de modulo permettant une décomposition en partant de la pièce de 2 euros et en traitant les
pièces par ordre décroissant de valeur ne peut être utilisée ici car elle ne permet pas de résoudre toutes les situations rencontrées. Le problème
vient du fait qu'il existe des couples de valeurs de pièces tels que la valeur de la pièce de plus grande valeur ne peut pas être divisée par
la valeur de l'autre pièce: 50 et 20 centimes, 5 et 2 centimes. Par exemple ce type de décomposition pourrait conduire à conclure qu'il n'existe
pas de combinaison lorsque l'on souhaite rendre 110 centimes à partir d'un porte-monnaie contenant 2 pièces de 50 centimes et 3 pièces de
20 centimes. c) Définir l'entête (pas d'implantation du corps) du sous-algorithme que vous créeriez pour calculer, si elle existe, l'une des combinaisons de pièces dont l'existence est testée à la question (b). Donner les codages en langage algorithmique et en langage Java.
Le but est ici de calculer l'une des combinaisons de pièces correspondant à une somme donnée en euros et centimes d'euro pouvant être extraite
d'un porte-monnaie si les pièces qu'il contient le permettent. On dispose donc en données d'un porte-monnaie (un paramètre de type porteMonnaie)
et d'une somme (un paramètre de type réel). Deux résultats sont à obtenir: un booléen pour indiquer s'il a été possible de trouver une combinaison
et la combinaison. structure combinaisonPieces En langage Java, le passage de paramètre en "Résultats" n'existant pas pour le type booléen, le développement d'une fonction à résultat booléen est la meilleure solution. static class CombinaisonPieces { d) Développer entièrement un sous-algorithme permettant, si c'est possible en fonction des pièces qui y sont présentes, de retirer une somme exacte donnée d'un porteMonnaie donné.
La question (c) nous donne le sous-algorithme à utiliser pour calculer la combinaison de pièces qui va être retranchée au porte-monnaie. Il ne reste
à implanter que l'opération de retrait qui consiste à retrancher pièce pour pièce la combinaison trouvée. On développe une action. Celle-ci possède
deux paramètres: action retraitSomme(pm,sm) |
|||||
|
|||||
Commentaires sur la notation Outre la validation des techniques élémentaires de programmation abordées depuis le début du semestre, l'évaluation a porté sur la décomposition en sous-problèmes, l'implantation de sous-algorithmes de résolution de ces sous-problèmes et leur utilisation.
Exercice n°1 La somme des notes élémentaires est de 32.0. Cette note a été rapportée sur 22.0 par régle de 3. |