Horloge analogique
GW-Basic, utilisé par PC-Basic
Programme avec Graphique et Texte
Dans le programme TIME.BAS (Dire l'heure), nous avons affiché à l'écran différentes formes d'une horloge textuelle à l'aide de TIME$.
Rappelons que TIME$, une variable chaîne prédéfinie, est définie et initialisée à chaque exécution de GW-BASIC.
TIME$, lorsqu'elle s'affiche à l'écran, affiche l'heure au format suivant :
HEURE:MINUTE:SECOND
où les heures sont exprimées en heure militaire (c'est-à-dire au format 24 heures).
Dans le programme TRIG.BAS (Graphiques trigonométriques), nous avons utilisé l'instruction PSET pour afficher à l'écran les graphiques des fonctions trigonométriques sinus et cosinus.
Combinons ces deux programmes : récupérons l'heure actuelle de l'ordinateur, puis utilisons la trigonométrie pour l'afficher sous forme d'horloge analogique graphique avec une aiguille des secondes, des minutes et des heures.
Appuyer sur la touche Échap pour quitter le programme.
La fonction MID$ permet de désagréger les caractères de la variable TIME$.
La mesure en radians des trois aiguilles analogiques est alors obtenue.
Enfin, l'instruction LINE, qui trace un segment de droite entre deux points d'extrémité prédéfinis, est utilisée, ainsi que quelques notions de trigonométrie, pour afficher les aiguilles analogiques à leur position correcte à l'écran.
Lorsque CLOCK.BAS est en cours d'exécution, vous devrez faire face à un scintillement important. Réduire ce scintillement et ajouter des chiffres autour du cadran amélioreraient considérablement le programme.
CLOCK.BAS
10 KEY OFF
20 SCREEN 9:COLOR
15,0
30 PI#=3.14159265#
35 HOUR=VAL(MID$(TIME$,1,2)) 'OBTAINS HOUR,
CONVERTS TO NUMERIC
36 IF HOUR>12 THEN HOUR=HOUR-12
37 IF HOUR=0 THEN HOUR=12
38 HOUR=HOUR*5
39 HOURRAD=(HOUR*PI#/180)*6-PI#/2 'CONVERTS TO RADIANS, THEN
SUBTRACT PI/2
40 SEC=VAL(MID$(TIME$,7,2)) 'OBTAIN SECONDS, CONVERT TO NUMERIC
45 SECRAD=(SEC*PI#/180)*6-PI#/2 'CONVERTS TO RADIANS, THEN SUBTRACT PI/2
46
MIN=VAL(MID$(TIME$,4,2)) 'OBTAIN MINUTES, CONVERT TO NUMERIC
47 MINRAD=(MIN*PI#/180)*6-PI#/2
'CONVERTS TO RADIANS, ETC.
48 LOCATE 2,15:PRINT TIME$
50
LINE(300,150)-(COS(SECRAD)*100+300,SIN(SECRAD)*100+150),15 'SECONDS HAND
55
LINE(300,150)-(COS(MINRAD)*100+300, SIN(MINRAD)*100+150),4 'MINUTES HAND
57
LINE(300,150)-(COS(HOURRAD)*100+300, SIN(HOURRAD)*100+150),1 'HOURS HAND
60
FOR PAUSE=1 TO 500:NEXT PAUSE
65 CLS
66 I$=INKEY$
67 IF I$<>CHR$(27)
THEN 35