30 часов Бейсика для начинающих 1993 г.

Урок 3 - что такое стринг?


УРОК 3

з. 1 что такое стринг?

На протяжении двух первых уроков мы в основном имели дело
с числами. Безусловно, компьютер предназначен для работы с ни-
ми. но. к счастью, не только для этого, в этом уроке мы посмот-
рим. как конпьютер может работать с символами.

Под символами мы будем понимать (пока) буквы алфавита
(строчные и прописные), цифры, знаки препинания, символы блоч-
ной графики, арифметические знаки, скобки, знаки о-гашений о, <
и
пр. ). Имея до сих пор дело с числами и с переменными, которым
эти числа принадлежали, мы выражали их тоже символами. Но нас
эти символы интересовали не сами по себе, а только как способ
представления чисел. "Спектрум" же может работать с символами,
воспринимая их буквально и даже более того. Вы имеете возмож-
ность объединять эти символы в
группы, которые называют стрин-
гами.

Примечание: в отечественной литературе как-то не прижилось
иноязычное слово
стринг. внесто него обычно употребляют тяжело-
весное словосочетание "строковая переменная" или "символьная
последовательность". Чтобы не вынуждать читателя ломать голову
над тем. почему она перененная и почему строковая, мы все же в
рамках этой книги буден употредлять иноязычное слово "стринг".

Итак, стринг - это группа символов. Пробел - это тоже сим-
вол и притом очень важный. Вот пример нескольких
стрингов:

CAT (слово)

Harearet Thatcher (имя)

Z9>72?8 (просто набор символов)

ABC 123W (номер автомобиля)

Таким образом, стринг - это любая смесь любых символов.

С точки зрения БЕИСИКа числа воспринимаются как числа
только если ны с ними хотин сделать что-нибудь арифметическое.
Во всем остальном числа - это тоже
стринги. Хотите принер? Что
такое 007? вы скажете, что это число? Ножет быть и так, а может
быть это псевдоним всемирно известного агента?

Когда Вы видите номер дона или телефонный номер. Вам не
хочется их сложить, разделить или умножить? вам не приходит в
голову сравнивать телефонные номера нежду собой, у кого этот
номер больше? Все это
происходит потону, что и номер дома и те-
лефонный номер Вы в повседневной жизни не считаете числами.

ведь за ними не стоят никакие количества. Вы давно привыкли
воспринимать их как просто набор символов, т. е. как стринги.

Хранение стрингов в памяти.

Как же компьютер разбирается, когда ны инеем в виду, что
набор
цифр выражает число, а когда это стринг? а очень просто -
по имени. Если на конце имени переменной стоит значок ». то это

стринг.

Если для чисел "Спектрун" не вводит никаких ограничений на
имена (можете придумывать что
угодно любой длины), то для стри-
нгов Вы очень ограничены. Иожно использовать только одну букву
алфавита с присоединением к ней значка *. Эта буква может быть
прописной или строчной - все равно. Компьютер считает, что а* и
а* - одно и то же имя.

При чтении програнн принято читать эти значки так:

а» - "а-стринг"

ш» - "эн-стринг" и т. п.

Это то. что касалось имен стрингов. а как же вводятся сани
данные, то есть символы? Это делается тоже очень
просто - их
надо взять в кавычки. Например:

10 LET a*="Hello"

или

зо if а»="hello" THEH go то во

Какое из перечисленных имен является правильным име-
нем стринга?

ВСК-3. 1.

вск-з. г.

(а) А* (Ь) те (с) t7* (d> вч
(е> с*з <f) вр$ (в) 2* (h) к»

Какой из приведенных операторов является правильным
с точки зрения БЕИСИКа?

(a) LET А=87

(b) LET В$="FRED"
(С) LETT Н* = 95вЗ

(d) LET К8="JAH POT"

(e) LET L17 = 38

3. 2 И еше о стрингах...

типичный вопрос: "Какова допустимая длина стринга?" иными
словами, сколько символов можно вводить, хранить и выводить в
виде единой
группы с однин именен? "Спектрун" разрешает исполь-
зовать стринги любой длины, лишь бы хватило памяти компьютера.

Ны говорим здесь о стрингах. как о чем-то новом, но ведь
на самом деле, когда, мы в Уроке -1 использовали оператор PRIHT
для печати текстовых сообщений, то заключали их в кавычки. Та-
ким образом, мы с этим сообшениен и работали, как со
стрингом.

3. 3 Оператор PRIHT ...;...

Вы. по-видимому, ухе поняли, что очень важно, как выглядит
на экране результат работы программы. Это относится и к
стрин-
гам. Когда мы выводим некоторую текстеую информацию на экран,
то хотим, чтобы стринги являлись словами, чтобы из слов получа-
лись предложения и нас никак не будет устраивать, если одно
слово будет печататься в девой части экрана, а другое - в пра-
вой. Аля того, чтобы
информция выводилась на экран подряд, су-
ществует еше один разделитель в операторе PRIHT - это " (точ-
ка с запятой). Посмотрите, как все это работает.на примере сле-
дующей программы.

10 REH ««Автоответчик»«
20 PRIHT
"алло"

30 PRIHT "Похалуйста назовите номер Вашего телефона"
40 IHPUT t»
50 PRIHT t»
60 PRIHT

70 PRIHT "алло-.t*
80 PRIHT

90 PRIHT "алло";!»
100 PRIHT

110 PRIHT "АЛЛО "; t*
120 PRIHT

130 priht "Алло";" "; t$
140
stop

чтобы облегчить Вам анализ этой программы, мы привели

результат ее работы и при этом еше и протрассировали эту

программу. Трассирование - это когда вместе с результатами
печати распечатываются и номера строк.

RUH TRACE

алло ... 20

Похалуйста назовите номер Вашего телефона .. 30

"l" 58354 ... 40. 50

алло 58354 ... 60.70

алл058354 ... 80, 90

алло 58354 . . . 100, 110

алло 58354 . . . 120. 130

Комментарий.

строка 40, здесь ihput t» генерирует курсор "l". ны вводим
телефонный номер
58354. Он в программе воспринима-
ется как
стринг. а не как число. Если бы ны хотели,
чтобы он был числом, надо было бы делать IHPUT t, а
не IHPUT t».

строка 70. Печатается "Алло* в левой половине экрана, а

"58354" - в правой,
строка 90. здесь "Алло" и "58354" печатаются
подряд, без
пробела.

Ни тот. ни другой способ не удовлетворительны. Если ны хо-
тим иметь пробел между словом "Алло" и телефонный номером, у
нас есть два пути - либо сделать замыкавший пробел в слове
"Алло " (как в строке 110). либо впечатать этот пробел (как в
строке 130).

ВСК-3. 4. Напишите программу, которая выполнит печать так, как
- показано на
рис. 19.

ВСК-3. 3. рассмотрите нижеприведенную программу и попробуйте
сообразить, как будет выглядеть ее вывод на экран.
Впишите в нижеприведенную сетку результат ее работы.

5 кем ««пример раскладки»»

ю PRIHT "Раскладка-

го LET Ь»="КУРС"

30 LET С»="БЕИСИКА"

40 PRIHT

50 PRIHT Ь*. С$

60 PRIHT

70 PRIHT ь*;с$

80 PRIHT

90 PRIHT ъ$;" с*

100 STOP

О 1234567890123456 7 8 9 012

3. 4 Оператор IHPUT "...";...

До сих пор мы использовали оператор PRIHT для печати за-
просов к пользователю перед исполнением оператора IHPUT. в БЕИ-
СИКе.
который реализован на Вашем "Спектруме" эти две операции
можно объединить, введя запрос непосредственно в оператор IHPUT
и заключив его в кавычки. Тогда вместо

40 PRIHT "Пожалуйста назовите номер Вашего телефона"
50 IHPUT t$

Вы можете записать просто:

40 IHPUT "Пожалуйста назовите номер Вашего телефона"; t»

Правда. Вы заметили, наверное, что в этом случае запрос
печатается в нижней части экрана и исчезает после того, как
ввод данных завершен и нажата клавиша EHTER. Поэтому, «ели в
печати результатов Ван эта инФорнапия нужна, то придется давать
пояснения и в операторе PRIHT.

40 IHPUT "Пожалуйста назовите нонер Вашего телефона";t$
50 PRINT "Номер Вашего телефона ";t$

Результат работы:

RUN

Номер Вашего телефона 58354

Нижеприведенная программа демонстрирует некоторые эФФекты
применения оператора PRINT. Поскольку нам несколько раз необхо-
димо слово "Алло", мы запомним его под именем hi в самом начале
програнмы.

20 LET ъ$="Алло"
30 PRINT h$

40 INPUT "Пожалуйста назовите номер Вашего телефона";t*
50 PRIHT "Номер Вашего телефона ";t*
60 PRINT

70 PRIHT h$. t»
80 PRIHT h*; t*
90 PRIHT

100 PRIHT h$;" ";t*

Ны не завершаем программу оператором STOP. Многие версии
БЕИСИКа требуют, чтобы программа завершалась оператором STOP
или EHD. но БЕЙСИК "Спектрума" не считает это обязательным,
если строка программы, которая исполняется последней и являет-
ся последней (т.е. имеет наибольший номер). Поэтому для Вас
STOP является просто удобной командой,
которую Вы можете ис-
пользовать если хотите, чтобы программа завершалась не в по-
следней строке, а где-то в другом месте. Такое может быть, на-
пример. в такой случае (это пример нехорошего стиля, но он по
крайней мере демонстрирует применение оператора STOP):

10 ...
го ...

30 GO то 100
40 ...
50 STOP
100 ...
110 GO ТО 40

