★ CODING ★ CLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★ |
4/5.3 Contrôle de l'affichage | Coding Classeurs Weka |
4/5.3 Contrôle de l'affichageI. Format des nombres traités par Forth Forth ne traite pas n'importe quels nombres. Ceux que vous avez utilisés en essayant les précédents exemples sont des entiers signés 16 bits. Le domaine de définition des entiers 16 bits est compris entre - 32768 et 32767. Exemple : 32767 . affiche 32767 32768. affiche -32768 65535 . affiche - 1 Ces nombres peuvent être traités dans n'importe quelle base numérique, toutes les bases numériques situées entre 2 et 32 étant valides . 255 HEX . DECIMAL affiche FF La base numérique courante est contrôlée par une variable nommée BASE et dont le contenu peut être modifié. Ainsi, pour passer en binaire, il suffit de stocker la valeur 2 dans BASE : 2 BASE ! et de taper DECIMAL pour revenir à la base numérique décimale. Forth ne connaît pas les nombres en virgule flottante. Cependant, des routines peuvent être compilées pour exécuter des calculs sur ce type de nombres, mais ce sera au détriment de la vitesse de traitement. Si vous voulez traiter des quantités importantes, comme votre compte en banque ou le prix de votre prochaine voiture, vous pouvez utiliser les nombres double précision également nommés nombres 32 bits. Ceux-ci se distinguent des nombres entiers 16 bits en y accolant un point, une virgule ou une barre de fraction : 135246. D. affiche 135246 135246, D. affiche 135246 Le point, la virgule ou la barre de fraction peuvent être placés ailleurs qu'à l'extrémité du nombre : 135,246 D. affiche 135246 Les opérations possibles sur les nombres 32 bits sont 3. 5. D + correspond à 3 + 5 3. 5. D- correspond à 3-5 II. Formats d'affichage des nombres entiers et double précision A première vue, F83 semble bien rustique concernant les possibilités d'affichage des nombres. Il n'en est rien. Si d'autres langages, comme Basic, utilisent des compléments d'instructions tel Using pour forcer un format d'affichage de nombre, F83 utilise des mots variés dont les combinaisons permettent de dépasser largement les performances des langages conventionnels dans ce domaine. Les nombres entiers 16 bits situés au sommet de la pile peuvent être affichés de diverses manières par les mots suivants : . Prononcer 'point'. Affiche un entier signé (intervalle -32768,32767) U. Prononcer 'U-point'. Affiche un entier non signé (intervalle 0,65535) .R Prononcer 'point-R'. Affiche un entier signé cadré à droite dans un champ de n caractères. U.R Prononcer 'U-point-R'. Affiche un entier non signé cadré à droite dans un champ de n caractères. Exemples : 7 - 10 . . affiche 7-10 45656 U. affiche 45656 -36.R affiche -6 154 6 .R affiche 154 45656 6 U.R affiche 45656 Les nombres double précision 32 bits situés au sommet de la pile peuvent être affichés par les mots suivants : D. Prononcer 'D-point'. Affiche un nombre double précision signé. UD. Prononcer 'U-D-point'. Affiche un nombre double précision non signé. D.R Prononcer 'D-point-R'. Affiche un nombre double précision signé cadré à droite dans un champ de n caractères. UD.R Prononcer 'UD-point-R'. Affiche un nombre double précision non signé cadré à droite dans un champ de n caractères. Exemples 5. D. affiche 5 — 1 UD. affiche 4294967295 10. 12 D.R affiche 10 35.3 12 UD.R affiche 353 III. Définition de nouveaux formats d'affichage Outre ces mots pré-définis, F83 dispose de primitives permettant d'adapter l'affichage d'un nombre à un format quelconque. Ces primitives ne traitent que des nombres double précision : <# Débute une séquence de définition de format # Insère un digit dans une séquence de définition de format #S Equivaut à une succession de # HOLD Insère un caractère dans une définition de format #> Achève une définition de format et laisse sur la pile l'adresse et la longueur de la chaîne contenant le nombre à afficher. Exemple, soit à afficher un nombre exprimant un montant libellé en francs avec la virgule comme séparateur décimal : : FRANCS ( ud — ) <# # # ASCII , HOLD #S #> TYPE . "Fr " ; Exemples d'exécution : 0.35 FRANCS affiche 0,35 Fr 35.75 FRANCS affiche 35,75 Fr 10.15 35.75 D+ FRANCS affiche 45,90 Fr La définition de FRANCS ne prend pas en compte le signe du résultat, ni la position de la virgule. Si vous tapez 35. FRANCS Vous aurez à l'affichage 0,35 Fr. Voici un exemple plus complexe démontrant la compacité du Forth. Il s'agit d'écrire un programme convertissant un nombre quelconque de secondes au format HH:MM:SS: : :00 (---) DECIMAL # 6 BASE ! # ASCII : HOLD DECIMAL ; : HMS ( ud ---) <# :00 : 00 # S # > TYPE SPACE ; Exemples d'exécution 59. HMS affiche 0:00:59 60. HMS affiche 0:01:00 4500. HMS affiche 1:15:00 Le système d'affichage des secondes et des minutes est appelé système sexagésimal. Les 'unités' sont exprimées dans la base numérique décimale, les 'dizaines' sont exprimées dans la base six. Le mot :00 gère la conversion des 'unités' et des 'dizaines' dans ces deux bases pour la mise au format des digits correspondant aux secondes et aux minutes. Pour les heures, les digits sont tous décimaux. Exercice 1 : Définissez un programme convertissant un nombre entier 16 bits décimal en binaire et l'affichant au format bbbb bbbb bbbb bbbb. Solution page 6. IV. Affichage des caractères et chaînes de caractères L'affichage d'un caractère est réalisé par le mot EMIT: 65 EMIT affiche A Les caractères affichables sont compris dans l'intervalle 32..255. Les codes compris entre 0 et 31 seront interprétés comme des codes de contrôle : 13 EMIT 10 EMIT exécute l'équivalent de CR (retour chariot) Les chaînes de caractères sont affichées de diverses manières. La première, utilisable en compilation seulement, affiche une chaîne de caractères délimitée par le caractère " (guillemet) : : TITRE MENU GENERAL" ; TITRE affiche MENU GENERAL La seconde, utilisable en interprétation seulement, affiche une chaîne de caractères délimitée par le caractère ) (parenthèse fermée) : .< MENU GENERAL) affiche MENU GENERAL Dans les deux cas, la chaîne est séparée du mot ou .( par au moins un caractère espace. Une chaîne de caractères peut aussi être compilée par le mot " (guillemet! et délimitée par le caractère " (guillemet) : : LIGNE1 " E..Enregistrement de données" ; L'exécution de LIGNE1 dépose sur la pile de données l'adresse et la longueur de la chaîne compilée dans la définition. L'affichage est réalisé par le mot TYPE: LIGNE1 TYPE affiche E..Enregistrement de données En fin d'affichage d'une chaîne de caractères, le retour à la ligne doit être provoqué s'il est souhaité : TITRE LIGNE1 affiche MENU GENERAL..Enregistrement de données CR TITRE CR CR LIGNE 1 CR affiche MENU GENERAL E.. Enregistrement de données Un ou des espaces peuvent être rajoutés en début ou fin d'affichage d'une chaîne alphanumérique : SPACE affiche un caractère espace n SPACES affiche n caractères espaces Exercice 2 Créez un mot qui affiche une chaîne de caractères centrée par rapport à la largeur de l'écran. Solution page 6. V. Solutions des exercices Exercice 1 : BBBB < -—) # # # # 32 HOLD ; : UB. ( u ---) 0 < # BBBB BBBB BBBB BBBB # > TYPE SPACE ;
Exercice 2 : 80 CONSTANT LARGEUR-ECRAN : .CENTRE ( adr long ---) LARGEUR-ECRAN OVER - 2/ SPACES TYPE ;
Ce texte est centré sur 80 caractères.
|