Le premier langage de programmation auquel j'ai été exposé était Sinclair BASIC . Comme de nombreux dialectes BASIC, il nécessite que toutes les lignes de code source soient numérotées .
En conséquence, l'utilisation de la GO TOcommande était idiomatique et saute l'exécution au numéro de ligne donné (pas d'étiquettes).
Il existe également une GO SUBcommande associée qui peut être utilisée comme un appel de fonction rudimentaire. Encore une fois, l'exécution passe au numéro de ligne donné, mais lorsqu'une RETURNcommande est atteinte, l'exécution revient à l'instruction suivante après le GO SUB.
De même, la RUNcommande redémarrera l'exécution du programme sur la ligne donnée.
Quiconque a passé du temps dans un interprète BASIC numéroté en ligne aura appris à utiliser un schéma de numérotation avec des lacunes. C'est pour qu'il soit plus facile d'insérer de nouvelles lignes de code. Cependant, même dans ce cas, vous pouvez toujours avoir besoin d'insérer de nouvelles lignes entre des lignes numérotées consécutivement.
Étant donné une liste BASIC numérotée en ligne en entrée, sortez le même programme mais renuméroté de sorte que les numéros de ligne commencent à 10 et incrémentent par étapes de 10. La liste d'entrée peut avoir GO TOou des GO SUBcommandes, de sorte que les numéros associés à ceux-ci doivent également être ajustés.
GO TOet lesGO SUBcommandes sont sur leurs propres lignes ou à la fin desIFTHENlignes. Son sûr^(\d+) .*GO (TO|SUB) (\d+)$est suffisant pour correspondre à de telles lignes. Ces commandes entre guillemets doivent être ignorées.RUNles commandes seront toujours sur leurs propres lignes. Dans ce cas, un numéro de ligne est facultatif. S'il est manquant, alors l'interpréteur démarre simplement en haut du programme.Si une commande
GO TO,GO SUBou faitRUNréférence à une ligne inexistante, elle passera à la place à la ligne définie suivante. Votre entrée doit y faire face et s'assurer que ces références de ligne sont fixes afin qu'elles pointent vers la ligne correcte. Le comportement peut être indéfini si un numéro de ligne après la fin du programme est indiqué dans l'une de ces commandes.Les numéros de ligne seront toujours des entiers positifs de 1 à 9999 (selon le manuel). Cela signifie que les programmes d'entrée n'auront jamais plus de 999 lignes.
Les lignes d'entrée seront toujours numérotées dans l'ordre croissant numérique.
Aux fins de ce défi, les listes d'entrées ne contiendront que de l'ASCII imprimable. Vous n'avez pas à vous soucier du jeu de caractères ZX. Cela dit, si votre entrée est effectivement écrit dans ZX BASIC ou approprié z80 montage / code machine (et il y a des émulateurs sur là - bas ), vous pouvez choisir pour votre entrée à coder dans le caractère ZX jeu à la place.
Vous ne pouvez utiliser aucune bibliothèque ou utilitaire de renumérotation spécialement conçu à cet effet.
Exemple d'entrée:
1 REM "A rearranged guessing game"
2 INPUT A: CLS
3 INPUT "Guess the number ", B
10 IF A=B THEN PRINT "Correct": STOP
100 IF A<B THEN GO SUB 125
120 IF A>B THEN GO SUB 122
121 GO TO 3
125 PRINT "Try again"
126 RETURN
127 REM "An example of GO TO 7 and GO SUB 13 in quotes"
Exemple de sortie:
10 REM "A rearranged guessing game"
20 INPUT A: CLS
30 INPUT "Guess the number ", B
40 IF A=B THEN PRINT "Correct": STOP
50 IF A<B THEN GO SUB 80
60 IF A>B THEN GO SUB 80
70 GO TO 30
80 PRINT "Try again"
90 RETURN
100 REM "An example of GO TO 7 and GO SUB 13 in quotes"
Je voulais créer un lien vers un manuel ZX BASIC. Le meilleur que j'ai pu trouver semble être http://www.worldofspectrum.org/ZXBasicManual/index.html mais cela semble être un lien mort. La machine de renvoi a cependant une copie .
GOTO 100 + A*10 , et l' annexe C du ZX Spectrum Manual répertorie GO TOcomme acceptant une expression numérique (pas de restriction aux constantes). Voici une discussion sur les mérites de calcul GOTOsur ZX80 et ZX81. BTW, je ne sais pas pourquoi l'espace a été ajouté dans la version Spectrum.