Переменная-невидимка
(The Invisible Variable)

В.Очков – http://twt.mpei.ac.ru/ochkov

ochkov@twt.mpei.ac.ru

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

Предисловие

Пример 1. Невидимое сложение

Пример 2. Нулевая размерная величина

Пример 3. Градус Цельсия и децибелы

Пример 4. Римская арифметика

Пример 5. Разреженная матрица

Пример 6. Бесконечный цикл

Пример 7. Второе имя переменной

PS

Добавления читателей

Рис. Д1. Символы и числа в Mathcad-выражении

Рис. Д1a. Секрет Mathcad-документа на рис.Д1

Рис. Д1b. Более простое решение проблемы Mathcad-документа на рис.Д1

Предисловие

Всем хорошо известна по роману Герберта Уэллса[1] и по многочисленным экранизациям история человека-невидимки. Мы же сейчас расскажем историю переменной (константы, функции, оператора[2]) невидимки, жизнь которой не просто возможна, а в ряде случаев и целесообразна не только в Mathcad, но и во многих других современных программных средах.

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

Немного о цвете в Mathcad-документах. По умолчанию пользователь Mathcad пишет «черно-синим по белому»: математические выражения имеют черный цвет, а комментарии к ним – синий. Кроме того, эти два типа объектов Mathcad опять же по умолчанию[3] отличаются шрифтом – у математических выражений от прямой (Arial), а у комментариев – рубленый (Times). Это позволяет четко различать эти два типа объектов на черно-белых «твердых» копиях: на нецветных распечатках, например. По умолчанию фон и математических выражений, и комментариев белый[4] (черно-синим по белому). Цвет фона пользователь может менять на зеленый, например[5]. Кроме того, пользователь Mathcad вправе поменять фон у отдельных выражений для того, чтобы, например, обратить на них внимание тех, кто будет изучать этот документ. Можно наоборот скрыть отдельные выражения, поменяв их фон с белого на черный (выражения-невидимки: пишем «черным по черному»[6]).

Математические выражения Mathcad в свою очередь состоят из уже упоминавшихся нами встроенных и пользовательских констант, переменных, функций и операторов. Этим объектам при их вводе через клавиатуру автоматически присваиваются стили (Style[7]): константам стиль Constants, а переменным, функциям и операторам – Variables. Кроме встроенных стилей (Constants и Variables) в среде Mathcad имеются и семь пользовательских.

Это позволяет в одном Mathcad-документе иметь одноименные, но разные объекты за счет того, что у них разные стили:

А:= 3   А:= 4   А:= A + A       A = 3   A = 4   A = 7

В этом примере не одна, а целых три переменных А, которые сохраняют свои значения 3, 4 и 7. Наш пример довольно искусственен, но в реальных Mathcad-документах часто присутствуют две переменные А: одна пользовательская (имя переменной А очень популярно), а вторая – встроенная (А – это единица измерения силы тока[8]). Чтобы не «испортить» амперы оператором A = что-то там, нужно этим двум переменным A присвоить разные стили. А чтобы в них не запутаться, можно у имен одноименных переменных поменять некоторые атрибуты стиля: тип (название) и/или размер шрифта, его стиль[9] (обычный, полужирный, курсив, подчеркнутый) и/или его цвет. А цвет может быть и белым. Вот вам и переменная – невидимка – «героиня» нашей статьи[10]. В романе Г. Уэллса человек-невидимка становился видимым, когда он одевался. Переменную-невидимку можно сделать видимой во всем Mathcad-документе, поменяв белый цвет фона, либо в отдельных операторах, поменяв белый цвет фона, либо в отдельных операторах, поменяв его «подложку».

Ниже приводятся семь примеров, оправдывающих работу с переменными-невидимками.

Кстати говоря, в среде Mathcad, да и вообще в математике есть операторы-невидимки. Один из них – это оператор возведения в степень xy. Здесь мы видим два операнда (x и y), но не видим имени (символа) самого оператора. Так что переменная-невидимка, вернее, функция (оператор) невидимка – это не выдумка автора, а давний и узаконенный математический прием.

