В.Очков
Описана эволюция интерфейса популярной математической программы Mathcad.
Пакет Mathcad во времена его первых шагов рынке компьютерных расчетных технологий называли и рекламировали как суперкалькулятор: если за введенным выражением набрать «=» (знак равенства), то будет выведен численный результат (рис. 1).
От термина «суперкалькулятор» в физико-математическом пакете Mathcad (а так его стали называть в настоящее время) осталось название панели Calculator (см. рис. 1), где собраны наиболее часто используемые математические функции и операторы, а также «результирующий» оператор «=» (правый нижний угол панели). Панель фактически повторяет клавиатуру «научного» калькулятора – настоящего или виртуального, вшитого в Windows.
Подобное «вычислительное» действие имеет знак равенства и в другой популярной расчетной программе – в электронных таблицах Excel. Только там знак равенства ставится не в конце математического выражения, а в начале. И в среде Mathcad и в среде Excel численный ответ появится после увода курсора (автоматический режим счета) либо после нажатия клавиши F9 (автоматический и ручной режимы).
В операторе вывода численного результата «=» скрыто очень много умолчаний. Вот их далеко не полный перечень:
· число выведено в десятеричном, а не в двоичном, восьмеричном или шестнадцатеричном представлении;
· число выведено в виде десятичной, а не простой дроби;
· выведено только три знака после запятой;
· число выведено в так называемом научном формате;
· если мантисса числа оканчивалась бы нулями, то они не были бы показаны;
· число округлено по последней цифре в мантиссе;
· фон, на котором прописан ответ и белый и т.д.[1]
Эти и другие умолчания при необходимости можно нарушать, вызвав командами меню или двойным щелчком мыши диалоговые окна форматирования численного ответа, одна из закладок которого показано на рис. 2.
Второй по «главности» в интерфейсе Mathcad оператор – оператор присваивания (ввода) имеет символ «:=». Его обычно набирают, нажимая только клавишу «:» (двоеточие[2]). Второй символ («=») Mathcad любезно добавит сам, передвигая курсор на место (placeholder) ввода числа или выражения (рис. 2).
Начиная с седьмой версии Mathcad работающие с этим пакетом получили возможность менять написание оператора «:=» (стиль языков программирования Pascal и C) на «=» (BASIC[3], fortran). Диалоговое окно изменения написания оператора присваивания вызывается правой кнопкой мыши. Оно показано на рис. 3.
Начиная с восьмой версии Mathcad пользователям было рекомендовано вводить оператор присваивания не через клавишу «:» (ввод), а через клавишу «=» (вывод). Резон здесь в том, что если переменная, введенная до этого, не определена, то оператор «=» (вывод) автоматически превращается в оператор «:=» (ввод – см. выше). В противном случае – в случае, когда переменная, которой присваивается значение, уже определена, выводится ее численное значение. Этим еще раз проверяется, что данная переменная свободна – ей ни человеком, ни системой Mathcad пока еще ничего не присвоено. Это позволяет избежать ряд очень неприятных ошибок. Во-первых, можно ненароком «испортить» какую-либо предопределенную переменную: е:=5, m:=1, A:=2. Переменная е хранит основание натурального логарифма, а переменные m и А – единицы измерения длины (метр) и силы тока (ампер) соответственно. Во-вторых, можно забыть, что какая-либо переменная уже «нагружена» пользователем, и присвоить ей что-то новое. Ситуация, когда переменная в одной части Mathcad-документа имеет одно значение, а в другой – иное, не совсем нормальна.
Прием переопределения переменных[4] был в ходу в те времена, когда память компьютера была одним из лимитирующих параметров при решении задач на компьютере и поэтому во избежание ошибки переполнения памяти освободившуюся переменную приходилось тут же загружать другой величиной. В настоящее время так приходится поступать при размещении в памяти компьютера (работающего в том числе и с Mathcad) объемных массивов[5] (векторов и матриц, простых и составных). Хотя запись на месте массива более короткого нового массива или даже скалярной величины не меняет объем задействованной памяти (механизм статических, а не динамических массивов).
Режим автоматической замены оператора «=» на оператор «:=» (подобный гибрид двух операторов называется SmartOperator – «сообразительный» оператор[6]) можно отключить, через закладку General диалогового окна Preference (рис. 4).
Оператор ввода значения переменной «:=» был неким
камнем преткновения для тех, кто лет десять-пятнадцать назад пытался освоить
Mathcad, узнав о его необыкновенных способностях считать по сложным формулам
(см. рис. 1), строить графики, решать уравнения и системы. Люди по привычке,
выработанной работой с языками fortran[7] или BASIC, набирали в среде
Mathcad «a=» вместо «a:»[8] и…
отказывались от дальнейшей работы с этим математическим пакетом из-за
возникающей непонятной ошибки – система Mathcad сообщала, что переменная a не
определена. Ее пытались определить оператором задания типа переменной, но
такого оператора в среде Mathcad не было и нет. Фирма MathSoft
только в седьмой версии «сдалась» и перестала требовать от пользователей
набирать «а:» вместо более
привычного и естественного «a=». Теперь маятник качнулся в обратную сторону
– рекомендуется для ввода значения переменной набирать не «а:»,
Оператор вывода численного значения «=», как уже было отмечено, целесообразно задействовать и при вводе в Mathcad-документ пользовательской функции. После ввода имени новой функции стоит нажать не символ «(» (скобка, открывающая список аргументов создаваемой функции), а символ «=». Резон здесь старый – ограждение пользователя от возможных ошибок, связанных с повторным переопределением функции. Если, например, пользователь хочет ввести в расчет функцию с именем F и набирает на клавиатуре пару символов «F=», возможны следующие реакции системы Mathcad:
1. F = 1 F – не отключен режим работы с единицами измерения физических величин; в данном случае пакет Mathcad напоминает нам что, фарада (единица электрической емкости) равна одной фараде [1] и что эта переменная уже занята.
2. F = число – это означает, что в расчете уже задействована пользовательская переменная с именем F.
3. F = function – это означает, что в расчете уже задействована пользовательская функция с именем F.
4. F := – это означает, что имя 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).
На вооружение была взята волнистая зеленая черта, отмечающая в текстовом редакторе Word, например, ошибку пунктуации. Если такая черта в среде Mathcad появится под именем переменной, которой хотят что-то присвоить, или под именем функции, которую хотят определить, то разработчик должен исправить ошибку или просто уяснить для себя, что здесь все ОК, а переопределение переменной и/или функции ведется намерено.
Начиная с Mathcad 2001 оператор «:=» в среде Mathcad 2001 может вводить в переменные конкретные значения не только константой через клавиатуру (c := 123, например) или по результату выполнения математических действий (c := a + b), но и с использованием стандартных элементов интерфейса: кнопка (Button), список (List), радиокнопка (Options), «галочка» (Check) и т.д. (рис. 6).
Потребность в открытии 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.
Эволюции подвергался и оператор вывода численного результата «=». Но не сам оператор, а только результат его работы. Так, в очередных версиях 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. М.: Финансы и статистика,
2. Очков В.Ф. Советы пользователям
Mathcad. Издательство МЭИ,
3. Очков В.Ф. Mathcad: от графика к
формуле, от расчета на компьютере к расчету в Интернет. Exponenta
Pro, № 4
[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, что было не совсем удобно.