Что появится на экране после работы этой программы,
если вас
зовут Джон Смит и Ваш возраст - 45 лет?
ю LET "Благодарю вас"
20
ihput "Как Вас зовут?"; п»
зо
priht "Вас зовут ";п$
40 priht

50 ihput "Сколько Вам лет?";а*
60
priht "Вам ";а»;" лет"
70
priht
80 priht

90 PRIHT t$; " ";n«
100 STOP

3. 5 Числа и стринги в операторе PRIHT.

ВСК-3. 5.

Возникает вопрос: "А могли бы мы вводить телефонный номер
не в качестве стринга, а как число?" да, конечно могли бы, но
при этом имели бы проблемы.

Первая проблема - длина. Числа имеют ограниченную длину,
это связано с ограниченной точностью вычислений. А телефонный
номер, особенно междугородний или международный ножет быть
очень длинным.

вторая проблема - с символами, нельзя ввести в числовую

переменную t ничего, кроне числа, выраженного цифрами от о до
9. А ведь многие телефонные номера записывают с использованием
пробелов, тире, скобок и т. п. символов, например:
123 45 67
123-45-67

8-(123)-456-78-90
Нижеследующая программа покажет Вам некоторые фундамен-
тальные различия в печати чисел в обычной числовой и в
стринго-
вой записи. Наберите эту программу и запустите ее дважды. Пер-
вый раз введите положительное число, например, 58632. а во вто-
рой раз - отрицательное, например, -9637. Для того, чтобы раз-
ница была наглядна, программа распечатает в верху экрана шкалу
с номерами позиций печати. Эта шкала хранится под именем з».
10 REH »«Автоответчик»«
20 LET Ъ%~ "АлЛО"

30 LET s$="1234567890123456789012345»
40 PRIHT h«

50 IHPUT "Ваш номер?": t»

60 PRIHT "Номер вашего телефона - ";t*

70 IHPUT "Введите его еше раз. "; t

80 PRIHT t

90 PRIHT

100 PRIHT 3*

110 PRIHT h«.t»

120 PRIHT h*,t

130 PRIHT St

140 PRIHT h*.t»

150 PRIHT h«,t

160 PRIHT s*

170 PRIHT h*; " "; t*

180 PRIHT h»;" "t

190 STOP

Напишите програмну, которая запросит ввод Вашего
имени в качестве стринга и Вашего возраста в качес-
тве числа. Организуйте вывод так, чтобы печаталось сообщение:
"Неня
зовут .... Нне . . . лет. "
Вместо "лет" по несту поставьте сани "год" или "года", в
зависимости от числа.

вск-з. 6.

3. 6 Стандартные письма.

Нногие, а особенно организации, приобретают компьютер для
того, чтобы автоматизировать
рутинную конторскую работу. Мы с
Вани сейчас уже можем написать программу для отдела кадров
кру-
пной
Фирмы, которая постоянно нуждается в квалифицированных ра-
ботниках и ишет их всеми возможными способами.
Пусть нам надо
создать программу, которая будет генерировать стандартные пись-
ма в адрес претенденте на рабочие места в Вашей Фирме.

Ю REM ««Генератор писем»»
15 REH ««имя соискателя»»
20 IHPUT а»

25 REM ««дата заявления»«
30 IHPUT ъ»

35 REM ««имя липа, проводящего собеседование»«
40 IHPUT
с»

45 REH ««время собеседования»»
50 IHPUT d*

55 REH ««дата собеседования»»
60
ihput е»

65 REM ««место проведения собеседования»»
70 IHPUT f*

75 REH ««имя начальника службы кадров»»
80 IHPUT В*

90 rem »«конец ввода данных»»
юо rem ««печать письма»«
110
priht
120 priht
130 print

140 PRIHT "Уважаемый господин ";а$;"!"
150 PRIHT

160 PRIHT "Мы благодарим Вас за письмо от "

170 PRIHT ь$; ". "; "Просим Вас прибыть"

180 PRIHT "на собеседование по вопросу работы"

190 PRIHT "к"; с»; "в"; d*;

200 PRIHT е»; "в наш офис по адресу"

210 PRIHT "УЛ. ПЭЛ НЭЛ. Д. 13"

220 PRINT

230 PRIHT "Искренне ваш. "

240 PRIHT

250 PRIHT

260 PRINT

270 PRIHT 8*

В результате работы этой программы должно получиться
что-то вроде того, что показано на рис. 20.

Правда, тот, кто работает с этой программой, может испыты-
вать некоторые трудности в связи с большим количеством запро-
сов. Он может запутаться, когда и что надо вводить, когда в
нижней части экрана появлется курсор "L". Ножет быть, он напи-
шет для себя "шпаргалку", где отмечено, в каком порядке вводят-
ся данные, а ножет быть Вы облегчите ему жизнь, введя подсказку
в оператор INPUT.

УПРАЖНЕНИЕ-3. 1.

