0. Предварительные замечания


0.1. О пользователе

0.1.1 Кому адресована библиотека

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

0.1.2 Что нужно иметь и уметь

Для практической работы с библиотекой нужно иметь:
- карманный компьютер;
- Руководство пользователя к нему;
- конкретную программу действий.

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

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

0.1.3 Где искать совместимые программы

Образцы хорошего стиля программирования в приложении к простым задачам можно найти в "Библиотеках программ" карманных компьютеров фирм Casio и Sharp.

Кроме того, можно сравнительно легко адаптировать вычислительные программы, написанные на стандартном бейсике, если только они не содержат матриц. Самый доступный сборник таких программ - Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ (Дьяконов В.П. - М., Наука, 1987).

Те, кто имеет опыт программирования калькуляторов, могут смело переводить алгоритмы с мнемокода на бейсик. Существует множество доступных источников, например Микрокалькуляторы в физике (Шелест А.Е. - М., Наука, 1988).

0.2. О библиотеке

0.2.1 Классификация программ

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

Библиотека разбита на разделы по типу обрабатываемых математических объектов. Тип объекта определяет структуру данных в программе. Грамотное построение структуры данных - наиболее сложный аспект программирования "Электроники МК 85".

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

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

0.2.2 Стиль программирования

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

0.2.3 Стиль описания программ

При записи текстов программ используются некоторые вспомогательные обозначения. "Y=f{X,U,V}" обозначает определяемую пользователем процедуру-функцию с входными параметрами в ячейках с адресами X,U,V и результатом в ячейке Y. За текстом программы обязательно следует конкретный пример записи.

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

Символы сообщений в операторах INPUT и PRINT набраны обычным шрифтом и в точности соответствуют символам, использованным при описании программы.

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

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

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

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

Для программ с динамическими массивами указаны их допустимые размеры (при объеме памяти 1221 шаг).

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

0.3. О творческом использовании библиотеки

0.3.1 Внесение изменений в программу

Бейсик "МК 85" не позволяет создать библиотеку объектных модулей, ориентированную на технологию модульного программирования. Правильнее всего рассматривать программы библиотеки как заготовки, отталкиваясь от которых и комбинируя которыми можно без особого труда создать необходимую прикладную программу.

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

При совместном использовании нескольких крупных блоков удобно расположить их в разных программных областях и осуществлять передачу управления операторами GOTO #P, GOSUB #P ... RETURN, IF ... THEN #P, где P - номер программной области.

При внесении в готовый текст дополнительных операторов не следует забывать, что между двумя заполненными строками есть еще девять свободных. Любая многооператорная строка, не содержащая "IF ... ; ...", может быть разбита на несколько последовательных строк без риска нарушить правильность передачи управления, а конструкция вида
20 IF A>B; ОПЕРАТОРЫ
30 ...
заменяется на конструкцию
20 IF A≤B THEN 30
21 - 29 ОПЕРАТОРЫ
30 ...

В "МК 85" имя переменной однозначно связано с ее адресом в памяти, что является досадным отступлением от стандарта бейсика. Осваивая такую версию языка, удобно пользоваться понятиями адресного оператора A(n)= и адресной функции A(n). Первое означает "записать число в ячейку памяти с номером n", второе - "прочесть число из ячейки n".

Если ограничиться обозначениями A(n), программа будет вполне работоспособна, но текст ее можно сделать нагляднее и короче. Бейсик "МК 85" использует систему обозначений, согласно которой

...A(25)=B(24)= ... =Y(1)=Z(0)=Z;
A(24)=B(23)= ... =Y(0)=Y=Z(-1); ...

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

В библиотечных программах переменные распределяются по адресам подряд, начиная с A. Так легче следить за расходом памяти.

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

строка

A

B

C

D

E

F

10

a

b

c

x

yn

n

20

 

 

 

 

yj

j

30

 

 

 

 

y0

-1

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

0.3.2 Средства обнаружения ошибок

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

Набирая программу, хорошо иметь перед глазами ее текст на бумаге.

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

Многие описки обнаруживаются автоматически встроенной диагностикой бейсика. Много хлопот вызывают другие ошибки - проявляющиеся лишь в неверности результатов расчета. Для обнаружения таких ошибок применяют тест - набор контрольных примеров с известными ответами. Тест должен быть таким, чтобы срабатывала каждая ветвь алгоритма. Исходные данные должны быть нетривиальными. (Не следует, в частности, задавать x=1, если в программе x возводится в степень.) Кстати, примеры, приведенные в библиотеке, не являются тестами.

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

Просмотр ячеек с переменными производится в калькуляторном режиме после приостановки счета программы. Например, для просмотра содержимого ячейки A в момент, когда программа выполняется, следует нажать [STOP]. На дисплее появится номер текущей строки программы. Теперь наберем a [EXE]. Дисплей высветит значение переменной A. Повторное нажатие [EXE] запустит программу с точки останова.

Режим отладки поддерживается следующими средствами:

Оператор RUN n. Позволяет запускать программу не сначала, а с n-ой строки.

Отладочный вывод промежуточного значения. Пример: 33 CSR 0:PRINT A;. CSR отменяет режим бегущей строки, ";" отменяет прерывание после вывода. Используется обычно для контроля сходимости итеративного процесса.

Клавиша останова [STOP]. Ее пускают в ход, когда есть подозрение, что алгоритм "зациклился".

Оператор STOP. Вызывает прерывание счета программы. Счет продолжится, если нажать [EXE].

Режим пооператорного исполнения программы TRACE. Наиболее мощное отладочное средство, которое применяется преимущественно для контроля передачи управления.

Серьезное разочарование вызывают огрехи в микросхемах и встроенном математическом обеспечении. Проведите такой опыт:

[MODE] [5] COS 0

- Образцы 1990г. выпуска возвращают -1. Похожие проблемы возникают и при попытке вычислить ATN 0 в любом из режимов. Более подробное исследование ошибок опубликовано в журнале "Наука и жизнь" N 6 1991г., стр. 133. Разумеется, программы библиотеки не учитывают столь экзотические свойства встроенной математики. Остается только порекомендовать Пользователю проявлять бдительность при вызове тригонометрических функций.

Еще один полезный опыт для всех:

10 A=1.00000000001:B=1:IF A¦B;PRINT A;" ¦";B

- Проверки отношения распространяются и на скрытые разряды.

0.3.3 Средства диалога

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

Вот некоторые варианты:

Ввод-вывод в калькуляторном режиме. Применяется при нехватке памяти.

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

Вычисляемый комментарий. Пример: PRINT A;:INPUT B. Применяется, когда значение B зависит от значения A.

Вывод по укороченному формату. Может устанавливаться оператором SET n, который управляет форматом вывода (n - число знаков мантиссы). Альтернативный путь - использование в операторе PRINT функции RND (A,n), которая округлит число A до n-го разряда. Укороченный формат позволяет ускорить вывод и улучшить наглядность результатов при низкоточных вычислениях.

Вывод без прерывания. Избавляет от необходимости каждый раз нажимать [EXE] для продолжения счета. Пример: PRINT A;.

Отмена "бегущей строки". Осуществляется оператором управления курсором CSR и позволяет резко снизить затраты процессорного времени на вывод.

Прерывание перед выводом. Исключает возможность потери информации при выводе строки, содержащей более 12 символов. Пример: 10 PRINT "E",-EXP 3000.

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

Например, вместо длинного числа 1,57079633 можно ввести выражение p/2.


Продолжить
К Оглавлению

Сайт управляется системой uCoz