ПРИЛОЖЕНИЕ 4.
ПРИМЕРЫ ПРОГРАММ.
Эта программа иллюстрирует действие TIN и TOUT. Программа
конструирует очень простой телефонный справочник на ленте, а затем
считывает его назад.
PROGRAM ТАРЕ;
CONST
Size=10;
TYPE
Entry = RECORD
Name: ARRAY[1..10] OF CHAR;
Number: ARRAY [1..10] OF CHAR;
END;
VAR
Directory: ARRAY[1..Size] OF Entry;
I: INTEGER;
BEGIN
FOR I:=1 TO Size DO
BEGIN
WRITE('Name please');
READLN;
READ(Name);
WRITELN;
WRITE('Number please');
READLN;
READ(Number);
WRITELN
END
END;
Чтобы выгрузить справочник на ленту, используйте:
TOUT('Director',ADDR(Directory),SIZE(Directory))
Чтобы считать массив назад:
TIN ('Director',ADDR(Directory))
ПРОГРАММА 2.
10{Программа служит для получения листинга в обратном порядке,}
20{показывает использование указателей, MARK,RELEASE}
30
4 0 PROGRAM Reverseline;
50
60 TYPE elem=RECORD
70 next:~elem;
80 ch: CHAR
90 END
100 link=~elem;
110
120 VAR prev,cur,heap:link;
130
140 BEGIN
150 REPEAT
160 MARK(heap);
170 prev:NIL;
180 WHILE NOT EOLN DO
190 BEGIN
200 NEW(cur)
210 READ(cur~.ch);
230 cur".next:=prev;
240 prev:=cur
250 END;
260
300 cur:=prev;
310 WHILE curoNIL DO
320 BEGIN
330 WRIТЕ(cur ~.ch);
340 cur:=сигЛ.next
350 END;
360 WRITELN;
3 70 RELEASE(heap);
3 80 READLN
390 UNTIL FALSE
400 END.
ПРОГРАММА 3.
10 {Эта программа показывает применение рекурсии}
20
30 PROGRAM FACTOR;
40
50 {Эта программа рассчитывает факториал числа, вводимого с}
60 {клавиатуры. 1) методом рекурсии. 2) методом итераций.}
70
80 ТУРЕ
90 POSINT = 0..MAXINT;
100
110 VAR
120 METHOD : CHAR;
130 NUMBER : POSINT;
140
150 {Рекурсивный алгоритм.}
160
170 FUNCTION RFAC(N:POSINT) : INTEGER;
180
190 VAR F: POSINT;
200
210 BEGIN
220 IF N>1 THEN F:=N*RFAC(N-1)
230 ELSE F:=1;
240 RFAC:=F
250 END;
260
270 {Итеративное решение}
280
290 FUNCTION IFAC (N: POSINT) '.INTEGER;
300
310 VAR I, F: POZINT;
320 BEGIN
330 F:=1 ;
3 40 FOR I:=2 TO N DO F:=F*I;
350 IFAC:=F
360 END;
370
380 BEGIN
3 90 REPEAT
400 WRITE ('Дайте метод (I или R) и число ');
410 READLN;
420 READ(METHOD,NUMBER);
4 30 IF METHOD='R'
440 THEN WRITELN(NUMBER,'!=',RFAC(NUMBER))
450 ELSE WRITELN(NUMBER,'! = ',IFAC(NUMDER))
460 UNTIL NUMBER=0
470 END.
ПРОГРАММА 4.
10 {Эта программа покажет Вам как модифицировать переменные}
20 {ПАСКАЛя с помощью машинного кода. Демонстрируются функции
30 {PEEK, POKE, ADDR, INLINE.}
40
50 PROGRAM divmult2;
60
70 VAR r:REAL;
80
90 FUNCTION divby2(x:REAL):REAL;
100
110 VAR i:INTEGER;
120 BEGIN
130 i:=ADDR(x)+1
140 POKE(i,PRED(PEEK(i,CHAR)));
150
160 divby2:=x
170 END;
180
190 FUNCTION multby2(x:REAL):REAL;
200
210 BEGIN
220 INLINE(#DD,#34,3);
230
240 multby2:=x
250 END;
260
270 BEGIN
280 REPEAT
290 WRITE('Введите число');
300 READ(r) ;
310
3 30 WRITELN('г,деленное на 2 будет', divby2(г):7:2);
340 WRITELN('г,умноженное на 2 будет', multby2(г):7:2)
350 UNTIL г=0
360 END.
УКАЗАНИЯ ПО РАБОТЕ С ПАСКАЛЕМ НР4Т
НА КОМПЬЮТЕРАХ ZX SPECTRUM.
Дайте команду на загрузку как обычно. Загрузится загрузчик HP4S
и далее автоматически загрузится машинный код HP4S CODE. После
успешной загрузки появится сообщение 'TOP OF RAM?'. Далее
продолжайте так, как описано в разделе 1.1.
ПРИВЯЗКА К ZX SPECTRUM.
ZX SPECTRUM - несколько необычный компьютер и это оказывает
влияние на НР4Т. Различные управляющие коды, которые мы обсуждали
выше выполняются на ZX SPECTRUM так:
RETURN - клавиша ENTER.
СС - клавиши CAPS SHIFT и 1.
СН - DELETE - CAPS SHIFT И О.
CI - клавиши CAPS SHIFT и 8.
CP - CHR(16) в операторах WRITE или WRITELN.
СХ - клавиши CAPS SHIFT и 5.
CS - CAPS SHIFT + SPACE.
ПАСКАЛЬ не поддерживает ввод ключевых слов одним нажатием
клавиш. Ввод осуществляется полным набором слов. При нажатии SYMBOL
SHIFT и какой-либо клавиши, за исключением 1, на экране появляется
не связанное с этой клавишей ключевое слово, а символ. Т.е. SYMBOL
SHIFT Т дает •>', a SYMBOL SHIFT G дает }. Вы не можете
использовать одноклавишные символы '<>", '<=', *>=' - их надо
набирать в виде комбинации символов '<", * > * , * = * .
Редактор вызывается в режиме заглавных букв, но шрифт может
быть переключен обычным порядком через CAPS SHIFT и 2.
Вы можете управлять временным заданием атрибутов для изменения
их в отдельных позициях печати экрана. Это делается с помощью
стандартных управляющих кодов (например, WRITE (CHR(17), CHR(4))
установит цвет фона зеленым), но Вы не можете менять постоянные
атрибуты. Если при использовании этих управляющих кодов будет подана
неверная последовательность, произойдет прерывание работы с
сообщением "SYSTEM CALL ERROR". При выгрузке текста или объектного
кода на ленту сообщение START ТАРЕ, THEN PRESS ANY KEY появляется
дважды, и Вы должны выполнять его всякий раз.
Вам нет необходимости выгружать загрузчик, поскольку
автозагрузчик всегда выгружается вместе с объектным кодом и если Вы
выгрузили его вместе с пусковыми процедурами, то, чтобы загрузить и
запустить программу, дайте просто LOAD"" из БЕЙСИКа. После того, как
объектный код отработает, Вы можете запустить его еще раз командой
БЕЙСИКа GO ТО 7.
Если Вы воспользовались командой 'В' для выхода в БЕЙСИК, то
при условии, что Вы не меняли БЕЙСИК-программу, вы можете вернуться
в НР4Т двумя путями. Либо через GO ТО 9 ("теплый" старт) с
сохранением ПАСКАЛЬ-программы, либо через GO ТО 12 ("холодный"
старт) с инициализацией ПАСКАЛя и с очисткой существовавшего
ПАСКАЛЬ-текста.
ZX-принтер поддерживается посредством опции компилятора 'Р'
(см. раздел 4.2), а также использованием кода CHR(16) в операторах
WRITE и WRITELN. Обратите внимание на то, что в результате этого Вы
уже не можете использовать CHR(16) в этих операторах для задания
цвета печати. Вместо него используйте CHR(15).
Исполнение рабочей копии НР4Т.
Паскаль состоит из двух частей - БЕЙСИК-интерфейса и
компилятора, пусковых процедур и т.п. На исходной кассете сначала
идет БЕЙСИК-интерфейс, а за ним компилятор, пусковые процедуры и
редактор. Обычно БЕЙСИК-программа автоматически загружает весь
остальной машинный код и автостартует компилятор. Это надо
предотвратить. Вставьте исходную кассету в Ваш магнитофон и дайте
команду LOAD"". Нажмите PLAY на магнитофоне. Когда компьютер найдет
заголовок БЕЙСИК-программы, он изобразит на экране Program: НР4Т и
затем загрузит интерфейсную программу. После того, как она будет
загружена, компьютер начнет искать кодовую часть - компилятор.
Нажмите BREAK, прервав поиск, остановите магнитофон, но не
перематывайте ленту.
Загрузите машинный код компилятора, пусковых процедур и
редактора по команде LOAD""CODE. Не забывайте, что здесь LOAD и CODE
- ключевые слова, т.е. набираются не по буквам.
Вставьте в магнитофон чистую кассету. Выгрузите БЕЙСИКовскую
часть командой SAVE "HP4S" LINE 1. После этого выгрузите блок в
машинных кодах по команде "SAVE "HP4S"C0DE 24589,21105. Здесь
выгрузится компилятор, редактор и пусковые процедуры.
УКАЗАНИЯ ПО РАБОТЕ С ПАСКАЛЕМ НР4Т (ВЕРСИЯ 1.6М)
НА КОМПЬЮТЕРАХ ZX SPECTRUM.
Дайте команду на загрузку как обычно. Загрузится загрузчик и
далее автоматически загрузится машинный код. После успешной загрузки
НР4ТМ появится сообщение 'TOP OF RAM?'. Далее продолжайте так, как
описано в разделе 1.1.
ПРИВЯЗКА К ZX SPECTRUM.
ZX SPECTRUM - несколько необычный компьютер и это оказывает
влияние на НР4Т. Различные управляющие коды,которые мы обсуждали
выше достигаются на ZX SPECTRUM так:
RETURN - клавиша ENTER.
СС - клавиши CAPS SHIFT и 1.
CH - DELETE - CAPS SHIFT и 0.
CI - клавиши CAPS SHIFT и 8.
CP - клавиши CAPS SHIFT и 3.
CX - клавиши CAPS SHIFT и 5.
CS - CAPS SHIFT + SPACE.
ПАСКАЛЬ не поддерживает ввод ключевых слов одним нажатием
клавиш. Ввод осуществляется полным набором слов. При нажатии SYMBOL
SHIFT и какой-либо клавиши, за исключением 1, на экране появляется
не связанное с этой клавишей ключевое слово, а символ. Т.е. SYMBOL
SHIFT Т дает ■>', a SYMBOL SHIFT G дает }. Вы не можете
использовать одноклавишные символы '<>', 1<=', '>=' их надо
набирать в виде комбинаций символов * < * , * > * , '='.
Редактор вызывается в режиме заглавных букв, но шрифт может
быть переключен обычным порядком через CAPS SHIFT и 2.
Вы можете управлять временным заданием атрибутов для изменения
их в отдельных позициях печати экрана. Это' делается с помощью
стандартных управляющих кодов (например, WRITE (CHR(17), CHR(4))
установит цвет фона зеленым), но Вы не можете менять постоянные
атрибуты. Если при использовании этих управляющих кодов будет подана
неверная последовательность, произойдет прерывание работы с
сообщением "SYSTEM CALL ERROR". Обратите внимание на то, что НР4Т
интерпретирует некоторые управляющие коды, например, CHR(8)
воспринимается как DELETE, поэтому эти коды не могут обрабатываться
ПЗУ Спектрума - используйте для этого процедуру SPOUT (см. далее),
если Вы хотите, чтобы какие-то коды CHR не интерпретировались НР4Т.
При выгрузке текста или объектного кода на ленту Вы должны
убедиться, что магнитофон уже включен на запись.
Если Вы использовали команду 'Т1 для выгрузки на ленту
объектного кода вместе с пусковыми процедурами, то загружается эта
программа просто LOAD""CODE, а запускается из БЕЙСИКа с помощью
RANDOMIZE UST 24608.
Войти в редактор ПАСКАЛЯ из БЕЙСИКа Вы можете одним из двух
способов.
1. "ХОЛОДНЫЙ старт" - RANDOMIZE USR 24598 - при этом ПАСКАЛЬ
реинициализируется, т.е. существующий ПАСКАЛЬ-текст уничтожается.
2. "Теплый старт" - RANDOMIZE USR 24603. При этом программа на
ПАСКАЛе сохраняется.
ZX-принтер поддерживается посредством опции компилятора 'Р'
(см. раздел 4.2), а также использованием кода CHR(16) в операторах
WRITE и WRITELN. Обратите внимание на то, что в результате этого Вы
уже не можете использовать CHR(16) в этих операторах для задания
цвета печати. Вместо него используйте CHR(15).
Исполнение рабочей копии ПАСКАЛя выполняется следующим образом.
1. Загрузите НР4ТМ с ленты и ответьте на запросы 'TOP OF RAM?'
и пр.
2. Вернитесь в БЕЙСИК командой 'В'.
3. Выгрузите ПАСКАЛЬ на ленту командой SAVE "HP4T15M"CODE
24598,19558.
4. Теперь Вы можете снова загрузить компилятор LOAD""CODE, но
после такой загрузки Вам надо давать RANDOMIZE USR 24598 для
"холодного" старта или RANDOMIZE USR 24603 для "теплого" старта.
ДОПОЛНЕНИЕ 1.
ЗВУК И ГРАФИКА В ПАСКАЛЕ 4Т НА "СПЕКТРУМЕ".
Этот документ освещает подробности того, как использовать
процедуры ПАСКАЛя 4Т для управления звуком и графикой на
ZX-СПЕКТРУМе.
ЗВУК.
Процедура BEEPER использует машинный код для определения своих
параметров и передает их в подпрограмму ВЕЕР, находящуюся в ПЗУ
Спектрума.
PROCEDURE BEEPER (A, B:INTEGER);
BEGIN
INLINE (#DD, #6E, 2, #DD, #66,3, {LD L,(IX+2): LD H,(IX+3)}
#DD, #5E, 4, #DD, #56,5, {LD E,(IX+4): LD D,(IX+4)}
#CD, #85, 3, #F3) {CALL #385 : Dl}
END;
Процедура BEEP получает через свои параметры частоту
(FREQUENCY) и продолжительность сигнала (LENGTH). Если частота равна
0, то это просто звуковая пауза заданной длины. Если частота нулю не
равна, то ее величина, также как и продолжительность конвертируются
в значения, пригодные для использования процедурой ВЕЕР ПЗУ Сперк-
тума, а затем передаются в процедуру BEEPER.
PROCEDURE ВЕЕР (Frequency: INTEGER; Length: REAL);
VAR I: INTEGER;
BEGIN
IF Frequency=0 THEN FOR I:=l TO ENTIER(12000*Length) DO
ELSE BEEPER(ENTIER(Frequency*Length),ENTIER(437500/
Frequency - 3 0.125))
FOR I:=1 TO 100 DO (краткая пауза между нотами)
END;
Пример использования процедуры ВЕЕР.
ВЕЕР (262,0.5);
ВЕЕР (0,1);
Сначала звучит "до" первой октавы в течение 0,5 сек., затем в
течение 1 сек. тишина.
ГРАФИКА.
Здесь приведены три графический процедуры. Первая ставит точку
в заданных координатах (X,Y), а вторая и третья служат для
изображения линий между текущей позицией, в которой ставилась точка
и новой позицией, заданной относительно первой. После этого
последняя позиция становится текущей.
Процедуры PLOT и LINE работают с логической переменной ON,
которая если имеет значение TRUE, то вызывает печать точки в
заданной позиции, независимо от текущего состояния пиксела в этой
позиции, а если имеет значение FALSE, то вызывает переключение
пиксела в позиции печати. Т.е. если он был включен, то выключается и
наоборот. Этот эффект аналогичен команде БЕЙСИКа OVER.
Процедура PLOT аналогична команде БЕЙСИКа PLOT.
PROCEDURE РLOT (ON: BOOLEAN;X,Y:INTEGER);
BEGIN
IF ON THEN WRITE (CHR(21), CHR(0))
ELSE WRITE (CHR(21), CHR(l));
INLINE (#FD,#21,#3A,#5C, { LD IY,#5C3A}
#DD,#46, 2,#DD,#4E,4 { LDB,(IX+2): LDC,(IX+4)}
#CD,#E5,#22); {CALL #22E5;}
END;
Процедура LINE1 вызывается процедурой LINE и служит для
передачи аргументов подпрограмме DRAW, находящейся в ПЗУ Спектрума.
PROCEDURE LINE1 (X,Y,SX,SY:INTEGER);
BEGIN
INLINE (#FD,#21,#ЗА,#5C, { LD IY,#5C3A}
#DD,#56, 2,#DD,#5E, 4, { LD D,(IX+2): LD E,(IX+4)}
#DD,#46, 6,#DD,#4E, 8, { LDB,(IX+6): LDC,(IX+8)}
#CD,#8A,#24) { CALL #248A}
END;
Процедура LINE рисует линию о текущей позиции (х,у) до позиции
(Х+х,Y+y).
PROCEDURE LINE (ON: BOOLEAN; X,Y:INTEGER);
VAR
SGNX, SSNY: INTEGER;
BEGIN
IF ON THEN WRITE (CHR(2l), CHR(0))
ELSE WRITE (CHR(21), CHR(l));
IF X<0 THEN SGNX:=-1 ELSE SGNX:=1;
IF Y<0 THEN SGNY:=-1 ELSE SGNY:=1;
LINE1 (ABS(X), ABS(Y), SGNX, SGNY)
END;
Пример использования процедур PLOT и LINE.
PLOT (ON, 50, 50);
LINE (ON,100,-50);
Здесь рисуется линия от координаты (50,50) до координаты
(150,0).
ВЫВОД НА ПЕЧАТЬ ЧЕРЕЗ ПЗУ.
Иногда бывают случаи, когда бывает полезно производить вывод на
печать через процедуру ПЗУ rst 10, а не по команде WRITE(LN).
Например, при использовании управляющего кода PRINT AT за ним должны
следовать две восьмибайтовых величины, задающих координаты в которых
должна производиться печать. В то же время, при применении процедуры
WRITE они не передаются в ПЗУ и поэтому позиция печати не будет
должным образом установлена.
Преодолеть эту проблему можно путем применения следующей
процедуры.
PROCEDURE SPOUT (С:CHAR);
BEGIN
INLINE (#FD,#21 , #ЗА, #5C, { LD IY,#5C3A}
#DD,#7E, 2, { LD A,(IX+2)}
#7D) { RST #10}
Пример использования процедуры SPOUT:
SPOUT(CHR(22)); SPOUT(CHR(8)); SPOUT (CHR(13)0; -
устанавливается позиция для печати в строке 8, колонке 13.
Мы надеемся, что Вы найдете эти процедуры полезными, и они
помогут Вам более широко использовать ПАСКАЛЬ НР4Т.
ДОПОЛНЕНИЕ 2.
"ЧЕРЕПАШЬЯ" ГРАФИКА В ПАСКАЛЕ НА ZX-СПЕКТРУМЕ.
Начиная с 15 августа 1983 г. ПАСКАЛЬ поступает с дополнительным
графическим пакетом. Пакет написан на ПАСКАЛе и загружается из
редактора командой * G' TURTLE. Она загружает программный сегмент и
присоединяет его к уже существующей программе. Обратите внимание на
то, что для нормальной работы "Черепашьей Графики" файлу должно
предшествовать объявление PROGRAM, а также объявление VAR, TYPE,
CONST, LABEL. Эти объявления могут быть произвольными, но никаких
объявлений процедур и функций до вставки графического пакета быть не
должно.
Как и во многих других программных продуктах такого рода, здесь
создается воображаемая черепашка на экране, и пользователь с помощью
простейших команд может управлять ее перемещением.
Эта "черепашка" может оставлять за собой след (цветной), а
может быть невидимой. Ее направление движения и текущее положение
содержаться в глобальных переменных, которые изменяются, когда
"черепашке" перемещается или поворачивается. Разумеется, эти
переменные могут быть просмотрены и изменены в любое время.
ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ.
HEADING.
Эта переменная содержит угловое значение того направления, в
которое смотрит "черепашка". Она может принимать любое значение типа
REAL и может быть инициализирована в Ос помощью процедуры TURTLE
(см. ниже). Значение 0 соответствует направлению движения НА ВОСТОК.
По мере возрастания величины, черепашка поворачивается против
часовой стрелки.
XCOR, YCOR.
Это текущие координаты. Они имеют тип REAL. Экран компьютера
имеет размер 256*176 пикселов и "черепашка" может находиться в любой
точке из этой области. Если будет предпринята попытка выйти за
пределы данной области, появится сообщение "OUT OF LIMITS".
Программа при этом будет остановлена сообщением .HALT.' Первоначально
эти переменные не определены. Процедура TURTLE инициализирует их и
выставляет 127 и 87, соответственно, т.е. устанавливает исходную
позицию в центре экрана.
PENSTATUS.
Это переменная типа INTEGER. В ней содержится состояние пера. О
- перо опущено, 1 - перо поднято.
ПРОЦЕДУРЫ.
Процедуры PLOT, LINE, SPOUT, рассмотренные в ДОПОЛНЕНИИ 1,
приняты в этом пакете в качестве стандартных. Единственным
существенным их отличием является то, что процедура LINE вызывает
процедуру CHECK, которая проверяет не вышли ли координаты за пределы
границ экрана. Прочие процедуры:
INK(C:INTEGER).
Принимает целые значения от 0 до 8 включительно и устанавливает
цвет, оставляемый пером.
PAPER (С:INTEGER).
Устанавливает цвет фона экрана. Имеет целые значения от О до 8
включительно.
COPY
Выгружает состояние экрана на ZX-принтер.
PENDOWN (С:INTEGER).
Устанавливает состояние, в котором перо оставляет след цвета С
(от О до 8 включительно).Эта процедура присваивает переменной
PENCTATUS 0.
PENUP.
Изменяет состояние пера. Перо поднимается. Присваивает 1
переменной PENSTATUS.
SETHD (А:REAL).
Присваивает действительное число переменной HEADING,
устанавливая тем самым направление перемещения. 0 -направление на
ВОСТОК. 90 - СЕВЕР. 180 - ЗАПАД. 2 70 - ЮГ.
SETXY (X , Y :REAL)♦
Устанавливает абсолютное значение положения в пределах
разрешенной экранной области. Проверка на выход за пределы не
выполняется. Это делает процедура LINE.
FWD (L:REAL).
Перемещение вперед на L единиц. Одна единица - один пиксел.
BACK (L:REAL).
Перемещение назад на L единиц.
TURN (А:REAL).
Изменяет направление движения на А градусов. Положительное
направление отсчета - против часовой стрелки.
VECTOR (А, L :REAL).
Перемещает "черепашку" на L шагов в направлении А. После
перемещения направление А остается в качестве текущего.
RIGHT (A:REAL).
Это альтернатива TURN. Изменяет направление на А градусов в
направлении по часовой стрелке.
LEFT (A:REAL).
Аналогична TURN и встроена только для сочетания с RIGHT.
ARCR (R:REAL, А:INTEGER).
Движение по дуге окружности радиуса R на угол А. Положительный
отсчет против часовой стрелки.
TURTLE.
Устанавливает исходное положение в центре экрана, направление -
на ВОСТОК. Фон голубой, цвет оставляемый пером - желтый. Изначально
положение не определено, поэтому эта процедура как правило первая в
программе.
ПРИМЕРЫ ПРОГРАММ.
Мы полагаем, что Вы уже загрузили ПАСКАЛЬ и выполнили
G,,TURTLE. Графический пакет начинается в строке 10 и заканчивается
в строке 1350.
1 PROGRAM CIRCLES: 1 PROGRAM FLOWER:
2 VAR I:INTEGER; 2 VAR
1360 BEGIN 1360 PROCEDURE PETAL (S:REAL);
1370 TURTLE; 1370 BEGIN
1380 FORI:=1 TO 9 DO 1380 ARCR (S,60);
1390 BEGIN 1390 LEFT(120);
1400 ARCR(0.5,360); 1400 ARCR(S,60);
1410 RIGHT(40) 1410 LEFT(120)
1420 END 1420 END;
14 30 END. 14 30 PROCEDURE FLOWER (S:REAL);
1440 VAR I:INTEGER;
1450 BEGIN
1 PROGRAM SPIRALS: 1460 FOR I:=l TO 6 DO
2 VAR 1470 BEGIN
1360 PROCEDURE SPIRALS(L,A:REAL); 1480 PETAL(S);
1370 BEGIN 1490 RIGHT(60)
1380 FWD(L); 1500 END
1390 RIGHT(A); 1510 END;
1400 SPIRALS(L+l,A) 1520 BEGIN TURTLE:
1410 END; 1530 SETXY(127,60);
1420 BEGIN 1540 LEFT(90); FWD(10);
1430 TURTLE; RIGHT(60); PETAL(0.2);
1440 SPIRALS(9,95) 1550 LEFT(60); PETAL(0.2);
1450 END. SETHD(90); FWD(40);
1560 FLOWER(0.4)
1570 END.
3-я типография ВО «Наука»
107143, Москва, Открытое шоссе. 28
Зак. 252 Тираж 10 000 экз.