Агенту, занимающемуся торговлей недвижимос-
тью,
приходится периодически рассылать много
писем своим зарегистрированным клиентам для того, чтобы убе-
диться. ищут ли они еше новое жилье или уже решили
эту пробле-
му.
Ему также необходимо периодически поверять, не изменились
ли запросы клиента по части размеров, местоположения, цены и
т. п. Разработайте программу на БЕИСИКе, которая будет выполнять
эту работу.

УПРАЖНЕНИЕ-3. 2. Всем нам приходится (а если еше нет, то скоро
придется) отправлять нассу писем в
фирмы с
запросом о видах предоставляемых услуг, о ценах, о сроках и
порядке исполнения заказа. Разработайте программу, которая бу-
дет создавать письмо автоматически, оставив для ввода только
специфические данные, имеющие отношение именно к этому письму.

3. 7 Понятие о Файлах. Операторы READ, DATA.

До сих пор мы вводили данные в компьютер во вреня исполне-
ния програнны с помошью оператора
input. Другой способ - хра-
нить данные в операторе
data внутри самой програмны. Они могут
быть прочитаны оттуда с помошью оператора read. Обычно данные
в операторе
data хранят в конце програмны.

Всякий раз, когда компьютер встречает оператор read, он
принимает очередную информацию из
data в порядке очередности
записанных в него данных, принятые данные помешаются в перемен-
ную с именем, указанным в операторе
read. Итак, для того, чтобы
оператор
read был исполнен, должен 'существовать соответствующий
ему оператор
data. Рассмотрим, например, следующую программу:

5 REH *«Read»»
10 READ a*
20 READ b*
30 READ C*
40 DATA "ТОН". "ДИК"
50 DATA "Гарри"

•Если в операторе data хранятся стринги, "Спектрун" требу-
ет. чтбы они стояли в кавычках.

Строка 10 дает указание, чтобы компьютер взял первый эле-
нент списка
data и сохранил его в виде перененной с иненен а».
Такин образом. в а» поступает иня "Тон". Следующий оператор
read в строке 20 тоже требует приена данных из data. Конпьютер
берет очередной (в данной случае -
второй) эленент (это "Дик")
и понешает его в нанять под иненен Ь*. № можете сами в этон
убедиться, добавив к програнне
строки:
бо print а*

70 PRINT Ъ*
80 PRINT
с»

Где ошибка в програнне?
10 READ а*
20 READ Ь
30 READ
с
40 READ d*

50 DATA "Paul". "Нагу"

ВСК-3. 7.

63

А вот принер более сложного использования READ и DATA:
30 READ П$. t*
120 READ C$
150 READ m*
160 GO TO 30

200 DATA "Benny", "Cooper", "Draper"
210 DATA "Eddie"."Gwlnne"
220 DATA "Hettle"

230 DATA "Horley", "Prosser". "Smythe". "WeeKs"
240 DATA
"Wilson"."Veleth"
Вот в какон
порядке здесь происходит считывание данных:

Benny

Copper

Draper

Eddie

Gwlnne

Hettle

roorley

Prosser

первый проход:

п$

с»
т$
п*
t*
с*
т*

Второй проход:

и т. д.
- 6613

Взяв предыдущий пример, ответьте,. что будет хранить-
ся в переменных по окончании последнего прохода, ко-

гда все данные будут считаны?

ВСК-З. 9. Что будет храниться в а*. Ь$, с* после того, как в
следушем фрагменте программы будут считаны все дан-
ные из оператора DATA?

10 READ а*
15 REH
20 READ Ь*
30 READ С*
40 GO TO 15

50 data "TinKer*."Tailor","Soldier"
60 DATA "Sallor",'"Rich Han"

оператор restore.

В БЕИСИКе есть еше один оператор, связанный с операторами
read и data. Это оператор restore. С его помошью мы молем "при-
вязать* оператор
data к оператору read. Например, после того,
как все данные из списка
DATA будут прочитаны оператором read,
Вы ножете командой restore снова потребовать прочтения этих же
данных во второй и более раз.

При работе с READ и DATA следует соблюдать аккуратность.
Дело в том, что
READ не должен исполняться большее число раз,
чей имевшееся количество данных в
DATA. Иначе выдается сообще-
ние о тон, что список
DATA исчерпан:
Е Out of data

за которым стоит номер строки, в которой компьютер не сумел ис-
полнить READ.

вск-з. 6.

Файл» и записи.

Очень часто у нас бывает необходимость объединения данных
одинаковой
природы. в этом случае мы получаем Файл, телефонный
справочник - это
хороший пример Файла. С другой стороны, теле-
фонный справочник - это совокупность записей. Каждая запись
может иметь следующий Формат:

Каждая запись состоит из полей, их может быть сколько уго-
дно. В нашем примере их два - имя персоны и номер телефона, ле-
гко можно представить себе третье поле с донаиннн адресон и
т. д. Итак, запись - это совокупность полей, а Файл -
совокуп-
ность
записей.

Сравнение стрингов.

Стринги иногда приходится сравнивать между собой. Предпо-
ложим, у нас организован в компьютере телефонный
спрвочник и мы
хотим узнать, внесен ли в него н-р Смит (SMITH). для этого да-
ется команда компьютеру сравнить во всех записях то. что содер-
жится в поле имени со
стрингон "SHITH". Компьютеру это сделать
совсем нетрудно, поскольку каждая буква представлена в нем ка-
ким -то кодом, например:

Буква

Код, десятиричный

Код двоичный

А

65

01000001

В

66

01000010

и т. д.

Таким образом, если мы расположили слова в алфавитном по-
рядке. то в компьютере они будут расположены в порядке возрас-
тания кода первого символа, итак, если мы хотим сравнить два
стринга между собой, то на самом деле компьютер сравнивает не
буквы, а коды,
которыни эти буквы записаны.

Предположим, что: а$ = cat
b$ = dog

с» = cat
d* = fish
е$ = cats

Тогда очевидно, что а$=с$. но Ъ» > а$, поскольку ь* начи-
нается с буквы "d". а а$ - с буквы "с", а буква "d" расположена
в алфавите дальше и имеет больший код. С другой
стороны, es >
а». Это происходит потому, что добавочная буква "-s" на конце
слова "cats" ставит это слово в алфавитном порядке после слова
"cat" и его код - выше.

Рассмотрим теперь несколько примеров.

Нам надо создать Файл с именами и телефонными номе-
рани, а затем написать программу, которая пройдется
по всему Файлу в поисках заданного имени и, если оно будет най-
дено. выдаст его на экран вместе с соответствующим номером те-
лефона.

-X

ПРИМЕР-3. 1

Решение Будем искать решение в описательной Форме:

1. Начало работы.

2. Ввод искоиого имени.

3. Чтение очередной записи.

4. Если достигнут'конед файла (заглушка "zzzz"). то выдаем
сообщение *в Файле не содержится*) и перейдем на п. 7.
иначе - на
пункт 5.

5. Если искомое имя равно содержимому поля имени в текушей
записи, то печатаем имя. телефонный номер и переходим
на
пункт 7, иначе продолжаем работу в пункте 6.

6. Возврат назад на пункт 3 для чтения очередной записи.

7. Конец работа.

К сожалению. БЕИСИК не позволяет иметь такие сложные опе-
раторы. как п. 4 и п. 5. поэтому нам придется разбить эти пункты
на более мелкие.

1. Начало работы.

2. Ввод искоиого имени.

3. Чтение очередной записи.

4. Если достигнут конец Файла, переход на 7, иначе - на 5.
5- Если искомое имя равно содержимому поля имени в текушей

записи, переход на 9. иначе на б.

6. Возврат назад на п. 3 для чтения очередной записи.

7. Вывод сообщения "в Файле не содержится".

8. Переход на п. 10

9. Вывод имени и телефонного нонера.
10 Конец работы.

В результате у нас получится примерно такая програнма:

Ю REH ««Телефонный справочник»«
20 PRINT "Телефонный справочник"
25 PRINT

30 INPUT "Введите Фамилию персоны ";ч$

40 REH ««Проверка записи»»
50 READ П*. t*

60 IF n»="ZZZZ " THEN GO TO 90
70 IF q*=n$ THEN GO TO 120
80 GO TO 40

90 REN ««Нет такого имени»»

100 PRINT qi; " в Файле не содержится. "

110 GO ТО 9990

120 REH ««Имя найдено»»

130 PRINT 4t; " - номер телефона - ";t«

140 GO ТО 9990

190 REH ««Список данных»»

200

DATA

"Benny",

"1234"

210

DATA

"Copper"

."9823"

220

DATA

"Draper"

."1850"

230

DATA

"Eddie".

"7294"

240

DATA

"Gwyjme"

,"5821"

250

DATA

"Hettle"

. "4539"

260

DATA

"Ногley"

, "7830"

270

DATA

"Prosser

"."1383"

280

DATA

"Smythe"

,"1147"

290

DATA

"WeeKs".

"5529"

300

DATA

"Wilson"

."9936"

310

DATA

"zzzz

"."Конец Файла"

9990 REH

««Конец

работы»»

9999 STOP

Обратите внимание на строку 60. Здесь, когда мы задавали
заглушку "zzzz " для опознания конца Файла, мы вставили нес-
колько пробелов, это следано для того, чтобы избежать какого-
то "жучка" в постоянной памяти "Спектрума" (ПЗУ), который иног-
да дает ошибки
при сравнении стрингов. Чтобы избежать возможных
недоразумений, лучше сделать нашу заглушку такой, чтобы по дли-
не она была не меньше, чем самая длинная запись в Файле.

Какие изненения надо сделать в только что разобран-
ной программе, чтобы она могла принимать от пользо-
вателя номер телефона, а выдавать его имя или сообщение " в
Файле не содержится"?

ВСК-3. 10

3. в сортировка.

