Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Référence de commandes et fonctions
Concept de programmation de base
Les décisions
Faire des boucles
Les sous-programmes
Lecture de données
Les expressions
Les chaînes de caractères
Les fonctions
Fonctions mathématiques
Les nombres aléatoires
Les tableaux
Les conditions
L'ensemble de caractères
Les effets sonores
Entreposage sur bande magnétique
Les imprimantes ZX
Les autres équipements
Rapport (Référence des codes d'erreur)
Préface
Notes légal
Dictionnaire
Recherche

L'ensemble de caractères

Les lettres, chiffres, signes de ponctuation,... pouvant apparaître dans les chaînes de caractères sont appelés caractères et constituent l'alphabet ou l'ensemble de caractères utilisé par le ZX Spectrum. La plupart de ces caractères sont des symboles uniques, mais il y en a d'autres, appelés jetons, représentant des mots entiers, tels que PRINT, STOP, <> et ainsi de suite.

Il y a 256 caractères, et chacun a un code entre 0 et 255. Pour convertir entre codes et caractères, il y a deux fonctions, CODE et CHR$.

CODE est appliqué à une chaîne de caractères, et donne le code du premier caractère de la chaîne de caractères (ou 0 si la chaîne de caractères est vide).

CHR$ est appliqué à un nombre et donne la chaîne de caractères unique dont le code est ce nombre.

Ce programme affiche tout l'ensemble de caractères :

  1. 10 FOR a=32 TO 255: PRINT CHR$ a;: NEXT a

En haut, vous pouvez voir un espace, 15 symboles et signes de ponctuation, les dix chiffres, sept autres symboles, les majuscules, six autres symboles, les minuscules et cinq autres symboles. Ceux-ci sont tous (sauf £ et ©) tirés d'un ensemble de caractères largement utilisé connu sous le nom d'ASCII (pour American Standard Codes for Information Interchange); ASCII attribue également des codes numériques à ces caractères, et ce sont les codes utilisés par le ZX Spectrum.

Les autres caractères ne font pas partie de l'ASCII et sont propres au ZX Spectrum. Les premiers d'entre eux sont un espace et 15 motifs de taches noires et blanches. Ceux-ci sont appelés symboles graphiques et peuvent être utilisés pour dessiner des images. Vous pouvez les saisir à partir du clavier, en utilisant ce qu'on appelle le mode graphique. Si vous appuyez sur GRAPHICS (CAPS SHIFT avec 9), le curseur se changera en G. Maintenant les touches des chiffres 1 à 8 donneront les symboles graphiques : à elles seules elles donneront les symboles dessinés sur les touches ; et avec l'un ou l'autre des décalages enfoncés, ils donnent le même symbole mais inversé, c'est-à-dire que le noir devient blanc, et vice versa.

Indépendamment des SHIFT, le chiffre 9 vous ramène au mode normal (L) et le chiffre 0 est DELETE.

Voici les seize symboles graphiques :

Symbole Code Comment l'obtenir Symbole Code Comment l'obtenir
128 G
8
143 G
SHIFT 8
129 G
1
142 G
SHIFT 1
130 G
2
141 G
SHIFT 2
131 G
3
140 G
SHIFT 3
132 G
4
139 G
SHIFT 4
133 G
5
138 G
SHIFT 5
134 G
6
137 G
SHIFT 6
135 G
7
136 G
SHIFT 7

Après les symboles graphiques, vous verrez ce qui semble être une autre copie de l'alphabet de A à U. Ce sont des caractères que vous pouvez redéfinir vous-même, bien que lorsque la machine est allumée pour la première fois, ils sont définis comme des lettres - ils sont appelés utilisateur- graphiques définis. Vous pouvez les saisir à partir du clavier en passant en mode graphique, puis en utilisant les touches de lettres de A à U.

Pour définir un nouveau caractère pour vous-même, suivez cette recette - elle définit un caractère à afficher π :

USR est ici une fonction pour convertir un paramètre de chaîne de caractères en l'adresse du premier octet en mémoire pour le graphique défini par l'utilisateur correspondant. Le paramètre de chaîne de caractères doit être un caractère unique pouvant être soit le graphique défini par l'utilisateur lui-même, soit la lettre correspondante (en majuscule ou en minuscule). Il y a une autre utilisation pour USR, quand son paramètre est un nombre, qui sera traité.

Même si vous ne comprenez pas cela, le programme suivant le fera pour vous :

  1. 10 FOR n=0 TO 7
  2. 20 INPUT row: POKE USR "P"+n,row
  3. 30 NEXT n

Il s'arrêtera pour les données INPUT huit fois pour vous permettre de saisir les huit numéros BIN ci-dessus - saisissez-les dans le bon ordre, en commençant par la ligne du haut.

L'instruction POKE entrepose un nombre directement dans l'emplacement mémoire, en contournant les mécanismes normalement utilisés par le BASIC. L'opposé de POKE est PEEK, et cela nous permet de regarder le contenu d'un emplacement mémoire bien que cela ne modifie pas réellement le contenu de cet emplacement.

Après les graphiques définis par l'utilisateur viennent les jetons.

Vous aurez remarqué que nous n'avons pas affiché les 32 premiers caractères, avec les codes 0 à 31. Ce sont des caractères de contrôle. Ils ne produisent rien d'affichable, mais ont un effet moins tangible sur la télévision, ou ils sont utilisés pour contrôler autre chose que la télévision, et la télévision affiche 7 pour montrer qu'elle ne les comprend pas.

Trois que la télévision utilise sont ceux avec les codes 6, 8 et 13 ; dans l'ensemble, CHR$ 8 est le seul que vous trouverez probablement utile.

CHR$ 6 affiche les espaces exactement de la même manière qu'une virgule dans une instruction PRINT par exemple :

  1. PRINT 1; CHR$ 6;2

fait la même chose que :

  1. PRINT 1,2

Évidemment, ce n'est pas une façon très claire de l'utiliser. Une façon plus subtile est de dire :

  1. LET a$="1"+CHR$ 6+"2"
  2. PRINT a$

CHR$ 8 est un "backspace" : il déplace la position d'affichage d'un endroit en arrière - essayez :

  1. PRINT "1234"; CHR$ 8;"5"

affichant jusqu'à 1235.

CHR$ 13 est «nouvelle ligne» : il déplace la position d'affichage au début de la ligne suivante.

Le téléviseur utilise également ceux avec les codes 16 à 23.

En utilisant les codes pour les caractères, nous pouvons étendre le concept de «ordre alphabétique» pour couvrir les chaînes de caractères contenant n'importe quel caractère, pas seulement des lettres. Si, au lieu de penser en termes d'alphabet habituel de 26 lettres, nous utilisons l'alphabet étendu de 256 caractères, dans le même ordre que leurs codes, alors le principe est exactement le même. Par exemple, ces chaînes de caractères sont dans leur ordre alphabétique ZX Spectrum. (Remarquez la caractéristique plutôt étrange que les lettres minuscules viennent après toutes les majuscules : donc «a» vient après «Z» ; aussi, les espaces ont de l'importance.)

  1. CHR$ 3+"JARDINS ZOOLOGIQUES"
  2. CHR$ 8+"CHASSE AARDVARK"
  3. " AAAARGH!"
  4. "(Remarque entre parentheses)"
  5. "108"
  6. "129.95 inc. VAT"
  7. "AASVOGEL"
  8. "Aardvark"
  9. "PRINT"
  10. "ZOO"
  11. "[interpolation]"
  12. "aardvark"
  13. "aasvogel"
  14. "Zoo"
  15. "zoologie"

