Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:files:diff_002

Глава II

@@ -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
msx/basic_dialogue_programming_language/files/diff_002.txt · Последние изменения: 2022-09-10 12:51 — GreyWolf