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

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


msx:basic_dialogue_programming_language:files:diff_004

Глава IV

@@ -1,13 +1,10 @@
-c1E
+\/d
                    ГЛАВА IV.  ФУНКЦИИ И ПОДПРОГРАММЫ
-
-
+\/d-
 
                                Любая по-настоящему полезная классификация
                                содержит от трех до шести категорий.                        
                                                                      Энон
-
-
    В MSX-BASIC различают следующие основные типы функций:
    1) встроенные функции:
       а) встроенные числовые функции;
@@ -24,11 +21,8 @@
    Заметим, что  встроенные  ч и с л о в ы е  функции  мы уже изучили (см.
 раздел I.7.4.)!
 
-
-
                 IV.1.  ВСТРОЕННЫЕ  ФУНКЦИИ  ПРЕОБРАЗОВАНИЯ
 
-
    Напомним, что множество значений строковых переменных - это  множество
 упорядоченных наборов символов. Упорядоченность  означает, что  строковые
 значения различаются не только набором, но и последовательностью символов,
@@ -43,19 +37,15 @@
 значается " "(между кавычками есть пробел) и имеет длину 1. 
    Отметим, что символ "пробел" - равноправный с остальными символ!
 
-
-
                       IV.1.1.  LEN - ф у н к ц и я
 
-
-   Ее общий вид                   LEN(α)
+   Ее общий вид                   LEN(α)      ,
 где:  LEN ("LENgth"-"длина") - служебное слово;
       α - строковое выражение.
    Результатом функции LEN(α) является  длина  значения строкового выраже-
 ния α (или что то же самое,количество символов в строке α),LEN(α)∈[0,255].
    Напомним, что в том месте дисплейной строки,где надо обратить Ваше вни-
 мание на наличие символа пробел (" "), мы будем использовать символ "·".
-
    П р и м е р 1.
    ─────────────      
    NEW
@@ -70,11 +60,9 @@
 переменными. С ее помощью, например, можно определить,не является ли стро-
 ка пустой до выполнения действий, которые не могут выполняться над пустой
 строкой ("").
-
    П р и м е р 2. 10 IF LEN(A$)>0 THEN PRINT "Все в порядке!" ELSE PRINT
    ─────────────  "Строка  пустая!" 'Проверка, является ли строка  пустой,
                   т.е. не содержащей ни одного символа.
-
    П р и м е р 3. NEW
    ─────────────  Ok
                   10 'Выравнивание слов по правому краю.
@@ -86,16 +74,13 @@
                   ··········фанатичный
                   ·········программист
                   Ok
-
    Сравните функцию  LEN() с функцией длин (А), где длин(А) - длина  текс-
                                       ────          ────
 та A, в школьном алгоритмическом языке [11, с.53]!
 
 
-
                       IV.1.2.  INSTR - ф у н к ц и я
 
-
    Общий вид функции INSTR:
                                INSTR([n,]α,β)
 Здесь: INSTR("IN STRing"-"в строке") - служебное слово;
@@ -136,11 +121,8 @@
     1                             Illegal function call in 20
    Ok                             Ok
 
-
-
                       IV.1.3.  VAL - ф у н к ц и я 
 
-
    Ц и ф р о в а я  строка - это строка,содержащая любое количество распо-
 ложенных в любом месте  строки пробелов, знак "плюс" или "минус", десятич-
 ные цифры и десятичную точку. 
@@ -154,102 +136,84 @@
    В ряде случаев удобнее работать с числами, а не с их представлениями в
 виде цифровых строк. Цифровую строку можно преобразовать в числовое значе-
 ние с помощью функции преобразования VAL, общий вид которой:
-                                 VAL(α)
+                                 VAL(α)        ,
 где:  VAL("VALue"-"значение") - служебное слово;
       α - строковое выражение.
    Преобразование начинается с крайнего левого символа  значения строково-
 го выражения α и заканчивается, когда преобразован последний символ значе-
 ния α, либо когда встретился нецифровой символ.  
-
    П р и м е р ы:
    ─────────────
    Ok                    Ok
    print VAL("12.5E-3")  print val("&b1");val("&o76");val("&hF")
     .0125                ·1··62··15
    Ok                    Ok
-
    Если строка является пустой или начинается  с  нецифрового символа, то
 функция VAL возвращает значение 0.
-
    П р и м е р ы:    
    ─────────────   
    1) Ok                                  2) Ok
       ? VAL("a12");VAL("23A12:");VAL("")     ? VAL("-1.24")
       ·0··23··0                              -1.24
       Ok                                     Ok
-
    Если одним из символов цифровой строки  является  восклицательный знак,
 то в зависимости от его расположения возможны следующие случаи.
-
    П р и м е р ы:         
    ─────────────  
    1) Ok
       ? VAL("1234.56789!")
       ·1234.57    ◀─── результат преобразования: число одинарной точности
       Ok               (шесть значащих цифр!)
-
    2) Ok               3) Ok                   4) Ok
       ? VAL("34!5.1")     ? VAL("3456789!.7")     ? VAL("!1")
       ·34                 ·3456790                ·0
       Ok                  Ok                      Ok
-
    И наконец, парочка патологических случаев:
-
    5) Ok               6) Ok
       ? VAL("&")          ? VAL("&H")
       Syntax error         0
       Ok                  Ok
-
    Таким образом, функция VAL позволяет выделить цифры, входящие  в значе-
 ние строкового выражения, и образовать из них число для последующей  мате-
 матической обработки.
 
 
-
                       IV.1.4.  STR$ - ф у н к ц и я
 
-
    Часто бывает необходимо осуществить преобразование  числа  в  цифровую
 строку, например, число  1234.56 преобразовать в цифровую строку"1234.56".
    Это преобразование осуществляет функция STR$, общий вид которой:
-                                 STR$(α)
+                                 STR$(α)     ,
 где: STR ("convert to STRing"-"преобразовать в строку") - служебное слово;
      α -арифметическое выражение.
    Данная функция преобразует значение арифметического выражения  α в циф-
 ровую строку, что позволяет выделять и обрабатывать каждый символ (цифру)
 полученной строки с помощью с т р о к о в ы х (!) функций.
-
    П р и м е р ы:     
    ─────────────   
    1) Ok               2) Ok                 3) Ok
       print STR$(-15)     print STR$(1/3)       ? STR$(1.E-3)
       -15                 ·.33333333333333      ·1E-03
       Ok                  Ok                    Ok
-
    4) Ok
       ? STR$(&b111);STR$(&o23);STR$(&HF1)
       ·7·19·241 
       Ok
-
    Обратите  о с о б о е  внимание  на следующие примеры (первый символ в
 получаемых цифровых строках зарезервирован для указания знака числа):
-
    5) Оk                  6) Ok                       
       ? LEN(STR$(20))        ? LEN(STR$(-56.20))  
        3                      5                       
       Ok                     Ok                       
-
    7) Оk                  8) Ok
       ? LEN(STR$(-5620))     ? LEN(STR$(1.2E-27)
        5                      8
       Ok                     Ok
-
    Еще один пример использования функции STR$: оператор 
                                 PRINT n;"X"
 выводит на экран дисплея пробел между последней цифрой значения  арифмети-
 ческого выражения n и символом "X". Для  исключения этого пробела восполь-
 зуйтесь оператором           PRINT STR$(n);"X"
-
    9) NEW                10) NEW
       Ok                     Ok
       10 INPUT N             10 INPUT N
@@ -261,23 +225,19 @@
        10i                   i10
       Ok                     Ok
 (о строковой функции MID$() см. в разделе IV.2.1.).
-
    Отметим, что обычно в программах функции  VAL() и STR$()  используются
 совместно.
-
    11) Ok
        input N$:print STR$(VAL(N$))
        ? 23123.45   ? -4.7   ? &HFF   однако...  ? 12ABBA
        ·23123.45    -4.7     ·255                ·12
        Ok           Ok       Ok                  Ok
-
    12) Ok
        input N:print VAL(STR$(N))
        ? 12     ? -14.6E-2     ? &b111     ? &o21     ? &h1E
        ·12      -.146          ·7          ·17        ·30
        Ok       Ok             Ok          Ok         Ok
 
-
    13) найдите натуральные числа, не превосходящие заданного  N  и равные
 сумме кубов своих цифр.         
    NEW
@@ -309,9 +269,8 @@
     9                  8         ▲
    Ok                 Ok         │
                              16 символов
-
-   15) найти наибольшую из цифр,встречающуюся в десятичной записи данного
-натурального числа M более одного раза.     
+   15) найдите наибольшую из цифр, встречающуюся в десятичной записи  дан-
+ного натурального числа M более одного раза.     
    NEW
    Ok
    10 INPUT М
@@ -331,21 +290,17 @@
                      Ok
 и все становится ясным!
 
-
-
                         IV.1.5.  ASC - ф у н к ц и я
 
-
    Напомним,что при вводе в ЭВМ символы преобразуются в соответствии с ко-
 дом ASCII (см. раздел I.7.3.).
-   Функция                         ASC(α)
+   Функция                         ASC(α)   ,
 где: ASC("ASC"-"American Standard Code") - служебное слово;
      α - строковое выражение,
 дает возможность установить десятичный код ASCII первого символа значения
 строкового выражения α. Результатом функции  ASC  является целое число из
 отрезка [0,255] (говорят, что функция ASC  в о з в р а щ а е т  целое чис-
 ло из отрезка [0,255]).
-
    П р и м е р.  NEW
    ───────────   Ok
                  10 INPUT X$:Y=ASC(X$):PRINT X$;Y
@@ -353,7 +308,6 @@
                  ? π       ? αδβ     ? ;      ? ","    ? ♪  ◀─ символ,
                  π 163     αδβ 160   ; 59     , 44     ♪ 1     имеющий
                  Ok        Ok        Ok       Ok       Ok    двойной код
-
    Из приведенного примера ясно, что  символ "π", например, имеет десятич-
 ный код 163,а символ "α"(первый символ значения строковой константы"αδβ")
 - десятичный код 160.
@@ -372,12 +326,9 @@
    Снова неудача! Не волнуйтесь, код символа "кавычка" можно получить кос-
 венным путем с помощью функции преобразования CHR$.
 
-
-
                        IV.1.6. CHR$ - ф у н к ц и я
 
-
-   Общий вид функции:             CHR$(α)
+   Общий вид функции:             CHR$(α)   ,
 где:  CHR("CHaRacter"-"символ") - служебное слово;
       α - арифметическое выражение.
    Вначале  компьютер вычисляет к о д - целую часть значения выражения α.
@@ -387,27 +338,22 @@
 вол, соответствующий полученному коду (говорят, что функция CHR$  в о з -
 в р а щ а е т  однобайтовую  строку, содержащую  символ, соответствующий
 полученному коду).
-
    П р и м е р ы:
-   ─────────────
    1)                 INPUT X:Y$=CHR$(X):PRINT X;Y$
                       ? 34            ? 187           ? 163
                        34 "            187 √           163 π
                       Ok              Ok              Ok
-
    2) переменной A$ присвоить значение "A$="BANSAJ!""
                  A$="A$="+CHR$(34)+"BANSAJ!"+CHR$(34)
    А теперь...          print A$
                         A$="BANSAJ!"
                         Ok
-
    3) вывести на экран дисплея текст: "Нажмите клавишу "SHIFT"+"1".
    Ok
    PRINT "Нажмите клавишу ";CHR$(34);"SHIFT";CHR$(34);"+";CHR$(34)
    ;"1";CHR$(34)
    Нажмите клавишу "SHIFT"+"1"
    Ok
-
    4) инициализация строкового массива B$(N) "псевдослучайными" словами.
    Ok
    20 Z=RND(-TIME)
@@ -427,7 +373,6 @@
                   X=ASC(CHR$(X))   и   Y$=CHR$(ASC(Y$)),  
 если только значение арифметического выражения X находится  в  допустимых
 пределах (напомним, что 0≤X≤255!), а  LEN(Y$)=1.
-
    5) присвоить  строковой переменной Y$ значение "yes", если  X≥1 и "no"
 - если X<1. Оператор условного перехода IF...THEN...ELSE... не применять!
    NEW
@@ -443,13 +388,11 @@
 печатаемыми "символами" (BS, SELECT, RETURN, клавиши управления курсором).
 
 
-
                      IV.1.7.  BIN$ - ф у н к ц и я
 
-
    BIN$-функция применяется для преобразования  целого  числа  в двоичную
 символьную строку. Ее общий вид:
-                                  BIN$(α)
+                                  BIN$(α)       ,
 где: BIN ("BINary"-"двоичный") - служебное слово;   
      α - арифметическое выражение.
    Вначале вычисляется значение  арифметического  выражения  α; результат
@@ -467,21 +410,17 @@
    Обозначим целую часть значения выражения α буквой N.
    Заметим, что для отрицательных N компьютер вычисляет значение  функции
 BIN$(N) по рекуррентной формуле: BIN$(N) = BIN$(65536+N) .
-
    П р и м е р ы:
    ─────────────
    1) BIN$(-1)     возвращает  "1111111111111111",
       BIN$(-32768) возвращает  "1000000000000000",
       BIN$(32768)  возвращает  "1000000000000000", 
       BIN$(65535)  возвращает  "1111111111111111".
-
    2) print VAL("&B"+BIN$(15))
        15
       Ok
-
    Наконец, при помощи функции  BIN$  можно "научить" компьютер  двоичной
 арифметике. Посмотрите, например, как работает следующая программа:
-
    3) Ok
       10 PRINT"Могу найти сумму двух двоичных чисел!"
       20 INPUT "Первое число, второе число";N1$,N2$
@@ -493,10 +432,8 @@
       Первое число, второе число? 1111111111111111,1
       Ответом является:0000000000000000 или 0 десятичное
       Ok
-
    Неизвестные Вам пока строковые функции RIGHT$ и STRING$ рассмотрены ни-
 же в разделах IV.2.3. и IV.2.4.
-
    4) среди простых чисел, не превосходящих  N , найти  такое, в двоичной
 записи которого максимальное число единиц.
    NEW
@@ -515,7 +452,6 @@
     1 1          ·7·111             ·17·10001
     3 11         ·11·1011           ·3··7
     5 101        ·13·1101           Ok
-
    5) выделить старший и младший байты двоичного числа A%
    NEW
    Ok
@@ -527,20 +463,17 @@
    run
    Введите число А% (не более 16 двоичных цифр)? &B1011110001010011
    10111100 01010011                               ▲
-   Ok                                              │ число отрицательное!
+   Ok                                              └ число отрицательное!
    run
    Введите число А% (не более 16 двоичных цифр)? &B0011110001010000
    00111100 01010000                               ▲
-   Ok                                              │ число положительное!
-
-
+   Ok                                              └ число положительное!
 
                      IV.1.8.  OCT$ - ф у н к ц и я
 
-
    OCT$-функция служит для преобразования числа в восьмеричную символьную
 строку. Ее общий вид:
-                                  OCT$(α)
+                                  OCT$(α)     ,
 где:  OCT ("OCTal-"-"восьмеричный-") - служебное слово;
       α - арифметическое выражение.
    Эта функция вычисляет значение арифметического  выражения α, преобразу-
@@ -551,12 +484,10 @@
 В противном случае результат преобразуется в символьную  строку, представ-
 ляющую его значение в восьмеричной  системе счисления.
    Максимальная длина строки-результата  OCT$() - 6  символов (6 байтов).
-
    П р и м е р.            Ok
    ───────────             print OCT$(&HFFFF)
                            177777
                            Ok
-
    Обозначим буквой N целую часть значения выражения α.
    Если N принадлежит диапазону [0,65535],то значение функции OCT$() нахо-
 дится компьютером без обращения к дополнительному коду, например:
@@ -574,7 +505,6 @@
                 ? OCT$(-32768)   сравните с   print OCT$(32768)
                 100000                        100000
                 Ok                            Ok
-
    З а д а ч а.  Попытайтесь научить компьютер "восьмеричной" арифметике.
    ───────────   Используйте для этой цели идею следующего фрагмента:
                   print VAL("&O"+OCT$(100))
@@ -582,14 +512,11 @@
                   Ok
    И, наконец ...
 
-
-
                         IV.1.9.  HEX$ - ф у н к ц и я
 
-
    HEX$-функция служит для преобразования целого числа  в  шестнадцатерич-
 ную символьную строку. Ее общий вид:
-                                  HEX$(α)
+                                  HEX$(α)     ,
 где: HEX ("HEXadecimal-"-"шестнадцатеричный-") - служебное слово;
      α - арифметическое выражение.
    Вначале вычисляется  N - целая часть  значения  арифметического выраже-
@@ -601,7 +528,7 @@
    Если целое число N находится на отрезке  [0,65535], то  преобразование
 элементарно:            HEX$(0)     возвращает "0"    ,
                         HEX$(65535) возвращает "FFFF" .
-   Однако, значение функции при отрицательных N,принадлежащих [-32768,-1],
+   Однако значение функции при отрицательных N, принадлежащих [-32768,-1],
 вычисляется компьютером с использованием дополнительного кода, т.е. с при-
 менением рекуррентной формулы:
                       HEX$(N)=HEX$(65536+N);
@@ -614,7 +541,6 @@
    ─────────────      ? VAL("&h"+HEX$(3))     ? VAL("&H"+HEX$(-10))
                        3                      -10
                       Ok                      Ok
-
    Существование функции  HEX$()  делает возможным  "обучение" компьютера
 шестнадцатеричной арифметике. Единственная трудность состоит в добавлении
 к числу нулей, стоящих в старших разрядах (если, конечно,это необходимо!).
@@ -664,6 +590,9 @@
 
 
 
+
+
+
                   IV.2.  ВСТРОЕННЫЕ  СТРОКОВЫЕ  ФУНКЦИИ
 
 
@@ -671,17 +600,19 @@
                           Космос с болью сочился над разбитой любовью,
                           Был из скрытных людей свет твой медленно изгнан,
                           И небо не спало.
-                    Избранные стихотворения компьютера RCA-301, поэма 929
+                                       Избранные стихотворения компьютера
+                                       RCA-301, поэма 929
 
 
    В этом разделе мы рассмотрим следующие встроенные функции: MID$, LEFT$,
 RIGHT$, STRING$, SPACE$.
 
-                      IV.2.1.  MID$ - ф у н к ц и я
 
 
+                      IV.2.1.  MID$ - ф у н к ц и я
+
       Oбщий вид MID$ - функции следующий: 
-                             MID$(α,m[,n])
+                             MID$(α,m[,n])      ,
 где: MID ("MIDdle"-"середина") - служебное слово;
      α - строковое выражение;
      m, n - арифметические выражения, целые части значений которых должны
@@ -693,9 +624,7 @@
 чать соответственно M и N.
    По умолчанию N равно количеству символов значения строкового выражения
 α от позиции M и до конца строки включительно.
-
    Рассмотрим два возможных случая.
-
    1. Функция  MID$  с л е в а  от  знака равенства в операторе присваива-
 ния LET.           ┌───────────────────────────────────┐
                    │       [LET] MID$(α,m[,n]) = β     │
@@ -709,12 +638,6 @@
 ражения α остаются без изменений (см. рис.1).
 
 
-
-
-
-
-
-
        1-й     2-й         М-й  (М+1)-й    (M+N-1)-й    LEN(α)-й
      символ  символ      символ  символ      символ      символ
        │       │           │       │           │           │
@@ -794,12 +717,10 @@
     ? MID$("КЛАВИАТУРА",3,4)            ? MID$("капрал"+"литр",4,5)
     АВИА      └──┘                      ралли      └──────┘
     Ok                                  Ok  
-
  3) Ok                               4) Ok          
     ? MID$("молоко"+"брат",5,5)         ? MID$("СОР У НОР",3,5)
     кобра       └──────┘                Р У Н     └───┘
     Ok                                  Ok
-
  5) Ok                               6) NEW
     10 input I,J:? MID$("234",I,J)      Ok
     run    run     run     run          1 Z$="123"
@@ -814,14 +735,12 @@
     ? 2,-1            ? 0,1             костяная нога
     Illegal function call in 10         Ok
     Ok
-
  7) определить третий символ в слове X$. 
     Ok
     input x$:z$=mid$(x$,3,1):print z$
     ? интеграл
     т
     Ok
-
    Если требуется определить  K-й символ в слове X$, то  программа  будет
 иметь следующий вид (разумеется, 1≤K≤LEN(X$)):
    NEW
@@ -833,13 +752,11 @@
    ? информатика,3       ? информатика,12
    ф                     Буквы с указанным номером в слове нет
    Оk                    Ok
-
    П р и м е р 8. Для получения числа, состоящего из двух младших цифр це-
    ─────────────  лого числа N, воспользуйтесь строкой:
                   10 X%=VAL(MID$(STR$(N),LEN(STR$(N))-1,2)) 
    Заметим,что Вы можете выполнить то же самое,используя функцию INT():
                     10 INPUT N:PRINT N-INT(N/100)*100
-
    П р и м е р 9. Написать  программу, определяющую, сколько раз слово Z$
    ─────────────  встречается в слове X$.
    NEW
@@ -852,7 +769,6 @@
    ? БАОБАБ,БА
     2
    Ok
-
    П р и м е р 10. Написать программу, заменяющую в слове X$ слово Z$  на
    ──────────────  слово Y$ той же длины.
    NEW
@@ -867,14 +783,11 @@
    ?? КИРПИЧНЫЙ
    ?? БАНАНОВЫЙ
    ДОМ БАНАНОВЫЙ
-   Оk
-
-
- Косо лети же, житель осок.   Я разуму уму заря,    Мечтатель! Летать чем?
-               В.Хлебников    Я иду с мечом судия.             С.Кирсанов
-                                     Г.Р.Державин 
-
-
+   Оk                                                 Я разуму  уму  заря,
+                                                      Я иду с мечом судия.
+                                                               Г.Державин
+                                                    Мечтатель! Летать чем?
+                                                               С.Кирсанов
    П р и м е р 11. Слова и фразы,переходящие в себя при "акустическом ото-
    ──────────────  бражении",  получили  название   п а л и н д р о м о в.
 Это слово греческого происхождения и означает "движущийся обратно", "обра-
@@ -892,7 +805,6 @@
    ? косолетижежителосок     ? мечтателлетатчем     ? я разуму уму заря
    Палиндром!                Палиндром!             Не палиндром!
    Ok                        Ok                     Ok
-
    Сравните результат действия функции MID$(A$,I,J),стоящей справа от зна-
 ка равенства в операторе присваивания, с  результатом операции  в ы р е з-
 к и:                            A[i:i+j-1] ,
@@ -911,8 +823,7 @@
 
                       IV.2.2.  LEFT$ - ф у н к ц и я
 
-
-   Общий вид функции:           LEFT$(α,n)
+   Общий вид функции:           LEFT$(α,n)   ,
 где:  LEFT ("left"-"левый") - служебное слово;
       α - строковое выражение;
       n - арифметическое выражение, целая часть  значения которого должна
@@ -921,7 +832,6 @@
 строкового выражения  α .
    LEFT$ - функция является"частным случаем" MID$- функции и через нее мо-
 жет быть определена так:   LEFT$(α,n) = MID$(α,1,n)                     .
-
    П р и м е р ы:                          
    ─────────────  
    1)  Ok                     3)  Ok
@@ -933,18 +843,14 @@
        ? 1234567890,6             ("def",2),1)                  
        123456123456               abd         
        Ok                         Ok   
-
    2)  Ok                     5)  Ok 
        ? LEFT$("деньги",0)        ? LEFT$("wap",-1)
                                   Illegal function call
        Ok                         Ok                    
 
-
-
                       IV.2.3.  RIGHT$ - ф у н к ц и я
 
-
-   Общий вид функции:           RIGHT$(α,n)
+   Общий вид функции:           RIGHT$(α,n)     ,
 где:  RIGHT ("right"-"правый") - служебное слово;
       α - строковое выражение;
       n - арифметическое выражение, целая часть значения  которого должна
@@ -953,16 +859,14 @@
 чения строкового выражения  α (в этом смысле функция  RIGHT$()  симметрич-
 на функции LEFT$()!).
    RIGHT$ - функция является частным случаем MID$ -функции и через нее мо-
-жет быть определена так:  RIGHT$(α,n) = MID$(α,L-n+1,n)
+жет быть определена так:  RIGHT$(α,n) = MID$(α,L-n+1,n)  ,
 где  L - длина значения строкового выражения α.
-
    П р и м е р ы: 
    ─────────────  
    1)  Ok                           2)  Ok
        ? RIGHT$("abcdgoldfish",8)       ? RIGHT$("гамбит",3)
        goldfish      └──────┘           бит          └─┘
        Ok                               Ok
-
    3)  Ok                           4)  Ok
        10 INPUT X$,N                    ? RIGHT$(LEFT$("рубa
        20 U$=MID$(X$,LEN(X$)-N+1)       йте!",6),4)
@@ -971,7 +875,6 @@
        ? 1234567890,4               5)  ? MID$("рубайте!",3,4)
        78907890                         байт      └──┘         
        Ok                               Ok  
-
    Заметим, что хотя функции LEFT$ и RIGHT$ являются  "частными случаями"
 функции MID$, их нельзя использовать с л е в а от символа присваивания в
 операторе LET!
@@ -984,7 +887,6 @@
    Кортик
    Syntax error in 2
    Ok
-
    П р и м е р 6. Образовать слово Y$, состоящее из первых N и последних
    ─────────────  К символов данного слова Х$.
    Первоначальный вариант программы выглядит так:
@@ -1016,7 +918,6 @@
    Строка 15 обеспечивает повторный запрос на ввод  исходных данных в том
 случае, когда K<0 или К> длины слова  Х$, или  N<0, или  N>длины слова X$
 (своеобразная "защита"программы от непредусмотренной исходной информации).
-
    П р и м е р 7. Написать программу перевода чисел, записанных  римскими
    ─────────────  цифрами, в числа, записанные арабскими цифрами.
    NEW
@@ -1033,7 +934,6 @@
     4           904          3691             1917           1812
    Ok          Ok           Ok               Ok             Ok
    А как насчет программы обратного перевода? Пожалуйста!
-
    П р и м е р 8. Написать программу перевода чисел, записанных арабскими
    ─────────────  цифрами, в числа, записанные римскими цифрами.
    NEW
@@ -1049,10 +949,8 @@
    Ok           Ok          Ok                Ok
 
 
-
                       IV.2.4.  STRING$ - ф у н к ц и я 
 
-
    Общий вид STRING$ -функции следующий:
                       STRING$(n,α)    или    STRING$(n,m) ,
 где:  STRING ("string"-"строка") - служебное слово;
@@ -1073,36 +971,29 @@
    Таким образом, с помощью STRING$ - функции можно назначать длину и про-
 водить инициализацию строковых переменных  пробелами. Приведем  несколько
 тривиальных примеров:
-
    1)  Ok
        Y$=STRING$(10,"*"):? LEN(Y$):? "#"+Y$+"FILE"
         10
        #**********FILE
        Ok
-
    2)  Ok
        print STRING$(10,52);STRING$(10,CHR$(52))
        44444444444444444444
        Ok
-
    3)  Ok
        A$=STRING$(5," "):MID$(A$,3,3)="Все!":? A$
        ··Все 
        Ok
-
    Если n=0, то функция STRING$ возвращает пустую строку (""), независимо
 от того, какие α или m Вы задали.
    В тех случаях, когда целые части значений арифметических выражений n и
 m находятся вне отрезка [0,255],на экране дисплея появляется сообщение об
 ошибке:                "Illegal  function  call"
         ("Н е д о п у с т и м ы й  в ы з о в  ф у н к ц и и").
-
-
-
+
                     IV.2.5.  SPACE$ - ф у н к ц и я
 
-
-   Общий вид функции:           SPACE$(n)
+   Общий вид функции:           SPACE$(n)     ,
 где:  SPACE ("space"-"пространство") - служебное слово;
       n - арифметическое выражение, целая часть значения которого  должна
 принадлежать отрезку [0,255].
@@ -1113,11 +1004,8 @@
    SPACE$-функция является частным случаем STRING$-функции и через нее мо-
 жет быть определена так:  SPACE$(n)=STRING$(n," ")
 
-
-
                         IV.2.6.  П р и м е р ы
 
-
    1) выделить из текста,являющегося значением строковой переменной T$,от-
 дельные слова (они отделены друг от друга  одним пробелом)  и записать их
 в строковый массив с именем W$. (Психологи утверждают, что  из минуты, за-
@@ -1139,13 +1027,8 @@
    run
    123 4 567
    123·····4·····567
-   Ok
-
-
-                                                  Елечвок енмяет ослог.
+   Ok                                             Елечвок енмяет ослог.
                                                   А.Вознесенский. Человек
-
-
    2) даны два слова X$ и Y$. Проверить, можно ли из символов, входящих в
 слово X$, составить слово Y$. Символы можно переставлять, и каждый символ
 можно использовать несколько раз!
@@ -1184,7 +1067,6 @@
        ? 12345432,1236        ? 1234554320,1022
        Нельзя!                Можно!
        Ok                     Ok
-
    4) число 41 обладает следующим свойством: 41²=1681,√16=4 и √81=9, т.е.
 числа 16 и 81 - точные квадраты; найти все натуральные числа, не превосхо-
 дящие N,и такие, что первые две и последние две цифры квадрата числа явля-
@@ -1201,7 +1083,6 @@
    Сколько чисел необходимо проверить? 100
    Интересующие Вас числа: 41
    Ok
-
    5) написать программу, которая заменяет часть слова  Z$  текста T$  на
 текст Y$ с сохранением одного пробела между словами.
    NEW
@@ -1240,13 +1121,12 @@
    ·································
    Мама очень любила Эмму
    Ok
-
    6) составьте программу, в результате работы которой выяснялось бы, мож-
 но ли переставить цифры десятичной записи числа K так,чтобы они  образовы-
 вали арифметическую или геометрическую прогрессию.
    NEW
    Ok
-   10 CLS:DIM K,M%,D%,Q,F$:INPUT"Введите нат. число";K
+   10 CLS:DIM K,M%,D%,Q,F$:INPUT"Введите натуральное число";K
    30 F$=STR$(K):M%=LEN(F$):DIM A(M%)
    40 FOR I=1 TO M%:A(I)=VAL(MID$(F$,I,1)):NEXT
    50 FOR I=2 TO M%-1:FOR J=I+1 TO M%
@@ -1273,7 +1153,6 @@
    Арифм.прогрессия есть!          Арифм.прогрессия есть!
    Геом.прогрессии нет             Геом.прогрессия есть!
    Ok                              Ok
-
    7) составить программу, которая m-кратно повторяет каждый символ в сло-
 ве X$.
    NEW
@@ -1289,7 +1168,6 @@
    Укажите число повторений символов? 2
    Вы этого хотели?  ккееррппккппрр
    Ok
-
    8) составить программу вывода всех натуральных чисел, меньших N, сумма
 квадратов цифр которых равна M.
    NEW
@@ -1303,7 +1181,6 @@
    ? 123,65
    ·18··47··74··81··108
    Ok
-
    9)  по данному натуральному N найдите наименьшее из чисел, имеющих сто-
 лько же и таких же цифр, что и N, если известно, что каждую цифру числа N
 можно использовать при записи один раз.
@@ -1324,7 +1201,6 @@
    В каком числе хотите перетрясти цифры? 112235799435213
    Не озоруй!
    В каком числе хотите перетрясти цифры? ...
-
    10) написать программу, устанавливающую, какие из натуральных чисел,не
 большие заданного натурального M, делятся на каждую свою цифру.
    10 DEFINT I,J,M:DEFSTR A:INPUT M
@@ -1335,15 +1211,14 @@
    ? 40
    ·1··2··3··4··5··6··7··8··9··11··12··15··22··24··33··36
    Ok
-
    11) определите,сколько цифр используется в записи натурального числа X
 только по одному разу.
     П е р в ы й  способ.               В т о р о й  способ
    10 INPUT X:X$=STR$(X)           10 INPUT"Введите число";X$
    20 K=0                          20 L=LEN(X$):P=L
    30 FOR J=2 TO LEN(X$)           30 FOR I=1 TO L:FOR J=1TO L
-   40 P=0                          40 IFMID$(X$,I,1)=MID$(X$,J
-   50 FOR I=2 TO LEN(X$)           ,1)ANDI<>J THEN P=P-1:NEXTI
+   40 P=0                          40 IFMID$(X$,I,1)=MID$(X$,J,1)
+   50 FOR I=2 TO LEN(X$)           ANDI<>J THEN P=P-1:NEXTI
    60 IF MID$(X$,J,1)=MID$(X$,I,1) ELSE NEXT J,I
    THEN P=P+1                      50 PRINT"Цифр,используемых 
    70 NEXTI                        1 раз:";P
@@ -1354,7 +1229,6 @@
    ? 45687345976
    K= 3
    Ok
-
    12) из каждого слова массива C$(N) слов вычеркнуть те символы, которые
 употребляются при написании каждого из слов массива.
    NEW
@@ -1394,7 +1268,6 @@
    Вот 3 слово:сон   - не правда ли?
    Вот 4 слово:ортфель   - не правда ли?
    Ok
-
    13) определить количество  р а з л и ч н ы х  букв,встречающихся в сло-
 ве A$ более одного раза.
    NEW
@@ -1413,8 +1286,8 @@
     1                1                3                  0
    Ok               Ok               Ok                 Ok
 
-              IV.3.  ФУНКЦИИ  ПОЛЬЗОВАТЕЛЯ . ОПЕРАТОР DEF FN
 
+              IV.3.  ФУНКЦИИ  ПОЛЬЗОВАТЕЛЯ . ОПЕРАТОР DEF FN
 
    Язык MSX-BASIC предоставляет  возможность  программисту (пользователю)
 о п р е д е л я т ь  в составляемой им программе одну или несколько  "соб-
@@ -1472,7 +1345,7 @@
                    Ok
    Напомним, что  и с п о л н я е м ы м  оператором  мы  называем оператор
 программы, определяющий конкретные действия, которые должны быть выполнены.
-   Оператор DEF FN может стоять в любом месте программной строки.Однако,он,
+   Оператор DEF FN может стоять в любом месте программной строки.Однако он,
 в отличие от оператора DATA,- и с п о л н я е м ы й оператор, т.е. функция
 пользователя должна быть определена до обращения к ней. Если же  обращение
 к функции пользователя произведено раньше ее определения оператором DEF FN,
@@ -1512,7 +1385,6 @@
    Другими словами, компьютер выполнит над значениями фактических аргумен-
 тов (параметров) все те действия,которые  оператор DEF FNα  выполняет над
 своими формальными аргументами.
-
    П р и м е р ы:
    ─────────────
    1)  Ok
@@ -1529,8 +1401,7 @@
        50 PRINT S:END
        run
         175
-       Ok
-                 Ф о р м а л ь н ы й  параметр X
+       Ok        Ф о р м а л ь н ы й  параметр X
     2) NEW        │  │
        Ok         ▼  ▼
        10 DEF FNA(X)=X*7
@@ -1559,7 +1430,6 @@
        ? 2,-3,5
         18
        Ok
-
    4)  NEW                               5)NEW
        Ok                                  Ok
        10 DEF FNS$(X$,K)=MID$(X$,K,1)      10 INPUT X:IF X>1 TH
@@ -1570,14 +1440,12 @@
        P$                t$                ? 2         ? -12
        Ok                Ok                 4          -1728
                                            Ok          Ok
-
    6)  10 'Функция FNODD$(N) помогает проверить,является ли целое число N
        нечетным:если значением функции является -1, то число N - нечетное,
        если же значением функции является 0, то число N - четное.
        20 DEF FNODD(N)=RIGHT$(BIN$(N),1)="1"
    Отметим, что можно определить 4 различные функции пользователя,имеющие
 одинаковое имя, но различающиеся по типам.
-
    7)  NEW
        Ok
        10 DEF FNQ%=1:DEF FNQ!=2:DEF FNQ=3:DEF FNQ$="4"
@@ -1594,9 +1462,7 @@
 кции (несоответствие типов формальных и фактических параметров при обраще-
 нии к функции пользователя ──▶ ошибка ──▶ обработка прерывания по  ошибке
 ("ловушка" ошибки) ──▶ изменение типа функции пользователя).
-
-   8)  NEW
-       Ok
+   8)  Ok
        5 ON ERROR GOTO 100
        10 DEF FNY(X)=X^3
        15 DEF FNY$(X$)=X$+"(Козьма Прутков)"
@@ -1614,9 +1480,7 @@
 м ы , то  DEFFN - один из нескольких операторов, которые  нельзя использо-
 вать в режиме прямого выполнения команд (это пример о п е р а т о р а ,ко-
 торый не является  к о м а н д о й !).
-
-   9)  Ok
-       DEF FNR(X)=X^5:PRINT FNR(2)
+   9)  DEF FNR(X)=X^5:PRINT FNR(2)
        Illegal direct
        Ok
    Сообщение об ошибке "Illegal direct" означает, что в качестве  команды
@@ -1628,11 +1492,8 @@
 использована неверно заданная функция, а не на ту строку , где  эта  функ-
 ция была определена!
 
-
-
                           IV.4.  ПОДПРОГРАММЫ
 
-
    Прежде всего отметим, что  п о д п р о г р а м м ы  -  это специальным
 образом оформленные группы программных строк. Подпрограммы бывают двух ти-
 пов:  с т а н д а р т н ы е   и   н е с т а н д а р т н ы е .
@@ -1657,7 +1518,7 @@
 ются на этих аксиомах.
    Общая форма записи оператора обращения  к подпрограмме (оператора вызо-
 ва подпрограммы) следующая:
-                                GOSUB n
+                                GOSUB n    ,
 где: GOSUB ("GO to SUBroutine"-"идти к подпрограмме") - служебное слово;
      n - номер первой строки подпрограммы, 0≤n≤65529.
    Разумеется, нежелательно, чтобы строка с номером  n находилась  внутри
@@ -1667,16 +1528,18 @@
                          "Undefined line number"
            ("Н е   о п р е д е л е н   н о м е р   с т р о к и").
    Подпрограмма, как правило (!), завершается оператором
-                                 RETURN
-где  RETURN ("return"-"возврат") - служебное слово.
+                                 RETURN [m]  ,
+где: 1) RETURN ("return"-"возврат") - служебное слово;
+     2) m - номер существующей программной строки, которой должно быть пе-
+редано управление после выполнения подпрограммы.
    Оператор GOSUB n используется для вызова подпрограммы - группы операто-
 ров, начинающихся программной строкой с номером  n  и заканчивающихся опе-
 ратором RETURN. Подпрограмма  может начинаться с комментария и находиться
 в любом месте Вашей программы.
    Главной особенностью оператора GOSUB является то, что  оператор RETURN
-возвращает управление оператору,стоящему за последним выполненным операто-
-ром GOSUB. Заметим,что оператор, которому возвращается  управление, может
-находиться не на следующей, а на той же программной строке!
+(без параметра m) возвращает управление оператору, стоящему  за последним
+выполненным оператором GOSUB. Заметим,что оператор, которому возвращается
+управление, может находиться на той же программной строке, что и GOSUB !
    Приведем пример:  
    Ok                            Ok           ┌──────────────────┐
    100 X=2                       100 X=2      ▼                  │
@@ -1712,7 +1575,7 @@
    Образно говоря, переменные,имеющие одно и то же имя в основной (вызыва-
 ющей) программе и подпрограмме не "однофамильцы", а одно и то же лицо! 
    При вызове подпрограммы значения переменных в основной программе не"за-
-мораживается", а могут быть изменены операторами подпрограммы! Без  "замо-
+мораживаются", а могут быть изменены операторами подпрограммы! Без  "замо-
 раживания" то и дело происходят пренеприятнейшие вещи.
    Представьте себе,что Вы подарили своему товарищу очень ценную для него
 подпрограмму и объяснили, как ею пользоваться. Разумеется,Вашему товарищу
@@ -1744,7 +1607,6 @@
    run
    ·7··7.5··7
    Ok
-
    Наиболее распространенной ошибкой при использовании подпрограмм являет-
 ся их неполное отделение от основной программы. Основными способами  защи-
 ты от указанной ошибки являются:
@@ -1777,11 +1639,10 @@
    Например,    50 RETURN '──▶  или  50 RETURN ──▶  .
    Поговорим теперь  о  совместном  использовании  операторов  FOR...NEXT
 и GOSUB n.
-   Внутри цикла использовать оператор GOSUB, м о ж н о, но оператор  NEXT
+   Внутри цикла использовать оператор GOSUB  м о ж н о, но оператор  NEXT
 должен быть выполнен только  п о с л е  выполнения оператора RETURN.
    В противном случае последует сообщение:
               "NEXT without FOR"     ("NEXT  б е з  FOR").
-
    П р и м е р.
    ───────────
    NEW
@@ -1792,7 +1653,6 @@
    ? 2,6                         ? 0,6
    NEXT without FOR in 100       ·1··2··3··4··5··6
    Ok                            Ok
-
    С другой стороны, если цикл FOR...NEXT используется в подпрограмме, то
 оператор RETURN, находящийся в цикле FOR...NEXT, позволяет выйти из цикла
 и вернуться в основную программу. Это наводит на мысль,что наиболее эффек-
@@ -1802,7 +1662,6 @@
    Однако учтите, что в момент выполнения оператора RETURN [k] любой неза-
 конченный цикл FOR ... NEXT в подпрограмме заканчивается и часть  стеково-
 го пространства, которое он (цикл) занимал, освобождается!
-
    П р и м е р. Вывести на экран дисплея первое нечетное число,встретивше-
    ───────────  еся в целочисленном массиве A(K).
    NEW
@@ -1816,7 +1675,6 @@
    ? 3        ? 5
     1          1
    Ok         Ok
-
    При многократном выполнении выхода из подпрограмм с помощью операторов
 GOTO, ON GOTO или IF...THEN...ELSE (вместо оператора RETURN) в конце  кон-
 цов на экране может появиться  сообщение об ошибке:
@@ -1836,17 +1694,15 @@
 ве подпрограммы, так что в результате размер стека может превысить величи-
 ну отведенного ему участка памяти. В итоге программа прекращает работу, и
 выдается сообщение об ошибке.
-
    П р и м е р.  10 GOSUB 20:END
    ───────────   20 FOR I=1 TO 1:K=K+1:GOTO 10:NEXTI:RETURN
                  run                    а теперь... print K
-                 Out of memory in 100               ·894
+                 Out of memory in 10                ·894
                  Ok                                 Ok
    В программе может быть несколько операторов RETURN, относящихся к одно-
 му оператору GOSUB n . Отметим,что наличие оператора  RETURN  в некотором
 месте подпрограммы еще не означает фактического окончания подпрограммы  в
 данном месте.
-
    П р и м е р. Написать программу,вычисляющую значение функции y=│ x+x²│
    ───────────  в точке x=A(не применяя функции ABS()).
    NEW
@@ -1859,8 +1715,8 @@
     12
    Ok
    Подпрограмма может, в свою очередь, вызывать другую подпрограмму, та -
-другую и так далее. Глубина вложения  (степень вложения) подпрограмм огра-
-ничивается лишь размерами стека.
+следующую и так далее. Глубина вложения (степень вложения) подпрограмм ог-
+раничивается лишь размерами стека.
    Наглядно  это  можно  представить  себе  следующим образом. Пусть  Вас
 из Куйбышева послали в Москву на повышение  квалификации, а оттуда еще  в
 Ленинград на курсы. По окончании этих курсов Вы возвращаетесь в Москву,за-
@@ -1916,11 +1772,10 @@
     2
    Ok
 
-                        IV.4.1.  П р и м е р ы
+                             П р и м е р ы
 
-
-   П р и м е р 1.  Написать программу, вычисления  числа  сочетаний из  m
-   ─────────────   по n по формуле:
+   П р и м е р 1.  Написать программу  вычисления  числа  сочетаний из  m
+   ─────────────   элементов по n , используя формулу
                             n       m!
                            С  =  ──────── , (m≥n).
                             m    n!(m-n)!
@@ -1941,7 +1796,6 @@
    Введите значения m,n? 6,3
    Число сочетаний из M= 6 по N= 3 равно 20
    Ok
-
    Заметим, что оператор GOSUB может оказаться полезным в  качестве коман-
 ды прямого режима. Если Ваша программа состоит из подпрограмм, которые Вы
 хотите проверить, то, используя команду GOSUB в прямом режиме,можно войти
@@ -1954,13 +1808,9 @@
                         print F
                          24
                         Ok
-
-
                             Ибо это недостойно совершенства человеческого,
                             подобно рабам тратить часы на вычисления.
-                                                              Г.В.Лейбниц
-
-
+                                                                Г.Лейбниц
    П р и м е р 2.  Составить программу, которая позволяет методом половин-
    ─────────────   ного деления (дихотомии) на отрезке [A,B]  с точностью
 E определить какой-либо (!) вещественный  корень уравнения   F(x)=0,  где
@@ -1986,7 +1836,6 @@
    ? 1,3,.00001
    Корень···1.27163·точность·1Е-05
    Оk
-
    П р и м е р 3. Если у Вас есть знакомый художник,  попросите его разде-
    ─────────────  лить произвольный отрезок на две неравные части. Возмож-
 но он сделает это в золотом отношении, если его чувство меры воспитано на
@@ -2017,7 +1866,6 @@
    Y мин=-10.999971821564 при x=
     3.999996477694
    Ok
-
    П р и м е р 4.   Вычислить    π    
    ─────────────               1 ⎧ ┌ sin(10·x)┐6
                                -·│ │──────────│ dx
@@ -2045,7 +1893,6 @@
    Количество точек? 250              Количество точек? 500
    Интеграл =  55251.99567425         Интеграл =  55251.995674258
    Ok                                 Ok
-
    П р и м е р 5. Написать программу,  осуществляющую  лексикографическое
    ─────────────  упорядочение (расположение в алфавитном порядке)  масси-
 ва фамилий на русском языке (после фамилий можно указывать инициалы,напри-
@@ -2142,7 +1989,6 @@
    ·1··2··3··5··7··11··13··17··31··37··71··73··79··97
    Надеюсь, Вы остались довольны?
    Ok
-
    П р и м е р 7.
    ─────────────
    10'****************************************************
@@ -2184,21 +2030,20 @@
    Ok
 
 
+
                                        У попа была собака, он ее любил.
                                        Она съела кусок мяса - он ее убил!
                                        Убил и закопал, и надпись написал:
                                        "У попа была собака, он ее любил. 
                                        Она съела кусок мяса - ..."
                                           Из русского народного фольклора
-
-
    Допустимо использование рекурсивных подпрограмм.
    Р е к у р с и е й  называется обращение подпрограммы (функции) к самой
 себе непосредственно или посредством других подпрограмм. Такие  программы
 (функции) называются  р е к у р с и в н ы м и. Само слово "рекурсия" озна-
 чает "возвращение" (лат. "recursio").
    В программировании различают два типа рекурсии - рекурсивное  определе-
-ние или  п р я м у ю  рекурсию  и  рекурсивное  использование или  к о с -
+ние, или  п р я м у ю  рекурсию  и рекурсивное использование, или  к о с -
 в е н н у ю  рекурсию.
    Рекурсивное использование - это способ описания процесса через  подпро-
 цессы, идентичные основному процессу, а рекурсивное определение -  способ
@@ -2233,7 +2078,6 @@
 программ, несмотря на то, что коварство рекурсии проявляется в том,что бы-
 вает довольно трудно заметить дефект программы или алгоритма,а в цикличес-
 ком процессе все на виду!
-
    П р и м е р 2.  Пользуясь рекуррентной формулой
    ─────────────         0       m   n-m+1    m-1
                         C = 1 ; C = ────── · C                        ,(∗)
@@ -2257,7 +2101,6 @@
       ? 232,231   ? 233,232     ? 4080,4079           print m
        232         0   ◀── ?!   Out of memory in 100   2
       Ok          Ok            Ok                    Ok
-
    П р и м е р 3 [6].
    ─────────────
    NEW
@@ -2287,14 +2130,11 @@
 туацию, при которой первая подпрограмма вызывает вторую, а та в свою  оче-
 редь вызывает первую!
 
-
-
                       IV.5.  ОПЕРАТОР  ON GOSUB
 
-
    Кроме оператора перехода на подпрограмму в  MSX-BASIC есть оператор вы-
 бора подпрограмм (оператор-"переключатель").
-   Его общий вид:        ON β GOSUB n1,n2,...nk
+   Его общий вид:        ON β GOSUB n1,n2,...nk   ,
 где: ON("на"),GOSUB("to GO to SUBroutine"-"идти к подпрограмме") - служеб-
      ные слова;
      β - арифметическое выражение;
@@ -2309,6 +2149,7 @@
 
    Если p<0, то компьютер выдает сообщение об ошибке:
                        "Illegal function call".
+
    П р и м е р 1.  
    ─────────────
    NEW
@@ -2316,8 +2157,8 @@
    20 INPUT "Ваш выбор (1-3)";CH
    27 ON CH GOSUB 31,32,33:END
    31 PRINT "1":RETURN'Попадаем сюда, если CH=1
-   32 PRINT "2"'RETURN'Попадаем сюда, если CH=2
-   33 PRINT "3"'RETURN'Попадаем сюда, если CH=3
+   32 PRINT "2": RETURN    'Попадаем сюда, если CH=2
+   33 PRINT "3": RETURN    'Попадаем сюда, если CH=3
    run
    Ваш выбор (1-3)? 2
    2
@@ -2345,25 +2186,30 @@
    В ы в о д ы [8].  При применении подпрограмм BASIC придерживайтесь сле-
    ───────────────   дующих правил:
    1. Четко обозначайте начало и конец каждой подпрограммы. Если это  воз-
-можно, выделяте их путем отступа операторов вправо.
+можно, выделяйте их путем отступа операторов вправо.
+
    2. Никогда не пользуйтесь оператором GOTO для входа  в  подпрограмму и
 для выхода из нее. Каждую подпрограмму надо рассматривать как независимый
 логически завершенный  м о д у л ь .
+
    3. Имейте под рукой список глобальных входных переменных и выходных ре-
 зультатов каждой подпрограммы. Лучше всего оформить  его  комментариями к
 программе с помощью операторов REM .
+
    4. Обязательно убедитесь, что в подпрограмме не изменяются значения та-
 ких внешних переменных, как счетчики циклов. Если это возможно, в  каждой
 подпрограмме вводите свой принцип именования внутренних переменных.
-   5. В отличии от функций, подпрограммы не появляются в программе  до то-
+
+   5. В отличие от функций  подпрограммы не появляются в программе  до то-
 го, как ими будут пользоваться, поэтому полезно группировать подпрограммы
 вместе после оператора END, указанного в конце основной программы.
+\page
+                   IV.6.  Д о п о л н е н и е 1 [77]
 
-   Д о п о л н е н и е 1 [77].  Программа позволяет  умножить  два  числа,
-   ──────────────────────────   причем каждое из них  может  иметь  "л ю -
-б о е" количество цифр при следующих ограничениях:  в произведении должно
-содержаться не более 765 цифр и длина каждого из чисел должна быть ограни-
-чена возможной длиной строки.
+   Программа позволяет умножить два числа, причем  каждое  из  них  может
+иметь  "л ю б о е" количество цифр при следующих ограничениях: в  произве-
+дении должно содержаться не более 765 цифр,и длина каждого из чисел  долж-
+на быть ограничена возможной длиной строки.
    В заключение отметим, что приведенная программа  работает  неправильно
 либо когда одно из введенных чисел меньше 10, либо когда их  произведение
 меньше 1000. Безусловно имеет смысл сделать программу "защищенной" в этом
@@ -2410,6 +2256,7 @@
    print 12345678*987654321
     1.2193262222375E+16
    Ok
+\page
    run
    Точное произведение целых чисел
    Введите первое число: 11111111111111111111
@@ -2418,12 +2265,18 @@
    , 74, 74, 74, 74, 74, 73,333,333,333,33
    3,333,333,325,925,925,925,925,925,926
    Ok
+
    print 11111111111111111111*6666666666666666666666666666666666666666
     7.4074074074074E+58
    Ok
 
-   Д о п о л н е н и е  2[90].  Нахождение факториалов "огромных" чисел.
-   ──────────────────────────
+
+
+
+                   IV.7.  Д о п о л н е н и е  2 [90]
+
+   Программа, позволяющая находить факториалы "огромных" чисел ( >1).
+
    10 DIM A(100):PRINT"Введите число N":INPUT N:A(1)=1:J=1
    60 FOR I=2 TO N
    80    P=0
@@ -2443,6 +2296,7 @@
    ? 23
     23!=25852016738884976640000
    Ok
+
    run
    Введите число N
    ? 50
msx/basic_dialogue_programming_language/files/diff_004.txt · Последние изменения: 2022-09-10 12:54 — GreyWolf