Вы, наверное, заметили, что все записи в телефонном спра-
вочнике были расположены в алфавитном прядке, хотя этого в об-
шем-то и не требовалось, наш алгоритм поиска не зависит от то-
го. в каком порядке расположены данные. В то же время, сущес-
твует немало поисковых алгоритмов, для правильной работы кото-
рых необходимо, чтобы данные были предварительно отсортированы.
Давайте и займемся этой проблемой.

Решение

Написать программу, которая запросит ввод двух
имен и выдаст то из них, которое в алфавитном по-
рядке стоит раньше.

ПРИМЕР-3. 2

Будем создавать алгоритм в описательной Форме:

1. Начало работы.

2. Ввод первого имени.

3. Ввод второго имени.

4. Если первое имя меньше второго, переход
на п. Т. Иначе - на п. 5.

5. Вывод второго инени.

6. Дереяод на в.

7. Вывод первого имени,
а. Конец
работа.

Текст программы приведен шкге:

110 Rgff ««Сортировка по алфавиту»«
115 PRIHT "Сортировка по алфавиту"
120
IHPUT "Первое имя? "газ
130 PRIHT а®

140 IHPUT "Второе имя? ";Ъ$
150 PRIHT Ь«
160 PRIHT

170 REH проверка н печать»"
180 if а» < ъ$1 тш® во то гго

190 REH »«Ы> - ВИШе*»

200 PRIHT "Первое по порядку -

210 GO ТО 240

220 REH »»а$ - вышекн

230 PRIHT "Первое по порядку - at

240 REH *«Конец»а

250 STOP

Предположи теперь, что мы хотим усяоизить задачу. Нам на-
до ввести
три иненн и выбрать из кик одно - то, которое стоят
первым по алфавиту. Типовое решение этой задача мокет быть
представлено
на следующей блок-схеие:

Большинство учащихся, когда перед ними ставят эту задачу,
решают ее именно так. это очень хорошее решение, но в нем ухе
скрыт дефект,
который неминуемо скажется в будущем, посудите
сами, мы имеем дело с тремя именами и. если Вы посмотрите на
блок схему, то увидите, что тан
присутствуют три Функции ввода
результатов. А если бы пришлось выбирать не из трех, а из пяти
или из ста имен? Это важная проблема.

Самым простейшим приемом было бы вводить имена по одному и
наименьшее отправлять в заранее заготовленное место, напринер.
в а*. Тогда новое вводимое иня будет сравниваться с тен, что
находится в а* и, если оно неньше, то встанет в а» внесто того,
что тан было. Такая программа Фактически хранит всегда только
наипервейшее из проверенных имен. Все же остальные после про-
верки отбрасываются (не запоминаются).

УПРАЖНЕНИЕ-3. 3. Напишите программу, которая введет три имени
выдаст старшее по алфавиту (наименьшее по ко-
ду). Используйте метод, на
который ны указали несколькими
строкани выше.

УПРАЖНЕНИЕ-3. 4. Ниже представлен Файл Европейских стран с на-
званиями их столиц. Напишите программу на
БЕИСИКе. которая будет разыгрывать с пользователей
викторину.
спрашивая его о ток, как называется столица той или иной
страны, програнма должна сообщить пользователю прав он или нет
и. в последнем случае, должна дать ему правильный ответ.
210
data "франция". "Париж"
220
data "Германия", "Бонн"
230
data "Нидерланды", "Гаага"
240
data "Польша", "Варшава"
250
data "Италия". "РИМ"
260
data "Испания". "Мадрид"
270
data "Португалия". "Лиссабон"
280
data "Венгрия". "Будапешт"
290
data "Дания". "Копенгаген"
300
data "Норвегия". "осло"
310 data "zzzz "."Конец Файла"

задание на саностоятельную проработку.

I. Возьните програнну. которую Вы составили при выполнении
упражнения-4 и преобразуйте ее так. чтобы она подсчитывала ко-
личество правильных и неправильных ответов и сообщала бы итого-
вые результаты пользователю в конце теста.

2. Разработайте алгоритн на БЬйСИКе для следующей задачи.

Пусть Ван даны какие-то слова, записанные в строках DATA
по одной букве, например:,

900 DATA "п". "а", "р*. "о", "х". "о", "д"
910 DATA "к", -о", "р", "аГ. "б", "л", "ь"

Программа должна подсчитать количество гласных и согласных
букв в каждом слове, найти
сумму гласных и согласных по всем
словам и рассчитать отношение этих чисел.

ОБЗОР УРОКА

Проверьте свое знание следующих вопросов:

- имена стрингов;

- точка с запятой в операторе PRIHT;

- текстовые сообщения в операторе IHPUT;

- оператор READ;

- оператор DATA;

- сравнение стрингов;

- сортировка данных.

ОТВЕТЫ НА ВОПРОСЫ ДЛЯ САНОКОНТРОЛЯ

1. Правильные стринги: а», к».

2. Правильные ответы: (а). (Ь). (е).

1вск

-3.

|вск-

3.

ч

JBCK-

3.

