Pierwszym językiem programowania, na który byłem narażony, był Sinclair BASIC . Podobnie jak wiele dialektów BASIC, wymaga numerowania wszystkich linii kodu źródłowego .
W rezultacie użycie GO TOpolecenia było idiomatyczne i powoduje wykonanie skoku do podanego numeru linii (bez etykiet).
Istnieje również pokrewne GO SUBpolecenie, które może być użyte jako podstawowe wywołanie funkcji. Ponownie wykonanie przeskakuje do podanego numeru wiersza, ale po osiągnięciu RETURNpolecenia wykonanie powraca do następnej instrukcji po GO SUB.
Podobnie RUNpolecenie zrestartuje wykonanie programu w danym wierszu.
Każdy, kto spędził czas w tłumaczu BASIC o numerze wiersza, nauczy się korzystać ze schematu numeracji z przerwami. Dzieje się tak, aby łatwiej wstawiać nowe wiersze kodu. Jednak nawet wtedy nadal może być konieczne wstawienie nowych linii między kolejnymi numerami linii.
Biorąc pod uwagę numer BASIC o numerze wiersza jako dane wejściowe, wypisuje ten sam program, ale przenumerowany tak, że numery linii zaczynają się od 10 i są zwiększane o krok 10. Liczba wejść może mieć GO TOlub GO SUBpolecenia, więc liczby z nimi związane również muszą zostać dostosowane.
GO TOaGO SUBpolecenia są albo w osobnych wierszach, albo na ich końcuIFTHEN. Można powiedzieć, że^(\d+) .*GO (TO|SUB) (\d+)$wystarczy dopasować takie linie. Te polecenia w cudzysłowie należy zignorować.RUNpolecenia będą zawsze na swoich liniach. W takim przypadku numer linii jest opcjonalny. Jeśli go brakuje, tłumacz zaczyna po prostu na górze programu.Jeśli polecenie
GO TO,GO SUBlubRUNodwołuje się do nieistniejącej linii, przeskakuje do następnej zdefiniowanej linii. Twój wpis musi sobie z tym poradzić i upewnić się, że wszelkie odniesienia do linii są stałe, aby wskazywały prawidłową linię. Zachowanie może być niezdefiniowane, jeśli w jednym z tych poleceń podany jest numer linii po zakończeniu programu.Numery linii zawsze będą dodatnimi liczbami całkowitymi od 1 do 9999 (zgodnie z instrukcją). Oznacza to, że programy wejściowe nigdy nie będą miały więcej niż 999 linii.
Linie wejściowe będą zawsze numerowane w kolejności rosnącej liczbowo.
Na potrzeby tego wyzwania zestawienia wejściowe będą zawierały tylko ASCII do wydruku. Nie musisz się martwić o zestaw znaków ZX. Mimo, że jeśli wejście jest faktycznie napisane w BASIC ZX lub właściwego montażu Z80 / kod maszynowy (i istnieją emulatory odchodzący istnieje ), a następnie można wybrać za Twój wkład mają być zakodowane w zestawie znaków ZX zamiast.
Nie możesz używać żadnych bibliotek lub programów numeracyjnych specjalnie dostosowanych do tego celu.
Przykładowe dane wejściowe:
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"
Przykładowe dane wyjściowe:
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"
Chciałem połączyć się z instrukcją obsługi ZX BASIC. Najlepsze, co mogłem znaleźć, to http://www.worldofspectrum.org/ZXBasicManual/index.html, ale wydaje się, że jest to martwy link. Maszyna powrotna ma jednak kopię .
GOTO 100 + A*10 , a dodatek C do ZX Spectrum Manual wymienia GO TOjako akceptację wyrażenia liczbowego (bez ograniczenia do stałych). Oto omówienie zalet obliczeń GOTOna ZX80 i ZX81. BTW, nie mam pojęcia, dlaczego przestrzeń została dodana w wersji Spectrum.