Voici la règle pour savoir dans quel ordre deux chaînes de caractères entrent. D'abord, comparez les premiers caractères. S'ils sont différents, alors l'un d'eux a son code inférieur à l'autre, et la chaîne de caractères dont il provient est la plus ancienne (la plus petite) des deux chaînes de caractères. S'ils sont identiques, passez à la comparaison des caractères suivants. Si, dans ce processus, l'une des chaînes s'épuise avant l'autre, cette chaîne de caractères est la plus ancienne ; sinon ils doivent être égaux.

Les relations =, <, >, <=, >= et <> sont utilisées aussi bien pour les chaînes de caractères que pour les nombres : < signifie «vient avant» et > signifie «vient après», de sorte que :

  1. "AA homme"<"AARDVARK"
  2. "AARDVARK">"AA homme"

sont tous les deux vrais.

<= et >= fonctionnent de la même manière que pour les nombres, de sorte que :

  1. "La meme chaine de caracteres"<="La meme chaine de caracteres"

c'est vrai, mais :

  1. "La meme chaine de caracteres"<"La meme chaine de caracteres"

c'est faux.

Expérimentez tout cela en utilisant le programme ici, entrant deux chaînes de caractères et les mettant dans l'ordre :

  1. 10 INPUT "Tapez deux chaines de caracteres:",a$,b$
  2. 20 IF a$>b$ THEN LET c$=a$: LET a$=b$: LET b$=c$
  3. 30 PRINT a$;" ";
  4. 40 IF a$<b$ THEN PRINT "<";: GO TO 60
  5. 50 PRINT "="
  6. 60 PRINT " ";b$
  7. 70 GO TO 10

Notez comment nous devons introduire c$ à la ligne 20 lorsque nous échangeons a$ et b$ :

  1. LET a$=b$: LET b$=a$

n'aurait pas l'effet escompté. Ce programme met en place des graphiques définis par l'utilisateur pour afficher les pièces d'échecs :

Pièces d'échec :

  1. 5 LET b=BIN 01111100: LET c=BIN 00111000: LET d=BIN 00010000
  2. 10 FOR n=1 TO 6: READ pS: REM 6 pieces
  3. 20 FOR f=0 TO 7: REM lire le morceau en 6 octets
  4. 30 READ a: POKE USR p$+f,a
  5. 40 NEXT f
  6. 50 NEXT n
  7. 100 REM fou
  8. 110 DATA "b",0,d, BIN 00101000, BIN 01000100
  9. 120 DATA BIN 01101100,c,b,0
  10. 130 REM roi
  11. 140 DATA "k",0,d,c,d
  12. 150 DATA c, BIN 01000100,c,0
  13. 160 REM tour
  14. 170 DATA "r",0, BIN 01010100,b,c
  15. 180 DATA c,b,b,0
  16. 190 REM reine
  17. 200 DATA "q",0, BIN 01010100, BIN 00101000,d
  18. 210 DATA BIN 01101100,b,b,0
  19. 220 REM pion
  20. 230 DATA "p",0,0,d,c
  21. 240 DATA c,d,b,0
  22. 250 REM cavalier
  23. 260 DATA "n",d,c, BIN 01111000
  24. 270 DATA BIN 00011000,c,b,0

Notez que 0 peut être utilisé à la place de BIN 00000000.

Lorsque vous avez exécuté le programme, regardez les pièces en passant en mode graphique.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mercredi, le 19 avril 2023