Пример 1. Невидимое сложение

В среде Mathcad кроме оператора возведения в степень есть еще один невидимый встроенный оператор – это оператор умножения: пользователь Mathcad вправе выбирать его написание:

2×а       2·а     2 х a    2 а      и

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

Но пробел между двумя величинами может означать не только умножение, но и сложение. Например: 2 часа 30 минут, 1 км 200 м и т.д. Здесь между одинаковыми физическими величинами (время, длина) стоит невидимый символ сложения. На рис. 1 показано, как эту особенность можно реализовать в среде Mathcad:

Невидимое сложение

Рисунок 1. Невидимое сложение

Первым оператором на рис. 1 в расчет вводится функция пользователя с именем «+», дублирующая встроенный оператор сложения. У символа встроенного оператора сложения цвет поменять нельзя (да и не целесообразно – возможность «видимого» сложение должна остаться – см. второй оператор на рис. 1), а у имени пользовательской функции «+» – допустимо. В среде Mathcad функцию с двумя аргументами можно вызвать в виде инфиксного оператора, что мы и сделали на рис. 1: первый вызов функции ведется на небелом фоне, а второй – на белом.

Примечание: Если в среде Mathcad нажать на клавишу «+», то  получится не символ «+», а заготовка оператора сложения: « + ». Чтобы ввести символ «+» и другие спецсимволы (минус, деление, $ – интегрирование, @ – построение графика и т.д.) нужно предварительно взять аккорд Shift+Ctrl+k. После этого курсор клавиатуры изменяет цвет с синего на красный, что будет признаком блокировки работы некоторых клавиш как макросов ввода операторов. Повторное нажатие аккорда Shift+Ctrl+k возвращает курсору синий цвет, а пользователю Mathcad – возможность работы с клавишами «+», «–», «/», «*» и др. как с арифметическими и прочими операторами.

В среде Mathcad 2001 появился встроенный оператор невидимого сложения – см. рис. 1a.

Встроенной невидимое сложение

Рисунок 2. Встроенной невидимое сложение

Пример 2. Нулевая размерная величина

Пакет Mathcad проявляет излишнюю педантичность при выводе размерных величин. Мы говорим, к примеру, что данное оборудование находиться на отметке 20 метров, а данное – на нулевой, не уточняя при этом, в чем измеряется этот самый нуль (метры, сантиметры, футы, дюймы и т.д.). Но пакет же Mathcad всегда сопровождает вывод размерной величины указанием единицы измерения и в тех случаях, когда это делать не нужно. В этом случае «лишнюю» единицу измерения можно скрыть, сделав ее…невидимой (см. рис 2).

Нулевая размерная величина

Рисунок 2a. Нулевая размерная величина

На рис. 2b показано, как невидимая переменная может решить проблему «правильной» единицы измерения – оборот в минуту.

Рисунок 2b. «Правильные» единицы измерения – оборот в минуту

Пример 3. Градус Цельсия и децибелы

Одна из трудностей, с которой сталкивается пользователь Mathcad, решающий размерную задачу, – это работа с градусами Цельсия. Дело в том, что в Mathcad встроены градусы Кельвина и Ренкина (абсолютная температурная шкала), но не встроены градусы Цельсия и Фаренгейта (относительная шкала), которые в расчетной практике используются довольно часто. Градусы Цельсия (Фаренгейта) нельзя ввести в расчет простым правилом ввода пользовательской единицы измерения, связывая ее со встроенной через коэффициент. Пример:

баррель := 42 gal                баррель = 157.99 L

Работа с относительными шкалами измерения температуры показана на рис. 3

Работа с градусами Цельсия и Фаренгейта

Рисунок 3. Работа с градусами Цельсия и Фаренгейта

На рис. 3 ввод значения температуры по шкале Цельсия (Фаренгейта) ведется через вызов видимой первой функции °C (°F) в виде постфиксного оператора, а и вывод температуры по шкале Цельсия (Фаренгейта) через вызов невидимой второй функции °C (°F) в виде префиксного оператора с припечаткой °C (°F), равной единице.

Технология работы с невидимыми символами задействована и в Mathcad-документе на рис. 3a, где ведется оценка размерных величин через децибелы.

Работа с децибелами

Рисунок 3a. Работа с децибелами

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

Пример 4. Римская арифметика

Mathcad поддерживает арифметику работы с десятеричными, двоичными, шестнадцатеричными и восьмеричными числами. Но при желании можно заставить Mathcad работать и с римскими числами. Для этого в расчет вводится функция, которая возвращает римское число, если ее аргумент – арабское число, и арабское число, если аргумент – римское число (рис. 4):

Работа с римскими числами

Рисунок 4. Работа с римскими числами

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

Пример 5. Разреженная матрица

Пакет Mathcad обладает довольно мощными инструментами работы с векторами и матрицами (массивами). Один недостаток – эти массивы должны быть полностью заполнены. На рис. 5 показано как можно имитировать работу с не полностью заполненными (разреженной) матрицей.

Имитация работы с разреженной матрицей

Рисунок 5. Имитация работы с разреженной матрицей

На рис. 5 «пустые» элементы матрицы хранят бесконечность – число, которое редко вносят в матрицу в качестве ее элемента. Но эта «бесконечность» не видна – ей присвоен невидимый стиль. При определении минимального и максимального значений элементов матрицы, а также их среднего значения (mean), «бесконечность» игнорируется за счет того, что матрица предварительно «разворачивается» в вектор с отсеиванием «пустых» элементов. В Mathcad 11 (Enterprise Edition) и 12 появился новый тип данных NaN (Not A Number). Переменную NaN стоит вводить на место пустых элементов разреженной матрицы и окрашивать в белый цвет.

Пример 6. Бесконечный цикл

Инструменты программирования Mathcad содержат операторы создания только цикла с предпроверкой (цикл while). Если же нужно создать цикл с постпроверкой или цикл с выходом из середины, то организуют бесконечный цикл со вставками операторов break, continue или return. Бесконечный же цикл организуется через «бесконечный» операнд оператора while. Символ бесконечности (здесь может быть любое ненулевое число) прописывается белым по белому (см. рис. 6).

Бесконечный цикл в Mathcad

Рисунок 6. Бесконечный цикл в Mathcad

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

Пример 7. Второе имя переменной

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

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

Одно из решений этой проблемы показано на рис. 7:

Расширенное имя Mathcad-переменной

Рисунок 7. Расширенное имя Mathcad-переменной

На рис. 7 само имя  переменной (a, b, c) скрыто (невидимо). В качестве имени переменной показан комментарий к ней, куда вставлен математический оператор.

Можно привести еще множество примеров пользы от невидимого символа, но семь… красивое число.

PS

Невидимые переменные и функции особо полезны при работе с WebSheets (Mathcad Application Server) – в таких сетевых расчетных документах, где не нужно показывать лишнюю информацию. Так, например, при расчете давления в конденсаторе турбины (см. расчет) полученное значение дублируется несколько раз с разными единицами давления: P2=0.0441 кгс/см2  =4.32 Па  =32.42 мм рт ст и т.д. Здесь записаны несколько операторов P2=, но только в первом переменная P2 видима.

Добавления читателей

Игорь Архипов (arhipovi@mail.ru) предлагает использовать «невидимость» переменной для решения «вековечной мечты» пользователей Mathcad – сочетание в документе и имен переменных и их значений так, чтобы было две формулы: с символами (переменными) и числами (см. рис. Д1).

Рис. Д1. Символы и числа в Mathcad-выражении

Рис. Д1. Символы и числа в Mathcad-выражении

