Числовые операции
|
|
Andreyka | Дата: Вторник, 21 Ноября 2006, 21:57 | Сообщение # 1 |
Новый участник
Группа: Пользователи
Сообщений: 2
Репутация: 0
Награды: 0
Статус: Offline
| As-master писал:Quote | ММВ прекрасно работает с любыми дробными числами. И, кстати, упомянутый проект калькулятора работает прекрасно! | Или я что-то не понимаю, но вот скрин"калькулятора" (сложение).
|
|
| |
as-master | Дата: Вторник, 21 Ноября 2006, 23:36 | Сообщение # 2 |
Группа: Удаленные
| Мужики, я нашел причину. И она неутешительна. Мы с вами имеем очередной баг ММВ (но только в версии 497). Но обо всём по порядку. Оказалось, что в 496-й версии ММВ проект работает нормально, а в 497-й - игнорирует дробные части чисел. Однако проект - победитель в конкурсе "Калькулятор" автора QuickSilver складывает числа нормально и в ММВ 497. В чём тут дело? Я попробовал написать такой сценарий: x1=2.34 x2=5.237 Itog=x1+x2 DisplayValue("Text","Itog") Нажал на кнопку - и увидел правильный результат: 7.577 Значит, складывает-то программа нормально. Тогда где баг? И выяснилось, что баг - в новом эдитбоксе, который в ММВ 497 наворотили дополнительными функциями, но... теперь он ПЕРЕСТАЛ ВОСПРИНИМАТЬ ДРОБНЫЕ ЧИСЛА!!! Делать нечего - придётся жить с этим багом. Спасибо, что хоть сама функция сложения не пострадала А бороться с этим багом будем следующим образом. Раз эдитбокс теперь не воспринимает дробные числа, то будем вводить туда значения не как числовые переменные, а как строковые, с последующим преобразованием их в числовые с помощью команды VAL(). Таким образом, скрипт, например, для сложения, будет выглядеть так: y = VAL(x1$)+VAL(x2$) DisplayValue("Результат","y") Не забудьте только в эдитбоксах изменить тип переменных на "строковые". Сразу должен заметить, что в связи с этим способом появляется один существенный недостаток: люди по незнанию станут вводить запятую в качестве разделителя, а запятую программа при сложении не понимает, нужно точку. Значит, надо принимать дополнительные меры по запрещению ввода запятой в эдитбоксы. Я сделал для вас новый пример на основе всего вышеизложенного. В том числе и со скриптами, запрещающими ввод запятых Пример возьмите отсюда (1 Кб).
Сообщение отредактировал as-master - Вторник, 21 Ноября 2006, 23:37 |
|
| |
Andreyka | Дата: Суббота, 25 Ноября 2006, 10:32 | Сообщение # 3 |
Новый участник
Группа: Пользователи
Сообщений: 2
Репутация: 0
Награды: 0
Статус: Offline
| Quote (as-master) | Мужики, я нашел причину. И она неутешительна. | Тоскливо В моем случае- используются трехэтажные формулы для расчетов, скрипты пестрят "волами", и приходится извращатся ужасно. Неужели этот баг нельзя вылечить? Или переходить на 4.9.6 и не мучаться.
|
|
| |
as-master | Дата: Суббота, 25 Ноября 2006, 11:27 | Сообщение # 4 |
Группа: Удаленные
| Quote (Andreyka) | Неужели этот баг нельзя вылечить? Или переходить на 4.9.6 и не мучаться. | Но ведь я же дал простое решение проблемы! Что еще надо? Можно, конечно, и на 496-й проект слепить, вот только если ты уже сохранял его в 497-й версии, то в 496-й теперь не откроешь.
|
|
| |
YURIY | Дата: Суббота, 25 Ноября 2006, 11:54 | Сообщение # 5 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Andreyka) | ли переходить на 4.9.6 и не мучаться. | Конечно, переходить! А в чём проблема? Что-ж поделать, в любой программе есть свои баги...
Вечная память Андрею Сергееву!
|
|
| |
aSanN | Дата: Вторник, 03 Апреля 2007, 12:51 | Сообщение # 6 |
Поднаторевший
Группа: Проверенные
Сообщений: 91
Репутация: 2
Награды: 0
Статус: Offline
| В создании одной из моих игрушек я столкнулся со одной проблемкой: Как можно вычислить корень числа? Первое что пришло мне в голову это: sqrtA=A^0.5 но эта строка тупо выдает ответ 1... Че делать? Мож плагины есть какие-нибудь? _ _ _ _ плиз хелп ас
|
|
| |
Omar | Дата: Вторник, 03 Апреля 2007, 12:59 | Сообщение # 7 |
Группа: Удаленные
| Лови aSanN: If (x = 0) Then Message("Корень из нуля равен нулю, это знает каждый дурак!","") Return() End i = i + 1 For i=1 To 500 y = x/R R = R + y R = R/2 If (i=500) Then R$ = CHAR® LoadText("text","R$") Return() End Next i Автор скрипта - as-master
|
|
| |
as-master | Дата: Вторник, 03 Апреля 2007, 15:31 | Сообщение # 8 |
Группа: Удаленные
| У нас на страницы "Запчасти" для проектов ММВ, вот здесь: http://www.mmbuilder.ru/mmb-tiles.html полно примеров, в том числе есть и для вычисления корня числа. Можешь и пример скачать, по этой ссылке: Вычисление корня числа
|
|
| |
Omar | Дата: Вторник, 03 Апреля 2007, 15:44 | Сообщение # 9 |
Группа: Удаленные
| AS не понимаю зачем одно и тоже два раза?????????????????
|
|
| |
as-master | Дата: Вторник, 03 Апреля 2007, 16:52 | Сообщение # 10 |
Группа: Удаленные
| Quote (Omar) | AS не понимаю зачем одно и тоже два раза? | Это для того, чтобы человек знал о том, что есть такая страница на сайте, где есть такие вот примеры. Ибо если бы он об этой странице знал, то не спрашивал бы. Еще есть вопросы? :)
|
|
| |
aSanN | Дата: Среда, 04 Апреля 2007, 10:02 | Сообщение # 11 |
Поднаторевший
Группа: Проверенные
Сообщений: 91
Репутация: 2
Награды: 0
Статус: Offline
| Сэкт Omar! Обязательно попробую. Если уж на то пошло.. Задам еще вопрос.. Если какие-нибуть приемы в ММВ типа Function (как в паскале или делфе- не важно)??? Или единственый выход написать отдельный скрипт и ссылаться на него в написании основного сценария прожки??? Добавлено (04 Апреля 2007, 10:02) --------------------------------------------- as-master, я правильно понял? Что если мне нужно будет снизить (или увеличить) точность корня, то достаточно будет изменить параметр цыкта: ... i = i + 1 For i=1 To 500 {например на For i=1 To 100 чтоб снизить} y = x/R ... и условие: ... R = R/2 If (i=500) Then {аналогично} R$ = CHAR® ... Я прав? Или 500 что-то конкретное означает? Я посто не совсем догоняю работу этого скрипта...
|
|
| |
as-master | Дата: Среда, 04 Апреля 2007, 10:35 | Сообщение # 12 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (aSanN) | as-master, я правильно понял? Что если мне нужно будет снизить ( или увеличить) точность корня, то достаточно будет изменить параметр цикла | Да, именно так. Скрипт основан на известном с древности методе вычисления корня путем последовательных приближений. То есть, чем чаще повторить вычисление по данной формуле, тем точнее будет ответ. Сама формула выглядит кажется так: a = 0,5(X/a + a) Здесь X - число, из которого извлекают корень, а - предполагаемый результат. Как правило, 100 циклов дает уже очень хороший результат. Например, при вычислении корня из двух получается результат: 1.41421356237, в котором все цифры верные. Поэтому стоит подумать о том, какая точность тебе нужна. Иногда можно ограничиться и десятью циклами Quote (aSanN) | Я посто не совсем догоняю работу этого скрипта... sad | Вот, уже объяснил
Да пребудет с вами ММВ!
|
|
| |
aSanN | Дата: Среда, 04 Апреля 2007, 13:52 | Сообщение # 13 |
Поднаторевший
Группа: Проверенные
Сообщений: 91
Репутация: 2
Награды: 0
Статус: Offline
| As, ответь тогда еще на такой, интересующий меня, вопрос: Quote (aSanN) | Если какие-нибуть приемы в ММВ типа Function (как в паскале или делфе- не важно)??? Или единственый выход написать отдельный скрипт и ссылаться на него в написании основного сценария прожки??? | плиз... Добавлено (04 Апреля 2007, 13:52) --------------------------------------------- ...А то очень не удобно десятки раз писать этот алгоритм с разными переменными, а ссылаться на скрипт засоряет мозг (хотя порой это полезно)... ... a=Sqrt(b) {Если прописать этот аглоритм заранее. Красиво и удобно. Ты со мной согласен??? } ... toizy уже ответил (прим. as-master)
|
|
| |
toizy | Дата: Среда, 04 Апреля 2007, 14:07 | Сообщение # 14 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Функций в ММВ нет. Только при помощи скриптов
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |