Форум » » Почему в QSP нет функции модуля числа?! » Ответить

Почему в QSP нет функции модуля числа?!

Eten: когда делаешь механизмы загадок, то используешь как строки так и числа, с числами делать это проще (а на экран строками). Дык вот, в чем дилема возникла, нужно мне было в загадке использовать принцип весов (принцип равновесия) и для этого нужно использовать числа относительно нуля. Это определяется не только оптимальностью алгоритма (так проще писать), но и уменьшает кол-во переменных для вывода на экран о состоянии загадки. Т.е. видно не только степень наклона на весах, но и в какую сторону. Для этого у меня задано, что отрицательные это левая чаша, а положительные это правая у каждой по 48 очков (по сумме для равновесия они должны быть равны нулю). Использование чисел в данном случае определяет то, что к весам приложена сама загадка с орнаментом, т.е. при совпадении знаков с эталоном в левой и правой секциях, весы начинают менять свое положение, что в результате определяет степень наклона и направление в одной переменной сразу (левая + правая = результат: -48 + 48 = 0 -равновесие). Можно конечно сделать и с положительными числами на обеих чашах, но тогда код разбухнет вдвое, а хороший алгоритм должен быть коротким, понятным и простым. В данном случае подходит описанный мной. В общем смысл дилемы напрашивается само собой, для определенных проверок требуется сверка, как положительных значений, так и отрицательных одновременно, т.е: [more] IF комната1_результат = 8 OR комната1_результат = -8 : $рейка_степень = 'слегка наклонена ' IF комната1_результат = 16 OR комната1_результат = -16 : $рейка_степень = 'немного наклонена ' IF комната1_результат = 24 OR комната1_результат = -24 : $рейка_степень = 'на половину наклонена ' IF комната1_результат = 32 OR комната1_результат = -32 : $рейка_степень = 'сильно наклонена ' IF комната1_результат = 40 OR комната1_результат = -40 : $рейка_степень = 'очень сильно наклонена ' IF комната1_результат = 48 OR комната1_результат = -48 : $рейка_степень = 'полностью наклонена ' [/more] В то время когда можно напиать так: [more] IF ABS(комната1_результат) = 8 : $рейка_степень = 'слегка наклонена ' IF ABS(комната1_результат) = 16 : $рейка_степень = 'немного наклонена ' IF ABS(комната1_результат) = 24 : $рейка_степень = 'на половину наклонена ' IF ABS(комната1_результат) = 32 : $рейка_степень = 'сильно наклонена ' IF ABS(комната1_результат) = 40 : $рейка_степень = 'очень сильно наклонена ' IF ABS(комната1_результат) = 48 : $рейка_степень = 'полностью наклонена ' [/more] где ABS(X) - это |X| (модуль числа X). Почему в QSP нет функции модуля числа? Сообщение отредактировано модератором.

Ответов - 9

Byte: replace(a,'-') - модуль числа :)

Byte: а также iif(a<0,-a,a) - модуль числа.

Byte: А ещё max(a,-a) - модуль числа.


Eten: Байт явно ответил и у меня отпали все вопросы. Спасибо за ответ, Байт! Сообщение отредактировано модератором.

luciofulci: Ну, в QSP есть функции, так что можно просто сделать функцию модуля числа. Не знаю правда, насколько лучше выглядит [pre2]func "abs", n[/pre2], чем [pre2]max(n, -n)[/pre2], но осмысленне - точно. Я в общем-то и ратовал за функции, чтобы тем таких не возникало...

Ntropy: С использованием оператора func уже можно оформлять вычисление модуля отдельной локацией. Правда стоит ли ;)

[Ray]: Ntropy пишет: Байт явно ответил и у меня отпали все вопросы. Спасибо за ответ, Байт

Ntropy: [Ray] это не я писал, а Eten.

[Ray]: оу перепутал кнопки "цитата".



полная версия страницы