ВСК-3. 4. I 4. 10 LET b* = "БЕИСИК"

1 20 PRIHT b*, Ъ»

30 PRIHT bt; b*: b*

40 PRIHT b*; " Ъ»; " b*

50 STOP

ВСК-3. 5. j

БЕЗ

Вас зовут Джон Смит
вам 45 лет

Благодаря вас Джон Смит

10 IHPUT "Как Вас зовут? ";п*

20 PRIHT п*

30 IHPUT "Сколько Вам лет? ";а

40 PRIHT а
50 PRIHT

60 PRIHT "Меня зовут ";п»;" . нне

70 PRIHT а; " лет. "

!ВСК-3. 7. I Ошибка в строке 20. Для того, чтобы считать стринг
J строки DATA, тан должно.быть:
20 READ Ь$

Есть еше и ошибка в строке 40. Здесь оператор READ пытает-
ся прочитать 4 элемента данных, а их в строке 50 только 3.

IВСК-3. е. I п» - smythe с» - unson

Л t» - weeKs т» - Wright

|вст-3. 9. |

|вск-з. ю|

а* - TlnKer Ь» - Sailor с* - fclcl* Man

Обратите внимание на то, что Rich Man - это один эленент
данных, хоть и состоит из
двух слов, поскольку полностью заклю-
чен в кавычки.

10 REM ««Телефонный справочник»«
20 PRIHT "Телефонный справочник»«
25 PRIHT

30 IHPUT "Введите номер телефона";а»
40 REM ««Чтение очередной записи»«
50 READ П*. t*

60 IF n*="ZZZZ "THEH GO TO 90
70 IF a«=t* THEH GO TO 120
80 GO TO 40

90 REM ««Нет такого номера»»

100 PRIHT а»;" в Файле не содержится"

110 GO ТО 9990

120 REM ««Есть такой номер"«

130 PRIHT а»; ■ п»

140 GO TO 9990

190 REH ««строки данных'

200 DATA "ВеППУ".'1234"

210 DATA "COPPer","9823"

220 DATA "Draper"."1850"

230 DATA "Eddie"."7294"

240 DATA "Gwmne". "5821"

250 DATA "Hettie", "4539"

260 DATA "Horley","7830"

270 DATA "Prosser"."1383"

280 DATA "Smythe", "1147"

290 DATA "WeeKs"."5529"

300 DATA "Wilson"."9936"

310 DATA "2zzz ". "конец Файла"

9990 REM ««Конец программы"

9999 STOP

ОТВЕТЫ К УПРАЖНЕНИЯМ

УПРАЖНЕНИЕ- 3. 1. I Упражнения 1 и 2 очень похожи, поэтому реше-
* ■■ ' ние этого упражнения мы не приводим.

упражнение-з. 2. i ю rem ««Письменный запрос»»
^— 
" 20 priht "Программа письменного запроса"

30 priht
40 priht "Адрес"
50
priht

60 INPUT "Город ...?";t$
70 PRINT t»

SO INPUT "улица, дом ?";s*
90 PRINT s*

100 ihputому?. .. "; п»
110 priht п*
120 priht

130 ihput "дата этого письма?"; d»
140
priht d*
150
priht

160 print "к вопросу реализации "
170
priht

180 ihput "Интересующий предмет"; 1»
190
print 1*

200 input "Источник информации?": a*
210
print "Согласно рекламе в"; a*
220
input "Дата публикации?"; e*
230
print "От ";e$
a40
pause 200

£50

CLS

2&0

ВЕН »»вечат& письма**

270

ре гаг

280

PRIHT

зф

290

рй1нт

Tit

300

prist

310

prist

320

prist

330

prist

"Уваяаенне господа!"

340

prist

350

priht

"He ногли бы Вн выедать мне'

360

priht

"аодробнуи информанта"

370

priht

"относительно"; 1®

380

priht

"запрос сделан на основании:

390

PRIHT

а9:' от "; е$;"

400

priht

410

psttht

420

prist

"Искренне Ваш. "

430

PRIST

"К. Н. Петров. "

Оператор CLS, примененный здесь в строке 250. очишает эк-
ран, но ничего не удачтокает в пняти компьютера.

Если ны котим. чтобы программа изображала какуэ-то инфор-
мацию в течение заданного вррекееи. то мы додака перед CLS
поставить оператор PAUSE к (строка 240). Вычисления остановятся
на п/50 секунды, например,
pause 100 означает паузу на две се-
кунды и т. п.

Самая большая задержка, которую можно сделать одной коман-
дой PAUSE О порядка i1 минут.
Она достигается командой
PAUSE 32766. Если число п задать больше, чем 32766. но меньше,
чем 65535. то будет выполнена задерзка на неограниченное время
(до нажатия какой-либо
клавши), хотя обычно это делают коман-
дой PAUSE О. Если число п больше. чем 65535. то Ва получите со-
общение об сзя:бке.

Результат прогона такой программы нокет выглядеть, напри-
мер. так:

