~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période. Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.
~ Rechercher ~
~ Annuaire VB ~
~ Partenaires ~
|
Le compte est bon
compte.exe (le programme en VB6 natif) ~
compte.zip (les sources du programme)
Si VB 6.0 n'est pas installé sur votre ordinateur, vous aurez peut-être besoin d'installer les
Runtimes VB : DLL VB 6.0
Les deux DLL suivantes sont, en général, également nécessaires :
VB6FR.DLL ~
MSCOMCTL.OCX
(pour NT/2000, à copier dans WINNT\SYSTEM32 - pour 95/98/XP, à copier dans WINDOWS\SYSTEM)
Le programme est constitué d'une feuille et d'un module.
La feuille a cet aspect là :
- 7 zones de textes : 1 première grande, pour contenir le compte à rechercher et 6 autres plus petites,
pour recevoir le contenu des plaques.
- 2 boutons : 1 pour lancer la recherche, l'autre pour quitter l'application.
- 1 label destinée à afficher le résultat de la recherche.
|
|
Le module contient les fonctions de calcul et de recherche du compte.
Le principe utilisé dans ce programme pour trouver le bon à partir des 6 plaques est simple.
On part en fait du résultat à trouver, et par des calculs successifs sur ce chiffre, on essaye de l'amener jusqu'à zéro.
Le module de recherche prend les valeurs des plaques et applique les quatres opérations de base sur le chiffre
résultat. L'ordre actuel des opérations est la soustraction, la division, l'addition et la multiplication.
Tout le travail est fait de manière arborescente.
si Résultat - Plaque 1 = 0
alors le compte est bon et on sort sinon on fait le calcul suivant
si Résultat - Plaque 1 - Plaque 2 =0 alors le compte est bon sinon
si Résultat - Plaque 1 - Plaque 2 - Plaque 3 =0 alors le compte est bon sinon
...
ainsi de suite jusqu'à la plaque 6
si Résultat - Plaque 1 - Plaque 2 - Plaque 3 - Plaque 4 - Plaque
5 - Plaque 6 = 0 alors le compte est bon sinon on passe à l'opérateur suivant pour la dernière plaque,
si Résultat - Plaque 1 - Plaque 2 - Plaque 3 - Plaque 4 - Plaque
5 / Plaque 6 = 0 alors le compte est bon sinon on change encore d'opérateur,
si Résultat - Plaque 1 - Plaque 2 - Plaque 3 - Plaque 4 - Plaque
5 + Plaque 6= 0 alors le compte est bon sinon, etc...
On fait donc tourner les opérateurs sur toutes les plaques de manière recursive. On touche ainsi un grand
éventail de possibilités, et on a de fortes chances de tomber sur le résultat. Vous pouvez suivre bien sûr tout
le cheminement en mode 'Debug', mais attention, avec tous ces appels on se perd assez vite!
Cette méthode a l'inconvénient que l'on part du résultat pour obtenir la méthode de calcul. Ainsi, notre
tableau de plaque contient les opérations dans le sens inverse dans lequel elle doivent s'effectuer.
Par exemple, avec un compte de 437 et les plaques 2 5 7 9 10 25,
le programme trouvera le résultat dans ce sens :
437 + 2 - 5 - 9 / 25 - 7 -10 = 0
mais devra nous l'afficher de cette manière :
( 10 + 7 ) * 25 + 9 + 5 - 2
C'est pourquoi vous pouvez voir que dans les procédures qui
effectuent les opérations on stocke l'opérateur contraire avec la plaque.
De la même façon, lors de l'affichage du résultat, on part de
la dernière plaque pour remonter jusqu'à la première.
Vous pouvez noter qu'en changeant l'ordre des opérations, vous obtiendrez des temps de réponse différents,
à vous d'adapter cela pour avoir les meilleurs temps. Dans cette configuration, avec un Pentium 100 (32Mo)
et un exe compilé en natif, il faut environ une seconde pour trouver le compte ci-dessus. Et environ 10
secondes pour que le programme vous indique qu'il n'y a pas trouvé de solution. Attention, ce programme
n'explore pas toutes les possibilités mais seulement un très grand nombre, donc il est possible qu'il n'arrive
pas à résoudre certains problèmes.
Enfin, pour les utilisateurs de Microsoft Internet Explorer, j'ai à disposition une conversion en
VBScript de ce programme. Ce n'est pas aussi rapide qu'en compilation native,
mais ça peut vous donner une idée de ce que le programme fait réellement. Pour les utilsateurs de Netscape
Navigator, j'ai converti également, ce programme en JavaScript. Dans tous les
cas, la rapidité de calcul est lié à votre machine. Mais le temps reste tout de même raisonnable.
Sur ce, bonne réflexion avec le code suivant...
frmCompte.frm (
Afficher le code)
modCalculPur.bas (
Afficher le code)
|