Horloge binaire (optimisation du code)

Soyez le premier à donner votre avis sur cette source.

Vue 7 640 fois - Téléchargée 511 fois

Description

Bonjour, alors voila, je vous présente un petit programme qui n'a rien d'extraordinaire, si ce n'est d'afficher l'heure en binaire, c'est à dire avec des 0 et des 1 mais avec des diodes dans le programme

Je sais il faut être un psychopate pour faire un tel programme, mais si j'ai passé autant de temps dessus, c'est surtout pour être à la recherche de la meilleur optimisation possible du code, en gros j'ai du en faire des tas de versions et je pense que celui ci est le mieux optimisé que je puisse faire.

Ce que j'entend par optimisation, c'est à dire mon but recherché, c'était :

_la taille du programme final, le plus petit possible (Bon la plus grosse partie de la taille est du aux images, cad une image pour un bit 1 et une pour un bit 0 + l'icône du programme), la feuille principale (d'ailleur y en a qu'une seule) ne contiendra pas x contrôles Images pour chaque bit de l'horloge càd 5 pour l'heure, 6 pour les minutes et 6 pour les secondes, mais juste 1 seul contrôle pour l'heure, 1 pour les mintutes et 1 pour les secondes
les autres contrôles seront chargés au lancement du programme et mise en forme lors du chargement.

_ un code optimisé pour la performance du programme (j'ai du modifier à plusieurs reprise l'algorithme de calcul pour aboutir à celui ci qui m'a l'air le mieux adopté), en réduisant à une seule boucle For pour le calcul des bits et de l'affichage des bits

_ un programme qui prenne le moins de place possible en mémoire (j'ai du retirer une ImageList pour mettre 2 contrôles Images pour au moins les images des Bits) tout en gardant son coté graphique

On obtient au final un programme très petit en taille avec ses images dedans, donc transportable facilement en 1 fichier, grace à l'utilisation des indexes.
En contre partie lors du chargement il devra rajouter les nouveaux contrôles, ce qui n'est pas dérangeant, vu le gain de taille comparé au temps de chargement des contrôles.
Un algorithme assez correct et une taille en mémoire réduite par rapport à avant

Enfin bref , rien de fabuleux, mise à part que sur un programme tout bête comme une horloge, j'ai vu qu'il y avait toujours des moyens d'optimiser un programme, même s'il ne fait que 50 lignes, il suffit juste être motivé pour être à la recherche de l'optimisation

PS : Vous remarquerez que j'ai déclaré des variables stockant les heures, minutes, secondes en tant qu'entier long, le but étant d'éviter le programme à le reconvertir en 32 bits si je les déclarai en entier court ou en Byte, j'ai opté pour la performance dans ce cas la
Par contre la déclaration des variables de bits, j'ai fait tout le contraire, je les ai déclaré en booléen, mais bon ça m'avait l'air plus logique, on m'aurais pris pour un fou de déclarer une variable en long surtout si c'était pour stocker une valeur = à 0 ou à 1.

Valà n'hésitez pas à proposer d'autres codes concernant une horloge binaire, je pense qu'il doit y avoir d'autres possiblités pour l'optimiser et ça m'interesserai de connaître vos méthodes

N'héistez pas à commenter :)

Conclusion :


Bah la lecture de l'heure est assez simple et dure
Simple car la première ligne représente l'heure
la 2eme les minutes
et la 3eme les secondes

Dur car il faut le convertir pour réellement connaitre l'heure :)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

C'est marrant :)
Messages postés
608
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
22 décembre 2016

Si tu veux gagner quelques cycles sur le processeur...
(Mais on gagne rien sur la taille, le compilateur
doit optimiser pas mal ...)
tu peux essayer ce genre de chose :

' Procédure de mise à jour de l'horloge

Private Sub Timer_Timer()
Dim i As Long

Heure = Hour(Time)
Mins = Minute(Time)
Secs = Second(Time)

For i = 1 To 6
Select Case i
Case 1
Magic = 32
MagicH = 16
Case 2
Magic = 16
MagicH = 8
Case 3
Magic = 8
MagicH = 4
Case 4
Magic = 4
MagicH = 2
Case 5
Magic = 2
MagicH = 1
Case 6
Magic = 1
End Select


' Calcul Minutes
booMins = Mins \ Magic ' Calcul du bit
If Mins >Magic Then Mins Mins - Magic
If booMins Then ' Afficher l'état du bit
imgMins(i).Picture = imgBin1.Picture
Else
imgMins(i).Picture = imgBin0.Picture
End If

' Calcul Secondes
booSecs = Secs \ Magic ' Calcul du bit
If Secs >Magic Then Secs Secs - Magic
If booSecs Then ' Afficher l'état du bit
imgSecs(i).Picture = imgBin1.Picture
Else
imgSecs(i).Picture = imgBin0.Picture
End If

If i = 6 Then Exit Sub

' Calcul Heures
booHeure = Heure \ MagicH ' Calcul du bit
If Heure >MagicH Then Heure Heure - MagicH
If booHeure Then ' Afficher l'état du bit
imgHeure(i).Picture = imgBin1.Picture
Else
imgHeure(i).Picture = imgBin0.Picture
End If
Next i

End Sub

Bonne prog ... A+

Afyn
Navedac

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.