Размерность в программе
Тип числовой переменной в среде Mathcad, как уже было отмечено в этюде 1, в какой-то мере заменяется размерностью хранимой величины, что очень удобно в инженерных расчетах. По программе на рис. 6.15 рассчитывается площадь треугольника (пункт 1). Аргументами функции Площ_треуг могут быть величины с разной размерностью длины (метры – m, сантиметры – cm, дюймы – in). Система Mathcad сама в них разберется, сделает нужные пересчеты и выдаст правильный результат в выбранной пользователем системе единиц (кг-м-с, г-см-с, СИ или британская).
Система Mathcad, кроме того, ведет контроль размерностей и не позволяет складывать, например, метры с килограммами или секундами (см. соответствующее встроенное сообщение об ошибке в конце пункта 1 на рис. 6.15).
Функция в среде Mathcad, как уже отмечалось, может возвращать несколько значений, объединенных в вектор. Программно заданная пользовательская функция в пункте 2 на рис. 6.15 возвращает значение периметра и площади треугольника. Но если пользователь захочет сделать размерными аргументы, чтобы функция вернула ему значение периметра и площади треугольника с соответствующими размерностями (пункт 3), то его ждет неудача. При этом будет выдано дезинформирующее сообщение об ошибке: «Несоответствие единиц измерения». Пользователь будет думать, что он складывает метры с килограммами, как в пункте 1. Но причина в другом – вектор в среде Mathcad может хранить переменные только одной размерности. Из-за этого нам уже пришлось отказаться от размерностей при решении задачи о равновесии балки – сравните рис. 1.15 и 1.16.
Можно заставить функцию выдавать две величины не сразу, а попеременно – в зависимости от значения дополнительного аргумента (пункт 4): если i = “Периметр”, то функция Параметры_треуг возвращает периметр треугольника, если i = “Площадь”, то – площадь. Но и здесь работа с размерностями будет приводить к сбоям – см. пункт 5 на рис. 6.15. Функция Параметры_треуг всегда возвращает размерность переменной из последней строки программы.
Ошибок в среде Mathcad, как и в любой другой программной среде, достаточно. Автор акцентирует внимание на этой ошибке по двум причинам. Во-первых, автор когда-то убил уйму времени, отлаживая программу, подобную программе на рис. 6.15, и не понимая, в чем суть ошибки. Во-вторых, дал об этом знать разработчикам Mathcad, но в восьмой версии эта ошибка почему-то не была исправлена. Кстати, об ошибках…
Считается, что по-настоящему красивая женщина («чертовски красивая») непременно должна иметь внешний дефект (ошибку Природы), небольшой, но сразу бросающийся в глаза: вздернутый нос, родинка, веснушки... Такие «украшения» лишний раз напоминают о том, что это не богиня, от которой лучше держаться подальше, не бездушная «кукла восковая», а земная женщина. Вот хрестоматийный пример: Наталья Николаевна Пушкина (урожденная Гончарова) – петербургская красавица, которая тем не менее чуть-чуть косила[30]. А вот другой пример – Шекспир воспел «смуглую леди сонетов» в те времена, когда белизна лица считалась непременным атрибутом женской красоты.
Слово «чуть-чуть», только что промелькнувшее в тексте, напоминает о кратком, но точном определении художественного вкуса: «Искусство – это чувство меры». Рафинированное произведение искусства, созданное на основе чистых канонов, находится как бы в неравновесном состоянии. Маленький щелчок («глюк» в программе, родинка на лице красавицы или ее легкое косоглазие, кривая колокольня в Пизе, корявый автограф в углу картины или темный штрих в биографии художника или программиста[31], на худой конец) сталкивает эту шаткую балансирующую конструкцию либо в чулан поделок (кич), либо в сокровищницу шедевров.
А вот еще пример, поворачивающий проблему на новую грань, где пересекаются плоскости формы и содержания. Сергей Довлатов в своих записках упоминает об известном профессоре-филологе с такими косыми глазами, что с ним трудно было общаться – непонятно, в какой глаз нужно смотреть. Этот профессор, прикрывая рукой левый глаз, говорил собеседнику: «Смотрите в правый. На левый не обращайте внимания. Левый – это дань формализму». Хорошо дурачиться, создав предварительно целую филологическую школу – ошибки простительны только в гениальных программах.
Если читатель увидит опечатки или даже ошибки в этой книге, то автор просит, во-первых, сообщить об этом автору, а, во-вторых, перечитать то, что написано выше.
Работа с размерностями вообще требует особой аккуратности. Вот хороший совет при работе в среде Mathcad. Вводить в Mathcad-документ новую переменную лучше оператором «m=» (вывод значения), а не оператором «m:=» (ввод значения). Этим пользователь проверяет лишний раз, не занята ли уже переменная m хранением заданной ранее величины. В Mathcad 7 и 8 этот прием не обременителен, так как в среде этих версий оператор «m=» автоматически (Smart Operator) превращается в оператор «m:=», если переменная m свободна от хранения чего-либо.
Предпроверку переменных особо можно рекомендовать в расчетах с использованием размерностей физических величин[32]. В этом режиме (а он включается по умолчанию) предопределенными (системными) будет огромное число «популярных» переменных (A, c, C, F, g, H, J, K, L, m, N и т.д. – см. приложение 7), хранящих единичные значения физических величин (сила тока, скорость, заряд, емкость, ускорение, индуктивность, энергия, температура, длина, количество вещества и т.д.). В таком расчете «невинное» выражение «m:=3» развалит весь стройный порядок единиц измерения: вместо метров появится черт знает что.