====== Глава II ====== |{{..author_files:002.msx|}}|{{..author_files:002.txt|}}|[[..002|]]| @@ -1,13 +1,11 @@ -c1E +\/d ГЛАВА II. ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ +\/d- - - Приступая к лечению, врач должен делать это изящно и весело; - хмурый врач никогда не преуспеет в своем ремесле. + Приступая к лечению, врач должен делать это + изящно и весело; хмурый врач никогда не пре- + успеет в своем ремесле. М.Монтень - - - Прежде чем переходить к непосредственному программированию, мы хотим дать два совета: 1) овладеть основами программирования можно лишь при условии повседнев- @@ -34,25 +32,19 @@ J.R.Rice 7. ЭВМ многократно увеличивает некомпетентность вычислителя. Принцип некомпетентности Питера - 8. Экспериментальное тестирование программ может служить для доказа- -тельства наличия ошибок, но никогда не докажет их отсутствие. - Н.Вирт - 9. Умствуй - и придет! Л.Ф.Магницкий + 8. Умствуй - и придет! + Л.Магницкий II.1. РЕЖИМЫ РАБОТЫ - После одновременного нажатия на клавиатуре компьютера клавиш "CTRL" и "STOP"(что обозначается "CTRL"+"STOP") на экран дисплея выводится "систем- ная подсказка" "Ok" ("o'kay"-"о'кей, все в порядке"). - С этого момента Вы можете работать в любом из двух режимов: - 1. Режим прямого, или непосредственного, выполнения команд; ─────────────────────────────────────────────────────── - при работе в режиме прямого выполнения команд на клавиатуре ЭВМ набирает- ся последовательность к о м а н д (указаний,предписаний), которая воспро- изводится на экране дисплея. Затем она вводится в оперативную память ком- @@ -80,7 +72,7 @@ Например,вычисление значения арифметического выражения SQR(3^2+4^2) вы- полняется по команде: PRINT SQR(3^2+4^2) После набора этой команды на клавиатуре и введения ее в оперативную па- -мять компьютера (нажатием клавиши "RETURN"), производится вычисление зна- +мять компьютера (нажатием клавиши "RETURN") производится вычисление зна- чения арифметического выражения,стоящего справа от служебного слова PRINT. В результате на экране дисплея остается следующая информация: Ok @@ -99,7 +91,7 @@ например: Ok ? "Стремитесь к простоте программ." - После набора этой команды на клавиатуре и нажатия клавиши "RETURN", эк- + После набора этой команды на клавиатуре и нажатия клавиши "RETURN" эк- ран дисплея примет следующий вид: Ok ? "Стремитесь к простоте программ." @@ -123,81 +115,66 @@ Прямой режим полезен при о т л а д к е программ и при использовании 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) читаем: "П р о г р а м м а - план действий, подлежащих выполнению некоторым исполнителем,обычно автоматичес- ким устройством, чаще всего ЭВМ; предписание,алгоритм. Программа представ- ляется в виде конечной совокупности о п е р а т о р о в (команд,инструк- @@ -222,7 +199,6 @@ II.2. ИНТЕРПРЕТАТОРЫ И КОМПИЛЯТОРЫ - BASIC - язык программирования высокого уровня. Это значит, что он уни- версален, не связан с конкретной вычислительной машиной. Чтобы программа, написанная на таком языке, могла быть исполнена на реальной ЭВМ, необходи- @@ -233,7 +209,7 @@ реносимой" с одной ЭВМ на другую. Есть два основных типа трансляторов: и н т е р п р е т а т о р ы и к о м п и л я т о р ы . Для BASIC типичны первые, для многих других язы- -ков программирования (например, Паскаля) - вторые. +ков программирования (например, Pascal) - вторые. И н т е р п р е т а т о р работает как синхронный переводчик: он пыта- ется понять каждое очередное предложение (оператор) программы, то есть вы- разить его "смысл" в виде цепочки команд ЭВМ и тут же выполнить их. @@ -268,7 +244,7 @@ гарантирована правильная работа программы в целом: части могут быть плохо пригнаны друг к другу. Предположим теперь, что ошибка обнаружена.Мы не мо- жем исправить одно лишь ошибочное место программы так, как мы делаем это -на BASICe. Придется перекомпилировать весь модуль,иногда из-за одной стро- +на BASIC. Придется перекомпилировать весь модуль, иногда из-за одной стро- ки - несколько сотен. Однако, потом оттранслированная и скомпанованная программа будет рабо- тать намного быстрее,чем подобная программа на BASIC. Ведь интерпретатор @@ -291,17 +267,15 @@ теки, справочника, решения сравнительно простых задач). - II.3. ОФОРМЛЕНИЕ И РЕДАКТИРОВАНИЕ ПРОГРАММ - При записи программы на MSX-BASIC необходимо соблюдать ряд требований, а именно: 1. Текст программы записывается п о с т р о ч н о, четкими п е ч а т- н ы м и символами;при записи служебных слов разрешается использовать как прописные, так и строчные латинские буквы в любом сочетании, причем все строчные латинские буквы после ввода преобразуются интерпретатором в про- -писные (однако, символы, заключенные в кавычки, всегда выводятся на экран +писные (однако символы, заключенные в кавычки, всегда выводятся на экран дисплея без изменения). 2. Каждая строка программы (программная строка) начинается н о м е- р о м этой строки и заканчивается нажатием клавиши "RETURN" @@ -335,8 +309,8 @@ строке "огромного" количества операторов, в результате чего программа ста- новится совершенно "нечитабельной". 6. Последним оператором программы может быть оператор окончания про- -граммы END -с другой стороны, иногда можно обойтись и без этого оператора: выполнив +граммы END . +С другой стороны, иногда можно обойтись и без этого оператора: выполнив последнюю строку программы, ЭВМ останавливается сама - ей больше нечего делать, операторы (команды) кончились! 7. Для записи программы в память ЭВМ и для ее исполнения необходимо со- @@ -361,18 +335,18 @@ грамму с л ю б о й д р у г о й с т р о к и: для этого после служебного слова RUN указывается номер существующей программной строки,с которой про- граммист пожелает начать выполнение программы, например: - RUN 23 + RUN 23 . Отличительной особенностью команды (оператора) RUN n является "стира- ние" значений всех переменных. Таким образом достигается идентичное состо- яние памяти при каждом новом запуске программы. Запомните, что если Вы хотите начать выполнение программы со строки с заданным номером n, но при этом сохранить значения всех переменных, не ис- -пользуйте команду RUN n +пользуйте команду RUN n , а примените в режиме прямого выполнения команду GOTO n или GOSUB n (см. разделы III.1 и IV.4). - Разумеется, номер строки, указанной в операторе RUN не должен находить- + Разумеется, номер строки, указанной в операторе RUN,не должен находить- ся внутри цикла или подпрограммы! Таким образом, программы на BASIC имеют такой общий вид: NEW @@ -402,13 +376,10 @@ корректированный (исправленный) текст строки. Рассмотрим несколько команд редактирования программ. - - II.3.1. К о м а н д а AUTO . К о м а н д а RENUM - Автоматизировать процедуру присвоения номеров программным строкам мож- -но командой АUTO [n1][,n2] +но командой АUTO [n1][,n2] , где: AUTO ("AUTOmatic"-"автоматический") - служебное слово; n1,n2 - целые числовые константы; 0 ≤ n1,n2 ≤ 65529 . По этой команде происходит задание режима автоматической нумерации про- @@ -426,7 +397,7 @@ го номера. Общий вид команды изменения нумерации программных строк: - RENUM [n1][,n2][,n3] + RENUM [n1][,n2][,n3] , где: RENUM("to RENUMber"-"перенумеровать") - служебное слово; n1,n2,n3 - целые константы, 0≤n1,n2,n3≤65529. По команде RENUM производится перенумерация (изменение нумерации) про- @@ -452,23 +423,16 @@ 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 @@ -480,18 +444,16 @@ берется номер первой строки программы. Символ ".", используемый вместо но- мера строки обозначает "текущий" (последний упомянутый) номер программной строки. - П р и м е р ы: 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) или десятичная точка("."). Эта команда, которая может быть оператором программы,выводит текст про- @@ -511,7 +473,6 @@ Клавиша "STOP" используется для организации паузы в процессе вывода текста программы на экран дисплея или принтер. Для продолжения вывода про- граммы следует нажать клавишу "STOP" вторично. - П р и м е р. NEW ─────────── Ok 200 DEFSTR A-C @@ -525,11 +486,8 @@ 150 DEFDBL C-K Оk - - II.4. ЛИНЕЙНЫЕ ПРОГРАММЫ - Напомним,что в школьном алгоритмическом языке л и н е й н ы м и назы- вались алгоритмы, состоящие из серии команд присваивания. Для программирования линейных алгоритмов практически необходимы знания @@ -541,14 +499,10 @@ ется каждый оператор (притом, только о д и н раз). - II.4.1. О п е р а т о р п р и с в а и в а н и я LET - Чтобы выпить из чаши, нужно ее наполнить! Восточная мудрость - - Структура оператора присваивания: [LET] п е р е м е н н а я = в ы р а ж е н и е , где: LET ("пусть") - служебное слово; @@ -563,12 +517,10 @@ присваивания). MSX-BASIC - язык арифметики,а не алгебры: оператор LET при- сваивает переменной слева именно ч и с л о , а никак не алгебраическое выражение, стоящее справа! - П р и м е р ы: 1) NEW ───────────── Ok 10 LET A1=10.04 20 END - Данная программа позволяет присвоить переменной A1 начальное значение 10.04 (инициализировать ее). Проверим это. Сначала выполним программу: run @@ -576,7 +528,6 @@ А теперь... 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 @@ -589,7 +540,6 @@ print P2 Ok 3.142 Ok - Обратите внимание на то, что оператор,расположенный в программной стро- ке 20 примера 2, позволил о к р у г л и т ь значение переменной X. Два следующих оператора присваивания позволят вычислить старший и млад- @@ -622,26 +572,21 @@ вет сообщение об ошибке "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 зна- @@ -649,18 +594,15 @@ ны нулю. Некоторые компьютеры при этом добавляют цепочку непредсказуемых разрядов,из-за чего следует быть очень осторожным,чтобы в вычислениях,тре- бующих высокой точности, не возникали абсурдные результаты! - 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. @@ -696,11 +638,8 @@ Наконец,заметим,что в языках программирования легко сказать "з а п о м- н и", но сложно говорить "з а б у д ь"! - - II.4.2. О п е р а т о р SWAP - Оператор SWAP используется для обмена значениями двух переменных и за- писывается в виде: SWAP α,β или SWAP γ,δ @@ -710,7 +649,7 @@ γ,δ - имена строковых переменных или имена элементов строкового мас- сива (строковых массивов). Этот оператор позволяет осуществлять обмен значениями двух переменных -одинаковых типов. Обычно, не зная оператора SWAP, програмисты используют +одинаковых типов. Обычно, не зная оператора SWAP, программисты используют для обмена значениями следующие приемы: TEMP=A:A=B:B=TEMP или A=A+B:B=A-B:A=A-B . @@ -718,29 +657,23 @@ тельным увеличением скорости и экономией места. Заметим, что к двум переменным можно применить оператор 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 и до конца данной программной строки может @@ -792,7 +725,7 @@ того, следует описать используемый алгоритм шаг за шагом. Эта часть может быть использована в качестве введения для неискушенного пользователя,разъ- ясняющая ему, что делает Ваша программа и как ею пользоваться. - Более того многие программисты считают, что перед непосредственным про- + Более того,многие программисты считают, что перед непосредственным про- граммированием необходимо написать инструкцию по использованию будущей программы! В т о р о й у р о в е н ь состоит в документировании каждого бло- @@ -828,15 +761,13 @@ + II.4.4. О п е р а т о р в ы в о д а д а н н ы х PRINT в п р о с т е й ш е м с л у ч а е - ...мало толку в программе, которая только и делает, что секретничает сама с собой. Л.Хэнкок, М.Кригер - - Оператор вывода данных на экран дисплея в простейшем случае состоит из служебного слова PRINT ("to print"-"печатать"), за которым следует спи- сок выражений любого типа, значения которых должны быть выведены на экран @@ -861,7 +792,6 @@ тьего и всех последующих выражений отображаются в начале тех же зон, но с новой дисплейной строки. Если данные занимают не более 13 позиций, то сле- дующая зона располагается прямо за концом данных без вывода пробелов. - П р и м е р ы: 1) NEW NEW ───────────── Оk Ok 10 X=2:Y=X^2 10 X=2 @@ -871,25 +801,21 @@ ·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 @@ -900,7 +826,6 @@ ·3··27 ·3·-81 ·27 Ok Ok - Если в списке встречаются лишние запятые, соответствующие пустым эле- ментам данных,то пропускается соответствующее число зон печати. Например, для вывода на экран дисплея данных не с первой, а со второй @@ -914,19 +839,16 @@ точкой со стандартной мантиссой (это происходит, когда целая часть выводи- мого числа содержит не менее п я т н а д ц а т и значащих цифр или ког- да число по модулю ≤ 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"; @@ -937,11 +859,9 @@ ·3··27··3··81 ·3··27········▲3··81 Ok Ok Ok │ 15-я позиция - С помощью оператора PRINT можно (и должно),используя строковую констан- ту, (последовательность символов, заключенную в кавычки), организовать бо- лее информативный, к р а с и в ы й вывод результатов работы программы. - П р и м е р 11. ────────────── NEW или NEW @@ -956,12 +876,11 @@ Ok ▲ Ok │ 15-я позиция (начало второй зоны) - Опишем интересные д о п о л н и т е л ь н ы е возможности оператора ?: а) существует возможность начать вывод значения некоторого выражения с точно указанной позиции дисплейной строки (с позиции N). Для этого доста- точно поместить в операторе PRINT перед этим выражением функцию - TAB(α) + TAB(α) , где: TAB("to TABulate"-"табулировать") - служебное слово; α - арифметическое выражение, целая часть значения которого лежит на отрезке [0,255]; обозначим N=INT(α). @@ -972,9 +891,9 @@ ции текущего положения курсора, то перемещения не происходит. Напомним Вам, что номера позиций курсора на дисплейной 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 @@ -983,7 +902,6 @@ │ 11-я позиция 3-я позиция Ok - П р и м е р 13. NEW ────────────── Ok 10 V=1:INPUT M,N 'Ширина экрана - 39 позиций! @@ -1000,14 +918,12 @@ ? 1,7 ... 39-я позиция ·V=·1··V=·1 Ok - Забегая вперед, отметим, что номер позиции текущего положения курсора на дисплейной строке можно получить, используя встроенную функцию POS(0) (см. раздел V.3). Кроме того, функция TAB(n) позволяет программисту получить удобное раз- мещение колонок выводимых результатов, если вывод по зонам, задаваемым за- пятой (через 14 позиций), слишком широк. - П р и м е р 14. NEW ────────────── Ok 10 INPUT X,A,B,C @@ -1019,16 +935,14 @@ 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 @@ -1040,14 +954,13 @@ пробелы для знака │ │ обязательные пробелы после числа - Запомните, что встроенные функции TAB() и SPC() допустимы т о л ь к о в операторе (команде) PRINT! + II.4.5. О п е р а т о р ы в в о д а д а н н ы х DATA и READ. О п е р а т о р RESTORE - Б л о к о м д а н н ы х будем называть последовательность констант. С блоком данных связана некоторая величина,называемая у к а з а т е л е м с ч и т ы в а н и я . Она всегда "настроена" на конкретную константу бло- @@ -1056,7 +969,7 @@ Оператор DATA предназначен для хранения данных в блоке данных и для ввода его в программу. Структура оператора DATA: - DATA β1[,β2][,β3]... + DATA β1[,β2][,β3]... , где: DATA ("data"-"данные") - служебное слово; β1, β2, β3, ... - числовые константы или строковые константы в ка- вычках или без кавычек (но в этом случае не содержащие запятых, кавычек и @@ -1087,7 +1000,7 @@ массивов в программе. Он очень удобен при документировании программ. Оператор READ предназначен для организации выборки (чтения) данных из блока данных. - Формат оператора READ: READ α1[,α2][,α3]... + Формат оператора READ: READ α1[,α2][,α3]... , где: READ ("to read"-"читать") - служебное слово; α1, α2, α3, ... - имена переменных или имена элементов массива(ов). При выполнении оператора READ из блока данных последовательно считыва- @@ -1105,13 +1018,11 @@ ны совпадать! В противном случае выводится сообщение об ошибке: "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 @@ -1121,7 +1032,6 @@ run Y= 36.311095958874 Ok - В результате совместного выполнения операторов READ и DATA переменные A,B,K,M получат следующие значения: А=5.3; B=14.7; K=1.44; M=.508 @@ -1134,7 +1044,6 @@ затраты труда программиста при изменении входных данных. Действительно, при изменении значений переменных A, B, K, M достаточно переписать только одну программную строку с номером 10. - П р и м е р 2. NEW ───────────── Ok 10 DATA "ДИСПЛЕЙ","DISKETTA":READ X$,Y$ @@ -1142,10 +1051,8 @@ run ДИСПЛЕЙDISKETTA Ok - Ясно, что в результате выполнения оператора READ строковые переменные X$,Y$ получили значения: X$="ДИСПЛЕЙ" и Y$="DISKETTA". - П р и м е р 3. NEW ───────────── Ok 100 DATA 34 @@ -1159,9 +1066,8 @@ goldfish testing,1..2..3! 22 Ok - Общий вид оператора RESTORE: - RESTORE [n] + RESTORE [n] , где: RESTORE ("to restore"-"восстанавливать") - служебное слово; n - номер программной строки, n∈[0,65529]. Этот оператор изменяет состояние указателя считывания. Напомним, что @@ -1175,7 +1081,6 @@ строке с номером n . Оператор RESTORE может быть использован неоднократно и в любом месте Вашей программы. - П р и м е р ы: ───────────── 1) NEW 2) NEW @@ -1194,12 +1099,11 @@ II.4.6. О п е р а т о р в ы в о д а PRINT в о б щ е м с л у ч а е - Формат этого оператора: [L]PRINT[# n,][USING ф о р м а т;] с п и с о к в ы в о д а ("Line PRINT USING" - "форматная печать строки"), где: префикс L задает вывод информации на печатающее устройство (прин- -тер); отсутствие даного префикса задает вывод данных на экран дисплея; +тер); отсутствие данного префикса задает вывод данных на экран дисплея; ф о р м а т - строковое выражение, содержащее информацию о форме представления выводимых данных; с п и с о к в ы в о д а - список выражений любого типа, разделен- @@ -1223,10 +1127,8 @@ ральны" и просто переносятся в выводимые значения. Ниже перечислены основные у п р а в л я ю щ и е с и м в о л ы, и да- ны поясняющие примеры. - 1. ! - вставка первого символа значения строкового выражения из с п и- с к а в ы в о д а вместо символа "!" в значении ф о р м а т а . - 1) NEW Ok 10 X$="банан":Y$="ананас" @@ -1234,7 +1136,6 @@ run банан+ананас=бананас Ok - 2) NEW 3) NEW Ok Ok 10 X$="шорох" 10 X$="шах":y$="кол":z$="!" @@ -1243,12 +1144,10 @@ шабаш run Ok кабак...? шабаш...! Ok - 2. \ ········ \- вставка первых (n+2)-х символов значения строкового ▲ выражения из с п и с к а в ы в о д а вместо символа │ "\ \" в значении ф о р м а т а. n пробелов - 1) NEW 2) NEW Ok Ok 10 X$="Рокер":Y$="кокон" 10 X$="баран":Y$="коран":Z$= @@ -1257,18 +1156,15 @@ Рококо 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$="КОМПЬЮТЕР": @@ -1277,7 +1173,6 @@ 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$="не @@ -1286,7 +1181,6 @@ MSX-BASIC run Ok MSX-BASIC не структурен Ok - 4. ### - примеры значений ф о р м а т а для вывода десятичных чисел ###.# с фиксированной точкой. Символ "#" указывает на тот факт, что в данном месте поля вывода должна находиться ц и ф р а, а символ "." @@ -1298,38 +1192,32 @@ ются нулями. Напомним, что максимальное количество значащих цифр в числе - 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 'наглядности! @@ -1337,11 +1225,9 @@ +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 @@ -1349,11 +1235,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 @@ -1363,7 +1247,6 @@ сел с фиксированной точкой с заполнением пустого пространства перед ними символами "*" (разумеется, если количество цифр числа меньше размера поля вывода!) - NEW Ok 10 ?USING"**###.# ";125.3,-125.3;5.,-5.;345.45,-345.45; @@ -1375,20 +1258,17 @@ 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$="#,,#,#,#,#######.###" @@ -1396,15 +1276,12 @@ run run 5,554,322.43 ··12,345,678,910.891 Ok Ok - 10. $$ - эти два символа, расположенные слева от первого символа "#" в ф о р м а т е , вызывают печать одного символа "$" слева от старшей значащей цифры выводимого числового значения. - 11. **$ -эти символы вызывают печать одного символа "$" слева от стар- шей значащей цифры выводимого числового значения, но в оставшихся позици- ях ф о р м а т а слева от символа "$" печатаются символы "*". - П р и м е р. NEW ─────────── Ok 10 ?USING "$$##.# ";15.3,-15.3;15390 @@ -1413,13 +1290,11 @@ $15.3··-$15.3··%$15390.0 **$15.3··*-$15.3··%$15390.0 Ok - Если оператор PRINT USING содержит выражений в с п и с к е в ы в о- д а больше, чем управляющих символов в ф о р м а т е , то после вывода значения, соответствующего последнему управляющему символу в значении ф о р м а т а, ф о р м а т начинает использоваться повторно с самого на- чала для следующих выражений из с п и с к а в ы в о д а. - П р и м е р. NEW ─────────── Ok 10 X$="версия":Y$="MSX - мощная":Z$="!" @@ -1427,11 +1302,9 @@ run символа версия MSX - мощная версия ! Ok - Если в значении ф о р м а т а определено больше управляющих символов, чем выражений в с п и с к е в ы в о д а , то лишние управляющие символы игнорируются. - П р и м е р. NEW ─────────── Ok 10 X$="MSU":Y$="BASIC"' B PRINTUSING:1 выражение @@ -1439,11 +1312,9 @@ run MSX- Ok - Разумеется, что числовым выражениям в с п и с к е в ы в о д а должны соответствовать числовые ф о р м а т ы, а строковым - строковые. В против- ном случае произойдет ошибка. - П р и м е р. NEW NEW ─────────── Ok Ok 10 Y$="BASIC" 10 A$="&&&" @@ -1451,13 +1322,11 @@ run run Type mismatch in 20 Type mismatch in 20 Ok Ok - З а м е ч а н и е. Напомним, что при необходимости числа перед выводом округляются и что если число "шире" поля вывода,то оно все равно выводит- ся,но перед ним ставится знак предостережения "%" . Обычно ф о р м а т служит для вывода сразу нескольких значений. - П р и м е р. NEW ─────────── Ok 10 A$="Факультет:\ \-\ \.Группа:!#!" @@ -1465,7 +1334,6 @@ run Факультет:физ-мат.Группа:М5А Ok - Отметим, что оператор вида: LPRINT [USING ф о р м а т;] с п и с о к в ы в о д а позволяет вывести информацию, получаемую при работе программы,не на экран, @@ -1477,15 +1345,12 @@ дой (максимальное число зон в строке печати - 9). - II.4.7. О п е р а т о р в в о д а д а н н ы х INPUT - Разговор - это здание, которое строят совместными усилиями. А.Моруа - Вначале договоримся о терминологии. П о л ь з о в а т е л ь ("user") - человек, использующий техническое и программное обеспечение, а также различные виды услуг, представляемые ему @@ -1514,7 +1379,7 @@ выполнения лежат только на пользователе! Ясно, что разрабатываемые программы должны быть универсальными для сво- его класса задач, т.е. программа должна решать задачу при любых (в задан- -ном диапазоне, конечно) значениях исходных данных. Однако,именно необходи- +ном диапазоне, конечно) значениях исходных данных. Однако именно необходи- мость изменять исходные данные и не позволяет создать полностью универ- сальную программу при ориентации на пакетный режим работы с ЭВМ. Действи- тельно, если обрабатывающая часть программ, работающая лишь с именами пе- @@ -1523,7 +1388,7 @@ Диалоговые средства MSX-BASIC (диалоговый режим) позволяют пользовате- лю вводить данные с клавиатуры в нужный момент по запросу самой программы, в определенном месте которой записан оператор вида: - INPUT ["β";] α,σ,δ,... + INPUT ["β";] α,σ,δ,... , где: INPUT ("input"-"ввод") - служебное слово; β - последовательность произвольных символов алфавита MSX-BASIC ("подсказка"); @@ -1558,7 +1423,6 @@ ?? 5,А Нажмите клавишу "RETURN"! М 5 А Ok - После ввода компьютер продолжает вычисления. Если на строке после знака "?" были только пробелы, то считается, что Вы не хотите изменять значения переменных α,β,γ,... . @@ -1571,7 +1435,6 @@ ? Нажмите клавишу "RETURN"! 5 Прежнее значение переменной A сохранилось! Ok - При несоответствии типов вводимых констант типам переменных α,σ,δ,... на следующей экранной строке появляется сообщение об ошибке: ? Redo from start @@ -1586,6 +1449,7 @@ ? Extra ignored ("Л и ш н е е и г н о р и р у е т с я"). + П р и м е р 3. NEW ───────────── Ok 10 INPUT "ГРУППА";A$,B,C$ @@ -1599,7 +1463,6 @@ ? Extra ignored M- 5 -A Ok - Вводимые значения строковых переменных можно заключать в кавычки; если кавычка является первым символом вводимого значения, то значением перемен- ной становится все содержимое кавычек; если кавычка - не первый встречаю- @@ -1614,7 +1477,6 @@ ·123.4········ab"g Гм...? e5,"ab'g" Ok ·0············ab'g Ok - Оператор INPUT переводит программу в режим SCREEN0 или SCREEN1,поэтому использование его невозможно, если Вы работаете в графических экранах SCREEN 2 и SCREEN 3 (см.раздел V.1). @@ -1623,7 +1485,6 @@ II.4.8. О п е р а т о р LINEINPUT - Общий вид данного оператора: LINEINPUT ["β";] с т р о к о в а я п е р е м е н н а я, где: LINEINPUT ("ввод строк") - служебное слово; @@ -1632,7 +1493,7 @@ с т р о к о в а я п е р е м е н н а я - имя строковой переменной или имя элемента строкового массива. Этот оператор обеспечивает чтение символов с клавиатуры. Вначале на эк- -ран выводится "подсказка" β, и текстовый курсор, расположенный на следую- +ран выводится "подсказка" β и текстовый курсор, расположенный на следую- щей за ней позиции дисплейной строки. Теперь Вы можете вводить любую информацию, даже можете нажимать команд- ные клавиши, комбинацию символов (используя способы редактирования с кла- @@ -1643,8 +1504,8 @@ н о й. Указанный оператор, как правило,используется для ввода в компьютер зна- чений строковых переменных, содержащих кавычки или запятые. - Дело в том, что строку символов, содержащую кавычки, например, строку -'Курс "Программированиe"' нельзя ввести как значение строковой переменной + Дело в том, что строку символов, содержащую кавычки, например строку +'Курс "Программированиe"',нельзя ввести как значение строковой переменной в память компьютера оператором INPUT. П р и м е р ы: 1) NEW @@ -1654,7 +1515,6 @@ !синус синус Ok - Вы можете при помощи оператора LINEINPUT вводить числа,но после чтения результат нужно преобразовать при помощи функции VAL()(см. раздел IV.1.3). @@ -1668,7 +1528,6 @@ Введите число:12 Введите число:4Е-4 Введите число:&В100 144 1.6Е-07 16 Ok Оk Ok - 3) NEW Ok 10 LINEINPUT"Введите текст";T1$ @@ -1720,20 +1579,18 @@ можно, будет обращаться к компьютеру с помощью жеста или мимики. Однако по- ка компьютер не способен воспринимать такие обращения,но MSX-BASIC уже сей- час представляет пользователю достаточно развитые устройства ввода, напри- -мер, световое перо или джойстик. - +мер световое перо или джойстик. II.4.9. О п е р а т о р ы END и STOP . К о м а н д а CONT - Операторов END в одной программе может быть несколько, причем рас- полагаться они могут в любых ее местах. При выполнении END вычисления по программе прекращаются. Оператор END не является обязательным для программы. При его отсутствии вычисления прекращаются после выполнения последнего оператора программной строки с наибольшим номером (конечно,если этот оператор не предусматривает -передачу управления!). Однако, END удобен для документации, так как он обо- +передачу управления!). Однако END удобен для документации, так как он обо- значает физический конец программы. Отметим, что имеется второй оператор останова программы STOP {{tag> }}