Вверх ↑
Этот топик читают: Гость
Ответов: 758
Рейтинг: 112
#1: 2009-09-29 11:06:25 ЛС | профиль | цитата
В приведенной схеме результаты должны быть одинаковые, но они отличаются

code_15069.txt
карма: 1

0
файлы: 1code_15069.txt [1.2KB] [161]
Ответов: 16884
Рейтинг: 1239
#2: 2009-09-29 11:20:51 ЛС | профиль | цитата
miver писал(а):
В приведенной схеме результаты должны быть одинаковые
а это почему
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 758
Рейтинг: 112
#3: 2009-09-29 11:26:40 ЛС | профиль | цитата
Tad писал(а):
В приведенной схеме результаты должны быть одинаковые
а это почему


По логике: раз формула одинаковая (%1-%3)*65536+%2-%3 данные одинаковые 100;100;50
то и результат должен быть одинаковый вне зависимости от способа подключения

карма: 1

0
Ответов: 2125
Рейтинг: 159
#4: 2009-09-29 12:31:11 ЛС | профиль | цитата

Add(MT_String,15585569,308,301)
{
link(onResult,16043934:doCalc,[])
}
Add(Message,14532624,406,301)
{
}
Add(MathParse,16043934,357,301)
{
DataCount=3
MathStr="(%1-%3)*1000+%2-%3"
ResultType=0
link(onResult,14532624:doMessage,[])
}
Add(Button,4432663,259,308)
{
Left=80
Top=100
Caption="2"
Data=String(100;20;3)
link(onClick,15585569:doMT,[])
}
Формула (%1-%3)*1000+%2-%3
Числа 100;20;3
Результат 79983? Т.е. (100-20)*1000+3-20 !
Парадокс.

А теперь вопрос: почему %2 и %3 не на своих местах?

Ответ прост: потому что аргументы считывались в порядке их появления в формуле.

А теперь вопрос: а правильно ли это?
карма: 1

0
Ответов: 758
Рейтинг: 112
#5: 2009-10-01 10:36:37 ЛС | профиль | цитата
tsdima писал(а):
потому что аргументы считывались в порядке их появления в формуле

Скорей всего это сделали обдумано и с какой-то целью
Может кто-нибудь скажет с какой

карма: 1

0
Ответов: 9906
Рейтинг: 351
#6: 2009-10-01 11:29:26 ЛС | профиль | цитата
1) Делать предварительное и безусловное прочтение верхних данных можно при условии, что они не являются волотильными
2) В FMP так и сделано
3) Некоторые конструкции в строке MP (в FMP нет таковых) являются волотильными. Это функциональный вызов, чтение элементов массивов или матриц.
4) Определить такие синтаксические конструкции можно только парсингом.
5) Делать сначала один парсинг для определения нужных переменных, а потом для вычисления - себе дороже. Тем более, что порядок чтения переменных в конечном счете определяет пользователь, а не берется с потолка.
карма: 9

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)