EUH

Программа письменного запроса

Адрес:

Иосква. 101000

ул. няснидкая. 16

директору фирмы "Процессор"

23. 08. 95

к вопросу реализации
сборника игровых программ
согласно рекламе в < <ноделист-конструкте>р»
от 10. 05. 95

носква, Ю1000

ул. Нясницкая. 16

директору фирмы "процессор"

23. 08. 95

Уважаемые господа)
Не могли бы вы выслать мне
подробную информацию
относительно сборника игровых программ
Запрос сделан на основании:
< <ноделист-конструктор> > от
ю.05.95

Искренне Ваш
К. П. петров

УПРАЖНЕНИЕ-3. 3. I Простейший метод решения этой задачи показан
' в нижеследуюшей программе. Имена вводятся од-
но за другим и то. которое в алфавите стоит раньше (имеет мень-
ший код), запоминается в а». Эта программа хранит только эту
информацию, вся остальная - отбрасывается.

10 REH »«Первое по алфавиту»«
15 PRIHT "Алфавитный
порядок"
20 IHPUT "Введите имя ";а»
25 PRIHT а»

27 REM »«Последующий ввод»»
30 IHPUT "Введите имя ";Ь*
35 PRIHT Ъ*

40 IF b»="ZZZZ"THEH GO ТО 100

50 IF аФ<Ъ» THEH GO ТО 70

60 LET a» = b*

70 REH ««ВЫВОД»*

80 PRIHT "Пока первый ";a*

90 GO TO 27

100 REH ««Итоговый результат»»
110 PRIHT

120 PRIHT a$; " - первый по алфавиту"
130 STOP

Результат рабочего прогона:

RUH

Алфавитный порядок

том

Сид

Пока первый Сид
Джо

Пока первый Джо
фред

Пока первый джо
Билл

Пока первый Билл
Рон

Пока первый Билл
Алан

Пока первый Алан
zzzz

Алан - первый по алфавиту

Ю REH •«Викторина»«

20 PRIHT "Столицы государств ЕВРОПЫ"

30 PRIHT

40 REH ««Ввод данных»»
50 READ С*, t»

60 IF C$="ZZZZ" THEH GO TO 170

70 PRIHT "Как называется столица государства

80 PRIHT с*

90 IHPUT "Ваш ответ: ";а*
95 PRIHT а*

100 IF a* = t* THEN GO ТО 140
HO PRIHT "Нет. столица государства "
120 PRIHT с*;" - "; t»
130 GO TO 30

140 reh »«Правильный ответ»»
150
priht "ответ верный!"
150
go to 30
170
reh ««Конец»»
180
priht

я упражнение-3. 4.

190 PRIHT "Викторина закончена. "
200 REH *«Список данных»»

Приложение.

Ны с Вами говорили о том. что в компьютере каждому символу
соответствует свой код.
если Вы хотите узнать эти коды, то но-
жете набрать и запустить эту программу, она выдает на экране не
только символ и его код. но еше и код. записанный в двоичной
Форме.

10 reh *«кодн символов»=
12 DIH c$(9)

15 PRIHT "зг-;ТАБ 8; "пробел"; TAB 16; "00100000"

20 FOR a=33 TO 201

30 IF a<144 THEH GO TO 5b

40 IF a<199 THEH GO TO 70

53 GO SUB 100

60 PRIHT a; TAB 8;CHR$ a; TAB 16; c* (2 TO)
70 NEXT a
80 STOP

100 REH ««Конверсия в двоичную систему»»

110 LET ь=а

120 FOR 1=1 ТО 9

130 LET С$<1)="0"

132 NEXT 1

133 LET 1=9

135 IF Ъ/2<>INT (b/2) THEH LET C$(i) = "I"
140 LET b=IHT (b/2)

145 LET i = i-l

146 IF 1=1 THEN GO TO 150

147 GO TO 135
150 RETURN

В этой программе употреблены некоторые операторы, которые
мы еше не изучали. Надо дать им краткое пояснение:

1) Оператор dim. Поскольку при работе программы нам нужна
какая-то память для хранения двоичных кодов символов, мы резер-
вируем ее в строке
12 с помошью оператора dim с»(9)

2) Оператор TAB п служит для того, чтобы печать на экране
оператором
PRINT начиналась с экранного столбца п. Это выполня-
ется в строке 60.

3) функция INT(x) определяет целую часть числа х. У нас
сделана проверка

ь/2 <> INT (ъ/2)

Фактически мы проверяем здесь является ли "Ь" четным чис-
лом или нечетным. Если Ь четное, то половина b строго равна
целой части от самой себя.




  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Новый фактор - Мифы четвёртой эпохи.
Приколы ZXNet - Знаете ли вы, дорогие читатели, кто такой dr.HESH?
Проза - Ежик из спецназа
How to make cool ASCII logo - как нарисовать крутое лого в ASCII.
Крик души - Не могу молчать.

В этот день...   21 ноября