-c1E
+\/d
ГЛАВА II. ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ
+\/d-
-
- Приступая к лечению, врач должен делать это изящно и весело;
- хмурый врач никогда не преуспеет в своем ремесле.
+ Приступая к лечению, врач должен делать это
+ изящно и весело; хмурый врач никогда не пре-
+ успеет в своем ремесле.
М.Монтень
-
-
-
Прежде чем переходить к непосредственному программированию, мы хотим
дать два совета:
1) овладеть основами программирования можно лишь при условии повседнев-
J.R.Rice
7. ЭВМ многократно увеличивает некомпетентность вычислителя.
Принцип некомпетентности Питера
- 8. Экспериментальное тестирование программ может служить для доказа-
-тельства наличия ошибок, но никогда не докажет их отсутствие.
- Н.Вирт
- 9. Умствуй - и придет! Л.Ф.Магницкий
+ 8. Умствуй - и придет!
+ Л.Магницкий
II.1. РЕЖИМЫ РАБОТЫ
-
После одновременного нажатия на клавиатуре компьютера клавиш "CTRL" и
"STOP"(что обозначается "CTRL"+"STOP") на экран дисплея выводится "систем-
ная подсказка" "Ok" ("o'kay"-"о'кей, все в порядке").
-
С этого момента Вы можете работать в любом из двух режимов:
-
1. Режим прямого, или непосредственного, выполнения команд;
───────────────────────────────────────────────────────
-
при работе в режиме прямого выполнения команд на клавиатуре ЭВМ набирает-
ся последовательность к о м а н д (указаний,предписаний), которая воспро-
изводится на экране дисплея. Затем она вводится в оперативную память ком-
Например,вычисление значения арифметического выражения SQR(3^2+4^2) вы-
полняется по команде: PRINT SQR(3^2+4^2)
После набора этой команды на клавиатуре и введения ее в оперативную па-
-мять компьютера (нажатием клавиши "RETURN"), производится вычисление зна-
+мять компьютера (нажатием клавиши "RETURN") производится вычисление зна-
чения арифметического выражения,стоящего справа от служебного слова PRINT.
В результате на экране дисплея остается следующая информация:
Ok
например:
Ok
? "Стремитесь к простоте программ."
- После набора этой команды на клавиатуре и нажатия клавиши "RETURN", эк-
+ После набора этой команды на клавиатуре и нажатия клавиши "RETURN" эк-
ран дисплея примет следующий вид:
Ok
? "Стремитесь к простоте программ."
Прямой режим полезен при о т л а д к е программ и при использовании
MSX-BASIC в качестве калькулятора для проведения коротких вычислений.
+
П р и м е р ы:
─────────────
1) Ok 2) Ok 3) Ok
print (5^2-7) ? SIN(ATN(1)*4/2) ? LOG(EXP(1))
18 1 .99999999999986
Ok Ok Ok
-
4) Ok 5) Ok 6) Ok
? ATN(1)*4 ? 25.68MOD6.99 ? 15AND14
3.1415926535898 1 14
Ok Ok Ok
-
7) Оk 8) Ok 9) Ok
print 25.68\6.99 ? (-1)OR(-2) print 3>1
4 -1 -1
Ok Ok Ok
-
10) Ok 11) Ok 12) Ok
? "BONY"+"'M" ? "1AAA"<"2aaa" ? (4<>4)AND(9<1)
BONY'M -1 0
Ok Ok Ok
-
13) Ok 14) Ok 15) Ok
? 1/SIN(0) ? 1/COS(2*ATN(1)) ? TAN(2*ATN(1))
Division by zero -15915494309189 -15915494309189
Ok Ok Ok
-
16) Ok Ok
?(-32768%)/(-1%) однако... ? (-32768)/(-1)
Owerflow 32768
Ok Ok
-
Заметим, что арифметические, логические и строковые выражения, стоящие
после служебного слова PRINT, могут содержать имена переменных.Разумеется,
этим переменным до вычисления значения выражения должны быть присвоены на-
чальные значения. Это осуществляется при помощи команды присваивания LET.
-
17) Ok 18) Ok
LET A#=-1/3: PRINT ABS(A#*2)+2 DIM A(78):A(45)=SIN(4*ATN(1))
2.6666666666667 :?A(45)
Ok -1.2566370614359E-13
Ok
-
Отметим,что служебное слово LET при записи команды присваивания можно
опускать.
-
19) Длину окружности и площадь круга радиуса R=2 можно вычислить при
помощи следующей последовательности команд:
-
Ok
PI=4*ATN(1):R=2:PRINT 2*PI*R:PRINT PI*R^2
12.566370614359
12.566370614359
Ok
-
Более того, команда PRINT в прямом режиме позволяет мгновенно перево-
дить числа из двоичной, восьмеричной и шестнадцатеричной систем счисления
в десятичную, например:
-
20) Ok 21) Ok 22) Ok
? &b11100111 print &hffff print &O4567
231 -1 2423
Ok Ok Ok
-
23) Ok 24) Ok 25) Ok
? &hff-&o7+&b11 ? &hffMOD&b10 ? &O3456/&HF2
251 1 7.595041322314
Ok Ok Ok
-
-
- 2. Режим выполнения программы (или программмый режим);
+ 2. Режим выполнения программы (или программный режим);
────────────────────────── ─────────────────
-
вначале ответим на вопрос: "Что же такое п р о г р а м м а ?" В "Матема-
-тической энциклопедии" (т.4, стр.646) читаем: "П р о г р а м м а - план
+тической энциклопедии" (т.4, с.646) читаем: "П р о г р а м м а - план
действий, подлежащих выполнению некоторым исполнителем,обычно автоматичес-
ким устройством, чаще всего ЭВМ; предписание,алгоритм. Программа представ-
ляется в виде конечной совокупности о п е р а т о р о в (команд,инструк-
II.2. ИНТЕРПРЕТАТОРЫ И КОМПИЛЯТОРЫ
-
BASIC - язык программирования высокого уровня. Это значит, что он уни-
версален, не связан с конкретной вычислительной машиной. Чтобы программа,
написанная на таком языке, могла быть исполнена на реальной ЭВМ, необходи-
реносимой" с одной ЭВМ на другую.
Есть два основных типа трансляторов: и н т е р п р е т а т о р ы и
к о м п и л я т о р ы . Для BASIC типичны первые, для многих других язы-
-ков программирования (например, Паскаля) - вторые.
+ков программирования (например, Pascal) - вторые.
И н т е р п р е т а т о р работает как синхронный переводчик: он пыта-
ется понять каждое очередное предложение (оператор) программы, то есть вы-
разить его "смысл" в виде цепочки команд ЭВМ и тут же выполнить их.
гарантирована правильная работа программы в целом: части могут быть плохо
пригнаны друг к другу. Предположим теперь, что ошибка обнаружена.Мы не мо-
жем исправить одно лишь ошибочное место программы так, как мы делаем это
-на BASICe. Придется перекомпилировать весь модуль,иногда из-за одной стро-
+на BASIC. Придется перекомпилировать весь модуль, иногда из-за одной стро-
ки - несколько сотен.
Однако, потом оттранслированная и скомпанованная программа будет рабо-
тать намного быстрее,чем подобная программа на BASIC. Ведь интерпретатор
теки, справочника, решения сравнительно простых задач).
-
II.3. ОФОРМЛЕНИЕ И РЕДАКТИРОВАНИЕ ПРОГРАММ
-
При записи программы на MSX-BASIC необходимо соблюдать ряд требований,
а именно:
1. Текст программы записывается п о с т р о ч н о, четкими п е ч а т-
н ы м и символами;при записи служебных слов разрешается использовать как
прописные, так и строчные латинские буквы в любом сочетании, причем все
строчные латинские буквы после ввода преобразуются интерпретатором в про-
-писные (однако, символы, заключенные в кавычки, всегда выводятся на экран
+писные (однако символы, заключенные в кавычки, всегда выводятся на экран
дисплея без изменения).
2. Каждая строка программы (программная строка) начинается н о м е-
р о м этой строки и заканчивается нажатием клавиши "RETURN"
строке "огромного" количества операторов, в результате чего программа ста-
новится совершенно "нечитабельной".
6. Последним оператором программы может быть оператор окончания про-
-граммы END
-с другой стороны, иногда можно обойтись и без этого оператора: выполнив
+граммы END .
+С другой стороны, иногда можно обойтись и без этого оператора: выполнив
последнюю строку программы, ЭВМ останавливается сама - ей больше нечего
делать, операторы (команды) кончились!
7. Для записи программы в память ЭВМ и для ее исполнения необходимо со-
грамму с л ю б о й д р у г о й с т р о к и: для этого после служебного
слова RUN указывается номер существующей программной строки,с которой про-
граммист пожелает начать выполнение программы, например:
- RUN 23
+ RUN 23 .
Отличительной особенностью команды (оператора) RUN n является "стира-
ние" значений всех переменных. Таким образом достигается идентичное состо-
яние памяти при каждом новом запуске программы.
Запомните, что если Вы хотите начать выполнение программы со строки с
заданным номером n, но при этом сохранить значения всех переменных, не ис-
-пользуйте команду RUN n
+пользуйте команду RUN n ,
а примените в режиме прямого выполнения команду
GOTO n или
GOSUB n
(см. разделы III.1 и IV.4).
- Разумеется, номер строки, указанной в операторе RUN не должен находить-
+ Разумеется, номер строки, указанной в операторе RUN,не должен находить-
ся внутри цикла или подпрограммы!
Таким образом, программы на BASIC имеют такой общий вид:
NEW
корректированный (исправленный) текст строки.
Рассмотрим несколько команд редактирования программ.
-
-
II.3.1. К о м а н д а AUTO . К о м а н д а RENUM
-
Автоматизировать процедуру присвоения номеров программным строкам мож-
-но командой АUTO [n1][,n2]
+но командой АUTO [n1][,n2] ,
где: AUTO ("AUTOmatic"-"автоматический") - служебное слово;
n1,n2 - целые числовые константы; 0 ≤ n1,n2 ≤ 65529 .
По этой команде происходит задание режима автоматической нумерации про-
го номера.
Общий вид команды изменения нумерации программных строк:
- RENUM [n1][,n2][,n3]
+ RENUM [n1][,n2][,n3] ,
где: RENUM("to RENUMber"-"перенумеровать") - служебное слово;
n1,n2,n3 - целые константы, 0≤n1,n2,n3≤65529.
По команде RENUM производится перенумерация (изменение нумерации) про-
RENUM 65000,65000
Перенумерация при этом не осуществляется, но Вы получите информацию обо
всех пропущенных номерах строк.
-
П р и м е р ы: RENUM
───────────── RENUM 200,150,5
RENUM 200,100
-
Обратите внимание: новый номер строки должен быть больше или равен ста-
рому номеру!
-
-
Куда девал сокровища убиенной тобою тещи?
Отец Федор
-
-
II.3.2. К о м а н д а DELETE . К о м а н д а [L]LIST
-
Команда DELETE может быть записана в одной из следующих форм:
DELETE n1-n2 DELETE .
DELETE -n2 DELETE .-n2
берется номер первой строки программы. Символ ".", используемый вместо но-
мера строки обозначает "текущий" (последний упомянутый) номер программной
строки.
-
П р и м е р ы: DELETE 70-100 DELETE .
───────────── DELETE -50 DELETE .-34
DELETE 23 DELETE 40-.
-
Если строка с номером, указанным в команде DELETE, в программе отсутс-
твует, то выдается сообщение об ошибке
"Illegal function call"
("Н е п р а в и л ь н ы й в ы з о в ф у н к ц и и").
Формат команды [L]LIST:
- [L]LIST [n1][-n2]
+ [L]LIST [n1][-n2] ,
где: [L]LIST("Line printer LIST out","list"-"список") - служебное слово;
n1,n2 - целые константы (0≤n1,n2≤65529) или десятичная точка(".").
Эта команда, которая может быть оператором программы,выводит текст про-
Клавиша "STOP" используется для организации паузы в процессе вывода
текста программы на экран дисплея или принтер. Для продолжения вывода про-
граммы следует нажать клавишу "STOP" вторично.
-
П р и м е р. NEW
─────────── Ok
200 DEFSTR A-C
150 DEFDBL C-K
Оk
-
-
II.4. ЛИНЕЙНЫЕ ПРОГРАММЫ
-
Напомним,что в школьном алгоритмическом языке л и н е й н ы м и назы-
вались алгоритмы, состоящие из серии команд присваивания.
Для программирования линейных алгоритмов практически необходимы знания
ется каждый оператор (притом, только о д и н раз).
-
II.4.1. О п е р а т о р п р и с в а и в а н и я LET
-
Чтобы выпить из чаши, нужно ее наполнить!
Восточная мудрость
-
-
Структура оператора присваивания:
[LET] п е р е м е н н а я = в ы р а ж е н и е ,
где: LET ("пусть") - служебное слово;
присваивания). MSX-BASIC - язык арифметики,а не алгебры: оператор LET при-
сваивает переменной слева именно ч и с л о , а никак не алгебраическое
выражение, стоящее справа!
-
П р и м е р ы: 1) NEW
───────────── Ok
10 LET A1=10.04
20 END
-
Данная программа позволяет присвоить переменной A1 начальное значение
10.04 (инициализировать ее). Проверим это. Сначала выполним программу:
run
А теперь... print A1
10.04
Ok
-
2) NEW 3) NEW 4) NEW
Ok Ok Ok
10 P1=3.14159 10 LET X=5.4 10 LET Z=5>=-1
print P2 Ok
3.142
Ok
-
Обратите внимание на то, что оператор,расположенный в программной стро-
ке 20 примера 2, позволил о к р у г л и т ь значение переменной X.
Два следующих оператора присваивания позволят вычислить старший и млад-
вет сообщение об ошибке
"Type mismatch"
("Н е с о о т в е т с т в и е т и п о в").
-
П р и м е р ы: 1) Оk 2) Ok
───────────── А%=23.42:print A% A="нельзя!":print A
23 Type mismatch
Ok Ok
-
3) Ok 4) Ok 5) Ok
a%=123456:? a% b!=123456.78:? b! d!=123456789:?d!
Overflow 123457 123457000
Ok Ok Ok
-
Если переменной целого типа присваивается значение выражения, вычислен-
ное с одинарной или двойной точностью,то у значения выражения отбрасывает-
ся дробная часть.
-
6) Оk 7) Ok
C%=55.88:print C% C%=-1.97:? C%
55 -1
Ok Ok
-
Если переменной двойной точности присваивается значение выражения, вы-
численное с одинарной точностью, то только первые 6 цифр значения выраже-
ния являются точными (напомним, что одинарная точность обеспечивает 6 зна-
ны нулю. Некоторые компьютеры при этом добавляют цепочку непредсказуемых
разрядов,из-за чего следует быть очень осторожным,чтобы в вычислениях,тре-
бующих высокой точности, не возникали абсурдные результаты!
-
8) Оk
A!=SQR(2):B=A!:PRINT A!,B
1.41421 1.41421
Ok
-
9) Ok
A=TAN(2*ATN(1)):B!=TAN(2*ATN(1)):C=B!:? A;B!;C
-15915494309189 -15915500000000
-15915500000000
Ok
-
Перед отбрасыванием "лишних" значащих цифр производится о к р у г л е-
н и е: анализируется старшая из отбрасываемых цифр и если она больше или
равна 5, то младшая из оставшихся цифр увеличивается на 1.
Наконец,заметим,что в языках программирования легко сказать "з а п о м-
н и", но сложно говорить "з а б у д ь"!
-
-
II.4.2. О п е р а т о р SWAP
-
Оператор SWAP используется для обмена значениями двух переменных и за-
писывается в виде: SWAP α,β
или SWAP γ,δ
γ,δ - имена строковых переменных или имена элементов строкового мас-
сива (строковых массивов).
Этот оператор позволяет осуществлять обмен значениями двух переменных
-одинаковых типов. Обычно, не зная оператора SWAP, програмисты используют
+одинаковых типов. Обычно, не зная оператора SWAP, программисты используют
для обмена значениями следующие приемы:
TEMP=A:A=B:B=TEMP или
A=A+B:B=A-B:A=A-B .
тельным увеличением скорости и экономией места.
Заметим, что к двум переменным можно применить оператор SWAP только в
том случае, если предварительно им присвоены определенные значения!
-
П р и м е р ы: 1) А=3:B=2:SWAP A,B:PRINT A;B
───────────── 2 3
Ok
-
2) C$="мама":D$="папа":SWAP C$,D$:PRINT C$;D$
папамама
Ok
-
Еще раз отметим, что переменные, заданные в качестве аргументов, долж-
ны быть одного и того же типа, причем в отличие от других операторов, это
требование более жесткое, так, например, нельзя обменивать значения пере-
менных одинарной и двойной точности. Нарушение этого требования приводит
к сообщению об ошибке: "Type mismatch"
("Н е с о о т в е т с т в и е т и п о в").
- Наиболее эффектно применение оператора SWAP при сортировке массивов
-(см. пример в разделе III.4)!
-
-
+ Очень эффективным является применение оператора SWAP при сортировке
+массивов (см. пример в разделе III.4)!
II.4.3. О п е р а т о р к о м м е н т а р и я REM
-
Оператор REM имеет следующий синтаксис:
REM Т е к с т к о м м е н т а р и я
После служебного слова REM и до конца данной программной строки может
того, следует описать используемый алгоритм шаг за шагом. Эта часть может
быть использована в качестве введения для неискушенного пользователя,разъ-
ясняющая ему, что делает Ваша программа и как ею пользоваться.
- Более того многие программисты считают, что перед непосредственным про-
+ Более того,многие программисты считают, что перед непосредственным про-
граммированием необходимо написать инструкцию по использованию будущей
программы!
В т о р о й у р о в е н ь состоит в документировании каждого бло-
+
II.4.4. О п е р а т о р в ы в о д а д а н н ы х PRINT
в п р о с т е й ш е м с л у ч а е
-
...мало толку в программе, которая только и
делает, что секретничает сама с собой.
Л.Хэнкок, М.Кригер
-
-
Оператор вывода данных на экран дисплея в простейшем случае состоит из
служебного слова PRINT ("to print"-"печатать"), за которым следует спи-
сок выражений любого типа, значения которых должны быть выведены на экран
тьего и всех последующих выражений отображаются в начале тех же зон, но с
новой дисплейной строки. Если данные занимают не более 13 позиций, то сле-
дующая зона располагается прямо за концом данных без вывода пробелов.
-
П р и м е р ы: 1) NEW NEW
───────────── Оk Ok
10 X=2:Y=X^2 10 X=2
·2············▲4 ·2············▲4
Ok │ Ok │
15-я позиция (начало второй зоны)
-
В том месте дисплейной строки, где надо обратить Ваше внимание на нали-
чие символа пробел (" "), мы будем использовать в тексте символ "·"!
- Если же данные занимают более 13-ти позиций, то следующая зона пропус-
-кается.
-
+ Если же данные занимают более 13 позиций, то следующая зона пропускает-
+ся.
2) PRINT 1234567.34,"TIMER" 3) ? 123456.789101124,"TIMER"
·1234567.34···TIMER ·123456.78910112
Ok ▲ TIMER ▲
│ Ok │
15-я позиция 16-я позиция
-
При наличии т о ч к и с з а п я т о й в качестве символа-разделите-
-ля выражений в списке оператора PRINT, компьютер выводит значения в
+ля выражений в списке оператора PRINT компьютер выводит значения в
п л о т н о м формате (значения выражений отделены друг от друга о д -
н и м пробелом).
Оператор PRINT без параметров вызывает переход в начало первой зоны
следующей дисплейной строки.
-
4) NEW 5) NEW
Ok Ok
10 X=3 10 X=3
·3··27
·3·-81 ·27
Ok Ok
-
Если в списке встречаются лишние запятые, соответствующие пустым эле-
ментам данных,то пропускается соответствующее число зон печати.
Например, для вывода на экран дисплея данных не с первой, а со второй
точкой со стандартной мантиссой (это происходит, когда целая часть выводи-
мого числа содержит не менее п я т н а д ц а т и значащих цифр или ког-
да число по модулю ≤ 0.001), например:
-
6) Ok 7) Ok
PRINT 12345678910112.1434 PRINT 123456789101121.434
·12345678910112 ·1.2345678910112E+14
Ok Ok
-
Заметим,что каждый оператор PRINT выводит информацию на экран дисплея,
-начиная с первой позиции новой строки. Однако, имеется возможность продол-
+начиная с первой позиции новой строки. Однако имеется возможность продол-
жить вывод с помощью оператора PRINT на той же строке, где он закончился
при выполнении предшествующего оператора PRINT. Для этого достаточно по-
ставить в конце списка выражений, содержащегося в предшествующем операто-
ре PRINT, символ-разделитель "," или ";".
-
8) NEW 9) NEW 10) NEW
Ok Ok Ok
10 X=3 10 X=3 10 ?"YAMAHA";
·3··27··3··81 ·3··27········▲3··81 Ok
Ok Ok │
15-я позиция
-
С помощью оператора PRINT можно (и должно),используя строковую констан-
ту, (последовательность символов, заключенную в кавычки), организовать бо-
лее информативный, к р а с и в ы й вывод результатов работы программы.
-
П р и м е р 11.
──────────────
NEW или NEW
Ok ▲ Ok
│
15-я позиция (начало второй зоны)
-
Опишем интересные д о п о л н и т е л ь н ы е возможности оператора ?:
а) существует возможность начать вывод значения некоторого выражения с
точно указанной позиции дисплейной строки (с позиции N). Для этого доста-
точно поместить в операторе PRINT перед этим выражением функцию
- TAB(α)
+ TAB(α) ,
где: TAB("to TABulate"-"табулировать") - служебное слово;
α - арифметическое выражение, целая часть значения которого лежит
на отрезке [0,255]; обозначим N=INT(α).
ции текущего положения курсора, то перемещения не происходит.
Напомним Вам, что номера позиций курсора на дисплейной 40-символьной
строке следующие: 0, 1, 2,..., 39.
-
П р и м е р 12. NEW
- ────────────── Ok 10 V=1:S=3.5
+ ────────────── Ok
+ 10 V=1:S=3.5
20 PRINT TAB(3);"V=";V;TAB(11);"S=";S
30 END
run
│ 11-я позиция
3-я позиция
Ok
-
П р и м е р 13. NEW
────────────── Ok
10 V=1:INPUT M,N 'Ширина экрана - 39 позиций!
? 1,7 ... 39-я позиция
·V=·1··V=·1
Ok
-
Забегая вперед, отметим, что номер позиции текущего положения курсора
на дисплейной строке можно получить, используя встроенную функцию POS(0)
(см. раздел V.3).
Кроме того, функция TAB(n) позволяет программисту получить удобное раз-
мещение колонок выводимых результатов, если вывод по зонам, задаваемым за-
пятой (через 14 позиций), слишком широк.
-
П р и м е р 14. NEW
────────────── Ok
10 INPUT X,A,B,C
5-я позиция│
10-я позиция (2·5)
Ok
-
- b) В операторе (команде) PRINT часто используется функция
- SPC(α)
+ b) в операторе (команде) PRINT часто используется функция
+ SPC(α) ,
где: SPC ("SPaCe"-"пространство") - служебное слово;
α - арифметическое выражение, целая часть значения которого лежит
на отрезке [0,255].
Обозначим N - целую часть значения арифметического выражения α (N∈
[0,255]). Тогда функция SPC(α) выведет N пробелов, начиная с текущей пози-
ции курсора.
-
П р и м е р 15. NEW
────────────── Ok
10 INPUT Z,U,V,W
пробелы для знака
│ │
обязательные пробелы после числа
-
Запомните, что встроенные функции TAB() и SPC() допустимы т о л ь к о
в операторе (команде) PRINT!
+
II.4.5. О п е р а т о р ы в в о д а д а н н ы х DATA и READ.
О п е р а т о р RESTORE
-
Б л о к о м д а н н ы х будем называть последовательность констант.
С блоком данных связана некоторая величина,называемая у к а з а т е л е м
с ч и т ы в а н и я . Она всегда "настроена" на конкретную константу бло-
Оператор DATA предназначен для хранения данных в блоке данных и для
ввода его в программу.
Структура оператора DATA:
- DATA β1[,β2][,β3]...
+ DATA β1[,β2][,β3]... ,
где: DATA ("data"-"данные") - служебное слово;
β1, β2, β3, ... - числовые константы или строковые константы в ка-
вычках или без кавычек (но в этом случае не содержащие запятых, кавычек и
массивов в программе. Он очень удобен при документировании программ.
Оператор READ предназначен для организации выборки (чтения) данных из
блока данных.
- Формат оператора READ: READ α1[,α2][,α3]...
+ Формат оператора READ: READ α1[,α2][,α3]... ,
где: READ ("to read"-"читать") - служебное слово;
α1, α2, α3, ... - имена переменных или имена элементов массива(ов).
При выполнении оператора READ из блока данных последовательно считыва-
ны совпадать! В противном случае выводится сообщение об ошибке:
"Syntax error"
("С и н т а к с и ч е с к а я о ш и б к а").
-
П р и м е р 1. Написать программу вычисления значения функции Y
───────────── a·b²
Y=√──────
(k-m)²
при следующих значениях аргументов: a=5.3; b=14.7; k=1.44; m=0.508.
-
NEW
Ok
10 DATA 5.3,14.7,1.44,0.508
run
Y= 36.311095958874
Ok
-
В результате совместного выполнения операторов READ и DATA переменные
A,B,K,M получат следующие значения:
А=5.3; B=14.7; K=1.44; M=.508
затраты труда программиста при изменении входных данных.
Действительно, при изменении значений переменных A, B, K, M достаточно
переписать только одну программную строку с номером 10.
-
П р и м е р 2. NEW
───────────── Ok
10 DATA "ДИСПЛЕЙ","DISKETTA":READ X$,Y$
run
ДИСПЛЕЙDISKETTA
Ok
-
Ясно, что в результате выполнения оператора READ строковые переменные
X$,Y$ получили значения: X$="ДИСПЛЕЙ" и Y$="DISKETTA".
-
П р и м е р 3. NEW
───────────── Ok
100 DATA 34
goldfish testing,1..2..3!
22
Ok
-
Общий вид оператора RESTORE:
- RESTORE [n]
+ RESTORE [n] ,
где: RESTORE ("to restore"-"восстанавливать") - служебное слово;
n - номер программной строки, n∈[0,65529].
Этот оператор изменяет состояние указателя считывания. Напомним, что
строке с номером n .
Оператор RESTORE может быть использован неоднократно и в любом месте
Вашей программы.
-
П р и м е р ы:
─────────────
1) NEW 2) NEW
II.4.6. О п е р а т о р в ы в о д а PRINT в о б щ е м с л у ч а е
-
Формат этого оператора:
[L]PRINT[# n,][USING ф о р м а т;] с п и с о к в ы в о д а
("Line PRINT USING" - "форматная печать строки"),
где: префикс L задает вывод информации на печатающее устройство (прин-
-тер); отсутствие даного префикса задает вывод данных на экран дисплея;
+тер); отсутствие данного префикса задает вывод данных на экран дисплея;
ф о р м а т - строковое выражение, содержащее информацию о форме
представления выводимых данных;
с п и с о к в ы в о д а - список выражений любого типа, разделен-
ральны" и просто переносятся в выводимые значения.
Ниже перечислены основные у п р а в л я ю щ и е с и м в о л ы, и да-
ны поясняющие примеры.
-
1. ! - вставка первого символа значения строкового выражения из с п и-
с к а в ы в о д а вместо символа "!" в значении ф о р м а т а .
-
1) NEW
Ok
10 X$="банан":Y$="ананас"
run
банан+ананас=бананас
Ok
-
2) NEW 3) NEW
Ok Ok
10 X$="шорох" 10 X$="шах":y$="кол":z$="!"
шабаш run
Ok кабак...? шабаш...!
Ok
-
2. \ ········ \- вставка первых (n+2)-х символов значения строкового
▲ выражения из с п и с к а в ы в о д а вместо символа
│ "\ \" в значении ф о р м а т а.
n пробелов
-
1) NEW 2) NEW
Ok Ok
10 X$="Рокер":Y$="кокон" 10 X$="баран":Y$="коран":Z$=
Рококо run
Ok банкомет
Ok
-
- 3) NEW 4) A$="комар":B$="терка"
- Ok :C$="\ \пью\ \":PRIN
- 10 X$="Банан":Y$="зайка":Z$="!" TUSING$;A$,B$
- 20 ?USING"\ \\ \!";X$,Y$,Z$ компьютер
- run Ok
+ 3) NEW 4) A$="комар":B$="терка":C$="\ \пью
+ Ok \ \":PRINTUSINGC$;A$,B$
+ 10 X$="Банан":Y$="зайка":Z$="!" компьютер
+ 20 ?USING"\ \\ \!";X$,Y$,Z$ Ok
+ run
Банзай!
Ok
-
3. & - вставка значения строкового выражения из с п и с к а в ы в о -
д а вместо символа "&" в значении ф о р м а т а.
-
1) NEW 2) NEW
Ok Ok
10 Y$="BASIC":A$="MSX-&" 10 Y$="BASIC":Z$="КОМПЬЮТЕР":
MSX-BASIC run
Ok MSX-BASIC MSX-КОМПЬЮТЕР
Ok
-
3) NEW 4) NEW
Ok Ok
10 X$="MSU":Y$="BASIC" 10 X$="MSX":y$="BASIC":Z$="не
MSX-BASIC run
Ok MSX-BASIC не структурен
Ok
-
4. ### - примеры значений ф о р м а т а для вывода десятичных чисел
###.# с фиксированной точкой. Символ "#" указывает на тот факт,
что в данном месте поля вывода должна находиться ц и ф р а, а символ "."
ются нулями.
Напомним, что максимальное количество значащих цифр в числе - 14 и что
числа при необходимости округляются.
-
1) Ok
?USING"##.# ";25.1, 7, 69.88, -34.7, -65, 3.7, 456.89,
4.5E-12, 1E-3, 3.64E4, 5E26
25.1····7.0···69.9···%-34.7···%-65.0····3.7···%456.9···
·0.0····0.0···%36400.0···% 5E+26
Ok
-
2) NEW
Ok
10 PRINTUSING"###.##,";1.234;-4578;1234567.89;3.45E-23
run
1.23,%-4578.00,%1234567.89··0.00
Ok
-
Отметим,что если выводимое на экран дисплея или принтер число содержит
десятичных позиций больше, чем "размеры" поля вывода, то число выводится,
однако перед ним ставится символ процента "%", чтобы предупредить пользо-
вателя.
-
3) NEW
Ok
10 ?USING"#.################";123.4;12345678910111213
run
%123.4000000000000000 % 1.2345678910111E+16
Ok
-
5.+###.# - примеры значений ф о р м а т а для вывода десятичных чисел
##.##+ с фиксированной точкой с указанием знака числа("+" или "-")
в начале или конце записи. Посмотрите, пожалуйста, следующий иллюстратив-
ный пример:
-
10 A$="+##.# ":B$="#.###+ " 'LEN(A$)=8;LEN(B$)=9
20 ?USING A$; 12.6, 1.26, -35.7, -0.678 'пробелы - для
30 ?USING B$; 12.6, 1.26, -35.7, -0.678 'наглядности!
+12.6····+1.3···-35.7····-0.7
%12.600+···1.260+···%35.700-···0.678-
Ok
-
6. #.##- - пример значения ф о р м а т а для вывода десятичных чисел
с указанием знака "-" в конце выводимых отрицательных значений (для поло-
жительных чисел в этом случае печатается пробел в конце числа).
-
NEW
Ok
10 A$="##.##- " 'LEN(A$)=9
run
11.78-···11.78·····3.60-····3.60····%234.57-···%234.57
Ok
-
Отметим,что знак "-" используется только в качестве последнего символа
ф о р м а т а. Использование знака "-" в качестве первого символа ф о р-
м а т а приводит к выводу знака "-" впереди числа, например:
-
Ok
? USING"-##.# ";-3.1,-33.1;3.1, 33.1
--3.1···-%-33.1···-.3.1···-33.1
сел с фиксированной точкой с заполнением пустого пространства перед ними
символами "*" (разумеется, если количество цифр числа меньше размера поля
вывода!)
-
NEW
Ok
10 ?USING"**###.# ";125.3,-125.3;5.,-5.;345.45,-345.45;
8. #.###^^^^ - пример значения ф о р м а т а для вывода десятичных
чисел с плавающей точкой.
-
NEW
Ok
10 ?USING"+##.#^^^^ ";22.5,-22.5;234567,-234567;2.2E-62
run
+22.5E+00···-22.5E+00···+23.5E+04···-23.5E+04···+22.0E-63
Ok
-
9. #,####.# - пример значения ф о р м а т а для вывода десятичных
чисел в фиксированной форме с разбивкой записи их целой части запятыми
на группы по 3 цифры в каждой, причем запятую можно ставить не только по-
сле первого, но и после любого другого символа "#", но обязательно до де-
сятичной точки.
-
1) NEW 2) NEW
Ok Ok
10 A$="#,#######.##" 10 A$="#,,#,#,#,#######.###"
run run
5,554,322.43 ··12,345,678,910.891
Ok Ok
-
10. $$ - эти два символа, расположенные слева от первого символа "#"
в ф о р м а т е , вызывают печать одного символа "$" слева от старшей
значащей цифры выводимого числового значения.
-
11. **$ -эти символы вызывают печать одного символа "$" слева от стар-
шей значащей цифры выводимого числового значения, но в оставшихся позици-
ях ф о р м а т а слева от символа "$" печатаются символы "*".
-
П р и м е р. NEW
─────────── Ok
10 ?USING "$$##.# ";15.3,-15.3;15390
$15.3··-$15.3··%$15390.0
**$15.3··*-$15.3··%$15390.0
Ok
-
Если оператор PRINT USING содержит выражений в с п и с к е в ы в о-
д а больше, чем управляющих символов в ф о р м а т е , то после вывода
значения, соответствующего последнему управляющему символу в значении
ф о р м а т а, ф о р м а т начинает использоваться повторно с самого на-
чала для следующих выражений из с п и с к а в ы в о д а.
-
П р и м е р. NEW
─────────── Ok
10 X$="версия":Y$="MSX - мощная":Z$="!"
run символа
версия MSX - мощная версия !
Ok
-
Если в значении ф о р м а т а определено больше управляющих символов,
чем выражений в с п и с к е в ы в о д а , то лишние управляющие символы
игнорируются.
-
П р и м е р. NEW
─────────── Ok
10 X$="MSU":Y$="BASIC"' B PRINTUSING:1 выражение
run
MSX-
Ok
-
Разумеется, что числовым выражениям в с п и с к е в ы в о д а должны
соответствовать числовые ф о р м а т ы, а строковым - строковые. В против-
ном случае произойдет ошибка.
-
П р и м е р. NEW NEW
─────────── Ok Ok
10 Y$="BASIC" 10 A$="&&&"
run run
Type mismatch in 20 Type mismatch in 20
Ok Ok
-
З а м е ч а н и е. Напомним, что при необходимости числа перед выводом
округляются и что если число "шире" поля вывода,то оно все равно выводит-
ся,но перед ним ставится знак предостережения "%" .
Обычно ф о р м а т служит для вывода сразу нескольких значений.
-
П р и м е р. NEW
─────────── Ok
10 A$="Факультет:\ \-\ \.Группа:!#!"
run
Факультет:физ-мат.Группа:М5А
Ok
-
Отметим, что оператор вида:
LPRINT [USING ф о р м а т;] с п и с о к в ы в о д а
позволяет вывести информацию, получаемую при работе программы,не на экран,
дой (максимальное число зон в строке печати - 9).
-
II.4.7. О п е р а т о р в в о д а д а н н ы х INPUT
-
Разговор - это здание, которое строят
совместными усилиями.
А.Моруа
-
Вначале договоримся о терминологии.
П о л ь з о в а т е л ь ("user") - человек, использующий техническое и
программное обеспечение, а также различные виды услуг, представляемые ему
выполнения лежат только на пользователе!
Ясно, что разрабатываемые программы должны быть универсальными для сво-
его класса задач, т.е. программа должна решать задачу при любых (в задан-
-ном диапазоне, конечно) значениях исходных данных. Однако,именно необходи-
+ном диапазоне, конечно) значениях исходных данных. Однако именно необходи-
мость изменять исходные данные и не позволяет создать полностью универ-
сальную программу при ориентации на пакетный режим работы с ЭВМ. Действи-
тельно, если обрабатывающая часть программ, работающая лишь с именами пе-
Диалоговые средства MSX-BASIC (диалоговый режим) позволяют пользовате-
лю вводить данные с клавиатуры в нужный момент по запросу самой программы,
в определенном месте которой записан оператор вида:
- INPUT ["β";] α,σ,δ,...
+ INPUT ["β";] α,σ,δ,... ,
где: INPUT ("input"-"ввод") - служебное слово;
β - последовательность произвольных символов алфавита MSX-BASIC
("подсказка");
?? 5,А Нажмите клавишу "RETURN"!
М 5 А
Ok
-
После ввода компьютер продолжает вычисления.
Если на строке после знака "?" были только пробелы, то считается, что
Вы не хотите изменять значения переменных α,β,γ,... .
? Нажмите клавишу "RETURN"!
5 Прежнее значение переменной A сохранилось!
Ok
-
При несоответствии типов вводимых констант типам переменных α,σ,δ,...
на следующей экранной строке появляется сообщение об ошибке:
? Redo from start
? Extra ignored
("Л и ш н е е и г н о р и р у е т с я").
+
П р и м е р 3. NEW
───────────── Ok
10 INPUT "ГРУППА";A$,B,C$
? Extra ignored
M- 5 -A
Ok
-
Вводимые значения строковых переменных можно заключать в кавычки; если
кавычка является первым символом вводимого значения, то значением перемен-
ной становится все содержимое кавычек; если кавычка - не первый встречаю-
·123.4········ab"g Гм...? e5,"ab'g"
Ok ·0············ab'g
Ok
-
Оператор INPUT переводит программу в режим SCREEN0 или SCREEN1,поэтому
использование его невозможно, если Вы работаете в графических экранах
SCREEN 2 и SCREEN 3 (см.раздел V.1).
II.4.8. О п е р а т о р LINEINPUT
-
Общий вид данного оператора:
LINEINPUT ["β";] с т р о к о в а я п е р е м е н н а я,
где: LINEINPUT ("ввод строк") - служебное слово;
с т р о к о в а я п е р е м е н н а я - имя строковой переменной
или имя элемента строкового массива.
Этот оператор обеспечивает чтение символов с клавиатуры. Вначале на эк-
-ран выводится "подсказка" β, и текстовый курсор, расположенный на следую-
+ран выводится "подсказка" β и текстовый курсор, расположенный на следую-
щей за ней позиции дисплейной строки.
Теперь Вы можете вводить любую информацию, даже можете нажимать команд-
ные клавиши, комбинацию символов (используя способы редактирования с кла-
н о й.
Указанный оператор, как правило,используется для ввода в компьютер зна-
чений строковых переменных, содержащих кавычки или запятые.
- Дело в том, что строку символов, содержащую кавычки, например, строку
-'Курс "Программированиe"' нельзя ввести как значение строковой переменной
+ Дело в том, что строку символов, содержащую кавычки, например строку
+'Курс "Программированиe"',нельзя ввести как значение строковой переменной
в память компьютера оператором INPUT.
П р и м е р ы: 1) NEW
!синус
синус
Ok
-
Вы можете при помощи оператора LINEINPUT вводить числа,но после чтения
результат нужно преобразовать при помощи функции VAL()(см. раздел IV.1.3).
Введите число:12 Введите число:4Е-4 Введите число:&В100
144 1.6Е-07 16
Ok Оk Ok
-
3) NEW
Ok
10 LINEINPUT"Введите текст";T1$
можно, будет обращаться к компьютеру с помощью жеста или мимики. Однако по-
ка компьютер не способен воспринимать такие обращения,но MSX-BASIC уже сей-
час представляет пользователю достаточно развитые устройства ввода, напри-
-мер, световое перо или джойстик.
-
+мер световое перо или джойстик.
II.4.9. О п е р а т о р ы END и STOP . К о м а н д а CONT
-
Операторов END в одной программе может быть несколько, причем рас-
полагаться они могут в любых ее местах. При выполнении END вычисления по
программе прекращаются.
Оператор END не является обязательным для программы. При его отсутствии
вычисления прекращаются после выполнения последнего оператора программной
строки с наибольшим номером (конечно,если этот оператор не предусматривает
-передачу управления!). Однако, END удобен для документации, так как он обо-
+передачу управления!). Однако END удобен для документации, так как он обо-
значает физический конец программы.
Отметим, что имеется второй оператор останова программы
STOP