Cyrille COLIN TP de VARI
Calcul du compte est bon
Cette applet propose de résoudre le problème du compte est bon.
Hélas ,le temps a manqué pour terminer la gestion des exceptions.Ainsi pour tester l'applet il faut remplir tous les champs avec des valeurs superieurs à 0 et ne pas mettre le résultat à trouver dans les palquettes.
Le problème : il consiste à trouver un résultat compris entre 101 et 999 à l'aide de 6 plaquettes tirées au sort (parmis 2 plaquettes représentant les chiffres de 1 à 9 puis une de 10,25,50,75,100), en utilisant les opérations de base que sont l'addition, la soustraction, la multiplication et la division.Le tout en restant dans l'ensemble des entiers positifs.
Résolution du problème : pour la résolution de ce problème je souhaitais connaitre toutes les solutions possibles ce qui me contraint à calculer pour un problème donné dans le pire des cas :
combinaisons
Heureusement la contrainte de rester dans l'ensemble des entiers positifs limite le nombre des calculs possibles.Ainsi que les multiplications ou les divisions par un.Je laisse le soin aux personnes que cela intéressent de regarder le code.
Reste que la plus grande difficulté réside dans le filtrage des solutions.En effet pour un probléme on peut trouver de nombreuses solutions équivalentes ou comportant des étapes inutiles.La première des solutions est de travailler sur les combinaisons de plaquettes et non les plaquettes elles-même.Ceci évite dans le cas où il y a des plaquettes identiques de retrouver plusieurs fois les mêmes resultats et dans ce cas de les calculer réduisant ainsi le nombre de combinaisons.
Le deuxième filtrage : Si une solution contient les mêmes opérations qu'une autre solution ,la solution comportant le plus grand nombre d'opération est supprimée(ou à défaut, même nombre d'opération : solutions équivalentes, une est supprimée).
exemple : 3 2 6 100 (600)
Solution 1 : 3 x 2 = 6 , 6 x100 = 600
Solution 2 : 6 x 100 = 600
Seule la solution n°2 est retenue.
La classe CalculDuCompteEstBon
Après avoir créé un objet CalculDuCompte est bon : on utilise la méthode rempli(int[],int) : 1er paramètre : le tableau des plaquettes , 2ème le résultat à trouver.
Ensuite on lance le calcul avec la méthode compte(int) le paramètre étant le niveau de départ de la fonction récursive chargée du calcul toujours à 5 soit compte(5) à l'occasion je changerai ça.
Par la suite on recupère le nombre de solutions à l'aide de nbSolution() voir à titre info le nombre d'appels recursifs avec nb_appel()
Pour afficher les solutions on utilise uneSolution(int,int) 1er paramètre le numéro de la solution de 1 à nb solution , 2ème paramètre le rang de l'operation de 1 à 5. Pour les solutions resolue en moins de 5 opérations un caractère vide est renvoyé pour les rangs supérieurs.
Pour ceux qui ont eu le courage de lire jusqu'ici un petit exemple :