Объяснить инженеру, "который пользовался Excel'ем", что это - не Excel - мне кажется, высшее техническое образование инженера должно давать ему возможность осознать этот факт. Если человек умеет выполнять свою работу только при условии, что все кнопочки и лампочки на инструменте расположены строго в определённом порядке - его квалификация нуждается в переоценке... И для него - повторюсь - есть всплывающие подсказки, где он может сразу увидеть, как именно программа восприняла его определение.
То, что Вы называете "нонсенсом" - как раз правильно! Именно так и должно быть, это логично, разумно и естественно. Переменная нужна для того, чтобы хранить ЧИСЛО до того момента, как туда не запишут другое ЧИСЛО. А вот наоборот (хранить не число, а выражение) - это особенность, которая может сбивать с толку, хотя и довольно интересная, если ей грамотно пользоваться.
Поясню на этом Вашем примере ещё раз.
В момент первого определения Z все входящие в определение переменные уже определены. Z может быть вычислена в этот момент полностью. Программа её успешно и вычисляет. Z получает окончательное значение, дальнейшие Ваши фокусы с другими переменными больше на неё не влияют.
То же самое и при переопределении.
То, чего, похоже, хотите Вы - т.е. чтобы все переменные запоминали не численное значение выражения, получающееся в месте определения, а только формулу, и пересчитывались каждый раз в том месте, где используются - сделало бы использование программы невозможным. Вы не смогли бы полагаться ни на одно значение, полученное с помощью любого выражения сложнее "X:=5". Вам бы приходилось в каждом месте, где Вы хотите получить результат, перепроверить все значения всех переменных, входящих в определение искомой величины, и все определения всех входящих туда переменных по цепочке: а не переопределили ли Вы где-то какую-нибудь величину случайно?
Например, рассмотрим вариант, когда Вы хотите запомнить значение некоего (i-го) элемента вектора V. Вы пишете:
A:el(V,i)и со спокойной совестью надеетесь, что A хранит то, что там было. Затем Вы что-то делаете с вектором, и хотите сравнить текущее значение этого элемента с сохранённым. Как Вы думаете, Вам это удастся, если в A будет лежать не число, а формула (вида "найди текущее значение переменной i; теперь загляни в вектор V и найди там элемент с номером, равным вычисленному значению i" )?
А если нужно такое выражение-формула, то это называется функцией. Определите свои функции a(b,c):=b+c и пользуйтесь потом явно a(11,22)=33; a(22,44)=66; ... А если Вы хотите упрощённой записи (то есть без синтаксиса функции), то для Вас есть специальная возможность - определить выражение заранее, до определения входящих в него элементов. Но пользоваться этой возможностью нужно осознанно, понимая, что именно делаешь. Что под видом "переменной" на самом деле имеешь дело с замаскированной функцией.
Так что для не очень сообразительного инженера можно просто написать инструкцию: в зависимости от того, что Вам импонирует, либо "определять все входящие в выражение величины строго ДО того, как они будут использованы в формуле", либо (если хочется острых ощущений при отлавливании неочевидных ошибок) "определять все входящие в выражение величины строго ПОСЛЕ того, как они будут использованы в формуле".
Отредактировано пользователем 3 сентября 2014 г. 8:22:18(UTC)
| Причина: Не указана