УРОК 5
5. 1 Вступление.
в предыдущих уроках мы в основном знакомили читателя с но-
выми идеями. Они шли одна за другой, в этом уроке мы немного
приостановимся и более детально рассмотрим работу со стрингами.
5. 2 Длина стринга.
Очень часто бывает важным знать, сколько же символов вхо-
дит в символьную последовательность, во-первых, это важно для
того, чтобы эффективно распределять оперативную память компью-
тера, а во-вторых. - для того, чтобы красиво организовывать
выдачу информапии на экран. Для этой пели в БЕИСИКе есть Функ-
ция LEH ( ). Она может выдать количество символов, входящих в
стринг. Например:
если а» = "Fred", то LEN(a*) = 4
если Ь« = "К", то LEH <Ъ*> = 1
Что выдадут следующие Функции?
a) LEN (с*), где с* = "Ann"
b) LEH <d»>. где d$ = "А"
c) len (е»), где е» = "Т2"
d) LEH <f*). где f» = "CAT 123"
Написать БЕИСИК-прогрэмму. которая введет список
из 10 слов, заканчивающийся на "zzzz" и распеча-
тать длину каждого слова.
Решение Буден вводить слова, входящие в список в массив W*
поношью операторов READ. . . DATA.
10 REH ««Длина стринга»«
20 REH ««к»»»»»»»»»»»*»»»»»»»»»»»»»»»»»»»»»»»»»»»
30 REH ««Программа читает слова из списка READ
40 REH и определяет из длину»»
90 REM »«»»«»»»»». »«*»«»«...........««к» .««к*** о
100 read w*
110 if w$="zzzz" theh go to 200
120 let s= len w$
130 print
140 Print w«;" состоит из ";i;" букв"
150 go то 100
200 stop
900 data "разработай", "алгоритн", "и", "напиши"
910 data "програнму","на"."Бейсике"
920 data "zzzz"
5. 3 Таблицы случайных событий.
Нам очень часто бывает важно определять, как часто проис-
ходит то или иное событие. Например, знание того, как часто та
или иная буква алфавита встречается в текстах, оказывается
важным при расшифровке закодированных сообщений.
Чтобы определить частоту, с которой встречается та или
иная буква, нам надо разработать какой-то простой прием. Давай-
те сначала попробуем этот подход с помошью карандаша и бумаги.
ПРИНЕР-5. 2 Определите частоту повторения гласных букв в сле-
—-' дуюшем тексте:
"Определите частоту, с которой каждая гласная буква встре-
чается в этом предложении".
а) Ны можем пройтись по всему тексту, вычеркивая каж-
дую букву "а", затеи повторить то же самое для буквы
"е" и т.д. Всего нан придется пройти по тексту 9 раз для де-
вяти основных гласных букв русского алфавита.
б) Ножно все сделать за один раз, если нарисовать таблицу
и, встретив гласную букву, ставить в таблице отметку против
нее.
определите- ставим 3 отметки против "е" и по од-
ной отметке против "и" и "о".
Частоту- по одной отметке против "а"."о" и "у".
Решение
Гласная |
Счетчик |
Всего |
а |
11111 11 |
7 |
е |
11111 11 |
7 |
и |
ill |
3 |
О |
11111 11 |
7 |
у |
11 |
2 |
ы |
|
0 |
э |
1 |
1 |
ю |
|
0 |
я |
1.11 |
3 |
Используйте этот метод для определения длин слов в
тон же предложении.
Разработав метод для карандаша и бумаги, мы можем
пать к тому, чтбы разработать метод для компьютера.
Предположим, нан надо подсчитать частоту повтрения цифр
0.1,2. ..9, в какой-то числовой последовательности, для этого мы
можен использовать десять счетчиков: с(О), с С1).....с(9). На-
чальное значение каждого счетчика равно нулю. Возьмем последо-
вательность 473808. Первая цифра - 4. Счетчик с(4) увеличится
на единицу и т. д.
цифры в |
|
|
|
Счетчики |
|
|
|
|
|
последова- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
тельности |
с(0) |
с (1 ) |
с (2) |
с(3) |
с (4) |
с (5) |
с (6) |
с (7) |
с (8) |
с (9) |
Исходно |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
4 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
7 |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
3 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
8 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
8 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
2 |
0 |
Итак, когда вводится цифра К, счетчик с(К) получает прира-
щение на единицу. Это легко реализуется в БЕИСИКе:
120 IHPUT К
140 LET С(К) = С(К) + 1
Правда. "Спектрум" не позволяет нам использовать нулевые
элементы массива - с(О). Отсчет элементов в массиве всегда дол-
жен начинаться с единицы. Но эту проблему легко обойти. Пусть:
с<1) считает нули
с(2) считает единицы
с(3) считает двойки и т.д.
Итак, счетчик с(к) у нас будет считать к-1 -ую цифру. Поэ-
тому. когда мы вводим цифру п. то должны увеличить n+1-й счет-
чик.
век-5. з Программа
10 IHPUT п
20 LET с(П+1) = с(П+1) + 1
используется для определения количества появлений цифр в после-
довательности: 3.1.0.5.9.9.6.6.6,0.4.4.2,4.1.2.1.3.0.2.1. 3.
Каковы будут значения: а) с(4) после ввода трек цифр?
в) с(10) после ввода 12 цифр?
c) с(2) после ввода веек цифр?
d) с<1) после ввода веек цифр?
!пример-5. з| написать программу для ввода последовательности
I------' цифр и для расчета и выдачи частоты повторения
каждой цифры.
Для цифр 0,1;... 9 назначим счетчики с <1), ... с(10).
Заканчивать ввод цифр будем "заглушкой" - 9999.
40 DIH С(10)
юо priht "По одной введите цифры"
110 priht "закончите список -9999"
115 priht
120 IHPUT "Очередная цифра? ";m
121 priht m
130 IF m=-9999 THEH GO TO 190
140 LET c(m+l) = c(m+l) * 1
150 GO TO 120
200 CLS
210 priht "Цифра"."Счетчик"
220 priht
230 for j=1 to 10
240 priht j-l.c(j)
250 hext j
260 stop
Если ввести последовательность: 3. 7, б, 4. 9.1.4. 9. 2. 7. 8. 0.1.
5,2.7.-9999. то результат работы программы будет такой:
Цифра счетчик
0 1
1 2
2 2
3 1
4 2
5 1
6 1
7 3
8 1
9 2
частотная таблица длин слов.
Решение.
В этом уроке мы написали две программы, первая определяет
длины стрингов. Вторая создает таблицу частоты повтора цифр.
Попробуйте в рамках очередного упражнения объединить эти два
приема и построить часттную таблицу длин слов. Если хотите, мо-
жете для этого использовать ту Фразу, которую мы анализировали
в ПРИНЕРЕ-5.2. Перед началом работы предположите, что слов
длиннее 15 синволов нам не встретится, поэтому нас должен
устроить массив:
w( 1). w(2).....w (15)
5. 4 Частотные диаграммы.
Картинка оказывает на нас большее воздействие, чем просто
колонка цифр. Она как бы несет в себе больше информации. А по-
чему бы нам не дать компьютеру команду, чтобы он рисовал нам
диаграмму? Ны ведь уже умеем рисовать целые ряды символов
"«" переменной длины (УРОК 4) с помошью циклов FOR... НЕХТ.
Что появится на экране в результате работы следующей
программы, если при вводе дать: 2.5.7.8,3,1?
10 IHPUT а
20 FOR f=l то а
30 PRIHT "»•;
40 НЕХТ f
50 PRINT
60 GO ТО 10
Точно такую же технику мы можем использовать, если числа'
будем не вводить с помошью IHPUT, а брать их из таблицы частот
повторения символов. Тогда на экране ны получим диаграмму рас-
пределения. Чей чаше встречается тот или иной синвол, тен более
длинный ряд "»" будет построен на экране.
Написать программу для построения графика распре-
деления частот повторения гласных букв в фразе.
рассмотренной в ПРИНЕРЕ_5. 2.
Решение Эта програмна рисует график для частот, которые мы
уже рассчитали. Ны вводим эти частоты в строках
40. . .80. Ввод осуществляется с поношью счетчиков f(K), где fill
- частота повторения буквы "a"; f(2) - буквы "е" и т.д.
Печать символов "»" в соответствии с числом f(K) выполня-
ется в строках 220. . . 250.
10 REH ««Частотная диаграмма»»
20 DIH f(9)
40 LET К=1
41 REH ««Процедура ввода частот»«
42 print "Гласная", к
44 INPUT "Введите частоту f(К)
46 PRINT f(K)
60 IF f(К)=-9999 THEN GO TO 100
70 LET K=KM
80 GO TO 41
90 REH ««n.»»»»'»»»»»»»»»»»»»»»»
100 REH «« -9999 нам вводить в список не надо««
110 LET ПК 1
120 reh .«««i»»»»»»»»»»»»»»»»»»
200 КЕН ««Процедура печати диаграммы»»
205 CLS
210 PRIHT
220 FOR Х=1 ТО П
230 FOR Y=1 ТО f(x)
240 PRIHT "«■;
250 hext у
260 PRIHT
270 PRIHT
280 HEXT X
300 REH «i»»»*»»»»»»»»»»»»»»»»
Результат работы програнмы будет выглядеть так:
n « « « к к к
»»»»»»»
» » «
к к
«ММ
5. 5 табуляция.
Ны уже умеен строить осмысленные диаграммы, но кое-чего
все же не хватает. Было бы намного лучше, если бы могли сами по
желанию устанавливать, какую хотим позицию печати в строке. Это
называется табуляцией (поскольку наиболее широко применяется
при печати таблиц). В БЕИСИКе для этого служит оператор TAB.
Рассмотрим следующую программу:
50 PRIHT "12345678901234567890123456789012"
60 PRIHT "a"; TAB 5; "е";TAB 7;"и";ТАВ 19;"О";ТАВ 31; "у"
Вот что она выдает:
12345678901234567890123456789012
а е и о у
Как видите, TAB 5 печатает букву "е" в 6-й позиции. Почему
в шестой? Потому, что компьютер отсчитывает позиции печати,
начиная с нулевой. Следующая программа поправит этот недочет:
50 PRIHT "01234567890123456789012345678901"
60 PRINT "a"; TAB 5; "е"; TAB 7; "и"; TAB 19; "о"; TAB 31; "у"
ruh
01234567890123456789012345678901
a e и о у
Примечание: На "Спектруме" TAB а установит позицию Печати
в столбце а. но на многих других компьютерах здесь нужны скоб-
ки: TAB (а).
Напишите программу, которая напечатает COL 1. C0L2,
COL3. СОИ следует печатать с нулевой позиции. COL2 -
с 10-Й. C0L3 - с 20-Й позиции.
Переменное значение TAB.
ВСК-5. 5
В качестве параметра при операторе TAB может выступать имя
переменной, это позволяет получать разные интересные и полезные
экранные эффекты.
Напринер:
зо for a=i то ю
40 PRIHT TAB a; "Hello"
50 НЕХТ а
60 STOP
ruh
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
напишите фрагмент программы, которая введет три числа
(по выбору пользователя) и напечатает стринг "Тест",
начиная с трех разных позиций на одной экранной строке.
5. 6 Расчленение стрингов.
вск-5. б
вы никогда не задумывались о том. что такое дата? Например,
как компьютер представляет себе 23 июня 1973 года?
Ны знаем, что компьютер умеет хранить данные. И делает это
двумя способами - в виде чисел или в виде символьных строк
(стрингов). В виде чисел он уделяет по 5 байтов памяти на каж-
дое число, а для стрингов - по одному байту на каждый символ.
Так что же такое дата? Число или стринг?
23 июня 1973 года - вроде бы стринг. а если мы запишем то же
самое как 230673 - то вроде бы это число, давайте разбираться.
Если 230673 - это число, то почему 110593 (11 мая 1993 года)
меньше, ведь 93-ий год был позхе 73-го? л если это стринг. то
спрашивается, как компьютер смохет рассчитать, сколько лет бу-
дет в 93-м году молодому человеку, родившемуся в 73-м.. да и
вообше. как тогда оперировать с календарей?
ответ очень прост. Даты - это особый вид информации и рабо-
тать с ними надо особо. Их надо вводить, как стринги. а хранить
в памяти и обрабатывать надо как числа. И вводят их именно как
стринги еше и потому, что не все элементы даты нам одинаково
вахны.
Например, если наша организация ехегодно в декабре месяце
повышает заработную плату тем. кто отработал у нас более десяти
лет, то для этого вахен только год. в котором работник был за-
числен. Если хе наша организация занимается настройкой пианино
и роялей, то кахдые три месяца мы рассылаем всем своим зарегис-
трированным клиентам письмо-напоминание о том. что надо бы об-
слухить инструмент. В этон случае нас интересует только месяц,
когда был последний раз обслухен данный клиент, а год и день не
имеют никакого значения.
Наконец, для отдела халоб и претензий, которому полагается
разбираться с каждым заявлением в 30-ти дневный срок, вахен
день и месяц поступления заявления.
итак, мы видим, что стринг. содержащий дату, имеет вахное
значение как единое целое, но есть серьезные причины для того.
чтобы вырезать из него отдельные части и обрабатывать их от-
дельно. Таким образон. после того, как дата была введена в
Формате: ДДННГГ или
ДД. НН. ГГ или
мн. ДД. ГГ или как угодно,
нам нужно иметь возможность "вырезать" из нее отдельно дни, ме-
сяцы и годы и работать с ними порознь, но теперь уже как с чис-
лами.
Для этого нужен специальный оператор, и он есть. На "Спек-
труме" это делает оператор
(. . . ТО. . . ).
Его полная Форма, например, такая:
х$ (а ТО Ъ)
Здесь из стринга х* вырезается его часть, начинающаяся с
символа, номер которого равен а и до символа с номерон ъ.
Если X* = "СПЕКТРУН", то X» (5 ТО 7) = "ТРУ"
вы можете поснотреть, как это происходит, на принере следу-
ющей программы:
12 ihput "Введите исходное слово" ;го*
16 priht m*
20 ihput "Начало вырезки"; а
40 priht а
50 IHPUT "Конец вырезки"; b
60 priht ь
во.LET n*=m*(a то ь>
90 priht m*; " ("; а; " то ";ь;") = ";п*
100 stop
В некоторых других языках программирования, а также в неко-
торых других версиях БЕИСИКа Вы найдете еше несколько операто-
ров для вычленения субстринга из стринга. нан бы не стоило на
них и останавливаться, но вы должны знать, как Вам реализовы-
вать те же возможности, раз этих операторов у вас нет.
LEFT* <х*,К) - дает вам к левых символов стринга. На "Спек-
труне" его аналогом будет:
X* (1 ТО К).
RIGHT* (х*,К) - дает К правых символов стринга. На "Спек-
труме" аналог подобрать труднее, приходится пользоваться Функ-
цией LEN, которую мы рассмотрели ранее:
x*(leh <х»)-к+1 то leh (x*))
HID* (х*. К, т) - дает Вам m символов, начиная с К-го. С этим
оператором дело обстоит проше:
х*(К то к+ш)
Если а*="1а2ЬЗс4сГ. то что получится:
(a) а*(3 то 5)
(b) а*(1 то 4)
(c) а*(4 то 4)
Напишите программу, которая будет вводить сло-
ва (по одному), а выводить будет только те
слова, которые начинаются с гласной.
5. 7 Функция VAL.
Научившись расчленять стринги, нан теперь надо научиться
понимать, что же мы в итоге получили. Один из возможных приемов
заключается в использовании функции VAL(а*). которая ишет чис-
ловое содержание a*. VAL(a*> на "Спектруие" дает числовое зна-
чение а*, если стринг а» содержит только цифры.
Демонстрационная программа:
10 REH «» ФУНКЦИЯ VAL ««
20 IHPUT "Введите очередной стринг";п*
21 PRIHT П»
25 IF 11*= "zzzz" THEH GO TO 999
30 LET 11=VAL №♦>
60 PRIHT
70 PRIHT П
80 PRIHT
90 GO TO 10
999 STOP
RUH
456
456
789
789
56t
С Honsence in BASIC 30:1
Обратите внимание на сообщение об ошибке. "Спектрун" не
может дать числовое значение для "56t". поскольку "t" - это не
цифра.
Каковы будут результаты:
(а) |
VAL |
(a*). |
где a* |
= "54" |
|
(Ь) |
VAL |
|
где b* |
= "76ХУ" |
|
(с) |
VAL |
<C*>. |
где с* |
= "аз" |
|
<d) |
VAL |
(d*>. |
где d* |
= "-132" |
|
(е> |
VAL |
<e*(l |
TO 2)). |
где е*-- |
"593' |
(f) |
VAL |
(f*(l |
TO 1)). |
где f*= |
"ваш1 |
(в) |
VAL |
(s*(l |
TO 2)). |
где g*= |
"Z35' |
(h) |
VAL |
<h»<3 |
ТО 3)), |
где h*= |
"593' |
(1) |
VAL |
(i»(2 |
TO 3)), |
где |
"вага' |
(J) |
VAL |
(j*<2 |
ТО 3)), |
где |
"Z351 |
Теперь мы с Вами уже в состоянии организовать такую полез-
ную вешь. как проверка правильности ввода пользователем даты.
Мы знаем, что все люди делают ошибки и всюду, где возможно,
компьютер должен перехватить эти ошибки.
Напишите программу, которая проверит все три поля
в 6-разряднон стринге, выражающем дату.
Стринг даты - d» имеет три ноля:
гг - год - правое поле
НИ - месяп - среднее поле
ДД - день - левое поле.
Ны рассматриваем только годы 1994 и 1995»'поэтому:
VAL (d* (1 ТО 2)) должно быть 1. ..31
VAL (d«(3 ТО 4)) должно быть 1. . . 12
VAL <d*<5 ТО 6)) должно бЫТЬ 94. ..95
Это довольно сложный процесс, поэтому сначала составим
блок-схему.
решение
Ниже приведен текст этой КЕИСИК-програнны.
Ю REM ««Проверка даты»»
го INPUT "Введите дату ":d$
22 PRIHT d*
30 IF d$="ZZZZ"THEH GO to 900
50 IF LEH <d»>=6 THEH GO TO 110
80 PRIHT "Error in date length"
90 GO TO 10
100 REH ш»нншш»ни1шнн<|ш1
110 PRIHT "Длина стринга - О. К. "
120 IF VAL <d*(5 TO 6))=94 THEH GO TO 210
130 IF VAL <d$(5 TO 6))=95 THEH GO TO 210
180 PRIHT "Неверно указан год"
190 GO TO 10
200 REH ................................
210 PRIHT "Год указан верно"
220 IF VAL <d*<3 TO 41X1 THEH GO TO 280
230 IF VAL (d»<3 TO 4))<=12 THEH GO TO 310
280 priht "неверно указан месяц"
290 GO TO 10
300 REH »»««»«««...»......»..«»..«.,,«,.
310 PRIHT "Несяц указан верно"
320 IF VAL <d»(l TO 2) XI THEN GO TO 380
330 IF VAL (d*(l TO 2)><=31 THEH GO TO 410
380 PRIHT "Неверно указан день"
390 GO TO 10
400 reh «ii»»»»»»»»»»»»»»*»»»»*»»»»»»»»»»
410 priht "Дата проверена, все в порядке. ■
490 GO ТО 10
900 PRIHT "Конец проверки даты. "
А вот еше одно очень практическое применение функции VAL.
Скалите, как часто Ван приходилось "заваливать" программы на
простой ошибке, когда исполняется ihput п. а Вы вместо того,
чтобы ввести число, нажимаете на какую-либо букву. Ошибка до-
садная и приходится заново повторять весь ввод.
Эту проблемы легко решить. Надо все, что вводится через
IHPUT. расценивать, как стринги. Затен надо понять, что ввел
пользователь. Если это число, то с помошью Функции val мы лег-
ко найден его значение. Вот возможный пример такого подхода:
50 IHPUT а*
60 IF а*="" THEH GO ТО 50
70 FOR f=l ТО LEH а»
80 IF a* <f> <"0" OR a*(f)>"9" THEH GO TO 50
90 HEXT f
100 LET 1D=VAL a*
Когда Вы делаете программу для постороннего пользователя.
Вы должны предусмотреть по-возножности все варианты его непра-
вильных действий, которые могут привести к выходу программы из
строя.
Практически все программы в этой книге в этом смысле не
зашишены от неправильных действий и это вовсе не потому, что мы
не придаем этону значения или считаем это ненужным. Это очень
важный монент, но мы его опускаем только потому, что книга ине-
ет учебный характер, а зашита каждой программы от ошибочных
действий, как минимум вдвое увеличивает размер программы и при
этом "скроет" основную мысль, которую программа должна донести
до читателя.
5. 6 Оператор prist at
Это еше одна Форма оператора priht. Ее полный Формат:
priht at у. x
такой оператор позволяет нам выполнять печать в заданном
знакоместе с экранными координатами:
у - по вертикали;
х - по горизонтали.
Сравните оператор ат с оператором tab. Если tab задает по-
зицию печати на текушей экранной строке (О. ..30), то AT делает
не только это, но еше может задавать номер строки у(!...21)
Применяется at, как и tab, для того, чтобы уменьшить объем
программирования. Так, если Вы хотите изобразить на экране ре-
шетку их синволов "«", то вы можете сделать это без оператора
AT или с ним.
а) без оператора AT:
10 FOR f 1 TO 21 STEP 3
20 FOR К=1 TO 31 STEP
30 PRINT "«"
40 NEXT К
50 PRINT
60 PRINT
70 PRINT
80 NEXT f
б) с оператором AT:
10 FOR f=l TO 21 STEP 3
20 FOR K=1 TO 31 STEP 2
30 PRINT AT f, K; "»"
40 NEXT К
50 NEXT f
Как видите, второй путь ощутимо короче.
Задание на самостоятельную проработку.
1. Напишите программу, которая примет от пользователя сим-
вольный стринг и выдаст его же. но в обратном порядке.
ОБЗОР УРОКА
Проверьте свое знание следующих вопросов:
- применение функции LEH(at);
- печать простейших графиков:
- применение оператора TAB:
- использование х»<а ТО Ы;
- применение Функции VAL (а»);
- зашита оператора IHPUT от неправильного ввода;
- использование оператора AT в операторе PRIHT.
ОТВЕТЫ НА ЮПРОСЫ ДЛЯ САМОКОНТРОЛЯ
(а) 3; <ь> 1; (с) 2; <d) Т.
длина |
Счетчик |
всего |
1 |
11 |
2 |
2 |
|
0 |
3 |
|
0 |
4 |
1 |
1 |
5 |
1 |
1 |
6 |
1 |
1 |
7 |
111 |
3 |
8 |
|
0 |
9 |
|
0 |
10 |
1 |
1 |
И |
11 |
2 |
(а) С(4) = 1 (Ь) С(10)=2
(С) С(2)=4 <d> С(1)=3
■ ■
я к к к к
IX
10 PRIHT "COL 1"; TAB 9;"COL 2";TAB 19;"C0L3"
10 IHPUT a
20 IHPUT b
30 IHPUT С
40 PRIHT TAB а;"Тест":ТАВ b; "Тест";ТАВ с; "Тест"
К57!
1вД-5. g|
(а) 54
(d) -132
(в) нет решения
(J.) 35
(Ь) нет решения
(е> 59
(Ь) 3
(с) нет решения
(f) 8
(1) нет решения
ОТВЕТЫ К УПРАЖНЕНИЯ!
20 IHPUT "Введите слово
30 IF W*="ZZZ2" THEH GO TO 9999
40 LET C»=W*<1 TO 1)
50 IF C»="a" THEH GO TO 200
51 IF C«="e" THEH GO TO 200
53 IF C»="И" THEH GO TO 200
53 IF C»="0" THEH GO TO 200
54 IF ct-'у" THEH GO TO 200
55 IF С*="Э" THEH GO TO 200
56 IF С»="Ю" THEH GO TO 200
57 IF С*="Я" THEH GO TO 200
100 GO TO 10
190 REH «ни*»»»**»»» «mi»* »«»««»
200 PRIHT
210 PRIHT ct,w*
220 GO TO 10
230 REH n»»»*»*»»»»»*»»»*»»*»»»
9999 STOP