Решить эту проблему поможет оператор символьного вывода (→) и… невидимая единичная переменная – см. рис. Д1а, с распахнутой областью и с измененным на красный цветом невидимой переменной l (эль). Почему l, а не , к примеру, dl, во первых, похожа на единицу и, во-вторых, она «узкая» переменная. Если ее дополнительно «прописать» самым мелким шрифтом, то в выражении будет малозаметно даже ее место .

Рис. Д1a. Секрет Mathcad-документа на рис.Д1

 

Рис. Д1b. Более простое решение проблемы Mathcad-документа на рис.Д1

Рис. Д1b. Более простое решение проблемы Mathcad-документа на рис.Д1

Решение на рис. Д1b хуже тем, что оператор Var:=Var возможно придется повторно записывать у формул, где не встречается переменная a.



[1] «The Invisible Man» – роман Г.Д. Уэллса (Wells, Герберт Джон, 1866-1946). Роман, задуманный во время работы над «Машиной времени», был написан в 1896 году, печатался в июне – августе 1897 в лондонском журнале «Пирсонс мэгэзин» и вышел отдельным изданием в сентябре того же года в Лондоне. В романе нашло отражение знакомство Уэллса с философией Ф. Ницше, чьи работы активно переводили в Англии в 1890-е годы. История гениального изобретателя Гриффина, открывшего секрет невидимости, – это история ницшеанского человека. Сосредоточенность героя на научных исследованиях ведет его к отъединению от людей, нравственному огрублению, ожесточению, позволяет переступить через моральные запреты. «Изучение природы делает человека столь же безжалостным, как и сама природа», – замечает Уэллс. Движимый презрением и ненавистью к людям, Гриффин стремится, установив царство террора, покорить человечество. В отличие от «Машины времени», масштаб действия в романе иной ­– иначе и разрабатывается и фантастическая идея: подробно, тщательно выписывая детали, Уэллс стремиться обосновать ее реалистическими средствами, что дало основание Джозефу Конраду после выхода книги назвать Уэллса «реалистом фантастики». (В.Л.Гопман. Энциклопедия литературных произведений. М.: ВАГРИУС, 1998. – 656 с.)

[2] Далее в тексте статьи под переменной-невидимкой мы будем подразумевать один из этих объектов Mathcad.

[3] Это умолчание касается шаблона пустого документа, который появляется на экране дисплея после запуска Mathcad или после нажатия кнопки New на панели инструментов. Имя этого шаблона normal. Выполнение же команды New…из меню File выводит на экран дисплея диалоговое окна со списком встроенных и пользовательских шаблонов Mathcad, аранжировка и наполнение которых может отличаться от стандартного (normal). Пользовательский шаблон (другое название – бланк) создается через команду Save As… записью файла в папку Template c расширением *.mct.

[4] В DOS-версиях Mathcad писали «белым по черному». Это была связано с экономией люминесцентного слоя экранов дисплея. Сейчас же люди стали менять дисплеи по критерию его не физического, а морального старения. Здесь, повторяю, и кроется объяснение того факта, что черный фон экрана поменяли на белый.

[5] Считается, что зеленый цвет благотворно влияет на зрение (зеленые абажуры, очки с зелеными стеклами и т.д.). Лет 10-15 назад были очень популярны так называемые геркулесовские дисплеи, писавшие не белым по черному, а зеленым по черному.

[6] Таким черным прямоугольником часто накрывают лица милиционеров на фотографиях в газетах или на кадрах в телевидении.

[7] Стили мы используем в текстовых процессорах, в Word’е, например, когда один абзац помечаем как заголовок (статьи, книги), другой – как обычный текст. Такое структурирование текста (комментариев) допустимо и в среде Mathcad.

[8] Mathcad – это не математический, а физико-математический пакет, позволяющий переменным присваивать не абстрактные значения (как в традиционном программировании), а значение физических величин (масса, время, длина, энергия и т.д.).

[9] Здесь термин «стиль» имеет второе значение.

[10] В среде Mathcad есть один способ создания переменной-невидимки. Имя переменой может состоять из одного или нескольких… пробелов.