KRIEGSSPIELE!
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Матчасть диванного танкиста

Страница 4 из 6 Предыдущий  1, 2, 3, 4, 5, 6  Следующий

Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Фев 11, 2023 12:13 am

2/88
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

"Выпуск раздела "Человек и компьютер" в 8/87 год мне не понравился,- пишет И.Храмов из Куйбышева.- Во вступлении к нему говорилось про новые формы подачи материалов о программируемых микрокалькуляторах, и я автоматически стал оценивать этот выпуск с новых позиций, а он оказался довольно бесцветным - с моей точки зрения".
Что можно сказать в ответ на такой упрек! Безосновательно было бы рассчитывать, будто новинки появятся в том же выпуске, что и просьба к читателям присылать их в редакцию. Раздел существует только за счет читательской почты. Наивно полагать, что где-то есть некто, заранее знающий исчерпывающий ответ на любой запрос читателей. Раздел будет удовлетворять их чаяниям, если огромный читательский коллектив, обладающий высоким творческим потенциалом, придет к эффективным формам самосознания и взаимопомощи.
Говоря попросту, дело может обстоять так. Читатель А. хорошо владеет, допустим, статистическими расчетами на микрокалькуляторе, но испытывает трудности при интегрировании на нем. Читателю Б., напротив, удается интегрирование, но нелегко со статистическими расчетами. Каждый публикует в разделе выступление на свою "коронную" тему - и каждый получает в итоге решение мучившей его проблемы.
Все зависит, как уже говорилось не раз, от эпистолярной активности наших читателей. Раздел будет насыщенным и интересным, если каждый читатель возьмется за перо и поделится своими достижениями, считая одинаково ценными и серьезную разработку и замечание к слову.
В нынешнем выпуске раздела дважды встречаются фамилии В.Ванышева из Москвы и В.Мешкова из Евпатории. Каждый начал свое письмо в редакцию с предмета основного своего размышления, но на этом не остановился. Основные темы их писем вылились в отдельные публикации, а примечания вошли фрагментами в подборку "1024 совета".
Всякое даяние благо - эта старинная поговорка советует читателям быть щедрыми на мысли и суждения в переписке с разделом.

СНАЧАЛА ОБДУМАЕМ АЛГОРИТМ
Как известно, решение вычислительной задачи на ЭВМ подразделяется на этапы: постановка задачи; ее математическая формулировка; выбор метода решения; построение алгоритма; составление блок-схемы алгоритма; программирование; отладка программы; ее оформление и счет по ней.

В большинстве существующих руководств упор делается на этап программирования. Это оправдано при обучении методике составления программ. Однако при этом складывается стереотип мышления, руководствуясь которым пользователь считает, будто составление программы имеет основное значение при решении задач на ЭВМ, а нахождение математической формулировки и разработка алгоритма - второстепенное. Между тем пренебрежение этими начальными этапами делает более трудоемким этап программирования. Повторение таких случаев еще более закрепляет стереотип. Однако с накоплением опыта становится ясно, что все этапы решения задачи бывают достаточно важны, и искусство решения задач с помощью ЭВМ не сводится к искусству программирования. Эффективное решение предполагает оптимальное сочетание этапов.

В книге Ю.В.Пухначева и И.Д.Данилова "Микрокалькуляторы для всех" рассматривается задача о нахождении точек пересечения двух окружностей. Хотя задача выглядит простой, программа занимает всю программную память калькулятора. Нельзя ли добиться сокращения?

Обратимся к этапу математической формулировки задачи. Наиболее проста она, если начало координат находится в центре одной окружности, а ось абсцисс проходит через центр другой (см. рисунок). Чтобы получить решение, достаточно вернуться в исходную систему координат.

Матчасть диванного танкиста - Страница 4 88020110

Можно предложить и более простой алгоритм. Найдем координаты точки пересечения окружности, в которой помещено начало новой системы координат, с линией, соединяющей центры окружностей: x=r2*X/R, y=r2*Y/R; затем совершим преобразование сдвига и поворота на углы +ф и -ф, пользуясь двумя последними формулами из числа приведенных на рисунке. Если вычисления по этим формулам оформить в виде подпрограммы, программа уместится в 70 шагов памяти.
В.МЕШКОВ (г.Евпатория)

[ УЗЕЛКИ НА ПАМЯТЬ
Если я предполагаю хранить данные для программы в ППЗУ, то стараюсь размещать все необходимые константы в регистрах с наименьшими номерами. Так удается экономить место в ППЗУ. Содержимое регистров считывается в ППЗУ последовательно, начиная с Р0, поэтому для записи констант из регистров PA, PB, PC, РД требуется 14*14 = 196 ячеек. В то же время, если константы записаны в Р0-Р3, понадобится всего 4*14=56 ячеек.
В.КЕНАРСКИЙ (г.Севастополь) ]

УНИВЕРСАЛЬНАЯ ПРОГРАММА
Наши читатели употребляют этот термин, когда речь заходит о программе, способной решать несколько однотипных задач или несколько качественно различных вариантов одной задачи - по выбору пользователя. Способы выбора могут быть различными: ниже они иллюстрируются программами, полученными от читателей за последнее время. Л.Басевич (Ленинград) вводит для этой цели в калькулятор то или иное кодовое число; переработавший его программу по просьбе редакции В.Хмелюк (Мытищи) расширил набор решаемых ею задач, предложив несколько вариантов ее заключительного фрагмента. А.Тулайков (Долгопрудный) оперирует целым набором кодовых чисел; сменяя их по ходу расчета, он получает один за другим интересующие его результаты. Программа Е.Капустина (Невинномысск) "догадывается", какая задача решается, по числу вводимых в нее параметров, недостающие либо отсутствуют, либо равны нулю. Для программы Д.Александрова (Благовещенск) исходной является функциональная зависимость между двумя величинами, любую из которых можно определить через другие, задаваемые в начале расчета; на место неизвестной в память калькулятора при этом записывается нуль - обнаружив его, программа "понимает", что именно эту величину и требуется вычислить.

Советуем проанализировать по этим программам полезные для других случаев применения команд ВП, КБПМ, КППМ, другие приемы управления ходом вычислении.

Итак, программа Л.БАСЕВИЧА-В.ХМЕЛЮКА. Она вычисляет различные функции комплексного неременного z=x+iy. Кодовые числа функций указываются ниже в скобках после их обозначений.

Основной блок, предназначенный для расчета sinz(2), cosz(3), shz(5), chz(6)

00. ПД 01. КИПД 02. ПД 03. КБПД 04. ИП0 05. КППА 06. С/П 07. БП 08. 00 09. ИП0 10. КППВ 11. /-/ 12. x-y 13. КБП9 14. ПП 15. 59 16. КППА 17. x-y 18. КБП9 19. ПП 20. 59 21. КППВ 22. x-y 23. КБП9 24. Fcos 25. ИП1 26. Fexp 27. F1/x 28. /-/ 29. КППС 30. * 31. ИП0 32. Fsin 33. ИП1 34. Fexp 35. F1/x 36. КППС 37. * 38. В/0 39. Fcos 40. ИП1 41. Fexp 42. F1/x 43. КППС 44. * 45. ИП0 46. Fsin 47. ИП1 48. Fexp 49. F1/x 50. /-/ 51. КППС 52. * 53. B/0 54. FBx 55. + 56. 2 57. / 58. B/0 59. ИП1 60. ИП0 61. П1 62. x-y 63. П0 64. B/0.

В регистры памяти вводятся константы 4 П2 9 П3 65 П4 14 П5 19 П6 6 П9 24 ПА 39 ПВ 54 ПС. Переключатель меры углов - в положении Р.

Дополнительный блок для расчета tgz(4) и thz(7).

65. КПП8 66. КБП9 67. ПП 68. 59 69. КПП8 70. x-y 71. КБП9 72. ИП1 73. 2 74. * 75. ПД 76. Fexp 77. F1/x 78. /-/ 79. КППС 80. ИПД 81. Fexp 82. F1/x 83. КППС 84. ИП0 85. 2 86. * 87. Fcos 88. + 89. ПД 90. / 91. ИП0 92. 2 93. * 94. Fsin 95. ИПД 96. / 97. В/0.

Ввод констант: 67 П7 72 П8. При вычислении гиперболических функций регисты 0 и 1 обмениваются содержимым.

Дополнительный блок для расчета expz(4), lnz(7), z2(8 ).

65. ИП1 66. Fsin 67. ИП0 68. Fexp 69. * 70. FBx 71. ИП1 72. Fcos 73. * 74. КБП9 75. ИП1 76. ИП0 77. / 78. Farctg 79. ИП0 80. Fx2 81. ИП1 82. Fx2 83. + 84. Fsqr 85. Fln 86. КБП9 87. ИП1 88. ИП0 89. 2 90. * 91. * 92. ИП0 93. Fx2 94. ИП1 95. Fx2 96. - 97. КБП9.

Ввод констант: 75 П7 87 П8.

После ввода программы и нужного дополнения набираем на клавиатуре В/0 x П0 y П1 кодовое число С/П. Действительная часть результата находится в РХ, мнимая PY. Время вычислений одной функции - меньше 20 секунд.

При использовании второго дополнения можно перевести комплексное число в показательную форму: z=Me**ф. Для этого после вычисления lnz необходимо нажать клавиши Fеxp. М будет в РХ, ф в PY. Эта операция при использовании "МК-61" может быть автоматизирована, для чего в программу второго дополнительного блока вносятся изменения:

75. ПП 76. 82 77. Fln 78. КБП9 79. ПП 80. 82 81. КБП9 82. ИП1 83. ИП0 84. / 85. Ftg-1 (Farctg) 86. ИП0 87. Fx2 88. ИП1 89. Fx2 90. + 91. Fsqr 92. B/0 93. ИП1 94. ИП0 95. 2 96. * 97. * 98. ИП0 99. Fx2 -0. ИП1 -1. Fx2 -2. - -3. КБП9.

Вычислению модуля М и аргумента ф присваивается код 14. Содержимое всех регистров, за исключением Р8, не изменяется. В Р8 записывают 93, а в РЕ - 79.

Вместо функции z2 можно рассчитать 1/z(8 ), внеся в программу изменения:

95. Fx2 96. ИП1 97. Fx2 98. + 99. / -0. /-/ -1. ИП0 -2. FBx -3. / -4. КБП9.

Содержимое регистров памяти не изменяется.

Матчасть диванного танкиста - Страница 4 88020210

Программа А.ТУЛАЙКОВА подсчитывает значения функций sinх, cosx, shx, chx как суммы соответствующих рядов (см. рисунок). В каждом случае она позволяет находить любой из членов ряда, начиная с первого, суммы любого числа членов ряда, начиная с первого или любого другого, прибавлять к уже найденной сумме группу следующих за ней членов в таком же или измененном количестве. Это позволяет, ведя диалог с калькулятором, определить длину ряда N, при которой частичная сумма обеспечивает требуемую точность. Для тригонометрических функций ошибка будет оцениваться величиной a N+i (если аргумент настолько мал, что члены ряда уже начали монотонно убывать). Для гиперболических функций программа дает возможность находить "отрезки" ряда, то есть суммы слагаемых с номерами от (N+1) до (N+k) при разных значениях k. Заметив, что несколько первых цифр "отрезка" стабилизировались, то есть не меняются при наращивании k, можно оценить порядок остатка ряда, начинающегося с номера N, и тем самым определить нужную длину ряда.

00. ИП1 01. Fx2 02. П2 03. КБПА 04. 1 05. П1 06. ИП2 07. ИП1 08. КБПВ 09. /-/ 10. * 11. ИП4 12. ИП5 13. * 14. / 15. П1 16. КБПС 17. ИП3 18. + 19. П3 20. FL0 21. 25 22. С/П 23. ИП6 24. П0 25. КИП4 26. КИП5 27. КИП4 28. КИП5 29. БП 30. 06.

Матчасть диванного танкиста - Страница 4 88020310

Управление программой поясняется таблицей. Вслед за обозначениями слагаемого an и суммы a1+a2+...+am указано, какие числа нужно внести в адресуемые регистры для вычисления той и другой величины; нажатие нужных клавиш выражено знаком "плюс". Вслед за обозначениями дальнейших величин указано, содержимое каких регистров следует обновить и какие клавиши нажать. Назначение регистров памяти: Р3 хранит суммы слагаемых; Р4, Р5 формируют по рекуррентному способу факториалы в знаменателях ап; РА, РВ, PC "включают" или "выключают" нужные адреса программы, следующие за командами косвенных переходов. Для регистров 4, 5, А числа, стоящие над диагональной чертой, соответствуют вычислению косинуса (как тригонометрического, так и гиперболического), под чертой - синуса. В регистр В для вычисления тригонометрических функций вводится 9, гиперболических - 10. При желании достичь повышенной точности несколько первых слагаемых ряда можно получить и просуммировать по методам, изложенным в статье "За рамками индикатора" (10/87).

Программа Е.КАПУСТИНА заинтересует работников нефтебаз, испытывающих трудности при определении объемов горюче-смазочных материалов в различных емкостях, если те не имеют шкал объемов и на них не составлены специальные таблицы.

00. ПС 01. ПА 02. ПВ 03. 0 04. П1 05. П2 06. x-y 07. С/П 08. ИП2 09. Fx!=0 10. 12 11. ИП1 12. + 13. П1 14. ИПС 15. Fx!=0 16. 45 17. ИПВ 18. Fx!=0 19. 60 20. ИП1 21. - 22. П3 23. ИПВ 24. / 25. Farccos 26. 1 27. FBx 28. Fx2 29. - 30. ИПА 31. Fx2 32. * 33. Fsqr 34. ИП3 35. * 36. x-y 37. ИПА 38. * 39. ИПВ 40. * 41. x-y 42. - 43. БП 44. 56 45. Fпи 46. ИП1 47. Fx2 48. * 49. 3 50. / 51. ИПА 52. 3 53. * 54. ИП1 55. - 56. * 57. ИП1 58. БП 59. 06 60. F() 61. ИПА 62. * 63. БП 64. 56

Матчасть диванного танкиста - Страница 4 88020410

Положение переключателя меры углов - Р. Задаем параметры резервуаров - цилиндрического В/0 L ПП R С/П; эллиптического В/0 L ПП а ПП b С/П; сферического В/0 0 ПП R С/П; прямоугольного В/0 L ПП d ПП 0 С/П. После останова, желая вычислить объем жидкости по ее глубине h, набираем эту величину и нажимаем С/П. На индикаторе - значение объема в кубических единицах линейных параметров резервуара. Если желательно работать с программой в режиме калибровки, начиная с высоты h, то после ввода параметров резервуара в Р2 заносится цена деления шкалы высоты Дh, в Р1 - величина h0=h1-Дh (по умолчанию программа принимает h0=0). На индикаторе с каждым нажатием клавиши С/П появляется V(hi); величину hi можно вызвать, нажав клавишу x-y.

Аналогичную программу прислал А.Парсаданов (Баку).

Программа Д.АЛЕКСАНДРОВА отыскивает любой из переменных параметров, входящих в уравнение Менделеева-Клапейрона, если заданы четыре остальных. Перерабатывая ее по просьбе редакции, автор аналогичных разработок Е.ЖУРАВЛЕВ (г.Москва) остроумно применил свойство команды ВП превращать нулевое содержимое регистра X в единицу. В итоге исходная программа сократилась в полтора раза.

00. П1 01. П2 02. П3 03. П4 04. П5 05. П6 06. * 07. * 08. П7 09. ИП1 10. ВП 11. ИП2 12. ВП 13. * 14. ИП3 15. ВП 16. * 17. ИП4 18. ВП 19. ИП5 20. ВП 21. * 22. ИП6 23. ВП 24. * 25. ИП7 26. Fx=0 27. 31 28. + 29. / 30. С/П 31. F() 32. x-y 33. БП 34. 29.

Матчасть диванного танкиста - Страница 4 88020610

Вводим исходные данные В/0 Р ПП V ПП мю ПП m ПП Т ПП R С/П, причем вместо неизвестной величины вводим нуль. Ее значение вычисляется за 5-15 секунд и появляется на индикаторе. Для нового расчета следует повторить ввод данных.

Необходимо следить за размерностями величии.

ХАНОЙСКАЯ БАШНЯ
Передо мной головоломка: три вертикальных стержня на подставке; на одном из них - пирамида из кружков разного размера. Требуется переложить все кружки иа другой стержень, сохранив их порядок. При этом никогда не разрешается больший кружок класть на меньший. Потому-то стержней три: один используется как вспомогательный.

"Ханойская башня" - так называется эта головоломка. Если у вас нет такой, сделайте себе сами. Можно вырезать кружки из картона и обойтись без стержней: просто раскладывать в три кучки.

Матчасть диванного танкиста - Страница 4 88021110

Первые два кружка (см. рисунок) перекладываются легко: верхний, самый маленький, переходит с исходного стержня А на промежуточный В, затем следующий кружок перекладывается на стержень С, где должна в результате оказаться вся пирамида (назовем его конечным), а потом маленький кружок снимается с В и надевается на С. Перекладывая три кружка, мы уже вспоминаем загадку о волке, козе и капусте, потому что приходится возвращать кружок на исходный стержень. Чем больше кружков вовлекается в передвижение, тем сложнее с ними разбираться, и можно окончательно запутаться и даже "зациклиться": обнаружить, что полученное после очередного перемещения положение кружков уже было раньше. Поэтому нужно сначала продумать стратегию решения. Если мы найдем четкий алгоритм, то его можно будет и запрограммировать. Ходы условимся записывать так: А-В; это означает, что верхний кружок перекладывается со стержня А на стержень В.

Ясно, что согласно правилам игры самый большой из уже снятых кружков можно переложить на другой стержень только тогда, когда этот стержень пуст, то есть все меньшие кружки располагаются в виде пирамиды на промежуточном стержне. Будучи оптимистами, предположим, что когда-нибудь наступит и такой момент, когда с исходного стержня можно будет снять последний - самый нижний, самый большой кружок и переложить на конечный стержень С. После этого останется только переложить меньшую на один кружок пирамиду, которая сейчас на стержне В, на стержень С. При этом уже А используется в качестве промежуточного.

Итак, обозначив число кружков по всей пирамиде через N, всю задачу можно разбить на три этапа:
"переложить N-1 верхних кружков с А на В";
"переложить самый большой кружок пирамиды с А на С";
"переложить пирамиду из N-1 кружков с В на С".

Можно заметить, что третий этап - это уменьшенная копия всей задачи. Изменены лишь число кружков и роли стержней. То же самое можно сказать и о первом этапе: ведь можно отвлечься от того, что меньшая пирамида находится не на "голой" подставке, а на большом кружке - его пока не трогаем.

Надеясь запрограммировать всю процедуру перекладывания для ЭВМ, попытаемся перевести ее описание на какой-нибудь язык программирования - например, на Паскаль. Поскольку роли стержней в процессе перекладывания могут меняться, употребим для их обозначения не буквы А, В, С, а другие - X, Y, Z.

Попробуйте буквально перевести наш алгоритм иа Паскаль. Сообразите, как поступить при N=1.

Матчасть диванного танкиста - Страница 4 88020510

Теперь для этой процедуры нужно организовать программные рамки: написать программу, которая вызывает ее самый первый раз, передавая ей в качестве параметра число кружков во всей башне. Чтобы программа могла работать с любыми башнями, предусмотрим ввод числа кружков с дисплея.

Матчасть диванного танкиста - Страница 4 88021010

Проверим вручную, верна ли программа. Пусть в башне 4 кружка. При первом использовании процедуры ПЕРЕЛОЖИТЬ получаем инструкцию:
переложить 3 кружка с А на В; А-С; переложить 3 кружка с В на С.

Расписывая каждое перекладывание трех кружков, получаем инструкцию более пространную:
переложить 2 кружка с А на С; А-В; переложить 2 кружка с С на В; А-С; переложить 2 кружка с В на А; В-С; переложить 2 кружка с А на С.

Наконец, расписывая каждое перекладывание двух кружков, приходим к цепочке
ходов:
А-В, А-С, В-С, А-В, С-А, С-В, А-В, А-С, В-С, В-А, С-А, В-С, А-В, А-С, В-С.

Именно эта последовательность символов появится на дисплее, если задать компьютеру число кружков в башне, равное четырем. Попробуйте сами переложить такую башню согласно приведенной цепочке ходов и убедитесь, что она ведет к успеху.

Буквальный перевод оказался верным. Вот что значит четкий алгоритм!

На этом можно бы поставить точку, но... Не кажется ли вам странным, что процедура в нашей программе вызывает сама себя? Допустимо ли это?

Знаток ответит на подобные вопросы, что процедуры, вызывающие сами себя, известны в программировании и называются рекурсивными. Правда, их можно реализовать не во всех языках программирования, а лишь в достаточно развитых. В Паскале рекурсия разрешена. Выбрав ее для написания программы, мы заранее обеспечили себе удачу: программа получилась короткой и ясной.

Ее работу поясняет рисунок. В продолговатых прямоугольниках - фактические параметры выполняемой в данный момент процедуры (11/87). В прямоугольниках поменьше записаны ходы. Последовательность действий машины указана пунктирными стрелками.

Итак, требуется выполнить процедуру ПЕРЕЛОЖИТЬ (4,А,В,С). Согласно тексту процедуры, она в этом случае начинается с выполнения процедуры ПЕРЕЛОЖИТЬ(3,А,С,В), та - с выполнения процедуры ПЕРЕЛОЖИТЬ(2,А,В,С), та - с выполнения процедуры ПЕРЕЛОЖИТЬ(1,А,С,В).

Задержимся на этом этапе. Когда N=1, выполнение процедуры сводится к перекладыванию кружка с исходного стержня на конечный: X-Z. Иными словами, при выполнении процедуры ПЕРЕЛОЖИТЬ(1,А,С,В) на дисплее появляется А-В.

Вслед за выполненной процедурой (следите за пунктирными стрелками!) в нашей схеме отображен вывод иа дисплей сообщения А-С, а дальше - процедура ПЕРЕЛОЖИТЬ(1,В,А,С). Расшифровываем ее точно так же, как это было описано в предыдущем абзаце и поясняется правым нижним фрагментом схемы: на дисплее появляется В-С. На этом, как указывают пунктирные стрелки, заканчивается выполнение процедуры ПЕРЕЛОЖИТЬ (2,А,В,С). За ней следует вывод на дисплей сообщения А-В.

Как видим, все идет так, как должно идти. Для уверенности можно проследить выполнение программы далее, но это потребует уже более обширной схемы. Цепочка ходов получится та же, что выписана выше.

Попробуйте запрограммировать задачу о "ханойской башне" на Бейсике. Вряд ли вам удастся сделать это столь же просто, как получилось у нас с приведенной программой. И вы лишний раз убедитесь в достоинствах Паскаля.
Л.ИОФФЕ (г.Москва)

ВЫБОР ЭМПИРИЧЕСКОЙ ЗАВИСИМОСТИ
Проведен эксперимент, и в результате получена последовательность точек (x1,y2), (x2,y2) ... (xn, yn). Желательно аппроксимировать ее какой-то функцией.

Бывает, что выбор функции подсказывает физический смысл эксперимента. Но такое случается не часто. Чаще же требуется подобрать функцию, которая была бы возможно ближе к нашей последовательности в данном интервале от x1 до xn и только. Иногда нужно превратить россыпь точек в формулу, которую можно использовать в программе для ЭВМ. В таких случаях от функции совершенно не требуется, чтобы она описывала исследуемый процесс, отражала его физическую суть. Вот тут-то и поможет предлагаемая программа. С ее помощью выбирается эмпирическая зависимость в виде одной из формул:

Матчасть диванного танкиста - Страница 4 88020710

То, о чем было сказано, должен отчетливо представлять себе исследователь, работающий с программой, не ожидая от нее, что подсказанная ею формула окажется математической моделью исследуемого явления.

График исходного массива должен быть монотонным и пролегать над осью абсцисс (в противном случае его надо сдвинуть вверх - от этого его структура не изменится).

Алгоритм, заложенный в программу, таков. В исходном массиве выбираются три точки (x1,y1), (xs,ys), (xn,yn). Вторая выбирается произвольно, в середине интервала или в характерном месте. Каждая из функций, испытываемых для наилучшей аппроксимации, линеаризируется, то есть приводится к виду F(y)=A+BG(x). Так восьмая формула из приведенного перечня становится такой: y**2=А+B*lg(x); здесь F(y)=y**2. G(x)=lg(x). После этого в каждом случае подсчитывается, насколько три исходные точки отклоняются от расположения на одной прямой.

Матчасть диванного танкиста - Страница 4 88020910

Программа выдает 16 чисел E1, Е2, ..., E16, среди которых надо выбрать наименьшее. Индекс этого числа Emin совпадает с номером формулы, обеспечивающей наилучшую аппроксимацию. Параметры А и В можно определить затем методом наименьших квадратов (см. 2/85). Если Еmin резко выделяется из ряда Еi, то соответствующая формула гарантирует отличную аппроксимацию.

00. БП 01. 10 02. В/0 03. КНОП 04. Fx2 05. В/0 06. F1/x 07. В/0 O8. Flg 09. B/0 10. ПП 11. 44 12. ИП1 13. ИП2 14. ИП3 15. ИП4 16. ПА 17. F() 18. ПВ 19. F() 20. ПС 21. F() 22. ПД 23. Сх 24. С/П 25. ПП 26. 44 27. 9 28. П5 29. КМП5 30. П9 31. 4 32. П0 33. ИП9 34. КИП^ 35. - 36. Fx<0 37. 39 38. /-/ 39. С/П 40. FL0 41. 33 42. БП 43. 29 44. П8 45. F() 46. П7 47. x-y 48. П6 49. 4 50. П0 51. 2 52. П9 53. ИП7 54. ИП8 55. ИП6 56. КПП9 57. F() 58. КПП9 59. F() 60. КПП9 61. F() 62. F() 63. - 64. FBx 65. x-y 66. F() 67. - 68. x-y 69. F() 70. / 71. КП^ 72. ИП9 73. 2 74. + 75. FL0 76. 52 77. B/0.

После ввода программы набрать на клавиатуре В/0 y1 ^ ys ^ yn С/П "0" х1 ^ xs ^ xn С/П "E1" С/П "Е2" ... С/П "E16". В кавычках - символы величин, появляющихся на индикаторе. Новый счет начинается с нажатия клавиши В/0. Время получения "0" и "Е1" - около одной минуты, "Еi" - три-пять секунд.

Матчасть диванного танкиста - Страница 4 88020810

Контрольный пример: найдем формулу для аппроксимации таблицы распределения Стьюдента для к степенен свободы при а=0.95 (см. таблицу). Как видно, нам наиболее подходит формула #11. Выбираем функцию t(k,a)=k/(A+B*k).
Г.СЛАВИН (г.Тарту)

1024 СОВЕТА (байт второй)
9. При отладке программы нелишне вставить в ее итерационные участки операторы печати, выводящие на дисплей значения достигнутой точности, параметров цикла и т.д. Многие отладочные операторы стоит оставить и в готовой программе: наблюдая промежуточные данные, можно быть уверенным, что машина не "зависла", а программа не "зациклилась". Кроме того, так веселее ожидать окончательного результата (В.Ванышев. г.Москва).

10. Широко используй библиотеки программ. Плагиат в программировании пока не преследуется (В.Мешков, г.Евпатория).

11. Помни: программы пишутся не только для машины, но и для человека. Поэтому не иди на потерю ясности и наглядности ради экономии нескольких микросекунд, байт. Исключение: вычисления в теле "глубокого" цикла, когда микросекунды могут вылиться в часы. (И.Громов, г.Мытищи).

12. Вывод данных формулируй не в виде эпизодически расставленных операторов PRINT. WRITE и т.п., а в виде выходного файла, с которым затем можно сделать что угодно: вывести на дисплей или принтер, "сбросить" на диск илн ленту. Исключение: участок начального диалога с компьютером. (И.Громов).

13. Односторонний восьмидюймовый гибкий магнитный диск несложно превратить в двухсторонний, проделав сквозь конверт еще одно отверстие для позиционирования диска, симметричное первому (народное средство).

14. Строки программы на
Бейсике, требующие дальнейшей доработки, помечай особым образом: отсутствием пробела после номера строки или комментарием с идеями доработки (К.Костюченко. г.Свердловск).

15. Засидевшись у компьютера, не поленись встать н повесить табличку "Не выключать!" на рубильник, его питающий, дабы уходящие домой аккуратные коллеги ненароком не обесточили машину и не пустили насмарку твой дневной труд (В.Птицын. г.Москва).

16. Развивая и отлаживая программу, не забывай периодически "сбрасывать" полуфабрикаты на внешний носитель. Они могут пригодиться по крайней мере в трех случаях: во-первых, если кто-то случайно обесточит машину; во-вторых, машины имеют дурную привычку "зависать". а в-третьих. к ранним вариантам программы можно вернуться, когда в последних запутался (В.Птицын).

ПРОГРАММА-ТАБЕЛЬЩИК
Недавно у нас на работе ввели гибкий рабочий день. Теперь сотрудники могут приходить на предприятие с 8 до 10 часов и уходить домой с 16 до 19 часов; при этом важно только, чтобы в конце месяца ни у кого не было недоработки. После такого нововведения начальник нашего отдела поручил мне в конце каждой недели давать отчет о балансе рабочего времени каждого сотрудника.

Имея в своем распоряжении ЭВМ "Электроника-60", я составил программу на Паскале (прилагаю ее демонстрационный вариант), которая позволяет рассчитывать фактическое рабочее время за любое количество дней, ежедневный баланс рабочего времени и суммарный за указанное количество дней.

Матчасть диванного танкиста - Страница 4 88021210

В разделе констант в программе заданы номинальная продолжительность рабочего дня, время обеденного перерыва, максимальный размер массивов переменных, линия для изображения таблицы: после выполнения команды WRITELN(LINE,LINE) на экране появляется линия двойной длины.

В разделе переменных: I - счетчик цикла, DAYS - число дней, за которые считаем баланс времени. TIME - двумерный массив времени, каждая строка которого соответствует одному дню, а столбцы с 1 по 5 соответственно началу, окончанию, продолжительности рабочего дня, балансу времени за день и суммарному балансу времени на текущий день. Договоримся о том, что компоненты массива TIME, обозначающие время, будем вводить с клавиатуры и выводить на экран в виде ЧЧ.ММ, где ЧЧ - часы, ММ - минуты, а рассчитывать время будем в минутах, чтобы не ошибиться при округлении чисел. Вводим промежуточные переменные START - время начала в минутах, STOP - время окончания в минутах, LENGTHDAY - продолжительность рабочего дня в минутах, SUMMA - суммарный баланс времени в минутах. Промежуточная переменная SUM нужна для суммирования результатов вычисления. Перед началом расчета присвоим ей значение 0.

В исполнительной части программы делаем следующее:
1. Вводим данные для расчета.
2. Переводим время начала и окончания работы в минуты: отделяем целую часть вещественного числа (часы) с помощью функции TRUNC, умножаем на 60 и складываем с остатком, умноженным на 100 (минуты).
3. Определяем продолжительность рабочего дня в минутах. Хотя результат после умножения на 100 заведомо не содержит значащих цифр после десятичной точки, нужно все-таки преобразовать его в целочисленное значение с помощью функции ROUND, так как далее придется использовать целочисленное деление DIV для вывода времени в часах и минутах. Например: 490 DIV 60 = 8; (490-8*60)/100 = 0.10. Таким образом, 490 минут на экране будут выведены как 8.10.

В конце программы выводим на экран заголовок таблицы, наименования столбцов и результаты расчета.
В.ВАНЫШЕВ (г.Москва)

Структура программы несложна, и в ней нетрудно разобраться, владея сведениями, изложенными в "Школе начинающего программиста" (7,9,11/87). Советуем сделать это тем, кто изучал Паскаль по урокам в нашей "Школе". Просим их также передать более опытным программистам приглашение присылать в редакцию программы, которые, подобно опубликованной, сыграли бы роль упражнений по курсу языка Паскаль, преподанному в "Школе".
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Фев 12, 2023 12:12 am

3/88
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ВОСЕМНАДЦАТОЕ, где завершается рассказ о языке Рапира - точнее, о той его версии, которой оснащены машины "Корвет", устанавливаемые в школьных кабинетах информатики. У нее много общего с версией, разработанной для машины "Агат" (об этом варианте Рапиры шла речь в самом начале предыдущего занятия). В сходных местах предлагаемый ниже рассказ не ограничивается ссылками, а повторяется заново: иначе получилось бы скомкано, неясно, да к тому же повторение - мать учения.
Ведут занятие кандидат технических наук И.Д.ДАНИЛОВ (г.Москва) и кандидат технических наук Ю.А.ПЕРВИН (г.Переславль-Залесский).

На прошлом занятии мы говорили о двух программных конструкциях: СЛЕДОВАНИИ и ЦИКЛЕ. Теперь несколько слов о третьем "ките": ВЫБОРЕ.

... "Если на клетке слона прочтешь надпись "буйвол", не верь глазам своим". Попробуем "перевести" на Рапиру это выдающееся изречение Козьмы Пруткова. Оформим алгоритм в виде процедуры ПРУТКОВ_106 (под таким номером процитированное высказывание фигурирует в "Мыслях и афоризмах")

ПРОИ ПРУТКОВ_106 (ЗВЕРЬ, НАДПИСЬ) НАЧ
- ВЫВОД: "В КЛЕТКЕ СИДИТ", ЗВЕРЬ,
- "НА КЛЕТКЕ НАПИСАНО", НАДПИСЬ
- ЕСЛИ ЗВЕРЬ = НАДПИСЬ
- - ТО ВЫВОД: "ВЕРЬ ГЛАЗАМ СВОИМ" - - ИНАЧЕ ВЫВОД: "НЕ ВЕРЬ ГЛАЗАМ - - СВОИМ"
- ВСЕ
КОН

Если теперь записать оператор

ПРУТКОВ_106("СЛОН", "БУЙВОЛ"), то на экране появится сообщение, совпадающее с выводом великого мыслителя.

Среди служебных слов, употребленных в этом примере, есть уже хорошо знакомые нам: ПРОЦ - стандартный заголовок всякой процедуры и программы, ВЫВОД - служебное слово оператора вывода. Есть и знакомые менее: ЕСЛИ, ТО, ИНАЧЕ, ВСЕ. После первого из них (ЕСЛИ) пишется некоторое условие, после второго (ТО) - оператор, выполняемый при соблюдении условия, после третьего (ИНАЧЕ) - оператор, выполняемый) при несоблюдении условия, а четвертое слово (ВСЕ) завершает нею конструкцию с условием, служит признаком се конца.

Совсем незнакомы нам слово НАЧ и КОН. Относительно них мы должны предупредить читателя: они могут повлечь недоразумения. Запись в начале процедуры слова НАЧ, а в конце се слова КОН была задумана в новой версии Рапиры ради максимального приближения ее к языку для записи алгоритмов изложенному в школьном учебнике "Основы информатики и вычислительной техники". Однако на практике, в версии, реализованной на ЭВМ "Корвет", полагается в конце процедуры писать полностью: КОНЕЦ, а слово НАЧ вообще опускается. Просим учесть это тех, кто захочет выполнить приводимые нами программы и процедуры на машине "Корвет". В конкретных версиях Рапиры читателю могут встретиться и другие расхождения с тем, что он видит в журнальном тексте.

В обсуждавшемся примере использовалась условная конструкция, в каждой ветви которой (после слов ТО и ИНАЧЕ) было по одному оператору. В подобных случаях допускается запись и большего числа операторов. Например, если мы будем решать квадратное уравнение, ax2+bx+c=0.

Д:=В*В-4*А*С
ЕСЛИ Д>0
- ТО X1:=(-B-SQRT(Д))/(2*A)
- Х2:=(-B + SQRT(Д)))/(2*A)
- ВЫВОД: "Х1=", X1, "Х2=", Х2
- ИНАЧЕ ВЫВОД: "УРАВНЕНИЕ ДЕЙ-
- СТВИТЕЛЬНЫХ КОРНЕЙ НЕ ИМЕ-
- ЕТ"
ВСЕ

Читатели, знакомые с нашими предыдущими публикациями, уже знают, что подобные конструкции называются альтернативными операторами. Существует в Рапире и укороченная форма такого оператора, без ветви ИНАЧЕ. В ней после слова ТО также допускается запись произвольного количества операторов.

Условные операторы можно выстраивать в длинные цепочки. Например:

ЕСЛИ ОТМЕТКА=5 ТО ОЦЕНКА:= "ОТЛИЧНО"
- ИНАЧЕ
- ЕСЛИ ОТМЕТКА=4 ТО ОЦЕНКА:=
- "ХОРОШО"
- - ИНАЧЕ
- - ЕСЛИ ОТМЕТКА=3 ТО ОЦЕНКА:=
- - "УДОВЛЕТВОРИТЕЛЬНО"
- - - ИНАЧЕ
- - - ЕСЛИ ОТМЕТКА=2 ИЛИ
- - - ОТМЕТКА=1 ТО ОЦЕНКА:=
- - - "НЕУДОВЛЕТВОРИТЕЛЬНО"
- - - - ИНАЧЕ ВЫВОД: "ОШИБКА В
- - - - НАПИСАНИИ ОТМЕТКИ"
- - - ВСЕ
- - ВСЕ
- ВСЕ
ВСЕ

Одно из условий в нашем примере (ЕСЛИ ОТМЕТКА=2 ИЛИ ОТМЕТКА=1) отличается от других. Собственно говоря, здесь записано не одно, а два условия, связанные словом ИЛИ. Называются такие конструкции УСЛОВНЫМИ ВЫРАЖЕНИЯМИ. Знаками операций в них служат слова И, ИЛИ, НЕ. Цепочку операторов, подобную вышеприведенной, можно написать короче. Для этого в языке существует специальный оператор ВЫБОР. Поясним его.

ВЫБОР
- ПРИ ОТМЕТКА=5: ОЦЕНКА:=
- "ОТЛИЧНО"
- ПРИ ОТМЕТКА=4: ОЦЕНКА:=
- "ХОРОШО"
- ПРИ ОТМЕТКА=3: ОЦЕНКА:=
- "УДОВЛЕТВОРИТЕЛЬНО"
- ПРИ ОТМЕТКА=2 ИЛИ ОТМЕТКА=1
- ОЦЕНКА:="НЕУДОВЛЕТВОРИТЕЛЬНО"
- ИНАЧЕ ВЫВОД: "ОШИБКА В
- НАПИСАНИИ ОТМЕТКИ"
ВСЕ

Описывая в нашей "Школе" общие принципы построения языков программирования, мы отмечали (11/86) существенный недостаток "классического" оператора выбора: при невыполнении ни одного из условий, записанного в нем, ситуация становится неопределенной. Так вот, Рапира от такого казуса избавлена. Возможность записать ветвь ИНАЧЕ после перечисления всех условий делает этот оператор определенным во всех случаях, при любых значениях параметров, записанных в условиях.

Читатель, вероятно, отметил, что при описании Рапиры мы почти всегда обходимся без того, чтобы пояснять выполнение операторов. Они настолько понятны, что при объяснении пришлось бы просто повторять их записи, причем теми же словами. Взять тот же выбор. Пояснить его действие ив нашем примере можно было бы так. При значении переменной ОТМЕТКА, равном 5, переменной ОЦЕНКА присваивается значение "ОТЛИЧНО". При значении переменной ОТМЕТКА, равном 4, переменной ОЦЕНКА присваивается значение "ХОРОШО" и так далее. "Виной" предельной ясности, конечно, и знакомая лексика, и (наверное, это главное) четкая продуманность структур, и максимальное их приближение к обычному "человеческому" языку.

Пожалуй, в наибольшей степени эти достоинства проявляются при работе с различными типами и структурами ленных. Мы уже упоминали, что в Рапире существуют три типа данных: числовые целые, числовые приближенные [В большинстве языков программирования эти данные называются "вещественными". Такое название вряд ли можно признать удачным. В математике термин "вещественное число" употребляется в качестве альтернативы понятию комплексного числа. Чтобы избежать путаницы, в Рапире говорят "приближенное" там, где на другом языке программирования говорят "вещественное". Определенный резон в этом есть. При вычислениях с целыми числами результат любой арифметической операции (кроме деления) всегда точен, если умещается в разрядную сетку данной ЭВМ. При работе с нецелыми числами он верен лишь в пределах ограниченного числа разрядов, то есть является приближенным. Отсюда и название этих чисел в Рапире. По мнению авторов, оно тоже не очень удачно. Почему бы не называть эти числа просто дробными или нецелыми?] и текстовые.

Для работы с числовыми переменными в дополнение к четырем действиям арифметики определена операция возведения в степень. Она обозначается двумя звездочками ** и позволяет, например, записать в одном из предыдущих наших примеров дискриминант квадратного уравнения в виде Д=В**2-4*А*С. И еще две операции: деление нацело // и остаток от деления нацело /%. Например, 7//3=2 и 7/%3=1.

Тип переменной определяется типом ее значения. Скажем, после выполнения оператора А:=1 переменная А рассматривается как целая. Но после выполнения оператора А:=1.5 та же переменная становится приближенной.

Значениями переменных текстового типа могут быть любые последовательности символов. Чтобы присвоить такой переменной текстовую константу, нужно ограничить соответствующий текст кавычками. Имя переменной, как и в предыдущих случаях, может быть любым. Например,

ЯЗЫК:="РАПИРА"

Возможности для манипуляций с текстами в Рапире огромны, а реализуются они довольно просто. Если потребовалось, скажем, подсчитать количество символов в значении текстовой переменной, то перед ее именем достаточно поставить знак #. Так оператор

ВЫВОД: #ЯЗЫК

приведет к появлению на экране числа 6. (Кавычки в число символов не входят. Если же нужно использовать кавычки как часть текста, то нужно их удвоить, то есть набрать "").

Текстовые переменные можно складывать. Результат - новое значение, составленное из "слагаемых". Например, после выполнения операторов

А:="КОН";
В:="ТЕКСТ";
С:=А+В

значением переменной С будет "КОНТЕКСТ". Не нужно доказывать, что здесь при перемене порядка слагаемых сумма меняется.

Последовательность символов, составляющих значение текстовой переменной, является упорядоченной. Каждый из символов этой последовательности имеет свой порядковый номер, называемый индексом. По этим индексам можно извлекать отдельные символы. Например, А[2] равно "О", а (А+В)[5] равно "Е". Можно с помощью индексов вырезать части текста. Так оператор

ВЫВОД: ЯЗЫК[3:5]

выведет на экран: "ПИР".

С помощью индексов допускается замени символов внутри текста. Для этого переменную с индексами нужно записать в левой части оператора присваивания.


А[1]:="Т"; ВЫВОД: A

На дисплее появится: ТОН

Рассмотрим теперь более сложную цепочку операторов:

УЧЕНИК:="ШКОЛЬНИК"; УЧЕНИК
[# УЧЕНИК]:="Ц"; УЧЕНИК:=
УЧЕНИК + "А"

Они преобразуют содержимое переменной УЧЕНИК в текст "ШКОЛЬНИЦА".

Для работы с текстами предусмотрена еще и специальная форма условия, употребляемая в условных операторах. Речь идет о проверке принадлежности данного символа данному тексту.

Например, условие "Б" ИЗ А, где А взято из предыдущего примера, ложно, так как в тексте нет ни одной буквы "Б". С помощью "проверки принадлежности" можно легко установить структуру текста, в частности выяснить, состоит ли он из одного или нескольких слов. Если в тексте есть хотя бы один пробел, значит, слов в нем явно больше одного. Соответствующий фрагмент программы может выглядеть так:

ЕСЛИ " " ИЗ ТЕКСТ
- ТО ВЫВОД: "ТЕКСТ СОСТОИТ ИЗ
- НЕСКОЛЬКИХ СЛОВ"
- ИНАЧЕ ВЫВОД: "В ТЕКСТЕ ТОЛЬКО
- ОДНО СЛОВО"
ВСЕ

На предыдущем занятии мы упомянули про удобные средства циклического перебора символов текста. Для этой цели используется специальная форма оператора цикла. С ее помощью подсчет букв "Р" в тексте НА ГОРЕ АРАРАТ РАСТЕТ КРУПНЫЙ ВИНОГРАД, записанном в переменную А, организуется так:

СУМ:=0
ДЛЯ БУКВА ИЗ А
НЦ
- ЕСЛИ БУКВА="Р"
- ТО СУМ:=СУМ+1 ВСЕ
КЦ

Дополнив эту программу оператором

ЧАСТОТА:=СУМ/#А

мы получим возможность выяснить частоту появления буквы "Р" в тексте.

Перечисленные возможности открывают широкий простор для работы с текстами. Можно выяснить наличие в них каких-либо символов, частоту появления как отдельных букв, так и слов, можно решить многие другие вопросы, возникающие при обработке текстов, и во многих случаях поручить такую обработку машине.

Хотя текстовые переменные являются разновидностями простых переменных, читатель наверняка заметил их принципиальное отличие от числовых собратьев. Если последние характеризуются неделимым значением, то есть без специального программного фрагмента, мы не можем выделить из них отдельные цифры или группы цифр, то текстовые переменные позволяют добраться до каждого элемента текста. Иначе говоря, текстовую переменную в Рапире можно рассматривать как структуру, состоящую из упорядоченных элементов.

Возможность объединять данные в структуры, то есть оперировать одновременно как совокупностью данных, так и отдельными их составляющими, является одним из важнейших критериев "мощности" языка - ведь тогда с помощью простых языковых средств можно решать широкий круг разнообразных задач. Используемая в Рапире структурная единица КОРТЕЖ выдвигает этот язык на одно из ведущих мест в алгоритмическом мире. Сам по себе этот термин употребляется в программировании нечасто. Во всяком случае, его можно найти не в каждом словаре по вычислительной технике. Правда, этот термин знаком специалистам, занимающимся базами данных, но мы-то обращаемся как раз к неспециалистам, поэтому к аналогиям из теории баз данных прибегать не будем.

Напомним: кортежем в Рапире называют упорядоченную структуру из элементов произвольного типа. Как и для других переменных, предварительно описывать тип переменной при этом не требуется. Кортеж задается перечислением своих элементов, окаймленным специальными уголковыми скобками: < и >. Например,

СВЕТОФОР:=<"КРАСНЫЙ", "ЖЕЛТЫЙ", "ЗЕЛЕНЫЙ">

Таким образом задан кортеж, состоящий из трех текстовых элементов. Еще пример:

НОМИНАЛ:=<1,3,5,10,15,20,50>

В этом кортеже записаны целые числа, допустимые номиналы монет. Максимальное число элементов кортежа не задается. Однако всегда можно узнать, сколько элементов содержит кортеж,- как говорят программисты, определить мощность кортежа. Это делается с помощью операции #. Так #СВЕТОФОР=3, #НОМИНАЛ=7. Отдельный элемент можно извлечь из кортежа так же, как извлекают элемент массива в Бейсике или в той же Рапире - элемент текста. Например, СВЕТОФОР[2]="ЖЕЛТЫЙ", НОМИНАЛ[4]=10.

Из кортежа можно делать вырезки. К примеру, оператор

НОМ:= НОМИНАЛ[2:5]

формирует новый кортеж

НОМ=<3,5,10,15>

Рассмотренные примеры кортежей принципиально не отличались от массивов, с которыми мы встречались в Бейсике: они состояли из элементов одного типа. Если и были отличия, то лишь количественные. Следующий пример проиллюстрирует отличие качественное.

Понадобилось, скажем, записать сведения о школьнике: фамилия, имя, год рождения, наличие значка ГТО. Это можно сделать в виде кортежа:

<"СИДОРОВ", "ПЕТЯ", 1977, "ДА">

Но сведения об одном школьнике малоинтересны, нужно записать информацию о группе ребят, например, классе. И это можно сделать с помощью кортежа, элементами которого будут тоже кортежи. Назовем переменную, содержащую сведения о классе СПИСОК. Она может иметь такой вид:

СПИСОК:=<<"СИДОРОВ", "ПЕТЯ", 1977, "ДА">,
<"УВАРОВ", "ДИМА", 1977 "НЕТ">,
<"КОТОВ", "САША", 1978, "ДА">>

Естественно, список можно продлить.

Что же тут качественно нового? Отметим два момента.

Первое. Элементами одного и того же кортежа могут быть величины разных типов, у нас - числа и тексты. Этого в Бейсике нет. И второе, вытекающее из первого. Элементом кортежа может быть кортеж. Именно это обстоятельство позволило нам создать список учеников.

А как им пользоваться?

Чтобы получить все сведения об одном школьнике, нам достаточно извлечь соответствующий элемент кортежа. Например: СПИСОК[2] содержит всю информацию о Диме Уварове. Элемент СПИСОК[3][3] (его можно записать и так: СПИСОК [3,3]) позволит определить год рождения Саши Котова. Иначе говоря, кортеж, состоящий из кортежей, может рассматриваться как матрица.

Для кортежа существуют специальные операторы цикла, аналогичные тем, что мы применяли для работы с текстами. С помощью такого оператора легко составить программу, печатающую фамилии и имена всех ребят, сдавших нормы ГТО.

ДЛЯ УЧЕНИК ИЗ ГРУППА
НЦ
- ЕСЛИ УЧЕНИК[4]="ДА"
- - ТО ВЫВОД: УЧЕНИК[1], " ",
- - УЧЕНИК[2]
- ВСЕ
КЦ

Из этого примера видно, как с помощью кортежей можно создавать информационно-справочные системы. С помощью кортежей легко моделируются и многомерные массивы, причем не обязательно, чтобы все строки этих массивов были равной длины. Например, кортеж

МАТРИЦА:=<<1,3,5,7>, <2,4,6>,
<11,12,13,14,15>>

формирует матрицу, у которой первая строка состоит из 4 элементов, вторая - из трех, а третья - из пяти.

Разговор о языке мы начали с краткого знакомства с процедурами. Однако это понятие настолько важно для Рапиры, что мы снова вернемся к нему и поговорим о некоторых специфических особенностях процедур. Читатель уже знает, что у процедуры могут быть параметры. В рассмотренном на прошлом занятии примере процедуры, печатающей объявление о школьном вечере, параметром была дата. В заголовке мы писали: ИЗВЕЩЕНИЕ1(ДАТА), а потом, при обращении к процедуре, подставляли на место параметра ДАТА конкретное значение, например, ИЗВЕЩЕНИЕ1 ("5 НОЯБРЯ 1987 ГОДА").

Параметр, употребленный в первом случае, называют ФОРМАЛЬНЫМ, во втором случае - ФАКТИЧЕСКИМ. Формальные параметры в Рапире бывают ВХОДНЫЕ и ВЫХОДНЫЕ. Входные - те, что задаются перед началом работы процедуры, выходные - те, что получают свои значения после окончания ее работы. При описании процедуры указывают принадлежность параметра к тому или иному типу. Делается это (впрочем, как и все в Рапире) простым и наглядным образом; перед именем входного параметра ставится своеобразная стрелка =>. Тот же знак применяется для пометки выходного параметра, только записывается после него.

Вновь обратимся за примером к Козьме Пруткову. Четвертый афоризм мыслителя гласит: "Нет столь великой вещи, которую не превзошла бы величиною еще большая. Нет вещи столь малой, в которую не вместилась бы еще меньшая".

Так как "великость" вещи можно записать в виде числа, то задача, которую мы будем решать, может быть сформулирована так. Для двух данных чисел найти такие числа, чтобы одно из них было больше наибольшего из исходной пары, положим, вдвое, а второе - во столько же раз меньше меньшего.

Назовем процедуру ПРУТКОВ_4.

ПРОЦ ПРУТКОВ_4(=>ПЕРВАЯ, =>ВТОРАЯ, МЕНЬШАЯ=>, БОЛЬШАЯ=>)
НАЧ
- ЕСЛИ ПЕРВАЯ>ВТОРАЯ
- - ТО БОЛЬШАЯ:=ПЕРВАЯ*2:
- - МЕНЬШАЯ:=ВТОРАЯ/2
- - ИНАЧЕ БОЛЬШАЯ:=ВТОРАЯ*2;
- - МЕНЬШАЯ:=ПЕРВАЯ/2
- ВСЕ
КОН

У внимательного читателя может возникнуть вопрос: а почему в процедуре ИЗВЕЩЕНИЕ1 параметр ДАТА не сопровождался стрелочкой? Дело в том, что входные параметры в процедурах используются чаще, чем выходные (в процедуре ИЗВЕЩЕНИЕ1, к примеру, выходных параметров вообще нет), поэтому для них действует правило умолчания: если около параметра нет стрелочки, то он считается входным. Выходной же параметр должен быть обязательно отмечен.

Есть и еще один тип параметров - ВОЗВРАТНЫЙ. Его иногда называют входной-выходной. Он получает некоторое значение, когда процедура начинает выполняться, и меняет его в ходе выполнения процедуры. Такой параметр помечается двумя стрелками - перед именем и после него.

Рассмотрим пример чисто вычислительный. Предположим, для некоторой программы (игровой, например) нам нужно вычислять скорость объекта и его расстояние от старта. Объектом может быть, скажем, гоночный автомобиль или космический корабль. Эти характеристики нужно определять после того, как объект в течение Т секунд двигался с ускорением А. Из физики известно, что скорость V и расстояние S при равноускоренном движении определяются по формулам:

V = V0 + AT
S = S0 + (V + V0)T/2

Процедура ХОД, вычисляющая эти параметры, запишется так:

ПРОЦ ХОД (=>А, =>Т, =>S=>,
=>V=>)
НАЧ
- V1:=V+A*T;
- S:=S+(V+VI)*Т/2; V:=VI
КОН

Эта процедура отличается от предыдущих не только "обилием" расчетов. В ней появляется переменная, не фигурирующая в списке формальных параметров. Это - величина V1. Для процедуры она вспомогательная, используется, чтобы запомнить вычисленное значение конечной скорости и затем "приписать" его возвратному параметру V. Внешне безобидное появление новой переменной в описании процедуры может стать опасным для работы программы, где используется процедура ХОД. Представим себе, к примеру, такой фрагмент программы:

V1:=5; ХОД(=>УСК, =>ВРЕМЯ,
=>ПУТЬ=>, =>СКОР=>);
Р:=V1*2

Для определенности положим, что УСК=2, ВРЕМЯ=3, ПУТЬ=10, СКОР=5. Легко подсчитать, что после окончания работы фрагмента переменные СКОР и ПУТЬ примут соответственно значения: 11 и 34. А переменная Р? Ее значение вместо ожидаемого 10 будет равно 22. Причина этого - изменение значения переменной при работе процедуры ХОД. Представляете, насколько это неудобно? Особенно, если составляется большая программа, использующая целый ряд процедур, написанных разными авторами. Ведь неизвестно, какие вспомогательные переменные использованы при написании процедур.

Чтобы избежать подобных казусов, в Рапире предусмотрена возможность разделить переменные, используемые в процедуре, на СВОИ и ЧУЖИЕ. СВОИ являются ЛОКАЛЬНЫМИ для данной процедуры. Это значит, что изменение их значений не распространяется вовне. Если в программе имеются переменные с такими же именами, то процедура сохраняет эти значения в "первозданном" виде. ЧУЖИЕ же переменные в теле процедуры могут изменять свои значения.

Имена переменных обоих типов перечисляются после слов СВОИ или ЧУЖИЕ, проставляемых сразу после заголовка процедуры.

Так, в нашем примере, чтобы избежать недоразумений, следует после первой строки вставить:

СВОИ: V1

В этом случае после выполнения фрагмента значение переменной V1 в главной программе не изменится и величина Р примет ожидаемое значение 10.

Слово ЧУЖИЕ писать не обязательно. Все переменные процедуры (кроме формальных, разумеется), не описанные после слова СВОИ, по умолчанию подразумеваются чужими.

Среди многообразия процедур, используемых в алгоритмических языках, обычно выделяют процедуры, вырабатывающие в результате своей работы лишь один результат. Такие процедуры называют ФУНКЦИЯМИ. Есть подобные структуры и в Рапире. Их описание мало отличается от описания обычных процедур. Только в заголовке стоит слово ФУНК, и в теле такой процедуры обязательно содержится хотя бы один оператор ВОЗВРАТ. После него записывается выражение, значение которого и передается в вызывающую программу в качестве значения процедуры.

Например, если нужно описать функцию, вырабатывающую в качестве результата максимум из двух чисел, то это можно сделать так:

ФУНК МАКС(А, В)
НАЧ
- ЕСЛИ А>В
- - ТО ВОЗВРАТ:А
- - ИНАЧЕ ВОЗВРАТ:В
- ВСЕ
КОН

Еще одно отличие. Процедуры по характеру своего использования напоминают операторы. Функции же обычно используются как части арифметических выражений. Например:

С:=МАКС(А, В)*2

Нетрудно сообразить, что все параметры, используемые при вычислении значения функции,- входные. Поэтому описывать их специально нет необходимости.

Кроме функций, которые описывает программист, в Рапире имеются стандартные функции, описанные в самом трансляторе. Здесь и "дежурные" тригонометрические, логарифмические и экспоненциальные функции. Есть функция целой части числа: ЦЕЛЧ(X). Есть и датчик псевдослучайных чисел: ДСЧ( ). Параметра у этой функции нет, а результатом является случайное число из диапазона [0,1].

Никакой современный алгоритмический язык немыслим без диалога. В Рапире диалог осуществляется с помощью операторов ввода и вывода. Реализация вывода была уже показана на множестве примеров. Теперь несколько слов о вводе. Оператор ввода имеет вид:

ВВОД: список переменных

Когда такой оператор встречается при выполнении программы, работа по ней приостанавливается и на экране дисплея появляется символ *. Компьютер ждет, пока человек введет с клавиатуры значения требующихся переменных. После окончания ввода надо нажать клавишу "Выполнение". Программа продолжит свою работу, причем первой ее операцией будет присваивание введенных значений переменным, перечисленным в списке.

Приведенный ниже текст процедуры иллюстрирует использование операторов ввода и вывода. Процедура УГАДАЙ моделирует хорошо известную игру, когда человеку предлагается отгадать некоторое число. Число это задумывает машина. Диапазон загадываемых величин (точнее его верхнюю границу) задает сам пользователь. Компьютер с помощью датчика случайных чисел "задумывает" число. Игрок пытается его угадать, вводя для этого с клавиатуры разные числа. Если введенное число меньше задуманного, то машина выводит на экран сообщение "МАЛО", в противном случае - "МНОГО". Когда число угадано, на экран выдается текст: "ВЫ УГАДАЛИ. ЗАДУМАНО ЧИСЛО" и значение самого числа.

ПРОЦ УГАДАЙ
СВОИ: ОТВЕТ, МАКС, ЧИСЛО, РЕЗ
НАЧ
- ОТВЕТ:="Д"
- ПОКА ОТВЕТ="Д"
- НЦ
- - ВЫВОД: "КАКОЕ НАИБОЛЬШЕЕ
- - ЧИСЛО МОЖНО ЗАДУМАТЬ?"
- - ВВОД: МАКС
- - ЧИСЛО:=ЦЕЛЧ(ДСЧ()*
- - (МАКС- 1))+1; РЕЗ:=0
- - ПОКА РЕЗ/=ЧИСЛО
- - НЦ
- - - ВЫВОД: "ВАШЕ ЧИСЛО?"
- - - ВВОД: РЕЗ
- - - ЕСЛИ РЕЗ<ЧИСЛО ТО ВЫВОД:
- - - "МАЛО* ВСЕ
- - - ЕСЛИ РЕЗ>ЧИСЛО ТО ВЫВОД:
- - - "МНОГО" ВСЕ
- - КЦ
- - ВЫВОД: "ВЫ УГАДАЛИ.
- - ЗАДУМАНО ЧИСЛО". ЧИСЛО
- - ВЫВОД: "ХОТИТЕ ПРОДОЛЖАТЬ
- - (Д/Н)?"
- КЦ
- ВЫВОД: "ИГРА ЗАКОНЧЕНА"
КОН

Разберите эту программу. Обратите внимание на использование операторов ввода и вывода, циклов ПОКА. Кстати, в программе отсутствуют комментарии. Текст ее настолько "прозрачен" (особенность Рапиры!), что понятен и без примечаний. А вообще комментарий в Рапире ввести очень просто: это произвольный текст, записанный в любом месте программы и ограниченный слева символами (*, а справа - символами *). Например: (* ЭТО КОММЕНТАРИИ *).

Программа написана и введена в память компьютера. Можно начинать работать с ней. Она будет в памяти до тех пор, пока машина включена. А если нужно работать с ней завтра или через месяц?

После окончания ввода программы транслятор проверяет ее правильность и, если ошибок нет, выводит на дисплей вопрос:

ЗАПИСЫВАТЬ В ДЗУ?

ДЗУ - это долговременное запоминающее устройство, то есть магнитная лента или гибкий диск. При положительном ответе ДА программа автоматически записывается на существующее ДЗУ. Теперь она существует в виде программного ФАЙЛА с тем же именем, что и набранная процедура. Чтобы вызвать ее из ДЗУ, достаточно набрать на клавиатуре:

ВВОД ИЗ ДЗУ: имя процедуры

Программа вновь доступна для работы.

Файлы можно использовать не только для хранения программ. В них можно хранить и данные. Трудно переоценить значение этого факта. И дело не в том, что в файл можно записывать массивы информации, превосходящие объемом емкость оперативной памяти, хотя и это важно. Главное, можно сколь угодно долго сохранять информацию, обновлять ее и, естественно, оперативно использовать. Без файлов немыслимы ни электронные записные книжки, ни всевозможные каталоги, ни... Короче говоря, немыслимо активное хранение и использование информации.

Файл данных можно уподобить холодильнику. Чтобы загрузить туда продукты, то бишь информацию, файл нужно открыть. После окончания загрузки закрыть, чтобы информация не "испортилась". Правда, на этом аналогия кончается. Доставая продукты из холодильника, мы физически передвигаем их, то есть что из холодильника достали, того в нем уже нет. При считывании информации из файла мы получаем лишь копию данных. Сама информация остается в файле. Ее можно уничтожить, только уничтожив сам файл. Еще одно различие. Открыть холодильник можно, только если он есть. Открывая файл, мы можем тем самым создать его.

Работать с файлами в Рапире помогают специальные операторы. Начнем их рассмотрение с оператора открытия файла. Его форма:

ОТКРЫТЬ ФАЙЛ имя файла

или

ОТКРЫТЬ имя файла

Если файл с таким именем существует, то после выполнения оператора данные, содержащиеся в этом файле, делаются доступными для пользователя. Если же файла нет, то он создается и в него можно записывать информацию.

Закрывают файл оператором:

ЗАКРЫТЬ ФАЙЛ имя файла

Слово ФАЙЛ, как и в предыдущем операторе, употреблять не обязательно.

Заносит (выводит) данные в файл оператор, очень похожий на обычный оператор вывода.

ВЫВОД В ФАЙЛ имя файла:

Считывается информация оператором:

ВВОД ИЗ имя файла:

Покажем работу с файлами на простых примерах. Допустим, нам понадобилось составить список членов спортивной секции. Запишем для этого такую процедуру:

ПРОЦ ЗАПИСЬ
НАЧ
- ОТВЕТ:="Д"
- ОТКРЫТЬ СПИСОК
- ПОКА ОТВЕТ="Д"
- НЦ
- - ВЫВОД: "ВВЕДИТЕ ФАМИЛИЮ И
- - ИМЯ СПОРТСМЕНА"
- - ВВОД: ИМЯ
- - ВЫВОД В СПИСОК: ИМЯ
- - ВЫВОД: "СПИСОК ИСЧЕРПАН
- - (Д/Н)?"
- - ВВОД: ОТВЕТ
- КЦ
- ЗАКРЫТЬ СПИСОК
КОН

Эту процедуру можно использовать не только для начального заполнения нового списка, но и для дополнения уже существующего.

Каждая новая запись располагается за последней, введенной до нее. Поэтому при работе с существующим файлом новые записи попадают в его конец. В таком же порядке записи и считываются из файла.

После самой последней записи транслятор ставит специальный признак конца файла. Специальная функция КФ (конец файла) принимает значение "Д", то есть "да", когда все данные из файла считаны. С ее помощью процедура, печатающая только что созданный список, может быть записана так:

ПРОЦ ПЕЧАТЬ
НАЧ
- ОТКРЫТЬ СПИСОК
- ПОКА КФ(СПИСОК)/="Д"
- НЦ
- - ВВОД ИЗ СПИСОК: ИМЯ
- - ВЫВОД НА ПЕЧАТЬ: ИМЯ
- КЦ
КОН

Часто бывает необходимо не просто записать что-нибудь в файл или считать его содержимое, но и изменить ту или иную запись, переписать файл в упорядоченном виде (например, по алфавиту) и т.д. Для этого пишут специальные программы. В результате их работы из старого файла создается новый. Старый же файл можно стереть, чтобы он не занимал места в ДЗУ. Для стирания используется оператор:

СТЕРЕТЬ ФАЙЛ имя файла

Как и в предыдущих конструкциях, слово ФАЙЛ в операторе писать не обязательно.

Наше знакомство с Рапирой подошло к концу. Надеемся, что читатели, "побывавшие" на наших занятиях, получили представление о языке, которому, очевидно, суждено стать основным для обучения школьников основам программирования. Конечно, наша информация не претендует на полноту. Поэтому тем, кто захочет получше познакомиться с Рапирой, можно дать такой совет. Садитесь за пульт персонального компьютера, загрузите кассету с Рапирой и начинайте работать. Ибо лучший способ научиться программированию - начать программировать.

ПЕРЕКИНЬ МОСТИК
В этой игре каждый из двух партнеров стремится связать непрерывной линией противоположные стороны доски (см. рисунок). Участники поочередно соединяют в любом ее месте вертикальным или горизонтальным отрезком две соседние точки своего цвета. Ни один отрезок одного партнера не должен пересекаться ни с каким отрезком другого. Дорожки, постепенно возникающие из этих отрезков, могут разветвляться, обрываться, пока у кого-то из партнеров одна из ветвей не протянется без разрывов от одной стороны доски до другой.

Матчасть диванного танкиста - Страница 4 88030110

Сильным партнером в этой игре может стать калькулятор "Б3-34", если ввести в него такую программу:

00. ПД 01. F() 02. ПС 03. F() 04. ПВ 05. F() 06. ПА 07. ИПВ 08. ИПД 09. - 10. Fx!=0 11. 14 12. 1 13. 4 14. П1 15. ИПА 16. ИПВ 17. - 18. 1 19. + 20. Fx!=0 21. 57 22. ИПС 23. ИПД 24. - 25. 1 26. + 27. Fx!=0 28. 85 29. Fx>=0 30. 37 31. ИП1 32. 7 33. 1 34. + 35. П7 36. КБП7 37. ИП1 38. 4 39. 3 40. + 41. П7 42. КБП7 43. ИПД 44. 1 45. - 46. ПВ 47. ПД 48. ИПС 49. 1 50. + 51. ПС 52. 2 53. - 54. ПА 55. БП 56. 97 57. ИПД 58. 1 59. - 60. ПВ 61. 2 62. + 63. ПД 64. ИПА 65. 1 66. - 67. ПА 68. ПС 69. БП 70. 97 71. ИПВ 72. 1 73. + 74. ПВ 75. ПД 76. ИПА 77. 1 78. + 79. ПС
80. 2 81. - 82. ПА 83. БП 84. 97 85. ИПВ 86. 1 87. + 88. ПД 89. 2 90. - 91. ПВ 92. ИПС 93. 1 94. + 95. ПА 96. ПС 97. С/П.

Каждый ход игрока (не только первый) заносится в машинку в виде координат двух точек - начала и конца отрезка, после чего нажимаются клавиши В/0 С/П. Например, чтобы соединить точки с координатами 4,5 и 4,7, нужно набрать 4 ^ 5 ^ 4 ^ 7 В/0 С/П. Через 15 секунд на индикаторе появится содержимое регистра А, соответствующее координате X1 ответного хода. Остальные координаты - Yl, X2, Y2 - хранятся соответственно в РВ, PC, РД.

Программа построена так, что координаты точек нужно вводить в калькулятор по возрастанию, то есть должны выполняться условия X1<=X2. Y1<=Y2. Калькулятор не анализирует правильность ходов человека, но на бессмысленные ходы он будет выдавать бессмысленные ответы. Первый ход в каждой партии принадлежит калькулятору, и этот ход всегда одинаков: из точки 2,1 в точку 2,3. Калькулятор его не выдает - его просто нужно сразу нанести на игровое поле.

На рисунке показан ход одной из партий - она может послужить контрольным примером. Ходы микрокалькулятора изображены пунктирными линиями. Они свидетельствуют: выиграла машина.

Структура программы проста: 00-06 - запись хода человека в регистры памяти; 07-36 - логическая часть (анализ этого хода); 37-97 - арифметическая часть (вычисление хода калькулятора; думаю, знатокам будет интересно разобраться, по какому алгоритму он вычисляется).

Возможно, кому-то удастся составить такую программу, где право первого хода не будет принадлежать калькулятору.
П.ШМУКЛЕР (г.Хабаровск)
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пн Фев 13, 2023 12:24 am

4/88
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Первый из авторов письма, открывающего нынешний выпуск раздела,- офтальмолог, профессор Харьковского института усовершенствования врачей. Второй - его аспирантка. Третий - инженер Физико-технического института низких температур АН УССР.
"Надеемся,- пишут авторы письма,- что представленная нами программа заинтересует как медиков, так и математиков и побудит их к более тесному сотрудничеству в использовании микрокалькуляторов и компьютеров для диагностики различных заболеваний".
Работа харьковских исследователей обнадеживает в гораздо более широком смысле. Все мы наслышаны о широчайших возможностях современных компьютеров. Но в своих конкретных делах мы далеко не всегда видим возможности для применения вычислительной техники. Даже тогда, когда этого требуют обстоятельства, нам кажется, что предстоящие расчеты окажутся сложными, долгими. А между тем такую ясную методику порой удается отыскать для анализа проблемы с помощью компьютера! Стоит только привлечь и делу вдумчивого программиста, найти с ним общий язык, суметь изложить ему суть дела...
Письмо из Харькова - изящный и убедительный тому пример, каким бы простым он ни казался.

ТРИ ШАГА
Одна из причин косоглазия - паралич глазных мышц, в частности тех, которые поворачивают глаза вправо и влево. Какая именно из этих мышц парализована, офтальмолог может выяснить с помощью теста "три шага". Сначала пациенту предлагается посмотреть на врача (первый шаг), потом - повернуть голову направо и налево (второй шаг), потом - наклонить ее направо и налево до плеча (третий шаг); делая все эти движения пациент не сводит взгляда с врача. На каждом шагу определяется, какой из глаз, правый или левый, слушается хуже. Затем по таблицам в зависимости от ответов определяется парализованная мышца.

Под впечатлением материалов, публикуемых в разделе "Человек и компьютер", мы решили облегчить эту задачу с помощью программируемого микрокалькулятора. Реакцию пациента на просьбы врача естественно вводить в виде единицы со знаком: не слушается правый глаз - плюс единица, не слушается левый - минус единица. Парализованные мышцы столь же естественно занумеровать целыми числами (см. рисунок). Но как набор исходных единиц со знаком превратить в номера мышц?

Матчасть диванного танкиста - Страница 4 88041010
Мышцы: ПНК - правая нижняя косая, ЛНП - левая нижняя прямая, ЛВК - левая верхняя косая. ПВП - правая верхняя прямая, ЛВП - левая верхняя прямая, ПВК - правая верхняя косая, ПНП - правая нижняя прямая, ЛНК - левая нижняя косая.

Обозначим результаты опроса на каждом шагу через А, В, С соответственно, а номер мышцы - через X. Попробуем выразить его в виде простейшей функции - линейной комбинации исходных чисел: Х=аА+bB+cС. Какими же должны быть весовые коэффициенты a, b, c, чтобы X при каждом наборе А, В, С выражался целым числом, притом так, чтобы разным наборам соответствовали разные значения X?

Помог анализ графического изображения теста "три шага": реакции пациента однозначно выражаются ветвями графа, идущими либо направо, либо налево. Чтобы по этим ветвям прийти в точки с целочисленными координатами, равными по абсолютной величине от 1 до 4, очевидно, следует придать числу А вес 2.5; числу В - вес 1; числу С - вес 0.5:

X=(5А+2В+С)/2

Формула однозначно диктует расчетный алгоритм.

Вот программа [Программа, присланная в редакцию харьковскими исследователями, составлена для микрокалькулятора "Б3-21". В редакции она была "переведена" на систему команд более распространенного микрокалькулятора "Б3-34"] для микрокалькулятора "Б3-34":

00. ПА 01. ПВ 02. ИПВ 04. 05. + 06. + 07. ИПА 08. 5 09. * 10. + 11. 2 12. / 13. С/П.

Работать с программой очень просто: набрать на клавишах В/0 А ПП В ПП С С/П, и на индикаторе появляется номер парализованной мышцы. Например, в случае паралича ПНП-мышцы исходные данные имеют вид А=1, В=1, С=-1, и на индикаторе возникает 3.

Столь простой и логичный путь от замысла к формуле, каким он выглядит в нашей заметке, на деле был довольно извилистым. Сначала мы испробовали формулу Х=А+В+С, но она охватывала только шесть конечных состояний, и при разных наборах аргументов значения функции могли совпасть. Потом испытали Х=-3А+2В+С, но тут конечных состояний было опять недостаточно, всего семь. Взяли Х=4А+2В+С, теперь совпадении не было, но X получался всегда нечетным, нам же хотелось большей наглядности, когда номерами мышц служили бы последовательные ненулевые целые числа. Наконец удалось сконструировать ту формулу, что приведена выше.

Словом, все выглядело так же, как в известном изречении знаменитого немецкого естествоиспытателя Г.Гельмгольца (кстати, одного из основоположников современной офтальмологии - недаром его имя носит НИИ глазных болезней в Москве). Рассказывая о своих трудных путях к прославившим его открытиям, ученый сравнивал себя "с путником, который предпринял восхождение на гору, не зная дороги; долго и с трудом взбирается он и часто вынужден возвращаться назад, ибо дальше нет прохода; то размышление, то случай открывают ему новые тропинки, они ведут его несколько дальше, и наконец, когда цель уже достигнута, он к своему стыду находит широкую дорогу, по которой мог бы подняться, если бы сумел верно отыскать начало".

Когда удачный вид формулы был найден, открылись возможности ее дальнейшего совершенствования. Например, умножая дробь на (-В/С), можно различать левую и правую парализованные мышцы по знаку.
В.ЧЕРЕДНИЧЕНКО, Л.МАРТЫНОВСКАЯ, М.МАРТЫНОВ (г.Харьков)

[ МИКРОЗАДАЧНИК
Как выглядит аналогичная формула для N признаков, выражаемых на каждом шагу многошагового испытания числами Yn=+/-1, чтобы результат X представлялся одним из ненулевых целых чисел от -2**(N-1) до 2**(N-1)? ]

ПРИБЛИЖЕНИЕ ЧИСЕЛ
Входящая в состав эмпирической формулы константа с длинным хвостом десятичных знаков после запятой не придает этой формуле элегантного и удобного для использования вида.

Между тем при самой незначительной потере точности (что не играет роли в практических расчетах) числа можно заменять их приближениями в виде дроби. Например, еще до нашей эры число пи с успехом заменяли дробью 22/7 (ошибка ~0.001) или, для особо точных расчетов, дробью 355/113 (ошибка ~0,0000003).

Программа позволяет находить аналогичные приближения нецелых положительных чисел (если же число отрицательно, то ищем для него приближение как для положительного, знак минус приставляем уже к найденной дроби). Обозначим исходное число через А. Приближения к нему: d0=p0/q0; d1=p1/q1; d2=p2/q2... p0=[A], q0=1.

С каждой очередной дробью di точность приближения быстро растет, но сложнее становится и сама дробь. Поэтому вопрос, на какой дроби остановиться, находится в ведении пользователя.

Программа. 00. Сх 01. П3 02. П6 03. 1 04. П4 05. П5 06. С/П 07. П0 08. 1 09. + 10. П2 11. КИП2 12. ИП3 13. ИП4 14. П3 15. ИП2 16. * 17. + 18. П4 19. ИП5 20. ИП6 21. П5 22. ИП2 23. * 24. + 25. П6 26. ИП4 27. С/П 28. ИП0 29. ИП2 30. - 31. F1/x 32. БП 33. 07.

После ввода программы набрать на клавиатуре В/0 С/П "I" А С/П "р0" x-y "q0" / "d0" С/П "р1" x-y "q1" / "q1" С/П "р2" x-y "q2" / "d2" С/П... В кавычках - числа, появляющиеся иа индикаторе. Для нового А повторить набор, начиная с клавиши В/0.

В качестве контрольного примера найдем приближения для числа пи=3.1415926: p0/q0=3/1=3; p1/q1= 22/7=3.1428571; p2/q2=333/106=3.1415094; p3/q3=355/113=3.1415929.

Еще пример. А=0.11223344: p5/q5=100/891=0.11223344.

По программе легко найти, что с ошибкой 0.02: sqr(2)=7/5; sqr(3)=7/4; sqr(5)=9/4; sqr(6)=5/2; sqr(7)=8/3; sqr(8 )=14/5. С ошибкой 0.001: sqr(2)=17/12; sqr(3)=26/25; sqr(5)=38/17; sqr(6)=49/20; sqr(7)=37/14; sqr(8 )=82/29.
С.ГЕТА (г.Таллин)

[ УЗЕЛКИ НА ПАМЯТЬ
Если длительность пересылки числа из регистра X в адресуемый регистр принять за единицу, то длительность других операций можно оценить согласно таблице, пригодной для "Б3-34" и для "МК-61".

Матчасть диванного танкиста - Страница 4 88041110

Следует заметить: чем больше номер регистра, тем медленнее происходит обращение к нему и запись в него чисел. Правда, различие составляет лишь несколько процентов.
А.ИВАНОВ (г.Свердловск)

КЛУБ "КОНТАКТ"
Клуб "Контакт", о создании которого было объявлено в 10/87, сегодня объединяет более двухсот пользователей БК-0010 из разных уголков нашей страны. Среди них есть и новички, чей стаж работы с компьютером - два-три месяца, есть и опытные программисты, знакомые с БК уже больше трех лет, есть и коллективные члены - клубы любителей вычислительной техники Риги, Каунаса... По просьбам читателей объявляем о создании новых секций клуба по переписке: "Микроша", "Синклер", "Коммодор", "Ямаха" и "Атари". Все владельцы или пользователи этих компьютеров могут прислать свою заявку (о том, как ее оформить, рассказано в 10/87).

Кооператив "БИС" - "Быт, Информатика, Сервис" - готов приобретать у авторов лучших программ, присланных в клуб "Контакт", право на тиражирование этих программ. Организованный в декабре 1987 года, кооператив занимается поставкой программ для "Электроники БК-0010" и других домашних компьютеров. Программы, записанные на компакт-кассету, можно запросить по адресу: Сыктывкар, а/я430, БИС.

Ждем новых предложений по совершенствованию работы клуба "Контакт".

ВНИМАНИЕ - КОНКУРС
В конкурсе могут принять участие все пользователи или владельцы "Электроники БК-0010". Условия конкурса: предлагается составить программы на один или несколько из предложенных сюжетов - все они будут рассматриваться независимо. На конкурс принимаются программы, составленные до июня 1988г. Программы победителей с согласия авторов будут передаваться для тиражирования. Программы принимаются на конкурс в виде записи на магнитофонной кассете типа МК-60 или подобной.

СЮЖЕТ 1. Воздушный шар. Управляя воздушным шаром конструкции доктора Фюргассона (Ж.Верн, Восемьдесят дней на воздушном шаре), играющий должен снять человечка с крыши небоскреба. Клавиша пробела управляет газовой горелкой: клавиша нажата - воздух в оболочке нагревается, клавиша отпущена - остывает. Важно помнить, что это инерционный процесс,- даже когда клавиша отпущена, шар еще некоторое время движется вверх, и наоборот. По горизонтали шар смещается из-за постоянно дующего ветра. У нижних этажей небоскреба ветер дует справа налево, у верхних не дует совсем, над небоскребом дует слева направо. Шар со спасенным человечком нужно посадить на специальную площадку у подножия небоскреба. Если задача выполнена, игра усложняется: например, по экрану на разной высоте начинают пролетать самолеты или вертолеты, и надо избегать возможных столкновений. За усложнение сюжета будут начисляться дополнительные очки.

СЮЖЕТ 2. Собеседник. Превратите компьютер в собеседника. Он должен воспринимать произвольные вопросы, вводимые с клавиатуры, и выводить на экран ответы и свои вопросы. Программа может быть самообучающейся. Фразы компьютер должен распознавать с помощью базового словаря. Победителем будет признан наиболее остроумный собеседник.

СЮЖЕТ 3. Свободная тема по мотивам любого научно-фантастического произведения.

Не забудьте приложить к игре краткое описание и указать свои координаты. На кассете просим записать несколько дублей каждой программы.

СТРУКТУРНЫЕ ДИАГРАММЫ
В журнале часто публикуются программы, вписанные в структурные диаграммы. Хотелось бы подробнее ознакомиться с таким способом оформления программ.
А.СУМБАТОВ (г.Ростов-на-Дону).

Собранные здесь раскрашенные прямоугольники со вписанными программами называются структурными диаграммами.

Матчасть диванного танкиста - Страница 4 88040111

Программа 1 определяет номер дня и день недели по дате. Зеленым цветом здесь выделен УСЛОВНЫЙ ОПЕРАТОР. Он представляет собой АЛЬТЕРНАТИВУ, у которой одно из плеч пусто. В свою очередь, альтернатива - это частный случай оператора ВЫБОРА (или множественного ветвления), который реализован в программе на строках 60-140, но не выделен структурно из-за недостатка места. Все три упомянутые в этом абзаце управляющие конструкции на структурных диаграммах помечаются одним и тем же зеленым цветом.

Матчасть диванного танкиста - Страница 4 88040211

Матчасть диванного танкиста - Страница 4 88040311

По программе 2 решается обыкновенное дифференциальное уравнение методом Рунге-Кутта. Табулирование искомой функции ведется в теле ЦИКЛА "ПОКА" (желтый цвет), который на неструктурированных языках реализуется операторами условного и безусловного переходов.

Матчасть диванного танкиста - Страница 4 88040411

Алгоритм любой сложности можно реализовать, КОМБИНИРУЯ и ВКЛАДЫВАЯ друг в друга альтернативы н циклы "пока". Пример - программа 3, которая позволяет найти на отрезке корень алгебраического уравнения методом половинного деления. Рамки структурной диаграммы делают похожими программы, написанные на "непохожих" языках: Бейсике, Паскале и в командах программируемого микрокалькулятора. Пусть на это обратят внимание те. кто полагает, будто программу для калькулятора нельзя записать .так. чтобы была видна ее структура. Заметим: цифру 34 в левом плече альтернативы для ускорения счета по программам 3а и 3б можно заменить на 8, но в этом случае структура алгоритма "развалится" н его уже нельзя будет реализовать без опоры на метку на языке Паскаль.

Матчасть диванного танкиста - Страница 4 88041310
При невозможности использовать цвет можно обойтись и без него.

Матчасть диванного танкиста - Страница 4 88040510

В цикле "пока" сначала проверяется условие, записанное в заголовке цикла, затем выполняется тело цикла. Но часто бывает необходимо сделать наоборот: сначала выполнить тело цикла, а уж потом решить, нужно ли его повторно выполнять. Такую последовательность действий реализует другая управляющая конструкция - ЦИКЛ "ДО". На структурных диаграммах она отмечается синим цветом. У нас она иллюстрируется программой 4. предназначенной для поиска корня алгебраического уравнения методом Ньютона. Цикл "до" на Бейсике формируется условным переходом вверх.

Матчасть диванного танкиста - Страница 4 88040610

Цикл "пока" отличается от цикла "до" тем, что тело цикла "пока" может не быть выполнено ни разу, в то время как тело цикла "до" выполняется как минимум один раз. Из-за этого цикл "пока" считается ОСНОВНОЙ структурной управляющей конструкцией, а цикл "до" - ВСПОМОГАТЕЛЬНОЙ. С другой стороны, есть ситуации, когда логическое соотношение. управляющее циклом, приобретает смысл только после выполнения тела цикла (см. программу 4). В таких случаях цикл "до" более удобен.

Матчасть диванного танкиста - Страница 4 88040710

Матчасть диванного танкиста - Страница 4 88040810

Еще один вспомогательный структурный элемент - цикл с ПАРАМЕТРОМ. Его применяют тогда, когда известно, сколько раз нужно выполнить тело цикла. Отмечается он красным цветом. Мы видим его в программе 5, по которой методом наименьших квадратов рассчитываются коэффициенты полинома степени U, аппроксимирующего значения N точек на плоскости. Задача сводится к решению системы линейных алгебраических уравнений. "Искра 226", для которой написана программа 5, имеет на Бейсике матричные операторы, и благодаря им решение задачи находится довольно просто. Одни из этих операторов позволяют вводить с клавиатуры элементы матрицы (строка 60), предварительно отведя для них место в памяти (строка 50), и выводить их на дисплей (строка 170), другие - вычислять обратную матрицу и находить произведение двух матриц (строка 160).

Матчасть диванного танкиста - Страница 4 88041610
Можно обходиться лишь цветом. Начинающие программисты обычно работают без принтера и списывают свои программы с дисплея. Можно порекомендовать для этого цветные ручки или фломастеры и выделять структурные управляющие конструкции.

Матчасть диванного танкиста - Страница 4 88040910

Программа 6 - доработка программы "Частотный словарь" (6/87). По этой программе на печать выводится в алфавитном или весовом порядке частотный словарь введенного с клавиатуры текста. Здесь использованы все управляющие конструкции, встречающиеся в программах на Бейсике.

1. Цикл с параметром: ввод исходного текста (строка 11); анализ текста (строки 11-90); сортировка словаря по алфавиту (строки 120 и 130); вывод словаря на дисплей (строка 140).

2. Цикл "до": поиск в
строках текста знаков препинания и пробелов (строка 20); перебор слов в словаре для сравнения с только что выделенным из текста (строка 50); перебор слов очередной строки текста (строки программы 20-80).

3. Цикл "пока": сортировка словаря в порядке убывания частоты встречаемости слов (строка 70 без первого оператора). Переставлять наиболее часто встречающиеся слова текста в начало частотного словаря полезно, даже если его придется выводить на печать в порядке алфавита. Такая процедура ускоряет работу программы. Цикл "пока" здесь реализован с помощью не нуждающегося в метке оператора WHILE ... WEND, имеющегося в последних диалектах Бейсика.

4. Альтернатива: игнорирование промежутков между словами с двумя и более знаками препинания или пробелами (строки 30-70), уточнение, встречалось ли ранее выделенное из текста слово (строки 60 н 70).

5. Вызов подпрограммы перестановки соседних слов словаря (строка 150). Перестановка выполняется с помощью введенного для этой цели в последние версии Бейсика оператора SWAP. Без него перестановка потребовала бы вспомогательной переменной (назовем ее V) и трех присваиваний V=W(I-1) : W(I-1)=W(I) : W(I)=V. Подпрограмма используется для сортировки словаря (строки 70 и 120).

6. Переход к метке. В чистом виде это делается только при досрочном прерывании и возвращении к началу цикла с параметром при сортировке словаря по алфавиту (см. строку 120). В остальных случаях переходы к меткам реализуют одну из стандартных управляющих конструкций.

7. Множественное ветвление после ответа на запрос по "меню", когда требуется решить, вывести словарь по алфавиту или по частоте (см. строки 110-140). В данном случае, правда, можно было обойтись простой альтернативой, но режимов вывода словаря может быть больше, чем два,- вывод на принтер, запись на магнитный диск или перфоленту и др.

В программе "Частотный словарь" использованы два принципиально разных метода сортировки одномерных массивов: сортировка по мере поступления нового элемента массива (строка 70) и сортировка ранее заполненного массива (строки 120 и 130). В том и другом случаях выбраны не самые быстрые, но самые короткие алгоритмы. ЭВМ сортирует русские слова по тому алфавиту, какой в нее "вшит" (12/86 и 6/87). Но это не так уж важно. Главное, чтобы слова с одинаковым началом стояли рядом. Так проще доработать частотный словарь, объединив однокоренные слова.

При запросе информации с клавиатуры применяются три способа.
1. Оператор INPUT (строка 10).
2. Оператор LINE INPUT. Он допускает ввод литерной переменной, содержащей запятые (строка 11). Оператор INPUT запятую воспринимает за разделитель переменных.
3. Оператор INKEY, выполняющий ввод байта с клавиатуры без прерывания работы компьютера (начало строки 100). Такой оператор незаменим в динамических играх. Но и здесь при запросе через "меню" (конец строки 90) он очень удобен: при этом на клавиатуре блокируются все клавиши, кроме нужных в данный момент - 1 и 2. Кроме того, при таком вводе информации нет нужды нажимать в конце клавишу ВК.
В.ОЧКОВ (г.Москва)

КОГДА НЕТ СЧЕТЧИКА

Матчасть диванного танкиста - Страница 4 88041210

Если магнитофон не оборудован счетчиком, искать нужное место на магнитной ленте - трудное дело. Трудное, даже если между файлами записана какая-то информация с помощью микрофона. В то же время упростить поиск можно, стоит заранее разметить ленту, записав по всей ее длине метки - имена несуществующих программ или массивов. Тогда при чтении с магнитофона эти имена будут появляться на экране. Если воспользоваться той программой, что приведена выше, то программа будет записывать сама себя под возрастающими четырехзначными цифровыми именами с интервалом примерно 3.3с, то есть стандартная кассета МК-60 окажется разбитой примерно на 550 интервалов. Начальный номер выбирается произвольно. Это сделано для того, чтобы можно было размечать не только чистую ленту, но и такую, где с достаточными интервалами уже записаны какие-либо файлы. Специального места для хранения программа не требует, поскольку ее можно вызвать из любого размеченного места ленты.

Как работать с программой?
Запустив ее, подматываем пленку к началу разметки. Через несколько секунд после запуска на экране появляется директива - это срабатывает строка 1.3. Набрав начальный номер, включаем магнитофон на запуск и нажимаем ВВОД. Периодически на экране появляется очередной номер и слышится характерный звук записи (2.3 и 9.9). Кратко поясню назначение остальных строк. В 1.1 устанавливается достаточно большой адрес ячейки памяти А. Строка 1.2 находит ячейку с номером строки 9.9. Строка 2.1 подсчитывает количество сотен текущего номера и с помощью 3.1 изменяет надлежащим образом строку 9.9. Строка 2.3 аналогично поступает с последними двумя цифрами номера.

Изменения текста программы в процессе ее выполнения - сравнительно редкий, но довольно мощный прием программирования. Чтобы его освоить, важно хорошо представлять структуру распределения текста программы в памяти машины. На фокале для программ пользователя отводится честь ОЗУ, начиная с ячейки 1024. Записи строк образуют как бы очередь. Каждая новая строка записывается в хвост очереди с первой свободной ячейки, а если строка удаляется, то очередь смыкается. Запись каждой строки начинается с ячейки, где записано число - сдвиг к разделителю, стоящему перед следующей строкой. Вторая ячейка записи строки содержит в старшем байте целую часть номера, а младший байт - это произведение числа 256 и дробной части номера. Далее следует запись содержания строки программы, при этом 15 знаков (среди них + -. / " =) кодируются нестандартно - числами от 128 до 143. Завершает запись строки байт 142. Если он оказывается младшим для текущей ячейки, старший байт остается нулевым. Таким образом, запись строки не содержит никаких байтов для хранения "начального" пробела, отделяющего номер строки от текста оператора, как считает О. Суханов из Омска (10/87).
Н.ПЕТРИ (г.Москва)

НЕСКОЛЬКО СЛОВ О ПРЕРЫВАНИИ
Что произойдет, если во время работы программы нажать какую-либо клавишу на клавиатуре БК? В специальную ячейку оперативного запоминающего устройства (ее называют регистром данных клавиатуры) поступает код нажатой клавиши. Чтобы быть совсем точным, следует сказать, что адрес регистра - 177662, а код клавиши записывается в младшие восемь разрядов этого регистра. Код сохраняется в регистре все время, пока не будет нажата другая клавиша, то есть пока в регистр не поступит новый код.

Если нажатая клавиша - это СТОП, то выполнение программы будет прервано, если ШАГ - выполнение программы приостановится. Происходит это потому, что специальная системная подпрограмма реагирует на коды этих двух клавиш и некоторых других управляющих клавиш, игнорируя нажатия всех остальных.

В динамических играх необходимо добавить к числу прерываний еще и те, которые обслуживали бы нажатие клавиш, управляющих положением курсора на экране. Для этого в программу вводят подпрограмму, основанную на использовании функции работы с общей шиной - FX.

Матчасть диванного танкиста - Страница 4 88041410

Теперь нажатие любой клавиши управления курсором в ходе исполнения основной программы будет обрабатываться подпрограммой. Если, к примеру, была нажата стрелка вверх, подпрограмма выполнит блок с адресами строк 50. Это может быть фрагмент, обеспечивающий смещение фигурки на экране на строку выше.

Вместо FX можно использовать и другие функции Фокала, например FSBR и FCHR(-1), но не столь эффективно. Кстати, такой алгоритм обработки прерываний справедлив и для других ЭВМ. Следует, однако, помнить, что адрес регистра данных клавиатуры может быть другим. Так, например, в СМ ЭВМ этот адрес - 177662.
А.ШЕЛОМАНОВ (г.Жуковский)

[ МАЛЕНЬКИЕ ХИТРОСТИ
У компьютера БК-0010.01 на 19 клавиш меньше, чем у БК-0010, в частности, исчезли клавиши ГРАФ, ЗАП, СТИР. Покопавшись в компьютере, я нашел замену: вместо клавиши ГРАФ нужно одновременно нажать три клавиши: АР2, стрелка вниз и 5, вместо клавиши ЗАП - АР2, ту же стрелку и 6, вместо СТИР - АР2, стрелку и 7.
Г.ТРИШИН (г.Химки, Московская обл.)

Функция SCROLL, которая включена во многие версии Бейсика, заставляет текст или изображение проплывать по экрану снизу вверх. Небольшая программа позволяет реализовать вариант этой функции на БК. Программа основана на циклической записи в регистр рулонного смещения 177664. Перед запуском этой программы нужно стереть служебную строку командами

Матчасть диванного танкиста - Страница 4 88041510

С.КОМАРОВ (г.Львов)

Чтобы всегда можно было узнать, занята ли какая-либо позиция на экране, запишите нуль в специально отведенный для этого двумерный массив командой SET KO(X, Y)=0, где X и Y - координаты. Если в этой позиции нужно изобразить какой-то символ, запишите в эту же ячейку отрицательное число SET KO(X,Y)=-1. Теперь можно узнать, свободна позиция или занята командой I.
А.РАДУШКА (с.Вайнеде, Лиепайский р-н) ]

[ УЗЕЛКИ НА ПАМЯТЬ
Многим известны такие программы для БК, как "Шахматы" "MANAGEMENT" и другие. В этой подборке - несколько советов, касающихся их использования.

Чтобы изображение, иллюстрирующее явление интерференции, занимало весь экран, перед запуском программы, которая формирует узор (6/86), необходимо ввести оператор X FCHR(155).

Выполнение программы "Шахматы" (адрес старта 37200) можно прервать. Для этого вместо хода нужно нажать клавиши Т, ввод и СБР. На экране вместо привычного приглашения будет высвечиваться М. Достаточно нажать клавиши РУС ТК н ТС, чтобы сообщение обрело привычный вид. Программу можно скопировать или запустить снова.

Программа MANAGEMENT позволяет продать продукции больше, чем ее имеется на складе, то есть можно получить ссуду, за которую не берется ссудный процент. За полученные деньги можно скупить сырье на рынках, тогда остальные фирмы обанкротятся на постоянных издержках.

Программу "Поможет компьютер" (10/87) нетрудно сократить:

1.1 F М=0,25,6,256; X FT(0,0,M); X FV(1,512,M)
1.2 F N = 0,51,2,512; X FT (0,N,0); X FV (I,N,256)

Благодарим А.Галимова из Казани, С. Маигушева из харьковского клуба любителей программирования и москвича В.Загребина, приславших свои сообщения. ]

[ Ответ на задачу
Матчасть диванного танкиста - Страница 4 88041710
]

НЕ ТОЛЬКО БК
Несколько лет "Электроника БК-0010" оставался единственным компьютером, который можно было приобрести в магазине. С каждым днем все больше становится обладателей самого дешевого бытового компьютера "Микроша" (7/87). В 1987 году было выпущено 3700 машин, а 1988-м запланировано сделать почти на тысячу больше. Розничная цена компьютера - 500 рублей, "Микрошу" можно подключить к любому телевизору без какой-либо доработки или переделки. Напоминаем краткие технические характеристики "Микроши": 8-разрядный процессор, ОЗУ - 32 килобайт, ПЗУ - 2 килобайта. Предусмотрена псевдографика 128*50 точек, к компьютеру можно подключить печатающее устройство типа СРА-80 и FX-85. Основной язык программирования - Бейсик или Ассемблер.

Освоить клавиатуру недавно приобретенного компьютера поможет простейшая программа из десяти строк на Бейсике, составленная на основе варианта А.Плякина из Саратова.

Матчасть диванного танкиста - Страница 4 88041810

Кратко поясним ключевые строки программы: 10-20 - ввод исходных данных; 50 - выбор произвольной буквы латинского алфавита и строки, по которой он будет перемещаться; 60 - перемещение символа и опрос регистра клавиатуры. После ввода исходных данных по экрану слева направо начинают пробегать буквы латинского алфавита. Задача игрока - успеть нажать соответствующую клавишу, пока символ еще не исчез с экрана. В случае удачи раздается звуковой сигнал, а к счетчику побед добавится единица. Если не нажать вовремя необходимую клавишу, прозвучит звуковой сигнал иной тональности и единица добавится к счетчику поражений. После того как будут исчерпаны попытки, число которых задается вначале, на экране появятся итоги игры - число удач и поражений.

[ БЮРО СПРАВОК
"Хочу выразить свою признательность,- пишет нам читатель Ю. Лаэаренко из Кишинева,- за публикацию в "Бюро справок" реферата о моей программе для фотопечати (8/87). Запросы о ней поступили уже почти от двухсот читателей журнала и продолжают поступать. Я отвечаю каждому. Обычно посылаю фотонегатив с программой и описанием работы с ней. Большинство негативов возвращается в кратчайший срок и используется многократно".
Советуем нашим читателям активнее пользоваться возможностями, которые предоставляет "Бюро справок", для налаживания контактов с товарищами по увлечению.

Преподавателю, желающему создать автоматизированный учебный курс, но не желающему ради этого изучать программирование, очень пригодится инструментальная система МИДОС, созданная в Московском энергетическом институте. Она написана на языке Бейсик, включает в себя практикум по клавиатуре ДВК, по Бейсику, по отдельным разделам математики, физики, химии, электротехники, иностранным языкам и др. и может применяться в школах, ПТУ, техникумах и вузах, где классы вычислительной техники оснащены компьютерами типа "ДВК-2М", "ДВК-3", "СМ-4", "СМ-1420", "МЭРА". Авторам компьютерных курсов (практикумов, контрольных работ, обучающих программ и т.д.) система МИДОС предоставляет широкие возможности для анализа ответов обучаемых, конструирования кадров на экране дисплея. (105835, Москва Е-250, ГСП, Красноказарменная 14, МЭИ, Отдел технических средств обучения).

На кафедре теплотехники Марийского политехнического института им.А.М.Горького разработаны методические пособия и учебные программы к лабораторному практикуму по курсу теплотехники: расчет (по экспериментальным данным) средней скорости воздуха в аэродинамической трубе расчеты объемных расходов воздуха, коэффицнента теплоотдачи латунной трубки при свободной конвекции и ряд других. Эти методические указания и программы могут оказаться полезными при изучении курса теплотехники в других вузах (424033, Йошкар-Ола, бульвар Чавайна 18-а, кв.50, Хлебников Валерий Алексеевич).

Заинтересован в обмене программами для микрокалькуляторов типа "Б3-34" и "МК-52" по расчету строительных конструкций (414057, Астрахань, ул.Островского 115, кв.709, Лебедев Александр Николаевич).

Хотел бы получить программы для "МК-62" для решения следующих задач: аппроксимация и численное интегрирование функций одной и двух переменных, заданных таблично как с упорядоченным, так и с неупорядоченным шагом изменения аргумента (700070, Ташкент, ул.Стародубцева 9, Сальников Михаил Петрович).

Предлагаются прикладные программы для минимизации или сокращения алгебраических выражений булевых функций, составленные для микрокалькуляторов "МК-52", "МК-61". Имеются также игровые программы, основанные на покрытии множеств, с элементами экономических расчетов - на модели 128-клеточного игрового поля два партнера ведут игру по поиску объектов соперника с подсчетом средств на поиск (690001, Владивосток, ул.Славянская 17, кв.173, Гудименко Борис Петрович).

В Киевском технологическом институте легкой промышленности на кафедре автоматики разработаны программы для "Б3-34" для оптимизации параметров достаточно сложных систем автоматического управления. Эти программы успешно используются при проведении лабораторных работ по синтезу систем автоматического регулирования. Авторы готовы поделиться опытом с заинтересованными читателями (252006, Киев, ул.Владимиро-Лыбедская 16, кв.59, Пятигорский Сергей Вениаминович).

Предлагается универсальная программа для "Б3-34", "МК-52" для вычисления влажности воздуха на метеорологических станциях и постах по показаниям психрометра. Точность вычислений такая же, как по стандартным психрометрическим таблицам,- 1 процент. Автор надеется, что программа окажется полезной для многих специалистов (468320, Ленинск, Кзыл-Ординской обл., ул.Мира 3, кв.24, Бровкин Владимир Владимирович).

Разработан набор прикладных программ для обработки комплексных чисел во всем диапазоне значений аргументов. Программы построены таким образом, что позволяют использовать ППЗУ "МК-52" в режиме хранения данных, значительно сократить время вычислений. Имеются также программы для нахождения корней уравнений второй, третьей и четвертой степени. Вычисления при этом полностью автоматизированы (370000, Баку, ул.лейтенанта Шмидта 8, кв.100, Гаузер Эрих)]
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вт Фев 14, 2023 12:10 am

5/88
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДЕВЯТНАДЦАТОЕ, на котором речь пойдет об алгоритмическом языке Си. О нем просят рассказать многие читатели, слышавшие, что на Си можно писать программы весьма эффективные, то есть занимающие гораздо меньше места в памяти ЭВМ и выполняемые гораздо быстрее, чем аналогичные программы на других распространенных алгоритмических языках - Бейсике, Паскале и т.д.
Язык Си вполне заслуженно пользуется столь высокой репутацией. Но если вы возьметесь писать на нем программы, не уделив достаточного внимания его изучению, вы можете получить неприятный сюрприз: язык Си коварен! Своими неудачами вы доставите немало веселых минут опытным программистам, которые будут выяснять, почему ваши программы работают не так, как им следовало бы. И тогда вы в новом свете увидите положение языка Си в ряду других алгоритмических языков.
В самом деле, Паскаль создавался как язык для обучения программированию. Бейсик - для того, чтобы, еще ничего толком не зная, уже иметь возможность писать какие-нибудь программы для персонального компьютера. Язык Ада очень сложен, но он тщательно проектировался в течение нескольких лет как универсальный язык для широкого слоя программистов. А Си за короткий срок был создан несколькими системными программистами для своих собственных нужд.
Под системным программированием понимают разработку операционных систем, составляющих центральную и самую важную часть всей программной начинки любой ЭВМ. Над этим работают мастера из мастеров. Недоступность их деятельности для всеобщего понимания составляет существенную часть их профессиональной гордости. Их взгляды на науку программирования зачастую граничат с экстремизмом. То, что ценит начинающий программист в наиболее популярных алгоритмических языках - доступность, ясность, гарантии от ошибочных действий,- системному программисту кажется излишеством и, пожалуй, даже раздражает. Зачем мастеру предохранители от ошибок, если он и так не ошибается? Зачем ему предельная ясность программных конструкций, если он и без всяких подсказок способен проследить выполнение программы до элементарнейших действий, протекающих глубоко в недрах ЭВМ, и хотел бы организовать эти действия не наиболее понятно для новичка, а наиболее эффективно? Выжать из ЭВМ максимум того, на что она способна, не отдавая лишней дани традициям,- под знаком таких соображений и создавался язык Си. Это и сделало его столь эффективным и столь неординарным.
Заметим: его название не следует связывать со словом "системный". Си - так называется третья буква английского алфавита С. Это наименование говорит разве что о чувстве юмора у создателей языка - его предшественником был язык Би (В - читается "би" - вторая буква английского алфавита).
Ведет занятие инженер-программист И.А.НЕСТЕРОВ (г.Переславль-Залесский)

ЭВМ бывают разные. Но все-таки большинство ЭВМ средней и малой мощности в общих чертах своего строения похожи друг на друга. У каждой из них есть главное исполнительное устройство (центральный процессор) и оперативное запоминающее устройство (попросту память).

Память можно представлять себе как последовательность одинаковых ячеек, пронумерованных от нуля и далее. Каждая ячейка может хранить в себе некий числовой код не очень большого размера. Читателю, вероятно, известно, что в электронных вычислительных машинах числа представляются в двоичной системе счисления, то есть цепочками нулей и единиц. В виде таких двоичных кодов в памяти хранится любая информация, необходимая для работы ЭВМ - будь то команды выполняемой программы, обрабатываемые по ней исходные данные или полученные результаты.

Процессор умеет совершать определенные действия над кодами, содержащимися в ячейках памяти и в так называемых внутренних регистрах - ячейках, находящихся внутри процессора. Некоторые из них вполне аналогичны ячейкам памяти, другие устроены иначе. Одно всегда верно: с кодами, находящимися во внутренних регистрах, действия совершаются в несколько раз быстрее, чем с хранящимися в ячейках памяти.

Чтобы ЭВМ выполнила предписанные человеком задания, все исходные данные должны быть представлены в виде числовых кодов, а все операции, которые предстоит совершить с этими кодами, должны быть выражены в виде команд, выполнимых процессором.

Нет нужды объяснять, каким неимоверно сложным было бы общение с ЭВМ, если бы задания для нее человеку приходилось давать на понятном ей языке нулей и единиц. Программы для ЭВМ пишутся на так называемых алгоритмических языках. Словарный запас каждого из них образован немногочисленными (три-четыре десятка) словами живых языков (у Бейсика, Паскаля, Фортрана, Алгола - английского, у Рапиры, Аналитика - русского); логическая структура близка к логике строгого рассуждения. Поэтому писать и понимать программы на том или ином алгоритмическом языке - дело посильное для многих, хотя и требующее навыка. Введенная в машину, такая программа автоматически переводится (программисты говорят: транслируется) на язык машинных команд.

Говорят, что чем более похож алгоритмический язык на человеческий, тем выше его уровень. И наоборот: чем ближе он к языку машинных команд, тем его уровень ниже.

Казалось бы, только на языках высокого уровня и программировать, да вот беда - чем выше уровень языка, тем медленнее работают получившиеся после трансляции программы, тем больше они занимают места в памяти. Говорят, что они становятся менее эффективными. В этом нет ничего удивительного: чем ближе конструкции языка к оборотам человеческой речи, чем менее они ориентированы на возможности машины, тем труднее использовать те особенности ЭВМ, которые позволяют выигрывать столь необходимые зачастую микросекунды и байты и тем самым повышать эффективность программ.

Язык Си, о котором у нас пойдет разговор, представляет собой удачнейший компромисс между желанием располагать теми возможностями, которые обычно предоставляют программисту столь понятные и удобные языки высокого уровня, и стремлением эффективно использовать особенности ЭВМ.

Мы не намереваемся исчерпывающе описывать язык в соответствии с общепринятыми канонами и постараемся дать лишь живые, характерные для Си примеры.

Эти примеры порою могут показаться странными. В языке Си много необычного. Где еще вы встретите присваивание, записанное в скобках внутри некоторого выражения? Например:

a + (b = 5) - 1

Здесь переменная b получит значение 5, такое же значение будет присвоено выражению в скобках, и все выражение в целом станет равным а+4.

Из-за подобных странностей Си нецелесообразно использовать для начального обучения программированию. В то же время он содержит в себе все то, что делает удобными наиболее распространенные алгоритмические языки: возможность группировать несколько операторов в один, условные конструкции, циклы с проверкой условия в начале и конце цикла, возможность определять сложные составные типы данных на основе более простых и т.д.

В языке Си, как и в большинстве распространенных сегодня языков программирования, любую переменную можно использовать лишь после того, как она объявлена и указан ее тип. Наиболее популярные типы в Си - это char, int и double. Переменные первого типа служат для представления символов, второго - целых чисел, третьего - чисел, которые могут принять дробное значение. И если в ряду объявлений написано int i, транслятор заранее отводит под переменную i столько ячеек памяти, сколько требуется для целого числа, а встречая ее в программе, проверяет, не применяются ли к ней операции, не определенные для целых чисел.

Мы уже говорили о том, что все ячейки памяти пронумерованы. Номер, приписанный ячейке, называется ее адресом.

Умелое использование адресов - один из путей к высокой эффективности программ. Очень часто в командах ЭВМ применяется косвенная адресация, то есть указывается адрес не нужной нам ячейки, а другой, где хранится код, представляющий собою адрес нужной ячейки. (Нечто подобное мы порою практикуем и в жизни, когда на почтовом конверте в графе "кому" пишем: "Иванову для Петрова": письмо предназначено Петрову, но мы посылаем его на адрес Иванова).

Переменные, которые предназначены для хранения адресов, в языке Си называются указателями. Пусть некая переменная обозначена буквой x, а ее указатель - px. В этом случае оператор px=&x присвоит указателю px значение, равное адресу переменной x. После этого мы можем работать с переменной х, используя указатель px:

px = &x;
*px = 5;
y = *px+2;

Третий из этих операторов присвоит переменной y значение на 2 большее, чем значение x. Второй сделает переменную x равной 5.

Теперь представьте себе, что в памяти расположена последовательность целых чисел, первое из которых имеет указатель array. Что могло бы означать выражение array+1? Адрес следующей ячейки памяти? Нет, в языке Си оно трактуется иначе - как указатель на следующий объект того типа, на который указывает array. Это чрезвычайно удобно: например, чтобы извлечь i-ый элемент нашей последовательности, достаточно применить операцию *(array+i). Такая операция настолько часта, что изобрели специальную синтаксическую конструкцию для ее записи: array[i]. Подобный прием сильно упрощает работу с массивами, организацию циклов, операции над строками символов и т.п. И хотя в языке Си нет такого типа данных, как строка символов, вполне возможно использовать строковые константы в общепринятой форме - как последовательность символов, заключенную в кавычки. Правда, при этом необходимо учитывать одну особенность языка Си: в массиве символов, который заключает в себе такую строку, последний символ обязательно должен иметь код, равный нулю. Поэтому, встретив в программе выражение р="string", транслятор проделает следующее. Он выделит память под 7 элементов символьного типа, в первые 6 поместит буква за буквой слово string, в седьмой - символ с кодом 0 и присвоит переменной р значение, равное адресу ячейки, начиная с которой в памяти располагается образованный таким путем массив. Теперь, если написать, например, выражение p+2, то машина истолкует его как строку "ring".

Попробуем заняться программированием на языке Си. В качестве первого опыта напишем несложную программу, выводящую на дисплей фразу "О! Привет".

main()
{
printf("О! Привет.\n");
}

Написанная программа состоит из единственной функции main, содержащей единственный оператор,- он выводит на дисплей текст, проставленный далее в кавычках. Символ \n предписывает после вывода перейти на следующую строку.

Все операторы функции main, как и любой другой функции, обрамляются фигурными скобками. Для каждой из этих скобок принято отводить отдельную строку - так программа делается нагляднее, легче читается и анализируется.

Вообще любая программа на языке Си состоит из некоторого количества функций, среди которых обязательно должна быть одна под названием main. Дело в том, что запуск любой программы, написанной на языке Си, происходит так, как будто стандартным образом вызывается функция main. Поэтому и нет никаких специальных ключевых слов, отмечающих начало программы (таких, например, как program в языке Паскаль). Имя main нельзя считать ключевым словом - это обычное имя функции, отличающееся от других только тем, что относительно него существует вышеотмеченное соглашение.

(Знаток программирования может заметить, что мы употребляем термин "функция" там, где вернее было бы сказать "процедура". Эта терминологическая тонкость имеет свои корни в ранних версиях языка Си, но разбираться в этом мы не имеем возможности и просто следуем сложившейся традиции).

Употребленная нами функция printf - стандартная, она содержится в библиотеке, автоматически подключаемой при трансляции любой программы. Мы и сами можем описывать какие угодно функции. Например, следующая программа два раза выведет на дисплей текст "О! Привет", используя для этого нами же определенную функцию speak:

main()
{
speak();
speak();
}
speak()
{
printf("О! Привет.\n");
}

В приведенных примерах пока что не встречалось ни одной переменной. Но уже в следующей программе они понадобятся нам. Напомним: прежде чем их употреблять, мы должны их объявить и указать их тип. Вводя новую функцию, мы можем объявить и новые переменные. В таком случае они доступны для использования лишь в ней и потому называются локальными (в отличим от глобальных, то есть объявленных за ее пределами). В силу этой особенности локальным переменным можно давать одинаковые имена в разных функциях: действия над такой переменной и пределах одной функции не оказывают никакого влияния на одноименную переменную, локализованную в другой функции.

Следующая наша программа печатает числа от 1 до 10 вместе с их квадратами. Она содержит комментарии, назначение которых очевидно из их названия. На выполнение программы они не оказывают никакого влияния и вообще игнорируются транслятором. Они адресованы лишь человеку, который хочет разобраться в программе. В этом качестве они очень важны и потому имеют статус четко определяемой синтаксической конструкции. В языке Си они заключаются между символами /* и */ .

main()
{
/* программа печати чисел и их квадратов */
int i, iq; /* объявление переменных */
/* далее цикл */
for(i = 1; i <= 10; i = i+1) {
iq = i*i;
printf("%d %d\n",i,iq);
} /* конец цикла */
}

Этот фрагмент уже близок к вполне серьезным программам на языке Си и потому требует пояснений.

Сначала об аргументах функции printf, то есть о переменных i и iq. В скобках, поставленных после обозначения функции, написаны не только они: огражденные кавычками два символа %d предписывают вывести на их месте значения двух указанных далее аргументов в виде целых чисел (какими, кстати, обе переменные и объявлены в самом начале разбираемого фрагмента).

Далее мы видим цикл, управляемый оператором for. В чем заключается это управление, легко понять из трех выражений в скобках, разделенных точкой с запятой: сначала переменной i присваивается значение 1, затем, пока i меньше или равно 10, выполняется тело цикла, и в конце его к i добавляется 1.

Можно придавать управляющему оператору for и более необычный вид - например, сделать так, чтобы переменная i уменьшалась от 100 до 10 с шагом 5:

for(i = 100; i >= 10; i = i-5)

Обратите внимание на расстановку фигурных скобок в нашей программе. Заключенная в них последовательность операторов рассматривается транслятором как единый оператор. В языке Си заголовок цикла for может управлять только одним оператором, и, не будь скобок, в нашем случае при каждом прохождении цикла вычислялось бы лишь значение переменной iq, а по окончании цикла один-единственный раз отработала бы функция printf, напечатав строку таблицы, соответствующую значению i, равному 10.

Впрочем, в нашем примере вполне возможно обойтись в теле цикла одним оператором. Использование переменной iq здесь излишне, ведь она служит только для того, чтобы передать функции printf значение квадрата числа i. Ничего страшного не произойдет, если на ее место в обращении к функции мы подставим непосредственно выражение i*i.

main()
{
int i;
for(i = 1: i <= 10; i = i+1)
printf("%d %d\n",i,i*i);
}

Теперь наш пример выглядит почти так, как его написал бы умудренный опытом программист на языке Си. Чтобы довести его до совершенства, необходимо познакомиться с двумя необычными операциями для увеличения н уменьшения значений переменных. Операция увеличения ++ добавляет 1 к своему операнду, а операция уменьшения -- вычитает 1. Таким образом, оператор ++i; увеличивает i. Необычный аспект заключается в том, что ++ и -- можно писать либо перед переменной, как в ++i, либо после переменной: i++. Эффект в обоих случаях состоит в увеличении i. Но выражение ++i увеличивает i до использования ее значения, в то время как i++ наращивает i после того, как ее значение было использовано.

Поясним это на примере. Если i имеет значение 5, то оператор x=i++; установит х равным 5, а оператор x=++i; равным 6. Тем не менее в обоих случаях i после выполнения любого из операторов становится равным 6.

Если заметить, что на большинстве ЭВМ для операций увеличения и уменьшения существуют более эффективные команды, чем для обычного сложения, станет понятным, почему опытный программист написал бы нашу программу так:

main()
{
int i;
for(i = 1; i <= 10; i++)
printf( "%d %d\n", i, i*i);
}

Познакомимся теперь с другими управляющими конструкциями языка Си. Но прежде отметим вот что: выражение i<=10 в операторе for имеет смысл условия. В большинстве языков результатом его вычисления было бы логическое значение "истина" или "ложь". Но в Си нет логических значений, и это понятно: ни одна ЭВМ не оперирует данными такого типа - значением любого выражения может быть лишь какое-то число. Как же понимать, что условие i<=10 истинно? А вот как: везде, где выражение имеет смысл условия, считается, что оно истинно, если имеет ненулевое значение.

К чему эти сложности?- спросит иной читатель. Дело в том, что лишь в наших примерах условие завершения цикла столь прозрачно. Вообще же на его месте может стоять любое допустимое выражение языка, и цикл завершится, когда оно примет нулевое значение. Вот типичнейший пример - цикл для просмотра строки текста. В строке str подсчитывается количество пробелов. Цикл завершится, когда *р примет значение 0, то есть, как мы уже обсуждали, в конце строки.

i = 0;
for(p = str; *p; р++)
if(#р == ' ')
i++ ;

Если условие завершения опущено, считается, что оно истинно. Зная это, напишем заголовок никогда не завершающегося цикла (он находит применение во многих случаях - ниже мы увидим это):

for(;; )

Очень часто, выполняя цикл, совсем не обязательно знать, в который раз он выполняется - нужно лишь проверять выполнение некоторого условия. В таком случае вместо оператора for лучше употребить оператор while. Порядок его употребления легко понять, сравнивая два этих равнозначных фрагмента:

for(i = 1; i <= 10; i++) {
a = a+i;
b = a*a;
} /* далее то же самое с помощью while */
i = 1;
while(i <= 10) {
a = a+i;
b = a*a;
i++;
}

Еще один пример - часто встречающийся фрагмент, используемый для копирования строк. Исходная строка задается явно (здесь это слово while, заключенное в кавычки). Ее необходимо скопировать в ячейки, определяемые указателем this.

р = "while";
q = this;
while(*q++ = *p++)
;

Тело цикла пусто - все копирование производится в заголовке цикла. Берется указатель p, по нему отыскивается и извлекается символ, указатель p затем передвигается на следующий символ, а только что извлеченный заносится по указателю q, который затем также передвигается на следующую позицию. После этого оператор while должен решить, повторять ли цикл заново. Это решение будет утвердительным, если выражение в скобках имеет ненулевое значение,- тогда оператор while истолкует его как "истину". Но у нас в скобках - оператор присваивания. Можно ли говорить, что он имеет какое-то значение? В языке Си подобный вопрос не считается бессмысленным, мы уже разбирали соответствующий пример с выражением a+(b=5)-1 и отмечали, что значением операции присваивания считается величина, которая, собственно, и была присвоена. Таким образом, пока по указателю q будет заноситься какая-то буква, цикл будет повторяться вновь и вновь. Вспомним теперь еще об одной особенности языка Си: любая строка символов заносится в память в виде массива, последний элемент которого имеет нулевой код. Когда этот последний элемент будет извлечен по указателю р, то в результате присваивания *q++=*р++ выражение в скобках примет нулевое значение, оператор while истолкует его как "ложь", и цикл уже не повторится. Так и закончится копирование.

У циклов, управляемых оператором while, есть особенность: если условие повторения ложно с самого начала, то цикл не выполнится ни разу. Для того чтобы добиться по крайней мере одного его выполнения (иногда это бывает нужно), используется оператор do. Вот несложный пример его использования:

j = 5;
do {
a = a+i;
i = i*2;
} while(--j);
/* окончится, когда --j станет нулем */

Иногда бывает нужно прервать выполнение тела цикла и приступить к проверке условия. В таком случае используется оператор continue. Вот для примера программа, которая выводит на дисплей все числа от 1 до 10, кроме 6:

main() {
int i;
for(i=1; i<10; i++) {
if(i==6)
/* если i равно 6 */ continue:
printf("%d\n",i);
}
}

Порой возникает необходимость досрочно выйти из цикла без всякой проверки условия. На этот случай в языке Си есть оператор break.

Его наличие делает совсем не бессмысленным использование бесконечных циклов. Представьте себе, что вам нужно записать цикл, который может завершиться по нескольким причинам, и условия завершения достаточно сложны. В таком случае весьма удобно записать заголовок цикла без всякого условия, в виде for (;; ), а выход из цикла оформить с помощью операторов break.

Подходящий пример мы вскоре разберем, но прежде познакомимся с оператором выбора. Он позволяет направить ход выполнения программы по нескольким различным ее участкам в зависимости от значения какой-либо простой переменной или выражения. Эта переменная или выражение помещается в заголовке оператора выбора, в скобках после слова switch, а далее пишутся операторы, помеченные так называемыми метками вариантов. Эти метки представляют собой значения, которые может принимать помещенное в заголовке выражение, и служат для указания того оператора, простого или составного, который следует выполнить, когда выражение в заголовке окажется равным той или иной метке. Перед каждой меткой вариантов ставится слово case. Особая метка default используется, когда ни одна из меток case не соответствует значению выражения, стоящего в скобках после слова switch. Одно и то же место в теле оператора может быть помечено несколькими метками варианта.

Например, если вы хотите определить, находится ли результат выражения в диапазоне между 1 и 10 и его четность, то можно предложить нечто такое:

switch(a+b) {
case 2:
case 4:
case 6:
case 8:
case 10:
printf("Четный\n");
break;
case 1:
case 3:
case 5:
case 7:
case 9:
printf("Нечетный\n");
break;
default:
printf("Вне диапазона\n");
}

Некоторые важные услуги программисту предоставляет препроцессор языка Си, органически примыкающий к языку. Будучи дословно переведенным с английского, слово "препроцессор" означает "предварительный обрабатыватель". Это так и есть. Препроцессор - это программа, которая производит некоторые, иногда весьма значительные, манипуляции с первоначальным текстом программы перед тем, как он подвергается трансляции. Отличительным признаком всех препроцессорных инструкций служит символ #, помещенный в первую позицию исходного текста.

Например, весьма часто в программах приходится использовать ничего не говорящие числа. Это могут быть какие-то математические константы или размеры используемых в программе массивов и разные другие. Общепризнано, что обилие таких констант сильно затрудняет понимание программ и считается признаком плохого программирования. В среде программистов такие константы получили язвительное название "магических чисел". Чтобы программа не изобиловала ими, хорошие языки программирования, такие, как Паскаль, Модула-2, Ада и другие, позволяют дать константе символическое имя и далее использовать его везде вместо самой константы. В языке Си такую возможность обеспечивает препроцессор. Например, прочитав определения

#define PI 3.14159
#define E 2.71284

препроцессор заменит в программе все имена РI и E на соответствующие числовые константы. Теперь, когда вы обнаружите, что неправильно написали значение основания натуральных логарифмов, вам достаточно исправить единственную строку с определением константы, а не просматривать всю программу.

#define E 2.71828

Препроцессор языка Си позволяет переопределять не только константы, но и целые программные конструкции. Например можно написать определение #define forever for(;; ) и затем всюду писать бесконечные циклы в виде: forever {}.

А если вам не нравятся фигурные скобки, определите

#define begin {
#define end }

и далее используйте в качестве операторных скобок begin и end, как это делается, например, в языке Паскаль. Подобные определения, называемые еще макроопределениями, или макросами, могут иметь параметры и быть еще более мощными.

Еще одна важная услуга препроцессора - включение в исходный текст содержимого других файлов. Эта возможность в основном используется для того, чтобы снабжать программы какими-то общими для всех данными и определениями.

Например, чрезвычайно часто в начале программы на языке Си встречается препроцессорная инструкция

#include <stdio.h>

Когда исходный текст программы обрабатывается препроцессором, на место этой инструкции ставится содержимое расположенного в некоем стандартном месте файла stdio.h, содержащего макроопределения и объявления данных, необходимых для работы функций из стандартной библиотеки ввода/вывода.

Напоследок несколько слов о вводе/выводе в языке Си. При разборе всех вышеприведенных примеров мы избегали объяснений, связанных с функцией printf. Это не случайно. Язык Си сам по себе не содержит возможностей для ввода/вывода информации. Все необходимое для этого реализуется с помощью библиотечных функций, автоматически подключаемых при трансляции. Впрочем, эти функции достаточно стандартны для всех реализаций языка. Настолько стандартны, что заслуженно воспринимаются многими как часть самого языка. Однако это не так, и поэтому детально знакомиться с возможностями ввода/вывода следует с учетом той ЭВМ, той операционной системы и того транслятора с языка Си, с которыми вы будете иметь дело. Отметим лишь, что стандартный набор функций для ввода/вывода достаточно мощный, чтобы удовлетворить даже очень взыскательных программистов.

КОТ И МЫШЬ
Кот гоняется за мышью в средневековом замке. Если кот не догонит мышь за определенное число ходов, она убежит. Через каждые три хода, мышь сдвигается на одну из соседних клеток. Мышью командует калькулятор, игрок управляет котом. Замок можно схематично изобразить в виде квадрата 9*9, в котором часть клеток занята колоннами:

Матчасть диванного танкиста - Страница 4 88050110

Введите программу. Начальные координаты мыши запишите в Р5. Координаты кота введите в РА. В Р0 нужно поместить число ходов. Подготовку к игре завершает ввод констант: 1 П3 П8 /-/ П2 10 П6 /-/ П4. Переключатель Р-Г установите в положение "грады". Чтобы запустить программу, нажмите В/0, С/П. Через некоторое время на индикаторе появится координата Y "мыши", в регистре Y хранится координата кота. Чтобы сделать ход, можно нажать одну из клавиш: 8 - вперед, 2 - назад, 4 - влево, 6 - вправо и клавишу С/П. Если колонна преградила путь коту, то его координата не изменится. Число 3.14, появляющееся на индикаторе,- победа, ЕГГОГ - поражение.

Контрольный пример поможет проконтролировать правильность ввода программы.

Исходные данные: 1 П3 П8 /-/ П2 10 П0 П6 /-/ П4 58 П5 51 ПА. Нажимаем В/0 С/П через некоторое время па индикаторе появляется 7, нажимаем x-y, "51". Попробуем двинуться вперед: 8 С/П, на индикаторе 7, нажимаем x-y "51" (впереди колонна).

4 С/П "7; 41" 8 С/П "7; 42" 8 С/П "6; 43" 6 С/П "6; 53" 8 С/П "6; 54" 8 С/П "7; 55" 6 С/П "7; 65" 8 С/П "7; 66" 8 С/П "ЕГГОГ"

ПРОГРАММА: 00. Сх 01. ИП5 02. ПВ 03. 4 04. П1 05. ПП 06. 67. 07. ПВ 08. ИПА 09. - 10. Fx!=0 11. 00 12. ПП 13. 67 14. ИПА 15. - 16. Fx!=0 17. 00 18. FL1 19. 12 20. ИПВ 21. ПП 22. 82 23. Fx!=0 24. 00 25. ИПВ 26. ^ 27. П1 28. ВП 29. ПС 30. F!=0 31. 00 32. - 33. Fcos 34. Fx!=0 35. 00 36. ИПВ 37. П5 38. ИПА 39. ИПС 40. С/П 41. П9 42. КИП9 43. ИПА 44. + 45. П1 46. ПП 47. 82 48. Fx!=0 49. 52 50. ИП1 51. ПА 52. ИПА 53. ИП5 54. - 55. Fx!=0 56. 59 57. Fпи 58. С/П 59. FL0 60. 62 61. K- 62. FL3 64. 38 64. 3 65. П3 66. B/0 67. ИП9 68. 8 69. - 70. Fx!=0 71. 74 72. 0 73. П9 74. ИП9 75. 2 76. + 77. П9 78. ИПВ 79. КИП9 80. + 81. В/0 82. 4 83. / 84. ^ 85. ПД 86. КИПД 87. x-y 88. ИПД 89. - 90. B/0.

В.БЫЧКОВ, ученик 10-го класса, г.Барнаул
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Ср Фев 15, 2023 12:18 am

6/88
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

"Человек с микрокалькулятором" - так когда-то назывался наш раздел, и программируемый микрокалькулятор всецело господствовал в нем. Название сменилось, и, судя по нему, главенствующее место в разделе заняли компьютеры. Владельцы микрокалькуляторов почувствовали себя ущемленными. Они хотели бы вернуть прежнее место предмету своего увлечения. Некоторые даже утверждают: поскольку у многих программируемых микрокалькуляторов появились новые хозяева, незнакомые со старыми выпусками раздела, следует опубликовать заново наиболее удачные его материалы.
Конечно, буквальная перепечатка прежних материалов исключена. Желающие могут ознакомиться с ними, беря у знакомых или в библиотеке номера "Науки и жизни" за прошлые годы. Надо искать новые формы, в которых порой уместно было бы подавать информацию, уже публиковавшуюся в прошлом. Надо искать новые темы, новые направления, новые рубрики раздела (удачный тому пример - "Бюро справок"). Только так в нем сможет удерживать свое место программируемый микрокалькулятор.
С интересным предложением подобного рода в нынешнем выпуске раздела выступает одни из его научных консультантов, С.В.Комиссаров.
Читатель Ю.А.Грязнов из Ленинграда предлагает провести в "Школе начинающего программиста" занятие о тех дополнительных возможностях, которыми по сравнению с микрокалькулятором "Б3-34" обладают "МК-61" и "МК-52" (логические операции и т.д.). С таким предложением нельзя не согласиться.
Всех желающих провести такое занятие просим прислать в редакцию в течение месяца после получения этого номера журнала текст для публикации объемом до 24 машинописных страниц.

ИЗОБРЕТЕН МИКРОКАЛЬКУЛЯТОР!
В последнее время в разделе "Человек и компьютер" появляется все больше материалов по персональным компьютерам, а программируемый микрокалькулятор постепенно сдает свои позиции. Это не случайно - пора активного его освоения позади, позади основная масса маленьких открытий и побед. Большинство читателей успешно освоили это вычислительное средство, выработали приемы составления и записи программ, ввода данных и проведения расчетов, различные маленькие хитрости. Реже стали проводиться "круглые столы", предлагаемый материал в основном посвящается решению пусть интересных, но частных задач.

К сожалению, многообразие распространенных сегодня компьютеров, большая длина программ для них, многочисленность языков программирования и их версий снижают ценность раздела как единого, цельного и уникального периодического пособия для очень широкого круга программистов-непрофессионалов. Ясно, конечно, что разговор о персональном компьютере очень важен, но без истинно массовой единой модели такого компьютера вести беседу очень сложно.
Впрочем, как бы выигрышно ни выглядел в таком сравнении программируемый микрокалькулятор, сам он отнюдь не беспорочен. В письмах читателей то и дело встречаются рассуждения на тему "если бы разработчиком микрокалькулятора был я". За ними - не праздный интерес: программируемый микрокалькулятор, несмотря на распространение персональных компьютеров, продолжает оставаться важным вычислительным средством, во многих случаях даже предпочтительным по сравнению с компьютерами более солидных классов.
Мне хотелось бы предложить читателям раздела, не ограничиваясь частными замечаниями, представить себе и описать в своих письмах такой микрокалькулятор, который максимально отвечал бы требованиям пользователей. Материалы, содержащиеся в таких письмах, позволят оформить своеобразный заказ-требование разработчикам этих вычислительных средств. Я говорил с этими людьми - они с интересом ждут читательские предложения.

Возможно, представители резных профессий по-разному представляют себе идеальный для их нужд программируемый микрокалькулятор. Даже у одного человека пожелания могут варьироваться в довольно широком диапазоне - так сказать, программа-минимум и программа-максимум. Что ж, заказов-требований может получиться несколько.

Попробую сформулировать вопросы по поводу того, как сделать просто программируемый микрокалькулятор хорошим программируемым микрокалькулятором:
1. Что должен представлять собой программируемый микрокалькулятор в отношении цены, габаритов, объеме памяти и т.д.;
2. Какими "способностями" должен обладать программируемый микрокалькулятор (вычислительные операции, организация данных и программ s ОЗУ, их хранение, обмен программами и данными, методы отображения информации);
3. Какой должна быть система команд микрокалькулятора, обозначения на клавишах;
4. Как можно охарактеризовать потенциального пользователя программируемого микрокалькулятора, каковы его нужды и требования.

Все эти вопросы, на мой взгляд, можно рассматривать только в совокупности.

Уверен, что мнений здесь будет много и разговор получится интересным и доступным для большинства читателей рубрики.
С.КОМИССАРОВ (г.Москва)

Матчасть диванного танкиста - Страница 4 88060110
Рис. А.МАКАРЕНКО (г.Москва)

АЛФАВИТ КАРМАННОЙ ЭВМ
Во вступлении к статье "Электронный детектив" (6/87) читателям предлагалось исследовать возможности использования логических операций, выполнимых на микрокалькуляторах "МК-52" и "МК-61". Большинство читателей, откликнувшихся на это предупреждение, занялись проблемой, непосредственного отношения к логике не имеющей.

... Откуда берутся буквы Е и Г, С и L, возникающие на индикаторе при вводе программы и выполнении некоторых операций? Читатели, выяснившие этот вопрос, знают: символы эти связаны с 16-ричной системой счисления - она используется в арифметическом устройстве микрокалькуляторов при выполнении числовых выкладок. Результаты выкладок выводятся на индикатор, естественно, в привычной для нас десятичной системе, однако, в отдельных случаях, о которых говорилось выше, на индикаторе могут показаться и сами символы. Вот их значения:

Матчасть диванного танкиста - Страница 4 88060210

В последнем столбце таблицы нет ошибки: число 15, одно из основных в 16-ричной системе, на индикаторе микрокалькулятора действительно отображается пустым местом, пробелом. Однако тут есть источник недоразумений: в традиционной записи чисел в 16-ричной системе число 15 обычно записывается в виде буквы F. Так что если вы увидите в подобной записи символ F, знайте: на индикаторе микрокалькулятора в соответствующем месте будет пропуск.

Если добавить к уже названным буквам Е, Г, С те цифры, которые можно прочесть, как буквы (3 - З, 4 - Ч, 6 - Б, 8 - В, 0 - О), если к тому же договориться об употреблении латинских букв в русских словах (И - I, Л - L, 5 - S) [Некоторые читатели идут еще дальше. Е.В.Прошкин из Казани предлагает читать цифру 7 как букву Т. а число 177 как М; В.Н.Козлов из Иркутска - считать точку за мягкий и твердый знаки внутри слов. "Ну, а если позволить микрокалькулятору,- продолжает В.Н.Козлов,- писать с акцентом ребенка или человека, недостаточно хорошо владеющего русским языком, то открываются еще большие возможности".
П.Тарасов из Котласа считает, что надо в некоторых случаях переворачивать микрокалькулятор: тогда, например, число 1104 будет выглядеть, как слово "холл", написанное латинскими буквами], то словарный запас микрокалькулятора становится довольно обширным. А.Самарин из г.Дзержинска Горьковской области сумел даже составить из этих слов небольшое стихотворение:

СОВЕ - БОГОВО?
Бес-босс
лез, бос.
Сове вез
лес, овес.
Воз - бел.
Бог велел:
"Лес - сове,
овес - себе".

Подобные слова большинство читателей называют видеограммами и используют либо как команды оператору на ввод информации, либо для примечаний к выводимой информации, либо как оценки в играх (почему-то в этом случае большинство читателей отдают предпочтение словам уничижительным - OCEL и т.п.; здесь абсолютным чемпионом является Н.Карпунькин из Нарьян-Мара).

На таком фоне откровением выглядит игра киевского школьника Евгения Бредни, в которой игровое поле н метка, определяющая положение игрока на нем, символы препятствий и чудища, мешающего игроку добиться победы, создаются путем преобразования 16-ричного числа и его инверсии. Игра будет опубликована в одном из ближайших номеров журнала.

Многие читатели приводят примеры создания видеограмм, но только школьник из Житомира Марат Файзулин и москвич А.Орленко указывают общие приемы, какими надо пользоваться при их составлении. Сначала они определяют, можно ли создать видеограмму с помощью инверсии и, если нельзя, то применяют логическое умножение, логическое сложение или сложение по модулю 2. (Полная сводка результатов логических действий над цифрами от 0 до 9 приведена в таблицах - см. ниже). Берется слово, представимое имеющимися в микрокалькуляторе символами. Затем выясняется, можно ли каждую букву слова получить применением ОДНОЙ И ТОЙ ЖЕ логической операции к одной (в случае инверсии) или двум (в случае прочих операций) цифрам. Из таких цифр формируются соответствующее одно или два числа, к которым и применяется выбранная операция. На индикаторе - желаемое слово. Например, из числа 913 в результате инверсии получается слово БЕС.

Матчасть диванного танкиста - Страница 4 88060310
Таблицы показывают результаты применения логических операций н однозначным числам.

Таков общий принцип получения видеограмм. Его реализация на практике требует некоторых добавочных действий. Если видеограмма не начинается с цифры 8 (буквы В), слева к исходным числам приписывают любую значащую цифру. В начале каждой видеограммы появляется цифра 8, которая часто бывает не нужной. Некоторые читатели предлагают отделять ее от текста видеограммы 16-ричной цифрой F, то есть пробелом. Школьник из подмосковной Коломны Александр Шиханов и П.Зомарев из Куйбышевской области для избавления от ненужной цифры 8 используют команду К{х}. Правда, тогда появляется порядок числа, от которого они избавляются командами ВП 7 П (запись возможна в любой свободный регистр памяти). Вместо последней команды, как указывает москвич К.Васильев, использовавший этот прием для исключения из текста видеограммы запятой, может быть использована команда ^. Если первым знаком видеограммы является ноль (буква О), то при применении этого приема ноль исчезнет и для его сохранения видеограмму нужно начинать с пробела, а если ноль стоит на последнем месте, то для того, чтобы он выводился на индикатор, видеограмма должна кончаться пробелом. Но вот что пишет наш читатель из Крыма В.Андриашин. "При обычных операциях с 16-ричным числом, содержащим цифру F, индицируемую пробелом, происходит самопроизвольная перестановка содержимого регистров памяти, микрокалькулятор без всяких команд переходит в режим программирования или вычислений, безобразно уродуется ранее набранная программа, не выполняются команды, вводимые с клавиатуры, микрокалькулятор доходит до "умопомрачения", когда, после нескольких подергиваний, индикатор гаснет и единственное, что приводит его в чувство,- это кратковременное выключение питания. После чего он, лишившись программы и констант, записанных в регистры памяти, вновь становится послушным слугой своего владельца". Просим читателей, которые сталкивались с таким или другим аномальным явленном, сообщить нам о своих наблюдениях.

Несколько слон о задаче "Электронный детектив", давшей нам повод к разговору о логических операциях.

Некоторые читатели прислали более эффектные решения этой задачи. А.Кисенков из Комсомольска-на-Амуре решил ее в двоично-десятичной системе, а А.Юмашин из Саратова прислал даже мини-исследование, и котором доказал, что "МК-52" и "МК-61" правильно производят логическое сложение, логическое умножение и сложение по модулю 2 с числами, записанными в системах счисления с основанием n=2**k, а для инверсии этих чисел их сначала нужно сложить но модулю 2 с числом
8.XnXnXnXnXnXnXnXn, в котором Хn=16-n, и лишь после этого производить инверсию. Правильность своих выводов А.Юмашин продемонстрировал, решив задачу "Электронный детектив" в системе с основанием 4=2**2. Обидно, что в самый последний момент он дрогнул под грузом инструкций к "МК-52" и "МК-61", написав, что для этих калькуляторов показатель степени k может принимать лишь значения 2, 3 и 4. Это бесспорно, но он упустил самый важный вывод: k может быть равно единице, а это значит, что на обоих микрокалькуляторах можно непосредственно работать с двоичными числами.

К.Туркин из Киева пополняет имеющиеся логические операции еще двумя: логическим тождеством (эквивалентностью) А=В и логическим следствием (импликацией) А->В. Первая проводится на микрокалькуляторах как инверсия сложения по модулю 2, а вторая - как логическое сложение инверсии А с В.

Некоторые читатели приспособили калькулятор для решения задач психологического практикума нашего журнала. Например, Н.Соловьев из Тбилиси прислал программу для решения задачи о комиссаре Мегрэ, опубликованной в 1/82.
Обзор читательских писем по просьбе редакции провел В.А.ХМЕЛЮК (г.Мытищи)

Трудно удержаться от упрека авторам программ, присланных в ответ на статью "Электронный детектив". Ни одна из них не снабжена не только алгоритмом, но даже простейшим описанием действий, выполняемых той или иной частью программы. А ведь без этого, чтобы понять авторский замысел, нужно потратить много сил и энергии. Если к этому добавить, что подавляющее большинство наших читателей пишут на клетчатой бумаге, вырванной из школьных тетрадей, используют для письма каждую горизонтальную пинию, пишут с обеих сторон листа и не оставляют полей, где можно было бы поставить хотя бы одобрительный восклицательный знак, то можно себе представить чувства людей, работающих с читательскими письмами. Из многочисленных писем только два - А.А.Орпенко и К.Ю.Туркина - написаны на стандартных листах, с одной стороны листа, с расстоянием между строками не менее 1см.

В письмах с откликами было и несколько больших статей. Некоторые авторы (их хотелось бы поставить в пример остальным) сначала сообщают редакции о том, что могут представить материал на ту или иную тему, и после положительного ответа оформляют его для печати, руководствуясь советами редакции.

Большое спасибо всем читателям, приславшим свои материалы и соображения о логических операциях.

ФОРМА И СОДЕРЖАНИЕ

Матчасть диванного танкиста - Страница 4 88060410

Мне кажется, что читатели могли бы придумать немало программ-миниатюр, форма листинга которых каким-то образом отражала бы сущность заложенного алгоритма или приема программирования. В качестве "затравки" предлагаю коротенькую программу на Паскале, которая позволяет получить последовательность чисел Фибоначчи (1, 1, 2, 3, 5, 8, ...), где каждое новое число, за исключением двух первых, равно сумме двух предыдущих. Количество знаков в строках программы выражается первыми девятью числами Фибоначчи.
В.СОЛОВЬЕВ (г.Киев)

Матчасть диванного танкиста - Страница 4 88060510
Рис. С.ЕЛКИНА (г.Воронеж)

ПРОГРАММА ПЕЧАТАЕТ САМУ СЕБЯ
Эта проблема восходит к творцу кибернетики Ноберту Винеру.

Можно ли написать программу, которая печатала бы саму себя? При этом она, естественно, не должна пользоваться никакими операторами ввода, внешними подпрограммами, внутренними представлениями символов и прочими нарушениями "спортивной этики".

Несмотря на довольно широкую известность, задача многими считается неразрешимой. Предлагается опровергнуть это заблуждение.

Требования к программе:

1. Полная идентичность входного и выходного текстов.

2. Абсолютная автономность, отсутствие внешних подпрограмм и данных; допустимо использование только стандартных операторов вывода.

3. Недопустимо использование приемов, связанных с "умным" транслятором, исправляющим небольшие ошибки синтаксиса и т.п.. а также особенностями конкретной ОС. (Эти требования конкретизируют наиболее важные моменты пункта 2 и уравнивают в правах различные ЭВМ).

4. Желательно, чтобы каждый оператор вывода печатал ровно одну выходную строку, чтобы на каждой строке был один или более законченных операторов и не было строки продолжения. (Этот пункт исключает регулирование текста печатающим устройством - в противном случае программу нельзя считать машинно-независимой. Пункты 3 и 4 нужны еще и для того, чтобы непредвзято сравнивать программы на разных языках).

Я располагаю программой на языке PL/I, удовлетворяющей всем перечисленным требованиям и имеющей около полусотни операторов, но это заведомо не предел.
А.РАННИЙ (с.Переделкино Московской области)

1024 СОВЕТА
(байт третий)
17. Не допускай, чтобы новая информация "выползала" на дисплее снизу, выталкивая старую за пределы верхнего края экрана. Помни! Опытный лектор перед очередной фразой откашливается, а хорошая ЭВМ очищает дисплей. (Г.Сенин. г.Москва).

18. Оградить файл данных на диске от посторонних взглядов можно, дав ему секретное имя "АААААААА", например. Секрет здесь в том, что в этом имени часть букв А из русского, а часть - из латинского алфавита и об этом знает только хозяин файла. (О.Репин, г.Люберцы. Прим. редакции: использование букв кириллицы в идентификаторах допустимо не на всех языках).

19. Если в диалоге с ЭВМ нужно просматривать периодически появляющуюся на дисплее информацию (см. совет 4 в 8/87), то сделай так, чтобы машина оглашала звуковым сигналом или мелодией очередное ее появление. Это позволит в паузах спокойно заниматься другим делом без нервного поглядывания на дисплей. (Н.Кукушкин, г.Ленинград).

20. Круглым номером строки (100, 500, 1000 и т.д.) в программе на Бейсике можно отмечать начало нового блока. (А.Годин, г.Москва).

21. Не "запихивай" сложную и длинную формулу в один оператор присваивания. Удобнее и нагляднее разбить такую формулу на составляющие (числитель, знаменатель и т.д.) и реализовать в программе несколькими операторами. (А.Годин).

22. Вводя в ЭВМ числовой массив. предусмотри, чтобы программа отыскивали его минимальный и максимальный элементы. Просмотр этих чисел может помочь выявить некоторые ошибки - пропуск десятичной точки, например. (В.Птнцын. г.Москва).

23. Девиз хорошего программного продукта - "клиент всегда прав". Умей моделировать возможные, промахи н ошибки будущего пользователя твоей программы и вноси в нее изменения, дополнения и инструкции, исключающие аварийные остановы при любом направлении диалога человека с машиной. (В.Птицын).

24. Чтобы не запутаться в сложных формулах при написании черновика программы, используй круглые, квадратные, фигурные н прочие скобки. При вводе программы в ЭВМ заменяй эти скобки на те, какие допустимы. (В.Птицын)

МАЛЕНЬКАЯ РЕЦЕНЗИЯ
В конце прошлого года пользователи микроЭВМ получили хороший подарок. Издательство "Наука" выпустило книгу В.П.Дьяконова "Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ". В ней приведены более чем 300 программ, реализующих алгоритмы решения задач элементарной и высшей математики, статистики, электро- и теплотехники, экономики. Программы написаны на наиболее простой версии Бейсика - для машины "Электроника Д3-28", но автор дает рекомендации для их использования на других отечественных и зарубежных микроЭВМ.

Здесь помещен журнальный вариант программы из справочника В.П.Дьяконова. С ее помощью методом наименьших квадратов можно подобрать уравнение из 16 возможных (см. строки 1-16), аппроксимирующее табличную зависимость функции одной переменной. Все, кому приходится вести статистическую обработку экспериментальных данных, оценят практическую пользу программы. Она позволяет повторить расчет с использованием другого аппроксимирующего уравнения, исправить допущенную ошибку при вводе координат точек (см. меню в конце строки 32). Ядро программы вписано в структурную диаграмму. В программе широко используются вычисляемые переходы к подпрограммам (см. строки 22, 26, 29) и к меткам (см. строку 32). Программные строки 1-16 используются двояко: для подсказки пользователю (см. начало строки 19) и для расчета значений функций (см. строку 29).

Матчасть диванного танкиста - Страница 4 88060610

Можно сожалеть, что в программах справочника не выделены структурные управляющие конструкции. Это бы облегчило их разбор, модернизацию.

[ УЗЕЛКИ НА ПАМЯТЬ
Для тех, кто составляет программу "Вечный календарь", предлагаю найденное мной выражение для вычисления количества дней в месяце в виде функции К(М, Y), где М - номер месяца, Y - год:

К = 28 + ABS(INT(M/8 )-(М/2-INT(M/2))*2) + 2*SGN(ABS(M-2)) + (1-SGN((Y/4-INT(Y/4))*4))*(1-SGN(ABS(M-2)))
А.ПУШКАРЕВ (г.Душанбе) ]

ФОРТ ДЛЯ БК
Основной недостаток компьютера "БК-0010" - небольшой объем памяти. Эту слабую сторону в какой-то мере позволяет компенсировать язык форт. С "БК-0010" можно работать на Фокале, Бейсике и Ассемблере, но, как известно, все эти языки неудобны с точки зрения любителя структурного программирования. Кроме того, интерпретаторы Фокала и Бейсика не позволяют составлять программы, эффективные с точки зрения быстродействия. Обоих этих недостатков лишен Форт.

Этот язык был создан еще в 70-е годы Ч.Муром и задумывался для решения задач управления. Однако вскоре выяснилось, что новый язык весьма удобен для системного программирования, создания баз данных, видеоигр, решения многих задач. В основном это объясняется тем, что Форт, будучи языком высокого уровня, тем не менее оставляет полный доступ ко всем возможностям машины. Другая привлекательная черта - это компактность интерпретатора Форта (от 5 до 10 Кбайт) и краткость написанных на нем программ. Известно, например, что программа, составленная в кодах, требует не менее двух байт на команду. В то же время нередко встречаются команды в четыре, а то и в шесть байт. На Форте любая команда занимает два байта в коде. Соответственно и быстродействие получается чрезвычайно высоким: например, "пустой" цикл от 1 до 30000 на Фокале выполняется за 75 секунд, на "вильнюсском" Бейсике - за 28, на Форте - всего за 2.

Не менее важное достоинство форта - это его гибкость. Работая на Форте, можно создавать свои проблемно ориентированные версии языка: для этого предусмотрены средства определения новых слов или переопределения старых. Слово в Форте - это некий аналог процедуры в Паскале или подпрограммы в Бейсике. Программа на Форте может читать и изменять все, что угодно,- данные, саму программу, интерпретатор, даже операционную систему, если не предусмотрены средства ее защиты.

Есть у Форта, конечно, и недостатки. Основной из них - наличие только одного типа данных - целых чисел. Впрочем, определить работу с массивами тут нетрудно. Сложнее с вещественной арифметикой, отсутствующей в большинстве Форт-систем. В то же время можно определить набор слов и для вещественной арифметики; уже существует специальный пакет этих слов. И еще - в Форте недостаточно мощна структура работы с внешними устройствами: дисками, магнитными лентами.

Первые версии Форта были адаптированы для "БК-0010" в Ленинграде - независимо А.Цаплевым (стандарт 1978 года FIG-FORTH) и М. и А.Ефимовыми (стандарт 1983 года FORTH-83). Версия FIG-FORTH неоднократно развивалась и дополнялась: например, в ней появился экранный редактор (адаптировал Ю.Фрадкин). FORTH-83 также совершенствовался, последние версии разрабатывались всеми авторами статьи.

В 1987 году мы передали версию Форта в фонд алгоритмов и программ ЦНИИ "Электроника" (Москва, телефон 432-92-41).

Освоить Форт не так легко, как, например, Бейсик. Но тот, кто не побоится трудностей изучения нового языка, получит прекрасный инструмент для создания интересных и эффективных программ.
А. и М.ЕФИМОВЫ, Д.ЦАПЛЕВ (г.Ленинград)

ФОКАЛ ИЛИ БЕЙСИК?
После первой публикации, где упоминалось о существовании Бейсика для "БК-0010", редакция получает множество писем, авторы которых сетуют на ограниченные возможности, предоставляемые штатным Фокалом, и просят помочь с приобретением Бейсика. В то же время Фокал совсем не так уж плох, а с некоторыми расширениями может успешно спорить с Бейсиком. Расширение Фокала - программа XFOCAL, о которой пойдет рассказ. Она написана С.Зильберштейном из г.Кирова. Обзаведясь ею, пользователь получает возможность экранного редактирования. При этом курсор можно перемещать по экрану в любых направлениях. Ввод любой строки в память происходит после нажатия клавиши ВВОД. При этом можно вставлять пустые строки, очищать экран, дублировать строки, есть и другие сервисные средства. Можно записывать программы в машинных кодах н вызывать их исполнение. В отличие от обычного Фокала его новая модификация позволяет подгружать новые программы к уже имеющейся в памяти машины. Пользователь сможет создавать небольшие картинки для компьютерной мультипликации - для этого предназначен специальный оператор. В нужный момент эти картинки также можно будет вывести на экран специальной командой. И, конечно, приятным сюрпризом для всех работающих с Фокалом будет появление оператора для ввода музыкальных фраз. Это, по существу, встроенный музыкальный редактор.

К сожалению, тесные рамки рубрики не позволяют нам подробно останавливаться на этих и других возможностях новой версии языка. В заключение сообщаем, что программа С.Зильберштейна занимает всего 1.5 Кбайт оперативной памяти и работает в адресах 35000-37777. При необходимости ее можно переместить в другой участок памяти компьютера.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Фев 16, 2023 12:13 am

В 7,8/88 разделов о компьютерах ничего не было.

- И еще на Лого можно писать программы, которые пишут и запускают другие программы. На других языках это не удается. Они отказывают, когда пытаешься это сделать.
/Гарри Гаррисон и Марвин Минский. Выбор по Тьюрингу/

9/88
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДВАДЦАТОЕ, посвященное языку Лого.
... Почему существует так много языков программирования? Ведь это разнообразие не оправдано национальными различиями: большинство языков программирования имеет общую лексическую базу - английскую. Не связано оно и с разнообразием типов машин: программа на Паскале в равной мере понятна и маленькой "Ямахе" и огромной машине из серии ЕС.
Все дело в том, что для каждой области применений ЭВМ наиболее удобным оказывается свой язык. Инженерную задачу о прочности плотины удобнее решать на Фортране, для расчета заработной платы более удобен Кобол, а если предстоит обрабатывать длинные и сложно организованные списки, то тут наиболее подходящим средством становится Лисп. Квалификация программиста определяется не только тем, как быстро написал он программу, а в первую очередь тем, насколько верно выбрал он для описания своей задачи тот или иной язык программирования.
Главное, чем характеризуется любой из этих языков,- именно область его применений, или, как говорят программисты, его предметная область. У языка Лого она, пожалуй, наиболее удивительна - педагогика младшего школьного возраста. Созданный американским программистом и педагогом Сеймуром Пайпертом в 1969 году, этот язык сегодня завоевал популярность во Франции и Болгарии, Японии и Австралии... А ведь стандарт Лого не зафиксирован до наших дней! Лого живет, развивается, растет, обновляясь и совершенствуясь за счет методических новинок и новых достижений компьютерной техники. Вслед за средствами графики, основанными на понятии координат, в нем появились команды, позволяющие создавать цветные рисунки, а затем средства для сочинения цветомузыкальных произведений...
Символично: язык, предназначенный для обучения детей, сам растет, словно ребенок, превращающийся в юношу, которому еще самому расти и расти. В самом деле, Лого еще рано стандартизовать, и поэтому помещенный ниже короткий рассказ о нем не претендует на полное совпадение в орфографии ключевых слов с существующими (для компьютера "Правец") или создаваемыми (для машин "Ямаха" и "Корвет") русско-язычными версиями Лого. Речь пойдет лишь о некоторых особенностях языка, отличающих его от Бейсика, Паскаля и Рапиры, уже знакомых читателям "Науки и жизни".
Ведет занятие кандидат технических наук Ю.А.ПЕРВИН (г.Переслаель-Залесский)

ЧЕРЕПАШЬЯ ГРАФИКА
Средства машинной графики в той или иной языковой системе программирования обычно составляют лишь дополнительные возможности языка. Даже в Рапире рисующие средства - это стандартные процедуры и, следовательно, могут изучаться лишь после знакомства с фундаментальным понятием процедуры. А вот в Лого команды рисования - первичные инструкции языка. Они же являются и первыми в методической цепочке основных понятий информатики. Надо ли удивляться? Ребенок сначала рисует, а только потом пишет н вычисляет.

Такому ребенку легко подружиться со знаменитой пайпертовской Черепахой. Кстати, в те времена, когда Пайперт изобрел Лого, его Черепаха действительно напоминала неторопливое пресмыкающееся: на маленьких лапках-колесиках она каталась по паркетному полу, неся на спине-панцире схемы из реле, управляемых сигналами-командами. Потому-то, видимо, так прижилось это название, хотя в современных версиях Лого Черепаха совсем не похожа на своего электромеханического предка. Она живет на цветном поле дисплея, как персонаж мультфильма. Иногда этот персонаж даже стилизован до простой треугольной фигурки. Исходное положение Черепахи - центр экрана; ее перемещения измеряются в "черепашьих шагах" (размер экрана - примерно 250*400 таких шагов); ее повороты налево и направо - в градусах.

Для создания простейших рисунков достаточно четырех команд Лого - ВПЕРЕД, НАЗАД, ВЛЕВО, ВПРАВО. Каждая из этих команд состоит из ее названия и параметра - величины, на которую Черепаха перемещается или поворачивается. А вот и первая программа, по которой Черепаха рисует квадратик:

ВПЕРЕД 60
ВПРАВО 90
ВПЕРЕД 60
ВПРАВО 90
ВПЕРЕД 60
ВПРАВО 90
ВПЕРЕД 60
ВПРАВО 90

Лого - диалоговый язык: каждая набранная на клавиатуре команда немедленно выполняется, так что квадратик вырисовывается на экране последовательно за 8 шагов-команд. Впрочем, число команд в этой программе можно сократить, если обратить внимание на структуру программы: она состоит из четырехкратно повторяемых пар команд ВПЕРЕД 60 ВПРАВО 90.

Многократно повторяющиеся действия - это именно тот вид деятельности, где помощь машины человеку особенно нужна: люди предпочитают сами решать уникальные задачи, требующие проявления интеллекта, а вот повторяемость простых однообразных действий быстро утомляет человека и порождает ошибки. Команда организации повторяющихся действий - цикл - записывается в Лого (для нашего примера) так:

ПОВТОРИ 4 [ВПЕРЕД 60 ВПРАВО 90]

Эта команда имеет два параметра - число повторений н список команд. Списки Лого надо заключать в квадратные скобки.

Обратите внимание: в отличие от Бейсика в Лого строго требуется отделять одно слово (лексему) от другого пробелом (или пробелами). .

Воспользуемся циклом, чтобы нарисовать дом. Если начать рисунок из левого верхнего угла (первая команда - ВПРАВО 90), то достаточно к приведенной выше команде ПОВТОРИ дописать команды ВЛЕВО 60 ВПЕРЕД 60 ВПРАВО 120 ВПЕРЕД 60 и получится домик:

Матчасть диванного танкиста - Страница 4 88090110

Такой рисунок хочется сохранить на память... или запомнить в памяти ЭВМ. И понятие процедуры - программы, хранимой в памяти и имеющей имя, по которому она вызывается для выполнения,- появляется на самых первых этапах изучения Лого. Словно мы учим машину понимать новую команду, которая была ей недоступна ранее.

ЭТО ДОМ
ВПРАВО 90
ПОВТОРИ 4 [ВПЕРЕД 60 ВПРАВО 90]
ВЛЕВО 60 ВПЕРЕД 60
ВПРАВО 120 ВПЕРЕД 60
КОНЕЦ

Все команды между заголовком описания процедуры - строкой ЭТО ДОМ - и окончанием описания - словом КОНЕЦ - составляют тело процедуры ДОМ. Описание как нельзя более просто и выразительно. Вызов процедуры - команда, состоящая в упоминании имени процедуры ДОМ.

Еще одна пара команд - РИСУЙ и НЕРИСУЙ - может заставить Черепаху оставлять или не оставлять след. Значит, теперь можно рисовать не только фигуры, создаваемые единым, неотрывным "росчерком пера", но и рисунки, составленные из отдельных изолированных фрагментов. Дорисовать на фасаде домика окошко - это значит добавить к телу процедуры ДОМ команды

ВПРАВО 30 НЕРИСУЙ ВПЕРЕД 20
ВЛЕВО 90 НАЗАД 40
РИСУЙ ПОВТОРИ 4
[ВПЕРЕД 20 ВПРАВО 90]

Матчасть диванного танкиста - Страница 4 88090210

Если теперь надо нарисовать улицу из нескольких домиков, то достаточно написать предварительно еще одну процедуру ПОДВОД, переносящую перо в точку, являющуюся исходной для рисования очередного домика. Вот эта процедура:

ЭТО ПОДВОД
НЕРИСУЙ ВПЕРЕД 60 ВЛЕВО 90
ВПЕРЕД 20 РИСУЙ
КОНЕЦ

Тогда с помощью описания

ЭТО УЛИЦА
ПОВТОРИ 3 [ДОМ ПОДВОД]
КОНЕЦ

по вызову УЛИЦА легко получить:

Матчасть диванного танкиста - Страница 4 88090310

В простой команде-вызове УЛИЦА спрятана достаточно сложная структура действий, которую еще следует раскрыть с помощью описаний процедур ПОДВОД и ДОМ. Простейшие средства - ведь еще не введены не только условные команды, но даже присваивания,- а какой простор для размышлений!

ПАРАМЕТРЫ ПРОЦЕДУР
Естественность, с которой вводится в Лого понятие параметров процедуры и понятие рекурсивной процедуры, практически недостижима в других языках. Действительно, вот описание процедуры КВАДРАТ:

ЭТО КВАДРАТ
ПОВТОРИ 4
[ВПЕРЕД 60 ВПРАВО 90]
КОНЕЦ

Эта процедура рисует квадрат фиксированного размера со стороною 60. Для того чтобы можно было рисовать квадрат любого размера, надо предусмотреть в программе замену константы 60 на имя переменной, которая сможет принимать любые задаваемые значения. Значение переменной X в Лого обозначается :Х .

ЭТО КВАДРАТ :СТОРОНА
ПОВТОРИ 4
[ВПЕРЕД :СТОРОНА ВПРАВО 90]
КОНЕЦ

Такое описание процедуры с формальным параметром :СТОРОНА дает возможность нарисовать квадрат любого размера. Достаточно сделать вызов процедуры, указав рядом с ее именем значение параметра (в нашем случае величину стороны):

КВАДРАТ 20

Процедуру КВАДРАТ с параметром можно вызвать, например, внутри процедуры ДОМ, обеспечивая тем самым рисование дома любого размера:

ЭТО ДОМ :СТЕНА
ВПРАВО 90 КВАДРАТ :СТЕНА
ВЛЕВО 60 ВПЕРЕД :СТЕНА
ВПРАВО 120 ВПЕРЕД :СТЕНА
ВПРАВО 30 НЕРИСУЙ
ВПЕРЕД :СТЕНА / 3 ВЛЕВО 90
НАЗАД 2 * :СТЕНА / 3
РИСУЙ КВАДРАТ :СТЕНА / 3
КОНЕЦ

При вызове процедуры с параметром вслед за именем процедуры указывается выражение - фактический параметр, или параметр вызова. Рисуя квадрат со стороной (10+2)*5, надо сделать вызов

КВАДРАТ (10 + 2) * 5

В команде КВАДРАТ :СТЕНА / 3 внутри тела процедуры выражение, являющееся параметром вызова, составлено, в частности, из значений переменных; в вызове КВАДРАТ (10 + 2) * 5 фактический параметр представляет собою комбинацию числовых констант. Сначала вычисляется значение выражения, представляющего собой фактический параметр, а затем выполняется тело процедуры при параметре, равном вычисленному значению. Такой способ передачи параметров при вызове процедуры называют передачей по значению. Он наиболее прост с методической точки зрения. Поэтому он и выбран в Лого среди других возможных способов передачи параметров.

ДВЕ ФОРМЫ ЗАПИСИ ОПЕРАЦИЙ

В связи с арифметическим выражением уместно сделать одно отступление, связанное с формой записи арифметических выражений и условий. Написанное в команде КВАДРАТ (10 + 2) * 5 выражение имеет привычную для математики и многих языков программирования форму. Форма записи операции, при которой знак операции изображается между операндами, называется инфиксной. Наряду с этой формой в Лого используется (и в большинстве случаев предпочитается) префиксная форма записи, при которой знак операции ставится перед операндами. При этом знаком операции обычно служит ее наименование или буквенное обозначение. Так, наряду с 2 + 3 в Лого можно писать СЛОЖИ 2 3. Запись (10 + 2) * 5 может иметь вид

УМНОЖЬ СЛОЖИ 10 2 5

Вместе с записью отношения 4 > 2 правомочна запись БОЛЬШЕ? 4 2

Условие (4 - 1) <2 допустимо представлять в виде МЕНЬШЕ? ВЫЧТИ 4 1 2.

Однако будьте осторожны: правомочность двух форм записи не дает права смешивать обе формы в одном выражении!

Префиксная форма записи делает операцию внешне похожей на команду: так же с названия начинается операция, таким же образом за названием операции следуют ее параметры-операнды. Однако отличие операции от команды существенно. Действительно, попробуйте написать операцию сложения отдельной строкой программы

СЛОЖИ 2 3

Машина ответит недовольным сообщением

ЧТО ДЕЛАТЬ С 5

Она выполняет предписанную операцию, однако по недосмотру программиста не знает, что предпринять с полученным результатом. Если достаточно, например, просто полюбоваться на результат сложения с экрана, можно для этого написать команду вывода

ПИШИ СЛОЖИ 2 3

Тогда на следующей строке появится ожидаемое 5.

В богатом наборе операций Лого наряду с необходимыми в школьной вычислительной практике элементарными функциями квадратного корня, абсолютного значения и др. существует и ряд специфических. Например, операция ЦВЕТ [:X :Y] определяет числовой код цвета в точке экрана с координатами X Y; операция ОР (без параметров) определяет ориентацию Черепахи в текущий момент времени - текущий угол относительно исходного состояния, направления "на север"; операция ДСЧ :N - датчик случайных чисел, вырабатывающий случайное целое число из интервала от 0 до N-1. Например, бросание игральной кости программируется командой

ПИШИ СЛОЖИ 1 ДСЧ 6

Для арифметических операций в инфиксной форме Лого сохраняет известный в математике приоритет операций. Используя традиционные инфиксные операции, программист может управлять их приоритетом, расставляя круглые (только круглые!) скобки. В выражениях, записываемых в префиксной форме, скобки оказываются ненужными: конструируя выражение, программист расставляет операции в желаемом порядке.

Особенностью префиксных операций является фиксированное число операндов. Так, инфиксная операция сложения трех операндов 1 + 3 + 5 вполне понятна машине, так что на команду ПИШИ 1 + 3 + 5 она даст ответ 9, тогда как команда ПИШИ СЛОЖИ 1 3 5 воспринимается ошибочной: машина понимает ее как ПИШИ 4 5, но поскольку в команде ПИШИ, по определению, один параметр то она сообщает ЧТО ДЕЛАТЬ С 5. Для исправления создавшегося положения следовало бы писать ПИШИ СЛОЖИ СЛОЖИ 1 3 5.

РЕКУРСИЯ
Читатель, внимательно следящий за публикациями под рубрикой "Школа начинающего программиста", уже встречался с понятием рекурсии в Паскале и Рапире. Напомним: рекурсией называется прием программирования, при котором процедура в ходе выполнения вызывает сама себя. Рекурсия допустима не в каждом языке программирования. Так, например, в Бейсике рекурсии не разрешены. Лого же пользуется рекурсивными процедурами очень активно.

Познакомившись с понятием арифметического выражения, можно теперь поговорить о рекурсии в Лого. Впрочем, зачем говорить, когда можно рисовать?

Нетрудно, используя цикл, дать описание процедуры, рисующей правильный N-угольник. Однако мы запишем эту процедуру сразу в рекурсивном виде, чтобы показать, насколько рекурсия оказывается изящнее привычного цикла

ЭТО МНОГОУГОЛЬНИК :СТОРОНА :N ВПЕРЕД :СТОРОНА
ВПРАВО 360 / :N
МНОГОУГОЛЬНИК :СТОРОНА :N
КОНЕЦ

При N=4 и СТОРОНА=60 по этой процедуре получается уже знакомый квадрат. Однако на экране будет на сей раз не статическое изображение квадрата с Черепахой в углу, а бесконечный мультфильм про путешествие Черепахи по квадратной дорожке: только закончилось построение одной стороны многоугольника, а в процедуре снова вызов той же программы, ... пока выполнение программы не будет остановлено нажатием клавиши СТОП иа клавиатуре.

Еще более выразительна рекурсивная программа, которая при каждом обращении увеличивает значение параметра СТОРОНА на постоянную величину

ЭТО СПИРАЛЬ :СТОРОНА :УГОЛ
ВПЕРЕД :СТОРОНА ВПРАВО :УГОЛ
СПИРАЛЬ :СТОРОНА + 2 :УГОЛ
КОНЕЦ

Матчасть диванного танкиста - Страница 4 88090410

В течение все новых вызовов процедуры СПИРАЛЬ картинки рисуются до тех пор, пока машина не выдаст на экран сообщение: ВЫХОД ЗА ПРЕДЕЛЫ ЭКРАНА.

Можно, однако, запрограммировать прекращение рисования в желаемый момент если воспользоваться условной командой. В Лого она состоит из ключевого слова ЕСЛИ, условия (в инфиксной или префиксной форме) и двух параметров-списков (в сокращенной форме команды - одного): один список - ветвь ТО, другой - ветвь ИНАЧЕ.

ЭТО СПИРАЛЬ :СТОРОНА :УГОЛ
ВПЕРЕД :СТОРОНА ВПРАВО :УГОЛ
ЕСЛИ БОЛЬШЕ? :СТОРОНА 250
[СТОП]
[СПИРАЛЬ :СТОРОНА+2 :УГОЛ]
КОНЕЦ

Лого, подобно Паскалю и Рапире (впрочем, отдавая даиь истории, правильнее было бы говорить: "Паскаль и Рапира вслед за Лого..."), определяет функцию как процедуру, вырабатывающую и возвращающую в вызывающую программу единственное результирующее значение.

Процедура-функция СРЕДНЕЕ с двумя параметрами имеет описание:

ЭТО СРЕДНЕЕ :X1 :Х2
ВЕРНИ (:Х1 + :Х2)/2
КОНЕЦ

Если требуется вывести иа экран разность между произведением величин X и Y и их средним арифметическим, это можно сделать командой вывода

ПИШИ :X * :Y - СРЕДНЕЕ :X :Y

Префиксная форма записи операций позволяет сделать еще более прозрачной параллель между процедурами и функциями. Действительно, процедуру можно рассматривать как команду, сконструированную программистом для своей собственной задачи. В такой же степени функция есть операция, не существующая исходно в языке, но построенная для индивидуальной программы и приведения к принятому для операций Лого виду.

Функции Лого рекурсивны. Вот как вычисляется факториал числа N - произведение всех целых чисел от 1 до N:

ЭТО ФАКТОРИАЛ :N
ЕСЛИ МЕНЬШЕ? :N 0
[ВЕРНИ [ЧИСЛО ОТРИЦАТЕЛЬНО]]
ЕСЛИ РАВНО? :N 0
[ВЕРНИ 1]
[ВЕРНИ
УМНОЖЬ :N ФАКТОРИАЛ :N-1]
КОНЕЦ

СПИСКИ И СЛОВА
В Лого отдельное слово выделяется кавычкой, непосредственно стоящей перед ним. Группа слов, разделенных пробелами, образует список, окаймляемый квадратными скобками.

К какому типу переменных величин принадлежит та или иная переменная, в Лого указывать не нужно. Одна и та же переменная может получать по ходу выполнения программы значения разных типов.

Присваивание СДЕЛАЙ "СУММА 1+3+5 делает переменную с именем СУММА равной значению стоящего справа от имени выражения. Команда присваивания СДЕЛАЙ "КЛЕТКА :СЛОН присваивает переменной КЛЕТКА значение переменной СЛОН (как во всяком языке программирования, присваивание не уничтожает прочитанное значение).

СДЕЛАЙ "ИМЯ "ДИНА

По этой команде текстовая константа - слово ДИНА - становится значением переменной ИМЯ; первый параметр команды присваивания всегда является именем переменной (поэтому это имя записывается как слово с впереди стоящей кавычкой), а второй параметр в этом примере - слово-константа, требующее кавычки по определению.

СДЕЛАЙ "ПИФАГОР :[3 4 5]
ПИШИ :ПИФАГОР

Эти команды выводят на экран список из трех чисел (без скобок): список их есть значение, присвоенное переменной ПИФАГОР.

ОПЕРАЦИЯ СО СТРУКТУРАМИ ДАННЫХ
Операции со словами и списками заслуживают обсуждения даже в этой краткой повести о Лого, поскольку ничего похожего не встречалось ни в Бейсике, ни в Паскале, ни в Рапире.

Операции, называемые СЛОВО И СПИСОК, предназначены для формирования соответствующих структур данных из двух параметров-операндов. Новое слово можно конструировать операцией СЛОВО. Например:

ПИШИ СЛОВО "БЕС "ЕДА

Машина высвечивает на экране результат:

БЕСЕДА

Точно так же два списка можно "склеить" в один. Команда

ПИШИ СПИСОК [НАША ТАНЯ] [ГРОМКО ПЛАЧЕТ]

выдает сообщение:

НАША ТАНЯ ГРОМКО ПЛАЧЕТ

Обе эти операции могут комбинироваться. По команде ПИШИ СПИСОК [СЛОВО "ВЕС "НЕ] [СЛОВО "ДОР "ОГУ] на экране появляется: ВЕСНЕ ДОРОГУ.

Ограничение на количество операндов в операциях СЛОВО И СПИСОК, как легко видеть, можно снять, употребляя последовательно несколько таких операций.

Программируя на Лого, наряду с операциями над структурами данных надо знать и набор специфических для этого языка условий, применяемых в первую очередь к структурам данных. Эти условия имеют префиксную форму.

Условие ЧЛЕН? <элемент> <структура> проверяет, входит ли <элемент> в <структуру>. Условие ПУСТ? <структура> проверяет, содержит ли структура хотя бы один элемент: пустой список обозначается парой примыкающих скобок [], пустое слово - кавычкой с последующим пробелом " . Условия

ЧИСЛО? <структура>
СЛОВО? <структура>
СПИСОК? <структура>

проверяют тип структуры-операнда. Каждое из этих условий является, по существу, операцией, вырабатывающей одно из двух значений ИСТИНА или ЛОЖЬ. Условия над структурами очень часто используются в условных командах программ Лого.

Рассказывая о следующих операциях Лого, работающих со структурами, следует сказать, что большинство команд и операций языка допускают сокращенные названия. Например, вместо ВПЕРЕД можно писать одну букву В. Точно так же: вместо НАЗАД - Н, вместо ВПРАВО - П и т.д.

Методисты рекомендуют вводить сокращенные названия команд и операций только после того, как учащиеся прочно усвоили семантику названий в их полной форме. Поэтому до сих пор мы не злоупотребляли сокращениями. Однако, применяя операции вырезки фрагментов из слов и списков, без сокращений обойтись трудно. Судите сами: кто предпочтет записывать названия операций БЕЗПЕРВОГО или ПОСЛЕДНИЙ, если можно воспользоваться сокращениями (правда, трудночитаемыми) - БПРВ или ПСЛ соответственно.

Матчасть диванного танкиста - Страница 4 88090510

Таблица, приведенная здесь, содержит описание некоторых наиболее часто используемых операций Лого над структурами. Рекомендуем внимательно изучить таблицу, чтобы понять, как работают две следующие программы. Одна из них - это функция ПЕРЕВЕРТЫШ с параметром-списком, меняющая в этом списке первый и последний элемент местами. Описание функции имеет вид:

ЭТО ПЕРЕВЕРТЫШ :СП
ВЕРНИ СПИСОК
ПСЛ :СП
СПИСОК БПРВ БПСЛ :СП
ПРВ:СП
КОНЕЦ

Вот для примера команда:

ПИШИ ПЕРЕВЕРТЫШ
[ДЖЕК, КОТОРЫЙ ПОСТРОИЛ ДОМ]

Она выведет фразу: ДОМ, КОТОРЫЙ ПОСТРОИЛ ДЖЕК.

Еще большее удовольствие доставит настойчивому читателю упражнение: самому разобраться в механизме действия рекурсивной функции ЗАМЕНА. Она в первом параметре (списке) заменяет одно заданное слово (второй параметр) на другое (третий параметр).

ЭТО ЗАМЕНА :СП :СЛ1 :СЛ2
ЕСЛИ ПУСТО? :СП [ВЕРНИ [ ]]
ЕСЛИ РАВНО? ПРВ :СП :СЛ1
[ВЕРНИ СПИСОК
:СЛ2
ЗАМЕНА БПРВ :СП :СЛ1 :СЛ2]
[ВЕРНИ СПИСОК
ПРВ:СП
ЗАМЕНА БПРВ :СП :СЛ1 :СЛ2]
КОНЕЦ

Чтобы у читателей был конкретный материал для проверки этой функции, скажем, что такой функцией мог бы воспользоваться, например, ленивый корабельный повар, объясняя недовольным матросам неприятности на камбузе:

ПИШИ ЗАМЕНА [ОБЕД СЪЕЛ КОК] "КОК "КОТ

По этой команде будет напечатано ОБЕД СЪЕЛ КОТ.

МАЛЕНЬКАЯ ШУТКА
Возможности операций над структурами данных видны в обсуждаемой ниже программе, которая доставляет очень много веселья детям (при условии, что они сами составляют эту программу!). Программа формирует четыре списка - подлежащих, сказуемых, дополнений и обстоятельств, а затем выписывает на экран сообщения, получающиеся случайной комбинацией элементов этих списков. Можно сделать детей героями этой игры, включив в списки подлежащих и дополнений их имена.

ЭТО ШУТКА
СДЕЛАЙ "ПОДЛЕЖАЩЕЕ [НАДЯ ТИМУР ЕГОР
ДИНА АРТЕМ]
СДЕЛАЙ "СКАЗУЕМОЕ [ЛЮБИТ КУСАЕТ ОБИЖАЕТ
ЛАСКАЕТ ДРАЗНИТ ЩЕКОЧЕТ]
СДЕЛАЙ "ОБСТОЯТЕЛЬСТВО
[СИЛЬНО РОБКО СМЕЛО ЛОВКО ГРОМКО ЧУТЬ-ЧУТЬ]
СДЕЛАЙ "ДОПОЛНЕНИЕ [НАДЮ ТИМУРА ЕГОРА
ДИНУ АРТЕМА]
ПИШИ СПИСОК СПИСОК СПИСОК [ЭЛЕМЕНТ 1 + ДСЧ 5
: ПОДЛЕЖАЩЕЕ]
[ЭЛЕМЕНТ 1 + ДСЧ 6
:ОБСТОЯТЕЛЬСТВО]
[ЭЛЕМЕНТ 1 + ДСЧ 6
:СКАЗУЕМОЕ]
[ЭЛЕМЕНТ 1 + ДСЧ 6
: ДОПОЛНЕНИЕ]
КОНЕЦ

Первый параметр операции ЭЛЕМЕНТ не случайно является суммой, где одно из слагаемых равно 1: важно обеспечить возможность выборки из списка всех элементов - от первого до последнего.

Процедуру ШУТКА можно запустить фиксированное число раз: ПОВТОРИ 5 [ШУТКА] или, переписав ее в рекурсивном виде, писать бесконечную историю про отношения наших героев. Операция ДСЧ позволяет не бояться скуки: ситуации, в которые попадают Надя, Тимур, Егор, Дина и Артем, не повторяются. Рекурсию, конечно, всегда можно н прервать, вмешавшись в программу нажатием клавиши СТОП. Ниже мы посмотрим еще один более элегантный способ такой остановки.

ДИАЛОГ В ЛОГО
Операции ввода в Лого - это своеобразные средства организации диалога программы с программистом. Три таких операции (заметьте, операции, а не команды, как например, в Рапире!) - ЧИТАИСПИСОК ЧИТАИСЛОВО и ЧИТАИСИМВОЛ, допускающие удобные сокращения ЧСП, ЧСЛ и ЧСМ,- не имеют операндов и по-разному исполняются для структур разных типов. Выполняя программу, машина доходит до ближайшей операции ввода н останавливается, ожидая, пока программист наберет некоторый набор символов на клавиатуре. В операциях ЧСП и ЧСЛ программист должен подсказать машине, когда он считает предлагаемый набор символов завершенным. Эта подсказка - нажатие клавиши выполнения. Восприняв код этой клавиши, машина продолжает свою работу, используя введенную информацию как значение, выработанное операцией ввода. Поскольку операция ЧСМ вводит только один символ, то операция считается завершенной после нажатия единственной "символьной" клавиши. В подсказке - нажатии клавиши выполнения - в этом случае нет нужды. Разница операции ЧСП и ЧСЛ состоит в том, что введенная информация воспринимается машиною либо как список, либо как слово. Поэтому если в момент остановки программы по операции ввода программист набирает сообщение ВАНЯ ПЕТРОВ, то операция ЧСП спокойно воспринимает его, считая список [ВАНЯ ПЕТРОВ] своим результатом, тогда как операция ЧСЛ выдает сообщение об ошибке, поскольку слово по определению не может содержать пробел.

ПРИМЕР ПРОСТЕЙШЕГО ДИАЛОГА

ЭТО РАЗГОВОР
ПИШИ [ЗДРАВСТВУЙТЕ, МЕНЯ
ЗОВУТ КОРВЕТ]
ПИШИ [ВВЕДИТЕ, ПОЖАЛУЙСТА,
ВАШИ ИМЯ И ФАМИЛИЮ]
СДЕЛАЙ "ФАМ ЧСП
ПИШИ СПИСОК :ФАМ [ВЫ
МАЛЬЧИК ИЛИ ДЕВОЧКА?]
ПИШИ [ОТВЕТЬТЕ, НАЖИМАЯ М
ИЛИ Д]
ЕСЛИ РАВНО? ЧСМ "Д
[ПИШИ СПИСОК
[РАД С ВАМИ ПОЗНАКОМИТЬСЯ, ДЕВОЧКА] :ФАМ]
[ПИШИ СПИСОК
[РАД С ВАМИ ПОЗНАКОМИТЬСЯ, МАЛЬЧИК] :ФАМ]
КОНЕЦ

Еще один способ завершения процедуры ШУТКА. В конце ее тела напишите

ПИШИ [ХОТИТЕ ЛИ ВЫ
ПРОДОЛЖАТЬ НАШУ ИСТОРИЮ?]
ПИШИ [ОТВЕТЬТЕ Д ИЛИ Н]
ЕСЛИ РАВНО? ЧСМ "Д [ШУТКА]
[ПИШИ [ДО СВИДАНИЯ!]]
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пт Фев 17, 2023 12:26 am

10/88
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Этот выпуск раздела наполнен отзвуками прошедшего лета.
Лето - время отдыха, время игр и забав. В этом выпуске раздела читатель найдет шуточный трактат о типах программистов, и разбор задачи, навеянной шахматной игрой. В большой программе на Паскале, приводимой двумя страницами далее, нет ни одной математической операции, а вместо Бейсика, о котором так много говорится в нашем разделе, на сей раз речь пойдет о языке Аналитик, все служебные слова которого взяты из русского языка и понятны без разъяснений.

АНАЛИТИК - ДРУГ ДЛЯ ДИАЛОГА
В начале 1968 года в маленькой комнате рядом с ВЦ нашего вуза появилась удивительная ЭВМ. Называлась она МИР, что означало "машина инженерных расчетов". Машина имела вид письменного стола с пишущей машинкой.

В комнату непрерывным потоком шли люди. Знатоки, выяснив, что быстродействие новой машины составляет лишь несколько сот операций в секунду, отходили с чувством превосходства: "Вот у нас ЭВМ дает десятки тысяч операций в секунду!". Студенты, аспиранты и инженеры просили дать им поработать на машине, а проведя какой-нибудь сложный расчет - например, вычислив сумму факториалов от 1! до 30! с 33 верными знаками,- приходили в восторг. Тем более, что программа такого вычисления записывалась просто и естественно:

"РАЗРЯДНОСТЬ" 34.С = "Сигма" (M = 1.30, П(К = 1, М, К)); "ВЫВОД"С"КОНЕЦ".

Особо привлекало то, что к МИРу придавалось более 100 прикладных программ - таких, как вычисление специальных функций, решение систем линейных и нелинейных уравнений, действия с матрицами, интерполирование и аппроксимирование функции, интегрирование систем дифференциальных уравнений, решение дифференциальных уравнений в частных производных, статистическая обработка данных. Что касается вычисления интегралов по методу Симпсона, то это было просто включено в состав операций машины. Так, интеграл от функции еxp-x cosx в пределах от 0 до пи/2 вычисляется одним оператором

И = "интеграл" (X = 0, "пи"/2, 8, е ^ (-X) * cos (X)). Константы пи и е заданы в машине с 20 разрядами.

Поскольку транслятор и операционная система МИРа "зашивались" в его постоянную память, машина не требовала настройки после включения. Клавиатура имела совмещенный русско-латинский алфавит, общепринятые математические символы "Сигма", "пи", "Итеграл", ">=", "<=", "!=", "П", "е", "бесконечность", "корень" и т.п. Все буквы находились на одном регистре, и это давало определенное удобство в работе.

Языку машины (он назывался Алмир-65) и операторской работе на ней никто не учил. В комнате висели два плаката, где разъяснялись операторы языка и порядок работы за пультом. Достаточно было несколько минут посмотреть на них, чтобы начать программировать и работать на машине.

Разработал эту удивительную ЭВМ в середине 60-х годов коллектив сотрудников Института кибернетики АН УССР под руководством академика В.М.Глушкова. Язык Алмир представляет собой развитие Алгола-60. В нем не объявляются типы величин, используемых в программе, нет ограничений на разрядность или на диапазон чисел. С неопределенными величинами производятся алгебраические действия и выводится результат в буквенном виде.

Вскоре к нам поступили машины МИР-1, которые имели ленточный перфоратор для запоминания программ и фотосчитыватель для их повторного ввода в ЭВМ. В 1969 году госкомиссия приняла новую машину МИР-2. Здесь появилось новое техническое достижение - дисплей для работы с программой; в качестве дисплея применялась электронно-лучевая трубка. Председатель комиссии академик А.А.Дородницын заявил ("Известия" 7.12.69г.), что МИР в несколько раз "умнее" больших ЭВМ, широко используемых в настоящее время.

Язык машины МИР-2 - Аналитик - явился дальнейшим развитием Алмира. Он приспособлен для работы в режиме диалога. Кроме обычных вычислений, он позволяет производить аналитические преобразования формул, интегрирование, дифференцирование, решать уравнения в буквенном виде.

На МИР-2 я начал работать в 1971 году и открыл для себя удивительные возможности языка Аналитик.

Мне надо было решить систему линейных алгебраических уравнений, но матрица системы оказалась плохо обусловленной и решение получалось абсурдным. Тогда я задал точность решения и построил итерационный процесс с автоматическим изменением разрядности вычислений. Ответ был получен точный, когда ЭВМ выбрала для вычислений 26 десятичных разрядов. Заметим, что на других ЭВМ такую задачу решить практически невозможно.

В 1978 году ко мне обратился мой друг, профессор, по специальности радиоэлектроник, с просьбой помочь его аспиранту составить на Фортране программу двумерного быстрого преобразования Фурье. Срок аспирантуры кончался, и задачу надо было решить срочно. За два вечера я составил программу на Аналитике, в третий день отладил ее на МИР-2 и переписал на Фортране, а за четвертый и пятый день аспирант с моей помощью отладил программу па машине М-222. Если эту же задачу мне пришлось бы делать сразу на Фортране, то на нее ушло бы не менее месяца, так как надо было одновременно отлаживать алгоритм и программу.

Одни мой знакомый полгода пытался вычислить на ЕС-1022 тройной интеграл. Им была перебрана масса вариантов решения, но ЭВМ выдавала только одно: "Исчезновение порядка". Я ему предложил решить эту задачу на МИР-2, но он скептически отклонил мое предложение: "Если большая ЭВМ не может решить задачу, то что можно ждать от малой?" Однако когда он окончательно разуверился в ЕС-1022, то пришел ко мне, хотя и имел твердое убеждение, что и на МИР-2 задачу не решить. За несколько минут мы набрали программу с оператором Р = "Интеграл"(X=А,Б,8, "Интеграл"(У=В,Г,8, "Интеграл"(Т=Д,E,8,F(X,У,T)))) и задали исходные данные. Примерно через полчаса машина отпечатала результат. Он оказался порядка 1e-1215. Естественно, во всех других ЭВМ, кроме МИР, такие числа изображаются нулем.

Сейчас в нашей стране возродился интерес к языкам машин семейства МИР. Как сказал ученый секретарь Совета МНТК "Персональные ЭВМ" В. Захаров ("Правда", 21.01.88 ), если языки Алмир-Аналитик появятся в наших персональных компьютерах, то большинство проблем компьютерной грамотности у нас будет снято, поскольку многие трудности программирования в этих языках перенесены в транслятор, а не возлагаются на пользователя.
Л.ОСИПОВ (г. Москва)

ДОСТАТОЧНО ПЕРЕВЕСИТЬ "НОМЕРКИ""
На Паскале можно писать более эффективные программы, чем на Бейсике: они и выполняются быстрее, и памяти занимают меньше.

Возьмем для примера задачу о расстановке русских слов по алфавиту. Программа для се решения, написанная на Бейсике, уже приводилась в 12/86. Посмотрим, как можно решить задачу средствами Паскаля.

Здесь перед нами открывается любопытная возможность: оказывается, чтобы упорядочить слова, вовсе не обязательно передвигать их с одного места в памяти на другое, как это было в программе на Бейсике. Столь существенное упрощение предоставляет имеющееся в Паскале понятие ссылки. Используя его, мы, образно говоря, вешаем на каждое слово свой "номерок". Упорядочивание теперь сводится к перевешиванию "номерков" - а это и легче, и быстрее, чем перемещать слова.

Матчасть диванного танкиста - Страница 4 88100110

Обратимся к  программе. Вот цикл, в котором слова, подлежащие упорядочиванию, вводятся в машину (строки 13-9 снизу). Он начинается со служебного слова REPEAT. А перед ним переменной I, счетчику введенных слов, придается нулевое значение.

Что происходит с каждым выполнением цикла? Значение счетчика увеличивается на единицу, оператор WRITE высвечивает на экране подсказку, какое по счету слово вводится, оператор READLN считывает вводимое слово с клавиатуры.

Оператор READLN, как известно, присваивает вводимое значение той переменной, имя которой поставлено в скобках. Но тут в скобках стоит УКАЗ[I] и далее - стрелка. То же самое имя стоит выше в скобках вслед за словом NEW.

Из этих деталей и складывается тот механизм, с помощью которого вводимые слова расставляются в памяти машины вместе со своими "номерками". Понять его помогает хорошая особенность Паскаля: все переменные, участвующие в написанной на нем программе, предварительно характеризуются в разделе описаний. Обратимся туда.

УКАЗ: ARRAY [0..ВСЕГОСЛОВ] OF ССЫЛКИ.

И раньше:

ССЫЛКИ=^СЛОВА.

Становится ясно: под обозначением УКАЗ[I] следует понимать "номерок" 1-го слова, под УКАЗ[I]^ само это слово.

Вот как работает механизм расстановки слов. Стандартная функция Паскаля NEW резервирует участок памяти для вводимой информации, обозначенной именем, которое стоит в скобках. Прочитав это имя, компьютер справляется в разделе описаний VAR. что за ним стоит массив величин типа ССЫЛКИ. Компьютер отыскивает это слово в перечне типов, понимает, что стрелочка помечает ту переменную, на которую делаются ссылки, и ищет в том же перечне ее имя.

СЛОВА=PACKED ARRAY [1..БУКВСЛОВА] OF CHAR

В переводе на русский язык цепочка фигурирующих здесь служебных слов означает "упакованный массив символов".

Что значит упакованный? Дело в том, что в большинстве современных персональных компьютеров и мини-ЭВМ каждая ячейка памяти способна вместить 2 байта информации, а для записи одного символа достаточно одного байта. Отводить на каждый символ по ячейке было бы расточительно, поэтому массивы символов (к которым относятся и слова) упаковывают плотнее. Об этом и говорит слово PACKED. (Надо заметить, на упаковку и распаковку требуется определенное время, что несколько замеряет выполнение программ).

Каждое слово, как указано в квадратных скобках в описании типа СЛОВА, насчитывает такое число символов, какое задано константой ВСЕГОБУКВ, а оно, как указано при описании констант, равно 20. Стало быть, на хранение каждого слова будет отведено 10 байт. И когда очередное 1-ое слово будет считано с клавиатуры оператором READLN, именно такое место и займет в памяти переменная УКАЗ[I]^. А переменная УКАЗ[I] станет его "номерком". Ее значение - адрес первой из ячеек, отведенных под переменную УКАЗ[I]^.

Слово за слово... Так будет продолжаться до тех пор, когда I достигнет значения ВСЕГОСЛОВ, то есть равенство I=ВСЕГОСЛОВ станет истинным. Впрочем, это лишь одна из двух возможностей окончания ввода, как вытекает из строения заключительного оператора цикла: UNTIL EOF OR (I=ВСЕГОСЛОВ). Буквосочетание EOF расшифровывается как end of file, конец файла. Обозначаемая так переменная не описывается в программе, компьютер всегда ее "имеет в виду" и присваивает ей в самом начале работы любой программы значение FALSE (ложь). Но если нажать одновременно клавишу <СУ> (она находится в левой стороне клавиатуры) и Z, переменная EOF принимает значение TRUE (истина). Логическое выражение из двух условий, соединенных союзом OR (или), истинно, когда истинно хотя бы одно из них. А оператор UNTIL прекращает выполнение цикла, когда записанное вслед за ним логическое выражение принимает значение TRUE.

Отныне значение переменной I равно числу введенных слов.

Цикл ввода закончен и начинается двойной (это видно по дважды написанному в его начале слову FOR) цикл упорядочивания введенных слов. Они последовательно берутся от первого до предпоследнего (FOR К:=1 ТО I-1) и каждое сравнивается со всеми, стоящими за ним (FOR L:=К+1 ТО 1). Функция МЕНА (о ней чуть позже) проверяет, подчиняется ли алфавитному порядку пара слов УКАЗ[K]^ и УКАЗ[L]^, и если не подчиняется, их "номерки" переставляются: УКАЗ[0]:=УКАЗ[K]; УКАЗ[K]:=УКАЗ[L]; УКАЗ[L]:=УКАЗ[0]. Резервной ячейкой при этом служит нулевой элемент массива "номерков" УКАЗ[0], который при вводе слов не получил никакого значения и остался свободным. Наконец, упорядоченный массив выводится на дисплей: FOR К:=1 ТО I DO WRITELN (УКАЗ[К]^).

Посмотрим теперь, как выполняется функция МЕНА. В ее описании вслед за ее именем стоит слово BOOLEAN. Стало быть, ее значения принадлежат к логическому типу и могут быть либо TRUE, либо FALSE. При обращении к функции МЕНА ее формальные параметры Р и Q заменяются фактическими - словами УКАЗ[К]^ и УКАЗ[L]^. Но каждое слово - это массив символов. В программе, по которой вычисляется значение функции, эти символы пронумерованы с помощью индекса J. Они перебираются (DO J:=J+1), начиная с первого (присваивание J:=1 перед словом WHILE). Первые буквы обоих слов могут совпасть, и покуда это так (Р[J]=Q[J]) и пока не исчерпаны все буквы (J<БУКВСЛОВЛ), перебор продолжается. Согласно программе, далее происходит проверка неравенств Р[J]>='Ю' и Q[J]>='Ю'. Когда в неравенстве участвуют символы, сравниваются их коды. У буквы Ю он имеет наименьшее значение (см. рисунок) среди всех букв, у пробела - еще меньшее. Значит, невыполнение неравенства Р[J]>='Ю' означает, что просмотрены все буквы слова и стоящий за этим неравенством оператор выполнять не следует. Но если элемент Р[J] представляет собой не пробел, а букву, тогда он заменяется элементом массива КОД - выполняется присваивание Р[J]:=КОД[ORD(Р[J])-95]. Аналогично обрабатывается элемент Q[J].

Зачем это делается? Дело в том, что на клавиатуре компьютера русские буквы расположены не в алфавитном порядке, и их коды возрастают также не в соответствии с алфавитом. Но если заменить русские буквы на производные так, как показано на рисунке, то код каждой производной буквы будет соответствовать месту исходной буквы в алфавите.

Матчасть диванного танкиста - Страница 4 88100310
Схема поясняет образование производного кода, при помощи которого по приведенной выше программе расставляются в алфавитном порядке слона, написанные кириллицей.
Расположим буквы русского алфавита в три ряда, буква под буквой: сначала в том порядке, и котором они нанесены на клавиши компьютера, ниже - в алфавитном порядке, и начнем заполнять самый нижний ряд. Возьмем и верхнем буквенном ряду произвольную букву (на схеме - Ю). Найдем в среднем ряду ее "соседку" но вертикали (А). Отыщем "соседку" в верхнем ряду и точно под нею в самом нижнем ряду поставим взятую вначале букву.
Обратимся к программе. Стандартная функция ORD(Р[J]) определяет код J-ой буквы слова Р, разность ORD(P[J|)-95 даст номер позиции, на которой располагаются в нашей таблице и выбранная буква, и соответствующая ей буква производного кода. Замена первой из этих букв на вторую осуществляется присваиванием Р[J]:= КОД[ORD(P[J]-95].
Так буква А заменится на букву Ю. Но "производная" буква Ю находится па том же (первом) месте на клавиатуре компьютера, что и исходная буква А в русском алфавите. Поэтому располагая "производные" буквы в порядке возрастания их кодов, мы одновременно будем упорядочивать исходные буквы по алфавиту.

Вот после этого уже можно сравнивать измененные величины Р[J] и Q[J]. Если первая больше второй, то есть выполняется условие Р[J]>Q[J], функция МЕНА принимает значение TRUE - его она и вернет в программу в то место, откуда произошло обращение к ней. Напомним: она вычисляется при проверке условия IF МЕНА(УКАЗ[K]^, УКАЗ[L]^), выполнение которого ведет к перестановке слов.

Эта программа эффективнее программы на Бейсике: она требует меньших перемещений информации в памяти машины и расставляет слова в алфавитном порядке, а не по первым буквам.
В.ИВАНОВ (г.Москва)

ВОСЕМЬ ФЕРЗЕЙ
"Владельцам микрокалькуляторов предлагаем составить программу, позволяющую расставить на шахматной доске 8 ферзей так, чтобы ни один не бил другого. Программа должна давать все варианты искомой расстановки" - такое предложение было помещено в одном из номеров нашего журнала за прошлый год.

Благодарим всех читателей, откликнувшихся на приглашение к конкурсу. Всего было прислано 102 письма.

Некоторые вообще не верили в саму возможность такой расстановки. Другие считают задачу непосильной для "Б3-34". Третьи полагают, что "тридцать четверка" если и найдет все расстановки, то за несколько месяцев непрерывной работы. Однако самым настойчивым удалось преодолеть все трудности и полностью решить эту сложную задачу.

Алгоритм последовательного перебора вариантов (самый популярный из встречающихся в письмах) с точностью до несущественных различий выглядит следующим образом (обозначения вертикальных полей шахматной доски abcdefgh заменены цифрами 1-8 ):
ШАГ 1: поставить ферзей на горизонталь 1;
перейти к вертикали 2;
ШАГ 2: продвинуть ферзя на 1 клетку
вверх;
ШАГ 3: ферзь вышел за пределы доски?
если да, то поставить его на первую клетку, вернуться к предыдущей вертикали, если при этом выходим за пределы доски, то КОНЕЦ;
иначе перейти на ШАГ 2;
ШАГ 4: данный ферзь бьется предшествующими?
если да, то перейти на ШАГ 2;
ШАГ 5: перейти к следующей вертикали;
если вышли за пределы доски, то выдать полученную расстановку, перейти к вертикали 1;
перейти на ШАГ 2.

Этот алгоритм реализовали наши постоянные читатели К.А.Лайва (г.Лимбажи Латвийской ССР), М.Л.Вулис (г.Москва), а также С.В.Вяткин (пос.Покотиловка Харьковской обл.), Дао Нгок Чунг (г.Хошимин, СРВ), А.Кадыров (г.Ленинград) и другие. Оригинальную программу, работающую по этому алгоритму, прислал Д.Л.Мамаев (п/о Кокино Брянской обл.). Для задания положений фигур на горизонталях он использовал ряд чисел 1, 10..., 10000000, что позволило передвигать ферзей операциями умножения и деления и сделало очень удобным математическую запись алгоритма.

Однако, несмотря на все ухищрения, среди этих программ не было ни одной, тратившей менее 1.5 часа (в среднем) на поиск одной расстановки. Где же выход?

Многие читатели обратили внимание на то, что из 92 расстановок, удовлетворяющих условию, только 12 являются независимыми, а остальные 80 получаются путем преобразования независимых решений поворотами шахматного поля на 90, 180 и 270 градусов, зеркальными отражениями относительно осей симметрии поля.

Вот где скрыта возможность повышения быстродействия: нужно найти 12 базовых вариантов, а из них уже получить все оставшиеся.

Матчасть диванного танкиста - Страница 4 88100310
Каждый столбец таблицы представляет вариант расстановки ферзей. Каждая цифра в столбце - это номер поля в вертикальном ряду клеток шахматной доски, задаваемая номером строки таблицы и соответствующим буквенным обозначением о скобках.

Таблицу базовых вариантов прислал Н.Г.Соловьев (г.Тбилиси). Он провел большую и интересную работу по систематизации расстановок и нашел ряд свойств основных решений. Например, нз варианта 1 можно получить два следующих циклическими сдвигами всех ферзей на одну клетку вниз; вариант 4 получается из варианта 1 аналогичным сдвигом на одну клетку вправо. Связь между вариантами 4, 5, 6 такая же, как и между тремя первыми, а вот общего принципа взаимосвязи всех вариантов найти так и не удалось. В приводимой ниже программе Н.Г.Соловьева для "МК-61" они получаются из исходного последовательными переходами с минимальным числом шагов. Аналогичную программу прислал М.В.Шуклин (Пермь).

00. 8 01. 8 02. Х-Пе 03. 3 04. Х-Пd 05. 5 06. Х-Пb 07. 2 08. Х-Пс 09. 8 10. Х-Пd 11. КППе 12. 2 13. Х-П7 14. 8 15. Х-Пс 16. 4 17. Х-Пd 18. КППе 19. 4 20. Х-П6 21. 5 22. Х-П9 23. 1 24. Х-Па 25. 8 26. Х-Пb 27. 6 28. Х-Пс 29. 3 30. Х-Пd 31. КППe 32. 8 33. Х-П7 34. 1 35. Х-П8 36. 7 37. Х-Па 38. 2 39. Х-Пb 40. КППe 41. 3 42. Х-П9 43. 6 44. Х-Па 45. 7 46. Х-Пс 47. 5 48. Х-Пd 49. КППе 50. 8 51. Х-Пb 52. 4 53. Х-П7 54. КППe 55. 2 56. Х-П1 57. 8 58. Х-П0 59. 5 60. Х-П4 61. Х-П5 62. КП-Х4 63. 1 64. - 55. FX=0 66. 68 67. 8 68. КХ-П5 69. С/П 70. FL0 71. 62 72. FL1 73. 57 74. 3 75. Х-П7 76. 2 77. Х-П9 78. 8 79. Х-Па 80.5 81. X-Пb 82. 1 83. Х-Пс 84. 4 85. Х-Пd 86. БП 87. 54 88. 5 89. Х-П4 90. 8 91. Х-П0 92. КП-Х4 93. С/П 94. FL0 95. 92 96. В/0.

Инструкция: ввести числа 6,4,7,1,8,2,5,3 в регистры 6...9 и А...Д соответственно, В/0, С/П; для получения очередного варианта нажать С/П. Первой расстановкой является вводимая комбинация.

Ю.Г.Курсон (Львов), В.Волков (Москва) и некоторые другие считают, что 12 основных решений найти легко и без машины и поэтому не стоит делать программу для их поиска. Они сосредоточили свои усилия на разработке программ для получения оставшихся 80 расстановок.

Победители конкурса - К.Бененис (Каунас) и С.Н.Банников (Москва) успешно объединили в одной программе для "Б3-34" два алгоритма: один - для поиска основных расстановок, другой - для получения из каждой нескольких новых. Программа К.Бенениса для каждого варианта, найденного последовательным перебором, находит семь производных и требует, по подсчету автора, в среднем 3.3 минуты на вариант.

00. - 01. Кx>=0C 02. FBx 03. КПД 04. + 05. КП^ 06. 1 07. 2 08. П1 09. КИП1 10. ИП1 11. ИПД 12. - 13. Fx!=0 14. 43 15. x-y 16. КИПД 17. - 18. Кx!=0C 19. Fx2 20. Fsqr 21. - 22. Fx=0 23. 09 24. КИПД 25. КИП0 26. Fx=0 27. 00 28. x-y 29. КП^ 30. ИПД 31. П1 32. 1 33. + 34. ПД 35. П0 36. КИП1 37. КП0 38. Fx=0 39. 36 40. ИПД 41. П0 42. КБПС 43. ИПД 44. 1 45. - 46. ПД 47. П0 48. КИП^ 49. Fx=0 50. 06 51. 1 52. 2 53. П0 54. КИП3 55. 8 56. П1 57. Сх 58. П3 59. 1 60. 0 61. * 62. КИП0 63. + 64. FL1 65. 59 66. + 67. FBx 68. С/П 69. КБПС 70. 8 71. П1 72. x-y 73. 1 74. 0 75. / 76. ПД 77. КИПД 78. x-y 79. ИПД 80. П0 81. - 82. 1 83. 0 84. * 85. 3 86. + 87. ПД 88. ИП1 89. КПД 90. ИП0 91. 7 92. F10X 93. + 94. FL1 95. 73 96. БП 97. 51.

Инструкция: 24 ПС 10 П0 ПД Сх П2 П3 4 ПВ 8 ПА 7 П9 6 П8 5 П7 3 П6 2 П5 1 П4 БП 06 С/П "AAAAAAAA" x-y "-BBBBBBBB" ШГ вправо /-/ С/П "СССССССС" x-y "-ДДДДДДДД" ШГ вправо /-/ С/П "АААААААА" 5 П0 ПД С/П ... и т.д.

Каждый результат, записанный справа налево, дает еще четыре симметричные расстановки - всего получается 8 на один расчет основного варианта. Все 92 варианта получаются за 14 проходов основной части программы.

Программа, присланная С.Н.Банниковым, в каждом цикле находит одно решение методом перебора и отображение его относительно горизонтальной оси симметрии.

00. 3 01. П1 02. 2 О3. ПА 04. 7 05. КПА 06. ИПА 07. П0 08. КИП0 09. КИПА 10. КИП^ 11. - 12. Кх!=09 13. Fx2 14. Fsqr 15. ИПА 16. ИП0 17. - 18. - 19. Кх!=^09 20. FL0 21. 09 22. ИПА 23. 1 24. + 25. ПA 26. 8 27. - 28. Fx>=0 29. 04 30. 7 31. П0 32. ИПВ 33. КИП^ 34. - 35. FL0 36. 33 37. П8 38. 7 39. П0 40. ИП8 41. КИП^ 42. - 43. Fx2 44. Fsqr 45. 8 46. ИП0 47. - 48. - 49. Fx!=0 50. 74 51. FL0 52. 40 53. 8 54. П0 55. 1 56. КИП^ 57. + 58. С/П 59. FL0 60. 55 61. КНОП 62. 8 63. П0 64. 8 65. КИП^ 66. - 67. С/П 68. FL0 69. 64 70. ИП7 71. 3 72. - 73. П7 74. 7 75. ПA 76. КИПА 77. 1 78. - 79. Fx<0 80. 05 81. ИПА 82. 1 83. - 84. ПА 85. Кх=09 86. КСx.

Инструкция: 28 ПВ 76 П9 В/0 С/П. После остановки на индикаторе - первая цифра расстановки, С/П - вторая, и т.д. Результаты выдаются попарно, без разделения. Среднее время на одну расстановку - 9мин. Если же записать результаты в обратном порядке, как это делает Бененис, то за один проход программа будет выдавать четыре расстановки, и это время уменьшится вдвое. Но обратите внимание: программная память использована не полностью, резерв есть; если бы автор находил еще и другие производные первой расстановки, среднее время на один вариант можно было бы сократить еще больше.

Кроме рассмотренных алгоритмов, в нашей почте встретились еще два. Некоторые читатели использовали метод Монте-Карло, выбирая с помощью генератора случайных чисел координаты ферзей до получения требуемой расстановки. Наиболее интересная программа такого рода принадлежит М.Л.Вулису (Москва). К сожалению, этот метод не гарантирует получение всех результатов за обозримое время и потому не удовлетворяет условиям конкурса.

По другому пути пошел С.В.Шауро (Минск). Его алгоритм напоминает последовательный перебор. Однако, поставив фигуру на доску, он сразу определяет поля, которые лежат под боем этого ферзя: на эти поля следующая фигура уже не ставится. Вопреки ожиданиям метод не дал его автору выигрыша во времени.
Обзор читательских писем по просьбе редакции провел И.БЫСТРОВ (г.Москва)

[ МАЛЕНЬКИЕ ХИТРОСТИ
На клавиатуре "МК-54" обозначения клавиш обмена информацией между регистром X и адресуемыми регистрами чересчур громоздкие: П->X, X->П. Я наклеил на них вырезанные из ватмана бирочки, на которых написал соответственно И и В, что означает: Из памяти, В память. Бирка И у меня зеленая, В - красная. Это вызвано последствиями нажатия этих клавиш. В красная потому, что нажатие ее и клавиши соответствующего регистра приводит к безвозвратной потере его содержимого. А при вызове информации из какого-либо регистра его содержимое сохраняется.
И.ПЯТИЛЕТОВ (г.Киев)

ТИПЫ ПРОГРАММИСТОВ
Хотя программистов все еще мало, среди них есть уже свои типы. Я попытался охарактеризовать наиболее яркие из них.

КЛАССИФИКАЦИЯ С ТОЧКИ ЗРЕНИЯ ПОДХОДА К РАБОТЕ
ПРОГРАММИСТ-"ШТАМПОВЩИК" - добросовестный ремесленник и лучшем смысле этого слова. Работает, руководствуясь плотницким правилом "Десять раз отмерь, один раз отрежь". Программирование для него - честное ремесло. Что ни программа - то те же самые тщательно сработанные двери.

ПРОГРАММИСТ-"БОГЕМЩИК" - бывает всесторонним художником. Программирование для него - конек и средства самовыражения. Его программы полны красок и тонов. Что ни программа - то произведение искусства. Что ни программа - то своя "Неоконченная симфония".

ПРОГРАММИСТ-"СТРЕЛОК", иногда называемый "очумелым" - продукт современной цивилизации. К программированию относится как к бою, его оружие - терминал. Что ни программа - то игра в тотализатор. Что ни программа - прыжок в воду.

КЛАССИФИКАЦИЯ С ТОЧКИ ЗРЕНИЯ ПРОФЕССИИ
ПРОГРАММИСТ-РУТИНЕР - является результатом обычной профессиональной отупелости. Его не радуют плоды его работы, он не переживает каждый проход своей программы через компьютер, знает, что беганием вокруг стола событий не ускорит. Взгляд на новый компьютер обрадует его не более, чем взгляд на новый кухонный гарнитур. Считает, что программировать умеет, и обычно оно так и есть.

ПРОГРАММИСТ-ЛЮБИТЕЛЬ - хотя и работает в своей специальности уже лет 20, все еще не забыл тех счастливых минут, когда был сам себе и компилятором, и перфоратором, и оператором в те времена, когда первый в республике УРАЛ-1 выдавал свои исторические результаты. В нем все еще горит юношеское волнение, когда через машину проходит именно его программа, а за каждый результат он боится, как за собственного ребенка. Часто думает, что программировать не умеет, но на самом деле все обстоит не так плохо.

ПРОГРАММИСТ-ДИЛЕТАНТ - в сущности счастливый человек: все время чем-то восхищен, удивлен. Компьютер работает! Компьютер стоит! Солнышко светит! Он постоянно в движении, постоянно п деле. Все в поле его зрения, ничто не ускользнет от его глаз, ничто чужое ему не чуждо. Он убежден, что умеет программировать, но, как всегда, снова ошибается.

КЛАССИФИКАЦИЯ С ТОЧКИ ЗРЕНИЯ ХАРАКТЕРА
ПРОГРАММИСТ-ФЛЕГМАТИК считает своим девиз "лучшее - враг хорошего". Он не разволнуется, если за неделю до окончания проекта выяснится, что можно было бы начать сначала и это было бы лучше. Знает, что хорошо закончить важнее, чем хорошо начать.

ПРОГРАММИСТ-САНГВИНИК мечется от здравой неудовлетворенности. Свою жизнь проживает в собственных программах, и пока они несовершенны, спокойного сна у него не будет. Отличается кипучей активностью и хроническим недосыпанием.

ПРОГРАММИСТ-ХОЛЕРИК ничем не доволен. Одержим стремлением к полному совершенству, прогрессивности и полноте всего, поэтому переделывает уже переделанное и не доделывает недоделанное. Сомнения в его проекте рассматривает как наглость, а на вопрос, когда будет готов проект, впадает в обморочное состояние.

Подсчитаны 27 различных комбинаций типов программистов. Некоторые из них выглядят явно абсурдными. Остановимся хотя бы на трех крайностях:

"ШТАМПОВЩИК"-РУТИНЕР-ФЛЕГМАТИК - обычно любим своими шефами. Работает добросовестно, надежно, непогрешимо. В случае необходимости может проявить себя и как способный бухгалтер.

"БОГЕМЩИК"-ЛЮБИТЕЛЬ-САНГВИНИК - прогграммист, каких поискать. В нем, как говорится, есть "искра божия", около него целый штаб помощников. Если его не спалит инфаркт, всегда готов для направления в психиатрическую лечебницу.

"СТРЕЛОК"-ДИЛЕТАНТ-ХОЛЕРИК - известен в своем кругу под прозвищем "деятельный болван". Совершенно не важно, что он делает в программировании. Он все равно не знает, как это делать.
И.ДЕМНЕР (журнал "Veda a technika mladezi").

ВМЕСТО ДВУХ ВЫЧИСЛЕНИЙ - ОДНО
В июньском выпуске раздела "Человек и компьютер" за этот год предлагалось присылать в редакцию программы, форма листинга которых каким-то образом отражала бы сущность заложенного в них алгоритма или приема программирования. Думаю, что программа па Бейсике удовлетворяет этому требованию.

Если у вас есть знакомый художник, попросите его разделить произвольный отрезок на две неравные части. Возможно, он сделает это и золотом соотношении, если его чувство меры воспитано на классических образцах.

Такое чувство меры целесообразно внушить компьютеру, которому часто приходится отыскивать единственную точку минимума некоторой функции F(X) на заданном отрезке [A, B]. Основа алгоритма - последовательное приближение к минимуму до достижения заданном точности Е. Сначала на исходном отрезке проставляются две точки
X1 н Х2, делящие его в золотом соотношении. Если F(X1)<F(X2), то берем для дальнейшего деления отрезок [A, Х2]. Если же F(X1)>F(X2), то берем [X1, В]. В первом случае одной из двух делящих точек выбранного отрезка будет X1, во втором - Х2. Это следует из свойств золотого сечения. Таким образом, из двух значении функции, необходимых на новом этане расчета, вычисляется всего одно: другое было получено на предыдущем этапе.

Это компьютерное чувство меры особенно полезно в тех случаях, когда функция вычисляется по сложному алгоритму или определяется опытным путем.

Матчасть диванного танкиста - Страница 4 88100410

Как принято в разделе "Человек и компьютер", я заключил программу на Бейсике в рамки структурной диаграммы. Размеры сторон диаграммы оказались точно и золотом соотношении. Потому я и посылаю их вам в ответ на ваше предложение.
В.ВОРОБЬЕВ (г.Тула)

ПРЕДСТАВЛЯЕМ НЕКОТОРЫЕ КНИГИ ПО БЕЙСИКУ, ВЫШЕДШИЕ В СВЕТ В ПОСЛЕДНЕЕ ВРЕМЯ
Жигарев Н.В., Макарова H.В., Путницева М.А. Основы компьютерной грамоты. Л.: Машиностроение, Ленинградское отделение, 1987. Устройство ЭВМ, Бейсик "Искры 226", применение ЭВМ в народном хозяйстве.

Никс Дж. Решение производственных задач на Бейсике: Пер. с англ. М.: Машиностроение, 1987. Программы для технолога металлообрабатывающих производств.

Маркелова Л.Н. Эксплуатация программоуправляемой вычислительной машины "Искра 226". М.: Машиностроение, 1987. Краткое изложение руководства по программированию, прилагаемого к ППЭВМ "Искра 226".

Баласанян В.Э., Богдюкович С.В., Шахвердов В.А. Программирование на микроЭВМ "Искра 226". М.: Финансы и статистика, 1987. Описание Персии Бейсика ППЭВМ "Искра 226" (без графических операторов).

Эберт К., Эдерер К. Компьютеры. Применение в химии: Пер. с нем. М.: Мир, 1988. Описание численных методов, их иллюстрация примерами из химии. Программы написаны на Бейсике ППЭВМ Коммодор СВМ 8032.

Банди Б. Методы оптимизации. Вводный курс: Пер. с англ. М.: Радио и связь, 1988. Программы на Бейсике IBM PC для оптимизации функций одной и многих переменных.

Дьяконов В.П. Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ: Справочник. М.: Наука, 1987. Более 300 программ дли микроЭВМ "Электроника Д3-28", предлагаемых для решения задач численного анализа, электро- и радиотехники.

Консевски Ч. Занимательная математика и персональный компьютер: Пер. с англ. М.: Мир, 1987. Программы на Бейсике задач из теории игр, теории вероятности.

Очков В.Ф., Пухначев Ю.В. 24 этюда на Бейсике. М.: Финансы и статистика, 1988. Задачи теории игр, численного и текстового анализа, примеры создания локальных банков данных.

Уолш Б. Программирование на Бейсике: Пер. с англ. М: Радио и связь, 1988. Версии Бейсика различной сложности, структурное программирование на Бейсике.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Фев 18, 2023 12:47 am

На этом и остановилось обучение программированию в НиЖ. Просто некому стало учить. Программисты, кое-как разобравшись, как писать и запускать программы, ринулись удовлетворять спрос публики на АСУчивание. Никто больше не слушал людей, придумавших программирование... Цену стали иметь только детали конкретных реализаций. Сейчас уже нелепые.

11/88
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДВАДЦАТЬ ПЕРВОЕ, на котором рассказывается о программируемом микрокалькуляторе МК-61 и тех его возможностях, которыми не располагает хорошо знакомый нашим читателям микрокалькулятор Б3-34 и его аналоги МК-56 и МК-51. Ведут занятие кандидат технических наук В.А.ХМЕЛЮК (г.Мытищи Московской области) и инженер Д.Б.ХРУСТАЛЕВ (г.Москва; он, в частности, берет слово, когда речь заходит о логических операциях). В проведении занятия также участвует ученик 9-го класса школы #2 г.Москвы А.В.ВАСИЛЬЕВ.
Все, что рассказано здесь о модели МК-61, справедливо и для модели МК-52. Но у той есть еще нечто, в чем она превосходит МК-61. Па следующем занятии "Школы" планируется рассказать именно об этих особенностях МК-52 - в первую очередь о полупостоянном запоминающем устройстве (ППЗУ). Желающих провести такое занятие просим прислать в редакцию его текст объемом не более 21 машинописных страниц.
Каждый выпуск "Школы начинающего программиста" - плод совместного творчества наших читателей, причем не только тех, кто указан в качестве ведущих очередное занятие. Любое ваше письмо в редакцию, уважаемые читатели, любая реплика, имеющая отношение к тематике "Школы", так или иначе влияют на содержание этой рубрики. И если вы обнаружите какую-то недомолвку в нашем рассказе о микрокалькуляторе МК-61, напишите нам об этом - мы постараемся восполнить пробел в будущих выпусках раздела "Человек и компьютер". Особенно будем вам благодарны, если вы сообщите какую-либо информацию по теме нынешнего занятия, известную вам и не встретившуюся в нашем рассказе.

Итак, вы стали обладателем микрокалькулятора МК-61. До этого вам, быть может, приходилось работать с Б3-34. Сравнивая обе модели, вы наверняка отдаете предпочтение новинке: у нее не 98, а 105 шагов программной памяти, не 14, а 15 регистров, появилось немало новых операций. И все это за те же деньги: цена по сравнению с Б3-34 осталась прежней, чего в наше время почти не бывает. Габариты же у новой модели такие же, как у МК-54.

Вам еще предстоит оценить, насколько были правы разработчики нового микрокалькулятора, выбрав для него в качестве источников питания не аккумуляторы, как в Б3-34, а элементы А-316 "Квант" - ведь на них можно работать всего три часа, а потом их нужно заменять... Но главное, что интересует нас: как применяются и какие выгоды обещают новые по сравнению с Б3-34 операции, выполнимые на МК-61? А старые - совпадают ли они с теми, что были у Б3-34? Будет ли работать МК-61 по программе, написанной для Б3-34?

Будет, если программа состоит только из тех команд, которые описаны в "Руководстве по эксплуатации", прилагаемом к микрокалькулятору Б3-34. Выражаясь языком программистов, система команд, описанных в "Руководстве" для Б3-34, совместима снизу вверх с системой команд МК-61. А если прибегнуть к образному выражению - язык нового микрокалькулятора имеет ту же грамматику, что и язык старого, но более богатый словарный запас. Поэтому тем, кто до сих пор не имел дела с Б3-34, мы настоятельно рекомендуем ознакомиться с приемами работы на этом калькуляторе по занятиям нашей "Школы".

ПЕРЕВОД ПРОГРАММ С ЯЗЫКА Б3-34 НА ЯЗЫК MK-61 И ОБРАТНЫЙ ПЕРЕВОД. Некоторые из операций, идентичных для Б3-34 и МК-61, по-разному обозначаются на клавиатурах обоих микрокалькуляторов. С проблемой подобных разночтений легко справиться с помощью небольшой таблицы.

Матчасть диванного танкиста - Страница 4 88110110
В первых двух колоннах таблицы - несовпадающие обозначения на клавишах микрокалькуляторов Б3-34 и МК-61. В третьей колонке - обозначения, которые предлагают употреблять в журнале при публикации программ для МК-61 М.Собин (г.Ижевск) и вместе с ним ряд других читателей. В четвертой колонке - обозначения тех же операций на клавишах зарубежных микрокалькуляторов. Эту колонку можно продолжить: БП - GOTO; B/0 - RET; ВП - ЕЕ или ЕХР; F() - R1; К, переход на вторую символику - G (или q, или Р); К, косвенный переход - IND; КНОП - NOP; ПП, переход на подпрограмму - RTN; ПП, пошаговая проверка программы - SST; С/П - R/S; /-/ - СН.

Новый микрокалькулятор унаследовал от прежнего многие его недостатки и причуды. Это по-прежнему малая точность команды x**y, выдача сообщения об ошибке вместо нуля при вычислении, например, exp(-300), особенности команды ВП - и частности, сочетание ХПР ВП приводит к отбрасыванию первой цифры числа в регистре X. (Уже из этого короткого примера читатель мог заметить, что в записи программ для МК-61 мы применяем обозначения, близкие к проставленным на его клавиатуре, но более простые: мы пишем не П->х, а ПХ, не х->П, а ХП. Более подробно это разъяснено в только что упомянутой таблице и подписи к ней).

Впрочем, все эти особенности не очень существенны. Серьезнее обстоит дело с приемами, которые давно и успешно используются владельцами Б3-34, по оказываются невыполнимыми на МК-61. Скажем, если во время счета по программе требуется совершить умышленный аварийный останов, то в программу для Б3-34 в подобных случаях часто вставляют команду, образуемую бессмысленным сочетанием клавиш, например, К7. Для МК-61 такая комбинация имеет смысл и трактуется как команда выделения целой части. Для нового микрокалькулятора пригодны лишь шесть подобных команд: K1, K2, К-, К/, К*, ВП, .

Самое же главное - на новый микрокалькулятор непереносимы столь полюбившиеся владельцам Б3-34 команды КП^, КИП^ и им подобные, выполняемые точно так же, как КП0; КИП0 и т.п., но не изменяющие содержимое нулевого регистра.

Как же быть, если в программе, которую желательно перенести с Б3-34 на МК-61, есть команда косвенной адресации, содержащая стрелку? Конечно, можно, разобравшись в алгоритме, написать программу заново, чтобы отпала необходимость в употреблении нереализуемой команды. При этом, если задействовать возможности нового микрокалькулятора, быстродействие программы нередко удается повысить, а объем - уменьшить. Но такой способ сложен, требует больших затрат времени и сил, а также досконального знания всех ухищрений, которыми пользовался составитель программы. Поэтому так поступают лишь в крайних случаях. Если к объему и быстродействию программы не предъявляется особых требований, то можно воспользоваться способом замены, который мы продемонстрируем на примере команды КП^,- замену для остальных команд читатель легко найдет сам по аналогии.

Итак, заменяем команду КП^ фрагментом ПХ0 ХПе F() КХПе. Заметим, что при использовании этого фрагмента уничтожается содержимое регистра X1. Следует проверить, не используется ли оно в сочетании с результатом операции со стрелкой. Если используется, то из приведенного фрагмента надо исключить команду F(), и учесть что при этом ненужное нам содержимое регистра 0 станет барьером па пути к содержимому регистров Y и Z. Если требуется сохранить содержимое регистра Т, то фрагмент будет более сложным: F() ПХ0 ХПе Сх FBx КХПе.

После каждой подобной замены не забудьте поменять адреса переходов. Если команда типа КП^ в исходной программе встречается многократно, и в итоге переделанная на вышеописанный манер программа не помещается в память микрокалькулятора, то можно оформить замену в виде подпрограммы с прямым или косвенным вызовом.

Как видим, легких путей замены нет. Остается только констатировать, что потеря возможности "нелегально" попасть в регистр 0 весьма ощутима и тяжела, и утешать себя тем, что столь удобные команды были, так сказать, вне закона, то есть не были описаны в инструкциях к старым микрокалькуляторам.

Но продолжим разговор о проблеме перевода. При составлении сложных программ с целью экономии ячеек программной памяти часто пользуются косвенной адресацией. Во многих программах для Б3-34 регистр, в котором записан адрес перехода, используется и для хранения константы, если она представляет собою целое число. Такое совмещение удается благодаря тому, что адрес перехода определяется только двумя последними цифрами числа, а остальные цифры на него влияния не оказывают. Если предпоследняя цифра равна нулю, то переход будет осуществляться так же, как если бы в регистре была записана только одна последняя цифра. Если же предпоследняя цифра не равна нулю, то в некоторых случаях Б3-34 н МК-61 производят обращение к разным регистрам (см. таблицу). Однозначного рецепта для перевода поэтому предложить нельзя, по зная, в чем суть, в каждом отдельном случае перевод возможен - либо таким изменением программы, при котором регистры 0 и 1 заменяются регистрами 2 и 3, либо, если используется только Р0, дублированием его содержимого в регистре Е. Возможны и другие методы, в зависимости от конкретной программы.

Матчасть диванного танкиста - Страница 4 88110210
Закономерности косвенной адресации, наблюдаемые в тех случаях, когда в адресном регистре находится не однозначное число. Там, где символы разделены дробной чертой, числитель означает регистр калькулятора Б3-34, знаменатель - регистр МК-61.

Поговорив о переводе программ с языка Б3-34 на язык МК-61, целесообразно поставить вопрос об обратном переводе. Предлагаемые для этого приемы сведены в таблицу. Об операциях, фигурирующих в ее второй колонке, речь пойдет ниже. Прежде чем начать разговор о них, напомним еще раз: если в результате перевода программы стала короче или длиннее, то необходимо скорректировать все адреса переходов.

Матчасть диванного танкиста - Страница 4 88110310
В правой колонке - операции, выполнимые на MК-61 и невыполнимые на Б3-34. В левой колонке - предлагаемые для выполнения тех же действий фрагменты программ для Б3-34. Белыми цифрами в темных уголках полей помечены особенности, которые необходимо учитывать при подобных заменах.
1: М - любой из регистров памяти от 0 до 3.
2: М - любой из регистров памяти от 7 до Д.
3: в РХ всегда большее число, в PY - меньшее.
4: операции производятся с двоичными числами, имеющими не более семи разрядов. А - X|Y, причем в каждом разряде единицы и нули складываются в десятичной системе - например, 1011|0010=1021. В - это число А, в котором единицы заменены нулями; в только что разобранном примере В - 0020, В/2 - 0010.

ВЫДЕЛЕНИЕ ЦЕЛОЙ И ДРОБНОЙ ЧАСТИ ЧИСЛА. Суть одноместных операций, происходящих при нажатии клавиш К[x] и К{х}, ясна из самих этих символов [Надеемся, что читатель понимает, о каких клавишах идет речь, несмотря им то, что знаки целой и дробной части написаны не на самих этих клавишах, а над ними. Подобным образом мы будем называть клавиши и в дальнейшем, не боясь недоразумений]. Следует отметить, что по этим командам МК-61 правильно работает лишь с положительными числами.

По определению целая часть числа - это наибольшее из не превосходящих его чисел. Попытаемся проверить это положение на нашем калькуляторе: 4.25 /-/ К[х] "-4" (в кавычках - число, появляющееся на индикаторе). Но ведь по определению должно быть "-5", так как -4 больше, чем -4.25.

Дробная часть числа является разностью между числом и его целой частью. Что же говорит по этому поводу наш калькулятор? 4.25 /-/ К{х} "-2.5e-01", а должно быть "7.5е-01". Конечно, если уж подобные операции приходится проводить с отрицательными числами, то можно использовать испытанный прием выделения целой части 5 ^ 9 / - 7 F10X + FBх -. Можно построить подобные фрагменты и па основе команд MK-61. Для выделения целой части числа любого знака:

Матчасть диванного танкиста - Страница 4 88110410

При выделении дробной части:

Матчасть диванного танкиста - Страница 4 88110510

Операции выделения целой и дробной части числа позволяют хранить в одном регистре памяти две одинаковые по знаку константы, одна из которых целое число, другая - меньше единицы, а их сумма является числом, в котором не больше восьми знаков. В таком случае сумма констант записывается в некоторый регистр памяти, а при необходимости извлечь одну из них сумма вызывается из соответствующего регистра и затем из нее выделяется либо целая, либо дробная часть.

ОПРЕДЕЛЕНИЕ МОДУЛЯ ЧИСЛА. Эта одноместная операция, вводимая нажатием клавиши К|х|, не изменяет неотрицательных чисел и убирает знак минус у отрицательных.

ОПРЕДЕЛЕНИЕ ЗНАКА ЧИСЛА. Это одноместная операция, набираемая нажатием клавиш Кзн, полностью эквивалентна математической операции sign(x). Если число х больше нуля, то результат равен 1, если меньше нуля, результат равен -1, если х равен нулю, то таков же и результат. Использование этой команды часто позволяет уменьшить число условных переходов в программе.

ВЫДЕЛЕНИЕ БОЛЬШЕГО ИЗ ДВУХ ЧИСЕЛ. Эту операцию, вводимую нажатием клавиш К max, формально следует считать двухместной: ведь она использует два числа, находящихся в регистрах X и Y. Однако она, как и всякая одноместная операция, оставляет в покое содержимое регистров Y, Z, Т. Что же касается регистров X и X1, то с ними происходят поистине диковинные вещи - см. рисунок. Из него нетрудно заключить, что самым большим числом МК-61 полагает нуль. Эту странность можно обьяснить представлением чисел внутри микрокалькулятора, но устроить пользователей она никак не может.

Матчасть диванного танкиста - Страница 4 88110610
Перемещении информации по регистрам стека при выполнении на МК-61 тех операций, которые невыполнимы на Б3-34
Матчасть диванного танкиста - Страница 4 88110710

Еще один недостаток этой команды - ее очень неудобно использовать для сортировки чисел, Было бы гораздо лучше, если бы в результате выполнения команды Кmax большее число заносилось в регистр X, а меньшее - в регистр Y. При существующем же порядке выполнения операции Кmax нельзя сказать, где оказывается в итоге меньшее число. Оно может очутиться или в регистре Y или в регистре X1; в этих же регистрах может оказаться и большее число, Все это заставляет искать другие приемы, когда необходимо выделить меньшее из двух чисел.

ГЕНЕРАТОР СЛУЧАЙНЫХ ЧИСЕЛ предназначен для выработки последовательности псевдослучайных чисел в интервале от нуля до единицы и срабатывает по команде, вводимой нажатием клавиш Ксч. Логично предположить, что очередное псевдослучайное число при этом поступает в регистр X так же, как число пи при выполнении команды Fпи, сдвигая содержимое РХ в PY, РY  в PZ, РZ в РТ. На самом деле операция Ксч происходит по типу одноместной операции; содержимое регистров Y, Z и T не изменяется, в регистре X появляется псевдослучайное число, а прежнее содержимое РХ передается не в PY, a d PX1. Число, находившееся перед этим в РХ, не влияет на поступающее в него псевдослучайное число.

Генератор случайных чисел, используемый в МК-61, обладает неприятной способностью зацикливаться. Разумеется, высказывая этот упрек, мы не забываем, что этот грех свойствен всем без исключения машинным генераторам случайных чисел (потому-то выдаваемые ими числа и называются псевдослучайными - последовательность истинно случайных чисел непериодична по самому своему определению). Но у хороших генераторов повторяющиеся периоды насчитывают многие тысячи чисел. А у генератора, используемого в МК-61, этот период часто очень мал [Всего лишь 153 неповторяющихся числа генерирует программа, предложенная В.Пономаренко ("Химия и жизнь" 4/87) 00. Cx 01. К|x| 02. В^ 03. Ксч 04. FL0 05. 03 О6. С/П], длина его непредсказуема, бывает, что при каждом обращении к генератору выдается одно и то же число, иногда два числа попеременно. Чтобы предотвратить столь безнадежное зацикливание, можно поставить перед командой Ксч пару команд К{x} К{х} или В^ x-y. Однако это портит стек и удлиняет программу, а иногда вообще не помогает.

После включения питания генератор псевдослучайных чисел выдает всегда одну и ту же последовательность. Чтобы изменить ее, можно настроить генератор, занеся в регистр X вручную с клавиатуры восьмизначное число и нажав Ксч. Чтобы генератор каждый раз выдавал новые последовательности, перед вводом программы, содержащей команду Ксч, можно запустить программу 00. Ксч 01. К{x} 02. К{x} 03. БП. 04.00 и прервать ее выполнение клавишей С/П в произвольный момент времени. Эту процедуру можно повторять при каждом включении микрокалькулятора, если желательно достичь того же эффекта.

Одна и та же программа, содержащая команду Ксч, может выдавать разные последовательности псевдослучайных чисел при работе в автоматическом и пошаговом режиме. В "Руководстве по эксплуатации" говорится, что нажатию клавиш Ксч не должны предшествовать операции, вводимые с помощью клавиши К. Но это ставит вне закона добрую половину команд, в том числе все команды косвенной адресации и все новые команды. Словом, для серьезных программ команду Ксч лучше вообще не использовать, да и в игровых программах применять ее удается обычно лишь с большим трудом.

А между тем случайные числа нужны. Нужны в играх, нужны при использовании метода Монте-Карло и по многим другим поводам. В таких случаях лучше использовать хорошо известные и надежно апробированные программные фрагменты.

Матчасть диванного танкиста - Страница 4 88110810
Два наиболее употребимых из программно реализуемых на микрокалькуляторах генераторов случайных чисел. Первый при начальном числе 0.5 выдает около 8000 неповторяющихся чисел, второй - около 4500 при начальном числе 0.

Все описанные здесь особенности генератора случайных чисел в МК-61 выявлены энтузиастами, желающими, несмотря ни на что, использовать этот генератор. Думается, что ими сделаны еще не все открытия. Надеемся, что они и далее будут сообщать о своих находках в дальнейших выпусках раздела "Человек и компьютер".

КОМАНДЫ ПЕРЕХОДОВ. Как уже говорилось, длина программной памяти МК-61 составляет 105 шагов. Прямые и косвенные переходы на адреса от 00 до 99 осуществляются без трудностей. В "Руководстве по эксплуатации МК-61" на стр.102 написано, как ввести в программу безусловный переход на адреса от 100 до 104: вслед за клавишей БП нажать клавишу "десятичная точка" и ту из клавиш от 0 до 4, что соответствует последней цифре адреса перехода.

В том же пункте "Руководства" говорится, что косвенный переход на адреса от 100 до 104 невозможен. Между тем адреса переходов для косвенной адресации можно сформировать так: 1 2 n ^ 8 8 Kили "8.-n" K{х} "-ne-01" ВП 2 ХП N "-n". Здесь п - последняя цифра адреса перехода, N - номер регистра, к которому происходит обращение при косвенной адресации по таким командам, как, например, КБПN или Кх=0N.

Как мог заметить внимательный читатель, адреса 100..104 обозначаются на индикаторе в виде -0..-4. При записи программ на бумаге вместо минуса принято писать букву А. Это связано с особенностями двоично-десятичной системы записи чисел в микрокалькуляторе, речь о которой пойдет ниже. Запомнить же и освоить это нетрудно, поскольку под клавишей "десятичная точка", с помощью которой вводятся подобные адреса переходов, на панели микрокалькулятора стоит буква А.

ЛОГИЧЕСКИЕ ОПЕРАЦИИ, выполнимые на МК-61, таковы: логическое умножение (Kи), логическое сложение (Kили), сложение по модулю 2 (K(+)) и инверсия (Kинв); в скобках - клавиши, нажатием которых выполняются и вводятся в программу эти операции.

Все перечисленные логические операции выполняются только над мантиссой числа, при этом показатель степени и знак аннулируются. В результате в первом разряде мантиссы обязательно появляется цифра 8, после которой стоит точка. Это признак логической операции. Таким образом, любое из четырех этих действий может выполняться только над семью последними символами мантиссы. Первым должен стоять любой символ, кроме 0; его участь - превратиться в восьмерку.

Прежде чем подробно рассматривать работу этих команд, необходимо разобраться в форме представления чисел в микрокалькуляторе.

Любое число может быть представлено в различных системах счисления. Количество употребляемых в системе знаков называется ее основанием.

На индикаторе микрокалькулятора числа выводятся в десятичной системе, где для их записи используется 10 цифр - от 0 до 9. В вычислительной технике применяется двоичная система, где всего две цифры - 0 и 1. Родственны ей четверичная, восьмеричная и шестнадцатеричная системы. В первой из них любое число записывается четырьмя цифрами от 0 до 3, во второй - восемью, от 0 до 7. Третья использует 16 цифр, последние из которых обозначаются латинскими буквами: 0..9,A,B,C,D,E,F. Чтобы не путать числа, записанные в разных системах счисления, внизу справа от числа указывают основание системы. Например, 255[10]=FF[16]=377[8]=11111111[2].

(Если вы затрудняетесь при расшифровке записи числа в некоторой системе счисления, напишите справа налево под каждым знаком числа основание системы в пулевой, первой, второй и последующих степенях, перемножьте числа, стоящие друг под другом, и сложите все произведения - результат будет равен расшифровываемому вами числу).

Изначальной для всякой ЭВМ (и для микрокалькулятора тоже) является двоичная система. Выходные устройства микрокалькулятора, как мы вскоре увидим, оперируют с числами в шестнадцатеричной системе. Человек же привык иметь дело с числами десятичными. Поэтому пришлось идти на компромисс - каждая десятичная цифра в памяти микрокалькулятора записывается в виде четырех двоичных, которые почти всегда выступают как единое целое: такая четверка называется тетрадой (см. таблицу). В такой двоично-десятичной системе десятичное число 127 запишется в виде 0001 0010 0111. Из этой формы его легче вывести на индикатор, что для микрокалькулятора, где это приходится делать очень часто, послужило решающим обстоятельством. (Заметим: из-за автоматического гашения нулей, заканчивающих число, тетрады 0000[2] в конце числа индицируются пробелами и на индикаторе неотличимы от тетрад 1111[2]).

Матчасть диванного танкиста - Страница 4 88110910
Символы, которыми на индикаторе микрокалькуляторов отображаются знаки шестнадцатеричной системы счисления. Поскольку А в этой системе означает 10, становится ясным, почему трехзначные адреса переходов 100..104 в программах для МК-61 принято записывать в виде А0..А4.

Четыре двоичные цифры могут образовать 16 комбинаций - ими можно записать 16 различных чисел. Под десятичные числа требуется 10 комбинаций. Поэтому остальные 6 используются для знака -, пробела и "букв" в кодах команд микрокалькулятора.

Теперь можно перейти непосредственно к логическим операциям. Они имеют еще одно название - булевы функции, по имени Дж.Буля, английского математика XIX пека, основавшего алгебру логики, которая изучает действия над двоичными числами: 0 - ложь, 1 - истина.

Все логические операции выполняются поразрядно, то есть результат в каждом двоичном разряде определяется только содержимым этого разряда в обоих операндах и никак не зависит ни от исходных цифр, ни от результата в других разрядах. Определения таких операций над числами 0 и 1 даны в таблице. Выше было показано, как при этом изменяется содержимое регистров.

Матчасть диванного танкиста - Страница 4 88111010
Результаты двухместных логических операций над числами 0 и 1 при всех возможных значениях аргументов.

Например, на индикаторе число 259. Что будет после нажатия клавиш Kинв? С первой цифрой все ясно - она заменится восьмеркой. Чтобы выяснить судьбу цифр 5 и 9, надо взять соответствующие им тетрады, совершить инверсию в каждом разряде (то есть заменить 0 на 1 и наоборот) и посмотреть, какому символу соответствует результат:

5=0101[2]->1010[2]=-
9=1001[2]->0110[2]=6

На индикаторе появляется "8.-6". В пяти последних разрядах каждый погашенный нуль, то есть тетрада 0000, превратился в тетраду 1111, то есть в пробел.

Следующий пример. Проводом логическое умножение, взяв за сомножители результат инверсии числа 259 и число 12345:

Матчасть диванного танкиста - Страница 4 88111110

На индикаторе высветится "8.2245".
Точно так же нетрудно показать, что логическое сложение чисел 4691 и 12345 дает 8.6L55. Если бы в первом операнде на месте погашенных нулей были пробелы (напомним: им соответствуют тетрады 1111), на индикаторе появилось бы 8.6L5 (проверьте).

Применив к тем же числам сложение по модулю 2 (проделайте это вначале самостоятельно), получим 8.4-55. Как и в предыдущем случае, замена погашенных нулей в конце первого слагаемого пробелами изменила бы результат: мы получили бы комбинацию 8.4-5- .

Подобные комбинации символов, где встречаются знаки -, L, С, Г, Е и пробелы, точнее было бы назвать шестнадцатеричными числами. На МК-61 можно проводить все логические операции над такими числами, а также (кроме инверсии) над числами в системах с основаниями 8, 4 и непосредственно набранными на индикаторе двоичными числами. При этом из четырех двоичных разрядов каждой тетрады на каждый символ используется соответственно 3, 2 и 1 младший разряд. В старших разрядах всегда находится 0. Для инверсии исходное число нужно предварительно сложить по модулю 2 с дополнительным числом: 8.8888888 для восьмеричной системы, 8.ССССССС для четверичной, 8.ЕЕЕЕЕЕЕ для двоичной. Можно выполнять и такие логические операции, как эквиваленция (тождество А=В) и импликация (следование А->В). Первая осуществляется как инв(А(+)B). вторая - как или(инв(А),B).

Шестнадцатеричные числа (за исключением содержащих цифру F) могут так же свободно путешествовать по стеку, как и десятичные, так же модифицируются при косвенной адресации. Они нормально обрабатываются командами K[х], K{х}, K|х|, Kзн, Кmax, F(), x-y, FВх, B^, ВП, /-/, ПХР, XПР. Однако эти операции над числами, содержащими цифру Р, могут привести к полному отказу микрокалькулятора, когда для восстановления его работоспособности потребуется кратковременно отключить питание. Остальные команды для шестнадцатеричных чисел не определены; если попытаться их выполнить, то авост может и не последовать, но результат будет бессмысленным.

Команды логических операции редко используются но своему прямому назначению. Гораздо чаще они применяются для получения различных видеосообщений (см. 6/88 ). Пример: индикация номера прохождения цикла в виде сообщении CIRCLE.N, где N - номер никла (circle по-английски - круг). Чтобы получить слово CIRCLE, используем логическое сложение чисел A808888 и A415436. где A - любая ненулевая цифра.  Результат: 8.CIRCLE. Чтобы убрать восьмерку и передвинуть точку на место, достаточно выполнить вручную команды К{x} ВП 6 В^. Но пока мы этого делать не будем, а запишем полученную комбинацию символов в регистр Е. Теперь введем программу 00. Сх 01. XП4 02. КПХ4 03. 7 04. F10X 08. Kили 09. K{x} 10. B^ 11. ВП 12. 6 13. С/П 14.БП 15. 02. (Регистр 4 - счетчик циклон; команды 00 и 01 очищают счетчик, команда 02 - увеличение номера цикла, команды 03-06 готовят число 1000000N, команды 07-11 формируют видео-сообщение с устранением восьмерки и установкой точки включительно).

Матчасть диванного танкиста - Страница 4 88111210
Числа, логическим сложением которых получается слово CIRCLE.

Внимательный читатель заметил, что и в серии ручных операции, с помощью которых из 8.CIRCLE можно получить CIRCLE., и в соответствующем фрагменте программы присутствует команда В^, причем в обоих случаях ее положение неодинаково. Эта деталь побуждает нас обратить внимание, во-первых, на то, что команда ВП, таинственная во многих отношениях, непроста и в сочетании с логическими операциями, а во-вторых - что фрагменты программ, содержащие логические операции, могут по-разному выполняться в автоматическом и ручном пошаговом режимах. Надеемся, что наши читатели откроют еще немало подобных тонкостей, снизанных с логическими операциями микрокалькулятора MK-61, и расскажут о них в дальнейших выпусках раздела "Человек и компьютер".

Запустим нашу программу: В/0 С/П. После останова на индикаторе СIRСLЕ.1; нажимаем С/П - на индикаторе CIRCLE.2... и так далее до сообщения СIRCLE9. К сожалению, число 10 занимает уже два разряда индикатора, и его единица превращает в пробел букву E в конце слова CIRCLE, а нуль автоматически гасится, так что после десятого пуска на индикаторе появляется сообщение CIRCL., и мы видим... для чисел, больше девяти, условное слово должно быть короче, чем СIRCLE.

ПЕРЕВОД ВЕЛИЧИН, ВЫРАЖЕННЫХ В ЧАСАХ (ГРАДУСАХ) И ИХ ДЕСЯТИЧНЫХ ДОЛЯХ, В МИНУГЫ И СЕКУНДЫ И ОБРАТНЫЙ ПЕРЕВОД. Каждая из этих операции выполняется нажатием па клавишу K, а затем на нужную из следующих четырех:

Матчасть диванного танкиста - Страница 4 88111310

Во всех случаях целая часть часа (градуса) остается без изменений. Если число состоит из целой части и десятичной дроби, то оно может быть преобразовано в число, состоящее из целой части, минут и десятичных долей минуты. Чтобы это сделать, нажмем сначала на клавишу K, а затем на первую из изображенных здесь клавиш. Если же нажать на вторую, то исходное число будет преобразовано в состоящее из целой части, минут, секунд и десятичных долей секунды.

Пусть в качестве исходного взято число 4.2356. Набираем его на индикаторе, нажимаем клавишу K, потом вторую из приведенных здесь. Получившееся па индикаторе число 4.140816 следует читать как -4o14'08.16". Иными словами, целая часть числа - это градусы (часы), две первые цифры дробной части - минуты, две следующие цифры секунды, а все остальное - доли секунды.

Еще одни пример, посложнее: перевести и часы, минуты и секунды 1.3888888e-3 часа. Набираем на клавишах 1.3888888 ВП 3 /-/, проделываем вышеописанные действия и получаем на индикаторе 05e-03. Любопытный результат. Чтобы не ломать голову над его истолкованием, прибавим к нему 1. На индикаторе 1.0005. Все ясно - это просто 5 секунд.

Испытаем в действии следующую операцию. Наберем на индикаторе число, целая часть которого выражает часы, две первые цифры дробной части - минуты, остальное - десятичные доли минуты. Нажмем клавишу K и затем третью из нарисованных здесь. На индикаторе - тот же отрезок времени, выраженный в часах и десятичных долях часа. Пусть наконец на индикаторе число, целая часть которого выражает часы, две первые цифры дробной части - минуты, две следующие - секунды, остальное - десятичные доли секунды, (Если отсутствуют десятки, то вместо них ставится ноль. Например, 23 часа 1 минута и 7 секунд записывается так: 23.0107). Нажмем клавишу K и затем четвертую из нарисованных здесь. На индикаторе - опять-таки тот же отрезок времени, выраженный в часах и десятичных долях часа.

Все эти четыре операции одноместные, то есть они оставляют без изменении содержимое регистров Y, Z, Т, результат помещают в регистр X, а то, что было там прежде, перемещается в регистр X1.

Описанные операции нередко приходится комбинировать. Предположим, известно, что некоторый угол равен 48o57.265'. Чтобы выразить его в градусах, минутах и секундах, наберем его в виде 48.57265 (первые две цифры после занятой - минуты, остальное - доли минуты). Нажав третью из перечисленных выше клавиш, получим величину этого угла в градусах - 48.954416. Наконец, нажмем клавишу K и вторую из четырех приведенных выше. На индикаторе - число 48.571589, что означает 48o57'15.89".

В заключение нужно отметить, что если вы пожелаете перевести в часы и десятичные доли часа, например, 32 часа 47 минут 71 секунду, набрав на индикаторе 32.4771 и отдав соответствующую из только что описанных команд, микрокалькулятор выдаст сообщение об ошибке: в минуте не может быть больше 60 секунд. К тому же результату приведет и попытка, скажем, перенести в часы и десятичные доли часа величину 1 час 60 минут: ведь 60 минут - это уже следующий час.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Фев 19, 2023 12:36 am

12/88
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Вновь на наших страницах встречаются владельцы бытового компьютера БК-0010. Но первые страницы раздела по традиции предоставляются пользователям программируемых микрокалькуляторов. Им же адресована и рубрика "Бюро справок", традиционно завершающая выпуск.
Есть в нынешнем выпуске раздела и информация о выходящей в 1989 году книге "Программы для микропроцессоров".

ИЗОБРЕТЕН ЛИ МИКРОКАЛЬКУЛЯТОР?
В 6/88 в разделе "Человек и компьютер" была опубликована статья С.Комиссарова "Изобретем микрокалькулятор!". Читателям предлагалось составить коллективный проект нового программируемого микрокалькулятора, который удовлетворял бы пользователей более, чем распространенные ныне модели Б3-34, МК-61, МК-52. В редакцию поступили первые отклики на статью.

"МК-61 меня устраивает,- пишет Е.Андросов ил Благовещенска,- но быстродействие необходимо увеличить на порядок". "Взять за образец американские программируемые калькуляторы - ТI-58С и ТI-59",- предлагает Е.Агеенко из Ульяновска. "Персональные компьютеры сегодня, увы, в нашей стране не получили широкого распространения,- читаем в письме В.Князькова из Душанбе,- и еще лет 10 будет ощущаться их дефицит. К тому же цена в обозримом будущем не позволит иметь их учащимся, начинающим инженерам и научным сотрудникам". Именно этими обстоятельствами он объясняет желание некоторых пользователей как можно более приблизить программируемый микрокалькулятор к персональной ЭВМ, сохранив неизменной его нынешнюю цену. "Стремление решить на микрокалькуляторе задачи, предназначенные для больших ЭВМ,- говорит М.Колесников из Белгородской области,- похоже на желание запихнуть слона в клетку для канарейки. Компьютеру - компьютерово, а все остальное - микрокалькулятору! К тому же этого всего остального достаточно много". Таковы полярные позиции читателей, откликнувшихся на призыв предложить свой вариант микрокалькулятора.

Что касается быстродействия МК-61, то пути к его увеличению есть. В.Федоров из Волгограда прислал схему параллельной обработки информации, С.Смирнов из Челябинска, уменьшив сопротивление R1 (см. схему микрокалькулятора в "Руководстве по эксплуатации") до 470кОм, увеличил быстродействие на 25 процентов. И.Стрижаченко из Ижевска подключил к Б3-34 внешний тактовый генератор с частотой 200кГц вместо внутреннего - 125 кГц, и быстродействие увеличилось в 1.8 раза. Правда, при этом возрос в два раза и потребляемый ток, а это уменьшает в два раза время работы от автономного источника питания, да и не ясно, рассчитаны ли на такое повышение МК-61 и Б3-34, в особенности при длительной работе в таком режиме.

Программируемый микрокалькулятор, но мнению многих читателей, должен быть избавлен от побочных эффектов и в первую очередь от получения разных результатов при работе но программе или ее пошаговой проверке. "Особые приемы программирования,- пишет уже упоминавшийся В.Князьков,- присущие всем языкам, но они не имеют ничего общего с теми "шаманскими" командами, к которым приходится иногда прибегать, чтобы заставить микрокалькулятор правильно работать по программе". Ряд читателей предлагает выводить на индикатор букву F вместо выводимого сейчас пробела и устранить искажения программы и другие аномалии, возникающие при появлении пробела в первом разряде индикатора. Всем понятно, что эти и другие недостатки в одночасье не устранить. В качестве первого шага предлагается оговорить в "Руководстве по эксплуатации" все комбинации команд, искажающие результат, и по возможности оговорить, к каким искажениям приводит та или иная комбинация.

В самое ближайшее время, настаивают многие читатели, должен быть устранен дребезг контактов клавиатуры, вызывающий появление на индикаторе двух, а иногда и большего количества цифр вместо одной. Плохая работа генератора случайных чисел уже неоднократно отмечалась. Пишут о ней и сейчас, а петрозаводский школьник Р.Сузи прямо предлагает сделать этот генератор энергонезависимым, с периодом в несколько тысяч чисел и возвращаемым к началу последовательности только специальной командой. Он же предлагает изменить таблицу кодов, имеющуюся в "Руководстве", и сделать ее наподобие опубликованной в 12/84.

Остальные предложения ие носят массового характера, но так как за каждым из них стоит определенная группа пользователей, они, безусловно, заслуживают рассмотрения. Москвич В.Карантиров, ленинградец П.Пантелеев и другие считают, что необходимо вернуться к обозначениям на клавишах "П" и "ИП", вместо "Х-П" и "П-Х", как у МК-61 и МК-52, ввести неодинаковые сигналы для переполнения и некорректной операции, сделать возможным менять свечение индикатора во время работы при естественном или искусственном освещении, снабдить индикатор увеличительным стеклом.

Конечно, все сказанное относится и к МК-52, но к нему есть и другие претензии. "В книге Я.К.Трохименко "Программирование МК-61 и МК-52",- пишет саратовский студент С.Федотов,- прямо сказано, что вывод информации из МК-52 может быть осуществлен не только на индикатор и что, кроме блоков расширения памяти, к нему подключаются другие периферийные устройства, но ни слова о них не сказано. Где эти блоки расширения памяти? В связи с чем они не поступают в продажу? Может быть, эта периферия еще в стадии разработки? Так зачем же хвастаться и дразнить покупателей? Значит, нет у нас еще в продаже "наиболее совершенных моделей калькуляторов", о которых писали в своих книгах Я.К.Трохименко и В.П.Дьяконов. Обидно! И дорого стоит эта обида - 115 рублей!" Думаю, что обида С.Федотова была бы еще больше, если бы он узнал, что без переделок калькулятора нельзя сиять информацию с разъемов МК-52, а можно лишь вводить (об этом будет сказано подробнее в одном из уроков "Школы начинающего программиста"). А вот строки из письма Л.Рочева из Сыктывкара: "Когда же, наконец, долгожданный МК-52 превратится в законченную систему, присоединив к своим разъемам блоки расширения памяти? Ведь за возможность подключения этих блоков мы платим деньги, но для нас она является оплаченной невозможностью".

Ответить на все вопросы о злополучной периферии к МК-52 может изготовитель - киевское ПО "Кристалл".

Мы свяжемся с ними, когда закончим анализ читательской почты. А пока ждем ваших новых откликов, дорогие читатели!

[ УЗЕЛКИ НА ПАМЯТЬ
Приведенный в 6/88 прием исключения из результата логической операции первой цифры 8 и цифр порядка дает правильный результат только в режиме ручного счета. Для получения правильного результата при работе по программе необходимо перед командой ВП поставить "шаманскую" команду B^. Кстати, так надо поступать всегда, если в программе стоит комбинация команд Ф(х) ВП, где Ф(х) - любая арифметическая или логическая операция, а таже команда, по которой вычисляется значение какой-либо функции: exp, 10X, lg и т.д.
В.КНЯЗЬКОВ (г.Душанбе)

С помощью логических операций на индикаторе МК-61 можно получить видеограмму длиной в восемь знаков (а не в семь, как указано в 6/88 при условии, что она не начинается со знака 0 и не кончается знаками Е, Г, С, L. Для этого с помощью логических операций предварительно формируют видеограмму, в начале которой стоит восьмерка с десятичной точкой (это обычно для результата любой логической операции), далее идут шесть первых знаков требуемой видеограммы, а потом - знак, на единицу больший, чем седьмой знак требуемой видеограммы (если при этом речь идет о букве, то ее надо рассматривать как знак 16-ричной системы счисления - 11/88). Сформировав такую видеограмму, далее следует произвести операции К{х} ВП 8 ХПР, где Р - один из регистров 0-3. Если в конце требуемой видеограммы стоит знак 0, то после этого следует выполнить операцию ПХР. Если же в конце стоит N!=0, то нужно 10-N раз нажать клавиши КПХР, а потом выполнить операцию ПХР. На индикаторе появится требуемая видеограмма.
В.БЛОХИН (г.Москва) ]

РЕБЕНОК НА ВЕСАХ
Известно, что перекармливание, равно как и недокармливание, детей грудного возраста может вызвать предрасположения к серьезным заболеваниям обмена веществ. В детских поликлиниках участковые врачи регулярно контролируют вес младенцев в установленные сроки, но при этом затрачивают много времени на расчеты с показателями весовой прибавки. Предлагаемая программа для МК-61 позволяет довольно быстро справиться с этой задачей. А родителям, имеющим весы для взвешивания грудных детей, программа позволит в домашних условиях оценивать те же показатели ежемесячно.

00. 1 01. 2 02. ХП1 03. ХП7 04. 1 05. 6 06. ХП2 07. ХП3 08. 1 09. 5 10. ХП4 11. 1 12. 4 13. ХП5 14. 1 15. 3 16. ХП6 17. 1 18. 1 19. ХП8 20. 1 21. 0 22. ХП9 23. 9 24. ХПА 25. 8 26. ХПВ 27. 7 28. ХПС 29. Сх 30. ХПЕ 31. ПХД 32. С/П 33. ХПД 34. F() 35. 1 36. + 37. ХП0 38. КПХ0 39. ПХЕ 40. + 41. ХПЕ 42. ПХО 43. Fx=0 44. 38 45. ПХЕ 46. 5 47. 0 48. * 49. ПХД 50.+ 51. ХПД 52. БП 53. 29.

Инструкция. Ввести программу, нажать клавиши F АВТ В/0 С/П. На клавиатуре набрать возраст ребенка в месяцах, нажать В^, затем набрать вес ребенка при рождении в граммах, нажать С/П. Через несколько секунд на индикаторе высветится вес, который ребенок должен иметь в норме на данный период жизни. Остается только сравнить реальный вес вашего малыша с нормальным.

Постановку задачи я нашел в книге Л.Ф.Островской "Первый год жизни вашего ребенка" (М., "Педагогика", 1977).
В.КРИВЕНКО (г.Ленинград).

[ УЗЕЛКИ НА ПАМЯТЬ
Если необходимо эпизодически воспользоваться на Б3-34 программой для МК-61, содержащей команду, которая отсутствует у Б3-34, то проще всего вместо этой команды поставить в программе С/П и при останове выполнить действия, предписываемые этой командой. Получив требуемый результат, нужно нажать клавиши F(), набрать на клавиатуре полученный результат и напоследок дважды нажать клавишу x-y. Последнее необходимо, если за командой, замененной на С/П, в программе следует команда в виде цифры. После этого запустить программу для дальнейшего счета клавишей С/П.
А.МЕРЖЕЕВСКИЙ (г.Житомир) ]

РАДИОЛЮБИТЕЛЬ ПОНЕВОЛЕ
Когда я оставлял в магазине открытку на приобретение БК-0010, некоторые знакомые меня отговаривали: еще рано покупать компьютер - стоит он гораздо дороже, чем должен стоить, подключить к нему ничего нельзя, да и купить то, что можно было бы подключать, тоже нельзя. Нет к тому же самого главного - программного обеспечения.

Компьютер я все же купил и успел убедиться, что именно так и обстоят дела. Во-первых, за год, прошедший с тех пор, мне пришлось стать радиолюбителем. В самом деле, подключить БК к телевизору - это значит поработать полчаса с паяльником; улучшить работу с магнитофоном - снова за паяльник, собираешь фильтр. Удалось достать принтер (в магазинах они так и не появлялись) - так тут пришлось не только специальные шнуры изготовить, но и написать несколько программ, без которых БК с принтером работать не может. Джойстик пришлось сделать из кнопочных переключателей, чтобы клавиатуру лишний раз играми не разбивать, да и саму клавиатуру пришлось переделать, чтобы избавиться от дребезга клавиш. Постепенно появляется опыт, так что теперь я собираюсь взяться за подключение БК к цветному телевизору, а эта работа не такая уж простая, особенно, если хочется получить 16 цветов. В планах - расширение памяти и подключение дисковода (может быть, кто-то знает, где его достать?).

Так и не пойму до сих пор, что я купил - компьютер или набор "Для умелых рук"?

О программах не говорю. Если москвичам доступен банк программ Московского клуба пользователей БК, то остальным владельцам этого компьютера приходится нелегко.

Как тут не вспомнить опыт наших друзей из ГДР. Мне довелось быть в этой стране дважды - в 1987 и в 1988 годах. В первый раз компьютеров в тамошних магазинах я не встречал, хотя можно было познакомиться с данными одного из них на выставке в специализированном магазине. Всего через год в продаже появились сразу три модели. Любую из них можно подключить к телевизору, даже цветному без помощи паяльника, одновременно с компьютерами можно купить целый набор модулей - ПЗУ с различными языками программирования, блоки расширения ОЗУ, блоки сопряжения с электронной пишущей машинкой ("ромашкой"), саму эту машинку можно использовать в качестве принтера. Там же, в магазине, продаются и кассеты с записью программного обеспечения - не только системного, но и прикладного. Нужно добавить, что там в книжных магазинах немало книг по компьютерной тематике.

Так неужели, наваливаясь на увеличение выпуска компьютеров, наша промышленность будет по-прежнему игнорировать необходимость выпуска периферийных устройств?

Пока их нет, хочу дать читателям совет: если собираетесь приобрести БК - покупайте паяльник и осваивайте электронику.
А.СЕРГЕЕВ (г.Тупа)

1024 СОВЕТА
(байт четвертый)
25. Сбрасывать на писк полуфабрикаты программы можно и автоматически (см. совет 16 в 2/88), вставив в программу оператор перезаписи. После этого любой пробный запуск отлаживаемой программы будет сопровождаться ее обновлением в архивной памяти.
(Э.Пухов, г.Иркутск).

26. Описывай в заголовке программы все задействованные переменные, даже если правила языка этого не требуют. На Бейсике, например, это можно сделать в комментариях к операторам присваивания начальных значений переменным (Э.Пухов).

27. Вспомни о том, как телевизор просит, чтобы его выключили, и вноси в свои программы участки выдачи на дисплей важных сообщений в мигающем и пищащем режимах (В.Ванышев, г.Москва).

28. Если для выделения важных сообщений используется звук, то увеличение его высоты может. например, означать рост значения какого-либо параметра (А.Рудкевич, г.Пермь).

29. Помечай на экране дисплея поля, куда пользователь должен вводить запрашиваемые данные: это в какой-то мере убережет его от ряда ошибок (А.Рудкевич).

30. Избегай необщепринятых сокращений. Стоит ли ради экономии нескольких знаков вставлять в оператор ввода невразумительное буквосочетание ГД.РЖД., если можно написать просто: ВВЕДИТЕ ГОД РОЖДЕНИЯ (А.Рудкевич).

31. Как можно определенней оформляй сообщения об ошибках пользователя. Сравни два сообщения: ОШИБКА В ДАННЫХ и В ТРЕТЬЕМ ЧИСЛЕ ЕСТЬ НЕЦИФРОВОИ СИМВОЛ! (А.Рудкевич).

32. Накрывай колпачком опасные клавиши клавиатуры ЭВМ, нажатие на которые чревато необратимыми последствиями. Перепрограммируемые клавиши можно накрывать сменными эластичными колпачками с обозначением той или иной текущей функции (народное средство, давно используемое кассиршами в магазинах).

РЕКУРСИЯ В БЕЙСИКЕ
Меня заинтересовала заметка Л.Иоффе (2/88) о головоломке "Ханойская башня". В ее названии упоминается имя столицы моей Родины - города Ханоя. Я читал об этой головоломке в книге П.Грогоно "Программирование на языке Паскаль". Там в главе о рекурсии сказано, что у служителей храма брахманов, откуда происходит головоломка, она состоит из 64 дисков и ее завершение будет означать конец света; но, добавляет автор, даже современная ЭВМ завершила бы их перекладывание за миллион лет.

В заметке Л.Иоффе было обращение написать программу решения головоломки на Бейсике. Был и намек, что сделать это почти невозможно. Мне удалось это сделать для ЭВМ "Искра-226" с использованием рекурсии (1-я программа) и без нее (2-я программа).

Матчасть диванного танкиста - Страница 4 88120110

В современных версиях Бейсика (в том числе той, которая используется в "Искре-226") есть два типа подпрограмм: привычный тип с обращением к номеpy первой строки оператором - GOSUB и подпрограмма-процедура с вызовом по имени или номеру (1-я программа). Такая подпрограмма может иметь входные и выходные параметры. Правда, нигде не сказано, что такая подпрограмма может рекурсивно вызывать саму себя. Но я попробовал, и получилось - во всяком случае, для семи кружков.
ФАМ ВАН ЧИЕН, студент МЭИ.

ОТ РЕДАКЦИИ. Решение задачи о Ханойских башнях на Бейсике с рекурсией и с использованием операторов вызова подпрограмм по номеру строки прислали Г.Гутман (г.Куйбышев) и А.Радченко (г.Удачный Якутской АССР). Н.Саква из Москвы прислал программу без использования рекурсии и с массивом небольшого размера.

...


Последний раз редактировалось: Gudleifr (Пт Фев 24, 2023 12:40 am), всего редактировалось 1 раз(а)
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Фев 19, 2023 12:40 am

...

КАК ПОДКЛЮЧИТЬ БК К ТЕЛЕВИЗОРУ
Подключить БК к телевизору? Что может быть проще!- воскликнет иной радиолюбитель. И в самом деле, у компьютера есть для этого специальный разъем, который так и обозначен - ТВ. Казалось бы, вставляем в разъем кабель, другой его конец подключаем к телевизору - и можно работать.

Не тут-то было! В большинстве отечественных телевизоров вход "Видео" (а именно видеовход необходим для подключения компьютера) отсутствует. Впрочем, если такое обозначение все же есть на схеме телевизора, это еще ничего не означает. Вот фраза из письма читателя Л.Варшавского (г.Калининград): "В телевизоре "Электроника Ц-401М" видеовход ни к чему не подключен, хотя по схеме он соединен с блоком радиоканала".

Что же, оставим эту недоработку на совести предприятия, где сделали "Электронику Ц-401М", и направимся в телеателье. Там, несомненно, за несколько минут сделают необходимое соединение. Впрочем, прежде дочитаем письмо Л.Варшавского: "Я попытался обратиться в телеателье, но мне ответили, что поскольку телевизор работает, то работники ателье ничего делать не будут. Пришлось делать видеовход самостоятельно".

Может быть, Л.Варшавскому просто не повезло? Посмотрим, что пишут другие читатели. "Подключить БК к телевизору мне помог знакомый радиолюбитель. До этого я обращался в телеателье, но в помощи было отказано" (М.Калашников, г.Балашиха), "У телевизора "Горизонт 101" видеовход отсутствует, поэтому я установил дополнительное гнездо" (И.Стеколин, г.Москва).

Неужели переделка доступна лишь радиолюбителям, а квалифицированные работники телеателье не способны ее выполнить? В одном из центральных московских отделений "Орбиты-сервиса" и в районном телеателье ответ на этот вопрос звучал одинаково: работа простая, но нет соответствующего прейскуранта, попросту неизвестно, сколько она должна стоить.

Итак, что же все-таки делать, пока телеателье ожидают очередной спасительной инструкции? Если у телевизора гарантийный срок еще не вышел, то, как известно, открывать его нельзя, иначе владелец потеряет право на гарантийное обслуживание. В этом случае выход один - несколько пожертвовать качеством изображения и подключить компьютер к тому входу, который есть в каждом телевизоре,- это гнездо для подключения антенны. Для этого, однако, понадобится специальное устройство - видеомодулятор. Модулятор можно собрать самому или попросить помощи у знакомого радиолюбителя.

Что это за устройство? По существу, это объединение двух блоков - генератора и модулятора. Генератор вырабатывает сигнал, в данном случае высокочастотный сигнал, соответствующий одному из телевизионных каналов метрового диапазона. Модулятор управляет высокочастотным сигналом, заставляя его следовать всем изменениям сигнала, который приходит от компьютера. Этот высокочастотный сигнал будет принят телевизором по одному из каналов точно так же, как если бы пришел с телецентра.

Одна из схем модулятора, в общем-то несложная, была опубликована, например, в журнале "Радио" 10/86. Встречаются и более сложные схемы. Лучшего качества можно добиться, если частота генератора стабилизирована кварцевым резонатором. Кстати, модулятор может работать не только в метровом диапазоне, где он создает некоторые помехи приему телепрограмм, но и в свободном сегодня дециметровом диапазоне, как это делается в большинстве зарубежных домашних компьютеров. В этом случае, однако, телевизор должен быть снабжен блоком ДЦВ.

И все же модулятор, даже очень хороший, ухудшает качество картинки на телеэкране. В самом деле, низкочастотный сигнал преобразуется модулятором в высокочастотный, а в телевизионном приемнике вновь в низкочастотный. Двойного преобразования можно избежать, если подключить выход компьютера к видеовходу телевизора. Поэтому, если гарантийный срок закончился и телевизор не стоит на абонементном обслуживании, попросите помощи у знакомого радиолюбителя. А для того чтобы не пришлось изобретать велосипед, предлагаем несколько вариантов, опробованных читателями. Все обозначения даны по схемам телевизоров.

"Кабель ТВ я подключил к выводу 8 лампы 3-Л4 (6Р 4П) видеоусилителя" (В.Бабицкий, г.Минск, телевизор "Горизонт 206" УЛПТ-68-11-28 ).

"У телевизора отсутствует видеовход, поэтому я установил дополнительное гнездо, подключил его экранированным проводом к контрольной точке К-18, соединенной со входом видеоусилителя (сетка лампы 4Л4, 6Ф1П), через электролитический конденсатор емкостью 500мкФ. Переключатель устанавливаю на свободный канал (И.Стеколин, г. Москва, телевизор "Горизонт-101").

"Разъем для компьютера я подключил через неполярный конденсатор 2мкФ к базе транзистора V7 блока I. Чтобы не шли помехи, базу транзистора последнего каскада УПЧИ замыкаю на корпус, однако в этом случае телевизор работает только как дисплей" (А.Макеев, г.Ленинград, телевизор "Электроника 408Д").

"Отрезком экранированного провода я соединил контакт 1 разъема Х3 (модуль радиоканала А1) со свободным контактом 5 разъема "магнитофон", а контакт 6 разъема ХЗ с контактом 3 разъема "магнитофон". Разъем Х3 предназначен для подключения видеомагнитофона и обычно отсутствует - есть только печатные дорожки,- к ним я и подключился. Кабель, соединяющий компьютер с телевизором, я собрал по схеме 1:

Матчасть диванного танкиста - Страница 4 88120210

Теперь, когда я вставляю штеккер в телевизор, он автоматически переключается на работу с компьютером" (А.Дьяков, г.Москва, телевизор "Рубин Ц 266").

Матчасть диванного танкиста - Страница 4 88120310

"Конденсатор C1 в схеме 2 - любой неполярный конденсатор, емкостью не менее 1мкФ. В правом по схеме положении переключателя телевизор работает на прием телепрограммы, в левом - как дисплей. Если в телевизоре вместо блока БРК-3 установлен блок БРК-1 или БРК-2, то вместо транзистора V10 на схеме будет транзистор V9" (О.Чистяков, г.Томск, телевизор УЛПЦТ(И)-59/61-11).

Собранные здесь советы и рекомендации, конечно, не исчерпывают проблему. Более того, с некоторыми моделями телевизоров придется повозиться, понадобятся другие схемотехнические решения, особенно если подключать БК к цветному телевизору. Безусловно, вопрос, заданный в заголовке статьи, остается практически без ответа. Ответить на него могли бы предприятия, которые выпускают БК, дополнив компьютер встроенным модулятором для работы в дециметровом диапазоне. Здесь смогут помочь любые предприятия, которые хотели бы выпускать товары народного потребления. Тут могли бы поработать и кооперативы. Впрочем, лучше, если бы видеовход появился во всех новых моделях телевизоров и (это, пожалуй, не менее важно) если бы его можно было сделать в любой старой модели с помощью работников телеателье.
А.БОЙКО

КОМПЬЮТЕР ПЕЧАТАЕТ
Персональный компьютер - это не только микро-ЭВМ, но и накопители информации - дисковод или магнитофон, печатающее устройство. Бытовой компьютер БК-0010 рассчитан прежде всего на подключение магнитофона. Однако и к нему можно присоединить дисковод или печатающее устройство, например, такое, как УВВПЧ-30 004 Сделать это несложно, если понимаешь, как компьютер взаимодействует с принтером. Соединительный кабель придется изготовить самостоятельно, в этом поможет таблица.

Матчасть диванного танкиста - Страница 4 88120410

Поясним назначение линий связи. По линии ГИ (готовность источника) компьютер сообщает принтеру о своей готовности к пересылке информации. В свою очередь, печатающее устройство должно сообщить компьютеру, что оно включено и готово к работе по линии ГП (готовность приемника). Напечатав очередной символ, принтер сообщает об этом БК по линии ЗП (запрос приемника). Линию СТР (строб источника) компьютер использует для того, чтобы просигнализировать принтеру о том, что передается код очередного сигнала. Линий данных всего восемь - Д0-Д7. Именно по этим линиям передаются комбинации единиц и нулей, каждая из которых дает принтеру знать, о каком именно символе идет речь на этот раз. Еще четыре линии СП1-СП4 предназначены для передачи служебных данных от печатающего устройства к компьютеру. Что же это за данные? Это сообщения об ошибках механического привода устройства печати, о передаче символа, отсутствующего в словаре принтера, о передаче некорректных данных и, наконец, об окончании бумаги. В простейшем случае можно обойтись и без них, подключив все четыре линии к катодам диодов. Аноды всех диодов соединяют и через резистор 1кОм подключают к выводу А8 порта ввода-вывода. Это относится к компьютеру БК-0010.01. В случае с БК-0010 резистор подключают к выводу 5-го шнура питания.

Матчасть диванного танкиста - Страница 4 88120510

Простейшая программа в машинных кодах превращает БК в пишущую машинку. Основная программа размещена в ячейках 1150-1242, в ячейках 1260-1326 записана подпрограмма передачи кодов от БК к печатающему устройству. Начиная работу по программе, БК передает на принтер управляющий код, который настраивает принтер на работу с определенным набором символов (ячейки 1150-1160). В данном случае - это набор символов КОИ-В. В памяти БК формируется строка длиной 80 символов (1162-1172). Фрагмент подпрограммы 1174-1212 распечатывает строку на принтере. Для передачи кода символа используется 256-я ячейка. БК шлет в эту ячейку код очередного символа, а подпрограмма пересылает код на принтер.

Рассмотрим работу подпрограммы подробнее. Первая команда (1260-1264) передает код символа из 256-й ячейки в выходной регистр. 1266-1274 - это проверка, готово ли печатающее устройство принять код. Если готово, то команды 1276-1302 дополняют стробом содержимое ячейки 256 и полученный код направляется в выходной регистр (1304-1310). Выполняя команды 1312-1320, БК проверяет, исчез ли сигнал ЗП. Если послание дошло до адресата, то ячейка 256 очищается (1322-1324) и исполнение программы завершается.

Подпрограмму можно использовать и в других программах, например, в редакторе текстов. Вариант редактора, разработанный автором статьи, позволяет набирать тексты объемом до 7 машинописных страниц, редактировать набранный текст, записывать и считывать готовый текст с помощью магнитофона и, наконец, распечатывать набранные тексты на принтере. Использовать можно большие и маленькие буквы латинского алфавита, большие и маленькие буквы русского алфавита, цифры и другие символы из набора КОИ-8. На листе бумаги стандартного формата компьютер формирует 30 строк по 64 символа в строке.

Подобных программ можно предложить немало, поэтому каждый читатель может создать программу-редактор, отвечающую его личным вкусам и склонностям.
Л.РАДЧЕНКО (г.Москва)

НЕСКОЛЬКО СЛОВ О ПРЕРЫВАНИИ
Разбирая заметку А.Шеломанова (4/88 ), я убедился, что предложенный им прием ветвления по условию не всегда применим. Если использовать его, скажем, при программировании игр типа "Питон", когда программа реагирует только на изменение регистра данных РД, то проблем не возникает. А что делать, если необходимо стрелять по цели, летящей по экрану? Опрашивая РД, мы получим лишь код клавиши, нажатой при первом выстреле. Казалось бы, можно опрашивать регистр команд и состояний (РКС) по адресу 177660, проверяя 7-й разряд. Записанная там единица говорила бы о том, что клавиша нажата и ее код находится в регистре данных. Те, кто уже пробовал читать РКС из Фокала, убедился, что в этом регистре постоянно записан О. Это связано с тем, что управляющая опросом клавиатуры программа - драйвер клавиатуры - быстрее успевает отреагировать на нажатие клавиши и взять ее код из РД. При этом 7-й разряд РКС обнуляется.

И все же выход есть. На рисунке - одна из возможных реализующих его программ.

Матчасть диванного танкиста - Страница 4 88120610

В строке 10.01 в 6-й разряд РКС клавиатуры записывается единица. В строке 10.2 анализируется содержимое регистра команд и состояний. Если в регистре находится число 64, что соответствует единице в 6-м разряде, то нажатия клавиши не было, поэтому переходим к строке 10.4, где обнуляем признак нажатия клавиши - флажок FL.

Число 192 соответствует нажатию клавиши, что вызывает передачу управления к строке 10.6, где флажок будет установлен в 1. Здесь же сбрасываем 7-й разряд РКС, прочитав РД.

Небольшая деталь: если за оператором обращения к данной подпрограмме следует оператор ASK, то предварительно следует сбросить 6-й разряд РКС командой X FX (1,177660,0).
А.БАШИЛОВ (г.Москва)

[ БЮРО СПРАВОК
Обменяюсь программами с владельцами БК. Хотел бы получить информацию о языке Форт и сопряжении БК с принтером. 220047, Минск, ул.Нестерова 84, кв.113, Ромашевский А.Б.

Обладатели микроэвм "Специалист", вы можете сделать свой компьютер полностью совместимым с "Радио-86РК" с помощью разработанного комплекта программного обеспечения: Монитор, Бейсик, Редактор, Ассемблер, Дизассемблер. Дополнительная информация - по адресу 656099, Барнаул, а/я 108.

Принимаем к тиражированию разработки для отечественных и популярных зарубежных компьютеров, а также заказы на тиражирование уже имеющегося программного обеспечения. Стоимость обеспечения ниже, чем в аналогичных организациях, заказы выполняются в кратчайший срок. 270119. Одесса, а/я 25, "Конструктор".

Экспериментальная продажа программного обеспечения для БК организована в московском фирменном магазине-салоне "Электроника". Кооператив БИС подготовил опытную партию кассет с записью лучших игровых и системных программ, среди которых - игры, созданные группой АСП. ассемблер и отладчики, а также программы, малоизвестные пользователям БК. Адрес магазина - Москва, Ленинский проспект 87.

Улучшить качество записи файлов на магнитофон мне удалось, припаяв параллельно шнуру "Запись на магнитофон" конденсатор 0.1мкФ. Ищу единомышленников, занимающихся синтезаторами речи на БК-0010. Располагаю библиотечкой игровых и обучающих программ. 117465, Москва, ул.Тюленева 7, кор.1, кв.112, Первунин М.В.

Свердловский межотраслевой территориальный центр научно-технической информации и пропаганды предлагает программы для микрокалькулятора "Электроника МК-61": аппроксимация функций простейшими кривыми по трем точкам, выбор электродвигателя переменного тока, расчет пружин сжатия, расчет числа зубьев планетарной передачи, а также другие программы. Подробную информацию и сами программы можно получить по адресу: 620095, г.Свердловск, ул.Малышева 101, ЦНТИ, а также непосредственно у автора С.С.Власова по адресу: 623100, г.Первоуральск Свердловской области, ул.Чкалова 34, кв.23.

Хотел бы получить программы для расчета режимов термической обработки металлов, а также программы, применяемые в практической гальванопластике (никелирование, хромирование) для микрокалькулятора Б3-34. 320069, г.Днепропетровск, пр.Ильича 21-а, кв.75, Киреев Константин Николаевич.

Хотел бы получить программы статистической обработки экономической информации для МК-61 (корреляция, регрессия и т.д.). 380060, г.Тбилиси, ул.Ю.Гагарина 1, пер., #1, кв.18. Мачавариани Ш.И.

Готов обмениваться игровыми программами для МК-52, МК-54 и МК-61. 440019, Пенза, ул.Мира 8а, кв.26, Масенков В.

Хотел бы получить динамические игровые программы для МК-54, МК-61. 454084, г.Челябинск, ул.Шенкурская 11, кв.64, Шаров Михаил Сергеевич.

Детский клуб "Электрон" будет признателен всем, кто сможет прислать материалы по программируемым микрокалькуляторам типа МК-61: игровые, учебные и другие программы, вырезки из журналов, литературу и т.п. Клуб работает на общественных началах и может рассчитывать только на благотворительную помощь. 117261, Москва, а/я #418. Руководитель Михайлов П.Г.

Предлагаю обмениваться программами для персональных компьютеров. Располагаю программами на Паскале: "Футбол", "Свободное рендзю", "Детектив" и др. Хотел бы получить программы иа Бейсике: "Шахматы" и другие графические и интеллектуальные игры, а также вильнюсскую версию Бейсика. Адрес: 681021, Хабаровский край, г.Комсомольск-на-Амуре, пр.Первостроителей 20, кв.19, Звягин А.И.

Клуб любителей игр по переписке (КЛИП) принимает в свои ряды всех, кто увлекается играми и созданием игр для Б3-34, МК-54. МК-61, МК-52. В первую очередь приглашается прекрасная половина человечества, а также жители Москвы, Ленинграда, Киева, Горького, Куйбышева, Хмельницкого - будут приняты все желающие. Для вступления в клуб необходимо сообщить фамилию, имя, отчество, дату рождения, полный адрес (и номер телефона, если есть), тип ПМК, интересующие темы игр, количество собственных игр, место учебы (работы) по адресу: 443081, Куйбышев-81, ул.Стара Загора 53, кв.55. Храмову Михаилу Александровичу (тел.514485).

ГОТОВИТСЯ К ИЗДАНИЮ
Издательство "Вышэйшая школа" (г.Минск) предполагает выпустить в 1989 году книгу А.Л.Гуртовцева и С.В.Гудыменко "Программы для микропроцессоров" (справочное пособие).

Простое и доступное широкому кругу специалистов руководство по проектированию программного обеспечения микропроцессорных систем. Большой комплекс прикладных и системных программ обработки чисел, преобразований видов данных, вычислений элементарных функций, обработки массивов, таблиц, списков, обмен с внешними устройствами - всего 150 типовых программ для микропроцессора КР580. В приложениях - сведения об архитектуре и программировании этого микропроцессора. микросхемах параллельного и последовательного интерфейса. Книга будет полезна инженерам, программистам, студентам.

Заказы направлять по адресу: 220000, Минск, Ленинский проспект 48, магазин #13 "Научно техническая книга". ]
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пн Фев 20, 2023 12:38 am

Когда-то таким статьям цены не было. У каждого программиста была тетрадка для записи подобных рецептов. И у кого она была толще, тот и был главнее. А до того, как оно было устроено "математически", редко кто докапывался... А сейчас?

1/89
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДВАДЦАТЬ ВТОРОЕ, где рассказывается о возможностях, микрокалькулятора "Электроника МК-52", дополнительных по отношению к микрокалькулятору "Электроника МК-61",- полупостоянном запоминающем устройстве и интерфейсе.
Ведут занятие инженер Д.Б.ХРУСТАЛЕВ (г.Москва) и кандидат технических наук В.А.ХМЕЛЮК (г.Мытищи Московской области)

Микрокалькулятор МК-52 принципиально отличается от МК-61 только тем, что в нем появилось полупостоянное запоминающее устройство (ППЗУ) и возможность подключать блоки расширения памяти. Этим вызвано изменение внешнего вида калькулятора (теперь индикатор слева от клавиатуры), небольшое увеличение габаритов и появление органов управления ППЗУ - двух переключателей: С-З-СЧ (Стирание-Запись-Считывание ППЗУ) и Д-П (Данные-Программа), а также двух клавиш: A^ (занесение адреса обращения к ППЗУ) и ^v (начало обмена с ППЗУ). Кроме того, на задней стенке появились четыре крышки: две правые прикрывают разъемы, а две левые - бутафорские, за ними ничего нет.

Все, что было сказано на предыдущем занятии о МК-61, в равной мере относится и к МК-52: эти калькуляторы полностью программно совместимы. И хотя МК-52 стоит 115 рублей, на прилавках он не залеживается.

ПОЛУПОСТОЯННОЕ ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО позволяет сохранять программы и данные при выключенном питании и для МК-52 играет ту же роль, что магнитная лента или магнитные диски для больших ЭВМ. Оно организовано в виде матрицы запоминающих элементов, состоящей из 64 строк. Каждая строка этой матрицы, в свою очередь, разбита на 16 ячеек по 4 бита в каждой. Каждая ячейка имеет свой номер или адрес - от 0000 до 1023. Команды программы записываются шестнадцатеричными цифрами. Для каждой такой цифры нужно 4 бита; таким образом, для записи кода команды, состоящего из двух цифр, требуются две ячейки ППЗУ.

В отличие от постоянного запоминающего устройства (ПЗУ), информацию в которое можно записать только один раз, после чего стереть или изменить ее уже невозможно, ППЗУ позволяет стирать записанную в него старую информацию и на ее место записывать новую. Количество таких циклов "стирание - запись" ограниченно. Для разных типов ППЗУ оно может составлять от нескольких до десятков тысяч циклов. Для ППЗУ, использованного в МК-52, это 10000 циклов перезаписи, то есть информацию в нем можно ежедневно полностью обновлять в течение 30 лет, так что с этой стороны неприятностей можно не опасаться.

Гораздо важнее помнить, что гарантированный срок хранения информации в ППЗУ - 5000 часов, то есть около 7 месяцев. Это связано с тем, что информация в микросхеме ППЗУ записана в виде электрических зарядов. Со временем эти заряды рассасываются, и если их вовремя не восстановить, запись теряется. (Кстати, особенно быстро этот процесс идет во время обмена информацией с ППЗУ. Если непрерывно обращаться к ППЗУ, то заряды могут исчезнуть уже через 250 часов).

ППЗУ нашего микрокалькулятора может обмениваться информацией только с его оперативным запоминающим устройством (ОЗУ) и делает это по весьма сложному алгоритму.

Если бы обменом с ППЗУ (будем понимать под этим как запись и стирание, так и считывание) можно было управлять какими-то командами, записанными в программу, то тогда открылись бы заманчивые возможности: можно было бы по ходу счета перекомпоновывать программы, вызывая из ППЗУ нужные на текущий момент фрагменты и подпрограммы: после того как отработан первый фрагмент программы, из ППЗУ вызывается второй, тот отрабатывается в свою очередь и вызывается третий и так далее... Увы, по командам программы ни считать, ни записать информацию в ППЗУ нельзя. Это делается только вручную, причем программа переписывается в ППЗУ из ОЗУ и обратно только с начала программной памяти, а данные - с нулевого регистра (поэтому для служебных целей лучше использовать регистры с большими номерами, а в регистрах с меньшими размещать данные, предназначенные для хранения в ППЗУ).

На первый взгляд в ППЗУ, объем которого равен 512 шагам программы, легко разместить 5 программ по 98 шагов каждая. Однако правила записи таковы, что если 4 программы имеют длину 98 шагов, пятая не может быть длиннее 91 шага.

Процедура записи программы начинается с определения адреса обращения к ППЗУ. Этот адрес состоит из 7 цифр. Сначала ставится любая цифра, кроме нуля (чтобы действовать наверняка, ставьте всегда, скажем, 1). Следующие четыре цифры - это адрес ячейки ППЗУ, начиная с которой будет происходить обмен. Две последние цифры - это длина записи, то есть длина блока информации, который будет записан или считан из ППЗУ. Она задастся в шагах программы и, как сказано в руководстве по эксплуатации, не может превышать 98 шагов. На адрес не влияет восьмая цифра мантиссы, показатель степени, знак числа и положение десятичной точки. Они могут быть любыми пли вовсе отсутствовать.

Длина программы должна Сыть кратна семи. Дело в том, что каждые семь команд при записи в ППЗУ автоматически переставляются в следующем порядке: 2-я команда, 3-я, 4-я, 5-я, 6-я, 7-я, 1-я. При считывании в ОЗУ порядок команд восстанавливается. Зачем нужна такая перестановка - непонятно, но считаться с этим приходится.

Перед записью в ППЗУ необходимо стереть информацию, записанную ранее,- уничтожить хранящие информацию заряды. Если этого не сделать, то при записи к уже имеющимся зарядам добавятся новые и произойдет логическое сложение записываемой информации с той, что была записана па этом месте раньше. Например, если но адресу, где уже записана команда с кодом 01, записать команду с кодом 5Е, то после считывания в ОЗУ на этом месте окажется команда с кодом 5F (буквой F, как и на прошлом занятии, обозначим символ "пробел" с кодом 1111. О команде с кодом 5F стоит сказать особо: при выполнении она отключит индикатор и полностью парализует ПМК, н тогда поможет только кратковременное выключение питания). Перед считыванием из ППЗУ программную память очищать необязательно - здесь старая программа замещается новой без всяких эксцессов.

В ППЗУ информацию можно стирать только построчно - по 16 адресов ППЗУ (то есть по 8 шагов программы) одновременно. Это означает, что если хотя бы одна из ячеек некоторой строки оказалась в числе затронутых командой стирания, то информация в этой строке будет стерта во всех ячейках от первой до последней. Например, при адресе стирания 1002007 (в этом случае номер последней ячейки 20+2*7=33) информация будет стерта в ячейках с номера 16 (с нее начинается строка, в которой находится 20-я ячейка) по 47 (она находится в тон же строке, что и 33-я, последняя из задаваемых адресом стирания). Отсюда следует, что начальный адрес должен быть кратен 16, иначе при стирании одной программы можно стереть и начало следующей или конец предыдущей. Из-за этого начальный адрес очередной программы приходится определять следующим весьма замысловатым способом: надо взять начальный адрес предыдущей программы, прибавить к нему удвоенную длину этой программы (если она не кратна 7, то увеличить прибавляемое число до ближайшего, большего, кратного 7) и полученное число дополнить до ближайшего числа, кратного 16. Как видите, эта процедура сильно напоминает математическую головоломку.

В отличие от стирания запись и считывание происходят строго в границах заданных адресов, но при этом, как уже говорилось, происходит перестановка команд, и если длина записываемой или считываемой программы не кратна 7, то первая команда из последней неполной семерки не будет записана или не будет считана.

А теперь практическое задание: в ППЗУ надо записать 3 программы длиной 34, 42 и 15 команд, разместив их в ППЗУ друг за другом с адреса 0000.

(Иной сообразительный читатель, возможно, подсчитает общее число команд в этих трех программах - 91 и решит, что все три можно сначала разместить в программной памяти, а потом по очереди переносить в ППЗУ. К сожалению, это невозможно. Напомним: начальной ячейкой того участка программной памяти, откуда информация переписывается в ППЗУ, обязательно должна быть нулевая. Так что нам остается единственный порядок действий: сначала очистить программную память, набрать первую программу, переписать ее в ППЗУ, вновь очистить программную память, набрать вторую программу, переписать ее в ППЗУ и т.д.)

Включив питание, набираем первую программу. Убедившись, что она введена правильно, начинаем подготовку к ее записи в ППЗУ. Длина программы (34 шага) не кратна семи, а ближайшее большее число, кратное семи,- 35. Значит, в качестве длины программы надо указать число 35. Тем самым мы перепишем в ППЗУ ненужное нам содержимое 35-й ячейки программной памяти. Но это ничему не помешает, поскольку эта ячейка пуста,- не зря ведь мы заранее очистили программную память. С начальным адресом пока все просто - он равен нулю. Поэтому набираем на клавиатуре число 1000035.

Нажимаем клавишу А^ и тем самым вводим набранный адрес. Теперь надо очистить место в ППЗУ для нашей программы. Ставим переключатель С-З-СЧ в положение С. Переключатель Д-П обязательно должен быть в положении Д. Дело в том, что при стирании в ППЗУ одновременно стирается такое же количество информации в ОЗУ данных или в ОЗУ программ,- это определяется переключателем Д-П и, конечно, не делает калькулятор удобней. Поскольку программа нам нужна, приходится жертвовать содержимым первых 5 регистров (Р0-Р4; дело в том, что один регистр памяти занимает в ППЗУ столько же ячеек, сколько занимают семь шагов программы). Если там есть что-то ценное, придется переписать это либо в другие регистры, либо просто на бумажку. (Существует и другой вариант - заранее очистить нужную область ППЗУ. Тогда программу можно записывать сразу, а данные останутся в целости и сохранности).

Приготовления окончены, можно нажимать клавишу ^v. Во всех разрядах появился минус - идет работа с ППЗУ. Пока она не окончится, калькулятор трогать нельзя. Минусы погасли - стирание окончилось. Теперь можно записывать программу. Переводим переключатель С-З-СЧ в положение З, а переключатель Д-П в положение П. Адрес обращения калькулятор хранит до тех пор, пока не будет введен новый адрес или не будет выключено питание. Поэтому можно сразу нажимать клавишу ^v. Минусы загорелись вновь. Их исчезновение означает, что 35 шагов программы, начиная с адреса 00, переписались в ППЗУ. В программной памяти на их месте теперь записаны нули. Так автоматически произошла очистка программной памяти, нужная нам перед набором второй программы. Если желательно проконтролировать, верно ли была произведена запись в ППЗУ, можно восстановить программу в ОЗУ. Для этого переводим переключатель С-З-СЧ в положение СЧ и нажимаем клавишу ^v. По окончании обмена можно ради проверки всех проведенных действий запустить программу на выполнение.

Теперь набираем следующую программу. Ее длина 42 шага, она кратна 7. Определяем начальный адрес. Чтобы вычислить его по вышеописанному алгоритму, надо набрать начальный адрес предыдущей программы (конечно, кратный 16) и ее длину в шагах (кратную 7): 0 B^ 35, после чего выполнить следующие операции: B^ 8 / K[х] FBx K{x} Kзн + 1 6 * +. (Введя эту последовательность команд в программную память и поставив в конце команду С/П, ее можно записать по адресу 1099214, указывающему на две последние строки ППЗУ, и вызывать при необходимости). На индикаторе число 80. Это и будет начальный адрес при обращении к ППЗУ. Набираем число 1008042 и нажимаем клавишу A^. Затем стирание - С Д ^v, запись - 3 П ^v и, если желательно, контрольное считывание - СЧ П ^v. (При стирании очистились адресуемые регистры Р0-Р5).

Третья программа имеет 15 шагов (последняя команда на шаге 14), поэтому в качестве ее длины надо взять число 21. Определяем начальный адрес. Для этого набираем 80 B^ 42, а дальше повторяем те же вычисления, что и при определении начального адреса второй программы. На индикаторе 176. Теперь осталось набрать число 1017621 и провести очистку ППЗУ. запись и контрольное считывание.

Запись данных в ППЗУ аналогична записи программы. Допустим, регистры для второй программы используются следующим образом: Р0 - счетчик циклов, Р1-Р5 - - данные, Р6 - счетчик данных, Р7, Р8 и Р9 - промежуточные результаты, остальные регистры не используются. Надо записать данные в ППЗУ. Регистры Р0 и Р6-Р9 - служебные, информация в них появляется при работе программы, и записывать ее в ППЗУ не надо. Но так как запись данных в ППЗУ всегда начинается с Р0, записывать придется содержимое всех шести регистров Р0-Р5. Один регистр эквивалентен семи шагам программы, поэтому в качестве длины записи надо взять число 6*7=42. Определяем начальный адрес: вводим 176 B^ 21 и производим вычисления по известной нам программе. На индикаторе - 224, следовательно, адрес обращения будет 1022442. Теперь устанавливаем переключатели в положения С и П (данные нам нужны!) н, набрав адрес обращения, нажимаем клавиши A^ и ^v (при этом пропали первые 42 команды программы, если она была). Осталось записать данные (З Д ^v) и провести контрольное считывание (СЧ Д ^v).

Итак, в памяти хранятся
три программы и один набор данных. Чтобы не запутаться в том, по какому адресу что записано, полезно иметь карту памяти, на которой все адресное пространство ППЗУ разбито на 64 строки - по 16 адресов в каждой. В нашем случае она будет иметь такой вид, как показано на рисунке. Из рисунка видно, что следующую информацию в ППЗУ надо записывать с адреса 320.

Матчасть диванного танкиста - Страница 4 89010110
Карта памяти, заполненная в соответствии с задачей, описанной в статье.

Кстати, при записи информации в конец ППЗУ будьте внимательны: для ППЗУ адрес 1024 эквивалентен адресу 0000, 1025-0001, 1026-0002 и так далее, поэтому надо следить, чтобы "хвост" последней программы не испортил начало первой. И еще один нюанс: при работе с ППЗУ резко возрастает потребляемая мощность и, если батарейки "подсели", возможен сбои. Поэтому к ППЗУ лучше обращаться при работе от блока питания.

После того как все записано в ППЗУ и составлена карта памяти, легко вызвать любую программу или набор данных - достаточно установить переключатель С-З-СЧ в положение СЧ, а переключатель Д-П в положение "данные" или "программа", набрать указанный в карте ППЗУ адрес обращения и нажать клавиши A^ и ^v. Это, конечно, быстрее, чем набирать всю программу заново, а кроме того, гарантирует отсутствие досадных ошибок в программе, часто появляющихся при вводе вручную (нажата не та клавиша, пропущена команда и т.д. и т.п.).

АВТОМАТИЧЕСКОЕ ВЫЧИСЛЕНИЕ АДРЕСА ОБРАЩЕНИЯ. Существует довольно много разных программ для вычисления адреса обращения - от простейших (как та, которой мы пользовались) до хранящих в памяти всю карту ППЗУ, которые автоматически отыскивают свободное место и формируют полный адрес обращения. Но, как всегда, оптимальное решение находится посередине. В качестве такого решения можно предположить программу В.В.Смирнова из Ленинграда, модернизировавшего программу определения адреса, напечатанную в 4/87:

00. B^ 01. 7 02. / 03. 8 04. Flg 05. + 06. K[x] 07. 7 08. * 09. 1 10. 6 11. ПХ0 12. ПХ1 13. + 14. FBx 15. + 16. 1 17. 6 18. / 19. 9 20. Flg 21. + 22. K[x] 23. * 24. ХП2 25. 2 26. F10X 27. * 28. + 29. 6 30. F10X 31. + 32. x-y 33. 2 34. * 35. ПХ2 36. + 37. 1 38. - 39. x-y 40. С/П.

Для работы необходимо занести начальный адрес предыдущей программы в Р0, ее длину - в Р1 (если ППЗУ заполняется сначала, в этих регистрах должен быть 0), число шагов новой программы - в РХ и нажать В/0 С/П. После останова на индикаторе - полностью сформированный адрес обращения, а нажав клавишу x-y, вы получите номер конечной ячейки. Строка ППЗУ, в которой находится ячейка с таким номером,- это последняя строка ППЗУ, занятая новой программой. Возвратив клавишей x-y адрес обращения в РХ, вам останется только нажать клавиши A^ и ^v (но прежде не забудьте заменить только что отработанную программу своей, которую предстоит записывать в ППЗУ).

Контрольный пример: 192 в Р0, 35 в Р1, 54 в РХ, В/0 С/П. Результаты: 1027256 x-y 383 x-y 1027256.

Освоив эту программу и карту ППЗУ, вы можете успешно работать с МК-52 даже забыв все остальное, что было сказано здесь о формировании адреса. Однако не забывайте ставить переключатель С-З-СЧ в положение СЧ - это позволит сохранить информацию в ППЗУ при случайном нажатии на клавишу ^v.

ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ППЗУ. К ним в первую очередь относится запись программы в ППЗУ по частям. Она выгодна тогда, когда несколько программ имеют общую часть. Такие программы можно разбить на общий для всех и специальный (для каждой свой) блоки. Тогда одна программа записывается в ППЗУ полностью, а для остальных набирается и записывается в ППЗУ как отдельная программа только специальный блок.

Допустим, несколько программ имеют общее начало. Тогда, если длина общего блока окажется не кратной 7, придется либо включить в общий блок начало одного из специальных блоков, либо записать последние команды общего блока в начале каждого из специальных, либо дополнить общий блок до длины, кратной 7, командами КНОП. В первом случае придется вписывать начальные команды других специальных блоков вручную после компоновки программы; в остальных случаях необходимость в ручном вписывании команд отпадает, зато объем, занимаемый пакетом программ в ППЗУ, несколько увеличивается. Какой вариант выбрать, зависит как от длины общего блока, так и от числа программ в пакете и их длины.

При чтении сначала считывается специальный блок, причем в адресе обращения длину программы следует увеличить на длину общего блока, а начальный адрес - уменьшить на удвоенную длину общего блока. После такого считывания на месте общего блока - обрывки предыдущих программ. Однако ничего страшного не произошло: надо считать общий блок по его адресу записи (в качестве длины программы берется длина только общего блока), и программа будет полностью скомпонована и работоспособна.

Аналогично можно поступить и в том случае, если несколько программ имеют общий конец. Надеемся, что читатели смогут это сделать самостоятельно.

Конечно, досадно, что из 105 шагов программной памяти по инструкции в ППЗУ можно записать только 98. Однако по адресу обращения 1АААА-2 [Во избежание недоразумений поясним структуру этого адреса особо. Здесь АААА - начальный адрес обращения, черта представляет собой не минус, а обозначает десятку в 16-ричной системе счисления и, таким образом, является столь же полноправным знаком, как и цифры, фигурирующие в этом адресе. Это уточнение относится и к следующему абзацу] можно записать программу длиной 103 шага, но с дефектом - команда по адресу 98 пропадает. При считывании из ППЗУ по тому же адресу на 98-м шаге в программе будет "дырка" - там останется та же команда, которая была раньше (после включения питания это команда с кодом 00). Причина такой неприятности заключается в уже упоминавшейся перестановке внутри каждой семерки команд при обмене с ППЗУ. Поэтому команду на шаге 98 нужно либо вписывать вручную, либо, если позволяет программа, на 99 шаге поставить команду F(), которая выбросит появившийся на предыдущем шаге нуль.

Если набрать адрес обращения 1АААА-5, то записать все 105 шагов программы все равно не удастся - после записи и чтения на шаг 00 переместится команда с шага -3, на шаг 08 - команда с шага -4, а на шаг 09 - с шага 98. На шагах программной памяти 98, -3 и -4 остаются команды, бывшие там раньше.

По адресу 1АААА-2 можно записать и данные из всех 15 адресуемых регистров, но число из регистра Е потеряет показатель степени и знак, а десятичная точка окажется после первой цифры мантиссы. Данные из остальных регистров будут записаны правильно. Об этом уже упоминалось в 4/87.

Еще одна особенность, отличающая МК-52,- это возможность формировать команды, коды которых содержат пробел. (Напомним, что он соответствует знаку F в 16-ричной системе счисления - 11/88; такой пробел присутствует в коде команды FBx, который, строго говоря, следовало бы записывать в виде 0F; на индикатор он выводится, естественно, без пробела, как нуль). Команды с кодами, содержащими пробел, можно получить за счет логического сложения кодов команд при записи двух программ по одному адресу без стирания первой из них. Однако но своему действию все команды с пробелами, кроме уже упоминавшейся "смертельной" команды 5F, аналогичны хорошо известным командам, таким, как КНОП, П0 и т.д.

Матчасть диванного танкиста - Страница 4 89010210
Здесь приведены команды (нижний ряд таблицы), коды которых (верхний ряд) оканчиваются на F и получаются описанными в статье путем последовательной записи в ППЗУ двух программ без стирания первой программы. Команда 5F занимает среди них особое место - она нарушает нормальную работу калькулятора. Команды с кодами 6F, 7F и так далее до EF эквивалентны командам с кодами 60, 70 и так далее до Е0 соответственно. Все команды с кодами, начинающимися на F, эквивалентны команде КНОП.

Следующая возможность связана с видеосообщениями. Если владельцы МК-61 легко получают видеосообщения длиной до 7 символов, то владельцы МК-52, потратив побольше времени, но тоже довольно просто, могут получить вндеосообщение длиной до 12 символов, правда, с небольшими ограничениями: на месте знака мантиссы нельзя получить 1, а на месте знака порядка должен быть либо минус, либо пробел.

Для этого ПМК переводится в режим программирования и набирается "программа", состоящая из команд с такими кодами, которые будут составлять видеосообщение. Затем она записывается в ППЗУ как программа, а считывается не в ОЗУ программ, а в ОЗУ данных (шаги 00-06 будут числом в Р0, 07-13 - в Р1 и т.д.). Как это делается, поясняет приводимый далее пример и рисунки.

Матчасть диванного танкиста - Страница 4 89010410
Записывая информацию из программного ОЗУ в ППЗУ, а оттуда в ОЗУ данных, нетрудно установить, какие команды требуются в "программе", используемой для получения желаемого видеосообщения. Это показано на верхней схеме.
Если в качестве символа ЗП, фигурирующего в этой схеме, поставить 0, то в 10-м разряде индикатора (на месте знака порядка) появится пробел. Если поставить 9, то в этом разряде появится минус, причем в этом случае символы П1 и П2 отображаются в соответствии с нижним рисунком. Если же ЗП=0, то 1-й и 2-й разряды порядка, а также все символы мантиссы отображаются на индикаторе на своих местах без изменений. Другие символы не рекомендуется ставить на место, обозначаемое ЗП,- некоторые из них могут отключить индикатор и парализовать микрокалькулятор, другие вызовут появление сообщений ЕГГОГ или ЗГГОГ.
Символ знака мантиссы отображается в крайнем левом разряде индикатора в соответствии с нижним рисунком. Прн ЗП=П2=0 и П1 в пределах от 0 до 7 десятичная точка будет стоять соответственно после 1-го, 2-го и следующих символов мантиссы. Команда ВП перемещает точку точно таи, как в видеосообщениях, полученных с помощью логических операций.
Напомним, если в видеосообщениях желателен пробел, то на обоих рисунках он обозначается как F.
Матчасть диванного танкиста - Страница 4 89010510

Итак, пусть требуется получить видеосообщение 00. SEC-07-LC. С помощью упоминавшихся рисунков определяем коды, из которых должна состоять "программа", и вводим ее:

Матчасть диванного танкиста - Страница 4 89010310

Адрес 05 остался незаполненным. Дело в том, что команды с кодом EF не существует. Получить этот код можно с помощью логического сложения. Для этого запишем по адресу 05 команду Kх=0E с кодом ЕЕ. После записи всей "программы" в ППЗУ очищаем программную намять, заносим но адресу 05 команду "1" с кодом 01, нажимаем клавишу ^v и тем самым снова записываем содержимое программной памяти в ППЗУ. В результате логического сложения кодов ЕЕ и 01 получится желаемый код EF. Теперь осталось считать эту запись из ППЗУ в ОЗУ данных, и после команды ПХ0 на индикаторе - нужное сообщение 00. SEC-07-LC.

Кстати, поскольку пробел отделен от крайнего разряда мантиссы нулем, попытка выполнить какие-либо операции над полученным видеосообщениесм может привести к печальным последствиям,- тогда его надо немедленно уничтожить в стеке и регистре 0 командами Сх ХП0.

ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА. Когда имеешь дело с Б3-34, МК-54 и МК-61, то каждый раз перед началом работы приходится вручную вводить и проверять программу, константы и данные; ППЗУ МК-52 может хранить сразу несколько программ, но их число очень ограниченно. И тем не менее МК-52 позволяет своим владельцам иметь в принципе ничем не ограниченную библиотеку отлаженных и готовых к применению программ, ввод которых в программное ОЗУ осуществляется почти так же, как и из ППЗУ. Все это благодаря тому, что любой владелец МК-52 может (теоретически) подключить к большому разъему на задней стенке своего калькулятора блок расширения памяти с нужной программой. Если же понадобилась программа, которая записана в другом блоке, то вынуть из разъема один блок и вставить на его место другой - дело нескольких секунд.

Кроме блока расширения памяти к разъемам на задней стенке можно подключать и другие периферийные устройства. Так задумывали разработчики МК-52. Однако практика сильно отличается от этого идеала. Блок расширения памяти в широкой продаже отсутствует, а никаких "других периферийных устройств" серийно не выпускается.

ИНТЕРФЕЙС. По сравнению с МК-61 в МК-52 имеются 3 "лишние" микросхемы. Это микросхема ППЗУ, микросхема интерфейса для связи с внешними устройствами и еще одна микросхема, содержащая 4 логических вентиля, которая формирует сигналы стирания-записи-считывания для ППЗУ. Из этих трех микросхем, безусловно, наиболее важна микросхема интерфейса. Именно она в режиме записи выдаст для ППЗУ данные, а в режиме чтения принимает их. Она же указывает, по какому адресу ППЗУ их записать или считать. Наконец, она же обслуживает и разъем блока расширения памяти (БРП).

Зачем нужна эта микросхема? Дело в том, что внутри любого отечественного калькулятора - от Б3-21 до МК-52 - информация (и команды, и данные) передается между всеми микросхемами вычислительного блока по последовательной магистрали - всего по одному проводу, бит за битом. Ее сопровождают четыре тактовых сигнала по четырем параллельным проводам и линия синхронизации сигналов. В больших ЭВМ, во всех зарубежных микрокалькуляторах, выпущенных в последнее время, цифровые устройства обмениваются информацией сразу по нескольким проводам. Например, в ППЗУ данные поступают по четырем линиям (шине данных), а адрес - по десяти (шине адреса).

Микросхема интерфейса как раз и обеспечивает нужное для этого преобразование информации.

Шина адреса и шина данных выведены на разъем БРП. Поэтому к этому разъему можно подключить ПЗУ объемом до 4096 слов (2048 шагов программы). Как уже говорилось, объем встроенного ППЗУ в четыре раза меньше. Но так как и ППЗУ, и БРП обслуживает одна и та же микросхема, то при считывании информации из БРП длина записи также должна быть кратна семи: каждые семь команд переставляются, как и при считывании информации из ППЗУ.

Кроме данных и адреса, на разъем БРП выведены три нз четырех тактовых сигналов последовательной магистрали калькулятора, а также потенциалы логического нуля и логической единицы, равные соответственно 0 и -15В. Наконец, еще одни контакт этого разъема служит для отключения ППЗУ от микросхемы интерфейса при подключении какого-либо внешнего устройства, например, БРП.

На меньший разъем выведены все сигналы последовательной магистрали ПМК, различные напряжения питания и напряжение программирования ППЗУ, а также сигналы записи и стирания ППЗУ.

Для того чтобы работать с последовательной магистралью, надо знать, в какой момент времени какая информация по ней идет. Выяснить это весьма непросто. Этим и объясняется малочисленность разработок внешних устройств для всего семейства Б3-34.

Работать с микросхемой интерфейса гораздо легче. Но если вы попытаетесь подключить к разъему какое-либо внешнее устройство и записать в него информацию, то у вас ничего не выйдет - шина данных подведена к разъему таким образом, что возможно только чтение информации с внешних устройств. Чтобы вывести информацию наружу, без вскрытия корпуса обойтись трудно.

Вдобавок к этому у интерфейса есть еще одни недостаток - он программно недоступен. Это означает, что в системе команд МК-52 отсутствуют команды обмена информацией с внешними устройствами и это нельзя устранить небольшой "доработкой".

А жаль - ведь всего одна команда чтения информации с интерфейса, и микрокалькулятор смог бы самостоятельно общаться с внешним миром и кое-где, пожалуй, потеснил бы более дорогие и сложные машины. Да и логические команды при обработке поступающей информации нашли бы более достойное применение, чем одно лишь получение видеосообщений...
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вт Фев 21, 2023 12:25 am

Как мы тогда радовались, что все рушится...

2/89
ВЕК ИНФОРМАЦИИ
Доктор технических наук А.СИЛИН

Читая статью доктора технических наук А.Силина, невольно вспоминаешь дневниковую запись И.Ильфа о том, как в свое время твердили: "Радио... радио... радио! Будет радио, будет и счастье". И вот радио есть, а счастья нет. Позднее столь же обоснованные надежды некоторые оптимисты-технократы возлагали на вычислительную технику. Плодились многочисленные АСУ и АСУП, практически не влияя на экономику эпохи зрелого застоя.
Не очень верится в то, что глобальная компьютеризация уничтожит алчность богатых, уравняет начальников и подчиненных, реформирует антидемократические политические системы. Будем лучше рассчитывать на себя. Тем не менее вряд ли можно сомневаться в том, что бурно развивающаяся вычислительная техника очень сильно изменит нашу жизнь. А потому любопытно узнать, что думают по поводу ближайшего будущего как зарубежные, так и советские специалисты.

Полет Юрия Гагарина был не только выдающимся техническим достижением, он позволил землянам взглянуть на собственную планету как бы со стороны и убедиться воочию сначала в ее скромных размерах, а несколько позднее - в ее неожиданной ранимости. С этой поры понятие глобальности стало естественным и необходимым при решении не только международных, но и многих региональных проблем. Технологическая мощь человечества чревата по крайней мере двумя угрозами: мгновенного ядерного самоубийства или же медленного отравления всего живого производственными отходами.

Именно это обстоятельство потребовало в первую очередь не только существенно расширить наше представление о мире и самом человеке, но и поднять на новую качественную ступень добычу, хранение и анализ гигантской информации.

Острый дефицит всевозможных сведений в сочетании с фантастически быстрым совершенствованием компьютеров и расширением масштабов их производства привели в итоге к вступлению ряда передовых стран в "Век информации" - бурный и неустойчивый период, обладающий такими парадоксальными особенностями и противоречиями, о которых до поры до времени не подозревали, по-видимому, не только философы и футурологи, но и писатели-фантасты.

Впервые в истории цивилизации усилия, затрачиваемые обществом на "добычу" и "переработку" знаний, превысили расходы на получение энергии, сырья, материалов, технологического оборудования и предметов материального потребления. Так, например, еще в 50-е годы в сфере информации США было занято около 17% всех работников. Но уже к началу 80-х годов эта цифра достигла 60%, включив не только инженеров и техников, обслуживающих компьютеры, но и управляющих, банкиров, государственных чиновников, учителей, юристов, биржевых маклеров и т.д. Знание с необычайной быстротой превратилось в главный вид продукции, который дает экономике максимальные ресурсы.

Показательны и такие цифры. Общее число работников в США выросло за 8 лет (1970-1979 годы) на 18%. Однако число инженеров увеличилось за этот же период менее чем на 3%. Зато штат администраторов и управляющих подскочил на 58%, государственных служащих - на 76%, банкиров- на 83% и, наконец, системщиков - на 84%I И еще, если с середины 70-х годов поток информации удваивался за каждые 5.5 лет, то спустя всего десять лет подобное удвоение стало происходить уже за 20 месяцев.

Так называемые базы данных, куда стекается вся информация по той или иной проблеме, стали формироваться практически во всех отраслях науки и производства. Только за период с 1979 по 1986 год их число в США возросло с 400 до 2800, то есть в семь раз.

Осознать и понять все это сразу не так-то просто. Уж очень глубоко укоренился привычный стереотип, что необходимые в быту вещи требуют куда больших затрат и усилий, чем добыча эфемерных знаний, реальная ценность которых оказывается подчас преувеличенной, а то и вовсе сомнительной.

Горькие плоды подобного примитивного мышления мы пожинаем сейчас, когда гигантские средства омертвлены на бесчисленных стройках, а склады ломятся от "товаров", которые никому не нужны. Справедливо критикуя капиталистов за уродливые кризисы перепроизводства, мы создали, пожалуй, еще более противоестественный кризис - кризис бесполезного производства. И это при сравнительно невысоком уровне жизни, нехватке рабочей силы и наличии острого дефицита на многие товары ширпотреба!

Только теперь мы начинаем понимать, что одних знаний, как делать вещи, в изобилии предоставленных нам технической наукой и опытом производства, далеко не достаточно. Необходимо еще глубокое понимание того, зачем их делать. А такие знания даются гуманитарной наукой и нравственно-социальным опытом.

Стяжательство и скупость, порождающие, в свою очередь, подозрительность и замкнутость, постепенно вытесняются контактностью, то есть способностью к доброжелательному и взаимовыгодному общению. Иными словами, прямой обмен информацией, рождающий доверие и обоюдную пользу, становится естественной нормой связи между людьми.

И неудивительно, ведь суровые и незыблемые законы сохранения, действующие в мире вещей, во многом теряют смысл при обмене знаниями в условиях демократии и гласности, когда каждый способен получать и отдавать столько информации, сколько сможет. Согласно библейской притче, Христос смог накормить когда-то пятью хлебами огромную толпу. Нечто подобное происходит и с передачей знаний, когда щедрая рука дающего воистину не оскудевает.

Все это не означает, конечно, что традиционная охота за секретами тут же сойдет на нет, а вместе с нею, словно по волшебству, исчезнут, как бесполезные "тени прошлого", бесчисленные насилия и преступления, связанные с желанием получить информацию любой ценой или, наоборот, продать ее подороже. Нет, речь идет о другом. Вспомним, что цена секрета издавна определялась и определяется до сих пор преимущественно стоимостью вещей, как бы материализующих этот секрет.

Особенность "Века информации" в том, что цена новых сведений в силу нарушения привычных законов сохранения определяется во все большей мере общественной полезностью этих сведений, быстро принимающей всеобщие, глобальные масштабы. При этом новая информация порождает цепную реакцию дополнительных сведений, изобретений и открытий. Другими словами, знания быстро переходят не только в новую силу, но и в новые знания. Сам характер знаний оказывается в итоге таковым, что общественное пользование ими становится неизмеримо выгоднее, чем индивидуальное. Иными словами, нарастающее информационное обслуживание не только дополняет, но и во все большей мере заменяет материальный сервис, сводя его шаг за шагом лишь к разумному минимуму.

В той же мере, в какой накопление смертоносного оружия разобщает людей и их социумы на всех уровнях, культивируя всеобщую подозрительность и враждебность, свободный обмен научной, деловой, культурной и любой другой информацией, способствует сближению и консолидации человечества, прививая всеобщее дружелюбие и взаимное доверие.

Дело явно идет к тому, что главными движущими силами социально-экономического прогресса, вызывающими "брожение умов" и взрывающими сложившиеся общественные отношения, оказываются уже не мощные машиностроительные или добывающие концерны. Их место в этом смысле занимает массовая компьютеризация всех сфер производственной, общественной и частной жизни, нацеленная на получение информации.

Все это прямо сочетается с продолжающимися в небывалых темпах усовершенствованиями средств связи.

Наряду с использованием системы спутников-ретрансляторов гигантский прогресс в получении сверхпрозрачного стекловолокна привел к быстрому развитию, волоконно-оптической связи не только в национальных, но и трансконтинентальных масштабах. Помимо огромной пропускной способности, обусловленной сверхвысокой частотой лазерного луча, бегущего по тончайшим стеклянным нитям - световодам, подобные системы совершенно нечувствительны к обычным помехам и отличаются сказочной надежностью.

Уже не за горами время, когда видеотелефонная связь каждого с каждым в реальном масштабе времени станет былью в пределах Земли и ее ближних космических окрестностях. Полагают, что прямое сообщение на глобальном уровне повысит эффективность и культуру очных контактов, придав им живой, доверительный характер, и окажет серьезное влияние на стереотипы нашего мышления вообще.

Столь же серьезны и неоднозначны, как считают эксперты, будут последствия общения человека с компьютером. Многие сходятся на том, что, вопреки обывательскому мнению, компьютеры послужат скорее не усилителем, а ускорителем человеческого интеллекта.

Надо ли говорить при этом о теснейшем влиянии средств связи на пассажирский и грузовой транспорт. Совершенно ясно, что всеобщая и доступная видеокоммуникация резко сократит потребность в бесконечных служебных командировках и совещаниях с обязательным выездом специалистов "на место". Домашний процессор с видеоэкраном избавит нас от необходимости не только покупать книги и выписывать газеты и журналы, но даже и читать какую-либо литературу в ее бумажном воплощении.

Перейдем теперь от оптимистических надежд и призывов, переполняющих западную рекламу, к реалиям, характерным в первую очередь для США, первой сверхдержавы, вступившей в "Век информации".

Революционные социально-экономические изменения, случившиеся в этой стране за последние двадцать пять лет, детально проанализированы в книге известного американского социолога и публициста Джона Нейсбита "Мегатенденции", вышедшей в 1982 году и тут же ставшей бестселлером.


Матчасть диванного танкиста - Страница 4 89020210
Привычное представление о редакторском столе, заваленном рукописями, уже устаревает. Так, например, выглядит рабочее место журналиста, оборудованное современной электронной техникой. На снимке персональный компьютер "EVRO PC" - с его помощью выполняется не только набор н редактирование текстов, но и электронная верстка. Справа от компьютера - телефакс фирмы "Шнайдер" - достаточно набрать телефонный номер вашего корреспондента, в конторе которого установлен аналогичный аппарат любой фирмы, и только что написанное вами письмо, записка или документ с печатями и подписями за несколько десятков секунд будет передано по назначению.

Матчасть диванного танкиста - Страница 4 89020310
Вычислительная мощность персональных компьютеров растет, а их габариты столь же стремительно уменьшаются. Портативный компьютер западногерманской фирмы "Шнайдер" - прекрасный тому пример. По возможностям он ничем не уступает известному компьютеру IBM AT - те же 640 Кбайт памяти, встроенный дисковод гибких дисков 720 Кбайт и винчестер на 20 Мбайт.

Начнем, пожалуй, с наиболее неожиданного: явного краха ходячей концепции "электронного коттеджа", долгое время считавшейся чуть ли не пределом мечты "среднего американца". Ко всеобщему удивлению, "кнопочный замок", в который оглушающая реклама поспешила увлечь столь склонных ко всяким новинкам и комфорту американцев, был дружно и решительно отвергнут представителями не только сильного, но и слабого пола этой страны. В самом деле, попробуйте-ка лишить людей удовольствия непосредственного общения с друзьями, а не с их призрачными видеокопиями, безжалостно увеличенными для пущего сервиса до гротескных размеров. А за какие грехи следует "освободить" женщину-хозяйку от прелести самой выбирать покупки в магазинах, руководствуясь не навязчивыми советами "электронного болвана", а собственным вкусом и здравым смыслом?

Точно подмечено и другое: нарастающий страх пациентов перед изобилием медицинского оборудования, победоносно блещущего никелем и стерильной чистотой. Мнительные и настороженные больные упорно предпочитают этому бездушному великолепию живого эскулапа и ласково умелые прикосновения человеческих рук.

Отметим, наконец, еще одну характерную черту персонального электронного сервиса. Сливаясь все полнее с телевизором, мы утрачиваем постепенно возможность сопереживания, выработанную посещением всякого рода массовых зрелищ.

В итоге выяснилось, что оголтелый "кнопочный комфорт", с энтузиазмом поднятый на щит рекламой, оказывается, попросту говоря, бесчеловечным. Сводя активное общение людей друг с другом к вульгарному потребительству, он незаметно парализует и убивает главное - личную свободу и ответственность за принятое решение. А только таким путем достигается наиболее ценное для общества оптимальное самораскрытие личности, проявление собственной неповторимой индивидуальности.

А вот и другое откровение "Века информации". У многих из нас еще свеж в памяти знаменитый фильм Стенли Крамера с убийственно метким названием "Этот безумный, безумный, безумный мир...". Мы видели там типичных американцев, представителей самых различных слоев этого великого народа. И что же? При малейшем шансе быстрого обогащения они, не раздумывая, бросали все и устремлялись в отчаянную погоню за сокровищем.

Но вот минуло каких-то два десятка лет "Века информации", и мы сталкиваемся с невиданным. Опросы тех же средних американцев, "серых воротничков", причем рабочих по преимуществу, свидетельствуют: зарплата оказывается для них по важности где-то на далеком -надцатом месте! Конечно, при условии, что она обеспечивает безбедное существование. Приоритетным стало теперь совсем иное, и прежде всего высокая оценка тебя как специалиста коллегами-профессионалами. Далее следуют: живой интерес к делу, очевидность его результатов и пользы, перспективы роста и, что, может быть, самое удивительное, напряженность труда, требующая не только хорошей профессиональной сноровки, но и самодисциплины. Словом, особо ценится нынешними американцами та самая "работа до жаркого пота, работа без лишнего счета", о которой вдохновенно писал когда-то знаменитый русский поэт В.Брюсов.

Матчасть диванного танкиста - Страница 4 89020410
Искусство художника или музыканта требует не только таланта - это еще и тяжелый труд. Облегчить его сможет персональный компьютер. Так, например, новая японская микро-ЭВМ предоставляет в распоряжение художника расширенные возможности цветной компьютерной графики (512 различных цветов), а композитору - богатый звук.

О том, что подобное развенчание культа зарплаты не миф и даже не сенсация, свидетельствуют и другие, достаточно объективные данные. Например, все большее число американцев (в настоящее время оно исчисляется уже миллионами) предпочитают делить ставку. Это связано с возросшей выгодой от досуга как главного условия самообразования.

Каким же все-таки образом компьютеры и другие "умные машины", знаменующие вступление в "век информации", способствуют освобождению труда и дальнейшему развитию личности? Ответ становится все более очевидным: путем революционной ломки сложившихся социально-экономических отношений между трудом и капиталом, начальником и подчиненным, коллективом и его отдельными членами.

В толковании американских социологов подобная перестройка состоит в приведении во взаимное соответствие "хай-тех", то есть буквально высокой технологии, и "хай-тач", что можно считать человеческим откликом на эту технологию. В этом сложнейшем процессе, анализируемом Д.Нейсбитом, мы выделим лишь его отдельные, наиболее характерные, на наш взгляд, черты.

Прежде всего рушится столь любимая бюрократией всего мира "вертикальная", то есть иерархическая, структура производства с ее многочисленными уровнями. Например, в компании "Форд" организационная лестница, начиная от клерка и кончая президентом, насчитывала совсем недавно 16 ступеней, их удалось теперь сократить до 10. Еще более разительные перемены такого типа произошли в Японии.

Дело в том, что функции начальства средней руки традиционно сводились, как оказалось, к довольно примитивному и формальному контролю за исполнением, который безболезненно удалось передать компьютерам.

В итоге количественные структурные изменения перешли в качественные. Громоздкая, давно утратившая свою былую эффективность "вертикаль" успешно заменяется принципиально новой "горизонтальной сетью" исполнителей-профессионалов, творчески и непосредственно взаимодействующих друг с другом. Парадоксальная особенность такой сети в том, что в ее центре - каждый.

Изменилась и традиционная форма взаимоотношений начальника и подчиненного. Способ кондового административного нажима постепенно заменяется товарищеским советом, помощью, деловым показом и личным примером. В результате в производстве и бизнесе становятся нормой доверительные взаимоотношения наставника и ученика или, как считают некоторые, тренера и спортсмена.

Естественно, что подобный характер взаимоотношений меняет психологию не только начальников, но и подчиненных. Такие традиционно считавшиеся положительными качества, как послушание и дисциплина, соседствующие обычно с отсутствием воображения и инициативы, оказываются теперь второстепенными по сравнению с активностью и профессионализмом.

Важно, что и здесь мы видим не простое наращивание, а переход количества в качество. Постепенная "машинизация" конструкторско-технологического мышления, о которой мы говорили выше, безусловно, накладывает свой отпечаток на сам профессиональный облик работников. Системы и стенды автоматического проектирования (САПР) способны не только "проигрывать" варианты инженерных решений, но и оптимизировать их. Это, в свою очередь, освобождает творческие умы от всякого рода вычислений и массы другой "черновой" работы. Характерен гигантский скачок в использовании САПР в США. С 1979 по 1985 год объем затрат возрос с 10 миллионов до 2.5 миллиарда долларов и продолжает расти ежегодно на 35%.

Вместе с ветхозаветной иерархической структурой рушится извечный карьеризм с его стрессами, злобой, подсиживанием, продвижением по головам и костям ближнего. Свободная ассоциация творческих личностей, рождаемая всеобщей компьютеризацией, органически способствует их взаимному обогащению и усилению в тем большей мере, чем ярче и самобытнее оказываются эти личности.

Речь идет о принципиально ином типе связи людей в общественном производстве, особой форме общения и взаимодействия. Если соединение физических усилий работников нивелирует каждого, превращая его, по существу, в некий механизм, если узкая производственная связь через машину нравственно отчуждает сотрудников не только от коллективного итога их труда, но и друг от друга, то прямая связь умов и интеграция умственных усилий неизбежно требуют общей этической платформы, то есть глобальной этики, поскольку речь идет обо всем человечестве.

В итоге вступление в "Век информации" знаменует не только скачок в накоплении и применении знания, но и куда более высокую ступень сознания, то есть воплощение древней идеи гуманизации и социализации уже на глобальном уровне.

Так, в социальном опыте США довольно четко прослеживается тенденция к децентрализации общественной жизни. И это естественно. Ведь чем больше информирован человек, тем увереннее он может проявлять свою самостоятельность и индивидуальность, опираясь на собственные силы. Расширяя свой досуг, люди становятся не только более осведомленными и автономными, но и более социально активными.

Иными словами, американцы, когда дело идет о решении социально-экономических вопросов, начиная от снабжения, здравоохранения и пенсий и кончая политикой, все в большей мере уповают не на федеральное правительство, а на местное самоуправление, то есть фактически на самих себя. "От Белого дома - к нашему дому", - не без юмора заявляют они.

По мнению экспертов, революция в средствах связи демонтирует со временем традиционно громоздкую и дорогую политическую машину, основанную на ступенчатом избрании представителей масс и представителей этих представителей. Всеобщее и решающее влияние приобретут всенародные опросы и референдумы, позволяющие прямо, оперативно и без особых затрат выявить мнение большинства по всем животрепещущим вопросам, используя для этого самую современную технику связи.

Матчасть диванного танкиста - Страница 4 89020110
СУПЕР-ЭВМ (0.8-100 миллионов операций в секунду)
- Обрабатывая массив геологоразведочной информации, мощный компьютер позволяет оптимизировать выбор точки для бурения скважины.
- Только супер-ЭВМ, сливая воедино конструкторскую, технологическую, дизайнерскую и другие виды информации, способна определить облик перспективного самолета или автомобиля.
- Как ни велика вычислительная мощь современного суперкомпьютера, их объединение дает исследователям возможность резко сократить расчетное время.
- Грандиозный, даже по космическим масштабам, процесс столкновения галактик длится миллиарды лет. Суперкомпьютер позволяет "проиграть" эту задачу за несколько лет.
- В отличие от обычного телеизображения "искусственная реальность", порожденная электронным "воображением", позволяет наблюдателю вмешиваться в происходящее, например, изучать вибрацию подвески лунохода, меняя на ходу ее параметры.
МИНИ-ЭВМ (0.1-30 миллионов операций в секунду)
- Компьютер удерживает в памяти и манипулирует комбинациями множества молекулярных групп, выискивая наиболее устойчивые сочетания.
- Лавина компьютерных программ требует их систематизации и стандартизации, чтобы можно было затем на основе единых принципов составлять новые программы.
- Запас в несколько тысяч слов позволит
компьютерам наладить прямой диалог с оператором.
- "Перчатка" телеуправления обеспечивает быстрое и точное исполнение команд космическими роботами.
ПЕРСОНАЛЬНЫЕ КОМПЬЮТЕРЫ (0.01 - 10 миллионов операций в секунду)
- Персональный компьютер способен избавить своего владельца от затрат времени на получение библиографических справок.
- Домашний компьютер с запасом видеопрограмм может стать учителем, советчиком и семейным врачом.
- Терминал, "дежурящий" у больничной койки, позволит быстро поставить диагноз и выработать оптимальный план лечения.
- Магнитно-оптическая техника повышает скорость записи, точность и надежность воспроизводства информации, а также объем машинной памяти.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Ср Фев 22, 2023 12:40 am

А я даже и не знал, что в НиЖ было такое.

2/89
КОНКУРС НА ЛУЧШУЮ ПРОГРАММУ ДЛЯ ПЕРСОНАЛЬНОЙ ЭВМ

На конкурс принимаются любые программы - за лучшие из них будет присуждено 54 диплома, 30 почетных грамот, 30 поощрительных премий и 10 туристических поездок в социалистические страны. Авторов каждой из трех разновидностей программ - профессиональных, учебных и игровых ожидают премии - не условные, как это иногда бывало,- три обладателя дипломов первой степени, например, за лучшую учебную программу получат по 1000 рублей, составитель любой из трех лучших игровых программ - 500 рублей.

Прежде чем говорить о призах, следовало бы подробнее рассказать об условиях конкурса. Участвовать в нем может каждый - не только отдельные авторы, но и коллективы клубов, кружков, любых организаций, независимо от ведомственной принадлежности. Есть только одно условие - программы должны быть разработаны в порядке личной инициативы, а не по служебному заданию.

На конкурсе будет рассмотрена любая программа для любой ЭВМ, но приоритетными направлениями объявлены: экспертные системы, системы автоматизированного проектирования, обучающие, учебные и шахматные программы, а также автоматизированные рабочие места специалистов, системы машинной графики и системы автоматизации научных исследований. Тип микроЭВМ, на которой вы работаете, не имеет значения. Но если это одна из тех машин, что перечислены ниже, то Государственный комитет по вычислительной технике и информатике сможет в дальнейшем распространять вашу программу через свои предприятия и Центры информатики, если будет достигнута соответствующая договоренность с автором программы, то есть с вами. Кстати, речь идет не только о программах, победивших в конкурсе, но и обо всех хороших программах. В распоряжении ГКВТИ имеются любые машины серии ДВК, "Электроника 85", "Искра 1030", "Нейрон", "ЕС" (1840, 1841), "Роботрон" (1715, 1834, 1910), КУВТ (БК, "Корвет", "Ямаха"), "Микроша", "Львов ПК", "Криста", "Апогей", "Вектор", "Сура", "Агат", "ВЭФ-микро". Если ваш компьютер иной марки, например, зарубежный или самодельный - присылайте программу и для этой машины - специалисты обещают непредвзятый подход.

Программировать можно на любом языке, прежде всего на Ассемблере, Паскале, Си, Форте, в машинных кодах. Впрочем, программы на Бейсике и других языках также будут рассматриваться экспертными группами конкурса.

Чтобы ваша программа имела максимум шансов на успех, ее нужно оформить точно в соответствии с несложными требованиями. Программу записывают на дискетту или кассету, запечатывают в пакет, на нем надписывают название программы, ее тип, где и кем она сделана. Необходим лишь один документ - сопроводительная информация для экспертов: компьютер, язык программирования, операционная система, необходимый объем памяти, необходимые периферийные устройства, время прогона, инструкция для пользователя, краткие методические рекомендации, структурная схема программы, а также сведения об авторе (фамилия, имя, отчество, год рождения, образование, ученая степень и адрес).

Оформленную программу высылайте по адресу: 109068, г.Москва, Велозаводская ул. д.4, СНПО "Алгоритм", "Конкурс ПС ПЭВМ". Сделать это необходимо до 31 июля 1989г. Кстати, за магнитные носители, а они, как известно, в разряде острого дефицита, можно не волноваться - авторы получат их после 30 сентября 1989г., когда будут подведены окончательные итоги конкурса. Еще важнее то, что устроители конкурса гарантируют соблюдение авторских прав пользователей - ни одна программа, независимо от того, выиграла ли она в конкурсе или нет, не будет тиражироваться без письменного договора с автором - весьма важное примечание, поскольку, как известно, авторское право на программы в нашей стране пока что не подкреплено законодательно.

В заключение нельзя не отметить те организации, которые организовали столь долгожданный и нужный конкурс. Это Государственный комитет СССР по вычислительной технике и информатике, ЦК ВЛКСМ, Центральный совет ВОИР, ЦК профсоюза рабочих радиоэлектронной промышленности.

Когда готовилась эта публикация, на конкурс поступило всего около 500 программ. Впрочем, оставшиеся 4 месяца - вполне достаточный срок, чтобы завершить наиболее интересные программные разработки и попробовать свои силы в первом всесоюзном конкурсе. Желаем успеха!
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Фев 23, 2023 12:45 am

2/89
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Давние читатели раздела сразу заметят в его нынешнем выпуске отклонение от традиции: вслед за фамилиями авторов заметок не указано, из каких они городов. Это сделано во избежание повторов: все заметки нынешнего выпуска присланы из Киева.
Письма оттуда всегда составляют изрядную долю в почте раздела. Неудивительно: в Киеве много научно-исследовательских институтов и других учреждений компьютерного направления, и в первую очередь - Институт кибернетики АН УССР им.В.М.Глушкова. Потому-то и оказалось возможным образовать хорошую подборку из писем киевлян.
Когда она была составлена, обнаружился любопытный факт: половина отобранных писем так или иначе касается преподавания информатики. Отличная примета! Если те, кто вырабатывает и хранит столь нужные сегодня знания, берут на себя и заботы об их распространении - на успех компьютеризации можно рассчитывать.
Какой город будет представлен в нашем разделе следующим? Реальные на то шансы есть у Ленинграда, Горького - помногу писем приходит и оттуда. А может быть, еще в каком-то городе читатели, не сговариваясь, разом возьмутся за перо и пришлют столько заметок, что хорошая подборка сложится из них.

ЕСЛИ В ШКОЛЕ НЕТ КОМПЬЮТЕРА
Основы информатики и вычислительной техники, или, сокращенно, ОИВТ - так называется курс, преподавание которого началось в 1986/87 учебном году в общеобразовательных школах, ПТУ, техникумах и других средних специальных учебных заведениях нашей страны. Тем самым в орбиту информатики втягивалось 4.3 миллиона старшеклассников, обучающихся в 60790 школах. Из этих школ только в 972 (1.6%) была материальная база для изучения нового предмета.

Возникает естественный вопрос: как же изучать ОИВТ, не имея ВТ (вычислительной техники)?

Разумный ответ оказался в посылке, недавно пришедшей в редакцию из Киева. В этой посылке были пособия по курсу ОИВТ, опирающиеся на программируемый микрокалькулятор Б3-34 и простой школьный калькулятор МШК-2. Кроме того, там был ряд номеров детского журнала "Пионерия", выходящего в Киеве на украинском и русском языках, в котором с 1985 года учитель С.Т.Кузнецов и кандидат физико-математических наук В.Б.Распопов ведут раздел "Компьютер и ты". И, наконец, книга "Формирование компьютерной грамотности учащихся", изданная в 1987 году издательством "Радянська школа" на украинском языке. Все эти материалы показывают, что микрокалькулятор, в особенности программируемый, в умелых руках становится прекрасным подручным средством для плавания в океане информатики. Конечно, ЭВМ лучше, спора нет, но если нет ЭВМ, то очень много можно сделать и с помощью калькулятора.

Пособие для 9-го класса В.Б.Распопова и А.ФВерланя "Основы программирования на микрокалькуляторах" знакомит с программированием и простейшими понятиями этой дисциплины (присваивание, цикл, условные и безусловные переходы и т.д.). Читателю пособия предоставляется выгодная возможность работать самостоятельно. Для этого есть шесть лабораторных работ. Некоторые из них являются миниатюрными исследованиями - такова, например, работа по определению быстродействия микрокалькулятора.

Второе пособие для 9-го класса "Основы информатики и вычислительной техники" (авторы А.Ф.Верлань и В.Н.Касаткин) продолжает цепочку основных понятий: информация, двоичное кодирование, алгоритм и алгоритмические языки. Эти же авторы под тем же названием разработали пособие для 10-го класса, по которому учащиеся знакомятся с двоичной арифметикой, математической логикой и языком программирования Бейсик. Наконец, следующее пособие для 10-го класса, "Основы применения вычислительной техники", написанное А.Ф.Верланем и В.Б.Распоповым, проводит аналогию между языком программируемого калькулятора и языком Бейсик. Ряд программ написан параллельно на обоих языках, а это дает возможность прочувствовать конструкции уже известные, но написанные на другом языке, оценить особенности программирования на сравниваемых языках.

Книга "Формирование компьютерной грамотности учащихся" содержит 17 статей учителей-практиков, использующих микрокалькулятор на уроках начиная с 4-го класса и во внеклассной работе.

Конечно, небольшая посылка не смогла бы вместить все книги, выпущенные центральными издательствами Украины в помощь школьным преподавателям новой дисциплины Тем более что добрую половину посылки составил комплект журнала "Пионерия". В разделе "Компьютер и ты" здесь так же, как и в упомянутых книгах, речь идет о программируемом микрокалькуляторе, наиболее распространенном из вычислительных средств и наиболее доступном сегодня. Четкие рисунки программ (один из них представлен здесь) помогают избежать ошибок при вводе. Есть в разделе и познавательные задачи, и игры. По поводу игр можно лишь пожелать, чтобы исход в них не всегда был предрешен в пользу микрокалькулятора. Как только играющий обнаружит, что ему отведена роль статиста, вводящего в микрокалькулятор ходы и терпеливо ждущего собственного поражения,- интерес к игре пропадает...

Матчасть диванного танкиста - Страница 4 89021110
Введя эту программу в микрокалькулятор Б3-34, нажмите клавиши В/0 С/П. На индикаторе появится ряд единиц и среди них - одна восьмерка. Которая станет быстро перемещаться от одного края индикатора до другого и обратно. Когда она подойдет к одному из краев, попробуйте остановить ее точно у края нажатием клавиши С/П. Так вы проверите свою реакцию.

УДАЧУ МОЖНО СПРОЕКТИРОВАТЬ
По программе кружка информатики, который я вел для школьников, настало время перейти к вопросу о том, как разрабатывать программы.

Для изучения этого вопроса, предложил я ребятам, возьмем компьютерный фокус В.Пинаева 12/1987. Вот его суть. Зритель задумывает и называет вслух целое трехзначное число, которое ЭВМ отгадывает за несколько попыток. Каждая попытка состоит в том, что компьютер сообщает очередную свою догадку и, если она неверна, зритель называет какое-нибудь слово. Фокусник набирает это слово на клавиатуре, и все повторяется сначала. С каждым разом догадки машины все ближе к задуманному числу, и вот наконец оно отгадано.

Секрет фокуса в том, что вместе со словом фокусник вводит тайную подсказку компьютеру. Пусть она будет такой: если вводимое слово содержит четное количество букв, это означает, что задуманное число больше выданного машиной, если нечетное - меньше. Четностью количества букв в слове фокусник может легко управлять, добавляя при необходимости в начале слова пробел.

В качестве первого шага к решению нашей задачи давайте четко сформулируем ее условие - поставим себе техническое задание. Это желательно делать всегда, даже если вы пишете программу только для личного пользования, поскольку помогает понять все тонкости выполняемой работы.

Итак, требуется написать программу, которая:
1. Выводит некоторое трехзначное число и спрашивает, угадала ли она.
2. Если ответ отрицательный, то программа просит ввести слово и выдает новое трехзначное число-догадку, большее предыдущего, если количество букв в слове четное, и меньшее, если оно нечетное. Затем она переходит к пункту 1.

Теперь перейдем к составлению алгоритма или, как говорят, программисты, проектированию программы. При этом будем пользоваться подобием алгоритмического языка, разработанного А.П.Ершовым и применяемого в школьной информатике.

Если бы у нас была машина, способная самостоятельно угадывать трехзначное число, то все, что требовалось бы от нас,- это написать

нач
угадать число
кон

К сожалению, такой машины у нас нет, и нам придется уточнить, что значит "угадать число".

Как в описании фокуса, так и в нашем техническом задании чувствуется явная цикличность действий программы: показать число, спросить слово, показать число, спросить слово... Поэтому вполне естественно при уточнении воспользоваться циклом. Напрашивается и условие, при котором цикл нужно повторять - конечно же, когда число не угадано. Кроме того, опыт говорит, что перед циклом, как правило, приходится произвести некоторые действия, например, задать начальные значения каким-либо величинам, а после цикла - заключительные действия. Так что мы вполне можем записать в расширенном виде:

нач
предисловие
пока число не угадано повторять
определить следующее число-догадку
все
послесловие
кон

Что касается предисловия и послесловия, то по самой их сути они могут быть уточнены только после того, как будет составлена вся программа. Поэтому займемся вплотную определением числа-догадки.

Наше техническое задание подсказывает нам, каким образом это можно сделать:

определить следующее число-догадку ==
показать число-догадку
если число не угадано
то уточнить число
все

Удобный способ уточнения заключается в том, что сначала нужно выбрать интервал, в котором искомое число находится наверняка, а затем в качестве очередной догадки выдавать середину этого интервала. Если искомое число меньше нашей догадки, то интервал поиска заменяется своей левой половиной, если больше, то правой - и действия повторяются. Таким образом, интервал поиска каждый раз сокращается в два раза, покуда не сузится до одного числа - искомого.

В соответствии с только что сказанным определим, что значит "уточнить число":

уточнить число ==
уточнить интервал
выбрать число-догадку в интервале

А вся наша программа будет выглядеть:

нач
предисловие
пока число не угадано повторять
показать число-догадку
если число не угадано
то уточнить интервал
выбрать число-догадку в интервале
все
все
послесловие
кон

Обозначим концы интервала поиска А и В, а число-догадку С. Кроме того, пусть ответ человека на вопрос, угадано ли число, выражается значениями текстовой переменной "ответ". Пусть ее значениями будут буквы "д" или "н", соответственно кодирующие слова "да" и "нет". Теперь мы можем сказать, что фрагмент "уточнить интервал" устанавливает либо А, либо В равным С, а фрагмент "выбрать число-догадку в интервале" устанавливает С равным середине интервала (А, В).

Очевидно, что в предисловии должны устанавливаться начальные значения переменных А, В, С и "ответ", а в послесловии нужды вообще нет.

Теперь уже можно записать окончательный проект программы:

нач
А := 99
В := 1000
С := 500
ответ := "н"
пока ответ = "н" повторять
показать С
спросить ответ
если ответ = "н"
то уточнить интервал (изм А, изм В, вх С)
выбрать число в интервале (вх А, вх В, изм С)
все
все
кон

Вслед за заголовками "уточнить интервал" и "выбрать число в интервале" появились названия тех величин, которые будут использоваться в соответствующих фрагментах. Причем если в некотором фрагменте величина изменяется, она помечена изм, а если нет - вх (от слова "входная"). Распишем оба фрагмента более подробно:

уточнить интервал (изм А, изм В, вх С)
нач
спросить слово
если в слове четное количество букв
то А := С
иначе В := С
все
кон

По сути, это дословная запись того, что мы уже обсуждали. Что касается фрагмента "выбрать число", то с ним еще проще:

выбрать число в интервале (вх А, вх В, изм С)
нач
С := (А+В)%2
кон

Здесь % означает деление нацело.

Теперь, казалось бы, можно вставить эти части на их законные места в "главной" программе. Но лучше этого не делать по нескольким причинам. Во-первых, главная программа и без того получилась достаточно сложной, и добавление к ней еще десятка строк только уменьшит ее понятность, а значит - затруднит внесение изменений при отладке н последующих улучшениях. Во-вторых, каждая из выделенных нами частей выполняет четко определенную функцию, и если потом мы захотим изменить алгоритм, по которому эта функция выполняется, у нас будет уверенность, что переделывать придется не всю программу, а только ее часть. Договоримся, что в будущей программе оба фрагмента выразятся в виде подпрограмм.

Составление проекта закончено. Давайте еще раз повторим основные этапы проделанной нами работы.

Во-первых, мы постарались четко определить задачу, которую будет решать наша программа (программисты говорят "составили спецификацию"). Заметим: для больших программных систем спецификация едва вмещается в несколько объемистых томов, и процесс ее написания заслуженно считается одним из самых сложных и чреватых ошибками этапов в разработке программы.

Во-вторых, мы применили так называемое нисходящее проектирование (или проектирование по принципу "сверху - вниз"). Сначала мы определили проект будущей программы в самых общих чертах, не обращая внимания на то, что отдельные его части в том виде, в каком они записаны, вообще не могут быть выполнены на ЭВМ. Затем мы постепенно уточняли все такие части, в свою очередь разбивая их на более конкретные и понятные машине, пока не получили проект, легко реализуемый на любом распространенном языке программирования.

Матчасть диванного танкиста - Страница 4 89021310

Попробуйте по этому проекту написать задуманную нами программу на Бейсике и сравните ее с приведенным здесь вариантом. При сравнении постарайтесь вникнуть во все тонкости. Например, в подпрограмме "уточнить интервал" лишний пробел и знак ";" в конце оператора PRINT помогают замаскировать пробел, вводимый фокусником в начале некоторых слов.

Когда эта программа была введена в компьютер, она заработала с первого пуска. И это было закономерным результатом ее разработки "сверху - вниз".
И.РОМАНЕНКО

СЕКРЕТ УСПЕХА - В ХОРОШЕМ АЛГОРИТМЕ
Когда составлен алгоритм решения задачи, написать по нему программу обычно не составляет труда. В частности, поэтому задачи первого тура олимпиад по школьной информатике, проводимых с 1986 года Институтом кибернетики АН УССР, имеют своей целью именно составление алгоритмов.

Первый тур олимпиады - заочный. В школы рассылаются задачи, примерно через три недели школьники присылают решения, авторы лучших решений приглашаются в Институт кибернетики на второй, очный тур, где от них требуется составление уже не только алгоритмов, но и основанных на них программ. Все эти программы по очереди запускаются на компьютере, результаты их работы отображаются на дисплее, школьники в это время становятся зрителями и болельщиками, а зрелище получается весьма увлекательное!

При подборе задач как отборочного, так и финального тура мы стремимся в каждую из них вложить какой-нибудь метод программирования или общий подход, чтобы школьник в поисках решения сам открыл этот метод или подход. Разбор такой задачи не просто пересказ решения, а маленькая лекция о том, где возникают подобные задачи н где применяются подобные методы. Это придает олимпиадам познавательную роль.

Задачи стараемся придумывать сами, но иногда обращаемся к фольклорным источникам - впрочем, точнее было бы сказать, что их влияние ощущается во всех предлагаемых ниже задачах.
В.БАРДАДЫМ.

СОРТИРОВКА ВАГОНОВ

Матчасть диванного танкиста - Страница 4 89021210

На станцию, изображенную на рисунке, прибывает поезд. Его вагоны пронумерованы в произвольном порядке. Требуется составить алгоритм, располагающий вагоны в порядке убывания номеров. В тупик помещается только один вагон илн тепловоз. Предполагается, что диспетчер, управляющий маневрами, видит номера всех вагонов поезда. Разрешается передвигать тепловозом вперед и назад любое количество вагонов, расцеплять и сцеплять соседние вагоны н тепловоз с вагоном, переводить стрелку. Затем требуется решить ту же задачу, предполагая, что диспетчер видит номера только двух ближайших к стрелке вагонов и вагона в тупике. Номера остальных вагонов диспетчер ие запоминает.

ЗАБОР ВОКРУГ РОЩИ
Рощу ценных деревьев следует оградить забором, имеющим вид замкнутой линии. Известны координаты всех деревьев. Описать алгоритм для ЭВМ с графопостроителем, рисующий план рощи с забором минимальной длины. Деревья изображаются точками. Забор может проходить вплотную к деревьям. Графопостроитель может выполнять команды НАНЕСТИТОЧКУ(X,Y) и НАЧЕРТИТЬОТРЕЗОК(X1,Y1,X2,Y2), где (X,Y) - координаты точки, (X1,Y1) и (X2,Y2) - координаты концов отрезка.

ПОИСК ПОДПОСЛЕДОВАТЕЛЬНОСТИ
Дана последовательность N чисел. Ее подпоследовательностью будем называть любое подмножество множества ее членов, расположенных в порядке возрастания их индексов.

Составить алгоритм, вычисляющий для данной конечной последовательности различных чисел ее монотонно убывающую подпоследовательность наибольшей длины.

ЕСТЬ ЛИ СВЯЗЬ?
В Антарктиде расположены N метеорологических станций. Каждая станция соединена со всеми другими станциями линиями связи. Из-за стихийного бедствия многие линии связи оказались нарушенными. Написать алгоритм, определяющий, между какими парами станций связь невозможна даже через цепочки других станций. Исправность линии связи между 1-й и К-й станциями можно выяснять с помощью логической функции ЕСТЬСВЯЗЬ(1,K).

СЧИТАЕМ ВОРОН
[Автор задачи - Ю.Матиясевич]

Написать программу, которая получает на входе число N и печатает на выходе фразу "N ворон", записывая числительные словами. 0<=N<=9999. Примеры:

Вход - Выход
1 - одна ворона
3 - три вороны
8 - восемь ворон
55 - пятьдесят пять ворон
200 - двести ворон
1234 - одна тысяча двести тридцать четыре вороны

КОМУ НУЖНА АМБАРНАЯ КНИГА?
В 1986 году наш раздел получил новое название "Человек и компьютер". Связано это было с тем, что в нем наряду с программами для микрокалькуляторов стали публиковаться программы для персональных компьютеров. И первая нз таких программ под названием "Амбарная книга" поступила в обновленный раздел с киевским обратным адресом - см. заметку В.Соловьева "Как я заведовал
складом химреактивов" (2/86).

После публикации той программы прошло три года, а отклики на нее продолжают поступать. Читатели (чем она их приворожила?!) все улучшают и развивают ее, дополняя новыми сервисными участками. Теперь с ее помощью можно управлять данными не только по складу, но и по другим объектам.

Вот как, например, могут выглядеть записи по отделу кадров:

СОЛОВЬЕВ В. РОД 48.10.23, ПОСТ. НА РАБОТУ 71.02.17, ВЫГОВОР ЗА ОПОЗД. 87.06.04.

Разбор программы, по мнению В.Чистякова из Москвы, А.Ярвица из Свердловска и других читателей, стал неплохим уроком программирования. В письмах пришли аналоги программы "Амбарная книга", написанные для других ЭВМ: Роботрон 1715 (И.Щербинская, г.Ленинград), СМ-4 (В.Кузнецов, г.Рига), ДВК-2М (А.Инушкин, г.Смоленск).

Подробный разбор программы с указанием основных путей ее совершенствования сделал К.Александров из Ленинграда.

Учтя основные замечания читателей, выставляем на их суд переработанную программу "Амбарная книга" (версия для "Искры-226"). Ее особенности: 1. Хранение записей в упакованном виде на магнитном диске. 2. Использование оператора LINPUT. 3. Поиск как по одному, так и по двум ключевым словам.

Матчасть диванного танкиста - Страница 4 89021410

Предлагаем читателям так доработать программу, чтобы по ней можно было вести поиск с любой комбинацией ключевых слов, применить более удобную форму записи массива на диск, более быстрый алгоритм поиска информации в книге и ее упаковки.

1024 СОВЕТА
(ПЯТЫЙ, ШЕСТОЙ И СЕДЬМОЙ БАЙТЫ С ИЛЛЮСТРАЦИЕЙ)
Мне нравится рубрика "1024 совета", недавно появившаяся в разделе "Человек и компьютер". Хочу предложить для нее сразу три байта. Все они сколь бы странным это ни казалось, навеяны одной программой - помните заметку А.Лебедева, где речь шла о поиске места в микрорайоне для встроенного магазина? Заметка называлась "Что нам стоит дом построить" (6/87). Программу я переработал и, на мой взгляд, улучшил.

Матчасть диванного танкиста - Страница 4 89021510

33. Расшифровывай в программе смысл редких операторов и операторов, имеющих разное написание в разных диалектах языка (см. строку 1, начало строки 4 и конец строки 17).

34. Оформляй название программы не ремаркой, а оператором печати. Это позволит распознавать программу и по ее листингу, и при ее прогонке (см. строку 2).

35. Старайся избегать приемов программирования и операторов, допустимых не во всех диалектах языка. Например, оператор ввода с клавиатуры с комментарием (см. строки 3, 7 и 8 ) разбивай на два: оператор печати и оператор ввода; не обозначай одним и тем же именем массив и простую переменную (см. строку 11) и т.д.

36. Резервируй в памяти ЭВМ место под массивы с некоторым запасом (см. строку 4). Это даст возможность при необходимости в непосредственном режиме увеличить число элементов массивов, ввести недостающие параметры и повторить расчет, запустив программу не с самого начала, исправить пропуск некоторых параметров в начальном диалоге.

37. Отводи под вещественные по сути величины целочисленные по форме переменные. Так, заменяя километры на метры (см. строку 7), рубли на копейки, тонны на граммы и т.д., можно избежать десятичных запятых и существенно сэкономить память ЭВМ.

38. Помни, что использование целочисленных переменных экономит память ЭВМ лишь в том случае, если эти переменные объединены в массивы. Имей в виду, что большинство Бейсик-трансляторов имеют одну арифметику и для вещественных, и для целочисленных переменных. Простые целочисленные переменные не ускоряют прогонку программы, а только засоряют память и листинг знаками процента.

39. Давай переменным "говорящие", но не очень длинные имена: ОРТ - оптимальный, MIN - минимальный (см. строку 5).

40. Старайся не пользоваться принципом умолчания или по крайней мере не злоупотребляй им. Этот принцип по-разному толкуется в разных диалектах Бейсика, а в таких ортодоксальных языках, как Паскаль, его почти нет. Поэтому объявляй переменные в ремарках (см. строку 5), указывай шаг параметра цикла (см. строки 6 и 19). помечай конец программы (см. строку 24) и т.д.

41. Используй на Бейсике удачные находки других языков программирования. Так, в языке Си заголовок цикла с параметром может содержать операторы обнуления сумматоров, операторы присваивания. Использование таких приемов в других языках (см. строки 10, 12) не только делает программу более компактной, но и исключает некоторые ошибки: повторный вход в цикл без обнуления сумматора, например.

42. Проводя чистку цикла (см. строку 11), помни, что уже давно появились так называемые оптимизирующие трансляторы, берущие такую черновую работу на себя, оставляя человеку простор для творчества. Избегай чрезмерного усердия, не забывай о ясности программы (см. также совет 11 в 2/88 ).

43. Заменяя для ускорения счета возведение в целую степень на умножение, помни, что такая операция может иметь обратный эффект, если переменные индексные, да к тому же вставленные в выражения (см. строку 13).

44. При формировании текстовых сообщений не забывай о падежах и других грамматических формах (см. конец строки 15).

45. Оформляй ремарками концы структурных блоков (см. строки 16, 21 и 22) во избежание каких бы то ни было двусмысленностей при анализе программы.

46. При формировании таблиц на дисплее и на бумаге используй специальные зоны, попасть в которые помогают запятые в операторах печати (см. строки 18 и 20). Это избавит от использования табуляторов и форматов печати.

47. Если в трансляторе нет слова ELSE (иначе), то смело меняй полную альтернативу на две неполные (см. строки 21 и 22). При этом не придется использовать метку, которую многие считают признаком низкой культуры программирования (автор совета - Д.Ван Тассел).

48. Отмечай ремаркой малозаметные для человека особенности программы, пренебрежение которыми может сильно исказить результат (см. строку 20).

49. Не забудь указать в программе ее имя и внешний носитель, где она хранится (см. строки 23 и 24).

50. Пустые места в коротких строках заполняй дополнительными комментариями (см. строки 6, 9, 12, 14, 23 и 24).

51. При выводе результата не забудь распечатать и исходные данные (см. строки 18-23). Это, во-первых, позволит оформить полный протокол расчета, а во-вторых, призовет к дополнительному контролю исходных данных.

52. При первой прогонке программы давай ей для пробы простейшие примеры, решение которых заранее известно. Для нашей программы в качестве первого теста можно предложить пять равнозаселенных домов, расположенных в углах и внутри квадрата. Подобным приемом можно быстро выявить синтаксические и грубые смысловые ошибки.

53. Отделяй в листинге программы пробелами операторы на строке, служебные слова и переменные. Это повысит наглядность программы.

54. Размещение нескольких операторов на строке делает программу компактной. Она сможет полностью уместиться на экране дисплея, что упростит ее разбор отладку и модернизацию. Если ты к тому же планируешь программу опубликовать, то ее компактность повысит шансы появления на страницах журналов, испытывающих дефицит бумаги.

55. Нумеруй строки своей программы, несмотря на то, что наиболее совершенные версии Бейсика (Турбо-Бейсик, например) в номерах строк не нуждаются. Номера строк пригодятся при описании программ.

56. Меняя число пробелов перед первым оператором строки, можно выделить структуру программы "паскалевским" манером (см.
строки 7 и 8, 11-16 и 20-22). Если при трансляции экономная машина их выкидывает, то обмануть ЭВМ в ряде случаев удается, поставив после номера строки знак - разделитель операторов.
М.ПЕРЕПЕЛИЦА

ПЕЩЕРА
После ввода программы этой игры в калькулятор МК-61 перед первой партией в регистр 3 вводится результат действий 9 F1/х, а в регистр 7 - любое число меньше единицы, с несколькими знаками после запятой. Перед началом каждой партии следует набрать 7 F10X П1 Сx П6.

Для начала игры нажимаем клавиши В/0 С/П. Через 15 секунд на индикаторе появляется игровое поле: 8. С-Е (буквы С может не быть, партии непохожи друг на друга). Это пещера, в которой находится клад, обозначенный цифрой 8. Знаком минус обозначено место игрока, стремящегося добыть клад, буквой Е - чудище ЕГГОГ, которое гонится за игроком, чтобы сожрать его. С - это символ двери, которую надо открыть.

Еще раз нажимаем С/П. Если двери перед игроком не было, то он передвинется на одну позицию влево, а если была, то игроку кратковременно показываются два целых числа с количеством цифр не более четырех. Перед каждым числом на индикаторе мимолетно вспыхивает частокол из единиц: 1.1111111 1. Эта же комбинация будет на индикаторе после останова - как сигнал к дальнейшим действиям.

Показанные числа надо запомнить и после останова, когда на индикаторе видна шеренга единиц, ввести первое из этих чисел, затем нажать С/П. Если введенное число совпадает с показанным, то на индикаторе появится ноль. Далее следует ввести второе число и нажать С/П. Если и теперь все правильно, то на появившемся игровом поле знак дверей С будет заменен цифрой 7 - дверь открыта. Предполагается, что при этом игрок стоит в дверном проеме; оттого знака минус в этой картине нет. За каждую удачно открытую дверь игроку начисляется три очка. Если хотя бы одно число введено неверно, то появляется игровое поле, в котором игрок и дверь остались на месте, а чудище продвинулось на одну позицию влево. За неудачную попытку с игрока снимается три очка.

Так игра продолжается до конца. Если чудище догнало игрока, то оно его пожирает. На индикаторе - ЕГГОГ, что говорит о том. что игра проиграна. Если игрок добрался до клада, то к набранной им сумме очков прибавляется 8 и итоговая сумма показывается на индикаторе как знак победы. Впрочем, если неудачных попыток было много, то сумма будет отрицательной (как видно, кладоискательство может быть и убыточным предприятием!).

Для владельцев МК-52 предлагается дополнение. После взятия клада из ППЗУ в программу записывается другой фрагмент по адресам 00-27. При этом сохраняется обстановка, предшествующая взятию клада. В этом варианте, как и в первом, необходимо преодолевать двери, открывая их тем же способом. Но после потери клада жизнь чудищу не мила, и если игрок ошибается, то чудище делает шаг к нему навстречу. После перезаписи из ППЗУ игра начинается командой В/0 С/П.

ОСНОВНАЯ ПРОГРАММА. 00. Сх 01. ХП5 02. 1 03. ХП4 04. 6 05. ХП0 06. ПП 07. 87 08. 2 09. / 10. K{х} 11. ХП2 12. 6 13. * 14. ПХ4 15. 1 16. + 17. F10X 18. * 19. ПХ1 20. + 21. ХП1 22. ПХ5 23. ПХ4 24. - 25. F1/x 26. ПХ1 27. ПХ4 28. F10X 29. 5 30. * 31. + 32. ПХ5 33. F10X 34. + 35.Kинв 36. ПХ6 37. x-y 38. С/П 39. ПХ2 40. Fx!=0 41. 72 42. ПП 43. 87 44. ХП8 45. ПП 46. 87 47. ХП9 48. ПХ3 49. B^ 50. В^ 51. ПХ8 52. B^ 53. ПХ3 54. B^ 55. ПХ9 56. В^ 57. ПХ3 58. С/П 59. ПХ8 60. - 61. Fx=0 62. 80 63. С/П 64. ПХ9 65. - 66. Fx=0 67. 80 68. ПХ6 69. 3 70. + 71. ХП6 72. КПХ4 73. FL0 74. 06 75. ПХ6 76. 8 77. + 78. ХП6 79. С/П 80. ПХ6 81. 3 82. - 83. ХП6 84. КПХ5 85. БП 86. 22 87. ПХ7 88. Fпи 89. + 90. Fexp 91. K{x} 92. ХП7 93. ВП 94. 5 95. K[x] 96. B/0.

СМЕННЫЙ БЛОК ДЛЯ ВТОРОЙ ЧАСТИ ИГРЫ. 00. 7 01. ХП0 02. 1 03. ВП 04. 6 05. ХПА 06. ПХ1 07. ПХ0 08. F10X 09. / 10. ПХА 11. + 12. К{x} 13. ХП2 14. ПХ0 15. ПХ5 16. - 17. БП 18. 24 19. Кноп 20. Кноп 21. Кноп 22. БП 23. 14 24. Fx!=0 25. 75 26. ПХ1 27. ПХ0. С адреса 28 продолжается основная программа.
Е.БРЕДНЯ (ученик 10-го класса
школы #252)

[ МАЛЕНЬКИЕ ХИТРОСТИ
При логических операциях в появляющемся на индикаторе числе иногда нет символа в последнем или нескольких последних разрядах. Для выяснения того, какой же знак там стоит - нуль, который не индицируетея, если он стоит на последнем месте в дробной части числа, или 16-ричная цифра F, индицируемая отсутствием символа, исходное число необходимо логически умножить на 8,9999999. Если на месте отсутствующих цифр ничего не появится, то, значит, в исходном числе там стоял нуль (0 и 9 = 0), а если появится цифра 9, то в исходном числе была цифра F (F и 9 = 9).
К.ТУРКИН ]
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пт Фев 24, 2023 12:36 am

3/89
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДВАДЦАТЬ ТРЕТЬЕ. Как только на прилавках магазинов появились долгожданные бытовые компьютеры "БК-0010.01" со встроенной в постоянную память версией Бейсика, редакция стала получать от читателей письма с просьбами рассказать об этом языке, который по ряду параметров, в первую очередь по быстродействию и популярности, превосходит Фокал. Сегодня БК способен работать с Фокалом и Ассемблером, Фортом и Паскалем, Т-языком и Машкодом. И все же первое знакомство с компьютером будет самым легким, если начинать его составлением собственной программы на Бейсике. Это занятие адресовано всем, кто хочет познакомиться с возможностями и некоторыми особенностями Бейсика-БК. Ведет занятие инженер А.Б.БОРИСОВ

Вариантов языка Бейсик, пожалуй, немногим меньше, чем типов компьютеров, способных работать с этим языком. Рассказать об очередной версии Бейсика - той, что записана, или, как говорит программисты, зашита, в постоянную память БК,- непросто. Если обращать внимание на азы работы с языком, то неизбежно из описания исчезнут мелкие детали - как раз то, что оказывается важным на практике. В то же время рассказ, насыщенный описанием деталей, окажется излишне сложным для начинающих. На нашем занятии мы будем придерживаться средней линии.

Начинающим рекомендуем ознакомиться с описанием другой, более простой версии Бейсика (9,11/86, 1,3/87) - это облегчит знакомство с Бейсиком-БК.

ПЕРВОЕ ЗНАКОМСТВО
Бейсик-БК, или, как его иногда называют, Бейсик-МСХ,- это довольно мощный вариант Бейсика. После запуска командой RUN текст программы переводится в последовательность машинных кодов, оба текста хранятся в памяти, так что самая большая программа па Бейсике может занимать не более 7.5 Кбайт. Знаток отметит, что такое устройство языка позволяет считать его своего рода компилятором.

Веля вычисления, Бейсик работает с десятичными целыми числами от -32768 до 32768 или от 0 до 65535, с двоичными, восьмеричными и шестнадцатеричными числами. Восклицательный знак после числа - признак вещественной константы одинарной точности (7 значащих цифр), знак диеза определяет двойную точность (17 значащих цифр).

Переменные Бейсик-БК распознает по двум первым символам, поэтому переменные file2 и FIRST для транслятора равнозначны. На тип переменной указывает специальный символ после ее имени:

Матчасть диванного танкиста - Страница 4 89030110

По замыслу разработчиков, Бейсик должен был работать с многомерными массивами (до 255 индексов), однако па практике даже трехмерные массивы оказываются транслятору не по зубам ("Информатика и образование" 1/89). Заканчивая разговор о константах и переменных, важно отмстить, что любая переменная, если ей не присваивалось никакое значение, равна нулю, а знак диеза можно опускать - транслятор поймет, что речь идет о переменной двойной точности.

Хотя каждая строка способна вместить до 255 символов, транслятор позволяет записывать в строке лишь один оператор, поэтому длинные строки встречаются редко. Строки можно нумеровать целыми числами от 0 до 65535, кстати, в процессе работы над программой номер строки нетрудно изменять. Эту возможность оценят те, кто имел опыт программирования на Фокале.

Кроме арифметических действий, Бейсик включает операцию целочисленного деления (делимое и делитель преобразуются п целые числа, а результат равен их частному без дробной части) и операцию деления по модулю (делимое и делитель преобразуются в целые числа, а результат равен остатку от их деления). Важно помнить приоритеты выполнения операций:

Матчасть диванного танкиста - Страница 4 89030210

Операции отношения в Бейсике-БК записывают с помощью знаков <,>, = и любых их комбинации, результатом операции является 0, если отношение не выполнено, и - 1 в противном случае. Благодаря этому допустима запись А=(А1*А2<=А1+А2). Приоритет операции отношения низкий, поэтому лучше всего взять их в скобки. В операторах условного перехода нередко используют логические операции: NOT - отрицание, AND - умножение, OR - сложение, XOR - сложение по модулю 2, EQV - эквивалентность, IMP - импликация, но об этих операциях мы поговорим позднее. Есть операции для работы с символьными величинами: соединение (конкатенация), сравнение, выделение части, подсчет длины. Символьные величины можно преобразовывать в числовые и обратно, но их описание мы также отложим.

ВО ВСЕМ НУЖНА СИСТЕМА
Прежде чем составлять первую программу на Бейсике-БК, важно ознакомиться с Бейсик-системой: той частью языка, которая организует диалоговый режим работы.

Появившееся на экране сообщение ОК подтверждает готовность Бейсик-системы принять команду или строку программы. Для управления системой предназначены 20 различных команд; рассмотрим их подробнее.

AUTO L, S - автонумерацня строк программы. Здесь L - начальный номер строки, S - шаг нумерации. Параметр S можно опустить, тогда номер каждой следующей строки будет на 10 больше, чем предыдущей. Команда AUTO, нумерует строки, начиная нумеровать строки с адреса 10 с шагом 10. Команда AUTO нумерует строки, начиная с текущей. Кстати, точка - это вполне самостоятельная команда. Она вызывает на редактирование текущую строку, то есть строку, которая была последней введена, последней отредактирована или выведена командой LIST, а также если она была причиной остановки из-за ошибки. Чтобы выйти из режима автонумерации, достаточно нажать клавишу СТОП.

BLOAD "ИМЯ", R, А - считывает программу в машинных командах (кодах) с магнитофона. ИМЯ - это имя файла, R - ставят в тех случаях, когда хотят, чтобы программа автоматически стартовала сразу же после считывания, А - адрес загрузки. Если не указывать R и А, то программа окажется точно в той области ОЗУ, откуда она была скопирована на магнитную лепту. Командой BLOAD считываются только файлы типа .BIN. Нужно отмстить, что в Бейсике-БК встречаются три типа файлов: ИМЯ.ASC - текстовые файлы, ИМЯ.COD - файлы во внутреннем формате системы и ИМЯ.BIN - файлы в машинных командах. Тип файла зависит от команды записи, причем обозначение типа Бейсик добавляет к имени автоматически.

BSAVE "ИМЯ", A1, A2 - записывает на магнитофон содержимое области ОЗУ, от адреса А1 до адреса А2. С помощью этой команды, например, на магнитную ленту записывают программу с подпрограммами в машинных кодах - файл типа ИМЯ.BIN.

CLOAD "ИМЯ" - этой командой можно ввести с магнитофона только те файлы, которые были записаны командой CSAVE, то есть файлы типа ИМЯ.COD.

CONT - продолжает исполнение программы, прерванное клавишей СТОП или командой STOP. Можно выводить на экран значения переменных, изменять их и вновь продолжить исполнение программы, но если перед CONT будет отредактирована хотя бы одна строка программы, то команда работать не сможет.

CSAVE "ИМЯ" - выводит текст программы на магнитофон в так называемом внутреннем формате системы, то есть в виде файла типа ИМЯ.COD. Этот формат соответствует команде CLOAD "ИМЯ".

DELETE L1-L2 - удаляет строки программы, начиная с L1 и до L2. Если опустить один из параметров, оставив тире, то будет удалена часть программы от ее начала до L2 или от L1 до конца. Команда DELETE с одним параметром L удаляет строку L; команда DELETE убирает текущую строку.

FIND - управляет двигателями магнитофона. Если указать имя программы, то команда FIND "ИМЯ" остановит магнитофон после того, как закончится файл с заданным именем.

LIST L1-L2 - выводит на экран текст программы от строки L1 до строки L2. L1 или L2 можно опускать, точно так же, как в команде DELETE. Оператор LIST без параметров выводит на экран всю программу, однако нужно помнить, что на экране помещаются только 23 строки.

LLIST LI-L2 - действие этой команды ничем не отличается от действия команды LIST, но текст программы выводится не на экран, а на принтер.

LOAD "ИМЯ", R - считывает программу из файла типа ИМЯ.ASC с магнитофона и запускает ее. Так можно считать только тс файлы, которые были записаны командой SAVE.

MERGE "ИМЯ" - позволяет объединять Несколько файлов типа ИМЯ.ASC в одну программу. Исполняя эту команду, Бейсик-БК добавляет строки считываемой с магнитофона программы к тем, что уже имеются в памяти. При этом если встречаются строки с одинаковыми номерами, то старые строки с соответствующими номерами пропадают - на их месте оказываются вновь введенные. В некоторых партиях машин эта команда не работает.

MONIT - по этой команде Бейсик передает управление Монитору.

NEW - очистка ОЗУ (удаление текста программы и значений переменных).

RENUM L, О, S - оператор перенумеровки строк программы. О - номер строки, с которой начинают перенумеровку, L - новый номер, который следует присвоить строке О, S - шаг нумерации, то есть целое число, на которое должны различаться номера всех строк после строки L. Если опустить О (то есть набрать команду RENLM L,,S), то L станет номером первой строки программы. RENUM без параметров присваивает первой строке номер 10 и перенумеровывает все строки программы с шагом 10.

RUN L - запускает программу, начиная со строки L. Текст программы компилируется, затем происходит распределение ресурсов ОЗУ и выполняется полученная последовательность машинных команд.

Команды можно вызывать, нажимая соответствующие им клавиши-ключи - от K1 до K9. Действие клавиши ВС и ШАГ можно отнести к командам Бейсика-БК. Нажатие на клавишу ВС восстанавливает на экране только что исполненную строку, или вызывает последнюю введенную, или последнюю отредактированную строку программы. Если нажать на клавишу ШАГ, то выполняется очередной оператор; эта команда предназначена для отладки программы.

ДЖЕНТЛЬМЕНСКИЙ НАБОР
Теперь, когда мы знаем все команды, необходимые для работы с Бейсик-системой, можно приниматься за программирование. Операторы, используемые в программах, разделим на две группы: операторы, которые используются постоянно - своеобразный джентльменский набор языка, и те, которые встречаются далеко не в каждой программе.

Первую группу открывает оператор LET V=F. Кстати, ключевое слово LET можно опускать, записывая V=F вслед за номером строки. Вычисленное значение выражения F будет присваиваться переменной V.

В ту же группу следует включить оператор безусловного перехода GOTO L. Действие этого оператора не отличается какими-либо особенностями, он передает управление на строку с номером L, где L - это целое число от 0 до 65535, и не может быть переменной величиной, что допустимо в некоторых версиях Бейсика. В тех ситуациях, когда переход на ту или иную строку должен зависеть именно от значения переменной, используют оператор ON V GOTO L1, L2,... Здесь L1, L2,...- список номеров строк программы, V - переменная или выражение. Если значение V оказывается равным нулю или превышает количество строк, упомянутых в списке, то управление передается на следующий после ON оператор. В противном случае, если V окажется равным, например, двум, управление будет передано на строку, номер которой стоит в списке вторым, то есть на L2.

Так же (но в зависимости от условия) работает оператор IF (?) THEN OP1 ELSE OP2. Здесь (?) - условие, при истинности которого выполняется OP1, в противном случае - ОР2. Условие может быть совсем простым, например, А% или достаточно сложным, например, A>R OR R>=SIN(10*INT(Q))AND C%. Выражения ОР1, OP2 - это любые операторы Бейсика за исключением IF, или номера строк, куда требуется передать управление.

Есть и другая форма записи этого оператора, которую используют только для передачи управления на строку L в зависимости от условия (?): IF (?) GOTO L ELSE OP. Если ELSE OP отсутствует, то при ложном значении условия управление будет передаваться следующей строке программы.

Оператор цикла FOR I=B TO E STEP S вместе с оператором NEXT I позволяет организовать повторное исполнение фрагмента программы, заключенного между ними. Здесь I - переменная цикла, В - начальное значение переменной, Е - конечное значение переменной (В и Е могут быть арифметическими выражениями), S - шаг цикла- также число или арифметическое выражение. Шаг цикла определяет, насколько увеличится значение переменной цикла по команде NEXT. Слово STEP можно сокращать до ST. Разрешен досрочный выход из цикла, а вот входить в него можно только через строку с FOR.

Внутри одного цикла можно разместить сколько угодно других циклов, при условии, что каждый следующий цикл размещается полностью внутри предыдущего.

Подобно FOR и NEXT пару образуют операторы READ и DATA. Оператор DATA C1, C2,... определяет константы, перечисленные после слова DATA. Этот оператор можно размещать в любом месте программы. Значения констант можно читать оператором READ V1, V2, ...,- он считывает значения из оператора DATA и присваивает их переменным, перечисленным после слова READ. Если константы в операторе DATA кончились, а оператор READ еще не выполнен, то Бейсик отыскивает второй оператор DATA и продолжает считывать константы.

Иногда требуется присваивать значения одного набора констант различным переменным, в этом случае в программу включают оператор RESTORE L. Он восстанавливает все (уже считанные оператором READ) значения в операторах DATA в строках с номером большим или равным L, и считывание продолжается с константы первого оператора DATA, встреченного начиная со строки L.

Оператор RESTORE восстанавливает все константы во всех операторах DATA. Тип переменных и констант может быть любым из тех, что допускает Бейсик-БК, но тип считываемой константы должен совпадать с типом переменной, иначе попытка, например, присвоить символьную константу числовой переменной приведет к ошибке.

Еще одна неразлучная пара - это GOSUB N - RETURN. Оператор обращения к подпрограмме GOSUB N передает управление на строку N. Оператор RETURN должен завершать каждую подпрограмму. Он возвращает управление на следующий оператор после GOSUB N, когда выполнение подпрограммы завершено.

Операторы INPUT "..."; V1, V2 и PRINT - обеспечивают диалог программы и пользователя. Оператор INPUT служит для ввода в программу значений переменных любого типа. "..." - текст подсказки, которую компьютер выведет на экран. Вводимые с клавиатуры данные отображаются на экране, их можно исправлять клавишами редактирования, а завершается ввод клавишей ВВОД. Всего можно ввести не более 255 символов.

Оператор PRINT выводит на экран значения переменных, выражений, любые символьные константы. Об этом операторе стоит рассказать подробнее, поскольку практически нет таком программы, где бы он не встречался. Если речь идет о переменных, разделенных запятой, то PRINT выводит значение каждой из них в поле из 16 позиций. Вместо запятой можно ставить точку с запятой - тогда числа на экране будет разделять лишь один пробел. Символьные константы, перечисленные через точку с запятой, появляются на экране без пробела. Кстати, запятая или точка с запятой могут заканчивать список - в этом случае следующий оператор PRINT продолжит вывод на экран в ту же строку экрана.

Ключевое слово PRINT набирать не обязательно - для Бейсика в этом качестве может выступать знак вопроса.

Неисполняемый оператор REM предназначен для того, чтобы включать в программу строки комментарии. Неисполняемым его называют потому, что при компиляции он выбрасывается и не влияет на быстродействие. Комментарии после слова REM можно записывать, начиная с любой позиции. Впрочем, кроме строк REM, комментарии можно размешать в любых строках программы (исключение составляют операторы DATA) - для этого достаточно отделить текст комментария апострофом. В строках с REM апостроф не требуется.

Оператор END - это признак завершения программы. По этой команде компьютер закрывает все файлы, которые открыты (об этих операциях, мы еще поговорим), и переводит компьютер в режим ожидания. Команду удобно использовать, например, для того, чтобы отделить текст основной программы от текста подпрограммы.

Два оператора, которые также относят к первой группе, распределяют память компьютера. Первый из них - оператор DIM. Он выделяет, или, как говорят программисты, резервирует память для массивов. Вслед за именем массива в скобках указывают максимально возможное значение каждого индекса. Индексов может быть один или два, каждый из них - в диапазоне от 0 до 255. Отметим, что два массива не могут иметь одно и то же имя.

Оператор CLEAR B, P также распределяет память. Здесь В - это целое выражение, определяющее, сколько байт памяти следует зарезервировать для размещения символьных переменных. Исходное значение В=200. Величина Р устанавливает, как много памяти БК отводится для работы Бейсика. Кроме распределения памяти, оператор очищает значения переменных, закрывает все открытые файлы. Максимально допустимо значение Р = 70000. В использовании этого оператора немало тонкостей, о которых просто невозможно рассказать в небольшой статье,- на практике эти детали освоить легче.

БК-ХУДОЖНИК
Нетрудно догадаться, что речь пойдет об операторах работы с графикой. Таких всего восемь, но с их помощью на экране БК достаточно легко можно создать довольно сложное изображение.

Прежде чем говорить о рисовании на экране, надо научиться готовить экран к этому. Оператор CLS окрашивает экран в текущий цвет фона (для владельцев черно-белого телевизора он просто очищает экран).

Второй оператор, работающий со всем экраном,- это COLOR С, F. Здесь С - параметр, определяющий цвет основного изображения (соответствие цветов цифрам приведено в таблице), F определяет цвет фона (0 означает черный цвет). После включения БК. автоматически устанавливает 0 для фона и 1 для изображения.

Матчасть диванного танкиста - Страница 4 89030310
Цифрами от 0 до 4 кодируется цвет в операторах, работающих с графикой.

Минимальный элемент изображения - это точка. Чтобы окрасить точку в заданный цвет, служит оператор PSET STEP(X, Y), С. Здесь STEP - это служебное слово, означающее, что от текущего положения графического курсора следует отступить на X точек по горизонтали и Y точек по вертикали. С - код цвета, в который должна быть окрашена точка. Отсутствие С указывает Бейсику, что речь идет о точке, окрашенной в текущий цвет изображения.

Оператор PRESET STEP(X, Y), С - это полная противоположность оператору - он может окрасить точку п любой заданный цвет, но если С отсутствует, то точка будет окрашена в цвет фоня, то есть стерта.

Два оператора работы с точками дополняет функция POINT. С ее помощью, например, если ввести в программу строку С=POINT(X, V), можно узнать, в какой цвет окрашена точка с координатами X, Y. В случае, если координаты точки по ошибке указаны за пределами экрана, то С=-1.

Линию можно представить, как последовательность точек и вычерчивать ее, используя оператор PSET в цикле, но создатели Бейсика предусмотрели специальный оператор LINE STEP(X, Y) - STEP(X1, Y1), С. Этот оператор существенно упрощает задачу программиста: достаточно указать координаты начала отрезка (относительно текущей позиции графического курсора), координаты конца отрезка, цвет линии С, и компьютер вычертит заданную линию. Если дополнить список параметров буквой В, отделенной, от списка запятой, то вместо линии на экране компьютера появится прямоугольник - такой, что вычерченная в предыдущем примере линия является его диагональю.

Список параметров можно упрощать, например, вместо ключевого слова STEP использовать значок ". Если опустить STEP, то координаты будут отсчитываться не от текущего положения курсора, а от верхнего левого угла экрана. Опуская (X, Y), мы выбираем за начальную точку отсчета текущее положение графического курсора. Отсутствие С, говорит о том, что строится линия текущего цвета. Какие бы значения ни принимали переменные X, Y, X1, Y1,- изображение не выйдет за пределы экрана.

Кроме прямоугольника, в словаре графических терминов БК имеется окружность. Ей соответствует оператор CIRCLE STEP(X, Y), R, С, АВ, AE, D. (Впрочем, с его помощью на экране можно нарисовать не только окружность, но и эллипс или дугу любого размера и цвета - об этом чуть ниже). STEP(X, Y) задаст координаты центра окружности относительно текущей позиции графического курсора, R - радиус окружности, С - номер цвета окружности.

Если речь идет о дуге, то список параметров дополняется величинами АВ и АЕ (углы, заданные в радианах, определяющие положение начальной и конечной точек вычерчиваемой дуги). Чтобы начертить эллипс, параметры АВ и АЕ опускают, сохранив, однако, запятые, и дополняют список параметром D (отношение осей вычерчиваемого эллипса).

Любую часть экрана, например, вычерченный прямоугольник, можно закрасить в заданный цвет - для этого используют оператор PAINT STEP(X, Y), С, В. В пояснении нуждается только параметр В - он определяет цвет границы области, которую требуется закрасить. Впрочем, если его не указать, то БК будет считать, что границами являются внешние контуры фигуры, вычерченные цветом С.

Еще один оператор, удобный для рисования- это DRAW... Точки означают строку графических команд. При умелом использовании этот оператор обладает колоссальными возможностями, но в данной версии Бейсика он более похож на избалованное дитя - масса синтаксических требований, оговорок и чувствительность к ошибкам делают его использование не столь удобным, сколь это могло быть. Кроме того, несколько повторных запусков оператора с ошибкой могут привести к
потере программы.

Матчасть диванного танкиста - Страница 4 89030410
Команда DRAW обладает широкими возможностями - с ее помощью можно нарисовать картинку на экране, не используя остальные команды работы с графикой.

Команда DRAW обладает широкими возможностями - с ее помощью можно нарисовать картинку на экране, не используя остальные команды работы с графикой.


Параметры оператора - в таблице. Добавим к ней несколько несложных рекомендаций. Команды черчения прямой линии можно набирать без пробелов между ними, а в случае если в качестве аргумента используется переменная, то после нес лучше ставить точку с запятой. После префикса, напротив, никаких знаков не требуется. Точку с запятой следует ставить между всеми остальными командами. Если в процессе работы вы изменяли масштаб командой S, не забудьте восстановить исходный масштаб командой S0.

И все же для того, чтобы эффективно работать с Бейсиком-БК, необходимо изучить еще немало команд и функций. Только владея всем богатым арсеналом Бейсика-БК, программист сможет оптимальным образом использовать возможности "Электроники БК". Об этих более сложных командах мы поговорим на следующем занятии "Школы".

[ ЗАПИШИТЕСЬ В МКК
В декабре 1988 года в Москве в Центре международной торговли состоялось подписание Договора об учреждении Международного компьютерного клуба (МКК). Новый клуб является международной неправительственной организацией, созданной на независимой основе для всемерного развития международных связей в области современной компьютерной техники и информатики, пропаганды и распространения компьютерной грамоты и культуры.

Клуб - это своего рода отделение ассоциации "Интерзнание", созданной на базе Всесоюзного общества "Знание". Он действует под девизом "Информатика на службе международного диалога". Участниками клуба могут быть государственные органы, учреждения и представительства, международные организации, объединения, предприятия и организации, созданные на государственной, кооперативной, частной или общественной основе, независимо от их национальной принадлежности и местонахождения, а также любые физические лица, независимо от их гражданства или подданства и постоянного местожительства. ]
***

А вот, для примера, аналогичная книжка по GW-BASIC первых IBM PC (англ.) Матчасть диванного танкиста - Страница 4 Leaf10PDF, 0.8МбМатчасть диванного танкиста - Страница 4 Leaf10
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Фев 25, 2023 12:35 am

4/89
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

В этом выпуске раздела представлены интересы всех его читателей - работающих с микрокалькуляторами, бытовыми компьютерами и на больших ЭВМ. Если вы приверженец лишь одного из этих видов вычислительной техники, просмотрите материалы, относящиеся к другим видам: в одной из заметок скрыта первоапрельская шутка.

РАСЧЕТ РЕЙТИНГА
В шахматах широко используется рейтинг (англ. rating - оценка), который по сравнению со спортивным разрядом даст более объективную оценку игроков.

Классификация на основе рейтинга особенно привлекательна для блица и активных шахмат. Кроме того, ее можно использовать и в шашках, рэндзю, го и т.д. Предлагаемая программа применялась при проведении турниров по шахматам в Московском энергетическом институте.

Используемые формулы:

Матчасть диванного танкиста - Страница 4 89040110

Коэффициенты: a=3**0.005 мю в системе Эло равен 10, из опыта автора - 20; i - номер участника.

Структура программы:
00-08 Расчет Кср для i-ro участника.
09-25 Расчет Nож.
26-33 Расчет ДК.
34-36 Вывод результата Кн.

00. ПX8 01. KПX0 02. ХПВ 03. - 04. ПX9 05. 1 06. - 07. / 08. ХПС 09. ПХВ 10. - 11. 5 12. ВП 13. 3 14. /-/ 15. * 16. 3  17. FxY 18. 1 19. + 20. F1/x 21. ПX9 22. 1 23. - 24. * 25. ХПЕ 26. ПXA 27. x-y 28. - 29. 2 30. 0 31. * 32. К[x] 33. ХПD 34. ПХВ 35. + 36. С/П 37. БП 38. 00.

Ввод данных. Коэффициенты игроков Кc заносим в Р1-Р7, их сумму в Р8, номер последнего из Р1-Р7, зависящий от количества игроком, увеличим на 1 и заносим в P0 m в Р9, N7 в РA, В/0, С/П.

После останова выводим данные: РХ - Кн, РВ - Кс, PC - Кср, PD - ДК, PF - Nож. Затем N6 в РА, С/П - получим на индикаторе рейтинг следующего игрока и т.д.

Для большего числа участников расчет можно вести по упрощенной системе. Для этого в программе заменим две ячейки: 08. ПХС и 38. 08, исключив таким образом шаги 00-07. Работа с программой в эгом случае выглядит таким образом: ввести Кср, в PC, Кс, в РВ, m в Р9, N в РА, далее набираем БП 08, С/П. Вывод происходит так же, как и и предыдущем случае, затем Кс, в РВ, N в РА, С/П и т.д.

Разница коэффициентов, полученных первым и вторым способами, тем больше, чем меньше игроков и чем больше разница в их коэффициентах.

Начальные оценки: КМС - 2100, I разряд - 1900, II - 1700.
В.ШУКЛИН (г.Москва)

[ МАЛЕНЬКИЕ ХИТРОСТИ
В заметке Я.Панкова, напечатанной в 12/87, предлагается выпускать "кнопочные" телефонные аппараты с клавишами, расположенными так же, как у вычислительных машин. В аппарате ТА-620 для этого следует поменять местами разъемы контактов Р1 и Р3 жгута, соединяющего тастатурную панель с электронной схемой аппарата, и, соответственно, переставить кнопки 1, 2, 3, 7, 8, 9.
В.ФЕДИК, В.СИВЫИ (г.Горький).

В 2/87 год была опубликована маленькая заметка о команде "запятая" в режиме счета по программе для Б3-34. Предлагаю более правильную и полную формулировку ее определения, пригодную также для МК-61: "Команда "запятая", использованная в программе, стирает содержимое регистра X и восстанавливает в нем значение, бывшее после последней из команд - 0, 1, ..., 9, B^, ПХР, где Р = 0, 1, ..., 9, А, В, ..., Е".
С.ЗАЗОВСКИИ (г.Новомосковск Тульской обл.).

В статье "Адрес известен" (4/87) рассмотрена такая организация хранения программ в ППЗУ МК-52, когда очередная программа записывается с новой строки. При этом для каждой программы необходимо вычислить адрес начала в ППЗУ.

Я предлагаю другой способ: записывать программы в заранее назначенные зоны. Если предполагается записывать программы максимальной длины, то можно использовать следующие адреса: 1000098, 2020898, 3041698, 4062498, 5083291. Теперь можно стереть любую из программ, не затрагивая при этом соседние, и на ее место поместить новую. Для хранения библиотеки отлаженных программ предпочтительнее "плотная" запись, начальный адрес в этом случае вычисляется по формуле:

Ai = A[i-1]+2K[i-1],

где A[i-1] - начальный адрес предыдущей программы, K[i-i] - количество команд н предыдущей команде, кратное 7. При этом обеспечивается наиболее плотное заполнение ППЗУ.
В.ГАВРИЛЕНКО (г.Харьков) ]

АЛГОРИТМИЧЕСКИЙ ПРАКТИКУМ
Издательство "Наука" в 1988 году выпустило книгу С.А.Абрамова, Г.Г.Гнездиловой, Е.Н.Капустиной и М.И.Селюн "Задачи по программированию", в которую вошло более тысячи (1052, если быть предельно точным) задач для отработки основных приемом программирования. Публикуем восемь задач из книги:

75. Доказать, что любую целочисленную денежную сумму, больше 7 рублей, можно выплатить без сдачи трешками и пятерками. Для данного n>7 найти такие целые неотрицательные a и b, что 3а+5b=n.

413. Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали, равны нулю, а каждый элемент, не принадлежащий главной диагонали, равен 2, 1 или 0 (по числу очков, набранных в игре: 2 - выигрыш, 1 - ничья. 0 - проигрыш).
а) Найти число команд, имеющих больше побед, чем поражении.
б) Определить номера команд, прошедших чемпионат без поражении.
в) Выяснить, имеется ли хотя бы одна команда, выигравшая более половины игр.

422. При перепечатке текста па пишущей машинке часто получается так, что в конце строки остается несколько неиспользованных позиций. Число неиспользованных позиций меняется от строки к строке, и поэтому правый край отпечатанного текста получается неровным. Типографский набор дает ровный правый край, в частности, за счет увеличения промежутков между словами, встречающимися в строке. Предлагается составить программу, выравнивающую правый край текста.

810. Дано натуральное число, меньшее или равное 1000. Записать это число русскими слонами (семнадцать, двести пятьдесят три, тысяча и т.д.).

832. В некоторой библиотеке последний четверг каждого месяца - санитарный день. Дано натуральное число n, означающее номер года. Получить по порядку все числа, на которые в указанном году приходится санитарный день.

932. Дан русский текст. Требуется воспроизвести его звуковыми сигналами азбуки Морзе. Предусмотреть возможность регулировки скорости воспроизведения.

985. Дано поле с осями координат. По полю разбросаны небольшие круги. Указать набор функций, графики которых перечеркивают все круги.

Большинство задач книги сформулированы в строгой математической формулировке типа: дана прямоугольная матрица и три числа, найти... Вряд ли эта четкость способствует воспитанию специалиста-прикладника: ведь очень часто бывает так, что намного сложнее построить математическую модель, чем программу, ее реализующую.

[ МАЛЕНЬКИЕ РЕЦЕНЗИИ
Теория и практика идут рука об руку на протяжении почти всей книги Г.В.Славина "Программирование на программируемых микрокалькуляторах типа "Электроника Б3-34" (Таллинн: Валгус, 1988 ). Начинается рассказ о карманной ЭВМ, и сразу же автор предлагает читателю решить с ее помощью несколько несложных примеров. От первоначального знакомства с ПМК разговор переходит к простым вычислениям, стековой памяти, адресуем регистрам, составлению алгоритмов, программированию... Задачи, решаемые попутно, все усложняются, и когда заканчивается этот курс обучения, читатель способен с уверенностью применять собранные в приложении прикладные программы - их более 30.

Особую ценность заключает в себе помещенный в конце книги библиографический указатель. В нем перечислены и аннотированы не только книги о программируемых микрокалькуляторах, но и журнальные статьи, в том числе те, которые опубликованы под постоянными "компьютерными" рубриками в журналах "Известия вузов МВиССО СССР. Радиоэлектроника", "Наука и жизнь", "Техника - молодежи", "Химия и жизнь", а также в газете "Социалистическая индустрия" ]

1024 СОВЕТА
Байт восьмой

Один из самых распространенных и самых рутинных моментов в общении с персональным компьютером - это ввод столбца чисел, образующих в памяти машины числовой массив. Такую работу приходится выполнять, например, при статистической обработке опытных данных, при заполнении данных электронных таблиц и т.д. Эту малоквалифицированную работу часто поручают людям, не знакомым с тонкостями диалога человека с ЭВМ, не умеющим ликвидировать возможные сбои. "Поколдовав" немного над помещенной здесь программой (автор - В.Соколов из Одессы), написанной на Квик-версии Бейсика, процесс ввода массива чисел можно существенно облегчить и ускорить.

Матчасть диванного танкиста - Страница 4 89040210

57. До ввода числового массива сообщи машине возможный диапазон применения его элементов (см. строку 2). После этого машина сможет поправить тебя при грубых ошибках. Если, например, вводимые числа изменяются в диапазоне от 10 до 100, то пропуск десятичной точки в таком числе, как 11.37, машиной будет замечен - она потребует повторного ввода числа (см. строку 11).

58. Оформляй сообщение об ошибке аудиовизуально (строка 11): и текстом на дисплее, и звуковым сигналом, который в данном случае очень уместен, так как человек смотрит не на дисплей, а в исходный текст.

59. Пересчитывая элементы массива перед их вводим в машину (см. совет 3 в 8/87), заодно пронумеруй их, а при формировании запроса предусмотри вывод на дисплей текущего номера (строка 5). Это практически исключит такие типичные ошибки, как пропуск числа или его двойной ввод.

60. Если числа вводимого массива имеют одинаковый формат (одна цифра до запятой и одна после, например), то освободи человека от необходимости нажимать на повторяющиеся клавиши - на десятичную точку (а многие тут нажимают на "запятую". что чревато ошибками и сбоями) и на "Ввод". Пусть такую рутинную работу машина делает сама (см. операторы строк 7 и 10; кстати, вспомни о том, как работает оператор опроса клавиатуры без прерывания на строках 6 и 8, не требующий нажатия клавиши "Ввод").

61. Блокируй на клавиатуре клавиши, нажатие на которые в данный момент либо бесполезно, либо при ведет к сбою - см. циклы "до" на строках 6 и 8, реагирующие лишь на нажатие цифровых клавиш - от 0 до 9.

62. (Модификация совета 6 в 8/87). Досрочно выйти из цикла можно и без перехода к метке, поставленной вне тела цикла (что нарушило бы структурированность программы). Для этого достаточно перейти не к метке, а к программированию на более современной версии языка (и данном случае на Квик-версии - см. цикл с выходом из середины на строках).

63. Не спеши выделять в процедуры повторяющиеся участки программы - см. строки 6 и 8. В ряде случаев (а наша программа относится к ним) такая операция имеет отрицательный эффект оптимизации - программу она почти не укорачивает, но замедляет ее прогонку и ухудшает наглядность.

64. Разработай систему звуковых сигналов, подобную той, какая используется, например, в пионерлагерях для подъема, отбоя, построения и т.д. Она пригодится для музыкального сопровождения диалога человека с компьютером, когда различные короткие музыкальные фразы отмечают различные ситуации: ошибка при вводе элемента массива. нажатие лишней клавиши, окончание работы по программе и т.д. Машина может, например, победным маршем оглашать успешную компиляцию исходного текста программы.

КОМПЬЮТЕР ЭКОНОМИТ ЭЛЕКТРОЭНЕРГИЮ

Матчасть диванного танкиста - Страница 4 89040310

Многим пользователям ЭВМ хорошо знакома ситуация, когда периферия (принтеры, дисководы, графопостроители и др.) попусту транжирит электроэнергию, дожидаясь, пока центральная машина соизволит начать с ней диалог.

Включившись в борьбу за экономию энергоресурса, системные программисты нашей организации разработали алгоритмический язык Барсик с операторами, включающими и выключающими из электросети в нужный момент периферийные устройства ЭВМ. Здесь в качестве примера приведена Барсик-программа поиска первых десяти тысяч простых чисел проверкой делимости нечетных чисел натурального ряда на ранее найденные простые числа, хранящиеся в массиве Р.

После нахождения этих простых чисел (строки 10- 70) машина включает принтер (90), распечатывает числа (100), выключает из сети принтер (110), включает дисковод (120), записывает на диск эти же числа (130-150) и выключает дисковод (160). Последний оператор (170) не только выдергивает вилку ЭВМ из розетки, но и тушит свет в помещении.

За счет перехода от Бейсика к Барсику наша организация обязалась 89.04.01 рассчитать очередную сотню простых чисел на сэкономленной электроэнергии.
В.ЖАВОРОНКОВ (г.Москва)

ЛАБОРАТОРНАЯ РАБОТА
В учебных курсах понятие "лабораторная работа по программированию" обычно не фигурирует, а если и встречается, то под ним понимают просто написание и отладку программы. Между тем исследовательская деятельность совсем не чужда программистам. Объектами такого исследования являются ЭВМ и программа, а направление ею связано с быстродействием, размером, наглядностью, универсальностью и многим другим.

Вот пример такой проблемы. Вычисление функции х**4 возможно по меньшей мере десятком более или менее разумных способов:

1. Y = ((Х*Х)*Х)*Х
2. Y = (X*X)*(X*X)
3. Y = X**4
4. Y = (X*X)**2
5. Y = (X**2)*(X**2)

и так далее. Эти или подобные операторы существуют во всех языках. Предлагается сравнить скорость выполнения данных операторов. Для этого необходимо организовать цикл, в котором соответствующий вариант оператора выполняется достаточно много раз. После этого из общего времени работы программы необходимо вычесть время, необходимое для организации самого цикла (подумайте, как его найти), и разделить остаток на число повторении цикла.

Если на доступной вам ЭВМ нет возможности воспользоваться внутренним таймером, подойдут и обычные часы.

Аналогично можно исследовать время выполнения действий по извлечению квадратного корня разными способами, время обращения к переменной с индексом в сравнении с обычной и тому подобное.

Результаты будут сильно разниться для разных ЭВМ, операционных систем, трансляторов и их параметров, но в любом случае результаты представляют практический интерес и могут оказаться весьма неожиданными.
А.РАННИЙ (пос.Переделкино Московской обл.).

ОТ РЕДАКЦИИ. Надеемся, что читатели раздела станут присылать нам темы для новых лабораторных работ - содержательных, не очень сложных, интересных и поучительных.

ПРОГРАММА ЭКЗАМЕНАТОР

Матчасть диванного танкиста - Страница 4 89040410

В 8,12/86 в нашей рубрике были опубликованы две заметки с программами для "Искры 226": "Мою секретаршу зовут "Искра" и "К вам неожиданно нагрянули гости". В читательских письмах-откликах на эти материалы наряду с их положительной оценкой прозвучала мысль о тем, что если к вам и нагрянут неожиданно гости, то это скорее всего будут либо дозорные народного контроля, либо сотрудники ОБХСС. Первые накажут за малоэффективное использование вычислительной техники (превращение дорогой и дефицитной ЭВМ в обыкновенный будильник), а вторые будут допытываться, как "Искра" попала в частные руки.

Тем не менее идеи, заложенные в программы "Секретарша" и "Поваренная книга" (создание базы данных на магнитном диске и работа со встроенными часами), оказались плодотворными. Тому пример - программа "Экзаменатор", присланная москвичом В.Уткиным, позволяющая создать на базе ЭВМ автоматизированную систему обучения чему угодно. Примененное автором модульное оформление листинга программы сделало лишним ее подробное описание. Отметим лишь некоторые моменты.

1. Гибкий 8-дюймовый диск "Искры" умещает до 140 вопросов с 2-5 вариантами ответов, один из которых верный (см. строки 5-14).

2. Любой ранее записанный вопрсс с вариантами ответов можно подправить (см. строку 15). Такая необходимость часто возникает при апробации системы.

3. При экзамене машина "выуживает" вопросы с диска случайным образом, не допуская повторов. Алгоритм такой работы заимствован из программы "Лото" (см. 2/87).

4. Перед экзаменом можно задать не только число вопросов, но и время на обдумывание каждого (см. строку 16). Это исключит попытки экзаменуемого "пересидеть" экзаменатора - слишком длительное время обдумывания равносильно неверному ответу (см. строку 21).

5. При ответе экзаменуемого клавиши клавиатуры заблокированы - кроме, конечно, номеров вариантов ответа (см. строки 20-22).

6. Пустой цикл в начале строки 25 подобен путам, какие надевают на ноги пасущейся лошади,- он позволяет регулировать темп экзамена.

Операторы, реализующие два первых режима работы с системой (см. меню на строке 4), между собой переплетены. Это сделано по двум причинам. Во-первых, на это толкает дефицит места в журнале, а во-вторых, такое "спагетти" - наш подарок читателям-любителям программных ребусов.

Ждем от читателей доработок программы "Экзаменатор" в таких направлениях:
- возможность выдачи не только буквенно-цифровой, но и графической информации о вопросах и вариантах ответа;
- более сложная структура вопросов, когда при неверном ответе задается уточняющий вопрос или комментарий, и только после этого неправильный ответ на начальный вопрос засчитывается как поражение.

УГОЛОК СПЕЦИАЛИСТА

Матчасть диванного танкиста - Страница 4 89040510

Бейсик-программа (В.Сойкин, г.Смоленск), приведенная здесь, предназначена для поиска минимума многомерной функции в заданной области (см. запрос на строках 20-50) методом покоординатного спуска. Задача при этом сводится к серии одномерных оптимизаций с помощью подпрограммы (см. строки 150- 200), реализующей метод золотого сечения. В данном случае минимум ищется у функции Пауэлла (см. подпрограмму третьего уровня на строке 230), которую часто используют для тестирования программ оптимизации.

Двоеточия за номерами строк позволяют "перехитрить" Бейсик-машину и выделить структуру алгоритма решения задачи "паскалеаским" манером - отступами от левого края листинга.

Тем, кто интересуется проблемой оптимизации с помощью Бейсик-программ, рекомендуем литературу:
В.П.Дьяконов. Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ.- М.: Наука, 1987г.
Б.Банди. Методы оптимизации. Вводный курс: Пер. с англ.- М.: Радио и связь, 1988г.

[ МАЛЕНЬКИЕ РЕЦЕНЗИИ
... С виду это обычный компьютер. Но на его дисплее - цветомузыкальная мелодия. Такова компьютерная установка "Электронный художник", созданная в Казани, в студенческом конструкторском бюро "Прометей".

Фотография установки встречается в самом конце книги Б.М.Галеева, С.М.Зорина, Р.Ф.Сайфуллина "Светомузыкальные инструменты" (Москва: Радио и связь, 1988 ). Начинается книжка с глав, где излагается история светомузыки, проводится философское осмысление этого искусства. А затем - техника светомузыки: простейшие механические проекторы, радиосхемы, электронные устройства и, наконец, возможности применения компьютерной техники. И те, кто мечтает приложить свое увлечение компьютерами к задачам большим и оригинальным, могут взять в качестве путеводителя книгу Булата Галеева и его коллег. При своем небольшом объеме она насыщена информацией, отлично иллюстрирована ]

МИНИ-ОС "МИРАЖ"
Многим читателям знаком ХФОКАЛ, разработанный С.Зильберштейном из Кирова. МИРАЖ пока что не так известен, хотя обладает несомненными достоинствами. Это мини-операционная система низкого уровня: экранный ассемблер/дизассемблер, средства отладки и средства работы с файлами. В основном варианте система МИРАЖ работает в адресах 66000-77777 (то есть в 8 нижних строках экрана), оставляя свободным ОЗУ программ, что как нельзя лучше отвечает ее названию.

Перечислим файловые функции системы: загрузка файла с магнитной ленты, запись файла на магнитную ленту, загрузка и автоматический запуск программы, пуск программы, находящейся по заданному адресу, остановка магнитной ленты за заданным файлом, вывод на экран справки о файлах.

Среди отладочных функций МИРАЖА отметим следующие: пошаговый восьмерично-символьный дамп памяти по словам или по байтам, дамп регистров, пошаговый просмотр и изменение памяти по словам или по байтам, пошаговый просмотр и изменение регистров, пословное заполнение области памяти заданным кодом, побайтное перемещение области памяти так, что старая и новая области могут пересекаться, пословное сравнение областей и вывод на экран расхождений, пошаговая трассировка от заданного адреса, поиск заданного слова по маске, подсчет и вывод на экран контрольной суммы, поиск относительных ссылок на заданный адрес.

К явным достоинствам МИРАЖА нужно отнести то, что текст программы нигде не хранится, программа ассемблируется по мере ввода и появляется на экране путем дизассемблирования.

СИСТЕМА КОФОК
Кодово-фокальная система разработана москвичом Л.Радченко для создания программ, имеющих как кодовые, так и фокальные участки. Как известно, именно такие программы можно создавать гораздо быстрее, чем программы, написанные целиком в машинных кодах, а работают они намного эффективнее тех, что написаны полностью на Фокале. Система позволяет запускать фокальную часть программы, кодовую часть программы, запускать Фокал, запускать Отладчик БК, переходить из фокальной части в кодовую и обратно, обращаться из кодовой части программы к фокальным подпрограммам, обеспечивать автозапуск из пускового монитора программ, созданных на Кофоке.

Система КОФОК занимает совсем немного памяти - область адресов от 2000 до 2530. Еще одно достоинство системы - возможность использовать в программах практически все программное обеспечение, заложенное в ПЗУ компьютера БК-0010.

ОБМЕН ОПЫТОМ
Чтобы адаптировать игру "Видеоспорт" (П.Коноплей, г.Москва) к БК-0010.01. нужно загрузить ее и заменить коды по двум адресам: по адресу 1464 надо поставить код клавиши, которую вы хотите использовать для движения вверх, например, 32, по адресу 1512 - код для движении вниз, например, 33. Вот пример ввода: 1464А-32, (ВВОД).

Чтобы игра "КЛАД" останавливалась на клавшие СТОП, нужно по адресу 4116 заменить 12737 на 240, по адресу 4120 заменить 1000 на 240 и 4 записанную по адресу 4122, заменить также на 240. Управление человечком также можно переделать по своему вкусу, вот адреса: 12342 код ВПРАВО, 123444 - ВЛЕВО, 12346 - ВВЕРХ, 12350 - ВНИЗ, 12352 - стрельба НАПРАВО, 12354 - стрельба НАЛЕВО, 1362 - СМЕНА лабиринтов.
Л.ПИЛИН, А.КАЗАН (г.Ленинград).

Матчасть диванного танкиста - Страница 4 89040610

Есть много способов улучшить работу БК с магнитофоном. Один из них - включить между линейным выходом магнитофона и входом БК простейший фильтр. Указанные на схеме номиналы - лишь один из вариантов, более точно их можно подобрать с помощью программы ТЕСТ.
Д.АНТОНОВ (г.Томск).

Матчасть диванного танкиста - Страница 4 89040710

Идея мультфильма на экране ("Наука и жизнь" 10/87) мне понравилась, только вертолет был слишком маленьким. Свой вертолет я решил нарисовать на Бейсике. Программа несложная, но, экспериментируя с ней, можно получать разнообразные эффекты.
В.ЧУПРОВ (г.Печора)

ВРЕМЯ СЧЕТА НЕ ОГРАНИЧЕНО
Как часто случаются ситуации, когда длящийся несколько часов подряд расчет на микрокалькуляторе по программе приходится прерывать из-за окончания рабочего дня или поступления более срочного задания! Тут пользователям микрокалькуляторов будет полезен опыт работы с большими ЭВМ. При необходимости снять "длинную" программу до завершения счета оператор ЭВМ, желая сохранить результат и продолжить счет в другое время, переписывает на магнитную ленту или на диск содержимое всех ячеек оперативной памяти и записывает показания управляющих кодов на пульте управления машины. А чем хуже программируемый калькулятор? У него, конечно, нет накопителей на магнитных дисках или на ленте, но ведь и память у него гораздо меньше, значения из всех регистров можно переписать на бумагу вручную всего за 2-3 минуты.

Итак, если необходимо прервать счет, не торопитесь выключать микрокалькулятор. Нажмите клавишу С/П, затем ШАГ НАЗАД FПРГ. Правая пара цифр, появившаяся на индикаторе,- это адрес первой невыполненной команды, назовем его адресом прерывания и обозначим АП. Затем возвратим калькулятор в автоматический режим клавишами FABT и проследим по тексту прерванной программы, удовлетворяет ли АП двум условиям:
1) АП не принадлежит ни одной из подпрограмм, если таковые имеются в программе;
2) первая по порядку выполнения вычислительная, т.е. изменяющая содержимое регистра X1, команда, начиная с АП, исполняется до обращения к команде F() - то есть команде вызова содержимого регистра X1 в регистр X.

В случае, если не выполнено хотя бы одно из этих условий, пошаговым выполнением программы (нажатием клавиши ПП) выходим из подпрограммы или идем до выполнения команды F(). После такой корректировки АП необходимо узнать его новое значение - его покажет правая пара чисел на индикаторе после нажатия клавиш FПРГ.

Далее, восстановив автоматический режим FАBT, перепишем содержимое регистров стека (X F() Y F() Z F() T) и адресуемых регистров 0-Д. Теперь можно спокойно выключать калькулятор или вводить новое задание.

Для продолжения счета с места прерывания необходимо ввести, как обычно, прерванную программу, восстановить содержимое сначала адресуемых регистров, потом стека (T ^ Z ^ Y ^ X), установить значение АП командой БП АП и запустить программу клавишей С/П.

Пользуясь этим приемом, можно продолжать счет неограниченно долго.
С.КЛИМЕНКО (г.Челябинск)

ЭКОНОМЬТЕ ВРЕМЯ И... ДЕНЬГИ
Тот, кто готовил рукописи для публикаций, прекрасно знает, что большая доля времени да и будущего гонорара уходит на машинисток. Рукопись или ее часть приходится заново перепечатывать по нескольку раз - после отзывов рецензента, после работы редактора, после очередного творческого взрыва, когда приходится переделывать уже сделанное. И после выхода рукописи в свет ее опять приходится перепечатывать, если планируется переиздание. Как часто, глядя на чистовой вариант, в котором аккуратно исправлены ошибки и ОЧЕПЯТКИ машинистки, очень хочется переставить или заменить слова, вставить новую фразу или убрать лишнее! Но поезд уже ушел - на очередную перепечатку нет ни времени, ни денег...

Кооператив ПРИНТ при Московском энергетическом институте предлагает своим клиентам на практике освоить современные компьютерные методы обработки текстов.

Алгоритм услуги ПРИНТА:
1. Автор сдает рукопись (от руки) у забывает о ней думать.
2. В обусловленное время он подсаживается к компьютеру и редактирует на экране дисплея введенный в память машины текст. Эту работу он может проделывать неоднократно вместе с рецензентом, редактором, корректором, научным руководителем (в случае диссертации) и т.д.
3. Готовый текст выдается в виде твердой копии на бумаге и хранится на магнитном диске до нового использования.

Текст может содержать русские и латинские буквы, заглавные и прописные, а также рисунки.

За справками обращаться по адресу: 105835, ГСП, Москва, Е-250, ул.Красноказарменная 14, кооператив ПРИНТ при издательстве МЭИ.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вс Фев 26, 2023 12:51 am

5/89
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
Занятие ДВАДЦАТЬ ЧЕТВЕРТОЕ, где продолжается разговор о языке Бейсик-БК. По сравнению с Фокалом он работает в несколько раз быстрее, транслятор этого языка представляет более широкие возможности, но тем не менее серьезных и интересных программ на Бейсике-БК так и не создано. Дело не в том, что Фокал отбил охоту программировать на языках высокого уровня, и не в том, что Бейсик оставляет программисту чуть ли не вдвое меньше места в памяти машины, чем тот же Фокал. Причина кроется в незаметных на первый взгляд "мелочах", которые свели на нет все потенциальные возможности языка и превратили популярную версию Бейсик-МСХ в Бейсик-БК.
Если на прошлом занятии мы рассмотрели основные команды и операторы языка, то на этот раз речь пойдет о функциях и операторах, которые встречаются на практике, может быть, не столь часто, но тем не менее заслуживают внимания всех, кто собирается освоить Бейсик-БК.
Ведет занятие инженер А.БОРИСОВ (г.Москва)

РАБОТАЕМ С ПАМЯТЬЮ
Оператор РОКЕ Адр, V позволяет записывать значение непосредственно в ячейку Адр оперативного запоминающего устройства БК. V может быть константой, переменной нли целым выражением. Поскольку ячейки ОЗУ нумеруются четными числами, Адр должен быть четным. Если Адр окажется нечетным, то значение V будет записано по адресу Адр=Адр-1. Этот оператор - удобное средство для ввода данных в ОЗУ компьютера, например, текста подпрограммы-функцин в машинных кодах.

Пару к оператору РОКЕ составляет функция РЕЕК(Адр), позволяющая получить десятичное целое число, хранящееся в ячейке Адр. Адрес можно записывать в различных системах счисления, но обычно пользуются восьмеричной или десятичной системами счисления. В десятичной системе вместо адресов от 32768 до 65535 записывают числа от -32768 до -1.

Близка к PEEK-POKE (читается "пиик-поук") функция INP(Адр, М), необходимая для того, чтобы прочесть часть информации, записанной в 16-разрядную ячейку памяти. Двоичное число М выбирают по правилу: если требуется проверить - записана ли единица, например, в третьем разряде ячейки, то в третьем разряде в числе М также записывают единицу. Тогда, если в результате вычисления функции INP получится число, в третьем разряде которого записана опять-таки единица, значит, исходное предположение оказалось верным. Одновременно можно проверять любое число разрядов ячейки.

Еще один из операторов, работающих с памятью,- это оператор OUT Адр, М, С. Адр и М имеют те же функции, что и в случае с функцией INP, а С определяет - идет ли речь об установке в 1 разрядов, указанных в М (С!=0), или об очистке этих разрядов (С=0).

Функция FRE(V) выводит на экран свободный объем памяти в байтах для программы (когда V - любое число) или для символьных переменных (когда V - любой символ).

Оператор CALL предназначен для работы с внешним постоянным запоминающим устройством. Автору не приходилось на практике сталкиваться с этим оператором.

Матчасть диванного танкиста - Страница 4 89050110
БК выдает звуковые сигналы, длительность которых зависит от кода символа, соответствующего нажатой клавише. Опрашивается клавиатура (1, 2), вычисляется длительность сигнала (3), организуется цикл с необходимым числом повторений (4, 9), формируется заданная высота звука (6, 7).

ДИНАМИК. КЛАВИАТУРА, ЭКРАН
Одни из простейших операторов этого раздела - ВЕЕР. Всякий раз, когда он выполняется, встроенный пьезодинамик БК издает короткий звуковой сигнал, напоминающий сигнал нажатия клавиши.

Функция INKEY$ принимает значение символа, код которого в данный момент хранится в регистре данных клавиатуры. При этом в регистр данных записывается 0. Для выполнения этой функции БК не останавливается, поэтому ее удобно использовать всякий раз, когда диалоговый режим не требуется, например, в динамических играх.

Функция CRSLIN позволяет узнать вертикальную координату курсора. Начало координат (0,0) - в левом верхнем углу экрана из 24 строк. Горизонтальную координату от 0 до 31 (или от 0 до 63) выдает функция POS. Крайне редко применяется функция LPOS, указывающая, какое положение в строке занимает в данный момент печатающая головка принтера, подключенного к БК.

Установить курсор в заданную позицию можно с помощью оператора LOCATE X, Y, С. Здесь X и Y - константы, переменные или выражения,- координаты курсора: по горизонтали - X (32/64 позиции) и по вертикали - Y (24 строки), а С - код, определяющий наличие курсора (С!=0) или его гашение (С=0). В любом случае значения X и Y не должны превышать 255. Краткая форма оператора - LOCATE X работает со строками длиной не по 32/64 символа, а по 255 символов, то есть оператор

10 LOCATE 70

установит курсор на шестую позицию второй строки экрана, считая от строки с командой RUN. Краткая форма - LOCATE , Y устанавливает курсор в первую позицию Y-строки.

Если выводить информацию на экран оператором PRINT, то для того чтобы сдвинуть курсор вправо от текущей позиции до позиции X, где X отсчитывается от начала строки, используют функцию ТАВ(Х). На практике, однако, ею пользуются довольно редко - в этом качестве чаще выступают несколько пробелов, заключенных в кавычки.

Матчасть диванного танкиста - Страница 4 89050210
Курсор на экране, где бы он ни находился, гасится (1), формируется звуковой сигнал (2-4), и вновь включается курсор (5). Если нажата какая-то клавиша, управление переходит на строку 1. Последний оператор ничего не напечатает, но курсор сместится вниз.

КЛЮЧИ И ОТЛАДКА ПРОГРАММ
С операторами отладки программ связан по смыслу и оператор работы с ключами KEY К, А$, где К - это номер так называемого ключа, а А$ - новая функция ключа. Программируемые ключи - средство, облегчающее ввод и редактирование программы. Это аналог функциональных клавиш персональных компьютеров, то есть клавиш, за которыми можно временно закреплять произвольное значение, например, ввод одной илн нескольких команд. Каждая клавиша - это как бы миниатюрный специализированный компьютер, который в ответ на нажатие своей единственной клавиши выполняет какую-то заранее заданную программу. Программа функциональной клавиши БК должна состоять не более чем нз 16 символов. После включения питания все 10 клавиш запрограммированы самыми употребительными, с точки зрения конструкторов БК, командами. Напомним нх: K1 - COLOR, K2 - AUTO, К3 - GOTO, K4 - LIST, К5 - RUN:CHR$(12), К6 - COLOR 1, 0:СHR$(12), К7 - CLOAD", К8 - CONT:CHR$(12), K9 - ".":CHR$(12), К10 - CHR$(14):RUN:CHR$(12).

Пара операторов TRON-TROFF - прекрасные помощники для отладки программы. Встретив в программе оператор TRON, БК начинает отчитываться о каждой выполненной строке, выводя на экран ее номер. Такой режим работы компьютера называют трассировкой. Оператор TROFF отменяет действие TRON (знатокам английского подскажем, что названия операторов происходят от выражений trace on и trace off).

Матчасть диванного танкиста - Страница 4 89050310
Исходные значения ключей К1, К2 изменятся соответственно на TRON и TROFF.

ЧИСЛОВЫЕ ФУНКЦИИ БЕЙСИКА-БК
Эти функции практически полностью заимствованы из Фортрана, который оказал значительное влияние иа формирование первых стандартов Бейсика. Аргументом функции может быть число, переменная или арифметическое выражение. В таблицу включены 14 числовых функций. К ним иногда относят RND(S), которая служит для обращения к генератору псевдослучайных чисел Бейсика-БК. Здесь число со знаком. При S>0 генерируется каждый раз новая последовательность чисел, при S<0 - последовательность четко определяется мантиссой S. В случае S=0 выдается одно и то же число. К сожалению, автору неизвестен алгоритм, по которому работает этот генератор. Некоторые рекомендации по проверке генератора можно найти в заметке Ю.Зальцмана 87-го года.

Матчасть диванного танкиста - Страница 4 89050410

СИМВОЛЬНЫЕ ФУНКЦИИ
Говорят, что именно символьным функциям Бейсик обязан своей популярностью. По сравнению с Фортраном Бейсик дал возможность работать с цепочками символов, приспосабливая компьютер-вычислитель для решения не математических и инженерных, а повседневных "кухонных" задач, типа расчета биоритмов или создания психологических тестов. Было бы трудно собрать все функции в табличку, но и здесь можно выполнить взаимодополняющие пары функций.

Первая такая пара - это VAL(A$)-STR$(A). Если символьное выражение А$ начинается цифрами, то их последовательность будет преобразована в вещественное число двойной точности (учтен будет знак, если он и есть и символ порядка Е или D). В противном случае VAL(A$) окажется равно 0. Функция STR$(A), напротив, преобразует результат арифметического выражения А (значение переменной или константы) в цепочку символов - цифр, составлявших число. К сожалению, в версии Бейсика-БК функция STR$(A) получила новое "качество" - слева и справа она дополняет результат пробелами.

Вторая пара - функции ASC(A$)-CHR$(A). Действие функции ASC распространяется только на первый символ выражения А$. Результат вычисления функции - это код данного символа. Функция CHRf(A), напротив, принимает значение символа, код которого определяет А. В обоих случаях код символа лежит в интервале от 0 до 255.

С помощью функции STRING$(X, С) создают символьную переменную произвольной длины (в пределах от 0 до 255), которая состоит из одинаковых символов. Что это будут за символы - определяет переменная С. Либо это код символа, либо символьное выражение, в последнем случае первый символ этого выражения будет выбран за эталон. И, напротив, узнать длину символьной переменной А$, то есть количество составляющих ее символов, позволяет функция LEN(A$).

Для того чтобы выделить фрагмент длиной X из цепочки символов А$, начиная с символа N в самостоятельную символьную переменную В$, предназначена функция MID$(A$, N, X). Впрочем, так она действует только в том случае, если В$ стоит слева от знака присваивания, a MID$ - справа. Если поменять их местами, изменится и роль функции MID$. Она в этом случае заменит часть текста символьной цепочки А$ длиной X, начиная отсчет с символа N, содержимым символьной переменной В$.

Перевод из одной системы счисления в другую в Бейсике-БК решен на уровне функций. О функции STRf(A) уже говорилось, ее аналог для двоичных чисел - это BIN$(A). Любое А из диапазона (-32768, 32767) преобразуется в строку символов, соответствующих двоичному представлению. Функция ОСТ$(А) вычисляет строку из шести символов, соответствующих восьмеричному представлению числа А, результат вычисления НЕХ$(А) - самая короткая строка - всего из четырех шестнадцатеричных символов.

Среди прочих факторов, которые не добавляют привлекательности Бейсику-БК,- низкое быстродействие символьных функций. Это особенно заметно, если попытаться обрабатывать какой-либо текст, например, набор слов для словаря терминов.

Матчасть диванного танкиста - Страница 4 89050510
Первая программа из одной строки последовательно выделяет константу 56 из символьной константы "56-КОТ", преобразует 56 в символьную константу "56" и печатает ее длину - 4. Вторая программа вычисляет код первого символа символьной переменной, а затем печатает символ, соответствующий коду, то есть S. Третья программа выделяет фрагменты из символьной константы (3-4) н заменяет ее часть.

РАБОТАЕМ С МАГНИТОФОНОМ
Операторы и функция, о которых пойдет речь,- одни нз наиболее важных, но, к сожалению, они довольно капризны. Подобно тому как на магнитную ленту записывают программу для БК, чтобы затем считывать ее в память компьютера, так и данные - значения переменных - можно сохранять на магнитной ленте н вводить их вновь, всякий раз, когда это необходимо. Записи на ленте организованы в виде так называемых файлов - последовательных списков значений переменных. Для того чтобы подготовить Бейсик-систему к записи, служит оператор OPEN "FN" FOR OUTPUT, где FN - имя данного файла,- комбинация не более чем шести символов. Имя нередко дополняют расширением, которое указывает на тип файла, например, "СТАТЬЯ.ТХТ". Если не указывать тип файла, Бейсик-БК автоматически дополнит его расширением .DAT.

Итак, файл создан, и его можно заполнять данными. Для этого предназначен оператор PRINT# А. В данном случае А - это тоже имя, но уже имя переменной - числовой или символьной, значение которой мы собираемся сохранить в файле на магнитной ленте. В открытый файл можно вывести любое число переменных (информация автоматически выводится на магнитофон блоками по 256 байт). Здесь кроется один из досадных недостатков версии Бейсика-БК - каждую переменную необходимо выводить собственным оператором PRINT^. Это единственная из нескольких, известных автору версий Бейсика, которая столь неэкономно относится к и без того скромным ресурсам памяти БК. Вдобавок капризный оператор не позволяет, чтобы его эксплуатировали в цикле - в этом случае, а также, если между двумя операторами PRINT# вклинится любой другой оператор, не удастся считать с магнитной ленгы "записанные" таким образом данные.

На этом можно было бы и завершить описание операторов, работающих с файлами, поскольку маловероятно, чтобы они нашли серьезное практическое применение до тех пор, пока кто-нибудь не позаботится об устранении дефектов транслятора Бейсика-БК. И все же имеет смысл завершить описание, поскольку в целом действие этих операторов напоминает систему работы с файлами на других домашних компьютерах и пригодится, если не в практических, так в учебных целях.

Итак, данные записаны на ленту. Чтобы компьютер получил указание об этом, необходима команда CLOSE. Эта команда закрывает открытый файл, то есть запрещает доступ в область оперативной памяти компьютера, где он временно хранится. Запись на ленте дополняется двумя восьмеричными кодами 12 и 32 (перенос строки и указатель конца файла).

Чтобы данные с магнитной ленты попали в программу, необходимо повторить последовательность действий. Вновь первым шагом будет команда открыть файл, ио на этот раз не для записи, а для считывания-оператор OPEN "FN" FOR INPUT. Разумеется, FN - старое имя файла, под которым он хранится на магнитной ленте. Файл открыт, но чтобы считать из него данные, используют еще один оператор - INPUT#... Точками обозначен список переменных, значения которых мы собираемся считать из файла. Имена переменных в списке должны разделяться запятыми. К тому же последовательность их расположения и написание имен должны в точности соответствовать тому порядку, который был принят в момент записи. Несмотря на все оговорки, этот оператор на практике оказывается не менее капризным, чем PRINTS.

Важно помнить, что следующим оператором после INPUT# должен быть CLOSE. Кстати, роль CLOSE могут сыграть также команды LOAD или CLEAR.

Считывая файл с данными, можно поэкспериментировать с функцией EOF. Если случится так, что очередной код, считанный оператором INPUT#, оказывается равен восьмеричному числу 32, то функция "End-Of-File" - "конец файла" примет значение - 1. В противном случае она будет равна 0. Без использования функции EOF всякий раз, когда число имен в списке оператора INPUT окажется больше числа значений, записанных в файле, произойдет ошибка, которая прервет выполнение программы. Функция позволяет в критической ситуации прекратить вычисления и закрыть файл.

Матчасть диванного танкиста - Страница 4 89050610
Первая программа формирует на магнитной ленте файл под названием FILE.DAT (3, 6) и записывает в него значения числовой и символьной переменных (4-5). Вторая программа считывает с магнитофона файл, который называется FILE.DAT (1, 3), присваивает переменным значения, извлеченные из файла (2), и выводит их на дисплей (4).

ФУНКЦИИ НА ЛЮБОЙ ВКУС
Казалось бы, в нашем описании собраны все нужные, относительно полезные и вряд ли необходимые функции. Между тем нх список можно было бы продолжать сколь угодно долго. Парадокса нет, все дело в том, что вне нашего внимания до сих пор оставались еще две функции или, скорее, два типа возможных функций.

Ближе всего к Бейсику функции пользователя типа FN. С помощью оператора DEF FN ИМЯ(...) = ФУНКЦИЯ к стандартному арсеналу можно добавить те функции, которых, по вашему мнению, не хватает в Бейснке-БК. ИМЯ в данном случае - это обозначение вновь создаваемой функции, отточия означают список переменных, которые будут ее аргументами. Разумеется, список может состоять из одного имени или вовсе отсутствовать. ФУНКЦИЯ - это любое выражение, связывающее переменные из списка (...) любыми математическими операциями или другими функциями. Здесь важно выполнять лишь два правила: запрещена рекурсия или обращение функции самой к себе, а кроме того, тип переменных в списке (...) должен в точности соответствовать тем, что использованы в определении функции.

Первое обращение к новой функции должно следовать за ее определением. Иными словами, все определения функций, сколько бы их ни было, лучше выносить в начальную часть программы. Тогда можно будет использовать их, где это необходимо по тексту, не задумываясь об определениях, подобно тому, как это происходит со стандартными функциями.

Обращаются к "самодельной" функции практически так же, как к любой стандартной, с той лишь разницей, что к имени новой функции добавляют FN, например, если была создана функция ROOT(X) = PI*SQR(X/2), то обращаться к ией можно, например, так: W=FNROOT(ALFA). Переменная ALFA правомерно заменяет X, который стоял в определении, поскольку относится к тому же типу. Транслятор Бейсика-БК на этот раз оказался на высоте и способен различить одинаково называющиеся переменные и имена функций.

Всякий пользователь БК, которого возможности Бейсика совершенно не удовлетворяют, имеет возможность несколько (иногда довольно значительно) расширить их с помощью функции USR. Прежде всего имеется в виду повышение быстродействия программы или появление в Бейсике дополнительных и весьма эффективных функций. К сожалению, описание будет поверхностным, мы лишь обрисуем потенциальные возможности, поскольку для настоящего использования функции, о которой идет речь, необходимо представлять себе особенности устройства БК и уметь программировать в машинных кодах.

Функция USR, как и FN, вводит оператором DEF USRC = Адр. Она позволяет обращаться к подпрограмме с номером С (от 0 до 9), которая составлена пользователем в машинных кодах и хранится в оперативной памяти БК, начиная с адреса Адр.

В качестве Адр допустимо использовать не только константу, но и переменную или арифметическое выражение. Текст машинной подпрограммы-функции USR записывают иа магнитную ленту вместе с основной программой - командой BSAVE. Прежде чем вводить функцию, для нее выделяют дополнительный объем памяти оператором CLEAR. В программе на Бейсике обращение к подпрограмме-функции в машинных кодах выглядит как USRC(Адр), где С - цифра от 0 до 9.

Впрочем, есть и другой способ работы, позволяющий использовать функцию USR, несмотря на все каверзы разработчиков транслятора. Всех, кто собирается иа практике работать с USR, адресуем к статье Д.Баронова (брошюра "Логическое программирование": Москва, "Знание", 1988).

Итак, мы познакомились еще с одним языком программирования. Для чего же необходим Бейсик? В БК-варианте он пригоден для первого знакомства и решения несложных повседневных задач, но, чтобы сделаться по-настоящему эффективным языком, ему необходима тщательная доработка. Призываем всех читателей высказывать свои предложения иа этот счет, а также сообщать обо всех замеченных расхождениях, которые обнаружатся при практическом использовании языка.
***

А что делали в те годы программисты IBM PC, когда операций GW-BASIC не хватало? Или просто не могли достать справочник по нему? Они спрашивали у друзей пиратскую распечатку "Журдена", в котором всякое IBM-XT железо было описано трижды: как к нему обратиться из BASIC, как сделать это через DOS-BIOS, как достучаться до самих микросхем:
Матчасть диванного танкиста - Страница 4 Leaf10DJVU, 10.1МбМатчасть диванного танкиста - Страница 4 Leaf10
***

ЛЕНТА НОВОСТЕЙ: Сегодня повезло, нашел в Сети листы правил старых советских настолок - "Атака" и "Синие и зеленые" Матчасть диванного танкиста - Страница 4 Leaf10ТЕМА #78, АБЗАЦ #907Матчасть диванного танкиста - Страница 4 Leaf10
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пн Фев 27, 2023 12:12 am

6/89
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Первый выпуск раздела "Человек и компьютер" за текущий год (2/89) был составлен из писем киевлян. Во вступлении к нему выражалась надежда, что какой-либо из следующих выпусков удастся составить из писем ленинградцев, горьковчан...
Первый отклик на это предположение был неожиданным. "На мой взгляд,- пишет И.Суровикин из Омска,- было бы разумнее делить читателей раздела не по территориальному, а по профессиональному признаку. Сам я по специальности химик-технолог и призываю своих коллег активнее писать в "Науку и жизнь", чтобы один из ближайших выпусков раздела "Человек и компьютер" можно было укомплектовать исключительно из выступлений химиков, освоивших в своей работе компьютер или, на худой конец, программируемый микрокалькулятор".
Что ответим на это, товарищи химики? Ждем от вас писем с алгоритмами и программами на химические темы!

ТАЙНА ГСЧ РАСКРЫТА?
Редакция получила почти одновременно два письма, где речь идет о генераторе случайных чисел в микрокалькуляторах МК-61 и МК-52. Автор одного из писем - Л.Титов из Красноярска - сообщает, что, по его мнению, для генерации псевдослучайных чисел в этих калькуляторах используется соотношение:

р[n+1]={10(рn+Y+Х7)/3+0.404067}

где 0.404067 - начальное (стартовое) число генератора, рn и p[n+1] - два соседних случайных числа из последовательности, выдаваемой генератором, Y - число, находящееся в регистре Y в момент нажатия клавиш Ксч, а Х7 - цифра, стоящая в этот момент в седьмом разряде числа, находящегося в регистре X. Мантиссы чисел, находящихся в регистрах X и Y, нормализуются - десятичная точка стоит после первой значащей цифры, знак числа и цифры порядка отбрасываются. В ОЗУ существуют специальные ячейки памяти для записи текущего значения чисел pn, которые недоступны для пользователя. Однако после выполнения операций, вводимых клавишей К (то есть К[х], К{х} и т.д.), результат замещает в ячейках ОЗУ случайное число pn, что и является, по мнению Л.Титова, источником многих бед.

Второе письмо на ту же тему в редакцию прислали создатели микрокалькуляторов МК-61 и МК-52 - сотрудники киевского ПО "Кристалл". Отвечая на многочисленные письма читателей, он,и пишут:

"Генератор псевдослучайных последовательностей обеспечивает получение ряда чисел, содержащего периодическую и непериодическую части. Длина этих частей, их состав и характер распределения чисел в интервале от 0 до 1 зависят от содержания регистра Y и ячеек памяти. Естественно, что при одинаковых исходных состояниях будут выдаваться и одинаковые последовательности. Так, при исходном нулевом содержании регистров, то есть сразу после включения микрокалькулятора, генератор выдаст последовательность, содержащую 89 чисел в непериодической и 145 чисел в периодической частях. Ради обеспечения нормальной работы этого генератора предприятие рекомендует для генерации случайных чисел использовать программу: ПХ0 В^ Ксч ХП0 С/П - последняя команда ставится, если нужна индикация псевдослучайного числа. Очередное псевдослучайное число будет генерироваться при возврате к началу программы. Рекомендация об использовании этой программы внесена в "Руководство по эксплуатации". Вводя в регистр 0 восьмизначное стартовое число, получим определяемую им псевдослучайную последовательность. Для получения новой последовательности достаточно изменить стартовое число и записать его в регистр 0".

Публикуя эти письма, редакция надеется, что они помогут нашим читателям использовать встроенный в микрокалькуляторы МК-61 и МК-52 генератор псевдослучайных чисел. Разговор, однако, нельзя считать законченным, так как в обоих объяснениях есть неясности, которые еще нужно уточнить. Так что любители могут продолжить поиски.

[ МАЛЕНЬКИЕ ХИТРОСТИ
Для экономии батарей калькуляторов Б3-34, МК-52 и сохранения программы в ПМК можно использовать своеобразный "режим памяти", в котором на индикаторе светится только десятичная точка и потребление энергии минимально. Для перехода в такой режим можно выполнить последовательность команд Сх ^ ^ ^ / ВП К. Для возврата в режим вычислений набрать F10X F10X Cx.
Г.ТАРАСОВ (г.Чита)

ОТ РЕДАКЦИИ. При экспериментальной проверке этого совета было обнаружено, что для МК-52 экономия составляет около 5 процентов (калькулятор потреблял 89мА в режиме ожидания, когда на индикаторе горел нуль, и 84мА в "режиме памяти"). Однако самым неожиданным оказалось то, что в режиме счета по программе потребление снизилось на 17 процентов относительно режима ожидания (до 73мА). Получается, что самый экономичный способ сохранения программы - ее работа? ]

В ДВУХ РЕЖИМАХ
Владельцам микрокалькуляторов МК-61 немало хлопот доставляет адаптация программ, написанных для МК-54 и содержащих команды со стрелкой - типа КП^. Между тем эти программы можно использовать для МК-61 без всяких доработок, если внести в электрическую схему калькулятора небольшие изменения. На фрагменте принципиальной схемы новые цепи обозначены пунктиром.

Матчасть диванного танкиста - Страница 4 89060110

Во избежание выхода из строя микросхем от воздействия статического электричества при переделке рекомендуется пользоваться паяльником с заземленным жалом, включенным в сеть через разделительный трансформатор, на заземленной металлической поверхности. Руки также должны быть заземлены с помощью металлического браслета через резистор с сопротивлением несколько мегом.

После переделки при включенном режиме "МК-54" вы будете иметь в своем распоряжении полную имитацию калькулятора этой марки: все команды со стрелкой, 98 шагов программы, 14 регистров и т.д. В заключение хочу поблагодарить А.Ф.Пшеничко - сотрудника киевского ПО "Кристалл", куда я обратился по этому вопросу,- за любезно оказанную консультацию.
В.КУДРЯВЦЕВ (г.Калининград)

КАЛЬКУЛЯТОРЫ СОВЕРШЕНСТВУЮТСЯ
Редакция получила ответ от изготовителя программируемых микрокалькуляторов МК-61 и МК-52 - киевского ПО "Кристалл" - на публикацию "Изобретем микрокалькулятор" в 12/88, подписанный главным конструктором А.Г.Шеревеней, руководителем госприемки В.В.Костиковым и заместителем главного инженера А.П.Перуцким. Публикуем его с небольшими сокращениями.

Частота тактового генератора микрокалькуляторов МК-61 и МК-52 выбрана исходя из номинальной частоты используемых микросхем. При более высокой частоте изготовитель не гарантирует безошибочной работы, хотя многие экземпляры, безусловно, останутся работоспособными, но потеряют гарантию из-за нарушения условий эксплуатации, установленных изготовителем.

Авторы некоторых публикаций - В.П.Дьяконов, Я.К.Трохименко и другие - без всякого согласования с объединением "Кристалл" сообщили читателям о "периферийных устройствах" для МК-52. Объединение отнюдь не планировало выпускать какие-либо иные устройства, кроме блоков расширения памяти БРП, представляющих собою постоянную библиотеку программ пользователя. Кроме специализированного блока БРП-2 с набором программ для решения навигационных задач, информация о котором опубликована в "Морском сборнике" 12/88, объединением выпускаются блоки БРП-3, содержащие 60 программ для решения математических задач. Этот блок выпускается серийно и поступает в продажу по цене 16 рублей. В 1988 году выпущено 15200 этих блоков, а в 1989 году планируется выпустить 80 тысяч. В 1989 году объединение приступает к выпуску блока БРП-4, содержащего программы игрового, спортивно-профессионального и бытового характера.

Дополнительный разъем установлен с технологической целью и служит для диагностики изделия в процессе его изготовления.

Разработка блоков, в которые информацию мог бы записывать сам пользователь, в нашем объединении не планируется.

Создатели и разработчики микрокалькуляторов могут гарантировать решение задач без ошибок только в том случае, если пользователь не нарушает правил эксплуатации. "Побочные эффекты" возникают при несанкционированном использовании операций или комбинаций команд, не оговоренных в "Руководстве по эксплуатации". Наиболее типичный пример - использование операции ВП для изменения порядка результата, хотя она предназначена только для изменения порядка операнда.

Невозможно оговорить в "Руководстве" все комбинации нажатий двух или трех клавиш из имеющихся тридцати, приводящие к неверному результату. Проще было бы не использовать комбинации, которые не указаны в "Руководстве".

С января 1989 года принимаются меры по улучшению работы клавиатуры. В калькуляторах, выпускаемых в этом году, устраняется "дребезг" контактов и двойное срабатывание. Но не все здесь зависит от изготовителя. Ведь и пользователи вносят в порчу контактов свою лепту: ударяют или резко нажимают на клавиши, нажимают на две клавиши одновременно, нажимают на следующую клавишу до того, как сработала предыдущая, и т.д. Надеемся, что мероприятия, проведенные объединением, и бережное обращение владельцев с клавиатурой обеспечат ее хорошую работу.

РАСЧЕТ ЗАДЕЛА В СТРОИТЕЛЬСТВЕ
Когда разрабатываются проекты организации строительства, много времени уходит на монотонные расчеты с однотипными действиями. Пример - расчет задела в строительстве, входящий в состав расчета сроков. Предлагаемая программа должна облегчить работу и сохранить время работникам проектных организаций и банков. Предназначена она для МК-61.

Расчетные формулы:
д=(Т/Т0)*n, где Т - нормативная продолжительность строительства (по таблицам СНиП 1.04.03-85), Т0 - общая расчетная продолжительность строительства, n - порядковый номер месяца (квартала).

K'n=Kn+(K[n+1]-Kn)d, где d - дробная часть д, Kn - нормативный показатель задела, соответствующий n-му месяцу (кварталу), K'n - расчетный показатель вышеупомянутой величины. Расчет на микрокалькуляторе возможен, если нормативная продолжительность варьируется от 1 до 10 месяцев (кварталов).

При вводе программы в ПМК необходимо по адресу 00 ввести команду XПN, где N=(n+1). По адресам 01 и 02 вводится двузначное число, равное n. По адресам 15-18 вводится определенное по таблицам СНиП отношение Т/Т0.

00. ХПN 01. ... 02. ... 03.ХП0 04. С/П 05. ПХ0 06. ХПЕ 07. x-y 08. КХПЕ 09. FL0 10. 04 11. 0 12. ХП0 13. КПХ4 14. ПХА 15. ... 16. ... 17. ... 18. ... 19. * 20. ХПС 21. С/П 22. К{х} 23. ХПД 24. ПХС 25. К[х] 26. ХПЕ 27. 1 28. + 29. ХПС 30. БП 31. 42 32. Сх 33. КПХЕ 34. ПХД 35. КПХС 36. КПХЕ 37. - 38. * 39. + 40. С/П 41. БП 42. 13 43. ПХЕ 44. 3 45. - 46. Fx=0 47. 50 48. 5 49. ХПС 50. ПХЕ 51. 4 52. - 53. Fx>=0 54. 32 55. ПХЕ 56. 1 57. + 58. ХПЕ 59. 1 60. + 61. ХПС 62. БП 63. 32.

Инструкция. 1. Определить отношение Т/Т0 и ввести в программную память по адресам 15-18. 2. Перевести калькулятор в режим автоматической работы. 3. Ввести исходные данные: показатели задела по нормам СНиП в порядке К10 С/П К С/П ... K1 С/П. 1-10 - порядковые номера месяцев (кварталов). 4. 1-й останов "д1" С/П. 2-й останов "K'1" (показатель задела для 1-го месяца в процентах от сметной стоимости в зависимости от общей продолжительности строительства). Далее попарно выводятся остальные дn и К'n.

Контрольный пример. Нормативная продолжительность - 8 месяцев. Расчетная - 10 месяцев. Т/Т0=0.80. В программу ввести команды: 00. ХП9 01. 0 02. 8 ... 15. 0 16. , 17. 8 18. 0 ... Ввести исходные данные: 100 С/П 95 С/П 82 С/П 63 С/П 45 С/П 0 С/П 27 С/П 16 С/П 8 С/П.

Результаты: 1-й останов д1=0.8, K'1=6.4. 2-й останов д2=1.6, K'2=12.8. 3-й останов д3=2.4, К'3=20.4. 4-й останов д4=3.2, К'4=30.6. 5-й останов д5=4.0, К'5=45. 6-й останов д6=4.8, К'6=59.4. 7-й останов д7=5.6, К'7=74.4. 8-й останов д8=6.4, К'8= 87.2. 9-й останов д9=7.2, К'9=76. 10-й останов д10=8, К'10=100. Результаты заносятся в таблицы согласно приложению 4 СНиП 1.04.03-85.
О.ТРОНОВ (г.Сочи)

МУЛЬТФИЛЬМ НА ИНДИКАТОРЕ
Логические операции можно использовать для создания мультфильма. Конечно, сюжет такого фильма необходимо рассказать заранее. Плохо лишь, что экран мал, да и смотреть приходится в полной темноте, но ведь и в настоящем кино так же.

Вот один из моих мультфильмов. Космический корабль "-" летит с Луны "L" на Землю "3". Сначала он делает прощальный круг вокруг Луны, затем совершает посадку на орбитальной станции "С" и, наконец, прибывает на Землю. Вот программа этого мультфильма:

00. ПХ1 01. В^ 02. B^ 03. В^
04. ПХ2 05. В^ 06. B^ 07. В^
08. ПХ3 09. В^ 10. B^ 11. В^
12. ПХ1 13. В^ 14. B^ 15. В^
16. ПХ2 17. В^ 18. B^ 19. В^
20. ПХ4 21. В^ 22. B^ 23. В^
24. ПХ5 25. В^ 26. B^ 27. В^
28. ПХ6 29. В^ 30. B^ 31. В^
32. ПХ7 33. В^ 34. B^ 35. В^
36. ПХ8 37. В^ 38. B^ 39. В^
40. ПХ9 41. В^ 42. B^ 43. 3
44. C/П 45. БП 46. 00.

Теперь необходимо занести в регистры памяти "кадрики" нашего мультфильма. Делается это так:

10888888 B^ 13747737 Kили К{х} ХП1 F()
13747237 Ки K{x} ХП2 F()
13737732 Kили K{x} ХП3 F()
13774772 Kили K{x} ХП4 F()
13774727 Kили K{x} ХП5 F()
13774277 Kили K{x} ХП6 F()
13724777 Kили K{x} ХП7 F()
13724777 Kили К{х} ХП8
3 /-/  ХП9.

Теперь остается потушить свет и пустить фильм командами В/0 С/П. Для повторного просмотра нажать С/П.
К.КОТИН (г.Ленинград)

[ УЗЕЛКИ НА ПАМЯТЬ
Я заменил в своем микрокалькуляторе "Электроника МК-61" элементы 316 аккумуляторами НКГЦ-0,45, которые полностью совпадают по размерам с элементами 316, но имеют в три раза большую емкость. Аккумуляторы рассчитаны на 500 циклов "заряд-разряд" и, учитывая их более высокую емкость, заменяют 4500 элементов, каждый из которых стоит 15 копеек, а весь комплект питания - 675 рублей. Три аккумулятора, обеспечивающих такую же продолжительность работы, стоят 9 рублей, а зарядное устройство для их зарядки - 3 рубля 25 копеек. Цифры говорят сами за себя.
А.КОРНЕВ (г.Москва) ]

[ МАЛЕНЬКИЕ ХИТРОСТИ
Предлагаю в начале ППЗУ отводить место для записи адресов программ, хранящихся в ППЗУ. Запись производится в режиме записи данных, начиная с адреса 0000. Это позволяет быстро находить адрес. Последние знакоместа, которые на адрес не влияют, можно использовать для определения названия программы. Я, например, использую их для указания номеров программ, которые храню в порядке возрастания номеров.
В.БАТКОВСКИЙ, ученик 8-го класса (г.Киев) ]

ПРЯМОУГОЛЬНИКИ И ТРАПЕЦИИ
Продолжаем публикацию программ, присылаемых в редакцию, под девизом "Единство формы и содержания" (6,10/88 ).

Матчасть диванного танкиста - Страница 4 89060210

Программы, написанные В.Чибисовым (г.Смоленск), предназначены для интегрирования функции на отрезке методом прямоугольников и методом трапеций (см. обзор методов интегрирования в 6/87.

Ждем от читателей новых программ.

СКАЗ ПРО ТО, АВТОМОБИЛИ
В некотором царстве, в некотором государстве жили-были старик со старухой, и было у них три сына. Как сыновья подросли, отправил их старик по белу свету в разные стороны счастья искать. Старшему сыну дал в дорогу овцу, среднему - кота, а младшему, Трифону, ничего ие досталось. Думал, думал старик да и говорит:
- А возьми-ка ты, Трифон, в дорогу две дискетки, кои в сундуке хранятся: одна со стандартным программным обеспечением,- а другая - чистая, для души.

Взял Трифон дискетки да и отправился в путь-дорогу. Близко ли, далеко, видит - перед ним стоит отель на курьих ножках, а перед отелем человек сидит, горькими слезами заливается.

Спрашивает Трифон:
- О чем печалишься, мил человек?
- Да как мне не печалиться, коли задал мне царь задачу непосильную? Видишь перед отелем стоянку для автомобилей? Да видишь ли, как стоят автомобили? Каждый вечер после заседания в царских палатах царевы гости будут подъезжать на автомобилях к отелю. Остановятся на ночлег, утром позавтракают да и опять отъедут в царские палаты. Царь дал приказ: каждый автомобиль может занимать любое свободное место на стоянке. А стоянка-то не размечена. Занимать ее можно только в один ряд, а которым гостям не хватит места - тем проезжать далее, к другим отелям: автомобилей-то много больше, чем мест на нашей стоянке. Длина стоянки - 8 саженей, ширина каждого автомобиля - одна сажень. В каждом автомобиле ровным счетом по три гостя. Дал мне царь 4550руб. на год, стало быть, на 365 дней, чтобы каждый гость получил утром завтрак ценою 70 копеек. Стал я думу думать: каждый день на стоянке останавливается разное число автомобилей, но самое меньшее - 4, а самое большее - 8. Стало быть, в среднем - 6 автомобилей. За год получится 6*365=2190. Ежели завтрак стоит 0.7руб., да в каждом автомобиле по три гостя, то от царя я должен бы получить 4599 руб. А он мне дал 4550. И откуда же я возьму 49 рублей? Не могу выполнить царские условия, оттого и печалюсь. А коли не выполню - не сносить мне головушки кудрявой. Тут Трифон и говорит:
- Не кручинься раньше времени, мил человек, ложись-ка спать. Утро вечера мудренее.

А когда солнце встало из-за леса, спрашивает Трифон:
- Мил человек, есть ли в твоем отеле персональный компьютер и транслятор с языка Паскаль?
- Да нешто мы не люди?- обиделся мил человек.- Где ж это видано, чтобы в отелях компьютеры не водились?

Обрадовался Трифон:
- Дай-ка я смоделирую процесс размещения автомобилей. Коли первый автомобиль случайно занял место на стоянке, то он разделил всю стоянку (А, В) на две части (A, Y) и (Y+1, В). Эти части не зависят друг от друга. Стало быть, каждую такую часть можно снова считать стоянкой, но меньшей длины. В каждой части можно снова попытаться разместить автомобиль. Белы светушки,- хлопнул себя по лбу Трифон,- да это же типичная рекурсия!

Матчасть диванного танкиста - Страница 4 89060310

- И то правда,- поддакнул мил человек.- Да вот незатея: коим же образом можно получать случайные значения Y?
- А о том сказано в писании 10/86. И про рекурсию там же поведано, но в другом номере - 2/88, в байке о ханойской Башне... Есть такой генератор RAND, который генерирует случайные числа с равномерным распределением в интервале (0, 1). С его помощью получим значение Y в интервале (А, В), смотри: Y=A+(B-А-l)*RAND, где l - ширина автомобиля. Если тебе, мил человек, в моих рассуждениях все понятно, то опусти очи свои на программу, которая составлена на языке Паскаль.

Матчасть диванного танкиста - Страница 4 89060410

- Верно ли я уразумел,- говорит мил человек, обозревши программу,- что функция AUTO моделирует случайное размещение автомобилей в течение одного вечера? Так что для подсчета всех автомобилей за год нужно повторить моделирование 365 раз?
- Верно, мил человек, верно.
- Батюшки мои! - удивился мил человек.- Это что же мы видим на экране дисплея после выполнения программы?! Автомобилей-то за год меньше, чем я считал в среднем. Стало быть, царь дал мне лишку денег. Вот радость какая! Однако, братец, меня и сомнения берут. Что, ежели повторить моделирование заново, ну, скажем, с другим генератором случайных чисел, но тоже с равномерным распределением в интервале (0,1)? Получу ли я тогда лишек денег?
- Непременно получишь, но, может, немного меньше, а может, и больше.

И пригласил на радостях мил человек Трифона к завтраку царскому, а у самого глаза разгорелися и мысли побежали в разные стороны.
- А что, братец,- заговорил мил человек,- что ежелн в каждом автомобиле будут сидеть не три человека, а случайно от 1 до 5, будет ли у меня еще лишек денег? Да будет ли он, ежели ширина автомобиля будет тоже случайна от 0.5 до 1.5 сажени?

Задумался Трифон...

А что скажет дорогой читатель?
Л.БЕРЕЗКИНА (г.Зеленоград)

[ УЗЕЛКИ НА ПАМЯТЬ
Для лучшего понимания тонкостей работы стека я предлагаю программу решения квадратного уравнения: АХ2+ВХ+С=0. При решении этого уравнения не используется ни одного регистра памяти, а программа получается короче, чем в справочных пособиях А.Н.Цветкова и В.П.Дьяконова. 00. / 01. - 02. FBx 03. / 04. В^ 05. /-/ 06. 2 07. / 08. Fx2 09. B^ 10. F() 11. FBx 12. - 13. Fsqr 14. + 15. - 16. FBx 17. С/П. Теперь по этой программе надо составить таблицу движения информации в стеке, которая наглядно покажет, как он работает.
А.РАССКАЗОВ (п/о Троицкое, Приморский край) ]

1024 совета
Судя по откликам, читателям пришлась по душе рубрика "1024 совета". Некоторые даже подсчитали, что с учетом периодичности выхода первых "байтов" последний, 1024-й совет будет опубликован не раньше 2048 года. Но, дорогие читатели, во-первых, рубрика питается вашими письмами, так что частота публикации "байтов" зависит от вас: во-вторых, в числе 1024 нет ничего магического - никому ведь не приходит в голову пересчитывать товары в магазине "1000 мелочей".

Теперь остановимся на замечаниях читателей по отдельным советам из первых трех "байтов" (см. "Наука и жизнь" 8/87, 2,6/88 ).

Совет 2, где говорилось про оператор REM. Он действует по-разному в ранних н последних версиях Бейсика. Первоначально этот оператор мог быть только единственным или последним оператором на строке, так как все символы, стоящие за словом REM (включая и разделители операторов), принимались за комментарии. В последних версиях Бейсика оператор REM такой особенности не имеет; здесь для временного исключения строки или даже целого блока программы можно рекомендовать оператор безусловного перехода (С.Петрухин, г.Курск).

Совет 4, рекомендовавший способы задерживать счет по программе: либо задавая строго отмеренную паузу пустым циклом, либо опираясь на показания таймера, либо запрашивая разрешения человека на продолжение работы после нажатия им определенной клавиши. Как справедливо отметил И.Финк из Ставрополья, первый способ задержки не позволяет распараллелить работу человека и компьютера. Последним же способом это удается: человек, к примеру, просматривает информацию на дисплее, а машина в это время ищет новую в архивной памяти; найдя ее, перегружает в оперативную, а после сигнала человека - на дисплей.

Советы 6 и 7 с их настойчивой пропагандой структурного программирования вызвали эмоциональные отклики читателей, помнящих времена, когда структурное программирование на "неструктурных" языках внедрялось, как картошка иа Руси. Обращаем внимание читателей на характерную особенность рубрики "1024 совета": в ней нигде нет слова "нужно", но везде стоит слово "можно". Мы не навязываем наши советы, если они не годятся для каких-то вычислительных систем, если кто-либо решает затронутые проблемы более эффективными или более привычными средствами.

Совет 8, где говорилось про то, как расположение подпрограмм влияет на скорость их вызова. Влияние это различно на разных машинах (К.Сумнин, г.Кимры). Не вникая в тонкости работы транслятора, программист мозкет сам опытным путем определить, из какого места программы подпрограмма быстрее вызывается. Замер скоростных характеристик программ на машинах с разделением времени работы процессора нужно проводить с осторожностью: время прогонки программы на такой машине зависит от загрузки параллельных дисплеев.

Совет 10, где прозвучала фраза: плагиат в программировании пока не преследуется. Но тем не менее, замечает ростовчанин Ю.Синицын, ссылка на автора идеи или разработки никогда не будет лишней. Вот свежий пример, продолжает он. В 1988г. издательство "Наука" выпустило книгу В.М.Брябрина "Программное обеспечение персональных ЭВМ". Книга очень интересная и полезная. В ней рассказано об операционных системах. Но у неискушенного читателя по прочтении книги создается ложное мнение, будто такие популярные операционные системы, как СР/М, МС-DOS и UNIX были созданы в Вычислительном центре АН СССР, так что остается только удивляться: почему в основу служебных слов легли английские термины? Мы просим читателей, присылающих советы, отмечать их авторство. Многие советы начинающим программистам подобны анекдотам в том смысле, что их знают все, но автор тем не менее неизвестен. В таком случае выручит пометка
"Народное средство, подмеченное имярек".

Совет 12, где упоминалось печатающее устройство. Если оно имеет буферную память, то "размазывание" операторов печати по тексту программы может существенно ускорить ее прогонку за счет параллельной работы центрального процессора и процессора принтера (В.Пернатых, г.Мелитополь). При этом ЭВМ "выстреливает" в АЦПУ очередную порцию информации и считает дальше, не дожидаясь, пока неповоротливый принтер ее распечатает. Бывает целесообразно ставить оператор, выводящий на дисплей ту или иную переменную сразу за операторами, ее вычисляющими.

Совет 18, касавшийся "засекречивания" файлов. А.Подземский из Москвы для этой цели использует пробелы в конце имени файла. Они не видны, но тем не менее меняют идентификатор. При прямом запрете на использование кириллицы русские буквы в имя файла можно вставить, набрав их на маленьком регистре латинским шрифтом (машины ДВК, Д3-28 и др). Следует однако помнить, что некоторые дисплеи и принтеры по-разному печатают латинские и русские буквы А, С, К и т.п. Следует также заметить, что опытный программист может "вскрыть" секретный файл "отмычкой", распечатав коды символов имени (см. 12/86).

Совет 19. где предлагалось использовать звуковые сигналы, обогащающие диалог человека и ЭВМ. В.Глухарев из Душанбе разработал целую систему таких сигналов. Короткие музыкальные фразы, различающиеся мелодией, темпом, высотой, обращают внимание пользователя на допущенные ошибки ввода, на необходимость включения периферии, на проход различных участков программы и прочее.

Ждем от читателей новых советов, а также замечаний и дополнений по уже опубликованным.

Тем, кого заинтересовала проблема структурирования алгоритмов и программ (см. заметки М.Вахтеров, "Два простых правила", 2/87 и В.Очков, "Структурные диаграммы", 4/88 ), рекомендуем литературу:
Ван Тассел. Стиль, разработка, эффективность, отладка и испытание программ. Пер. с англ., 2-е изд., М. Мир, 1985.
Вирт Н. Алгоритмы + структуры данных = программы: Пер. с англ., М. Мир, 1985.
Дал У., Дейкстра Э., Хоор К. Структурное программирование. Пер. с англ., М. Мир, 1975.
Йордан Э. Структурное проектирование и конструирование программ. Пер. с англ., М. Мир, 1979.
Птицын В. Отличия чисто внешние. - "Техника-молодежи" 3/88.
Очков В.Ф., Пухначев Ю.В. 24 этюда на Бейсике.- М. Финансы и статистика, 1988.
Добавляя к сказанному в заметках М.Вахтерова и В.Очкова, можно отметить, что альтернатива - это вспомогательная структурная управляющая конструкция. Ведь полная альтернатива эквивалентна двум условным операторам (двум неполным альтернативам), которые, в свою очередь, несложно заменить на циклы "пока", у которых тело выполняется либо раз, либо совсем ни разу. Следовательно, алгоритм любой сложности можно реализовать, используя только две конструкции: следование и повторение.

[ БЮРО СПРАВОК
В Московском энергетическом институте создана программа, облегчающая проведение подписки в институтах, учреждениях и организациях, вынужденных ежегодно выписывать большое количество советских и зарубежных периодических изданий.

Возможности данной программы позволяют найти любое издание в электронном каталоге по его индексу, при необходимости исправить в каталоге цену или название газеты или журнала, дополнить каталог новыми изданиями, внести список адресов и адресатов, отпечатать подписные карточки, полностью заполненные, соответствующие стандарту "Союзпечати" и подлежащие приему во всех отделениях связи. При необходимости печатается сводная ведомость по подписным изданиям.

Для использования программы пригодны персональные компьютеры ЕС-1840, Правец-16, IBM PC.

105835, Москва, Е-250, ГСП, Красноказарменная 14, НТБ МЭИ, тел.273-21-54 ]

[ МАЛЕНЬКИЕ ХИТРОСТИ
Вычисление целых степеней числа 2 с помощью микрокалькуляторов связано с большими сложностями, причина которых - низкая точность результата функции FxY. Если таким способом возводить двойку в целую степень, мы не только не получим целого числа, как должно быть на самом деле, но и из-за большой погрешности вычислений ие найдем точного ответа с помощью простой формулы Т=[t+0.5]. В этой и следующей формулах знаком [...] обозначена целая часть числа, Т - истинный результат, t - значение, вычисленное микрокалькулятором. Универсальный способ округления (до целых чисел) степеней двойки 2**K, где 1<=K<=23, реализуется с помощью формулы T=[(sqr(t)+С)2], где С=пи*1E-4 - поправочный коэффициент. Программная реализация формулы: FxY Fsqr ПXN + Fx2 K[x]; в регистры перед этим необходимо занести: 2 - РХ, К - PY, С - PN.
А.ЮМАШИН (г.Москва) ]

ЕЩЕ ОДНА ПРОГРАММА
В 10/87 была опубликована программа москвича В.Жука для определения выдержки. Эту и без того короткую программу, содержащую всего 15 шагов, мне удалось сократить до 11 шагов: 00. ХП0 01. 1 02. + 03. x-y 04. 1 05. + 06. / 07. Fx2 08. * 09. С/П 10. БП 11. 00.

Для определения выдержки вводим выдержку Т1, полученную при кратности увеличения К1, при которой был получен хороший отпечаток и кратность увеличения, при которой должен быть сделан новый отпечаток. После подачи команды С/П (в самый первый раз В/0 С/П) через 4 секунды на индикаторе - новое значение выдержки.
И.ЧУПРОВ (г.Гродно)
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Вт Фев 28, 2023 12:13 am

В 7,8/89 ничего не было.

Хотите программирования? Если такие умные, ищите и читайте книжки!

9/89
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
Занятие ДВАДЦАТЬ ПЯТОЕ, где разговор пойдет о языках программирования. Ведет занятие инженер А.БОРИСОВ (г.Москва)

Если А>В, то С=А, иначе С=В. Короткий алгоритм, запись которого понятна, пожалуй, любому, кто знаком с математикой. Если переписать его в виде, понятном вычислительной машине, то получится цепочка нулей и единиц. Две эти формы записи намечают две крайние точки спектра, где можно разместить все языки, на которых сегодня пишут программы для компьютеров. Более понятные для ЭВМ - это так называемые машинно-ориентированные языки. Более понятные для человека именуют языками высокого уровня. Они получают сегодня все большее распространение, поскольку позволяют не знать особенностей устройства конкретной ЭВМ. Кроме того, программу на языке высокого уровня, работающую на одной ЭВМ, можно использовать и для компьютера совсем другой марки. Но чтобы перевести такую программу на язык, понятный самой машине, необходимо время и дополнительная машинная память.

Работая с отечественными микроЭВМ, поневоле становишься поклонником машинно-ориентированных языков программирования, прежде всего - Ассемблера. Это дань тем мизерным объемам оперативной памяти компьютера, которые остаются в распоряжении пользователей "Электроники-БК" и "Микроши", "Кристы" и "Апогея", ПК "Специалист", "Львов" и "РК-86" и подобных им микроЭВМ. Нередко встречаешь людей, которые уверены, что без знания Ассемблера нельзя считать себя программистом.

Между тем, если посмотреть, что происходит в мире современных компьютеров, нетрудно заметить, что почти все программное обеспечение создается на языках высокого уровня. Программу, написанную на любом из этих языков, может разобрать не только ее автор, а в ряде случаев - даже непрограммист.

Несмотря на то, что языков программирования сегодня гораздо более пятисот, их нетрудно разделить на несколько основных групп или семейств. В первую группу мы объединим все алгоритмические языки, то есть те, что позволяют заложить в машину способ решения задачи - алгоритм. Наиболее известные представители этой самой большой семьи - Фортран, Бейсик, Алгол, Си, Паскаль, Модула-2, Кобол, ПЛ/1, Ада, Форт и Оккам. Вторая группа - это логические функциональные языки, которые привлекают сейчас всеобщее внимание в связи с активными исследованиями в области искусственного интеллекта. Эта семья, пожалуй, не так велика, но ее представляют столь заметные персоны, как Лисп и Пролог. Справедливости ради отметим, что первые представители обеих групп появились практически одновременно в 50-е годы.

Одним из патриархов алгоритмических языков считают Фортран.

Фортран (от англ. FORmula TRANslating System - система трансляции формул). Название языка прямо указывает на то, что он ориентирован прежде всего на решение научно-технических задач. Фортран разработан фирмой ИБМ в середине 50-х годов, и это во многом определило характерные особенности языка. В то время электронная начинка компьютеров была весьма дорогой, электромеханические устройства, например, накопители на магнитных дисках,- и дороги и редки, поэтому традиционный Фортран экономно обращается с памятью, в нем отсутствует возможность косвенной адресации. По сравнению с молодыми "родственниками" семейства алгоритмических языков Фортран плохо поддается структурированию. Многие программисты считают это существенным недостатком. И все же на Фортране в нашей стране пишут уже более 30 лет: среди причин - и задержавшиеся машины ЕС ЭВМ типа IBM 360, и огромное число готовых программ и подпрограмм, которыми можно воспользоваться, создавая новые программы. Впрочем, на Фортране пишут не только у нас. Одна из последних версий этого языка - Фортран 8х. Для персональных компьютеров наиболее популярна версия Фортран-77.

Брич 3.С. и др. Фортран ЕС ЭВМ.- М.: Статистика. 1978.
Грунд Ф. Программирование на языке ФОРТРАН IV.- М.: Мир, 1976.
Колдербэнк В. Программирование на ФОРТРАНЕ: ФОРТРАН-66 и ФОРТРАН-77.- М.: Радио и связь, 1986.

Бейсик (от англ. Beginner's Ail-Purpose Symbolic Instruction Code - "универсальный символический код инструкций для начинающих"). Прямой потомок Фортрана и, пожалуй, до сих пор самый популярный язык программирования для персональных компьютеров. Появился Бейсик в 1964 году (назвать автора было бы трудно, но основная заслуга в его появлении несомненно принадлежит американцам Джону Кемени и Томасу Курцу). Бейсик действительно наиболее подходит именно для использования на микроЭВМ. Основная причина в том, что интерпретатор этого языка (см. 3,9/89) занимает в памяти ЭВМ совсем немного места, например, в микрокомпьютерах начала 80-х, Бейсик размещался в 8 Кбайт ПЗУ. В отличие от Фортрана Бейсик умеет обрабатывать не только числовые, но и символьные переменные, поэтому язык оказался удобным для решения большинства примитивных повседневных задач. Как и любые преимущества, простота Бейсика оборачивалась, особенно на первых порах (или, как говорят программисты, в ранних версиях) трудностями структурирования; кроме того. Бейсик не допускал рекурсию - интересный прием, позволяющий составлять эффективные и в то же время короткие программы (6/89). И все же, хотя в мире персональных ЭВМ все более распространяется Паскаль (об этом языке речь впереди), Бейсик какое-то время будет оставаться самым популярным языком программирования. Кстати, разработаны мощные компиляторы Бейсика, которые обеспечивают не только богатую лексику и высокое быстродействие, но и возможность структурного программирования (например, конструкции WHILE-WEND). По мнению некоторых программистов, наиболее интересными версиями сегодня являются GWBASIC и TURBO-BASIC.

Дьяконов В.П. Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ: Справочник.- М.: Наука, 1987.
Кетков Ю.Л. Диалог на языке Бейсик для мини- и микроэвм.- М.: Наука, 1988.
Очков В.Ф., Пухначев Ю.В. 24 этюда на Бейсике.- М.: Финансы и статистика, 1В88.
Уолш Б. Программирование на Бейсике: Пер. с англ.- М.: Радио и связь, 1988.

Алгол (от англ. ALGOrithmic Language - алгоритмический язык). Практически одновременно с появлением Фортрана в вузах занялись разработкой нового языка, который был бы пригоден для решения более широкого класса задач. Результатом этих попыток стал Алгол. В полном соответствии с названием Алголу присущи все черты алгоритмического языка в самом современном понимании этого термина. Так, в Алголе предусмотрена возможность рекурсии. Одновременно с языком были разработаны теоретические критерии, такие, как способность к структурированию, самодокументация и т.д. Сегодня эти критерии являются как бы меркой для оценки вновь создаваемых языков.

Говоря об Алголе, принято различать Алгол-60 (в нем практически полностью отсутствовали средства ввода-вывода) и более совершенный Алгол-68. Все же, как это иногда бывает, язык "опоздал", и деньги, уже затраченные многочисленными владельцами ЭВМ на приобретение фортрановского программного обеспечения, остановили развитие Алгола. Алгол так и остался языком теории, и сегодня было бы напрасным искать компиляторы этого языка для персональных ЭВМ. Значительно большую известность получили принципы, впервые заложенные в Алгол,- они положены в основу современных языков - ПЛ/1, Паскаля и Си.

Лавров С.С. Универсальный язык программирования (Алгол-60), Изд.3.- М.: Наука, 1972.
Лнндси Ч. Неформальное введение в Алгол-68.- М.: Мир, 1973.
Наур П. (ред.) - Сообщение об алгоритмическом языке Алгол 60 // Вычислительная математика и математическая физика.- 1961, #2.
Пейган Ф. Практическое руководство по Алголу-68.- М.: Мир, 1979.
Пересмотренное сообщение об Алголе-68.- М.: Мир, 1В80.

Си (от англ. С - третья буква алфавита). Задуманный как некий инструмент для реализации и развития известной операционной системы Юникс, этот язык возник в начале 70-х годов. Си был орудием системного программиста и позволял глубоко влезать в самые тонкие механизмы обработки информации на ЭВМ. Это едва ли не единственный язык, который позволяет решать такие задачи, которые в ином случае потребовали бы использования машинно-ориентированного Ассемблера. Хотя язык требует от программиста высокой дисциплины, он не строг в формальных претензиях и допускает краткие формулировки. Популярность Си быстро переросла рамки конкретной ЭВМ, конкретной операционной системы и конкретных задач системного программирования. Си - это сравнительно небольшой языковой сердечник, который легко изучить. Труднее освоить способ письма на этом языке. Необходимые расширения определяются в своем большинстве как функции пользователя. Язык как бы обогащается все новыми конструкциями, необходимость в которых возникает по ходу программирования, то есть программист, работающий на Си, обладает редкой возможностью последовательно уточнять свою программу. На практике любая система Си содержит достаточно обширную библиотеку функций, которые могут понадобиться для решения типичных задач. Еще одна привлекательная черта Си - наличие всех особенностей, присущих современному универсальному языку (структурность, модульность, определение типов данных, рекурсивность). Нужно отметить, что практически для каждого типа микро-ЭВМ имеется хотя бы одна версия компилятора Си, а для семейства или, как часто говорят, клона ИБМ-совместимых машин - целый набор версий. Язык развивается: в нем, например, появляются некоторые черты, присущие Паскалю. Машинные программы, которые порождает компилятор Си, более компактны и выполняются быстрее, нежели те, что генерирует компилятор Паскаля. И все же Си, по общему мнению, не самый подходящий язык для того, чтобы начинать с него знакомство с миром программирования.

Болски М.И. Язык программирования Си. Справочник: Пер. с англ.- М.: Радио и связь, 1988.- 96с. ил.
Керниган Б., Ритчи д., Фьюэр А. Язык программирования Си. Задачи по языку Си: Пер. с англ.- М.: Финансы н статистика, 1985.- 279с.
Хэнкок Л., Кригер М. Введение в программирование на языке Си: Пер. с англ.- М.: Радио и связь, 1986.- 192с.

Паскаль (Pascal назван так в честь знаменитого математика Блеза Паскаля) - если говорить о популярности, то в странах, где информатика в почете, Паскаль проигрывает в популярности только Бейсику, да и то - незначительно. Это первый достойный образец языка истинно структурного программирования. Это значит, что программу на Паскале можно формировать из отдельных, совершенно независимых процедур и функций, каждая из которых призвана выполнять определенную ограниченную задачу. Разумеется, при таком подходе становится возможным быстрое создание больших программных комплексов, отдельные части которых создают разные авторы.

Если вас не удовлетворят типы данных, которые имеются в языке, вы сможете ввести новые - это существенно упрощает претворение замысла в текст необходимой программы. Специально для персональных ЭВМ разработано немало версий Паскаля с расширенными возможностями. Автору приходилось слышать упреки в адрес Паскаля - в излишней формальности, жестких и мелочных требованиях к программисту. Иногда Паскаль сравнивают с квадратным колесом. Похоже, критика возымела действие, и Турбо-Паскаль претендует на популярность Турбо-Бейсика.

Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль.- М.: Hayка. Гл. ред. физ.-мат. лит., 1887.- 112с.
Вирт Н. Язык программирования Паскаль (пересмотренное сообщение) // Алгоритмы и организация решения экономических задач.- М.- Статистика,- 1977,- Вып.9,- с.52-86.
Грогоно П. Программирование на языке Паскаль: Пер. с англ. / Под ред. Д.Б. Подшивалова.- М.: Мир, 1985,- 382с.
Перминов О.Н. Программирование на языке Паскаль.- М.: Радио и связь, 1988.- 224с: ил.
Прайс Д. Программирование на языке Паскаль. Практическое руководство: Пер. с англ. / Под ред. О.Н.Перминова.- М.: Мир, 1987.- 232с.

Модула-2 (от англ. Modula-2). Выражаясь в терминах родственных связей, Модула-2 - прямой наследник Паскаля. Автор Модулы-2 (и Паскаля) - профессор Никлаус Вирт из Швейцарии. Язык лишен некоторых "слабых мест" Паскаля. В Модуле-2 появились черты, которые заставляют вспомнить о Си, позволяющие программисту заглядывать "внутрь" машины. Похоже, этот язык может удовлетворить самых придирчивых специалистов по алгоритмическим языкам. Еще одна приятная особенность - Модулу-2 легко осваивают все, кто программирует на Паскале. По мере появления новых трансляторов для различных компьютеров Модула-2 способна занять ведущее место в иерархии языков высокого уровня для персональных ЭВМ, оставив позади не только Паскаль, но и Бейсик, тем более что язык рассчитан на организацию параллельных процессов: это обеспечивает исключительно высокое быстродействие готовой программы.

Вирт Н. Программирование на языке Модула-2 / Пер. с англ. В.А.Серебрякова, В.М.Ходунина: под ред. В.М.Курочкина.- М.: Мир, 1887.- 222с.
Schildt H. Advanced Modula-2.- Berkely (Са.): McGraw-Hill, 1987.
Fontaine А.В. Modula-2: language et compilateur sur IBM PC.- Paris et al.: Masson, 1986.

Кобол (от англ. COmmon Business Oriented Language - язык, ориентированный на общий бизнес). Это сравнительно старый язык, разработанный прежде всего для исследований в экономической сфере. Язык позволяет эффективно работать с большим количеством данных, он насыщен разнообразными возможностями поиска, сортировки и распределения. О программах на Коболе, основанных на широком использовании английского языка, говорят, что они понятны даже тем, кто не владеет Коболом, поскольку тексты на этом языке программирования не нуждаются в каких-либо специальных комментариях. Подобные программы принято называть самодокументирующимися.

К числу других плюсов Кобола обычно относят его структурированность. Довольно мощные компиляторы с этого языка разработаны для персональных компьютеров. Некоторые из них столь эффективны, что программу, отлаженную на персональном компьютере, нетрудно перенести на большие ЭВМ.

Перечисляя минусы языка, нельзя не вспомнить о том, что на Коболе можно запрограммировать лишь простейшие алгебраические вычисления. Для инженерных расчетов этот язык не годится. Еще одна причина, которая в какой-то мере сдерживает развитие языка,- это наличие в США специально созданного отраслевого комитета, вырабатывающего стандарты, за соблюдением которых следит правительственная комиссия. Как это всегда бывает в подобных случаях, фирмы, занимающиеся разработкой программного обеспечения, не торопятся подгонять свои заготовки к жестким требованиям комиссии, отсутствует конкуренция версий, а в итоге проигрывает распространение языка.

Быкова В.П. и др. КОБОЛ ЕС ЭВМ.- М.: Статистика, 1878.
Джермейн К. Программирование на IВМ/360 / Пер. с англ под ред. В.С.Штаркмана.- М.: Мир, 1973.
Колдингтон А. Ускоренный курс Кобола.- М.: Мир, 1974.
Маджинис Дж. Программирование на стандартном Коболе.- М.: Мир, 1878.
Ющенко Е.Л. и др. КОБОЛ (Программированное учебное пособие).- К.: Наукова думка, 1973.
ПЛ/1 (от англ. PL/1 - Programming Language - язык программирования один). Это результат одной из первых попыток создать универсальный язык, используя популярные качества других языков. ПЛ/1 создавался фирмой ИБМ в начале 60-х и закономерно получил в наследство черты Фортрана, Алгола и Кобола. Язык напоминает конструктор с большим числом деталей - пользователю достаточно освоить только те части языка, которые ему практически необходимы. Говоря о больших ЭВМ, следует отметить, что программисту, начинавшему с Бейсика, легче изучить именно ПЛ/1, нежели Паскаль. Возможно, это одна из причин, благодаря которым ПЛ/1 уверенно удерживает позиции на больших ЭВМ, несмотря на то, что он так и не сделался универсальным языком. В то же время цель, которую преследовали разработчики языка, во многом определила конструкцию ПЛ/1,- большинство его операторов громоздки. Живой динозавр в Вавилоне языков программирования, ПЛ/1 в полном объеме так и не реализован на персональных компьютерах.

Безбородов Ю.М. От Фортрана - к PL/1. Основы языка PL/1.- M.: Наука, 1984.- 208с.
Бухтияров А.М., Фролов Г.Д., Олюнин В.Ю. Сборник задач по программированию на языке ПЛ/1.- М.: Наука, 1983.
Гребенников Л. К.. Лебедев В. Н. Решение задач на ПЛ/1 в ОС ЕС.- М.: Финансы и статистика, 1981.
Скотт Р., Сондак П., ПЛ/1 для программистов.- М.: Статистика, 1977.

Ада (Ada - в честь графини Августы Ады Лавлейс, дочери лорда Байрона, написавшей вместе с Чарльзом Беббиджем первую программу для придуманной им "аналитической машины" еще в 1830 году). Несмотря на романтичную историю с названием, язык был разработан по заданию Министерства обороны США в середине 70-х годов. Язык предназначался для программирования встроенных в военную аппаратуру специализированных ЭВМ, поэтому отдано должное особенностям технических систем. В то же время Ада ориентирована и на создание больших программных проектов. Структура Ады напоминает Паскаль и позволяет контролировать параллельные вычислительные процессы. Ада еще очень молода, чтобы делать в ее отношении окончательные выводы,- время покажет, останется ли этот язык конкурентоспособным, но пока что Министерство обороны США использует Аду для всех программных разработок. Будущее Ады на персональных компьютерах пока что неопределенно.

Вегнер П. Программирование на языке АДА. Введение.- М.: Мир, 1983.

Форт (от англ. forth - вперед и одновременно fourth - четвертый). Автор Форта - Чарльз Мур задумывал Форт как язык для решения задач управления. Сегодняшний Форт трудно поддается классификации - интерпретатор он или компилятор? А может быть, операционная система? Ясно только, что Форт - это результат нового подхода к созданию программного обеспечения. С момента появления персональных компьютеров популярность Форта растет пропорционально их совершенствованию, и сегодня этот язык занимает третье место после Бейсика и Паскаля.

Основная идея Форта,- опираясь на небольшой исходный словарь, определять новые слова, включать их в библиотеку и через них определять новые слова. Последнее слово, полученное таким образом,- это и есть программа, решающая поставленную задачу. Ядро Форта, то есть тот запас функций, которые необходимы для поддержания первичного диалога с машиной, очень компактно, а порождаемые тексты в машинных кодах, которые будет исполнять ЭВМ, весьма эффективны.

Говоря о минусах, необходимо отметить, что программы на Форте тяжело читать не посвященным в таинства этого языка, а математические выражения получаются не очень наглядными из-за использования так называемой обратной польской записи, хорошо известной всем, кто прошел школу программируемых микрокалькуляторов. Форт требует от программиста усидчивости при освоении, но воздает за это возможностью написать почти любую программу - от видеоигры до большой системы, работающей в реальном времени.

Язык развивается, и это явно идет ему на пользу. Современный Форт - это система программирования: операционная система, интерпретатор, компилятор, ассемблер, текстовый редактор и сервисные программы, где все компоненты являются расширением Форта и написаны на Форте.

Баранов С.Н., Ноздрунов Н.Р., Язык Форт и его реализации.- Л.: Машиностроение. Ленинградское отделение, 1988.- 157с. ил. (ЭВМ в производстве).
FORTH-83 Standard. Mountain View (USA): FORTH Standards Team, 1983. 82p.
Tello E. PolyFORTH and PC/FORTH//BYTE 1984. Vol.9. #12. P.303-310, 312, 314.

Лисп (от англ. Lisp). Это второй после Фортрана язык, если говорить о сравнительном возрасте, то есть времени, в течение которого существует тот или иной язык. В отличие от процедурных языков типа Бейсика или Паскаля, о которых мы говорили раньше, Лисп - представитель языков функционального программирования. Лисп ориентирован на динамическую обработку данных. Кстати, нет особых различий между данными и программами Лиспа: числа и знаки, программы и данные считаются списками. Язык позволяет программисту эффективно перерабатывать списки. Таким образом, программа в конечном итоге способна перерабатывать сама себя. Это позволяет использовать Лисп, решая задачи, для которых отсутствует четкий алгоритм решения. Интересно, что если обычно язык создают, ориентируясь на конкретную машину или класс машин, то в данном случае, для новых версий Лиспа, напротив, появились специальные Лисп-компьютеры, архитектура которых соответствует особенностям языка. Если говорить о персональных ЭВМ, то для них создано немало различных версий Лиспа. Впрочем, большинство диалектов приобрели черты алгоритмических языков и значительно отклоняются от "чистого" Лиспа. Устройство языка позволяет доопределять новые конструкции. Этим Лисп несколько напоминает Форт. Вот уже 25 лет Лисп применяется для построения систем искусственного интеллекта.

Маурер У. Введение в программирование на языке ЛИСП.- М.: Мир, 1976.

Пролог (от англ. PROLOG - PROgramming in LOGic - "логическое программирование"). Этот язык появился как европейский противовес американскому Лиспу и также относится к языкам для создания систем искусственного интеллекта. Основная концепция языка - переводить формальную логическую задачу в текст программы. Компьютер должен самостоятельно выводить желаемый результат из фактов и правил. При этом он не получает от программиста путь решения. Программист лишь определяет объекты и относящиеся к ним логические связи. Как и Лисп, Пролог не различает данные и программу. Сегодня Пролог - это инструмент для развития систем 5-го поколения в Японии. Пролог в полном объеме предъявляет к компьютеру очень жесткие требования, так что использующие его персональные ЭВМ оказываются на пределе своих возможностей.
Широко распространен Турбо-Пролог для персональных компьютеров, но в нем отсутствует свойство изменять исполняемую программу. Впрочем, есть и другие, более полные версии этого языка. И наоборот, разработаны версии Пролога для ДВК-2 и Ямахи, но они могут играть лишь учебную роль.

Логическое программирование.- М.: Знание, 1988.- 48с.- (Новое в жизни, науке, технике. Сер. "Вычислительная техника и ее применение": #9).
ЭВМ пятого поколения. Концепции, проблемы, перспективы / Под ред. Т.Мотоока.- М.: Финансы и статистика. 1984.- 110с.
Glocksin W.Е., Mellisk С.S. Programming in Prolog.- Springer-Verlag, 1981.- p.297.
Клоксин У., Меллиш К. Программирование на языке Пролог.- М.: Мир, 1987.- 338с.

Развитие вычислительной техники идет параллельно с ужесточением требований, которые предъявляются к языкам высокого уровня. Если говорить о развитии алгоритмических языков, то язык Оккам (Occam - в честь философа У.Оккама, утверждавшего, что понятия, не сводимые к интуитивному знанию и не поддающиеся проверке опытом, должны быть удалены из науки: "сущности не следует умножать без необходимости"). Этот язык - пример того, как программное обеспечение следует за техническими новинками. Оккам предназначен для использования совместно с транспьютером, то есть микропроцессором, который работает в компьютере, основанном на использовании нескольких параллельно работающих процессоров. Оккам делит решение задачи на параллельно протекающие процессы.

Руководство по языку Оккам.: (Оперативно-информационный материал) / АН СССР. Сиб. отделение. ВЦ-Новоскбирск, 1987.- 75с.

Развитием языков, используемых в области искусственного интеллекта, является Смолтолк (Small Talk - "короткий разговор:"). Этот язык умеет работать с абстрактными объектами, которые ие имеют ничего общего ни с техническими свойствами компьютера, ни с классическими объектами переработки - числами или литерными цепочками. Такое же название носит интерактивная среда программирования, разработанная научно-исследовательским центром Ксерокс в Пало-Альто, ведущим работы в области искусственного интеллекта.

В концепциях этих двух языков обнаруживаются идеи, которые нередко превосходят возможности современных компьютеров. И все же эти языки могут существовать в форме, вполне приемлемой для персональных компьютеров. Ясно одно: будущие языки программирования позволят предоставить машинам решение все более сложных задач, доступных сегодня лишь человеку.

ДОСКА ОБЪЯВЛЕНИЙ
Всем владельцам или пользователям микроЭВМ "Электроника БК", а также организациям и предприятиям кооператив "Импульс" (член всесоюзного кооперативного союза "Информатика") предлагает учебные, прикладные и системные программы за наличный расчет или по перечислению. Учебным заведениям предоставляется 20% скидки. Заключаются договоры на поиск и поставку или на разработку и внедрение программных средств для компьютеров БК-0010, ДВК, "Электроника-85", "Искра-1030", ЕС-1840, а также на поставку автоматизированных рабочих мест на базе отечественных ПЭВМ типа "ЕС-1840". Кроме того, производится поиск и поставка зарубежных средств вычислительной техники по государственным ценам. Адрес: 338001, Донецкая обл., г.Горловка-1, а/я 71, кооператив "Импульс". Тел. 3-92-74.

Владельцам и пользователям "Электроники БК-0010", РК-86. "Микроши", "Специалиста", "Спектрума". "Агата", ДВК, УК-НЦ, ИБМ ХТ/АТ кооператив "Электрон" предлагает широкий выбор системных, прикладных, игровых и учебных программ. С авторами программ заключаются договоры на тиражирование созданного ими программного обеспечения. Предприятиям, учебным заведениям и всем желающим оказывается консультационная помощь в реализации или приобретении ЭВМ всех типов. По желанию заказчика производится оснащение (под ключ) компьютерных классов и компьютерных игротек. Адрес: 103489, Москва, корп. 705, кооператив "Электрон". Тел. 536-12-81 (вт, чт, сб с 12 до 20 часов).

Все новинки программного обеспечения для компьютеров "Электроника БК-0010, БК-0010.01, БК-0010Ш", а также уже снискавшие популярность программы предлагает кооператив "СБИС". Кроме того, кооператив специализируется на поставке учебно-методических программных средств для комплексов учебно-вычислительной техники КУВТ-86. Большой опыт, накопленный кооперативом в тиражировании ПО,- залог высокого качества исполнения заказа. Получить информационный бюллетень "СБИС" для владельцев БК или бесплатный каталог тиражируемых программ можно по адресу: 167024, Сыктывкар, а/я 430. кооператив "СБИС". Тел. 7-20-69.

Советские специалисты в области информатики, действующие под торговой маркой Computer Equipment International (CEI), предлагают выбор более чем из 300 программ для компьютеров "Электроника БК". Тиражируются также программы для ИБМ-совместимых компьютеров и микро-ЭВМ "Радио-86РК". Здесь можно приобрести автоматизированные рабочие места на основе ИБМ-совместимых компьютеров, а также разнообразные периферийные устройства - от джойстиков и дискет до мониторов монохроматического и цветного изображения, принтеров и графопостроителей. Поставляются также компьютерные классы на базе отечественных и импортных ЭВМ с программным обеспечением. В договор можно включить не только установку техники и поставку программного обеспечения, но и обучение операторов. Адрес: 270119, Одесса, а/я 25, CEI.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Ср Мар 01, 2023 12:17 am

10/89
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ

Первыми обиделись врачи.
Во всяком случае, так можно судить по первой обиженной реплике на июньский выпуск раздела "Человек и компьютер" за этот год. Она поступила от московского врача С.Яшульского. "Вы планируете тематические выпуски раздела,- пишет он в своем письме,- и первый из них хотите отдать на откуп химикам. Но гораздо интереснее, полезнее и, я бы сказал, гуманнее было бы предоставить честь открытия серии тематических выпусков нам, врачам, и всем, кто причисляет себя к этой профессии".
Не спорим с Вами, уважаемый Сергей Евсеевич. Но химики, если желаете знать, уже активно откликнулись на наше приглашение и уже присылают а редакцию программы на химические темы. (Кстати, пусть это знают те, кто хочет успеть в химический выпуск, и пусть поспешат с присылкой своих материалов!) Будут ли медики столь же активны? Мы можем лишь переадресовать им призыв их столичного коллеги: присылайте в журнал программы, которые можно причислить к медицинской тематике!
Любопытно, представители какой еще профессии заявят о своем желании полностью укомплектовать один из выпусков раздела!

ИЗОБРЕТЕМ МИКРОКАЛЬКУЛЯТОР
Какой программируемый микрокалькулятор нам хотелось бы иметь? Призыв к коллективному проектированию, брошенный в 6/88, вызвал поток откликов.

Все откликнувшиеся без исключения считают, что быстродействие у нового микрокалькулятора должно быть повышено по сравнению со старым. Предлагаемый минимум - 20 операций в секунду, максимум - до миллиона.

"Новый микрокалькулятор должен иметь,- считает пензенский школьник В.Масенков,- 15-20 регистров памяти и 150-200 шагов для программы. И стоить он должен не дороже 50 рублей". "Следует отказаться,- требует Мейеров из Омска,- от примитивного кодово-символьного языка. ПЗУ и ОЗУ увеличить до 10-16 Кбайт. Цена - 100, максимум - 130 рублей. Информацию отображать на экране телевизора". Доли тех. кто ратует за параметры, ограниченные теми или иными пределами, отражены графиком:

Матчасть диванного танкиста - Страница 4 89100110

Все без исключения высказались за то, чтобы в новый микрокалькулятор можно было вводить программы длиннее, чем в старые. Но длинная программа потребует новых методов ее хранения. Ведь всем понятно, что чем она длиннее, тем сложнее ее отладка и том больше вероятность ошибки при ручном вводе. Отсюда и новые требования к хранению программ. Одни предлагают создать энергонезависимое ОЗУ, в котором данные и программы не уничтожались бы при выключении питания. Другие советуют применить для хранения программ магнитные карты, третьи видят решение вопроса в выпуске сменных ППЗУ для тех, кто самостоятельно не программирует. В процентном отношении эти мнения разделились так:

Матчасть диванного танкиста - Страница 4 89100210

Все считают, что к ПЗУ и ППЗУ должен обеспечиваться прямой доступ из программы, находящейся в ОЗУ. Это позволит использовать программы сменных блоков в качестве подпрограмм для программ, записанных в ОЗУ. Наиболее просто осуществимым в настоящее время методом хранения программ 65 процентов читателей считают использование для этой цели бытовых магнитофонов

Очень многие (69%) предлагают в новом калькуляторе клавиатуру и систему команд того же типа, что в МК-61. Некоторые (17%) ратуют за переход на Бейсик, а один человек - на Ассемблер. О клавиатуре сторонники Бейсика единого мнения не имеют. Есть предложения воспользоваться клавиатурой МК-85 или такой же, как у "Микроши" и "Радио-86РК", но есть и предложения не иметь многофункциональных клавиш, то есть сделать так, чтобы каждая клавиша выполняла только одну функцию. В седьмой части писем встречаются предложения задавать арифметические операции таким нажатием клавиш, которое соответствует традиционной записи (сначала первый операнд, потом знак операции, потом второй операнд), а для клавиатуры воспользоваться решениями, принятыми в американских калькуляторах TI-58C и TI-59.

Но большинство устраивает обратная бесскобочная логика. Вместе с тем есть предложения увеличить число регистров стека до 8-10, сделать стек вращающимся в обе стороны, предусмотреть вовлечение в стек регистров памяти и очистку стека путем однократного нажатия на соответствующую клавишу.

Каждый второй из владельцев микрокалькуляторов предпочел бы индикатор на жидких кристаллах, причем, как считают некоторые (8%), он должен иметь две строки, на одной из которых отражается содержание регистра X, а на второй информация по желанию пользователя, скажем, содержание какого-то регистра памяти, номер шага программы при программировании и т.д. Любители игр заявляют, что им бы очень помог отдельный индикатор, отражающий содержание какого-нибудь регистра памяти. Есть предложения перейти на индикацию десяти знаков мантиссы и двух - порядка (15%).

Все участники обсуждения предложили свои наборы операций и функций, "зашитых" в ПЗУ. Подавляющее большинство высказалось за дополнение тех возможностей, которые есть у МК-61, вычислением статистических функций и округлением последнего, заданного пользователем знака числа по арифметическим правилам. Многие понимают, что возможности МК-61 ограничены, поэтому предлагают ввести эти операции ценой отказа от логических операций и преобразования угловых мер (градусы в радианы и т.д.). Примерно такое же количество высказывается за введение арифметических операций с числами, находящимися в регистре X и каком-либо регистре памяти, номер которого задается в программе, без вызова в стек содержимого этого регистра памяти. Предлагается ввести обмен содержимым между любым регистром памяти и регистром X. Далее в порядке уменьшения числа голосов следуют предложения: ограничиться операциями, которые есть в МК-61 и даже только теми, которые есть в Б3-34, а весь резерв ОЗУ направить на увеличение числа шагов программы; дополнить команды условных переходов условиями: X<Y и X=Y; ввести операцию гашения неверно введенной цифры, а не всего числа, как сделано сейчас, с возможностью записи новой цифры на место погашенной. К удивлению, такую важную операцию, как автоматическое смещение части программы на шаг назад (ради освобождения места для пропущенной команды), а также на шаг вперед (для исключения лишней) с автоматической коррекцией и в том и в другом случае адресов переходов, предложило всего три человека - а ведь при отладке больших программ без такой операции не обойтись. Остальные предложения встречаются всего один-два раза, но это означает, что и они нужны пользователям, поэтому перечислим и их: микрокалькулятор должен вычислять гиперболические функции, факториал, функцию 2**х при целом х, величину sqr(Х**2+Y**2), должен осуществлять преобразование координат - полярных в прямоугольные и обратно, преобразовывать англо-американские меры в метрические и обратно, должен производить расчет прибыли, рентабельности, издержек и других экономических показателей.

Сторонники сохранения клавиатуры МК-61 предлагают ввести третью префиксную клавишу для операций с обратными величинами и использовать ее не только для вычисления обратных тригонометрических функций, а более широко. Например, обратной операцией для сложения является вычитание, для умножения - деление. Если ввести такую клавишу да к тому же полностью использовать возможности префиксной клавиши "К", то это позволит, по мнению авторов такого предложения, получить еще 10-15 команд. Это могут быть команды временного останова на 0.5-2 секунды, подачи звукового сигнала при окончании программы и в ходе ее выполнения, вывода на индикатор по крайней мере четырех букв русского или латинского алфавита. Звуковой сигнал может использоваться еще и как индикатор окончания ввода команды при ручном вводе программы, подавая короткие звуковые сигналы после каждого шага.

И снова о предложениях, встречающихся один-два раза. При косвенном обращении к регистрам модификацию адреса следует производить только по требованию пользователя, который и задает вид модификации. (Это предложение, безусловно, удовлетворит скорбящих по командам со стрелками, которые были в Б3-34). Нужна команда для очистки адресного стека подпрограмм. Нужно автоматическое прохождение программы в режиме программирования, с темпом движения один шаг в одну-две секунды с индикацией номера шага и кода операции. Начало такого прохождения и направление движения по программе должно задаваться пользователем. Глубину обращения из подпрограммы к другим подпрограммам нужно довести до 8-10. Три человека хотят иметь возможность использовать телевизор как дисплей, три - подключать к калькулятору принтер и один - подключать графопостроитель. Иметь два выхода хотят трое, но одному нужен телевизор и принтер, а двум другим - принтер и графопостроитель.

"Ну и кому он будет нужен, такой программируемый микрокалькулятор?",- спрашивает В.Боженко из Саратовской области, предвидевший, что требования к карманной ЭВМ будут самые разные, и размышляющий о том, можно ли их воплотить в одном аппарате. "Не должно быть микрокалькулятора, ориентированного на какую-нибудь определенную сферу применения,- считает А.Попов из Свердловска.- Специализацию микрокалькулятора пусть проводит сам владелец". Такие мнения единичны. Большинство выступает за широкую гамму микрокалькуляторов самого разного назначения и самых разных возможностей. Интересное предложение прислал О.Векслярский из Горьковской области. Он предлагает иметь шесть классов программируемых микрокалькуляторов. Два высших класса, по его мнению, должны приближаться к персональным компьютерам и иметь полный набор периферийных устройств. "Цена их,- говорит О.Векслярский,- может быть 700-1000 рублей и даже более". Следующие два класса должны иметь принтер, производить 150-200 различных операций и стоить не более 700 рублей. Два последних класса должны иметь выходы для подключения принтера и бытового магнитофона и выполнять примерно такие же операции, как МК-61. Стоимость таких машинок не должна превышать 100 рублей. Подавляющее большинство солидарно с О.Векслярским в том, что должно быть семейство программируемых микрокалькуляторов. Что же касается классов, то их предлагается иметь не шесть, а четыре или три. В отношении цены у Векслярского сторонников нет. Подавляющее большинство (97%) считает, что программируемый микрокалькулятор высшего класса не должен стоить более 150 рублей, остальные допускают более высокую цену, но не свыше 300 рублей. Для сочетания интересов производителя и потребителя предлагается создавать новые микрокалькуляторы из модулей. Но и здесь есть разные позиции. Одни считают, что производитель должен выпускать набор модулей, а потребитель, приобретая необходимые ему модули, сам создаст из них свой персональный калькулятор. Другие же полагают, что модульность - только для производителя, который из модулей будет создавать различные варианты калькулятора, а потребитель должен получить готовую конструкцию. А.Бепренев из Кишинева просит не забыть при этом интересы геологов, геодезистов и представителей других профессий, работающих в поле. Для них необходима машинка, работающая в условиях высокой влажности и запыленности, в широком диапазоне температур. В комплекте такого калькулятора нужно иметь кабель питания с "чистыми" концами, что позволит питать его от любого источника, подходящего по напряжению, если он не подходит по габаритам.

Приходится огорчить тех, кто считает, что основным модулем нового программируемого микрокалькулятора может стать МК-61. У него почти полностью использована система команд, да и примененная в нем последовательная обработка информации не позволяет надеяться на достижение высокого быстродействия. Использование созданных в прошлом десятилетии специальных микросхем для калькуляторов серии K145, в комплект которых входит БИС К145ИК1303-2, где "зашиты" все операции, вычисляемые функции, стек и все остальное, не позволяет сопрягать эту серию с другими без особых ухищрений. Не изменил положения и выпуск серии К745, которая, в сущности, повторила серию K145, но в бескорпусном варианте. Для нового программируемого микрокалькулятора, отвечающего высказанным чаяниям, старая элементная база, очевидно, не подойдет.

Осталось лишь сказать о массогабаритных характеристиках. Мнение читателей о них более или менее едино. Почти две трети написавших в редакцию считают, что для карманного варианта должны быть сохранены характеристики МК-61, а для настольного - МК-52. Остальным представляется, что настольный вариант должен быть больше, и допускают размеры до 150*30*30 мм при массе не более 0.5кг.

Заканчивая обзор читательских писем, хочется отметить одну деталь: все без исключения авторы писем забыли, что производитель от нас не зависит, и не предложили никаких мер воздействия на него, а без этого все наши пожелания могут оказаться только сотрясением воздуха. Лишь москвич А.Колдаев предложил организовать совместное предприятие с какой-нибудь иностранной фирмой, производящей калькуляторы, но не для того, чтобы давить конкуренцией на нашего производителя - его он просто списал со счета. "Мне кажется,- говорит он,- что мы слишком много времени и усилий тратим на разработку приборов и прочих технических средств, которые уже давно и широко применяются в других государствах, а наши разработчики с высоких уровней разработок скатываются на примитивный уровень нашей электронной промышленности. Не надо изобретать давно изобретенное. Надо им пользоваться!"
Обзор читательских писем по просьбе редакции провел В.А.ХМЕЛЮК (г.Мытищи)

АЛГОРИТМИЧЕСКИЙ ПРАКТИКУМ
Каждый опытный программист знает: успех машинного решения задачи более чем наполовину определяется удачным алгоритмом. Вот почему многие из наших читателей с интересом отнеслись к подборке алгоритмических упражнений, которую в февральском выпуске раздела "Человек и компьютер" за нынешний год опубликовал наш киевский читатель В.А.Бардадым, и просят продолжить их публикацию. Итак, еще несколько алгоритмических задач, предлагавшихся на различных олимпиадах в УССР.

СЧИТАЛКА. Вокруг считающего стоят N человек, один из которых назван первым, а остальные занумерованы по часовой стрелке числами от 2 до N. Считающий ведет счет до М, начиная с первого. Человек, на котором остановился счет, выходит из круга. Счет продолжается со следующего человека (при этом выбывшие из круга не считаются) до тех пор, пока не останется один человек. Определить начальный номер этого человека.

ЧЕТЫРЕ НЕПОВТОРЯЮЩИХСЯ. Составить алгоритм, полу-
чающий на входе число К и выдающий на выходе К-тое по порядку четырехзначное число, у которого никакие две цифры не равны между собой. Первым таким числом будем считать 0123.

СКОБКИ НА ПОВЕРКЕ. В некотором арифметическом выражении удалили все символы, кроме скобок. Составить алгоритм, определяющий по полученной последовательности скобок, правильно ли они были первоначально расставлены.

Матчасть диванного танкиста - Страница 4 89100310

ДРАКОНОВА ЛОМАНАЯ. Возьмем полоску бумаги, согнем ее пополам К раз следующим образом:

Матчасть диванного танкиста - Страница 4 89100410

Развернем полоску так, чтобы углы на всех сгибах стали равны 90. Посмотрев на торец полоски, увидим ломаную, которая называется "драконовой ломаной К-го порядка":

Матчасть диванного танкиста - Страница 4 89100510

Написать алгоритм, который, получая на входе числа К и L, рисует драконову ломаную К-го порядка с длиной звена, равной L.

БЕЗ ХОЛОСТЫХ ПРОБЕГОВ. Грузовой автомобиль курсирует между N городами. В каждом городе его ожидают М отправителей грузов, стоящих в очереди. Оказавшись в очередном городе, водитель берет груз у первого по очереди отправителя и перевозит его в требуемый город; оставив там груз, берет в этом же городе следующий груз и т.д., пока в очередных городах есть грузы. Отправитель, сдавший груз, выходит из очереди. В каждый город должно прибыть М грузов. Грузовик начинает движение с заданного города. Составить алгоритм, выясняющий, сможет ли грузовик перевезти все грузы без холостых пробегов.

В УЗКОМ МЕСТЕ. Два многоугольника на плоскости заданы координатами вершин (x1, y1), (x2, y2), ...,
(xm, ym); (X1, Y1), (Х2,
Y2), ..., (XM, YM). Вершины перечислены в произвольном порядке. Написать алгоритм, определяющий расстояние между многоугольниками.

ПОИСК СУММЫ. Дана упорядоченная по возрастанию линейная таблица натуральных чисел А[1]<...<A[N]. Найти наименьшее натуральное число, не представимое в виде суммы некоторых чисел из таблицы. Сумма может состоять и из одного слагаемого; каждый элемент таблицы может входить в нее не более одного раза.

Приемлемое решение должно укладываться в C*N действий, где С - постоянная, не зависящая от N.

1024 СОВЕТА
(байт девятый)
Очередная порция советов иллюстрируется Бейсик-программой, дающей серию целых случайных неповторяющихся чисел. Такая задача встает при программировании игр: лото, карты и др.

Матчасть диванного танкиста - Страница 4 89100610

65. Для выдачи таких чисел алгоритм, описанный в заметке "Лото с компьютером" (см. 8/86), основанный на использовании булевского массива, не очень-то подходит: числа выдаются неравномерно, а последние и вовсе "зависают". Для этой цели лучше заполнить двухмерный массив А числовыми парами, в которых первое число натуральное (1, 2, 3,..), а второе - случайное (см. строку 7), отсортировать его по вторым числам пар (см. строки 8-12), и выдать на дисплей "перетасованные" таким образом первые числа пар (см. строку 13). (А.Долженко, г.Энгельс Саратовской обл.).

66. При инициализации программы в качестве базы генератора псевдослучайных чисел можно взять показание встроенного секундомера компьютера - см. строку 1. (Народное средство).

67. Для этой же цели можно несколько раз вхолостую вызвать случайное число - см. строку 4. (Народное средство).

68. Машина при "тасовке карт" может попросить человека снять колоду (см. строку 2). Это также (см. предыдущий совет) вызовет холостую прогонку генератора псевдослучайных чисел истинно случайное число раз. (Народное средство).

69. Оформляй сообщения машины двуязычно (см. строку 2). Это, во-первых, будет готовить отчественного пользователя к работе с импортными программными продуктами, а, во-вторых, будет способствовать признанию наших программ в других странах (С.Трясогузов, г.Семипалатинск).

70. Выключить целую строку из программы можно, поставив в ее начале апостроф, превращающий ее в комментарий (см. строку 4). При этом следует только помнить, что на некоторых машинах действие знака-комментария ограничивается знаком-разделителем операторов. (В.Кукушкин, г.Ленинград).

71. Из программы временно можно выключить целый участок (см. строки 2 и 3), поставив в его начале оператор безусловного перехода (см. конец строки 1). (В.Кукушкин).

72. Если нет уверенности, что переменные не уместятся в памяти машины, то можно для ее экономии отбросить уже отработанные участки программы - см. строку 5. (С.Рычко. г.Днепропетровск).

ПЕЧАТАЕТ САМУ СЕБЯ
Заметка А.Раннего "Программа печатает саму себя" (6/88 ) получила большую почту, причем авторы многих писем ранее не были знакомы с книгой Ч.Уэзерелла "Этюды для программистов", на которую более эрудированные читатели ссылаются как на первоисточник. Тем приятнее, что именно наш раздел подарил многим радость открытия: оказывается, можно составить программу, результатом работы которой будет ее собственный текст, выведенный на дисплей.

Пытаясь создать такую программу, каждый играл по своим правилам, признавая или отвергая те или иные требования. Поэтому назвать победителя, никого незаслуженно не обидев, стало невозможно. Пусть каждый выберет его сам, сравнив представленные здесь решения.

Читатели, приславшие свои отклики, весьма дружно сформулировали возникающие трудности: это, во-первых, печать текста оператора печати; во-вторых, печать ограничивающих текст кавычек (апострофов). Самые упорные преодолели эти трудности, использовав едва ли не весь "Вавилон языков". По каждому языку мы и даем небольшой обзор.

БЕЙСИК. Редко кто удержался от того, чтобы
привести программы, подобные 1 LIST. Но, если уж быть до конца последовательным, это только вице-чемпион. Есть еще "пустая программа", про которую почему-то никто не вспомнил. Более защищены от обвинений в тунеядстве программы соавторов В.Пинаева и В.Малягина (Андропов, Ярославской обл.). "Проблема кавычки" здесь решена применением двух различных пар ограничителей текста: "..." и '...'.

Этот прием справедлив не для всех версий Бейсика. Вторая программа тех же авторов использует встроенную функцию SEG, но зато дает на дисплее одинаковую картинку после вызовов RUN и LIST. Это должно расцениваться как признак высшего мастерства.

Матчасть диванного танкиста - Страница 4 89100710

Многие прислали очень похожие программы с использованием оператора DATA, который в некоторых диалектах допускает запись текстов без краевых ограничителей. Приводимая здесь программа А.Лебедева (Иваново) и ей подобные выглядят наиболее предпочтительно, поскольку не используют оператор RESTORE, а от табуляции, равно как и от использования строк, состоящих из нескольких операторов, легко избавиться. Небольшая доработка программы позволяет записывать выходной текст непосредственно иа дискету и вновь вызывать его.

ПАСКАЛЬ. В программе А.Сидоровича (Москва) печать кавычки осуществлена методом, который можно назвать классическим, поскольку он применим для подавляющего большинства языков. Суть его в том, что вводится текстовая переменная, значение которой - кавычки.

PL/I. Приведенная программа на Паскале переделывается на PL/I без каких-либо затруднений. Программы с подобными идеями прислали И.Щекалев (Москва) и многие другие. Другой способ "борьбы с кавычкой" - чисто "пиэльный" оператор PUT DATA, который закавычивает распечатываемое значение текстовой переменной,- реализовали соавторы А.Двужилов и Е.Колесников (Москва). Попытки уменьшить "калибр" используемых PL-средств (в частности, отказаться от управления печатью) нельзя признать удавшимися.

ФОРТРАН. Если разрешить использование строк продолжения, то Фортрану будет доступна запись текста любой длины в операторах формата, тем более что в стандартном Фортране текстовые ("холлеритовские") константы записываются без кавычек. Авторы самых коротких программ обошлись пятью операторами, которые наиболее коротки у П.Семьянова (Ленинград).

Фортран-77 по возможностям текстовых операций приближается к PL/I. Именно поэтому изящная программа Т.Тамма (Тарту) - 24 оператора без использования строк продолжения - не выглядит окончательным достижением.

РАПИРА. П.Семьянов демонстрирует фантастические возможности этого языка. Чтобы разобраться в его программе, отметим, что переменная типа "кортеж" в операторе вывода сама для себя и "значение" и "формат" и даже "перевод каретки" (!).

Программы на остальных языках уступают приведенным как в количественном, так и в качественном отношении. Среди них лучшими представляются программы С.Лукашевича (Москва) - язык Си 13 операторов; и А.Двужилова и Е.Колесникова - АЛГОЛ-60, около 30 операторов. (В последней, кстати, авторам удалось своеобразно решить проблему кавычки, создав подпрограмму, выводящую произвольный текст.) Программы П.Семьянова на языке Модула-2 и А.Климова (Рязанская обл.- по месту срочной службы) на АЛГОЛЕ-68 интересны, но нуждаются в доработке.

В многоборье полиглотов, с учетом глубины анализа проблемы, хочется выделить П.Семьянова, приславшего интересные решения на пяти языках.

Всего же "близкие к оптимальным" решения прислали около сорока авторов. Блестящий результат, и мы вынуждены извиниться перед всеми, кто остался не упомянутым. Явных неудач почти не было. Ряд курьезов связан с предложениями "не различать двойные кавычки и два апострофа подряд" или "распечатывать входной файл программы"; попытками пояснить (транслятору или себе?!), что "кавычки внутри текста - это не те кавычки, которые закавычивают текст, а совсем другие" и т.п., но все это слишком легковесно для серьезного анализа.
Обзор решений по просьбе редакции провел А.РАЙНИН (Москва)

[ КОМПЬЮТЕРНАЯ СПРАВКА
В этой рубрике мы планируем публиковать сведения двойного характера. С одной стороны, они обогатят программистский арсенал наших читателей, с другой - пополнят их общую эрудицию. Так, из программы "Свадьбы" можно узнать, во первых, некие юбилеи ожидают супружескую чету, а, во-вторых, как на Квик-бейсике записывается множественное ветвление.

Матчасть диванного танкиста - Страница 4 89100810

Ждем от читателей программ с двойным содержанием: с интересными сведениями общего характера и с любопытной программной особенностью ]

СВЕРХСТЕПЕНЬ, СВЕРХКОРЕНЬ.
Микропроцессоры, ведущие вычисления с комплексными числами, еще не существуют. Существующие же, предназначенные для операций с действительными числами, выполняют лишь сложение и вычитание, умножение и деление, возведение в степень и извлечение корня. Между тем путь, приведший математиков к определению этих действий, естественным образом может быть продолжен дальше. Новые операции позволяют получить числа новой природы, а те, в свою очередь, обещают интересные практические приложения.

Вспомним, как определяется умножение некоторого целого положительного числа а на целое положительное число n: это сложение числа а с самим собой, выполненное n раз. Аналогично возведение числа а в степень n - это n-кратное умножение а на себя. А если возведение числа а в степень а выполнить n раз? Эту операцию и называют возведением в сверхстепень n. Вот несложные примеры этой операции, а заодно употребительное для нее обозначение (а = 2,3; n = 3):

Матчасть диванного танкиста - Страница 4 89100910

Займемся теперь действиями, обратными по отношению к перечисленным, например, к сложению. Складывая два положительных числа, мы всегда получим опять-таки положительное. Но вычитание большего положительного числа из меньшего заставляет нас ввести понятие отрицательного числа. Сходным образом деление некратных целых чисел приводит к появлению дробей, извлечение квадратного корня из отрицательного числа - к мнимым величинам...

Свой вклад в подобный процесс "конструирования" новых чисел может дать и возведение в сверхстепень, точнее, обратная к нему операция - извлечение сверхкорня. Используя одни из предыдущих примеров, нетрудно сообразить, что сверхкорень третьей степени из 16 равен 2. Записывается это так:

Матчасть диванного танкиста - Страница 4 89101010

Но что такое, например, сверхкорень степени -sqr(-1), извлеченный из sqr(-1)? Оказывается, это число совершенно новой природы. Оно находится в определенной взаимосвязи с ранее известными, "основополагающими" числами - единицей и мнимой единицей:

Матчасть диванного танкиста - Страница 4 89101110

Здесь самое время задать вопрос: а зачем нужны эти нововведения? Какой от них прок?

Хорошо известно, какую пользу приносит применение комплексных чисел, например, в гидродинамике. Но там они эффективны лишь при решении так называемых плоских задач, где протекание процессов зависит лишь от двух координат. Одна координатная ось отводится действительной составляющей комплексных чисел. вторая - мнимой.

Матчасть диванного танкиста - Страница 4 89101210

Но если задача существенно трехмерна (например, движение "руки" робота в пространстве), то использование трех чисел различной природы оказалось бы очень кстати. А если продолжить "конструирование" новых единиц, то они пригодятся для решения все более сложных задач...

Матчасть диванного танкиста - Страница 4 89101310

Не пора ли задуматься над созданием компьютеров, работающих с такими числами?
В.А.БУНИН, В.В.БУНИН (г.Москва)

[ ЧИТАТЕЛЬСКАЯ РЕЦЕНЗИЯ
Не гак давно я приобрел книгу А.Е.Шелеста "Микрокалькуляторы в физике" (М., "Наука", 1988 ). Эта книга охватывает микрокалькуляторы от Б3-21 до самой последней модели МК-52. Она содержит и общие правила обращения с микрокалькулятором, и интересные практические советы, и рекомендации. В простой и доступной форме изложены азы программирования на микрокалькуляторе для начинающих. Но основное содержание книги заключается в том, как применить микрокалькулятор к решению исследовательских задач. В ней приводятся численные методы обработки результатов экспериментов.

А самое ценное, что есть в этой книге,- это обширная библиотека программ для решения исследовательских задач. Я думаю, что эта книга будет полезна и интересна не только исследователям и студентам, учащимся техникумов и ученикам старших классов школ, но и всем многочисленным пользователям программируемых микрокалькуляторов.
А.ГЕРАСИМОВ (г.Москва)

От редакции. "Читательские рецензии" - новый жанр для раздела "Человек и компьютер". Надеемся, что он не пресечется на первой попытке. Каждый читатель, желающий высказать свое мнение о недавно вышедшей массовой книге по информатике, может выступить под новой рубрикой ]
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Мар 02, 2023 12:47 am

11/89
ШКОЛА НАЧИНАЮЩЕГО ПРОГРАММИСТА
ЗАНЯТИЕ ДВАДЦАТЬ ШЕСТОЕ, быть может, последнее, отводимое программируемым микрокалькуляторам. Работе с наиболее распространенными их моделями - Б3-34, МК-61, МК-52 - уделялись самые первые и несколько последних занятий "Школы начинающего программиста". Той же теме посвящено несколько книг, изданных в последнее время. И тем не менее...
... Есть в числе героев популярной книги Ярослава Гашека "Похождения бравого солдата Швейка" угольщик Франтишек Шквор. На допросе в полиции он беспечно заявил составителю протокола: "Пусть было, как было,- ведь как-нибудь да было! Никогда так не было, чтоб никак не было". Видимо, с тем же настроением многие владельцы программируемых микрокалькуляторов пробуют вводить в свои программы такие операции, которые не оговорены в "Руководствах по эксплуатации", прилагаемых к карманным ЭВМ, и задаются нажатием двух или трех клавиш в произвольных сочетаниях- дескать, что-то да получится! Обнаруживаемые при этом находки бывают интересными и отчасти полезными, но могут приводить и к недоразумениям. О них стоило бы поговорить - с этой целью и проводится нынешнее занятие. Ведет его кандидат технических наук В.А.ХМЕЛЮК (г.Мытищи Московской области)

В почте нашего раздела нет-нет да и появится письмо о новых пяти регистрах памяти, найденных в МК-52 или МК-61 сверх имеющихся пятнадцати (И.Ксоврели из Тбилиси, Д. Липовой из Киева), о возможности работать со "сверхчислами" (Н.Меркин из Ленинграда, В.Обрубов из Душанбе), о записи в программную память более длинной программы, чем указано в руководстве по эксплуатации калькулятора (В.Жулин из Ленинграда, В.Гончар из Ростовской области) или о других находках подобного же рода. О них и говорится на нынешнем занятии "Школы".

Начнем с того, что архитектура отечественных ПМК сложилась в прошлом десятилетии, когда в основу этих вычислительных устройств была положена большая интегральная схема (БИС), содержащая микропроцессор и ряд вспомогательных устройств, обеспечивающих его работу. Эта БИС является последовательной однокристальной микроЭВМ, а ее вычислительные возможности определяются не схемой БИС, а микропрограммами, записанными в постоянное запоминающее устройство (ПЗУ) микроЭВМ. В программируемых микрокалькуляторах устанавливаются только два типа БИС: К145ИК1302 (в Б3-34, МК-54 и МК-56) и ее бескорпусный аналог К745ИК1303 (в МК-61 и МК-52). В дальнейшем речь будет идти только о Б3-34 и МК-61, и все сказанное о них распространяется на те калькуляторы, в которых установлены такие же БИС.

Серия К145ИК используется и для непрограммируемых инженерных микрокалькуляторов. За счет исключения микропрограмм, управляющих работой регистров памяти, вводятся другие. Например, микроЭВМ К145ИК1301А выполняет все вычислительные операции, которые делает Б3-34, но в алгебраической форме и, кроме того, решает системы из двух линейных уравнений, квадратные уравнения, производит операции с константой и тремя уровнями скобок. Все это достигнуто только за счет изменения микропрограмм. Варьируя их, производитель может достаточно легко вносить изменения даже в серийно выпускаемую продукцию. Этот момент подчеркнут не зря. Ведь подобные изменения могут не затрагивать операции, указанные в руководстве по эксплуатации, и в корне менять операции, там не указанные,- с этим мы еще столкнемся в дальнейшем.

Но вернемся к калькуляторам Б3-34 и МК-61. Здесь программирование и управление вычислительными процессами осуществляется с помощью тридцати клавиш. Для получения одной команды нажимают одну, две или три клавиши. При этом создается код команды, состоящий из двух 16-ричных чисел. Числа 0, 1 ... 9 индицируются так же, как и десятичные, а для чисел 10..14 используются знаки -, L, С, Г и Е соответственно. Число 15 индицируется отсутствием всякого знака, но в тексте нашего занятия для ясности оно обозначается буквой F. Таблица кодов команд для модели Б3-34 уже приводилась в нашем журнале (12/84). Ее можно дополнить согласно приводимому здесь рисунку: во вторую строчку вставить две дополнительные команды, в третью - двенадцать в столбце под знаком Е; в командах, оканчивающихся стрелкой, заменить ее буквой Е - и получится таблица кодов команд для моделей МК-61 и МК-52.

Матчасть диванного танкиста - Страница 4 89110110
Коды операций, общих для калькуляторов Б3-34, МК-61 и МК-52. совпадают друг с другом. Таблица этих кодов приводилась в 12/84. Эту таблицу можно дополнить приводимыми здесь кодами, которые соответствуют операциям, выполнимым лишь на МК-61 и МК-52. Внизу представлены сочетания клавиш и соответствующие им коды, несанкционированные "Руководствами по эксплуатации" этих калькуляторов: перечисленные в левой колонке вызывают сообщение ЕГГОГ, перечисленные в правой равнозначны операции КНОП.
Матчасть диванного танкиста - Страница 4 89110210

Для Б3-34 руководство по эксплуатации разрешает использовать 190 команд, для МК-61 и МК-52 - 214. Поскольку коды операций двузначны и каждый знак является числом от 0 до 15, то ясно, что кодов команд не может быть больше 256. Между тем клавиш-то тридцать, н если просуммировать размещения из тридцати по одному, по два и по трн, то получим 25230 вариантов. Вот сколько комбинаций может перепробовать пытливый пользователь!

Во всякой ЭВМ принимаются меры для того, чтобы защитить ее от действий, не предусмотренных производителем, а пользователя - от получения неверного результата, возникшего от его неправильных действий. На языке разработчиков ЭВМ комплекс таких мер называется "системой дуракоустойчивости". К сожалению, любые меры даром не даются и требуют создания специальных программ анализа и выдачи сигналов запрета. При ограниченной емкости ПЗУ перед разработчиком стоит дилемма: либо сократить число операций, производимых ЭВМ, и повысить "дуракоустойчивость", либо, уповая на здравый смысл пользователя и на то, что если он сам себе не враг, то не будет производить несанкционированных операций, увеличить вычислительные возможности ЭВМ.

Что касается несанкционированных операций, за которые разработчик ответственности не несет, то тут действует принцип уже упоминавшегося угольщика Шквора, в нашем случае интерпретируемый следующим образом: "Пусть будет, как будет,- ведь как-нибудь да будет! Никогда так не было, чтобы никак не было". Именно благодаря такому подходу появляются в одних моделях и исчезают в других команды, столь полюбившиеся некоторым составителям программ и доставляющие тревоги и огорчения владельцам более поздних моделей, о которых производитель сказал, что они программно полностью совместимы с предыдущими. Все заверения о совместимости верны до тех пор, пока в программах не появятся команды, не санкционированные руководством по эксплуатации микрокалькулятора.

Наибольшее огорчение владельцам МК-61 доставляют команды КП^ и КИП^ (другие команды со стрелкой встречаются значительно реже). Все они обеспечивают косвенный доступ к нулевому регистру Б3-34, не модифицируя его содержимого. В МК-61 коды этой операции были использованы для управления регистром Е. Доступ в нулевой регистр без модификации его содержания в МК-61 невозможен. Замену приходится искать программным способом. Хорошо, если после команды со стрелкой не используются регистры стека. Тогда заменой служит простая комбинация команд ПХ0 ХП0 КПХ0. Если же содержимое регистров стека участвует в вычислениях, то нужно анализировать программу и искать другую замену. Например, если не затрагивается содержимое регистров X1 и Т, то годятся ПХ0 1 + ХП0 F() и заменяемая команда со стрелкой, где на месте стрелки стоит нуль. В каждом конкретном случае выход удается найти. Если команды со стрелкой встречаются несколько раз, то их заменяют подпрограммой, при составлении которой руководствуются изложенными выше принципами.

Отметим еще два распространенных заблуждения, связанных с несанкционированным нажатием клавиш. Это появление "дополнительных" регистров памяти и запись программы, имеющей больше шагов, чем указано в руководстве. Вызов или засылка информации в регистры происходит не только после нажатия клавиш, указывающих адрес регистра, но и клавиш арифметических операций и обмена содержимым между регистрами X и Y (а также клавиши ^ в Б3-34). В этом случае информация будет извлечена или заслана в тот регистр, номер которого совпадает с последней цифрой кода операции. Скажем, при нажатии на клавиши ХП+ информация будет заслана в нулевой регистр, поскольку код сложения 10. Программы записываются в кольцевой стек, и если продолжать запись после того, как будут заполнены все ячейки, то счетчик станет продолжать счет в прямом направлении, так как он сделан с запасом и "умеет" считать до F9, после чего возвратится к шагу 00, а программа будет записываться в ячейки памяти, уничтожая ранее помещенную в них информацию. Например, в МК-61 при показании счетчика -5 запись происходит по адресу 00, при показании -6 - по адресу 01 и т.д.

На некоторые несанкционированные действия пользователя калькулятор отвечает сигналом ЕГГОГ, говорящим, например, о том, что была подана команда, отсутствующая в списке разрешенных. Для Б3-34 такими командами являются К+, К-, К*, К/, К3, К4, К5, К6, К7, К8, К9, Kx-y, К/-/, K^, KCx, КВП и К-десятичная точка. Как некорректность воспринимает калькулятор сочетание команд ВП десятичная точка, но в отличие от других случаев, где сигнал ЕГГОГ появляется после "анализа", длящегося несколько секунд, тут он возникает мгновенно.

Отсутствующие в списке разрешенных команды К1 и К2 воспринимаются микрокалькулятором так же, как и команда КНОП, отменяющая операцию. Ошибки типа - БП FSin-1 или ПП Кxor, возникающие, если при вводе программы пропущен адрес перехода, интерпретируются как команды переходов, причем за адрес перехода принимается код операции. Например, в упомянутых случаях все будет происходить так же, как по командам БП 19 и ПП 39 (сверьте по таблице кодов операций). Хорошо, если по ошибке не будет нажата такая клавиша, что код соответствующей операции окажется не похожим на адрес. Пример - операция Кх=0Е, код которой ЕЕ. После такого "адреса перехода" микрокалькулятор зациклится.

Многие из команд, приводящих к сигналу ЕГГОГ, используются в программах для Б3-34 как сигнал об определенном событии. Если эти программы приходится переносить на МК-61, то нужно помнить, что у этого калькулятора список неиспользуемых команд меньше, и к появлению сигнала ЕГГОГ приводят только команды К*, К/, К-, остальные использованы для новых операций.

В руководствах по эксплуатации обоих микрокалькуляторов применяется термин "диапазон вычислений" и указаны его пределы: 1E-99<=|х|<=9.9999999E99. На самом деле это диапазон чисел, которые могут быть введены с клавиатуры или показаны на индикаторе. Между тем оба калькулятора обрабатывают 16-ричные числа, мантисса которых состоит из восьми цифр, а порядок определяется двумя 16-ричнымн цифрами. Если самое большое число, которое может получиться в этой системе, перевести в десятичное, то получим 9.9999999E299. По предложению наших читателей будем называть числа, обрабатываемые калькуляторами и превышающие те, которые могут индицироваться, "сверхчислами". Сигнал аварийного останова ЕГГОГ подается лишь в том случае, если "сверхчисло" вызывается из регистров памяти или регистра X1 в регистр X и при перемещении "сверхчисла" из регистра X в регистр Y командой B^. Операции сложения, вычитания, умножения, деления, возведения в квадрат, записи в память при прямой и косвенной адресации, обмена содержимым между регистрами X и Y, кольцевого передвижения информации в стеке не вызывают аварийного останова, даже если в них участвуют "сверхчисла". При вызове "сверхчисла" в регистр X аварийный останов происходит только потому, что наступило переполнение индикатора, само же 16-ричное число находится в регистре X и может быть записано в регистры памяти или стека и с ним можно проводить вычислительные операции, в чем легко убедиться. Проделаем операции 1 ВП 50 Fx2 "ЕГГОГ" (здесь и далее в кавычках - показания индикатора). В регистре X - "сверхчисло" 1E100. Далее выполняем 2 ВП 50 Fx2 "ЕГГОГ". Теперь в регистре X - 4E100, в регистре Y - 1E100. Наконец, выполняем сложение: на индикаторе "ЕГГОГ", в регистре X - 5E100; далее 1 ВП 1 / "5 99". Итак, несмотря на то, что на индикатор не могли быть выведены числа, над которыми проводились операции, в регистрах они реально существовали.

Кроме указанных случаев, ЕГГОГ появляется на индикаторе и при некорректных операциях. Некоторые из них очевидны - это деление на ноль, извлечение квадратного корня из отрицательного числа, определение логарифма отрицательного числа, определение арксинуса и арккосинуса при аргументе, превышающем единицу. В некоторых случаях ЕГГОГ свидетельствует о недостаточной математической подготовке нашего калькулятора. Он, например, считает, что возводить отрицательные числа в третью и более высокие степени нельзя и нельзя извлекать из них корень нечетной степени, хотя со школьной скамьи известно, что (-2)**3=-8, a sqr3(-27)=-3. Выходить из этого положения приходится программным путем. Вот программа, позволяющая возводить в степень n как положительные, так и отрицательные числа. На n накладывается одно-единственное ограничение - это число должно быть целым. 00. K|x| 01. FxY 02. x-y 03. Fx<0 04. 06. 05. /-/ 06. Fпи 07. * 18. Fcos 09. * 10. С/П. Переключатель "Р-Г" ставят в положение "Р". В программе использовано то обстоятельство, что cos(n*пи)=-1, если n нечетное, и 1, если оно четное. Для Б3-34 команду 00. К|х| заменяют двумя 00. Fx2 01. Fsqr и адрес перехода изменяют на 07. Показатель степени помещают в регистр Y, а основание - в регистр X, после чего нажимают клавиши В/О С/П.

В руководствах по эксплуатации указано, что модуль аргумента тригонометрических функций не должен выходить за границы 1E-49<=|х|<=1E10, иначе относительная погрешность вычисления функции может превысить 3E-7. Это достаточно нечеткое положение, не единственное в ряду тех, которыми изготовитель вносит сумятицу в умы пользователей. На самом деле, если аргумент выйдет за верхнюю границу, то произойдет аварийный останов и на индикаторе появится ЕГГОГ. Если вычисления ведутся в радианах, то при малых аргументах, вплоть до минимального значения 1E-99 калькулятор в полном соответствии с приближенными равенствами sin(x)=x, cos(x)=1 и tg(x)=x выдает вытекающие из них значения. Если же аргумент задан в градусах, то в интервале 1E-99<=|х|<=10-49 выдается результат cos(x)=1, а синус и тангенс определяются с ошибкой, которая может быть огромна. Однако нет худа без добра - погрешность, получающаяся при вычислении косинуса большого аргумента, была использована А.Н.Цветковым для создания генератора случайных чисел: 00. ПХД 01. ВП 02. 9 03. Fcos 04. Fcos-1 05. Fпи 06. / 07. ХПД 08. С/П. Переключатель "Р-Г" ставят в положение "Р", в регистр Д записывают произвольное число меньше 1. Последовательность случайных чисел получают, нажимая на клавиши В/0 С/П. Генератор можно применять для расчетов на микрокалькуляторах Б3-21, Б3-34, МК-61 и их аналогах. В микрокалькуляторах других типов программа может и не заработать, а в указанных она дает при начальном числе 0 или 1 последовательность, содержащую около 4500 неповторяющихся чисел.

Обратимся снова к руководству по эксплуатации. В таблице допустимых значений аргумента и относительной погрешности вычисления функций указано, что погрешность вычисления exp(x) и 10**x не превышает 4E-7, если выполняются условия |х|<=100*ln(10) при вычислении exp(x) и |х|<=99.999999 при вычислении 10**х. Этих функций нет в списке некорректных операций, и поэтому можно предположить, что при выходе аргумента за допустимое значение просто возрастет ошибка. На самом же деле произойдет аварийный останов. И если для положительных и больших X понятно, что происходит переполнение, то для отрицательных не все так ясно. При вычислении 10**-99 или exp(-230) в полном соответствии с руководством по эксплуатации получаем ноль. "Если в результате вычислений,- гласит пункт 6.4.2 руководств для Б3-34, МК-61 и МК-52,- получается число, меньшее, чем 1E-99, то регистр X обнуляется". Но ведь числа, получающиеся в результате вычислений 10**-100 и exp(-231), меньше 1E-99, а регистр X не обнуляется и на индикаторе - ЕГГОГ. Кроме описанных случаев в МК-61, аварийный останов происходит при переводе минут и секунд в десятичные доли, если хотя бы одна из величин равна 60 или большему числу.

Аварийный останов, происшедший в режиме ручных вычислений, не требует особого анализа, так как ясно, в результате какой операции он произошел. При проверке и отладке программы причины останова нужно определить. Практика дала простой способ определения причин останова. После появления на индикаторе ЕГГОГ нажимают клавишу B^. Если на индикаторе по-прежнему ЕГГОГ, то произошло переполнение, а если число, то некорректная операция, виновник которой - это самое число.

...


Последний раз редактировалось: Gudleifr (Чт Мар 02, 2023 2:07 am), всего редактировалось 1 раз(а)
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Чт Мар 02, 2023 12:50 am

...

Еще один метод, о котором стоит упомянуть, основан на несанкционированных операциях, но в данном случае вполне уместен. Он, конечно, отомрет вместе с уходом со сцены нынешнего поколения микрокалькуляторов, но у нового поколения обещают широкую диагностику, и к доморощенным приемам прибегать не придется.

Метод заключается в том, что после появления сигнала аварийного останова нажимают клавишу ВП. То, что появляется при этом на индикаторе, позволяет сделать некоторые выводы. Сигнал ЗГГОГ нам знаком, это переполнение, причем порядок числа больше 200. "ЕГГОГ 00" - переполнение, порядок числа меньше 200. "Г.ГГОГ 00" - деление на ноль, вычисление логарифма от нуля, вычисление степенной функции вида 0**0, некорректная операция, вводимая клавишей К. "ЕГ.ГОГ 00" - вычисление tg 90o. "Е.ГГОГ 00" - вычисление арксинуса или арккосинуса от числа, большего 1. "ЕГГОГ 00" - положительный аргумент показательной функции больше допустимого, причем десятичная точка стоит на том же месте, что и в мантиссе числа-аргумента. "-ЕГГОГ 00" - либо аргумент показательной функции отрицателен и по модулю больше допустимого, либо предстояло вычисление квадратного корня из отрицательного числа; десятичная точка стоит на том же месте, что и в аргументе.

Следует учесть еще одну особенность. Если останов произошел из-за переполнения, то после останова программа может быть продолжена с того места, на котором он произошел. Если же причина в некорректности, то управление передается не на адрес, следующий непосредственно за остановом, он пропускается, а на очередной после пропущенного. Если ЕГГОГ создают искусственно, как сигнал о каком-то событии, то после команды, которой он создается, в программу нужно вставить команду КНОП. Если этого не сделать, то при пуске программы после останова одна команда будет пропущена.

Пропуск одного шага происходит и в том случае, если прекратить выполнение программы командой С/П. Если нажатие на эту клавишу придется на команду перехода, то может быть пропущено и два шага. Во избежание ошибок возобновлять счет следует только после коррекции счетчика шагов. Ее производят, перейдя в режим программирования и нажимая один или два раза на клавишу ШГ со стрелкой влево. Затем можно возвратиться в режим автоматических вычислений и продолжать счет, нажав клавишу С/П.

Выше в качестве примеров и полезных советов не раз приводились мини-программы. Постепенно у программиста накапливается библиотека таких мини-программ, облегчающих его работу. Однако наряду с мини-программами, основанными на общих принципах, в такую библиотеку попадают программы, обусловленные особенностями данной модели. Их нужно особо выделять не только потому, что они могут не заработать даже в программно совместимых устройствах, но и потому, что каждый такой прием, в особенности основанный на недостатке, может не сработать и в однотипном устройстве более позднего выпуска. Например, в программе для вычисления факториала на первом месте записана команда ВП. Ввод порядка - операция, эквивалентная умножению на 1Eрр, где рр - цифры порядка. При нажатии на клавишу ВП на местах знаков порядка появляются нули, и если не вводить цифр порядка, то операция должна свестись к умножению на 10o=1. Так и происходит со всеми цифрами, кроме нуля. По науке должно быть 0*1E0=0, но наш калькулятор после нажатия клавиш 0 ВП сразу выводит на индикатор 1. Вот это и использовано в программе для вычисления 01 Ведь 0!=1!=1. И если команда ВП превратила 0 в 1, то мы избавились от необходимости выяснять вопрос, не является ли число, факториал которого определяется нулем.

Из других приемов, часто используемых в программах, следует упомянуть многократное обращение к циклу, после того как его работа закончилась. При этом он выполняется только один раз. Это происходит потому, что в счетчике циклов после окончания его работы находится не нуль, а единица.

В Б3-34 косвенное обращение используется для выделения целой и дробной части чисел, что в МК-61 совершается одной командой. При косвенном обращении в регистре находятся либо адрес, либо номер регистра, являющиеся целыми положительными числами. При вводе в регистр числа, имеющего дробную часть, и косвенного обращения к нему калькулятор модифицирует содержание регистра, отбрасывая дробную часть. Если же в регистрах 7-Е находится число, модуль которого меньше 1, то при косвенном обращении к такому регистру число, находящееся в нем, изменяться не будет, а управление будет передано на адрес (или произойдет обращение к регистру), определяемый мантиссой и последней цифрой порядка. Действующий здесь принцип пояснен на рисунке; заметим лишь, что если последняя цифра порядка нуль, то управление передается на адрес, состоящий из нуля и 1-й цифры мантиссы. Это обстоятельство используют, когда содержимое регистра в зависимости от прямого или косвенного обращения является то адресом, то константой.

Матчасть диванного танкиста - Страница 4 89110310
Рисунок поясняет, как формируется адрес перехода при косвенном обращении и регистру, где находится число, по модулю меньше единицы.

Программы, в которых такая адресация используется по необходимости,- большая редкость. Чаще к этим приемам прибегают для демонстрации "скрытых" возможностей калькулятора. Но, как справедливо отмечает Л.Штернберг из Куйбышева, изменения в ПЗУ нашей микроЭВМ могут быть внесены программным способом, и тогда программы, основанные на "скрытых" возможностях, перестанут работать. Совет здесь один - пользоваться несанкционированными приемами только в случаях самой крайней необходимости и обязательно писать к таким программам комментарий, в котором должна быть отражена логика работы несанкционированных команд.

МК-61 дает своим владельцам более широкие вычислительные возможности, нежели Б3-34, но и у него появились новые странности. О генераторе случайных чисел уже много писали, как и о том, что МК-61 считает нуль самым большим числом. Недавно мытищинский школьник А.Рубцов открыл еще "отрицательный ноль": на индикаторе появляется ноль со знаком минус. Этот ноль ведет себя как отрицательное число, что вносит погрешность, если после него идет условный переход. В частности, ноль со знаком минус появляется при определении дробной части целого отрицательного числа. Можно было бы увеличить число примеров, но и того, что было сказано, достаточно, чтобы понять, что не все безоблачно в нашем калькуляторном королевстве.

И все же самые большие радости одним н неприятности другим доставляют не те мелочи, о которых уже говорилось, а команды ВП и отчасти /-/. Первая из них заслуживает особого внимания.

Для того чтобы разобраться в некоторых тонкостях работы этих команд, составим две экспериментальные программы: 00. / 01. ВП 02. 2 03. С/П и 00. ВП 01. 2 02. Fx2 03. /-/ 04. С/П. В режиме пошаговой проверки и автоматической работы обе программы выполняются по-разному и выдают разные результаты. При автоматической работе игнорируются команды, стоящие перед ВП в первой программе и перед командой /-/ во второй. Вместо операции деления или возведения в квадрат в эти программы можно вставлять любые двухместные или одноместные операции, и все равно при пошаговой проверке и автоматической работе результаты будут различаться за счет того, что во втором случае игнорируется команда одноместной или двухместной операции. Все это наводит на мысль, что дело не в этих командах, а в чем-то другом. Как бы то ни было, энтузиазма у пользователей это не вызывает. Если вдаваться в причины, то о них говорилось, когда речь шла о "сверхчислах": при вычислениях по программе работа идет без обязательной засылки промежуточных результатов в индикатор. Это первое, а второе - разработчик, создавая эту операцию, предназначал ее только для чисел, вводимых с клавиатуры или по программе знак за знаком. Об этом сказано в руководстве по эксплуатации. И хотя там нет прямого запрета использовать команду ВП для изменения порядка результата вычислений, но нет и разрешения на это. Программистам известен термин "по умолчанию". И здесь "по умолчанию" все, что не разрешено, запрещено!

Для того чтобы наш калькулятор вел расчет по нашим экспериментальным программам, он должен сначала превратить результат вычислений в подобие числа, введенного с клавиатуры. Вспомним, что такие числа разделяются командой B^. Поставим ее после команды деления в первой программе и ввода цифры порядка - во второй. К нашему удовольствию обе программы заработали правильно. Конечно, это не единственный случай непонимания, возникший между владельцем и машиной, но для тех, кто смотрит на калькулятор как на точный вычислительный инструмент, важно знать не только о том, что происходят ошибки, но и искать методы их устранения. На приведенном примере показано, как это можно сделать.

Для тех, кто использует микрокалькулятор как игрушку, принцип Шквора открывает тут огромные возможности. Ну разве можно додуматься путем каких-то логических умозаключений, что фрагмент А (здесь А - некоторое число) B^ Cx x-y x-y ВП после проведения его вручную дает 1, а будучи вставлен в программу и использован в автоматическом режиме, отбросит у числа А все знаки, кроме первого, включая знаки порядка, определит модуль получившегося числа, прибавит к нему 1 и в таком виде покажет результат на индикаторе? Предсказать это могут лишь те, "кто,- как пишет нам А.Салпинов из Минска,- умеет заводить автомобильный двигатель без ключа с помощью исполнения "Чижика-пыжика" и плевков через левое плечо".

Появление в программах команд, которые по-разному выполняются в автоматическом режиме и при пошаговой проверке, не одобряется подавляющим большинством читателей нашего раздела, которые требуют, чтобы каждый случай появления "шаманской команды" (термин предложил В.Князьков из Душанбе) в той или иной программе объяснялся и обосновывался автором.

Можно произносить сколько угодно заклинаний и призывов не использовать несанкционированные операции, но это будет гласом вопиющего в пустыне. Раз есть такая возможность, то всегда найдутся люди, которые ею будут пользоваться, и никакие запреты тут не помогут. Единственное, чего не надо делать,- это метать громы и молнии в адрес разработчиков и создателей микрокалькуляторов, а помнить лозунг, висевший в американских салунах во времена Джека Лондона: "Ребята! Не стреляйте в пианиста! Он делает свое дело - как умеет!" К этому можно добавить: "... и из всего самого лучшего из того, что есть у него под руками". Но в то же время каждая найденная несанкционированная операция нуждается в глубоком анализе и определении границ и условий использования.

Как это делается, покажем на примере команды В/0. По замыслу создателей эта команда, если необходимо, устанавливает счетчик шагов программы на адрес 00 перед пуском программы. А в программах ею завершают подпрограммы, и она обеспечивает возврат к основной программе. Но вот что было замечено. Если эта команда стоит вне подпрограммы, то при пошаговой проверке и работе программы, как правило, передает управление на адрес 01. Этим пользуются порой для сокращения программы, заменяя две команды БП 01 одной В/0. Бывает, однако, что "железно" работавшая раньше программа не передаст управление по этой команде на адрес 01, а это, конечно, вызывает удивление.

Для того чтобы понять причину такого недоразумения, нужно познакомиться с тем, как получаются адреса возврата из подпрограммы. Их формирует пятирегистровый стек возврата. По команде ПП в него записывается адрес, на котором было прервано выполнение программы, а по команде В/О этот адрес увеличивается на единицу, после чего на него передается управление. Бывают случаи, что и сама подпрограмма содержит подпрограммы, тогда по команде ПП новый адрес перемещает прежний в следующий регистр стека возврата, а по команде В/О сначала используется адрес, попавший в стек возврата последним. Когда он использован, то его заменяет предпоследний и т.д.

Напрашивается аналогия с обоймой пистолета - патрон, вставленный в нее последним, подается в ствол первым, а вставленный первым, стреляет последним. В стеке возврата пять регистров, а это означает, что между первой командой ПП и командой В/0 могут быть еще четыре команды ПП.

Однако аналогия с обоймой пистолета не совсем точна. Если в обойме нет патронов, то пистолет не стреляет, а в стеке возврата, даже если в него ничего не записали, хранится нуль, который по команде В/0 превращается в адрес 01 - на него-то и передается управление. В обойму нельзя поместить больше патронов, чем это предусмотрено конструкцией, а в стек адресов - можно, так как сигнала о том, что стек возврата полностью заполнен, нет. В стеке всегда находится пять последних адресов, а более ранние вытолкнуты из него с противоположной стороны и безвозвратно потеряны. И, наконец, в обойме могут кончиться патроны, а запас адресов в стеке возврата не кончается никогда. При этом возможны два случая. В стек возврата записывалось не более четырех адресов. Тогда адрес, который попадает в первый регистр стека возврата после использования всех записанных, будет нулем, и по очередной команде В/0 управление будет передано на адрес 01. Но если в стеке возврата пять адресов, то при использовании первого же адреса в пятом регистре появляется адрес-диверсант, обе цифры которого совпадают с последней цифрой адреса, находившегося там прежде. Если же адрес кончался нулем, то формируется адрес перехода "-0".

По мере обращения к стеку возврата адрес-диверсант заполняет все его регистры и, когда до него доходит очередь, "стреляет", но не туда, куда нужно. Зная это, можно отыскивать причины сбоев в иной "железной" программе. Просто перед нею использовалась программа, в которой полностью был занят стек возврата, а затем, без выключения питания, была введена программа с командой В/0, стоящей вне подпрограммы. И хотя формально здесь не было никаких нарушений, вспомним все же, что в руководстве нет указаний на возможность использования команды В/0 вне подпрограммы, а все, что не разрешено...

Конечно, если уж произошла такая неприятность, то можно выключить питание. При этом обнуляются все регистры, в том числе и стека возврата. Затем можно включить калькулятор н снова ввести программу и данные. Впрочем, знакомство с микрокомандами и микропрограммами ПЗУ микропроцессора К145ИК1302 позволяет предложить метод очистки стека возврата без выключения питания: Сх B^ ВП 50 Fx2 "ЕГГОГ" Fx2 "ЗГГОГ" Сх - и стек возврата очищен, а точнее - обнулен.

Если бы были опубликованы микрокоманды и микропрограммы для микропроцессоров, установленных в Б3-34 и МК-61, подобно тому как они опубликованы для микропроцессора К145ИКП ("Электронная промышленность", 8/78 ), то жизнь многих любителей поисков новых возможностей наполнилась бы новым содержанием. Оии могли бы на основании абсолютно точных данных анализировать работу калькулятора при воздействиях, не указанных в руководстве, и точно определять, что находится в рамках дозволенного, а что - нет. Не пришлось бы ломать голову над тайной ГСЧ, и совершенно просто делались бы открытия, например, такие: если регистры X и Y обнулены, то подача команды Кmax равносильна команде языков высокого уровня RANDOMIZE, по которой происходит возврат к началу псевдослучайной последовательности (это бывает нужно при отладке программы). Но как только будет устранен дефект МК-61, считающего нуль самым большим в мире числом, этим приемом пользоваться будет нельзя.

В нашем занятии уже несколько раз упоминалась 16-ричная цифра F, индицируемая пустым местом. Особую опасность представляет появление ее на первом месте мантиссы. Тут, как и в жизни, появление на первом месте пустого места ведет к беде. Первыми столкнулись с этим владельцы Б3-34, искавшие способы вывести на индикатор символы шести последних 16-ричных цифр. Делают это с помощью некорректных операций. Вот один из способов получения букв - вводим в регистр X любую цифру, кроме нуля, и проводим операции К* "ЕГГОГ" ВП B^ "E". Полученную букву Е можно заносить в регистры памяти и вызывать оттуда. С помощью регистров 0..3 ее можно трансформировать в другие символы 16-ричных цифр. Сначала ее заносят в один из этих регистров, для определенности возьмем регистр 2, а затем КПХ2 ПХ2 "Г" КПХ2 ПХ2 "С" КПХ2 ПХ2 "L" КПХ2 ПХ2 "-" КПХ2 ПХ2 "9" и т.д. Если в регистре X будет число, состоящее из нескольких цифр, то, проведя операцию по получению буквы Е, получим это же число, в котором первая цифра заменена буквой Е. Можно сразу получить букву Г, выполнив операции Сх К* "ЕГГОГ" ВП ВП B^ "Г".

Но если при получении буквы Е в регистре X будет ноль или при получении буквы Г на клавишу ВП нажать один раз, а не два, то на индикаторе появится светящаяся точка, а это значит, что в первом разряде мантиссы находится 16-ричная цифра F. Если ее немедленно не изгнать командой B^, подаваемой не менее четырех раз подряд, а попытаться проводить какие-то другие операции, то калькулятор выходит из повиновения, уничтожает программу и данные, а в некоторых случаях самопроизвольно переходит в режим вычислений, остановить которые командой С/П не удается. Такие же явления наблюдаются при попытке работать со "сверхчислами", порядок которых больше 299. Причина и там та же - появление на первом месте F. Если же порядок "сверхчисла" лежит между 200 и 299, то после окончания работы программы управление будет передано на адрес, состоящий из двух первых цифр порядка.

Иногда F оказывается на первом месте при получении слов-оценок, начинающихся с буквы "О". Те, кто пробовал получить, применяя логические операции, слово-оценку "OSEL", знают, что это можно сделать следующим путем: сложить по модулю два 888588 и 878063, а затем выполнить К|х| B^ ВП 5 B^. Однако, хотя на индикаторе желанный "осел", кричать надо не "ура!", а "караул". Если немедленно, и притом только вручную, не изгнать его многократной подачей команды B^, то, как и в описанных выше случаях, микрокалькулятор выйдет из повиновения. И тогда только отключение питания может привести его в чувство. Лишившись программы и констант, он вновь становится послушным слугой своего владельца.

Большинство жалоб на неправильную работу калькулятора, а также нахождение его "новых" и "сверхновых" вычислительных возможностей связано с несоблюдением правил пользования командами ВП и /-/, установленных изготовителем. Можно лишь пожалеть о том, что в ПЗУ не нашлось места для создания сигнала ЕГГОГ при несанкционированном использовании этих команд, подобно тому как это сделано для сочетания команд ВП и десятичная точка.

Ответ на некоторые жалобы можно отыскать в руководстве. До сих пор в редакцию приходят письма о том, что при вводе чисел А и В с клавиатуры фрагмент А В^ /-/ В приводит к потере числа А с измененным знаком. Но ведь это происходит в строгом соответствии с руководством. Команда B^ разделяет вводимые операнды, и тот, который остался в регистре X, заменяется новым, а то, что произошла смена знака, не имеет значения. Авторы нескольких писем повествуют о том, как с помощью клавиш "десятичная точка" и "цифра", создать команду перехода на адрес 100-104. Но ведь о том, что именно так и надо делать, сказано в пункте 7.2.1.3 руководств для МК-52 и МК-61.
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Пт Мар 03, 2023 12:11 am

12/89
Раздел ведет кандидат физико-математических наук Ю.ПУХНАЧЕВ.

Мы обращаемся к пользователям персональных компьютеров, читающих в нашем журнале разделы "Человек и компьютер" и "Школа начинающего программиста".
Начинающих пользователей мы просим показать эту страницу своим опытным друзьям и коллегам, хорошо справляющимся с работой на персональных компьютерах.
Опытных пользователей мы просим внимательно прочесть эту страницу. Мы предваряем ею новый учебный год в нашей "Школе".
В стране становится все больше персональных компьютеров типа IBM PC. Зачастую их владельцы не имеют хороших руководств, по которым можно было бы быстро и уверенно освоить эти машины. (Владельцы отечественных ЭВМ здесь находятся в лучшем положении). Вот для таких пользователей мы и намерены провести курс занятий, программа которого публикуется ниже.
Прочтите ее. Хотите ли вы провести одно или несколько занятий! Если да, срочно сообщите об этом нам в редакцию. Если вам кажется неудачной формулировка тематики того или иного занятия, можете изменить ее по своему усмотрению. В своем письме скажите и об этом.
Текст отдельного занятия не должен превышать 24 машинописных страниц. Очень желательны иллюстрации. Можно прилагать лишь их эскизы - редакционные художники и фотографы выполнят их в нужном виде.
Такова главная и единственная тема, адресованная в этом выпуске раздела пользователям персональных компьютеров. Остальные его страницы обращены к владельцам программируемых микрокалькуляторов.

ДЛЯ НОВОГО УЧЕБНОГО ГОДА
1. Как в распакованный компьютер "вдохнуть жизнь" (2 занятия);
- конфигурация компьютера: XT, AT, центральный процессор, сопроцессор, ускорение TURBO, мягкий и жесткий диски, дисплей, дисководы, клавиатура;
- тестирование компьютера;
- азы дисковой операционной системы MS-DOS;
- к вопросу о том, может ли компьютер понимать русские буквы (драйверы кириллицы);
- загрузка в компьютер популярных программных продуктов;
- "блеск и нищета" компьютерных игр: игры - это, с одной стороны, самое эффективное средство овладения клавиатурой и "мышью" да и всем компьютером в целом, с другой - это один из главных источников компьютерных вирусов и компьютерных психозов;
- периферийные устройства компьютера: принтеры, джойстики и т.д.;
- экономические и этические проблемы, возникающие при "оживлении" персонального компьютера; несанкционированная перезапись программ и компьютерный вирус как наказание за это;

2. Инструментальные системы персонального компьютера, например, PCTOOLS и Norton Commander. Приемы, позволяющие "жонглировать" информацией, хранящейся в оперативной и архивной памяти компьютера: копировать, перемещать, стирать, проверять, распечатывать файлы на дисках (этот и остальные пункты рассчитаны на одно занятие);

3. Персональный компьютер - интеллектуальная пишущая машинка. Текстовые процессоры - например, Лексикон (Е.Н.Веселов) и MultyEdit (фирма "Multysoft"). Как на экране дисплея создается красивый текст и как потом он переносится на бумагу принтера? Электронные бланки. Электронная почта. Проблемы создания компьютерных сетей;

4. Программирование без программирования; пример - программная среда Eureka фирмы "Borland" - как на ней решаются задачи по математике, физике, химии и другим дисциплинам, строятся графики, анализируются функции;

5. Что такое языки программирования с приставками TURBO и Quick фирм "Borland" и "Microsoft": BASIC, Pascal, C, plolog и др. Понятия среды программирования, библиотеки прикладных программ, автоматизированного рабочего места (АРМ);

6. Программные пакеты статистической обработки экспериментальных и прочих данных - как на дисплее компьютера можно построить график или поверхность, проходящие через заданные точки или описывающие заданные функции;

7. Работа с электронными таблицами в программных средах - таких, как Framework и Спектр; как с помощью персонального компьютера можно быстро, безошибочно и красиво построить сводную таблицу, круговые диаграммы, гистограммы и пр. Проблемы перевода западных программных продуктов на русскую лексическую основу;

8. Понятия базы данных, базы знаний; примеры - база данных в пакете Framework и пакеты dBASE фирмы "Ashton - Tate".

КАК Я ОСВАИВАЛ ВЫЧИСЛИТЕЛЬНУЮ ТЕХНИКУ
Началось это в сравнительно недавние студенческие годы. Началом был курсовой проект по ТММ ["Тут моя могила",- так расшифровывает эту аббревиатуру студенческий фольклор. Точная расшифровка: теория машин и механизмов]. Кинематические параметры заданного механизма определялись графическим методом, по чертежной бумаги в магазинах не было, и, чтобы не попасть в неуспевающие, я купил калькулятор Б3-35. С его помощью все, что определялось построением векторов, я представил таблицей, доставив преподавателю немалое изумление. Чертить все-таки пришлось.

Настал КНИРС [Курсовая научно-исследовательская работа студента], где использование ЭВМ было уже обязательным. Тема: "Влияние жесткости надрессорника на плавность хода автомобиля". Надрессорник - это упор над рессорой, который включается в работу при пробое подвески, то есть когда нагрузка на рессору больше расчетной. Руководивший моей работой аспирант предложил написать программу. Я написал ее на Фортране, благо язык давался легко; мой руководитель проверил программу и убедился в ее правильности.

Считая по этой программе, машина основную часть времени печатала многочисленные графики скоростей, ускорений, перемещений. Я расстилал распечатки на полу, обводил разноцветными фломастерами графики, искал по ним случаи пробоя подвески. Машинное время давали нечасто, и пробой наблюдался не всякий раз. Подходил срок сдачи КНИРС, а мы получили только три точки и долго думали, какую кривую по ним построить. Решили взять еще немного машинного времени и попытаться найти хотя бы четвертую и пятую точки.

Но на машину я так и не явился. Решил больше не связываться с ней, а вычислить все на программируемом калькуляторе, который был у товарища. Максимально упростил задачу и решил как можно четче ответить на вопрос: что я ищу? Пришел к выводу, что определяющая характеристика - это ударный импульс, передаваемый надрессорником на корпус машины. Просчитал на МК-54, еще упростил... Аналитические расчеты подтвердили: жесткость надрессорника практически не влияет на величину ударного импульса. Но значительно влияние упругих характеристик: неупругий надрессорник передает вдвое меньший импульс, чем абсолютно упругий.

Позже я вычитал, что на танке Леопард-2 (ФРГ) применен гидравлический, то есть неупругий надрессорник.

С тех пор у меня осторожное отношение к ЭВМ. Доступность машины, например, побудила моего однокашника решать простое тригонометрическое уравнение перебором аргумента!

Окончил институт, работаю инженером. МК-61 у меня всегда наготове, обращаюсь к калькулятору после аналитического анализа задачи.
Д.ПАВЛОВ (г.Ленинград)

[ УЗЕЛКИ НА ПАМЯТЬ
В "Школе начинающего программиста" (11/88 ) опубликована программа выделения целой части из числа любого знака. Она работает правильно во всех случаях, кроме одного. Когда надо выделить целую часть из целого отрицательного числа, программа дает ошибку, а ведь такой случай может встретиться при работе программы, когда заранее неизвестно, из какого числа придется выделять целую часть. Предлагаю программу для МК-61, свободную от этого недостатка. 00. К[х] 01. В^ 02. Fх<0 03. 08 04. FBx 05. 1 06. - 07. x-y O8. FBx 09. K[x] 10. С/П
A.РУБЦОВ, ученик 9-го класса (г.Мытищи).

Микрокалькулятор Б3-34 может вычислять тригонометрические функции, если аргумент задан не только в градусах или радианах, но и градах. Для этого переключатель "Р-Г" нужно установить в среднее положение. Но вот беда - переключатель в это положение установить трудно, и он в нем не фиксируется. Этот недостаток можно устранить, разобрав калькулятор и слегка изогнув контактную пластину переключателя. При установке пластины на место ее ставят вогнутостью к контактам.
B.ОБРУБОВ, ученик 8-го класса (г. Душанбе).

Предлагаю простую таймерную программу, пригодную для всех программируемых калькуляторов. 00. КПХ4 01. FL0 02. 00 03. ПХ1 04. С/П. Перед пуском программы необходимо очистить регистр 4, занести в регистр 1 число - сигнал конца работы таймера, а в регистр 0 - время работы таймера в секундах, после чего нажать клавиши В/0 С/П.
А.ПАПОРОДНИК (г.Киев)

ОТ РЕДАКЦИИ. Точность работы такого таймера зависит от частоты генератора ПМК, а она различается в отдельных конструкциях до 20 процентов.

Если необходимо выяснить, какие символы стоят на погашенных знако-местах после выполнения логической операции, то достаточно проделать операции ВП 7 В^. При этом десятичная точка переместится в последний разряд, нули "зажгутся", а на месте цифры F не будет никакого символа. Например: 8457289 В^ 8526576 К+ "8.1717" ВП 7 В^ "8.1717 0".
А.ГАЙСТЕР, ученик 9-го класса (г.Калинин).

ОТ РЕДАКЦИИ. Способ Саши Гайстера проще, чем способ киевлянина К.Туркина, ранее опубликованный в нашем журнале (2/89) ]

МНЕ ЭТО УДАЛОСЬ
В книге Я.К.Трохименко "Игры с микроЭВМ" (Киев, "Технiка", 1986) есть программа для игры "Логика": человек угадывает число, загаданное калькулятором. В случае чисел с повторяющимися цифрами программа может давать неправильные результаты. В книге написано, что устранение этого недостатка невозможно при существующем ресурсе памяти калькулятора, а если и возможно, то связано с существенным увеличением времени счета. Я позволил себе в этом усомниться и довольно быстро составил алгоритм, который можно было бы попытаться втиснуть в память калькулятора типа Б3-34. Остальное было делом техники. В результате получилась программа, лишенная указанных недостатков и к тому же работающая даже быстрее, чем программа Я.К.Трохименко.

Вот правила игры. Один из двух партнеров (его роль выполняет калькулятор) загадывает четырехзначное целое число, другой предлагает пробные четырехзначные числа, на что первый партнер каждый раз сообщает общее количество угаданных цифр и число угаданных мест их расположения в пробном числе. Цель игры - руководствуясь этими сообщениями, попытаться отгадать задуманное число за наименьшее число попыток.

Программа игры, составленная для калькулятора Б3-34: 00. ПД 01. Cx 02. П6 03. 9 04. F1/x 05. ИПД. 06. * 07. Fпи 08. + 09. 1 10. ВП 11. 7 12. * 13. П8 14. П9 15. 4 16. П0 17. ПП 18. 71 19. КП^ 20. FL0 21. 17 22. ИП5 23. С/П 24. ^ 25. ВП 26. 4 27. + 28. ПС 29. П9 30. Сх 31. П5 32. КИП6 33. 4 34. П0 35. ПП 36. 71 37. КИП^ 38. - 39. Fx=0 40. 42 41. КИП5 42. FL0 43. 35 44. 4 45. ИП5 46. - 47. Fx=0 48. 58 49. 0 50. , 51. 9 52. 9 53. F1/x 54. ИП6 55. * 56. С/П 57. КБП0 58. ИП5 59. ИПА 60. * 61. П5 62. ИПС 63. П9 64. КППВ 65. КППВ 66. КППВ 67. КППВ 68. ИП8 69. БП 70. 14 71. ИП9 72. ИПА 73. / 74. П9 75. КИП9 76. x-y 77. ИП9 78. - 79. П7 80. В/0 81. 4 82. П0 83. ПП 84. 71 85. ИП7 86. КИП^ 87. - 88. Fx=0 89. 95 90. КИП5 91. 1 92. КП^ 93. БП 94. 97 95. FL0 96. 85 97. В/0

Введя программу, наберите на клавиатуре 10 ПА 81 ПВ В/0, а после останова - какое-нибудь случайное число в интервале от 0 до 60 (для этой цели удобно использовать показания часов в виде: ЧЧ.ММ или ММ), затем нажмите клавишу С/П. Примерно за 30 секунд калькулятор "загадает" четырехзначное число. Теперь наберите какое-нибудь четырехзначное число и опять нажмите клавишу С/П. Через полторы минуты на индикаторе появится двузначное число mn, младший разряд которого n показывает количество угаданных цифр, а старший m - количество цифр, стоящих на своих местах (однозначное число свидетельствует о том, что m=0). Обдумав полученный ответ, введите новое число. Когда введенное число совпадет с задуманным, калькулятор сообщит количество попыток N, потребовавшихся для отгадывания задуманного им числа, в виде N.NNN. При правильно выбранной тактике игры обычно достаточно 6-9 попыток.

Разложение чисел на составляющие цифры выполняется калькулятором с помощью подпрограммы 71-80. При этом для сокращения длины программы и времени ее выполнения производится сравнение не самих цифр, а их нормированных значений (в 10 раз меньших). Число m подсчитывается по командам 30-43, а число n - по командам 58-67 с помощью подпрограммы 81-97. Основная трудность в определении n заключается в том, что простой перебор цифр задуманного и проверяемого чисел и их сравнение могут привести к неправильной оценке n, если хотя бы одно из этих чисел содержит повторяющиеся цифры. Поэтому при каждом совпадении цифр задуманного и проверяемого чисел соответствующая (уже учтенная) цифра задуманного числа должна быть исключена из дальнейшего анализа. Это можно сделать, например, путем замены цифры каким-нибудь числом, большим 0.9 (нормированная девятка), с помощью команд 91-92. Команды 68-70 служат для последующего восстановления стертых таким образом цифр. Команды 44-57 проверяют тождественность задуманного и проверяемого чисел, подготавливают сообщение об окончании игры и обеспечивают переход к началу программы.
В.ПОДОЙНИЦЫН (г.Харьков)

[ УЗЕЛКИ НА ПАМЯТЬ
Сетевой блок питания БП2-3К, входящий в комплект МК-52, имеет переключатель "З-Р" (заряд-работа), однако первое положение переключателя не используется, так как руководством по эксплуатации микрокалькулятора предусмотрено питание только от элементов 316. Между тем, как установили многие владельцы МК-52, его можно питать также от аккумуляторов НКГЦ-0,45. Для того, чтобы с помощью сетевого блока можно было заряжать аккумуляторы НКГЦ-0,45, устанавливаемые вместо элементов 316, отпаивают проводник от вывода 4 разъема XPI (все обозначения даются по схеме, прилагаемой к руководству по эксплуатации) и припаивают его к свободному выводу 3 того же разъема. Теперь, если поставить переключатель блока питания в положение "З", будет происходить заряд аккумуляторов. При работе от аккумуляторов блок питания нужно отключать от микрокалькулятора, иначе они будут разряжаться через блок.
В.ШАПОШНИКОВ (г.Москва) ]

БЕСЕДА О СЛУЧАЙНЫХ ЦИФРАХ
В читательской почте по-прежнему встречаются письма о генераторе случайных чисел, используемом в калькуляторах МК-52 и МК-61. Приводим выдержки из некоторых писем.

Для возврата к началу псевдослучайной последовательности вовсе не обязательно выключать микрокалькулятор. Достаточно очистить регистры X и Y, после чего нажать клавиши Кmax Ксч. На индикаторе появляется первое число псевдослучайной последовательности: 4.0406-01. При повторном нажатии Ксч появится второе число 8.729671-01 и т.д. Возвращаться к началу псевдослучайной последовательности можно неоднократно - это удобно, например, при отладке программ.
В.СОЛДАТОВ (г.Краснореченск Приморского края).

Программа 00. Сх 01. Fx2 02. Cx 03. Ксч дает 174 неповторяющихся числа, а если перед ней будут арифметические действия, то неповторяющихся чисел будет 199, затем одно и то же число будет повторяться через каждые 25 чисел.
В.ВАСИЛЬЕВ, ученик 6-го класса (г.Вышгород Киевской обл.)

Команду Ксч лучше "заключать в объятия": B^ Ксч B^. Если выделить ячейку памяти N для случайного числа, то по командам ПХN B^ Ксч ХПN получают новое случайное число.

Матчасть диванного танкиста - Страница 4 89120110

Выборка из 1000 испытаний по программе, использующей "заключение в объятия", дает достаточно равномерное распределение случайных чисел, показанное на рисунке сплошными линиями. Если же не пользоваться этим приемом, то распределение случайных чисел, генерируемых встроенным генератором, далеко от равномерного. Оно показано па рисунке пунктиром.
М.КОПЫЛОВ, С.ДУЮНОВ (г.Миасс Челябинской обл.).

Для уверенной работы генератора случайных чисел я использую программу: 00. FBx 01. FBx 02. Ксч 03. 2 04. F10X 05. * 06. ПЕ 07. С/П.
А.ОПЛАЧКО, ученик 9-го класса (г.Тамбов)

БАШНЯ НЕ ВЫСОКАЯ, НО ЛЮБОПЫТНАЯ
Головоломка "Ханойская башня", о которой писал наш журнал в прошлом году (2,12/88 ), не оставила равнодушными и владельцев программируемых микрокалькуляторов. Всего было прислано с десяток программ. Во многих из них реализовался алгоритм, не связанный с рекурсивными функциями [О рекурсии см. 2/88 ). Ю.Сивков из Курска расположил стержни в вершинах равнобедренного треугольника так, как это показано на рисунке, и сформулировал алгоритм решения задачи.

Матчасть диванного танкиста - Страница 4 89120210

При всех нечетных ходах наименьший кружок переносится на соседний стержень, все время двигаясь по часовой стрелке. При всех четных ходах переносится меньший из верхних кружков, находящихся на стержнях, на которых нет наименьшего из всех кружков. Задача решена, если все кружки перенесены со стержня 1 на стержень 3. Точнее говоря, Ю.Сивков, считает, что задача решена, если на стержнях, не содержащих наименьшего кружка, нет никаких кружков.

00. ХП1 01. Сх 02. ХП2 03. ХП3 04. 1 05. ХП7 06. 2 07. ХП8 08. 3 09. ХП9 10. КППД 11. 2 12. ХП7 13. 3 14. ХП8 15. 1 16. ХП9 17. КППД 18. 3 19. ХП7 20. 1 21. ХП8 22. 2 23. ХП9 24. КППД 25. БП 26. 04 27. КППЕ 28. КПХ9 29. КПХ7 30. Кmax 31. - 32. Fx!=0 33. 39 34. ПХ7 35. ХП8 36. ПХ9 37. ХП7 38. КБПЕ 39. ПХ9 40. ХП8 41. КПХ7 42. Fx=0 43. 53 44. 3 45. 3 46. 1 47. Кинв 48. В^ 49. ВП 50. 2 51. С/П 52. В/0 53. B^ 54. K[x] 55. XП6 56. - 57. ПХ0 57. * 59. КХП7 60. КПХ8 61. ПХ0 62. / 63. ПХ6 64. + 65. КХП8 66. ПХ7 67. ПХ0 68. * 69. ПХ8 70. + 71. F10X 72. * 73. С/П 74. В/0.

После набора программы в регистры записывают постоянные: 10 - Р0, 27 - РД и 41 - РЕ. После этого в регистр X записывают номера кружков, из которых состоит пирамида. Например, если она состоит из трех кружков, то в регистр X заносят число - 1.23, а если из восьми, то 1.2345678. Точку после единицы ставить обязательно. Из формы записи ясно, что для наших калькуляторов число кружков не может быть больше чем 8. После записи номеров кружков нажимают клавиши В/0 С/П. Через 10-15с на индикаторе появляется результат расчета. На месте мантиссы показано расположение кружков на том стержне, па который переносится очередной кружок, а на месте знаков порядка - ход в формате "откуда-куда". Например, 32 означает, что кружок переносится со стержня 3 на стержень 2. Для последующих ходов нажимают клавишу С/П. После переноса всей пирамиды на индикаторе появляется надпись ВСЕ. При желании после любого хода можно узнать, как в данный момент расположены кружки па стержнях. Эта информация хранится в регистрах, 1, 2 и 3. В этом случае номера регистров совпадают с номерами стержней.

Программа Ю.Сивкова имеет два недостатка. Во-первых, она переносит на стержень 3 только пирамиду, состоящую из четного числа кружков, а если оно нечетное, то пирамида переносится на стержень 2. Во-вторых, в программе использован дефект микрокалькулятора, считающего ноль самым большим числом. Если при модернизации этот дефект будет устранен, то придется вносить в программу изменения, связанные с работой команды 30. Кmax.

Однозначную зависимость между номером хода, записанного в двоичной системе счисления, и порядком перекладывания кружков обнаружил Ю.Караванов из Харькова. Его программа сначала преобразовывает в двоичную форму номер очередного хода, а потом он преобразовывается в ход, выдаваемый, как и в предыдущем случае, в формате "откуда-куда". Пирамида может содержать до двенадцати кружков.

00. Сх 01. ХПЕ 02. 1 03. 3 04. ХП0 05. ХП1 06. 1 07. КХП0 08. FL1 09. 07 10. 1 11. ХПД 12. ПХЕ 13. 1 14. + 15. ХПЕ 16. 2 17. / 18. В^ 19. К{х} 20. Fx=0 21. 30 22. ПХД 23. 1 24. + 25. ХПД 26. F() 27. F() 28. БП 29. 16 30. ПХД 31. 2 32. / 33. К{х} 34. Fx!=0 35.46 36. КПХД 37. ХП0 38. 1 39. - 40. Fx= 0 41. 43 42. 3 43. КХПД 44. БП 45. 57 46. КПХД 47. ХПО 48. 1 49. + 50. КХПД 51. 4 52. - 53. Fx=0 54. 57 55. 1 56. КХПД 57. ПХ0 58. КПХД 59. 1 60. 0 61. / 62. + 63. С/П 64. БП 65. 10. Для запуска программы в первый раз подаются команды В/0 С/П. Примерно через 15с на индикаторе - первый ход 13. Для последующих ходов нажимают клавишу С/П. Время вычисления хода около 15с. Как и в предыдущей программе, пирамида из нечетного числа кружков переносится на один стержень (второй), а из четного - на другой. При пользовании этой программой оператор сам следит за окончанием переноса, так как в программе не предусмотрены ни ввод количества кружков в пирамиде, ни сигнал об окончании переноса.

В нескольких программах предпринята попытка осуществить на микрокалькуляторе рекурсивную операцию.

Основная трудность, с которой столкнулись составители таких программ, заключалась в создании механизма управления рекурсивным процессом. Путь, которым воспользовались почти все, заключался в том, что сначала в программах шла наиболее часто повторяемая часть, а затем - менее повторяемые части. Все здесь логично, так как вычисления идут именно в таком порядке. Однако подобное расположение частей программы требует широкого использования команд условных н безусловных переходов, что не только делает программу трудно понимаемой, но и увеличивает время ее работы. В созданных по этому принципу программах московского школьника А.Школьникова и учителя из Мордовии С.Герасимова расчет одного хода продолжается минуту и более.

Совсем по-иному осуществляется управление рекурсивным процессом в программе В.Хмелюка из Подмосковья (она, кстати, может быть реализована как на МК-61, так и на Б3-34). Нетрадиционное размещение более повторяющихся частей программы после менее повторяемых частей позволило использовать для организации рекурсивного процесса стек адресов подпрограмм и осуществить возврат одной и той же командой В/0. В этом случае число циклов возврата не может превышать количества адресов, умещающихся в стеке адресов подпрограмм. Но один адрес необходим для подпрограммы формирования хода в формате "откуда-куда", так как эта операция встречается в тексте программы восемь раз и без подпрограммы не обойтись. Так как основной операцией является перенос трех кружков, то, используя четыре из имеющихся пяти позиций для записи адресов подпрограмм, можно переносить пирамиду, число кружков в которой не больше семи.

Приводим программу В.Хмелюка с пояснениями автора.

После набора программы в регистры памяти записывают постоянные: 56 - в РA, 60 - в РВ и 72 - в PC. В регистр X вводят число кружков в пирамиде, которое обозначим N. Должно выполняться условие 2<=N<=7. После ввода N нажимают клавиши В/0 С/П. Первый ход вычисляется за 10с. Все последующие ходы вычисляются после нажатия клавиши С/П. Время вычисления одного хода от трех до восьми секунд. После того как все кружки перенесены, на индикаторе появляется надпись ВСЕ, если расчет велся на МК-61, пли восемь троек, если на Б3-34.

А теперь программа:

00. B^ 01. 2 02. FxY 03. ХП0

вычисление числа ходов, необходимого для переноса пирамиды из N кружков со стержня 1 на стержень 3, которое равно 2**N-1. Запись этого числа в регистр реверсивного счетчика

04. x-y

вызов числа N в регистр X.

05. 2 06. / 07. К{х} 08. Fx!=0

N четное? (Для Б3-34 переключатель "Р-Г" ставят в положение "Р" и изменяют программу:

05. Fпи 06. * 07. Fcos 08. Fx<0

косинус положителен, если N - четное).

09. 16 10. 3 11. ХП3 12. 2 13. ХП2 14. БП 15. 20
16. 3 17. ХП2 18. 2 19. ХП3
20. 1 21. ХП1

записаны номера стержней в регистры 1, 2 и 3 в порядке, зависящем от того, какое количество кружков в пирамиде - четное или нечетное. Этот прием обеспечивает перенос пирамиды со стержня 1 только на стержень 3.

22. ПП 23. 25 24. КППВ 25. ПП 26. 28 27. КППA 28. ПП 29. 31 30. КППВ 31. ПП 32. 34 33. КППА

заполнение стека адресов подпрограмм. Эта операция подготовляет рекурсию. Теперь команда В/0, находящаяся на шаге 55, в первый раз передаст управление на шаг 33, во второй - на шаг 30, в третий - на шаг 27, в четвертый - на шаг 24. Так осуществляется рекурсия, когда при каждом возврате не только повторяются все без исключения предыдущие операции, но и с каждым циклом повтора в орбиту вычислении включаются псе новые и новые операции.

34. ПХ1 35. ПХ3 36. КППС
37. ПХ1 38. ПХ2 39. КППС
40. ПХ3 41. ПХ2 42. КППС
43. ПХ1 44. ПХ3 45. КППС
46. ПХ2 47. ПХ1 48. КППС
49. ПХ2 50. ПХ3 51. КППС
52. ПХ1 53. ПХ3 54. КППС

формирование хода при переносе первых трех кружков и передача уравнения для формирования формата хода.

55. В/0

команда возврата к началу очередного цикла рекурсии.

56. ПХ1 57. ПХ2 58. БП 59. 62
60. ПХ2 61. ПХ1
62. КППС

формирование хода при переносе кружка, помер которого больше трех.

63. ПХ1 64. ПХ2 С5. ПХ3 66. ХП1 67. F() 68. ХП3 69.F() 70. ХП2 71. В/0

подпрограмма циклической перестановки номеров стержней в регистрах 1, 2 и 3.

72. 1 73. 0 74. / 75. + 76. С/П

подпрограмма создания формата "откуда-куда" и останов для индикации хода.

77.КПХ0

работа реверсивного счетчика.

78. ПХ0 70. Fx=0 80. 89 81. 3 82. 3 83. 1 84. КИПВ 85. В^ 80. ВП 87. 2 88. С/П

проверка содержимого реверсивного счетчика, создание сигнала ВСЕ, если оно равно нулю, останов и индикация этого сигнала.

89. В/0

продолжение работы программы, если содержимое реверсивного счетчика не равно пулю. Для Б3-34 конец программы нужно изменить:

80. 84 81. 3 82. F1/х 83. С/П 84. В/0.

БЫСТРЕЕ И НАДЕЖНЕЕ
Я радиолюбитель со стажем, и когда на калькуляторе МК-61 при включении вместо нуля по индикатору забегали какие-то знаки, я вскрыл его и обнаружил, что возбуждается преобразователь.

При увеличении емкости С3 до 30мкФ возбуждение пропадает. По совету журнала "Наука и жизнь" я уменьшил резистор R1 с одного МОм до 240кОм. Микрокалькулятор продолжал работать устойчиво, а его быстродействие увеличилось примерно на 40 процентов. Для продления службы элементов я впаял резистор между выводами 2 и 3 входного разъема ХР1. Теперь во время работы от сети происходит подзарядка элементов А 316, и срок их службы увеличивается в 3-4 раза. Установка резистора обеспечит и подзарядку аккумуляторов НКГЦ-0,45 для тех, кто заменил ими сухие элементы. Резистор нужно выбирать таким образом, чтобы при использовании элементов ток через него не превышал 25мА, а при работе от аккумуляторов - 45мА. Последнее усовершенствование внесено мною в блок питания "Д2-10М". Дело в том, что в ряде районов напряжение в сети падает ниже 190В, а при этом калькулятор перестает работать. Я увеличил вторую обмотку трансформатора блока питании со 160 витков до 230. Для этого, конечно, пришлось разобрать трансформатор. Между выпрямительным мостиком и выходом блока питания, я установил простейший стабилизатор, обеспечивающий на выходе напряжение 6.2В (см. рисунок). Емкость С1 увеличена до 500 мкФ, рабочее напряжение до 15В.

Матчасть диванного танкиста - Страница 4 89120310

В.РОМАНОВ (г.Рыбница).

ОТ РЕДАКЦИИ. Публикуя письмо В.Романова, предупреждаем желающих последовать его примеру, что прежде нужно ознакомиться с правилами монтажа микросхем, иначе можно вывести нз строя микрокалькулятор. Редакция надеется, что сотрудники ПО "Кристалл", изготовляющего микрокалькуляторы, пришлют нам оценку предложения В.Романова, которая будет опубликована.

[ МАЛЕНЬКИЕ ХИТРОСТИ
Команда "запятая" в режиме счета по программе стирает содержимое регистра X и восстанавливает в нем значение, бывшее там не только после команд, приведенных в заметке С.Зазовского (4/89), то есть команд 0, 1, .., 9, В^, ПХР, но и после команд /-/, Сх, КПХР, где Р-номер любого регистра.
В.СИЛАЕВ (г.Киев) ]
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Мар 04, 2023 12:50 am

Конец уже близок. "Школа программиста" превращается в "школу пользователя". И хуже того, "учителя" не только не понимают как (и зачем) "эта штука" программируется, но и ставят перед собой неразрешимую задачу: привести в привычный советскому человеку вид документацию для тупого западного покупателя. Как описать словами комикс или мангу?

1/90
ШКОЛА ПОЛЬЗОВАТЕЛЯ ЭВМ
Наша "Школа" сменила название. До сих пор она именовалась "Школой начинающего программиста". Что ж, покуда в стране не хватало компьютеров, особенно персональных, интересующимся ими оставалось разве что писать программы - благо для этого надобны лишь бумага и авторучка.
Между тем число персональных компьютеров в нашей стране все возрастало. Разными путями, мало-помалу завозились зарубежные, появились отечественные. Осваивать вторые в известном смысле проще - документация к ним составлена на русском языке, не так уж трудно установить контакты с разработчиками и создателями программного обеспечения. Поэтому, намереваясь наладить в нашей "Школе" обучение работе с персональными компьютерами, мы прежде всего имели в виду наиболее массовые из зарубежных - машины семейства IBM PC (читается "ай-би-эм-пи-си" и означает "персональный компьютер фирмы IBM").
У машины IBM PC есть модификации XT и AT. Аналогами компьютеров этих трех типов являются машины ЕС 1840, ЕС 1841, ЕС 1842, Искра-1030, выпускаемые в Советском Союзе, Правец-16, Правец-24, выпускаемые в Болгарии. Таким образом, сведения, излагаемые на последующих занятиях "Школы", отчасти относятся и к отечественным персональным компьютерам. По возможности они будут излагаться так, чтобы их можно было применить к любой машине этого семейства и к любому аналогу.
Программа предстоящего цикла занятий опубликована в журнале "Наука и жизнь", 12/89. Советуем ознакомиться с ней тем, кто желает провести одно или несколько занятий. Там рассказано, в каком виде присылать их тексты в редакцию.
Если что-то из опубликованного в рамках того или иного из предстоящих занятий вызовет у вас несогласие, напишите об этом в редакцию. Самые интересные из присланных откликов будут опубликованы в разделе "Человек и компьютер".
Смена названия "Школы" еще раз подчеркивает, что искусство общения с компьютером - это в первую очередь умелое использование готовых программных средств, а не способность составлять новые программы. Переориентация, как видите, отчетливая. Она побуждает изменить и нумерацию занятий.
Итак, "Школа пользователя ЭВМ". ЗАНЯТИЕ ПЕРВОЕ. Ведут его московские инженеры В.Ф.ОЧКОВ и В.С.КИРДОДА. Они знакомят читателей с самыми первыми действиями, которые необходимо совершить, чтобы "вдохнуть жизнь" в только что приобретенный компьютер.

Распакованы коробки, в которых находится приобретенный вами персональный компьютер семейства IBM PC. Сейчас будут извлечены и установлены на столе его составные части. У тех, кому подобное занятие предстоит впервые, а к ним мы в первую очередь и адресуемся, тем временем возникает масса вопросов.

Почему, к примеру, нельзя было выполнить персональный компьютер в виде единого агрегата и упаковать в одну коробку?

Быть может, кое-кто при этом вспомнит популярные в 50-60-е годы радиокомбайны, объединявшие в одной стойке и телевизор, и радиоприемник, и проигрыватель, и магнитофон. На первый взгляд так практичнее: все в одном месте, рационально используются усилители, выпрямители и другие узлы... Но тот, кому приходилось иметь дело с таким монстром, конечно, скажет, что столь практичное на первый взгляд единство таило в себе немалый риск. Стоило выйти из строя какому-нибудь узлу, и весь комбайн превращался в бездействующую груду металла и пластмассы. К тому же далеко не всем было по карману купить сразу весь комбайн, а разбить его на отдельные части, комбинируемые и подбираемые по желанию покупателя, было нельзя. Поэтому радиокомбайны к сегодняшнему дню трансформировались в более удобную блочную аппаратуру.

Подобной аргументацией можно воспользоваться, отвечая на поставленный выше вопрос.

Современный персональный компьютер состоит из нескольких блоков: основного (центрального) и нескольких дополнительных (периферии), количество и состав которых может изменяться в зависимости от типа решаемых задач (это в теории), финансовых и "пробивных" возможностей пользователя (это на практике). Благодаря блочной конструкции отдельные части компьютера можно подобрать по своему вкусу (конечно, если есть выбор). Как правило, пользователи персональных компьютеров сначала покупают минимум блоков, необходимых для начальной работы, а затем докупают недостающие, расширяющие сферы применения компьютера, облегчающие диалог с ним.

Матчасть диванного танкиста - Страница 4 90010110
На снимке - минимальный набор блоков, составляющих персональный компьютер типа IBM PC. В правом верхнем углу снимка - монитор (в обиходе называемый дисплеем). Подставкой ему служит центральный блок. В левой верхней части снимка - принтер. На переднем плане - клавиатура. Заметим, что сама фирма IBM машины типа IBM PC уже не производит. Все персональные компьютеры подобного рода выпускаются многочисленными другими фирмами под разнообразными марками. Вряд ли имеет смысл перечислять их здесь. Да это и не нужно. Достаточно, приобретая компьютер, справиться о его типе. При этом можно, услышать выражения "клоны IBM", "IBM - подобные машины", "машины, совместимые с IBM PC". He вдаваясь в различия между этими терминами (на будущих занятиях "Школы" они станут ясны читателю), поясним объединяющую их суть: программы, выполнимые на одной машине такого рода, как правило, подходят к другой.
Основных типов, на которые сегодня подразделяются такие машины, три. Назовем их вместе с их характеристиками и аналогами, выпускаемыми в социалистических странах.
IBM PC. Процессор 8088, сопроцессора нет, 2 дисковода для гибких дисков 360 килобайт. Аналоги: Правец-16, ЕС 1840.
IBM PC XT. Процессор 8088, возможен сопроцессор 8087, 1 дисковод для гибких дисков 360 килобайт, 1 дисковод для жесткого диска 20 мегабайт. Аналоги: Правец-24, ЕС 1841, Искра 1030 (у этой машины жесткий диск вмещает 5 мегабайт).
IBM PC AT. Процессор 80286, возможен сопроцессор 80287, 1 дисковод для гибких дисков 1200 килобайт, 1 дисковод для жесткого диска 40 и более мегабайт. Аналог: ЕС 1842.

Заметим попутно, что блоки удобнее располагать на рабочем месте. Если, например, стол нужен для каких-то других дел, то гораздо проще отодвинуть в сторону легкую клавиатуру, чем перетаскивать громоздкий моноблочный аппарат или пересаживаться самому на другое место.

Собрать компьютерные блоки в единое целое может даже ребенок. Для его сборки нужны примерно такие же навыки, как для складывания матрешек. Разработчики персональных компьютеров предвидели, что с этими устройствами будут работать в основном неспециалисты, и широко руководствовались программными и аппаратными средствами "дуракоустончивости". В частности, кабели, соединяющие отдельные блоки компьютера, сделаны так, что их никак нельзя перепутать, неправильно соединить: для каждого штекера типа "папа" есть одно-единственное гнездо типа "мама" (просим простить за радиотехнический жаргон). Поэтому компьютер в единое целое собирается довольно быстро и безошибочно.

Не нужно быть семи пядей во лбу и для того, чтобы научиться работать с персональным компьютером. Навыки, необходимые для работы с ним, не сложнее тех, что нужны для пользования телефоном. Им, как известно, успешно овладевают даже те. кто совсем не разбирается в его устройстве. Тот же, кто собирается работать с персональным компьютером, в этом смысле находится в гораздо более выгодном положении. Он наверняка читал популярные статьи и книги, где рассказывается, как любая ЭВМ (и персональный компьютер в том числе) работает по введенной в нее программе. Скорее всего знает он и о том, что работа машины управляется самой машиной при помощи специального комплекса программ, называемых операционной системой, так что на долю человека остается давать машине распоряжения в удобной для него форме.

Информация, почерпнутая в популярной прессе, поможет ответить на самые первые вопросы потенциального пользователя персонального компьютера, возникающие уже тогда, когда заходит речь о его приобретении. Ну, например: какие блоки и в каком количестве должны составлять персональный компьютер? Другими словами, какова должна быть конфигурация компьютерной системы?

В поисках ответа прибегнем к любому, читанному где-то образному рассказу о принципах работы ЭВМ. Скажем, к такому.

Представим себе очень исполнительного и невероятно шустрого курьера, который стоит в начале длинного коридора со множеством примыкающих к нему комнат. По команде запуска программы он, словно по выстрелу стартового пистолета, устремляется по коридору, забегает в первую комнату и читает инструкцию: "Возьми число 2". Запомнив двойку, он перебегает в соседнюю комнату. Там читает инструкцию: "Возьми число 6". Схватив и шестерку, он бежит в следующую дверь. Переведя дух, читает: "Перемножь то, что получил". Перемножил. Зашел в комнату рядом, а там говорят: "Результат отнеси в комнату 8". Отнес и вернулся в соседнюю комнату с той, откуда его только что посылали. Там новая инструкция: "Сбегай в комнату 29, получи инструкцию, выполни ее, возвращайся и продолжай со следующей комнаты". И так он будет бегать из комнаты в комнату н безропотно выполнять все, что скажут, пока, наконец, не обнаружит долгожданную команду завершения работы по программе.

Несмотря на неправдоподобную условность такой модели, она тем не менее позволяет наглядно понять основополагающие моменты в работе любой ЭВМ.

Первое: любая ЭВМ может работать только по заданной программе. Все предписанные программой вычислительные и логические операции выполняет центральный процессор ЭВМ. Fro роль сравнима с ролью курьера из вышеприведенного образного примера.
Второе: программа есть последовательный набор инструкций для решения определенной задачи.
Третье: инструкции программы выполняются поочередно, шаг за шагом.
Четвертое: для хранения инструкций и промежуточных результатов требуется определенное количество ячеек памяти (в нашем примере - комнат).
Пятое: ячейки памяти имеют свои адреса (номера комнат).

Ограничимся пока этими сведениями. Чуть подробнее поговорим лишь о памяти.

В каждом персональном компьютере существует сравнительно небольшой по объему, недоступный для пользователя участок памяти, называемый постоянным запоминающим устройством (ПЗУ). В него при изготовлении компьютера навечно занесена (как говорят, "зашита") некая служебная информация, которая для пользователя никакого потребительского интереса не представляет, а только лишь обеспечивает запуск машины, выполняя ту же функцию, что в автомобиле выполняет стартер.

Другая разновидность памяти - оперативное запоминающее устройство (ОЗУ), или просто оперативная память. Сюда записываются исходные данные решаемых машиной задач, сюда помещаются все промежуточные и окончательные результаты. Операционная система делит просторы ОЗУ между собственными нуждами и потребностями пользователя, отдавая ему, как и положено, львиную долю. Оставшаяся часть ОЗУ используется для размещения прикладных, вспомогательных и других специальных программ, помогающих решению текущей задачи. У компьютеров типа IBM PC объем ОЗУ равен 512-1024 килобайтам.

Вся информация, находящаяся в ОЗУ, существует, лишь покуда работает машина. Стоит ее выключить, и ОЗУ (в отличие от ПЗУ) тут же забудет все, чем только что занималось. Чтобы сохранить то, что было сделано за сеанс работы, используется внешняя долговременная память. Ее роль в персональном компьютере сегодня выполняют различной конструкции магнитные диски.

Существуют две основные группы магнитных дисков: гибкие (называемые в обиходе дискетами, пли флоппи-дисками) и жесткие (за которыми закрепилось "огнестрельное" название "винчестер"). В персональных компьютерах используются гибкие дискеты двух диаметров: 3.5 и 5.25 дюйма. Они позволяют создавать целые "дискотеки" программ, ими можно заменить записные книжки, черновики различных записей и рукописей, личные архивы и прочее. Как выглядят гибкие диски, показано на снимке.

Матчасть диванного танкиста - Страница 4 90010210

Показывать жесткие диски вряд ли нужно. Все равно пользователь их обычно не видит. Они прячутся в недрах центрального блока. Поэтому ограничимся словесным описанием винчестера. Это металлическая коробочка довольно невзрачного вида. Она герметически закупорена, благодаря чему доступ внутрь для пыли, влаги и умельцев-любителей совершенно исключен, что в немалой степени способствует высокой надежности этого устройства.

В чем же различия между гибким и жестким диском? Главное заключается в их существенно неодинаковой емкости. Емкость гибкого диска у машин типа IBM PC составляет от 360 до 1200 килобайт, жесткого - 20 мегабайт, а порой и многократно более. Для сравнения скажем, что на дискете можно записать несколько сот страниц машинописного текста, а на ином винчестере - всю 30-томную Большую Советскую Энциклопедию.

Винчестер повышенной емкости обычно разбивают на фрагменты объемом по 20 мегабайт, обозначаемые буквами С, D, Е и т.д. Эти буквы указываются в программах, когда предстоит перегрузить информацию из ОЗУ в какой-либо фрагмент винчестера или обратно. Если же емкость винчестера выражается только что произведенной цифрой, то под буквой С подразумевается он весь в целом.

Итак, способность хранить большие объемы информации - первое достоинство винчестера. Второе - в том, что он всегда под рукой. А третье - в том, что информацией с ним центральный процессор обменивается очень быстро.

Дискета же имеет то преимущество, что она сменная. Только со сменного диска новые программы могут попасть в персональный компьютер (если, конечно, он не подсоединен к компьютерной сети).

После сказанного мы можем приступить к ответу на вопрос, из каких именно блоков должен состоять персональный компьютер. Чтобы в него попали программы и необходимые для их работы данные с дискеты, ее нужно куда-то вставить. Устройство для этого содержит центральный блок.

Достаем его из коробки. Смотрим. Ничего особенного, специфически "компьютерного", не видим. Простой прямоугольный ящик. На задней стенке несколько разъемов разной формы, так что не найти двух одинаковых. В один из них вставляется сетевой шнур. На боковой стенке-тумблер для включения компьютера. На передней - одна или дне щели для вставки гибкого магнитного диска. Вставить его намного проще, чем установить грампластинку на проигрыватель. Здесь и объяснять-то особо нечего. Главное - знать, где у гибкого диска верх и каким концом нужно вставлять его в дисковод. Еще на передней стенке есть замок компьютера, пара сигнальных лампочек, иногда клавиша, нажатием на которую производится перезапуск компьютера без его отключения от сети. Вот и все.

Таково внешнее впечатление. Но внутри центрального блока скрыто очень многое. Помимо центрального процессора, ПЗУ, ОЗУ, там установлен один, а то и два дисковода для жесткого магнитного диска. Для гибких дисков имеется, как уже говорилось, также один-два дисковода, обозначаемых буквами А и В. (Теперь понятно, почему при разбивке винчестера на фрагменты употребляются латинские буквы, начиная с С).

Достав центральный блок, вы, конечно же, захотите поскорее включить компьютер, приступить к работе. Но, прежде чем щелкнуть тумблером, давайте представим себе, что произойдет в первый момент после включения.

В оперативной памяти будет пусто. Постоянная же память извлечет из своих анналов и запустит в дело программу тестирования всех участвующих в работе компьютерных систем. О любой выявленной неполадке она сообщит вам условным кодом. Как поступать в подобных случаях, мы поговорим на одном из следующих занятий. Если же все в порядке, начнет работать программа-загрузчик. Пожалуй, это самая волшебная из всех программ. Она способна вдохнуть в наш компьютер жизнь и превратить его из груды железок в почти одушевленное существо. Потому что она загружает в служебную часть оперативной памяти животворную операционную систему.

И вот компьютер оживает. Он приветствует вас словами:

Матчасть диванного танкиста - Страница 4 90010310

Литературный перевод этого приветствия выглядит примерно так: "Сегодня среда, 20 сентября 1989 года. Если Вы с этим не согласны, то подправьте меня - введите новую дату (месяц - число - год по две цифры)".

Вот он, долгожданный, волнующий момент: началось ваше общение с компьютером! Компьютер откликнулся на ваши действия и ждет от вас новых...

Впрочем отвлечемся от эмоций и посмотрим на картину, разворачивающуюся перед вашим мысленным взором, с практической точки зрения. Как, собственно, компьютер выдаст запрос о текущей дате? Какое устройство служит для этой цели? Вам, вероятно, оно уже известно. Оно похоже на телевизор и называется дисплеем (а если использовать более точный термин - монитором).

Вопрос другой: как отреагируете вы на запрос компьютера? Как сообщите ему о своем согласии? А если вы не согласны, как введете новую дату? Какое устройство служит для того, чтобы отвечать на вопросы машины и задавать ей свои собственные? Вы, наверное, знаете, что для этой цели служит клавиатура.

Итак, дисплей и клавиатура - вот тот минимальный состав периферийных устройств, которые вместе с центральным блоком образуют систему, называемую персональным компьютером. Без клавиатуры наш компьютер был бы глух и слеп, а без дисплея к тому же и нем.

Если в эту почтенную компанию пригласить еще алфавитно-цифровое печатающее устройство (АЦПУ), а попросту принтер, то получится вполне укомплектованная труппа, способная успешно выступать по всем программам пользователя (или, во всяком случае, но большинству из них).

Конечно, этим перечнем не ограничивается круг периферийных устройств. Для ввода и вывода информации используются и такие заманчивые штучки, как графопостроители, "мыши", игровые пульты (джойстики), устройства речевого ввода и вывода, модемы, позволяющие соединять компьютеры через телефонную линию в сеть, сканнеры - истинные глаза персонального компьютера, считывающие тексты и картинки с бумаги, и т.д. Существуют и более экзотические периферийные устройства, и на будущих занятиях мы о них еще поговорим, но для первого знакомства с персональным компьютером мы ограничимся только такой сборной командой: центральный блок - клавиатура - дисплеи - принтер.

После всего сказанного мы со знанием дела можем продолжить распаковку компьютера.

Достанем из упаковочной коробки клавиатуру. Внешне это плоская панель с клавишами. От нее отходит витой шнур со штекером на конце, для которого есть соответствующий, единственный разъем на задней (иногда на передней) стенке центрального процессора.

Бросается в глаза, что клавиши клавиатуры расположены несколькими группами. Их состав и размещение могут несколько изменяться от одной модели компьютера к другой, но на любой клавиатуре мы найдем одни и те же клавиши. Изменения в их составе происходят в основном за счет дублирования некоторых из них.

Самая большая из этих групп похожа на клавиатуру пишущей машинки. И назначение ее в основном такое же, но несколько шире. Кроме писания обычных текстов (писем, деловых бумаг и т.п.), она используется для набора компьютерных команд; вы будете пользоваться ею также для первоначального ввода созданных лично вами программ, если у вас проявятся стремление и способности к этому.

...
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Матчасть диванного танкиста - Страница 4 Empty Re: Матчасть диванного танкиста

Сообщение автор Gudleifr Сб Мар 04, 2023 12:54 am

...

Особое значение имеет клавиша, аналог которой отсутствует в механической пишущей машинке, а имеется в электрической и служит там для перевода (возврата) каретки. На отечественных персональных компьютерах она нередко так и обозначается: ВК (от слов "возврат каретки"). Иногда ее называют клавишей ввода. В импортных компьютерах можно встретить разные ее обозначения - например, Enter, Return, CR, порою на ней рисуют просто изогнутую стрелку. Знакомясь с этой клавишей, радисты могли бы вспомнить слово "прием", которым заканчиваются радиограммы. Сходным образом пользователь персональной ЭВМ заканчивает каждое свое обращение к ней нажатием на эту клавишу. Например, если набрать на клавиатуре текст какой-либо команды, то компьютер приступит к ее исполнению только тогда, когда мы нажмем клавишу ввода.

На некоторых образцах клавиатур она может дублироваться - просто так, для удобства, никакого другого содержания (в том смысле, что в каких-то случаях нужно нажимать одну, а в иных другую) в это не заложено.

Точно так же, исключительно для удобства, иногда дублируются и другие клавиши. Например, па иной клавиатуре в правой ее части можно встретить группу клавиш, образующих цифровое наборное поле. Во всех случаях, когда требуется набирать на клавиатуре цифры, можно пользоваться любыми цифровыми клавишами: либо теми, что находятся в верхнем ряду алфавитной группы клавиш, либо в наборном поле в правой части клавиатуры. Правда, это наборное поле устроилось по совместительству еще на одну работу. В зависимости от нажатия на клавишу Num Lock этими клавишами можно пользоваться либо для набора цифр, либо для управления положением курсора - специальной светящейся метки, которая указывает на экране местоположение очередного вводимого вами знака. Кстати, для этой цели может использоваться специальная группа из четырех клавиш (рис. ниже). Тогда наше наборное цифровое поле на обеих работах будет числиться совместителем.

Матчасть диванного танкиста - Страница 4 90010410

На клавиатуре может быть специальная группа клавиш для быстрой переброски курсора в начало (Home) или в конец текста (End), для вставки (Insert) и удаления знаков (Delete), для постраничного "листания" текста на экране (Page Up и Page Down).

Как правило, на клавиатуре имеется группа клавиш, отмеченных буквой F и цифрой от единицы до десяти или двенадцати. Располагаются они либо в самой левой части клавиатуры вертикально в два ряда, либо в самой верхней ее части горизонтально в один ряд. Эти клавиши называются функциональными. Обычно сразу после включения компьютера они "безработны" - в том смысле, что нажатие на любую из них никаких действий не вызовет. Но в определенных условиях, например, при работе с большинством пакетов прикладных программ, эти клавиши могут выполнять вполне определенные функции, причем самые разные, для которых в каждом таком случае в программе есть подробная подсказка или разъяснение. В других случаях (например, при программировании на Бейсике) эти клавиши могут быть запрограммированы самим пользователем (потому иногда их так и называют: программируемыми). В таком случае пользователь может назначить каждой из этих клавиш определенную функцию, скажем, поставить ей в соответствие какую-либо часто встречающуюся команду. Тогда, вместо того чтобы каждый раз набирать такую команду последовательным нажатием нескольких клавиш, достаточно нажать соответствующую программируемую клавишу. Команда в готовом виде тут же появится на экране.

Вот, пожалуй, и все, что можно сказать о клавиатуре для первого знакомства. Остались, правда, за кадром еще пара-тройка клавиш, но они нам понадобятся позже, когда ваши взаимодействия с компьютером перейдут на следующий виток.

Рассказывать о клавиатуре и работе с нею - это, по сути дела, рассказывать об этике и технике общения человека с машиной и тем самым пытаться "объять необъятное". Есть эффективный и неутомительный метод освоения клавиатуры - игра с компьютером, а для этого создано великое множество игровых компьютерных программ. Но об этом чуть позже.

Пришла очередь распаковать дисплей. В сочетании с клавиатурой он обеспечивает дуэту "пользователь-компьютер" возможность вести диалог.

В отличие от клавиатуры к дисплею подводится не один, а два кабеля - соединительный с центральным блоком и подводящий электропитание к дисплею либо от центрального блока, либо из розетки электросети.

Еще раз отметим, что кабели перепутать нельзя, даже если захотеть. Сечение плоских разъемов имеет не прямоугольную, а трапециевидную форму, что исключает ошибочное подключение контактов "вверх ногами".

Кстати, о розетках. Вилки компьютеров, как правило, имеют не два, а три штырька. Третий контакт - для заземления. В обычном отечественном помещении (контора, квартира) для таких заморских вилок нет соответствующих розеток. В такой ситуации иной пользователь долго не раздумывает и отрезает нестандартную вилку, заменяя ее на стандартную двухконтактную. Но этого делать ни в коем случае нельзя, даже если вы сгораете от нетерпения поскорее включить компьютер. От нетерпения еще никто из людей не сгорал, а вот микросхемы от статического электричества при плохом заземлении сгорают очень часто. Кроме того, следует помнить, что заземление - это еще и защита человека от удара электротоком.

За недолгую историю персональных компьютеров дисплей прошел крутой путь эволюции. Вначале у него был простой черно-белый (или черно-зеленый) экран, и умел он писать только символы (буквы, цифры, знаки препинания). Он так и назывался: символьный дисплей. Однако многим специалистам во время своей работы часто требуется иметь под рукой не только текстовой материал, но и его графическую иллюстрацию: различные чертежи, схемы, гистограммы н т.п. Зорко следя за потребностями рынка, производители персональных компьютеров раскрасили изображение и научили дисплей черчению, рисованию и даже мультипликации - последняя его способность и стала истоком бурной реки компьютерных игр. Такой дисплей называют символьно-графическим.

Теперь, когда мы ближе познакомились с дисплеем и клавиатурой, мы можем включить наш компьютер уже не мысленно, а на самом деле.

Щелкнул тумблер, и на экране дисплея появилось уже знакомое нам приветствие и приглашение ввести новую дату. Вы вводите ее. Затем подобным образом компьютер уточняет текущее время. (Заметим попутно, что в некоторых компьютерах есть энергонезависимые встроенные часы, которые освобождают машину от необходимости спрашивать пользователя, который час, день и месяц).

После этого на дисплее появляется приглашение машины начать с ней диалог:

С>

Это означает, что вся вводимая в компьютер информация будет относиться к жесткому диску С или сектору С на жестком диске. (Увидев эту букву на дисплее, отметьте про себя, что у вашего компьютера есть винчестер).

Кто знает, быть может, уже сейчас в результате нашего первого диалога со столь искусным собеседником получится нечто, что вам захочется записать и сохранить. Поэтому заблаговременно извлечем содержимое последней коробки-достанем принтер.

Число разновидностей, к одной из которых может относиться доставшийся вам принтер, довольно велико. Но все их можно подразделить на две группы - устройства контактного и неконтактного действия.

К первой группе относятся принтеры, печатающий узел которых соприкасается с бумагой и оставляет на ней оттиск печатного знака. Обычно этот контакт происходит через красящую ленту, как на пишущей машинке. Но можно обойтись и без ленты. Так работают принтеры с термопечатью, где нагретый до нужной температуры печатающий узел соприкасается со специальной термочувствительной бумагой и оставляет па ней оттиск печатаемого знака. Главный недостаток такого принтера состоит в том, что нельзя пользоваться обычной бумагой.

Среди принтеров контактного действия наиболее распространены печатающие узлы с "ромашкой" и игольчатые.

"Ромашка" - это пластмассовая деталь, внешне действительно напоминающая цветок ромашки. На кончике каждого ее лепестка имеется выпуклое зеркальное изображение литеры. Молоточек ударяет по лепестку ромашки, и выпуклая литера через красящую ленту делает оттиск на самой обычной бумаге. При печатании ромашка каждый раз поворачивается лепестком с нужной литерой и смещается вдоль печатаемой строки. Меняя ромашку, можно менять гарнитуру (начертание), кегль (размер) и "национальность" печатаемых букв. К недостаткам такого принтера можно отнести его тихоходность (30-60 знаков в секунду) и громкозвучность, если можно так выразиться: когда он работает, слышится треск.

Очень широкое распространение получили игольчатые принтеры, которые, как правило, могут работать в двух режимах печати: низкого и высокого качества. Печать низкого качества не такая уж и низкокачественная, разве что чуть-чуть бледновата. Зато печатает принтер в этом режиме очень быстро. В режиме высококачественной печати скорость работы принтера замедляется примерно вдвое. Но текст за счет вторичного прохода печатающего узла по той же самой строке получается более сочным, а точки, образующие знак, почти незаметными. Следует также помнить, что в этом режиме возрастает износ принтера и красящей ленты. Поэтому с высоким качеством печатают лишь особо ответственные материалы. Кстати, помимо текста, такие принтеры могут воспроизводить и графические изображения.

Среди принтеров неконтактного действия отметим струйные и лазерные.

В струйном принтере изображение знака на бумаге создается высокоскоростной струйкой мельчайших капелек специальных чернил. По этому принципу устроены принтеры для высококачественной цветной печати. Печатающая головка у них имеет четыре струйных распылителя черного, голубого, пурпурного и желтого цветов. Они расположены на одной высоте и при движении головки последовательно проходят мимо печатаемой на бумаге точки. Каждый из них вносит свою (строго отмеренную собственным микропроцессором) долю в печатание этой точки. Результирующая совокупность их действий позволяет получать очень яркие и сочные цветные картинки.

Наиболее высокое качество печати получается у лазерных принтеров (именно такой вы и видели на фото выше). Принцип их действия сродни принципу действия широко известных множительных электрографических аппаратов типа "Эра", "Ксерокс" и т.п. Изображение печатаемых знаков "прорисовывается" лазерным лучом на поверхности положительно заряженного печатающего барабана и нейтрализует заряд "засвеченных" его участков. Барабан посыпается специальным красящим порошком. Если теперь приблизить к поверхности барабана отрицательно заряженный лист обычной бумаги, то с нейтрализованных участков порошок перенесется на бумагу, а на заряженных останется, удерживаемый силами электростатического притяжения. Так на бумаге появляется текст.

Описывая первые радости пользователя персонального компьютера, нельзя не коснуться подстерегающих его несчастий и в первую очередь - такой актуальной темы, как компьютерные вирусы ("... модная болезнь, она недавно вам подарена"). В последнее время они стали истинным бедствием для персональных ЭВМ. Не вникая в тонкости, скажем только, что вирус - это хитроумная специально составленная злоумышленная программа, способная "прицепиться" к какой-либо рабочей программе и таким образом попасть в память персонального компьютера. Она может переноситься на другие участвующие в работе программы или просто хранящиеся на дисках, тем самым "заражая" и их. Следовательно, они, как и настоящие вирусы, обладают способностью к размножению. Иногда наблюдается как бы инкубационный период, вызванный настройкой программы-вируса на заранее заданное время или на число включений. Действие вирусов разнообразно и проявляется в частичной или полной дезорганизации работы компьютера: либо неожиданно появляются фрагменты посторонних текстов, либо программа вообще перестает выполняться, либо со строчек на дисплее осыпаются буквы (вирус-"сыпучка"), либо разрушаются и теряются целые участки текстов и программ, а может случится и так, что под воздействием вирусных программ окажутся прожженными микросхемы или участки экрана дисплея.

Существует расхожее сравнение компьютерного вируса со СПИДом. Действительно, при их сопоставлении можно выявить и сформулировать некоторые общие черты.
1. Заражение в обоих случаях происходит преимущественно из-за неразборчивости в связях. Установлено, что чаще всего вирус попадает в компьютер со случайных дискет (прежде всего с игровыми программами).
2. Вирус поражает своего рода иммунную систему персонального компьютера - снижает его помехозащищенность.
3. Программу, пораженную вирусом, излечить очень трудно.

Как же бороться с вирусами?

Наиболее радикальный способ - полное перемагничивание винчестера или дискет, то есть полное удаление всей информации - и зараженной, и здоровой. Однако, как и в борьбе со СПИДом, многого позволяет достичь элементарная профилактика. Правда, предлагаемые ниже профилактические меры действенны только для "стерильного" компьютера. Итак, постарайтесь запомнить и выполнять следующие правила.
1. Избегайте перезаписи программ со случайных дисков, даже если вам встретилась очень интересная игровая программа. Пользуйтесь только проверенными, внушающими доверие источниками. Этот совет принадлежит к роду советов, которые легче давать, чем выполнять. Проверенные и ценные программы для персональных компьютеров, совместимых с IBM PC, как правило, покупаются на твердую валюту. Потому их мало, и их приходится копировать. Бесконтрольное копирование программ ("безвалютное" распространение) часто превращает их в непроверенные и зараженные.
2. Начиная сеанс работы с компьютером, проверьте размер наиглавнейшего файла операционной системы - файла COMMAND.СОМ и регулярно следите за размером других часто используемых файлов с расширением СОМ (командные) и ЕХЕ (выполняемые). Увеличение их размера свидетельствует о наличии вируса "злокачественной опухоли". Для MS-DOS 3.30 (дисковая операционная система фирмы Microsoft, версия 3.3) размер файла COMMAND.COM с английскими комментариями составляет 25307 байт. Для других подобных файлов их размеры нужно запомнить или записать по "незараженному" варианту.
3. Все файлы операционной системы, а также все файлы с расширением СОМ и EXE других часто используемых вами программ защитите от записи при помощи команды ATTRIB с индексом +R. Данная команда исключает возможность добавления в защищенный ею файл дополнительной информации. Следовательно, вероятность того, что к защищенному таким образом файлу "подцепится" вирус, уменьшается. С этой же целью всегда применяйте предусмотренную на дискетах механическую защиту от записи, если по ходу вашей работы запись на данную дискету в данном сеансе работы не предвидится (например, в игровых программах). Умельцам-электронщикам можно рекомендовать приделать к компьютеру еще один замок.
4. Систематически пользуйтесь диагностическими программами. Часто диагностические программы запускают сразу после включения компьютера.

Ну, а как быть, если вопреки первому совету все же приходится пользоваться сомнительной дискетой? В этом случае можно рекомендовать следующее:
5. При необходимости переписать какую-либо игру или другую программу со случайной дискеты, в том случае, если есть несколько ее вариантов с разными объемами занимаемой памяти, выберите самую короткую.
6. Работая с такой дискетой, не пользуйтесь инструментальными средствами (такими как Norton Commander, PCTOOLS и т.п.- о них будет рассказано на следующих занятиях "Школы"). Для перезаписи (если это так уж необходимо) пользуйтесь командой сору. При перезаписи сомнительных программ на дискету пользуйтесь командой DISKCOPY.
7. Закончив работу по такой программе, выключите компьютер (или произведите его перезапуск) без выхода из самой программы. Выключение (перезапуск) компьютера производите обязательно, даже если сеанс работы вы еще не закончили и собираетесь работать с другой программой (например, сыграть в другую игру), пусть записанной на этой же самой дискете.

Если, несмотря ни на что, ваш компьютер окажется вирусоносителем, выход один - переформатировать все пораженные диски, включая винчестер. Отсюда вытекает последний совет.
8. Заблаговременно (то есть практически сразу же) создавайте копии своих рабочих материалов. И храните их "на черный день".

В нашем рассказе все чаще встречается упоминание об операционной системе. Есть смысл поговорить о ней. Чтобы не затягивать первое занятие (а оно подходит к концу), поговорим лишь о том, как отвечать машине на ее запрос "С>", на котором, как вы помните, оборвался наш с нею диалог.

Быть может, садясь за компьютер, вы уже захватили с собой несколько гибких дисков с нужными для пас программами. Допустим, что вам захотелось перенести с одного из дисков на винчестер вашего компьютера какую-то программу, озаглавленную, скажем, словом "tet". (У каждой программы, как известно, есть имя).

Выполнить свое желание вы можете с помощью всего лишь четырех команд. Вот они: dir, mkdir, copy, cd. Их стоит запомнить хорошенько. Ведь они нужны не только для загрузки программ в новенький, "пустой" компьютер, но и для восстановления программного обеспечения после "хирургического" лечения размагничиванием зараженных дисков компьютера. Ясно ведь, что на первых порах вы будете пользоваться чужими дисками. Где гарантия, что там нет вируса?

Для начала набираете команду C>dir - последовательно нажимаете буквенные клавиши d, i, r вслед за уже имеющимися символами С>. Чтобы команда выполнилась, надо нажать клавишу ввода. После ее выполнения на дисплее появляется некий список. Это имена программ и директории (указателей, позволяющих ориентироваться среди записанных на винчестер программ, если их много), хранящихся на жестком диске в секторе С. Убеждаемся, что переписываемой программы в архивной памяти нет.

Ниже под этим списком снова видны знаки С>. Можно вводить следующую команду.

(О том, что вслед за выводимой информацией компьютер, желающий продолжить диалог, выводит символы C>, мы далее говорить не будем - для краткости. По той же причине не будем и напоминать, что выполнение каждой команды происходит лишь после нажатия клавиши ввода).

C>dir а: - список, подобный предыдущему, получаем с гибкого диска, вставленного в дисковод А. Убеждаемся, что искомая программа "tet" на гибком диске есть;

C>mkdir NEW - человек просит машину создать (make, сокращенно mk) на жестком диске новую директорию с именем "NEW", в которую он намеревается переписать программу "tet";

C>cd NEW - человек просит машину сменить директорию (change directory) и перейти на адрес "NEW" на жестком диске;

С>сору a: tet с: - программа с именем "tet" копируется (сору) с диска А на диск С в текущую директорию "NEW";

C>cd .. (не забудьте набрать точки!) - возвращаемся на начальную (корневую) директорию диска С.

Таким образом можно перенести на винчестер любые программы, в том числе и специальные, позволяющие общаться с персональным компьютером на почти естественном языке, не прибегая к кодированию. Об этих удобных средствах пойдет разговор на следующих занятиях "Школы".
Gudleifr
Gudleifr
Admin

Сообщения : 3246
Дата регистрации : 2017-03-29

Вернуться к началу Перейти вниз

Страница 4 из 6 Предыдущий  1, 2, 3, 4, 5, 6  Следующий

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения