VB2005 affichage de 4 chiffres - VB/VBA/VBS - Programmation
Marsh Posté le 21-11-2007 à 09:39:21
Je ne suis pas sûr d'avoir compris ton problème, mais tu peux coder tes barres de manière binaire (0=éteinte, 1=allumée).
Vu qu'un chiffre est composé de 7 barres, tu peux le coder sur un octet.
Le fait d'avoir 4 chiffres nécessitera donc 4 octets.
Est-ce que ça t'aide ?
Marsh Posté le 21-11-2007 à 10:14:05
++ Je vois pas trop où ça bloque...
Tu traîtes chaque chiffre de ton nombre un à un (si tu sais pas faire un modulo et une division par 10, tu peux toujours passer par une chaîne de caractères)... Après que t'aie 1 chiffre ou 25000, ça changera rien à ton algo...
Marsh Posté le 21-11-2007 à 10:34:48
Je ne suis qu'un débutant sur Visual Basic.
Mon probléme est le suivant, si j'écrit 2054, mon affichage digitale ne saura pas a quel digit il doit attribuer chaque chiffre.
Je vais essayer de voir vos proposition mais je n'ai pas tout compris
Marsh Posté le 21-11-2007 à 14:47:21
Ben explique ton problème, parceque y'a rien de plus à dire par rapport à ce que tu nous a dit de ton problème...
Pis là c'est pas un souci de VB2005 spécifiquement, mais de l'algo pur et dur...
Parcourir chaque chiffre d'un nombre dans une boucle c quand même pas la fin du monde
Marsh Posté le 21-11-2007 à 14:57:45
En quoi ton affichage digital devrait « savoir » quoi que ce soit ?
Que je sache, en programmation c'est le codeur qui décide.
Là je te propose de coder 2054 par une suite de 4 octets (1 par chiffre pour faire simple)
Chaque bit d'un octet correspond à l'activation ou non d'une de tes barres.
Il suffit de convenir de l'ordre des barres par rapport à l'ordre des bits pour en faire une représentation graphique.
Par exemple 0010010 correspondrait à 1, suivant l'ordre :
vertical haut gauche, horizontal haut centre, vertical haut droit, vertical bas gauche, horizontal milieu, vertical bas droit, horizontal bas centre
Avec ce même ordre (et sauf erreur de ma part) on aurait 2 codé par 0111101
Évidemment pour le 8e bit de ton octet, tu choisis conventionnellement de mettre, soit 0, soit 1.
ps: ça n'est qu'une manière de faire parmi d'autres.
Marsh Posté le 21-11-2007 à 15:14:37
Ok je comprends ce que tu veux dire pour coder 1 (0010010) mais pour coder 2054 par exemple comment vais-je pouvoir faire?
En faite mon programme est le suivant: une personne rentre un nombre de 4 chiffres maximum et l'algorithme doit permettre d'afficher se nombre.
Marsh Posté le 21-11-2007 à 16:02:36
Grrrrr !
TU N'AS PAS A CODER 2054
La base de ton afficheur, c'est UN ET UN SEUL CHIFFRE qu'elle affiche.
Donc tu gères un et un seul chiffre à la fois.
Sauf que tu gères chacun des 4 chiffres l'un après l'autre.
En gros, actuellement, ton programme c'est :
Sasir un chiffre
Dessiner le chiffre
Maintenant ça devient
Saisir un nombre
Pour chaque chiffre du nombre
Dessiner le chiffre
Se décaller sur la droite de la largeur d'un chiffre
Fin pour
Spa compliqué...
t'as toujours qu'un et un seul chiffre à gérer
Même mieux, tu gardes ce que t'as fait, t'as juste à l'encapsuler dans une boucle, et gérer un décallage lors du dessin... C'est pas la mort quand même
Marsh Posté le 22-11-2007 à 10:25:50
Illustration
Obtenu simplement comme ça :
Code :
|
Digital est un petit contrôle que j'ai codé en vitesse histoire de faire l'exemple.
Code :
|
Maintenant, vu comme t'as l'air fluent, pas de pot c'est loin d'être une solution toute faite pour toi... Déjà c'est pas le même langage, mais surtout vu le niveau que t'as, si tu sors le code de ma classe à ton prof t'es grillé direct
Marsh Posté le 22-11-2007 à 10:31:11
D'autant qu'en relisant, je me rend compte qu'il y a un mega bug dans mes accesseurs de la propriété "IntDigit"
Marsh Posté le 27-11-2007 à 19:53:35
sinon
if nombre > 999 then goto routine_1000
if nombre > 99 and nombre < 1000 then goto routine_100
if nombre > 9 and nombre < 100 then goto routine_10
if nombre < 10 then goto routine_1
Routine_1000
Dim milliers, centaines, dizaines,unites, reste as integer
'on sait qu'on a forcement affaire à un nombre de 4 chiffres
' ici j'extraie le nombre representant les milliers
milliers = int(nombre/1000)
' ici je le soustraie au nombre initial
reste = nombre - milliers * 1000
'RECOPIER A PARTIR D'ICI LA FONCTION ROUTINE_100
'ici j'extraie le nombre representant les centaines
centaines = int(reste/100)
' ici je le soustraie au nombre initial
reste = nombre - centaines * 100
'RECOPIER A PARTIR D'ICI LA FONCTION ROUTINE_10
' ici j'extraie le nombre representant les dizaines
dizaines = int(reste/10)
' ici je le soustraie au nombre initial
reste = nombre - dizaines * 10
'RECOPIER A PARTIR D'ICI LA FONCTION ROUTINE_1
'ici il ne me reste plus que les unités
unites = reste
'voila comme ça tu as tous les chiffres composant ton nombre
ensuite tu peux ecrire :
if notisnull(milliers) then goto FonctionAffichageDuChiffreDesMilliers
if isnull((milliers) and not isnull(centaines) then goto FonctionAffichageDuChiffreDesCentaines
if isnull((centaines) and not isnull(dizaines) then goto FonctionAffichageDuChiffreDesDizaines
if isnull((centaines) and not isnull(unites) then goto FonctionAffichageDuChiffreDesUnites
ensuite tu crées tes fonctions indiquées ci dessous, tu n'a plus qu'à coder une "ligne" pour l'affichage de chaque chiffre pour les milliers, une ligne pour l'affichage de chaque chiffre des centaines etc etc ... unités
10 possibilités d'affichage mais :
quand tu veux afficher tes nombres à quatre chiffres, tu devas appeler tout à tour les fonctions suivantes :
FonctionAffichageDuChiffreDesMilliers
FonctionAffichageDuChiffreDesCentaines
FonctionAffichageDuChiffreDesDizaines
FonctionAffichageDuChiffreDesUnités
quand tu veux afficher tes nombres à trois chiffres, tu devas appeler tout à tour les fonctions suivantes :
FonctionAffichageDuChiffreDesCentaines
FonctionAffichageDuChiffreDesDizaines
FonctionAffichageDuChiffreDesUnités
quand tu veux afficher tes nombres à deux chiffres, tu devas appeler tout à tour les fonctions suivantes :
FonctionAffichageDuChiffreDesDizaines
FonctionAffichageDuChiffreDesUnités
quand tu veux afficher tes nombres à un chiffre, tu devas appeler la fonction suivante :
FonctionAffichageDuChiffreDesUnités
Voila voila voila, j'espère avoir aidé un peu...
Marsh Posté le 28-11-2007 à 18:59:53
des goto toutes les deux lignes
et aucune refactorisation du code...
FonctionAffichageDuChiffreDesMilliers
FonctionAffichageDuChiffreDesCentaines
FonctionAffichageDuChiffreDesDizaines
FonctionAffichageDuChiffreDesUnités
=> 4 fonctions, 4 fois rigoureusement le même code (y'a au max une ligne de déclaration qui diffère)
et une série de tests inutiles en début de code (plus exactement, qui sont redondants)
Marsh Posté le 28-11-2007 à 19:02:29
Pour résumé, tout ton paté est compressible en ça :
Code :
|
(cf mon code, sauf qu'au lieu de passer par une fonction, j'instancie un contrôle qui fait le rendu)
Marsh Posté le 20-11-2007 à 20:28:46
Bonjour!
J'aurais besoin d'un petit coup de pouce.
Je suis en DUT GMP et on m'a demandé de créer un algorythme sous VB2005 qui serait un affichage digitale.
J'ai donc créé cela en gros :
_______
| |
| |
_______
| |
| |
_______
J'ai attribué a chacune des barres une couleur suivant le chiffre que l'on rentre.
(ex:pour le 1 il n'y a que celle de droite qui s'allume les autres reste grise)
Mon probléme est le suivant, on me demande de faire la même chose mais avec 4 chiffres.Ma méthode n'est plus applicable car cela me ferait rentrer 9999 combinaisons différentes
C'est pou quoi j'aimerais savoir si vous auriez une astuce
Message édité par nimjaben le 20-11-2007 à 20:54:27
---------------
Feed-Back