Развитие интерфейса Mathcad: от DOS к Internet (др. статьи на эту тему >>>>>>>)

(журнал "Exponenta Pro: математика в приложениях" (http://www.exponenta.ru/journal), № 7-8, 2004 г.)

В.Очков

 

Описана эволюция интерфейса популярной математической программы Mathcad.

 

Пакет Mathcad во времена его первых шагов рынке компьютерных расчетных технологий называли и рекламировали как  суперкалькулятор: если за введенным выражением набрать «=» (знак равенства), то будет выведен численный результат (рис. 1).

Рис. 1. Mathcad в режиме суперкалькулятора

Рис. 1. Mathcad в режиме суперкалькулятора

От термина «суперкалькулятор» в физико-математическом пакете Mathcad (а так его стали называть в настоящее время) осталось название панели Calculator (см. рис. 1), где собраны наиболее часто используемые математические функции и операторы, а также «результирующий» оператор «=» (правый нижний угол панели). Панель фактически повторяет клавиатуру «научного» калькулятора – настоящего или виртуального, вшитого в Windows.

Подобное «вычислительное» действие имеет знак равенства и в другой популярной расчетной программе – в электронных таблицах Excel. Только там знак равенства ставится не в конце математического выражения, а в начале. И в среде Mathcad и в среде Excel численный ответ появится после увода курсора (автоматический режим счета) либо после нажатия клавиши F9 (автоматический и ручной режимы).

В операторе вывода численного результата «=» скрыто очень много умолчаний. Вот их далеко не полный перечень:

·        число выведено в десятеричном, а не в двоичном, восьмеричном или шестнадцатеричном представлении;

·        число выведено в виде десятичной, а не простой дроби;

·        выведено только три знака после запятой;

·        число выведено в так называемом научном формате;

·        если мантисса числа оканчивалась бы нулями, то они не были бы показаны;

·        число округлено по последней цифре в мантиссе;

·        фон, на котором прописан ответ и белый и т.д.[1]

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

Рис. 2. Диалоговое окно форматирования численного ответа

Рис. 2. Диалоговое окно форматирования численного ответа

Второй по «главности» в интерфейсе Mathcad оператор – оператор присваивания (ввода) имеет символ «:=». Его обычно набирают, нажимая только клавишу «:» (двоеточие[2]). Второй символ («=») Mathcad любезно добавит сам, передвигая курсор на место (placeholder) ввода числа или выражения (рис. 2).

Рис. 3. Ввод в среде Mathcad численных значений в переменные

Рис. 3. Ввод в среде Mathcad численных значений в переменные

Начиная с седьмой версии Mathcad работающие с этим пакетом получили возможность менять написание оператора «:=» (стиль языков программирования Pascal и C) на  «=» (BASIC[3], fortran). Диалоговое окно изменения написания оператора присваивания вызывается правой кнопкой мыши. Оно показано на рис. 3.

Начиная с восьмой версии Mathcad пользователям было рекомендовано вводить оператор присваивания не через клавишу « (ввод), а через клавишу «=» (вывод). Резон здесь в том, что если переменная, введенная до этого, не определена, то оператор «=» (вывод) автоматически превращается в оператор «:=» (ввод – см. выше). В противном случае – в случае, когда переменная, которой присваивается значение, уже определена, выводится ее численное значение. Этим еще раз проверяется, что данная переменная свободна – ей ни человеком, ни системой Mathcad пока еще ничего не присвоено. Это позволяет избежать ряд очень неприятных ошибок. Во-первых, можно ненароком «испортить» какую-либо предопределенную переменную: е:=5, m:=1, A:=2. Переменная е хранит основание натурального логарифма, а переменные m и А – единицы измерения длины (метр) и силы тока (ампер) соответственно. Во-вторых, можно забыть, что какая-либо переменная уже «нагружена» пользователем, и присвоить ей что-то новое. Ситуация, когда переменная в одной части Mathcad-документа имеет одно значение, а в другой – иное, не совсем нормальна.

Прием переопределения переменных[4] был в ходу в те времена, когда память компьютера была одним из лимитирующих параметров при решении задач на компьютере и поэтому во избежание ошибки переполнения памяти освободившуюся переменную приходилось тут же загружать другой величиной. В настоящее время так приходится поступать при размещении в памяти компьютера (работающего в том числе и с Mathcad) объемных массивов[5] (векторов и матриц, простых и составных). Хотя запись на месте массива более короткого нового массива или даже скалярной величины не меняет объем задействованной памяти (механизм статических, а не динамических массивов).

Режим автоматической замены оператора «=» на оператор «:=» (подобный гибрид двух операторов называется SmartOperator – «сообразительный» оператор[6]) можно отключить, через закладку General диалогового окна Preference (рис. 4).

Рис. 4. Закладка General диалогового окна Preferences (Предпочтения)

Рис. 4. Закладка General диалогового окна Preferences (Предпочтения)

Оператор ввода значения переменной «:=» был неким камнем преткновения для тех, кто лет десять-пятнадцать назад пытался освоить Mathcad, узнав о его необыкновенных способностях считать по сложным формулам (см. рис. 1), строить графики, решать уравнения и системы. Люди по привычке, выработанной работой с языками fortran[7] или BASIC, набирали в среде Mathcad «a вместо «a[8] и… отказывались от дальнейшей работы с этим математическим пакетом из-за возникающей непонятной ошибки – система Mathcad сообщала, что переменная a не определена. Ее пытались определить оператором задания типа переменной, но такого оператора в среде Mathcad не было и нет. Фирма MathSoft только в седьмой версии «сдалась» и перестала требовать от пользователей набирать «а:» вместо более привычного и естественного «a. Теперь маятник качнулся в обратную сторону – рекомендуется для ввода значения переменной набирать не «а, а «а=». Можно было бы порекомендовать разработчикам Mathcad вообще исключить оператор «:=» из арсенала этого пакета, если бы не необходимость использования его для изменения значения предопределенных переменных (TOL := 10-7, ORIGIN :=1,  например) и для объявления функции пользователя или элемента вектора (см. сноску выше) Хотя и здесь можно обойтись без ввода оператора «:=», скопировав его в том месте, где он был создан оператором «=».

Оператор вывода численного значения «=», как уже было отмечено, целесообразно задействовать и при вводе в Mathcad-документ пользовательской функции. После ввода имени новой функции стоит нажать не символ «(» (скобка, открывающая список аргументов создаваемой функции), а символ «=». Резон здесь старый – ограждение пользователя от возможных ошибок, связанных с повторным переопределением функции. Если, например, пользователь хочет ввести в расчет функцию с именем F и набирает на клавиатуре пару символов «F=», возможны следующие реакции системы Mathcad:

1.      = 1 F – не отключен режим работы с единицами измерения физических величин; в данном случае пакет Mathcad напоминает нам что, фарада (единица электрической емкости) равна одной фараде [1] и что эта переменная уже занята.

2.      = число – это означает, что в расчете уже задействована пользовательская переменная с именем F.

3.      = function – это означает, что в расчете уже задействована пользовательская функция с именем F.

4.      := – это означает, что имя F свободно и готово стать именем функции или переменной.

Существует еще один вариант: если имя планируемой функции совпадает с именем встроенной функции, то после нажатия клавиши «=» это имя будет продублировано: line = line, например[9]. Как в этом случае поступать, разработчик Mathcad-документа должен решить сам. Есть ситуации, когда переопределением встроенной переменной можно решить некоторые расчетные проблемы [2].

Другой способ избежания ошибок, связанных с переопределением, основан на использовании стилей переменных, функций и констант. По умолчанию всем именам переменных и функций, вводимых в Mathcad-документ, присваивается стиль Variables, а константам – Constants[10]. Но пользователь вправе менять стиль переменной и функции на один из семи пользовательских: User 1 – User 7, при необходимости меняя и имя стиля и его атрибуты (шрифт, цвет и т.д.). Это позволяет иметь в Mathcad-документе одноименные, но разные переменные и функции, что может делать Mathcad-документ еще более похожим на расчет, сделанный от руки.

Но, «привычка – вторая натура»: невозможно отучить пользователей Mathcad от оператора «:=» для ввода значения переменной или функции и заставить их пользоваться оператором «=», который, как мы отметили выше, сам сообразит, что от него хотят – ввода или вывода. Из-за этого пользователи продолжали делать ошибки такого рода. Переменной m (а она очень популярна в расчетах – масса чего-то там, например) присваивается значение какой-либо константы и… портится заодно встроенная единица длины – метр. Из-за этого в версию Mathcad 11.1 (был выпущен на рынок Mathcad 11, а ему вдогонку была послана заплатка 11.1) введен инструмент контроля за переопределением переменных и функций, встроенных и пользовательский, открытых для обозрения, и спрятанных в «захлопнутых» областях и в документах, на которые делаются ссылки (рис. 5).

 

Рис. 5. Закладка General диалогового окна Preferences (Предпочтения)

На вооружение была взята волнистая зеленая черта, отмечающая в текстовом редакторе Word, например, ошибку пунктуации. Если такая черта в среде Mathcad появится под именем переменной, которой хотят что-то присвоить, или под именем функции, которую хотят определить, то разработчик должен исправить ошибку или просто уяснить для себя, что здесь все ОК, а переопределение переменной и/или функции ведется намерено.

Начиная с Mathcad 2001 оператор «:=» в среде Mathcad 2001 может вводить в переменные конкретные значения не только константой через клавиатуру (c := 123, например) или по результату выполнения математических действий (:= a + b), но и с использованием стандартных элементов интерфейса: кнопка (Button), список (List), радиокнопка (Options), «галочка» (Check) и т.д. (рис. 6).

Рис. 6. Элементы интерфейса Mathcad

Потребность в открытии Mathcad-документов в сети Интернет (технология Mathcad Application Server [3]) потребовала ввода в Mathcad так называемых WebControls (рис. 7), которые в отличие от простых Controls (рис. 6), не требуют при своем создании написания или редактирования программ на языках, поддерживающих технологию Active Scripting (JScript и VBScript). Программу написать, конечно, несложно. Беда в том, что этих «скриптов» как чумы боятся с Интернет. Вот и пришлось от них отказаться. Подробно этапы подготовки Mathcad-документов (WorkSheets) к публикации в сети (WebSheets) описана на сайте по адресу http://twt.mpei.ac.ru/ochkov/VPU_Book_New/mas/From_WorkSheet_to_WebSheet.html.

 

Рис. 7. Сетевые элементы интерфейса Mathcad

Эволюции подвергался и оператор вывода численного результата «=». Но не сам оператор, а только результат его работы. Так, в очередных версиях Mathcad появлялись возможности вывода чисел по недесятеричным системам исчислений, по выводу числа в виде простой дроби (Fraction – см. рис. 2), в научном (Scientific) или инженерном (Engineering) форматах и др. Но у самого оператора «=» никаких изменений и дополнительных средств форматирования не наблюдалось. Не считая, конечно, «скрещивание» его с оператором «:=» (технология SmartOperator – см. рис 4). А такие изменение в свете развития технологии Mathcad Application Server назрели. В частности, необходимо скрывать сам символ «=» и то, что стоит слева от него. Такое действие возможно в отношении оператора «:=», задействованного в Controls и WebControls (см. рис. 6 и 7 – опция Hide Argument из контекстного меню). Было бы очень удобно, чтобы в WorkSheets или WebSheets появлялась и сменялась числовая или текстовая информация без отметки источника своего появления: 123, а не b = 123. При вызове текстовой информации желательно прятать кавычки, какими эта информация обрамлена. Один пример. По адресу http://twt.mpei.ac.ru/mas/worksheets/Cond_P_T_int.mcd  хранится небольшой сетевой расчетный Mathcad-документ с возможностью выбора языка общения с компьютером. В документе все сообщения (текстовые константы) продублированы на трех языках – по-русски, по-немецки и по-английски. Все бы хорошо, но эти сообщения обрамлены лишними кавычками и знаком «=» предваряющим сообщение. Сама переменная, хранящая тексты прописана белым по белому, и следовательно невидима (см. статью автора «Переменная-невидимка» – http://twt.mpei.ac.ru/ochkov/Invisible/Index.htm).

Хорошо бы также иметь возможность менять формат (шрифт, размер, цвет и прочее) выводимых числовых и текстовых констант.

Литература:

1.       Очков В.Ф. Физические и экономические величины в Mathcad и Maple. М.: Финансы и статистика, 2002 г. (http://twt.mpei.ac.ru/ochkov/Units/Forword_book.htm)

2.       Очков В.Ф. Советы пользователям Mathcad. Издательство МЭИ, 2001 г. (http://twt.mpei.ac.ru/ochkov/Sovet_MC/index.htm)

3.       Очков В.Ф. Mathcad: от графика к формуле, от расчета на компьютере к расчету в Интернет. Exponenta Pro, № 4 2003 г. (http://twt.mpei.ac.ru/ochkov/Plot_Spline/index.html)



[1] У автора есть один прием работы со студентами на семинаре по информатике. Автор просит студентов перечислить какие-нибудь инструменты, понятия, приемы, используемые в информатике (Computer Science): тот же список умолчаний при выводе численного ответа, например, см. выше.  Студент, последний назвавший позицию из подобного списка, получет некое поощрение.

[2] Другой способ ввода этого оператора в Mathcad-документ – нажатие соответствующей кнопки на соответствующей панели инструментов (см., например, панель Calculator на рис. 1). Третий способ – копирование ранее введенного оператора присваивания. В среде Mathcad любое действие можно выполнить как минимум тремя способами.

[3] Мало кто помнит, что первоначально в среде языка BASIC оператор присваивания нужно было писать так: Let a =. Это было задумано для того, чтобы этот оператор можно было отличать от оператора «равно» (в среде Mathcad этот булев оператор прописывается жирным шрифтом и набирается через аккорд Crtl+=). Затем ключевое слово Let стало возможным не писать в Basic-программах, но интерпретатор языка упорно припечатывал это слово сам. Потом позволили это слово совсем не употреблять, хотя возможность ввести в программу  Let a = вместо a = осталась даже в Visual Basic. (Этой сноске можно дать название самой статьи, заменив в нем слово Mathcad на слово BASIC.)

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

[5] Кстати говоря, к массивам описанный прием неприменим. Если в пустом Mathcad-документе набрать на клавиатуре V0 и нажать клавишу «=» для ввода значения нулевого элемента (константа) вектора V, то появится сообщение об ошибке, а не оператор ввода.

[6] Он введен в Mathcad в 7-ю версию.

[7] Корректоры и редакторы часто пытаются поправлять автора, исправляя «fortran» на «Fortran» или «FORTRAN». Но мы будем следовать правилам русского языка: fortran – это сокращение фразы «formula translator» (сравним: «колхоз» – коллективное хозяйство), BASIC (все буквы заглавные) – это аббревиатура, а Pascal (первая букв заглавная) – это язык, названный в честь Блеза Паскаля. К слову, раньше обычно писали MathCAD (Mathematical Computer Added Design – математический САПР), а теперь просто Mathcad, принимая во внимание, что этот термин стал зарегистрированной торговой маркой.

[8] Кнопки с символом «:=» тогда, естественно, не было – это были DOS-овские (неграфические) версии Mathcad. Современные Windows-версии Mathcad в качестве атавизма от DOS-версий получили в нагрузку клавиши (символы) @, &, $ и др., которые служат для ввода в Mathcad-документ декартового графика (@), интеграла (&), суммы ($) и др. Действие этих клавиш можно заглушить аккордом Shift+Ctrl+k, меняющим цвет курсора с синего на красный (аварийный режим) и наоборот. При красном цвете курсора можно в имена переменных и функций вводить отмеченные спецсимволы.

[9] Имя будет продублировано в режиме «старой» математики Mathcad. При включенном режиме ускоренной математики (Higher Speed Calculation) будет выведено line = function.

[10] В среде Mathcad 11 появился третий встроенный стиль с названием Math Text Font, определяющий форматы текстов в подписях на графиках. Раньше он был привязан к стилю Constants, что было не совсем удобно.