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

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


msx:basic_dialogue_programming_language:files:diff_008

Глава VIII

@@ -1,14 +1,11 @@
-c1E
+\/d
 Г Л А В А  VIII.   НЕКОТОРЫЕ ВОПРОСЫ МЕТОДОЛОГИИ ОТЛАДКИ ПРОГРАММ
-
-
+\/d-
 
                                  Я услышал и забыл.
                                          Я увидел и запомнил.
                                                     Я сделал и понял!
-                                                         Гленн М. Клейман.
-
-
+                                                                Г.Клейман
 О т л а д к а = О б н а р у ж е н и е  ошибки + ее  И с п р а в л е н и е
                 └─────────────▲─────────────┘
                               │
@@ -24,17 +21,13 @@
        │                программы       ошибки               │
        └─────────────────────────────────────────────────────┘
 
-
                  VIII.1  ОШИБКИ  ПРИ  ПРОГРАММИРОВАНИИ
 
-
-   Какую бы программу вы ни писали,      Какую бы  программу вы ни писали,
-   любая ошибка, которая  может  в       любая ошибка, которая не может в
-   нее вкрасться, - вкрадется!           нее вкрасться, - тоже вкрадется!
-                         Следствие                     Еще одно следствие
-           первого закона Чизхолма                первого закона Чизхолма
-
-
+                                          Какую бы программу вы ни писали,
+                                          любая ошибка, которая  может  в
+                                          нее вкрасться, - вкрадется!
+                                                        Следствие первого
+                                                        закона Чизхолма
    Будем говорить, что "в программе имеется  о ш и б к а, если ее выполне-
 ние не оправдывает ожиданий пользователя" [50, 51].
    Напомним, что  при решении  задач с использованием компьютера под  о т-
@@ -119,6 +112,7 @@
 ных аппаратными средствами, составляет ничтожный процент.
    Так, согласно одному из определений "ПЭВМ  - это вычислительная машина
 с надежностью военной аппаратуры и ценой изделия бытовой электроники"[58].
+
 ┌───────────────────────────────────────────────────────────────────────┐
 │Таким образом,в ошибочных ответах компьютера виноваты,как правило,люди!│
 └───────────────────────────────────────────────────────────────────────┘
@@ -147,7 +141,7 @@
 ся выявить на этапе ручной проверки,  потому что  при машинном выполнении 
 программы они могут "исчезнуть" лишь для того,чтобы снова появиться позже.
    В некотором смысле достаточно сложная программа  напоминает  карточный
-домик: тот факт что домик стоит, еще не гарантирует, что он не  рассыплет-
+домик: тот факт, что домик стоит, еще не гарантирует, что он не рассыплет-
 ся в следующее мгновение. Программы опровергают опыт  нашей жизни. Обычно,
 если что-то работает, то оно работает! Если новый стул  выдержал  Вас, он
 выдержит Вас и в следующий раз; если сошедший с конвейера автомобиль  про-
@@ -178,7 +172,7 @@
 ных в массив, когда значение индекса вышло за допустимые пределы. Если,на-
 пример, Вы присваиваете начальное значение элементу массива T(J), а значе-
 ние индекса J должно находиться в границах от 1 до 100, но J случайно ока-
-залось в какой-то момент больше 100, либо меньше 1,то Вы, разумеется,полу-
+залось в какой-то момент больше 100  либо меньше 1,то Вы, разумеется,полу-
 чите не тот результат, который хотели. Если Вы часто совершаете ошибку та-
 кого рода, Вам полезно написать несколько операторов, которые будут прове-
 рять значения каждого индекса перед его использованием  и фиксировать его
@@ -196,16 +190,11 @@
     │                           Принцип Компетентности по Питеру    │
     └───────────────────────────────────────────────────────────────┘
 
-
-
       VIII.2.  НЕКОТОРЫЕ КЛАССИЧЕСКИЕ ПРИЕМЫ ТЕСТИРОВАНИЯ ПРОГРАММ
 
-
                               Самая коварная уловка дьявола состоит в том, 
                               чтобы убедить нас, будто его не существует.
-                                                             Шарль Бодлер
-
-
+                                                                 Ш.Бодлер
    Известно, что в процессе разработки программы работы по доказательству
 (д е м о н с т р а ц и и)  правильности  разрабатываемой  программы равно-
 значны работам по ее изготовлению (алгоритмизации и написанию), что можно
@@ -220,16 +209,12 @@
 ся делом несравнимо более легким, чем  разработка  н а с т о я щ е й  про-
 граммы (особенно если программист и не думает о предстоящей отладке!).
 
-
-
                 VIII.2.1.  Р у ч н а я  п р о в е р к а
 
-
                                 Если вам кажется, что ситуация улучшается,
                                 значит, вы чего-то не заметили!
                                  Второе следствие второго закона Чизхолма
 
-
    Отладку любой программы никогда не следует начинать с прогона  програм-
 мы на компьютере, т.к. экспериментально установлено, что "ручными" метода-
 ми (т.е. без помощи компьютера) удается обнаруживать от 30 до 70% програм-
@@ -312,16 +297,12 @@
 мом программой на печать или на экран дисплея?
 
 
-
   VIII.2.2.  Р у ч н а я  п р о к р у т к а.   М е т о д и ч е с к и е
                 у к а з а н и я  п о  е е  п р о в е д е н и ю
 
-
                              Программисту не всегда  нужна ЭВМ, иногда по-
                              лезнее удобное кресло и спокойная обстановка.
                                                           А.Архангельский
-
-
     После окончания ручной проверки проведите  несколько раз  р у ч н у ю
 п р о к р у т к у ("walkthrough" - "сквозной контроль") отдельных  частей
 Вашей программы. Иногда ее называют "с у х о й" п р о к р у т к о й ("dry
@@ -364,9 +345,9 @@
 на обычную ручную проверку и возвращаться на режим прокрутки  при  начале
 проверки логически сложных блоков.
    Исходные данные, влияющие на логику программы,  должны выбираться  так,
-чтобы минимизировать прокрутку программы.Но,с другой стороны, данные долж-
-ны быть такими, чтобы в прокрутку вовлеклось большинство ветвей программы
-и чтобы прокрутка отразила типичный характер ее работы.
+чтобы минимизировать прокрутку программы. Но данные должны быть и  такими,
+чтобы в прокрутку вовлеклось большинство ветвей программы и чтобы прокрут-
+ка отразила типичный характер ее работы.
    Кроме того, в ходе прокрутки  необходимо  проверить работу программы и
 для особых случаев (например, для экстремальных значений параметров). 
    Многократные повторные прокрутки какого-либо  участка  программы можно
@@ -376,9 +357,11 @@
 с л е д н и х  одного-двух (проверка выхода из цикла).
    Прокрутка бывает необходимой и в том случае, когда программист не в со-
 стоянии вполне четко представить себе  логику проверяемой  программы, осо-
-бенно   ┌────────────────────────────────────────────────────────────┐
+бенно
+        ┌────────────────────────────────────────────────────────────┐
         │   если программа написана не им и нет хорошего описания    │ .
         └────────────────────────────────────────────────────────────┘
+
    При первом же пробном запуске  вычислительной машины  МЭСМ  (первая  в 
 СССР ЭВМ, 1951 г.) произошел показательный случай.  Первую  программу для 
 МЭСМ перед запуском прокрутили вручную два квалифицированных математика и 
@@ -405,7 +388,7 @@
    │   1987  │    ша прямоугольная.
    └─────────┘
    Если доски нет, ручную прокрутку можно вести и на бумаге. При этом таб-
-лицу имен (блоков) приходится изображать немножко по-другому  потому, что
+лицу имен (блоков) приходится изображать немножко по-другому, потому  что
 стирать старые значения на бумаге неудобно, лучше их зачеркивать, а рядом
 писать новые значения.
    Ручную прокрутку  лучше всего проводить  в д в о е м  с  приятелем. Вы-
@@ -422,9 +405,10 @@
 сматриваемой программы,что невозможно без глубокого и крепкого знания его
 в течение всего длительного времени проведения отладки.
 
-        VIII.2.3.  М е т о д  к о н т р о л ь н ы х  т е с т о в 
 
 
+        VIII.2.3.  М е т о д  к о н т р о л ь н ы х  т е с т о в 
+
                       Никогда не берите на корабль два хронометра, берите
                       один или, если есть возможность, три, но не два.
                                Наставление мореплавателям начала ХIХ века
@@ -436,7 +420,6 @@
                       когда нельзя быть уверенным,что может быть  найдена
                       и первая ошибка.          Р.Лингер, Х.Миллс, Б.Уитт
 
-
    Как бы ни была тщательно проверена и "прокручена" программа  за столом,
 решающим этапом, устанавливающим ее пригодность для работы, является конт-
 роль программы по результатам ее выполнения на компьютере. 
@@ -540,18 +523,15 @@
   └──────────────────────────────────────────────────────────────────┘
 
 
-
        VIII.2.3.1.  С т р а т е г и я   т е с т и р о в а н и я
 
-
                                Вы должны радоваться, что мост разрушился,-
                                я планировал построить еще  тринадцать  по
                                тому же проекту.
-                                     Замечание, приписываемое Х.К.Брюнелю,
+                                     Замечание, приписываемое   Х.Брюнелю,
                                      адресованное дирекции Большой  запад-
                                      ной железной дороги
 
-
    Перечислим основные принципы тестирования [50]. Эти принципы интересны
 тем, что в основном они интуитивно ясны, но в то же время на них часто не
 обращают должного внимания.
@@ -582,7 +562,7 @@
 ные данные, обладают большей обнаруживающей способностью, чем тесты, соот-
 ветствующие корректным входным данным.
    5. Необходимо проверять не только, делает ли программа то,для чего она
-предназначена, но и не делает ли она того, что не должна делать.
+предназначена, но и ни делает ли она то, что не должна делать.
    Обязательно проверяйте программу на нежелательные побочные эффекты.
    6. Не следует выбрасывать тесты, даже  если  программа уже не нужна.
 Необходимость в использованных тестах наиболее часто возникает в  интерак-
@@ -626,6 +606,7 @@
   │  У д а ч н ы м  является тест, который обнаруживает еще не        │
   │                       выявленную ошибку.                          │
   └───────────────────────────────────────────────────────────────────┘
+
    "На закуску" рекомендуем выполнить следующий простой тест.Задача состо-
 ит в том, чтобы проверить программу,которая по трем заданным  числам печа-
 тает сообщение о том, является ли треугольник со сторонами, длины которых
@@ -636,11 +617,11 @@
    Приступайте к работе...
    Следующий шаг состоит в оценке эффективности Вашей проверки. Оказывает-
 ся, что программу труднее написать, чем это могло показаться вначале.Были
-изучены различные версии данной программы и составлен список общих ошибок.
+изучены различные версии данной программы,и составлен список общих ошибок.
 Оцените Ваш набор тестов, попытавшись с его помощью ответить  на приведен-
 ные ниже вопросы. За каждый ответ "да" присуждается одно очко.
    1. Составили ли Вы тест, который представляет правильный неравносторон-
-ний треугольник? (Заметим, что ответ "да" на тесты,со значениями 1,2,3, и
+ний треугольник? (Заметим, что ответ "да" на тесты со значениями 1,2,3, и
 2,5,10 не обоснован, т.к. не существует  треугольников, имеющих такие сто-
 роны.)
    2. Составили ли Вы тест,который представляет правильный равносторонний
@@ -667,8 +648,8 @@
 рых Вами испытаны все три перестановки (например: 1,2,4; 1,4,2 и 4,1,2)?
    11. Составили ли Вы тест, в котором все стороны треугольника имеют дли-
 ну, равную нулю (т.е. 0,0,0)?
-   12. Составили ли Вы по крайней мере один тест,содержащий нецелые значе-
-ния?
+   12. Составили ли Вы, по крайней мере, один тест,содержащий нецелые зна-
+чения?
    13. Составили ли Вы хотя бы один тест,  содержащий неправильное  число
 значений (например, два, а не три целых числа)?
    Конечно, нет гарантий, что с помощью набора тестов,  который удовлетво-
@@ -680,17 +661,12 @@
    Выполненное упражнение показывает, что тестирование  даже  тривиальных
 программ, подобных приведенной, - не простая задача.
 
-
-
          VIII.2.3.2.   Т а к т и к а   т е с т и р о в а н и я
 
-
                               Перевести программу из хорошего состояния в
                               отличное неизмеримо труднее, чем из плохого
                               в удовлетворительное.
                                                  Программистский фольклор
-
-
    Поговорим о методах тестирования.
    При  н е у п о р я д о ч е н н о м  тестировании  ("smoke test" - "гру-
 бая проверка работоспособности простым запуском",  "дымовой тест")  исход-
@@ -735,7 +711,7 @@
 мой программы, так и ограниченность человеческих возможностей при проведе-
 нии такого доказательства [49].
    П р о х о д  у ч а с т к о в. Каждый линейный участок программы должен
-быть обязательно  пройден  при  выполнении  по крайней мере, одного теста.
+быть обязательно  пройден  при  выполнении, по крайней мере, одного теста.
 Очевидно, что в противном случае никакой гарантии  в  правильности работы
 всей программы дать будет нельзя.
    В том случае,  когда выполнение некоторого участка программы меняет по-
@@ -751,7 +727,7 @@
 ты, с тем, чтобы можно было действительно удостовериться  в  правильности 
 работы блока.
    Дело в том, что величины, входящие в проверяемое арифметическое выраже-
-ние,  в зависимости от соотношения их значений  и  характера производимых
+ние  в  зависимости от соотношения их значений  и  характера производимых
 над ними операций, вносят различный вклад в результат. Поэтому  может ока-
 заться, что неправильно запрограммированное выражение для некоторых тесто-
 вых значений величин, входящих в него, будет иметь  я к о б ы  правильное
@@ -788,15 +764,14 @@
 ленными или такими, чтобы при проверке выражений некоторые  их  слагаемые,
 уже проверенные ранее, обращались в нуль.
    Д о с т о в е р н о с т ь  э т а л о н о в.  Нужно обратить внимание и 
-на достоверность процесса получения эталонных результатов. По возможности,
-они должны вычисляться не самим программистом, а кем-то другим, с тем,что-
+на достоверность процесса получения эталонных результатов. По возможности
+они должны вычисляться не самим программистом, а кем-то другим, с тем что-
 бы одни и те же ошибки в понимании задания не проникли и в программу, и в
 эталонные результаты. Если тесты готовит сам программист, то эталоны  нуж-
 но вычислять до получения на компьютере соответствующих результатов.В про-
 тивном случае имеется  опасность  невольной подгонки вычисляемых значений
 под желаемые, полученные ранее на компьютере. В качестве эталонных резуль-
 татов часто используют и данные,полученные при ручной прокрутке программы.
-
    П л а н и р о в а н и е.
   ┌───────────────────────────────────────────────────────────────────┐
   │   При отсутствии планового подхода тестирование обычно сводится   │
@@ -925,16 +900,11 @@
    Для устранения такого рода недоразумений  нужно тщательно проверять на-
 бор тестов ("тестировать" тесты). 
 
-
-
                  VIII.2.3.3.   Т и п ы  т е с т о в
 
-
                              О несчастном  случае мой подзащитный впервые
                              узнал лишь тогда,когда этот случай произошел.
                                                          Из речи адвоката
-
-
    О с н о в н ы м   т е с т о м   мы будем называть тест, проверяющий ос-
 новные функциональные возможности программы.  Однако существует опасность,
 что после успешного окончания  основного тестирования  "на радостях" обыч-
@@ -944,8 +914,8 @@
 применить следуюшие типы тестов. 
    В ы р о ж д е н н ы й  тест.  Этот тест затрагивает  работу  отлаживае-
 мой программы в самой минимальной степени. Обычно тест служит  для провер-
-ки правильности выполнения самых внешних функций программы,  например, об-
-ращения к ней и выхода из нее.
+ки правильности выполнения самых внешних функций программы, например обра-
+щения к ней и выхода из нее.
    Т е с т  г р а н и ч н ы х  з н а ч е н и й, или  "с т р е с с о в ы й
 тест"("high-low bias checking","twin check"). Тест  проверяет  работу про-
 граммы для граничных значений параметров, определяющих вычислительный про-
@@ -957,14 +927,14 @@
    β) сортируемый массив содержит только один элемент;
    γ) все элементы в сортируемом массиве одинаковы;
    δ) массив уже отсортирован.
-   Лоуренс Питер приводит следующий поучительный пример. Компьютер  одной 
-компании по страхованию автомобилей выслал проживающему в Сент-Луисе  кли-
-енту счет на сумму 0.00 долларов. Когда же компьютер направил ему "послед-
-нее уведомление" с угрозой расторгнуть договор, этот челевек обратился за
-помощью к своему финансовому агенту. Тот пришел к выводу, что лучший  спо-
-соб уладить дело - отправить компьютеру чек на  0.00  долларов. Это  было
-сделано, и в ответ пришло подтверждение с благодарностью и заверением,что
-договор остается в силе!
+   Л.Питер приводит следующий поучительный пример. Компьютер  одной компа-
+нии по страхованию автомобилей выслал проживающему  в Сент-Луисе  клиенту
+счет на сумму 0.00 долларов. Когда  же  компьютер направил ему "последнее
+уведомление" с угрозой расторгнуть договор, этот челевек обратился  за по-
+мощью к своему финансовому агенту. Тот пришел к выводу, что лучший способ
+уладить дело - отправить компьютеру чек на  0.00  долларов. Это  было сде-
+лано, и в ответ пришло подтверждение с благодарностью и заверением,что до-
+говор остается в силе!
    А в а р и й н ы й  т е с т. Тест проверяет реакцию программы на возник-
 новение разного рода аварийных ситуаций в программе,  в  частности вызван-
 ных неправильными исходными данными, то есть  проверяется диагностика, вы-
@@ -1035,16 +1005,13 @@
 маются".
 
 
-
        VIII.3.  М е т о д ы   л о к а л и з а ц и и   о ш и б о к
 
-
                                Если Вы думаете, что разработка и кодирова-
                                ние программы - вещь трудная, то Вы еще ни-
                                чего не видели.
                                                        Популярный афоризм
 
-
    После того  как установлено, что в программе или в конкретном ее блоке
 имеется ошибка, возникает задача ее  л о к а л и з а ц и и, то есть  уста-
 новления точного места в программе, где она находится. Можно считать, что
@@ -1112,10 +1079,10 @@
      └──────────────────────────────────────────────────────────────┘
    2. Используйте средства отладки только как вспомогательные.Не применяй-
 те эти средства вместо того, чтобы обдумывать задачу.
-  ┌────────────────────────────────────────────────────────────────────┐
-  │       Ясно, что такие средства как трассировка (п.VIII.3.1) и      │
-  │ аварийная печать (п.VIII.3.2)  отражают случайный подход к отладке.│
-  └────────────────────────────────────────────────────────────────────┘
+┌──────────────────────────────────────────────────────────────────────┐
+│   Ясно, что такие средства как трассировка (раздел VIII.3.1) и ава-  │
+│ рийная печать (раздел VIII.3.2) отражают случайный подход к отладке. │
+└──────────────────────────────────────────────────────────────────────┘
    Эксперименты показали, что программисты, избегающие применения средств
 отладки, даже при отлаживании незнакомых  им  программ выполняют ее лучше,
 чем те, кто пользуется этими средствами.
@@ -1138,23 +1105,23 @@
 кинофильма. Если Вы не можете локализовать ошибку в приемлемые сроки(пред-
 положительно за 30 минут для небольших программ и за несколько часов  для 
 больших), прекратите поиски и займитесь каким-нибудь другим делом,так как
-эффективность Вашей работы, во всяком случае, значительно снизится.  Проб-
-лему следует "забыть" до тех пор, пока Вы либо подсознательно не  найдете
-ее решения,либо отдохнете и будете готовы вновь рассмотреть симптомы ошиб-
-ки.
+эффективность Вашей работы значительно снизится. Проблему следует "забыть"
+до тех пор, пока Вы либо подсознательно не найдете ее решения, либо отдох-
+нете и будете готовы вновь рассмотреть симптомы ошибки.
+
    И наконец,
 ┌────────────────────────────────────────────────────────────────────────┐
 │ если Вы окончательно зашли в тупик, то изложите задачу кому-нибудь еще.│
 └────────────────────────────────────────────────────────────────────────┘
    Сделав это, Вы, вероятно, обнаружите что-то новое. Часто случается так,
-что, просто пересказав задачу хорошему слушателю,Вы вдруг найдете решение
+что  просто пересказав задачу хорошему слушателю,Вы вдруг найдете решение
 без какой-либо помощи с его стороны.
    Далее мы рассмотрим некоторые, ставшие уже классическими,  способы  по-
 лучения программистом промежуточных результатов, вырабатываемых отлаживае-
 мой программой.
 
-                   VIII.3.1.  Т р а с с и р о в к а
 
+                   VIII.3.1.  Т р а с с и р о в к а
 
                                  Всякий необходимо причиняет пользу, упот-
                                  ребленный на своем месте.  Напротив того:
@@ -1163,12 +1130,11 @@
                                  танцах глупы.
                                                            Козьма Прутков
 
-
    Т р а с с и р о в к а ("tracе" - "след") представляет собой  пошаговое
 выполнение программы  в автоматическом режиме. Если Вы создали сложную по
 логике программу, и она выполняется неправильно, а по  информации, выводи-
-мой на экран нельзя установить, где ошибка, то оператор
-                                  TRON
+мой на экран, нельзя установить, где ошибка, то оператор
+                                  TRON   ,
 где   TRON  ("TRacing ON" - "установить трассировку")  -  служебное слово,
 поможет Вам произвести трассировку программы во время ее выполнения.    
    Выполнение оператора TRON приводит к последовательному  выводу номеров
@@ -1181,8 +1147,9 @@
 то Вы легко увидите, по каким"ветвям" выполняется Ваша программа, поэтому
 анализ полученной трассы, как правило, позволяет локализовать ошибку.
    Отменяется режим трассировки оператором
-                                   TROFF
+                                   TROFF   ,
 где  TROFF("TRacing OFF" - "отменить трассировку") - служебное слово.
+
    Итак, если Вам непонятна работа какого-то участка программы, то в нача-
 ле участка надо поставить оператор TRON, а в конце - оператор TROFF.
    Например:        249 TRON
@@ -1201,7 +1168,6 @@
                              │                      │
                           П о д у м а й т е, п о ч е м у ?!
 
-
    П р и м е р 2.   10 TRON:INPUT A,B:PRINT A;B
    ─────────────    20 IF A*B<99 THEN 100 ELSE TROFF
                     100 PRINT A+B;A-B
@@ -1211,7 +1177,6 @@
                      5  6                   10  10
                     [20][100] 11 -1        [20] 20  0
                     Ok                     Ok
-
    Отметим, что команда RUN в ее простейшем виде не отменяет режима  TRON,
 так что использование оператора TRON ведет к выполнению трассировки  всех  
 последующих программ до тех пор, пока не встретится оператор  TROFF.
@@ -1221,7 +1186,6 @@
   └───────────────────────────────────────────────────────────────────┘
    Операторы TRON и TROFF можно использовать и в режиме  прямого  выполне-
 ния команд.
-
    П р и м е р 3.   Ok
    ─────────────    TRON
                     Ok
@@ -1232,20 +1196,16 @@
                     [20][100] 1
                     [110]
                     Ok
-
    Этими операторами нужно пользоваться избирательно и крайне  осторожно -
 иначе Вы "утонете" в протоколах трассировки.Поэтому стремитесь ограничить
 область действия операторов TRON и TROFF в тексте Вашей программы!
 
 
-
                VIII.3.2.  А в а р и й н а я  п е ч а т ь
 
-
                                  Щелкни кобылу в нос - она махнет хвостом.
                                                            Козьма Прутков
 
-
    Под   а в а р и й н о й   п е ч а т ь ю  ("dump" - "дамп" , "разгрузка
 памяти","выдача") понимается печать значений переменных в программе в тот
 момент ее выполнения, когда в ней возникает ошибка,препятствующая дальней-
@@ -1254,8 +1214,7 @@
 получает доступ к тем значениям переменных, которые они  имели  в  момент
 возникновения аварийной ситуации. Изучение и сопоставление таких значений
 обычно позволяет программисту достаточно точно локализовать ошибку в  про-
-грамме, и иногда и не одну.
-
+грамме, а иногда и не одну.
    П р и м е р.   10 PRINT 1/SIN(X)
    ───────────    run
                   Division by zero in 10
@@ -1265,10 +1224,8 @@
                    0           ◀── Вот теперь все ясно!
                   Ok
 
-
                                  - Вам известны мои методы. Примените их!
-                                          Конан Дойль. Собака Баскервилей
-
+                                        А.Конан Дойль. Собака Баскервилей
 
    Эффективным методом локализации ошибки для небольших программ является
 прослеживание в обратном порядке логики выполнения программы с целью обна-
@@ -1286,15 +1243,11 @@
 от ожидаемого).
 
 
-
           VIII.3.3.  Л о к а л и з а ц и я   с  т о ч к а м и 
                               о с т а н о в а
 
-
                                                      Разделяй и властвуй!
                                                                Людовик XI
-
-
    Трассировка хороша только для коротких  программ; более  универсальным
 способом является  п е ч а т ь  в  у з л а х  ("snapshot" - "моментальный
 снимок") или  л о к а л и з а ц и я  с  т о ч к а м и  о с т а н о в а .
@@ -1315,13 +1268,12 @@
    Если Вы будете внимательны, то услышите и предупредительный звонок,как
 и при выполнении оператора BEEP.
    После останова по оператору STOP вычисления могут быть возобновлены ко-
-мандой                              CONT
+мандой                              CONT    ,
 которая должна быть выполнена в режиме непосредственного счета.
       ┌────────────────────────────────────────────────────────────┐
       │    Однако ни в коем случае не изменяйте, не добавляйте и   │
       │     не исключайте в этот момент строки Вашей программы!    │
       └────────────────────────────────────────────────────────────┘
-
    П р и м е р.  Программа, осуществляющая вычеркивание  R-й буквы из сло-
    ───────────   ва P$  и  запись полученного после вычеркивания слова  в
                  слово Q$.
@@ -1340,7 +1292,7 @@
 в Вашу программу, только, разумеется, программную строку, в которой  прои-
 зошло прерывание, Вам будет трудно угадать! 
    Заметим, что во время прерывания  Вы можете изменять значения  перемен-
-ных.  Однако учтите, что, если "что-либо"(например, оператор CLEAR)  дела-
+ных.  Однако учтите, что  если "что-либо" (например, оператор CLEAR) дела-
 ет продолжение программы, прерванной по оператору STOP, бессмысленным, то
 любая попытка выполнить команду CONT приводит к сообщению
                           "? Can't CONTINUE"
@@ -1405,16 +1357,12 @@
 ко точек останова, как и при обычной отладке с точками останова.
 
 
-
      VIII.3.4.  П р о г р а м м н а я  о б р а б о т к а  о ш и б о к
 
-
                                     Don't worry, computer bugs don't byte.
                                             Из программистского фольклора
-
-
    Кроме сбоев в работе компьютера из-за неисправностей каких-либо его уз-
-лов, имеется достаточно много причин, по которым происходит прерывание вы-
+лов  имеется достаточно много причин, по которым происходит прерывание вы-
 числений по программе и при нормально работающем компьютере.Перечислим не-
 которые из них:
    1) компьютеру "предложено" поделить на нуль;
@@ -1466,7 +1414,6 @@
                                  RESUME m          .
    Разумеется, старайтесь не возвращаться "внутрь" цикла, минуя заголовок,
 и "внутрь" другой подпрограммы!
-
    П р и м е р ы:
    ─────────────
    1) 10 ON ERROR GOTO 50:INPUT M   2) 10 ON ERROR GOTO 70:INPUT W
@@ -1484,7 +1431,6 @@
       ? 30
       Осуществлен переход на оператор GOSUB 40!
       Ok
-
    Подпрограмма обработки ошибок должна заканчиваться операторами  RESUME,
 END или STOP, в противном случае последует  сообщение об ошибке:
                            "No RESUME in ∗∗∗∗"
@@ -1546,13 +1492,12 @@
        │   &H801F  │    &H41    │        Код символа "A"          │
        └───────────┴────────────┴─────────────────────────────────┘
    В подпрограммах обработки ошибок обычно используются функции:
-   α)                                ERR
+   α)                                ERR     ,
 где   ERR ("ERRor") - служебное слово,  которое возвращает  код последней
 ошибки, и
-   β)                                ERL
+   β)                                ERL     ,
 где   ERL ("ERror Line"-"ошибочная строка") - служебное слово,которое воз-
 вращает номер строки, где произошла ошибка.
-
    П р и м е р ы:
    ─────────────
    4)  10 Z=1/0                   5) 10 ON ERROR GOTO 100
@@ -1575,7 +1520,7 @@
                       print peek(&HF6B3)+256*peek(&HF6B4)
                        1000
                       Ok
-   Далее, оператором               ERROR α
+   Далее, оператором               ERROR α    ,
 где:  ERROR - служебное слово;
        α - арифметическое выражение;
 можно искусственно вызвать (имитировать!) ошибку  с  кодом, равным INT(α)
@@ -1612,7 +1557,6 @@
     50            250         Уже три попытки. Хватит! 
    Завтра                     Ok
    Ok
-
    Отметим, что обработка ошибок пользователем действительна и в непосред-
 ственном режиме: Вы  можете  выполнить в непосредственном режиме  команду
 ON ERROR GOTO ,а затем ввести команду,которая вызовет обрабатываемую ошиб-
@@ -1627,7 +1571,6 @@
 бок оператора:
             IF err=X AND erl=Y THEN on error goto 0:resume next
                                ELSE X=err:Y=erl:resume next
-
    П р и м е р 8.   10 ON ERROR GOTO 50
    ─────────────    20 PRINT MAX
                     30 END
@@ -1644,7 +1587,6 @@
 71 до 255 для MSX-DISK BASIC (и с номерами от 60 до 255 для MSX-BASIC).
    Если Вам потребуется ввести свои коды ошибок, то сделайте это по анало-
 гии с фрагментом программы:
-
    П р и м е р 9.   10 ON ERROR GOTO 150 
    ─────────────    20 INPUT X
                     30 IF X<0 THEN ERROR 250
@@ -1659,15 +1601,14 @@
    Если код ошибки, стоящей в операторе ERROR α, не определен,то будет вы-
 дано сообщение об ошибке: "Unprintable error", и программа будет прервана.
 
+
    VIII.3.5.   Н е к о т о р ы е  п р и ч и н ы,  о с л о ж н я ю щ и е
                        п о и с к  о ш и б о к [57]
 
-
                                 Следствие 17: некомпетентность  не  знает
                                 преград ни во времени, ни в пространстве.
                                                                   Л.Питер
 
-
    1. При отладке достаточно сложных программ, использующих большой набор
 обрабатываемых данных, иногда трудно вообще установить  факт  наличия оши-
 бок в программе, так как программист лишь приблизительно представляет, ка-
@@ -1708,17 +1649,13 @@
 туация схожа с ситуацией, имеющей место в физике микромира: использование
 какого-либо прибора для наблюдения процесса полностью  изменяет этот  про-
 цесс.
-   8. Иногда, изменяя программу методом  проб  и  ошибок, можно устранить
+   8. Иногда, изменяя программу, методом проб  и  ошибок  можно устранить
 ошибку, т.е. она перестает как-либо проявлять себя. При этом остается  аб-
 солютно непонятным, в чем же она заключалась.
-
-
    9.                      Происходит не просто нечто более странное, чем
                            мы предполагали:странность происходящего превы-
                            шает и то, чего мы не смели предположить.  
                                              Принцип Ожидаемого по Питеру
-
-
    В ходе отладки программист  нередко  допускает  просчет, необоснованно
 принимая некоторые предположения  о возможных источниках ошибок.
    Например, используя стандартную библиотечную подпрограмму,он полностью
@@ -1749,23 +1686,19 @@
 повторил свой приказ. Паук снова побежал. Затем юный экспериментатор отор-
 вал пауку ноги и, снова положив его на стол,  скомандовал: "Бегом!".Но на
 сей раз паук остался неподвижен. "Вот видите, - заявил торжествующий маль-
-чик, - стоило пауку оторвать ноги, как он сразу оглох.
-   А "окончив" отладку, вспомните, что, когда  известного датского скульп-
+чик, - стоило пауку оторвать ноги, как он сразу оглох".
+   А "окончив" отладку, вспомните, что  когда  известного датского скульп-
 тора  Торвальдсена  (1768 или 1770-1844) спросили  мнение об одной из его
 скульптур, он ответил: "Я не вижу в ней недостатков, из чего заключаю,что
 у меня хромает воображение".
 
 
-
         VIII.4.  ПРИНЦИПЫ ИСПРАВЛЕНИЯ И АНАЛИЗА ДОПУЩЕННЫХ ОШИБОК
 
-
                                      Программа, свободная от ошибок, есть
                                      абстрактное теоретическое понятие.
                                                              Д.Ван Тассел
-
-
-   Ясно, что процесс отладки складывается из двух этапов: определение мес-
+   Ясно, что процесс отладки складывается из двух этапов: определения мес-
 тонахождения ошибки и последующего ее исправления. Поговорим  о принципах
 исправления ошибок по Майерсу [51].
         ┌────────────────────────────────────────────────────────┐
@@ -1814,13 +1747,11 @@
 ки должно быть выполнено  повторное  тестирование, позволяющее установить,
 не внесена ли новая ошибка.
 
-
                            Когда кто выходит из дому, пусть поразмыслит о
                            том, что намерен делать, а когда снова  войдет
                            в дом, пусть поразмыслит о том, что сделал.
                                         Древнегреческий мыслитель Клеобул
 
-
    Укажем один старый прием исправления ошибок, заключающийся  в использо-
 вании так называемых "з а п л а т" ("patch" - "заплата", "вставка  в прог-
 рамму").
@@ -1898,7 +1829,6 @@
 
         VIII.5.  ОСНОВНЫЕ ПОНЯТИЯ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ
 
-
    Высокое качество программ может достигаться "безошибочным" программиро-
 ванием ("п а с с и в н ы м и" методами) и выявлением и устранением ошибок
 ("а к т и в н ы м и"  методами).  Активные методы мы уже кратко описали.
@@ -1910,12 +1840,12 @@
          VIII.5.1.   М о д у л ь н о с т ь  п р о г р а м м  [49]
 
     М о д у л ь н о й   называют программу, составляемую из таких частей -
-м о д у л е й, что их можно независимо друг от друга програмировать, тран-
+м о д у л е й, что их можно независимо друг от друга программировать,тран-
 слировать, отлаживать (проверять, исправлять). Предполагается, что модули
 имеют небольшие размеры, четко определенные функции и, кроме того, их свя-
 зи между собой максимально упрощены, в частности, предполагается,что моду-
 ли имеют лишь одну точку входа (в начале модуля). Разбиение программы  на
-модули при ее написании, хотя и является весьма непростым делом,позволяет
+модули при ее написании  хотя и является весьма непростым делом,позволяет
 существенно облегчить в дальнейшем работу над программой на других этапах.
    После того  как в алгоритме выявлены мало зависимые друг от друга  час-
 ти, составление программы упрощается, так как при программировании каждой
@@ -1958,7 +1888,6 @@
  │ чительно ускоряет составление программы и облегчает ее отладку.     │
  └─────────────────────────────────────────────────────────────────────┘
 
-
             VIII.5.2.   С т р о е н и е  п р о г р а м м [49]
 
    Не претендуя  на полноту классификации, строение программ можно охарак-
@@ -1988,7 +1917,7 @@
 ми, к которым необходимо стремиться при разработке программы. Допустимыми
 вариантами являются иерархически-хаотическое и, может  быть, монолитно-мо-
 дульное.
-   Помимо модульности, другим свойством, которое содействует  предупрежде-
+   Помимо модульности  другим свойством, которое содействует  предупрежде-
 нию появления в программе ошибок, является структурированность.
    Обычно  с т р у к т у р и р о в а н н о й  называется  программа, логи-
 ческая структура которой отвечает некоторым жестко установленным  требова-
@@ -1997,10 +1926,8 @@
 структурированной, поскольку от  модульной  программы требуется, например,
 чтобы она состояла только из модулей с одним входом.
 
-
     VIII.5.3.  С т р у к т у р н о е  п р о г р а м м и р о в а н и е
 
-
                         Структура (от лат. "structura" - "строение, распо-
                         ложение, порядок"),совокупность устойчивых связей
                         объекта, обеспечивающих его целостность и тождест-
@@ -2008,8 +1935,6 @@
                         свойств при различных внешних и внутренних измене-
                         ниях.
                                       Советский Энциклопедический Словарь
-
-
    Впервые основные идеи  структурного  программирования  были  высказаны
 Эдсгером Дейкстрой в 1965 году и позже опубликованы в его работе [55]. Ос-
 новная задача, которую Э.Дейкстра решал, разрабатывая  идеи  структурного
@@ -2031,7 +1956,7 @@
 вают, что  применение  методов  структурного  программирования  позволяет
 увеличить это число в 5÷6 раз  по сравнению с традиционными способами про-
 граммирования.
-   Заметим, между прочим, что при структурном программировании становится
+   Заметим  между прочим, что при структурном программировании становится
 излишним вычерчивание  б л о к - с х е м. Блок-схема  вполне  структуриро-
 ванной программы настолько тривиально проста, что  о программе  можно ска-
 зать больше по тексту, чем по блок-схеме.
@@ -2110,14 +2035,11 @@
 линейная цепочка блоков  может быть сведена к одному блоку,  то любая про-
 грамма может в конечном итоге рассматриваться  как  единый функциональный 
 блок с одним входом и одним выходом.
-
    Перечислим теперь основные  п р и н ц и п ы  и  м е т о д ы   структур-
 ного программирования.
-
                                             Вы говорите, что я повторяюсь.
                                             Но я повторю.
-                                                               Т.С.Эллиот
-
+                                                                 Т.Эллиот
           ┌────────────────────────────────────────┐
    I.     │    Как можно меньше переходов GOTO !   │
           └────────────────────────────────────────┘
@@ -2136,29 +2058,29 @@
 │     Предложения    │     Неформальное    │  Соответствующая последо- │
 │    структурного    │       описание      │  вательность  операторов  │
 │  программирования  │                     │    на языке  MSX-BASIC    │
-│────────────────────┼─────────────────────┼───────────────────────────│
-│                    │ Если условие истинно│                           │
-│                    │ выполнить  предложе-│                           │
-│IF C THEN S1 ELSE S2│ ние S1;             │   IF C THEN S1 ELSE S2    │
+├────────────────────┼─────────────────────┼───────────────────────────┤
+│                    │ Если  условие истин-│                           │
+│                    │ но, то  выполнить   │                           │
+│IF C THEN S1 ELSE S2│ предложение S1;     │   IF C THEN S1 ELSE S2    │
 │                    │ в противном  случае │                           │
 │                    │ выполнить  предложе-│                           │
 │                    │ ние S2              │                           │
-│────────────────────┼─────────────────────┼───────────────────────────│
+├────────────────────┼─────────────────────┼───────────────────────────┤
 │                    │ Повторить  предложе-│                           │
 │                    │ ние S, пока условие │      GOTO n               │
 │    WHILE C DO S    │ С останется истинным│   m: S                    │
 │                    │ (0 или более раз)   │   n: IF C THEN GOTO m     │
 │                    │                     │                           │
-│────────────────────┼─────────────────────┼───────────────────────────│
+├────────────────────┼─────────────────────┼───────────────────────────┤
 │                    │ Повторять последова-│                           │
 │                    │ тельность  S  (один │                           │
 │  REPEAT S UNTIL C  │ или  более  раз) до │   m: S                    │
 │                    │ тех пор, пока  усло-│   IF NOT C THEN GOTO m    │
 │                    │ вие С не станет  ис-│                           │
 │                    │ тинным              │                           │
-│────────────────────┼─────────────────────┼───────────────────────────│
+├────────────────────┼─────────────────────┼───────────────────────────┤
 │                    │ Выполнить  предложе-│                           │
-│       CASE K OF    │ ние Si(только, если │    ON K GOTO N1,N2,...,Nm:│
+│       CASE K OF    │ ние Si (только если │    ON K GOTO N1,N2,...,Nm:│
 │    1: S1           │ значение K=i,причем │    GOTO s                 │
 │    2: S2           │ i равно либо 1,     │ N1:S1:GOTO s              │
 │     ···            │         либо 2,     │ N2:S2:GOTO s              │
@@ -2182,7 +2104,7 @@
 │  без оператора перехода, логическая структура  которой тем не менее  │
 │  будет неудачной. И, наоборот, существуют ситуации, в которых  пере- │
 │  ход является лаконичным, простым и ясным средством, в то время как  │
-│  другие подходы сравнительно неудачны                                │
+│  другие подходы сравнительно неудачны.                               │
 └──────────────────────────────────────────────────────────────────────┘
    Например, правила структурного программирования  часто предписывают по-
 вторять одинаковые фрагменты программы в разных участках модуля, чтобы из-
@@ -2198,7 +2120,7 @@
 
    II. Другой метод улучшения качества программирования заключается в при-
 менении   н и с х о д я щ е г о   п р о е к т и р о в а н и я, ("top-down
-programming" - "программирование "сверху-вниз"").
+programming" - "программирование "сверху вниз"").
     ┌───────────────────────────────────────────────────────────────┐
     │    Оператор GOSUB является  о с н о в н ы м  инструментом     │
     │             с т р у к т у р н о г о  программирования.        │
@@ -2212,34 +2134,34 @@
 ре необходимости подпрограммы более низкого уровня. Этот последовательный
 процесс продолжается, пока программа не будет завершена и проверена.
    При другом методе -  в о с х о д я щ е м   п р о е к т и р о в а н и и 
-(программировании "снизу-вверх") - Вы вначале пишете подпрограммы нижнего 
+(программировании "снизу вверх") - Вы вначале пишете подпрограммы нижнего 
 уровня  и тщательно их тестируете и отлаживаете.  Далее Вы добавляете под-
 программы более высокого уровня,  которые  вызывают  подпрограммы нижнего 
 уровня, и так до тех пор, пока Вы не достигнете программы самого верхнего  
-уровня.  Метод проектирования "снизу-вверх"  пригоден при наличии больших 
+уровня.  Метод проектирования "снизу вверх"  пригоден при наличии больших 
 библиотек стандартных подпрограмм.
    Учтите, что иногда лучшим является гибрид двух методов.  Однако  в обо-
-их случаях каждая подпрограмма должна быть небольшой, так, чтобы можно бы-
+их случаях каждая подпрограмма должна быть небольшой, так  чтобы можно бы-
 ло охватить одним взглядом всю ее логику (для персональных компьютеров же-
 лательно, чтобы и основная программа,и подпрограммы  ц е л и к о м   поме-
 щались в пределах 20÷30 строк экрана дисплея!)
    Всякий велосипедист хорошо знает, что ехать сверху вниз быстрее и удоб-
 нее, чем снизу вверх. В программировании  дело  обстоит  примерно  так же:
-"сверху-вниз" писать программы удобнее потому,что при таком методе мы точ-
+"сверху вниз" писать программы удобнее потому,что при таком методе мы точ-
 но знаем, какие подпрограммы описывать.
    Но есть у этого метода и недостаток: на верхнем уровне не всегда видно,
 куда спускаться, то есть как разделить решение задачи на такие части, каж-
 дую из которых было бы легко описать отдельной процедурой. У опытных  про-
 граммистов вырабатывается своеобразное чутье: они  сразу видят, какие нуж-
 ны процедуры, а новичкам иногда приходится туго. 
-   Метод "снизу-вверх", хотя и требует большого труда, бывает очень  поле-
+   Метод "снизу вверх", хотя и требует большого труда, бывает очень  поле-
 зен на первых порах.  Пусть даже  половину  составленных Вами подпрограмм 
 придется потом "выбросить", но зато  Вы хорошо почувствуете, какие подпро-
 граммы для исходной задачи необходимы.  Да и отлаживать каждую написанную 
 подпрограмму можно сразу: ведь все, что "под ней", уже описано  (а обычно 
 и отлажено). Словом, любишь кататься "сверху вниз"  -  люби  и саночки во-
 зить (в обратном направлении).  Опытные программисты иногда применяют  ме-
-тод "снизу-вверх" для того, чтобы заранее заготовить для новой задачи  на-
+тод "снизу вверх" для того, чтобы заранее заготовить для новой задачи  на-
 бор подпрограмм, которые могут понадобиться в различных случаях.  Так что
 "возить саночки" приходится не только новичкам!
 
@@ -2270,7 +2192,7 @@
 вательности шагов, требуемых для решения задачи, записываются  на обычном
 языке или на  п с е в д о к о д е (см. ниже).
    2. На уровне 2 в общих терминах детализируется описание  шагов, введен-
-ных на этапе 1).В детализированное описание может входить обозначение цик-
+ных на этапе 1. В детализированное описание может входить обозначение цик-
 лических структур,в то время как действия внутри циклов могут по-прежнему
 оставаться неясными. Таким образом, выполняются только общие  эскизы слож-
 ных действий.
@@ -2331,6 +2253,7 @@
    3) конец цикла.
    Это описание можно немедленно перевести на MSX-BASIC следующим образом:
                 300 FOR I=1 TO N:PRINT A(I)/M:NEXT I
+
    У р о в е н ь  2.
    ────────────────
    Он включает в себя  три  детализованные  выше части, из которых только 
@@ -2378,15 +2301,12 @@
 много уровней, чтобы довести все модули до такого состояния,  при котором 
 они окажутся готовыми для программирования.
 
-
                                 Известно, что отладка  в два раза сложнее
                                 написания  программы. Поэтому, если Вы бы-
                                 ли предельно хитроумны при написании прог-
                                 раммы, то что же Вы будете делать  при ее
                                 отладке?
                                                     Б.Керниган, Ф.Плоджер
-
-
             ┌────────────────────────────────────────────────┐
    IV.      │   Никаких трюков и заумного программирования!  │
             └────────────────────────────────────────────────┘
@@ -2410,9 +2330,9 @@
 ютера и чувствовать себя свободно. Из-за своей необычности трюки, как пра-
 вило, реализуются только на языках ассемблерного типа или непосредственно 
 в машинных кодах.
-   Однако, никогда не используйте трюков там, где можно использовать  про-
+   Однако  никогда не используйте трюков там, где можно использовать  про-
 стые методы. Заметим,что  э л е г а н т н о е  решение задачи - это такое
-решение, которое  одновременно  и  просто, и оригинально. Простые решения
+решение, которое  одновременно  и  просто  и оригинально. Простые решения
 всегда желательны, но вопрос о том, всегда ли приемлемы оригинальные реше-
 ния (трюки), остается открытым.
    Под  о р и г и н а л ь н о с т ь ю  решения подразумевается  его неоче-
@@ -2429,7 +2349,7 @@
    О р и г и н а л ь н о с т ь очевидна, но  э л е г а н т н ы м этот при-
 ем можно считать, лишь принимая во внимание особенности конкретной задачи.
 Он, очевидно, не эффективен, когда  используется вне рассматриваемого кон-
-текста, например, для перестановки элементов  многомерного массива в обыч-
+текста, например  для перестановки элементов  многомерного массива в обыч-
 ной программе, и к тому же может привести к ошибке округления, если А и В
 описаны как вещественные числа. Например:
                  10 INPUT A,B:A=A-B:B=A+B:A=B-A:PRINT A;B
@@ -2448,9 +2368,9 @@
    Ответ прост:
  ┌─────────────────────────────────────────────────────────────────────┐
  │  задача может потребовать бригадной организации ее решения, потому  │
- │  что она слишком трудна, или слишком велика, или слишком разнородна │.
+ │  что она слишком трудна  или слишком велика, или слишком разнородна │.
  └─────────────────────────────────────────────────────────────────────┘
-   В 1971г. Г.Д.Миллз предложил схему организации программистской деятель-
+   В  1971г. Г.Миллз предложил  схему организации программистской деятель-
 ности, известную как  б р и г а д а  г л а в н о г о  п р о г р а м м и с-
 т а.Этот подход успешно использовался при разработке и реализации несколь-
 ких крупных программных проектов.
@@ -2517,6 +2437,7 @@
    Поэтому а к т и в н ы е  методы поиска и устранения  ошибок  дополняют
 пассивные в процессе достижения заданного качества программ.
 
+
             VIII.6.   О  СТИЛЕ  ПРОГРАММИРОВАНИЯ  [57]
 
 
@@ -2530,7 +2451,6 @@
                                                  Мыслям просторно.
                                                               Н. Некрасов
 
-
    Трудно дать исчерпывающее  определение  понятия "с т и л ь программиро-
 вания". Попытаемся охарактеризовать его, рассмотрев с различных точек зре-
 ния. Главный тезис состоит в том, что   с т и л ь  п р о г р а м м и р о -
@@ -2547,13 +2467,13 @@
 лишь немногие могут с такой же легкостью написать на иностранном языке да-
 же небольшую статью. Таким образом, от знания языка до владения языком ле-
 жит "дистанция огромного размера".  Но  даже овладев языком программирова-
-ния в совершенстве, мы лишь незначительно приблизимся  к обладанию стилем  
+ния в совершенстве, мы лишь незначительно приблизимся к грамотному  стилю  
 программирования.
    К сожалению, взгляд на стиль программирования  как  на стиль  мышления 
 еще не всеми и не до конца осознан.  Очень  часто  стиль программирования 
 сводится к технологии программирования.  За последние годы мы пережили не-
 сколько вспышек увлечения  модными методологиями и технологиями программи-
-рования, такими, например, как структурное программирование. Но в главном 
+рования, такими  например, как структурное программирование. Но в главном 
 все они ориентируются на внешние факторы, характеризующие программу. Кста-
 ти сказать, жертвой  структурного  программирования  чуть  было  не стали
 FORTRAN и BASIC с их неструктурными операторами. Но  очевидно, что  плохо
@@ -2563,7 +2483,7 @@
 что даст.
    Подводя итог сказанному, приведем некоторые рекомендации, которые, как
 мы надеемся, при  осознанном и неформальном их использовании  помогут Вам 
-выработать свой стиль программирования. Большинство рекомендаций имеет до-
+выработать свой стиль программирования. Большинство рекомендаций имеют до-
 статочно общий характер и могут быть использованы при программировании не
 только на BASIC, но и на многих других языках программирования. Эти  реко-
 мендации не являются исчерпывающими.  Много подобных советов читатель  мо-
@@ -2707,7 +2627,7 @@
 для понимания, отладки и модернизации.
     Объем вычислений можно уменьшить различными методами. Прежде всего не-
 обходимо исключить лишние вычисления. Следует убедиться, что одно и то же
-значение не вычисляется в программе многократно. Вот,что иногда можно уви-
+значение не вычисляется в программе многократно. Вот что иногда можно уви-
 деть в программе:   10 FOR I=1 TO N:FOR J=1 TO 1000
                     20    K=I+3
                            ···
@@ -2730,14 +2650,14 @@
    │  Однако основной метод уменьшения времени выполнения состоит в  │
    │ кодировании программы на языке ассемблера или на машинном языке!│
    └─────────────────────────────────────────────────────────────────┘
-   Тем не менее, игнорируйте все предложения  по повышению  эффективности,
+   Тем не менее  игнорируйте все предложения  по повышению  эффективности,
 пока программа не будет правильной.Худшее,что может быть сделано,- это на-
 чать беспокоиться о быстродействии программы до того, как она начнет рабо-
 тать правильно. Быстродействующая, но  неправильная  программа бесполезна;
 медленнодействующая, но правильная всегда имеет некоторую ценность, а  мо-
 жет оказаться и вполне удовлетворительной. 
   "1. Если программа неверна, то ее быстродействие не имеет значения. Убе-
-дитесь в ее правильности, прежде, чем Вы начнете ее "улучшать". 
+дитесь в ее правильности прежде, чем Вы начнете ее "улучшать". 
    2. Сохраняйте программу ясной и понятной, не пытайтесь повысить  ее бы-
 стродействие в процессе кодирования. Преждевременная оптимизация - корень 
 всех бед.
@@ -2745,7 +2665,7 @@
 слятор делает это за Вас.
    4. Беспокойтесь об  алгоритме, а не  о деталях программы. Помните, что 
 структура данных может существенно повлиять на то,как будет реализован ал-
-горитм..."                                         Керниган Б., Плоджер Ф.
+горитм..."                                          Б.Керниган, Ф.Плоджер
    Вейнберг [68] рассказывает забавную историю о новой программе, которая
 из-за слишком большой сложности оказалась совершенно ненадежной.  Был  вы-
 зван новый программист,  который нашел лучшее решение и за две недели сде-
@@ -2759,19 +2679,17 @@
 │ могу написать такую, которой хватает одной миллисекунды на перфокарту".│
 └────────────────────────────────────────────────────────────────────────┘
 
-
-
          VIII.7.  НЕДОСТАТКИ  ЯЗЫКА  ПРОГРАММИРОВАНИЯ  BASIC [59]
 
-
- Меня вы научили говорить             Взирая на солнце,прищурь глаза свои
- На вашем языке. Теперь я знаю,       и ты смело разглядишь в нем пятна.
- Как проклинать, - спасибо и за это.                       Козьма Прутков
- Пусть унесет чума обоих вас
+                                      Меня вы научили говорить
+                                      На вашем языке. Теперь я знаю,
+                                      Как проклинать, - спасибо и за это.
+                                      Пусть унесет чума обоих - вас
  И ваш язык.
-    У.Шекспир. Буря (пер.М.Донского)
-
-
+                                                                У.Шекспир
+                                      Взирая на солнце,прищурь глаза свои
+                                      и ты смело разглядишь в нем пятна.
+                                                           Козьма Прутков
    Школьный курс информатики преследует две цели:
    1. О б щ е т е о р е т и ч е с к а я   ц е л ь .
    Овладение алгоритмическим стилем мышления, который включает в себя уме-
@@ -2838,7 +2756,7 @@
  │  школе, является - показать, как фундаментальные алгоритмические   │
  │  конструкции (конструкции школьного  алгоритмического языка) при-  │
  │  обретают свойственную конкретному языку  программирования форму,  │
- │  сохраняя свое содержание                                          │ .
+ │  сохраняя свое содержание.                                         │
  └────────────────────────────────────────────────────────────────────┘
    Программа преподавания информатики предоставляет учителю свободу  выбо-
 ра языка программирования, но большинство  останавливается на BASIC и  Ра-
@@ -2873,13 +2791,13 @@
 алгоритмическом языке задачи,которые можно сразу сделать на BASIC.В итоге
 они получают навык программирования, а не мышления, и главная цель остает-
 ся не достигнутой.
-   Почему же, несмотря на столь серьезную опасность BASICa, он так популя-
+   Почему же, несмотря на столь серьезную опасность  BASIC, он так популя-
 рен?
-   Перечислим основные аргументы, выдвигаемые его зашитниками  и попытаем-
+   Перечислим основные аргументы, выдвигаемые его зашитниками, и попытаем-
 ся их прокомментировать.
    1) BASIC прост в изучении. Это единственное достоинство языка как тако-
 вого. Но это та самая простота, которая хуже воровства, "простота  орудий
-каменного века". BASIC прост, потому, что в нем нет сложных  элементов (в
+каменного века". BASIC прост  потому, что в нем нет сложных  элементов (в
 первую очередь вспомогательных алгоритмов и некоторых алгоритмических кон-
 струкций), без овладения которыми поставленные цели не достигаются.
    2) При работе на BASIC диалог с компьютером происходит быстро и просто.
@@ -2895,10 +2813,10 @@
   │  мирования высокого уровня!                                       │
   └───────────────────────────────────────────────────────────────────┘
 
+
     VIII.8.  С р а в н и т е л ь н а я   х а р а к т е р и с т и к а
                 я з ы к о в   п р о г р а м м и р о в а н и я
 
-
                             Карл Пятый, римский император, говаривал, что
                             ишпанским языком с богом, французским - с дру-
                             зьями, немецким - с неприятельми, италиянским
@@ -2914,8 +2832,7 @@
                             ная Виргилиева важность, Овидиево приятное ви-
                             тийство не теряют  своего  достоинства на рос-
                             сийском языке...
-                                    М.В. Ломоносов. Российская грамматика
-
+                                       М.Ломоносов. Российская грамматика
 
    Идеальный язык програмирования имеет следующие свойства:
    1) он легок для начинающих;
@@ -2940,7 +2857,7 @@
    Разработчики языка ВАSIC выделяют в качестве наиболее важных критериев
 1 и 5.
    Разработчики языка Pascal оценивают свойство  4  как  наиболее  важное,
-и считает важными также позиции  3 и 10.
+и считают важными также позиции  3 и 10.
    Разработчики языка Ада охватили свойство 7,  и это заставило  их пойти
 на компромиссы со многими другими желательными критериями.
    Разработчики языка С выделяют критерии  10, 6  и 2  как  наиболее  важ-
@@ -2959,7 +2876,7 @@
 │   литературы   │     5    │   3   │    3   │   4   │  4  │  2  │   1  │
 ├────────────────┼──────────┼───────┼────────┼───────┼─────┼─────┼──────┤
 │ Поддержка фир- │          │       │        │       │     │     │      │
-│ мами разработ- │          │       │        │       │     │     │      │
+│ мами-разработ- │          │       │        │       │     │     │      │
 │чиками микропро-│     5    │   4   │    4   │   4   │  4  │  3  │   4  │
 │   цессорных    │          │       │        │       │     │     │      │
 │    систем      │          │       │        │       │     │     │      │
@@ -3016,14 +2933,11 @@
 │     средств    │     3    │   3   │    3   │   3   │  5  │  3  │   3  │
 │     отладки    │          │       │        │       │     │     │      │
 └────────────────┴──────────┴───────┴────────┴───────┴─────┴─────┴──────┘
-
    В заключение три цитаты:
-
    1) "Практически невозможно научить хорошему программированию студентов,
 ориентированных первоначально на бейсик; как  потенциальные  программисты
 они умственно оболванены без надежды на исцеление"
-                        Э.В.Дейкстра, ASMSIGPLAN Notice, 1982, 7, P.13-15
-
+                          Э.Дейкстра, ASMSIGPLAN Notice, 1982, 7, P.13-15
    2) "...коль уж становиться программистом, то программистом хорошим; та-
 кого программиста отличает постоянное желание стать еще лучшим программис-
 том, а единственно верный путь для этого - стремиться в совершенстве овла-
@@ -3032,10 +2946,9 @@
 те, довольно хорошие программисты,  которые,  став слишком самодовольными 
 или консервативными, полагают, что язык, которым они пользуются,  во всех 
 смыслах является последним словом"                                  Б.Мик
-
        ┌───────────────────────────────────────────────────────────┐
    3)  │  "Предмет, достойный целого курса лекций, вы превратили   │
-       │           в собрание  р а с с к а з и к о в .             │
-       │                               Конан Дойль.  Медные буки   │
+       │           в собрание  р а с с к а з и к о в ".            │
+       │                             А.Конан Дойль.  Медные буки   │
        └───────────────────────────────────────────────────────────┘
msx/basic_dialogue_programming_language/files/diff_008.txt · Последние изменения: 2022-09-10 12:58 — GreyWolf