![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Проблема с арифметикой. |
|
|
[решено] Проблема с арифметикой.
|
![]() Старожил Сообщения: 379 |
Здравствуйте. Как можно попроще найти числа, которые находятся в каком либо числовом промежутке и КРАТНЫЕ 0,5
Например. Дано 2 числа: "7.90" и "8.66" Программы выведет 2 результата: "8.0" и "8.5" Помогите пожалуйста... Пишу программу для расчетов в инженерной геодезии... P.S. Границы промежутка будут вводиться не очень большие - чисел, кратных 0.5 будет максимум 3-4.... |
|
------- Отправлено: 20:27, 28-11-2010 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать sashadeg,
Попробуйте так, у меня работает: #include <Array.au3> $iStart = 7.92 $iEnd = 28.69 $iStep = 0.01 $iDivisor = 0.5 $j = 0 Dim $aResult[$j + 1] $iUBound = Ceiling(($iEnd - $iStart) / $iStep) For $i = 0 To $iUBound $iTemp = $iStart + $i * $iStep If Not Mod($iTemp, $iDivisor) Then $j += 1 ReDim $aResult[$j + 1] $aResult[$j] = StringFormat('%.2f', $iTemp) EndIf Next $aResult[0] = $j ;кол-во искомых чисел _ArrayDisplay($aResult) |
Последний раз редактировалось madmasles, 29-11-2010 в 02:31. Отправлено: 01:40, 29-11-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 206
|
Профиль | Отправить PM | Цитировать С одной стороны, задачка конечно простая, но работать с вещественными числами нужно очень аккуратно. По возможности нужно избегать операций сравнения, и уж тем более не использовать такие выражения, как $X0 = $X0 + $DX, дабы не накапливать ошибку...
$Xmin = 7.9 $Xmax = 8.66 $DX = 0.5 ; Первое минимальное число, которое делится на DX $X0 = (Floor(($Xmin + $DX) / $DX) - Not($Xmin - (Floor(($Xmin + $DX) / $DX) - 1) * $DX)) * $DX ; Количество искомых чисел в из промежутка от X0 до Xmax включительно $NX = 1 + Floor(($Xmax - $X0) / $DX) ; X0, X0+DX, X0+2*DX, ... , X0+(NX-1)*DX For $i = 1 To $NX ConsoleWrite($X0 + ($i - 1) * $DX & @CR) Next Долго, потому что Sleep()... Он в основном нужен только для GUI, где необходимо обрабатывать события от пользователя. Использование в расчетах Sleep() - это просто преступление. ![]() |
Последний раз редактировалось Yashied, 29-11-2010 в 02:36. Отправлено: 02:26, 29-11-2010 | #3 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Yashied,
Я второй свой вариант удалил, так как он еще первое и последнее значения выдавал не правильные. А Sleep(1) у меня был вставлен для разгрузки процессора, а то он у меня без паузы на 100% грузился, а с ней - около 10%. Ваш вариант отрабатывает практически мгновенно и без ошибок. ![]() |
Отправлено: 02:46, 29-11-2010 | #4 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать Спасибо за ответы!
madmasles, Ваш вариант выдает не 2 числа, а целую кучу 0_О Yashied, Ваш вариант работает, но почему то кроме "8" и "8,5" выдает ещё и "7,5"... Странно... Решил проблему просто заменив в единицу на двойку в конце кода |
|
------- Отправлено: 16:41, 29-11-2010 | #5 |
![]() Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось gregaz, 29-11-2010 в 17:28. Отправлено: 17:11, 29-11-2010 | #6 |
![]() Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 18:24, 29-11-2010 | #7 |
![]() Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:52, 29-11-2010 | #8 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать В результате я использовал код Yashied. Всем спасибо! Решено.
|
------- Отправлено: 18:54, 29-11-2010 | #9 |
![]() Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 20:50, 29-11-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интернет - Wireless Проблема( или проблема совместимости) | Ahimanu | Microsoft Windows 7 | 0 | 06-03-2010 16:05 | |
2008 - [решено] Проблема с ГП в AD., проблема при создании ГП к отдельным OU | kozemit | Windows Server 2008/2008 R2 | 2 | 15-07-2009 10:52 | |
Разное - Проблема установки Adobe Flash Player и проблема Windows Live | RubinSky | Microsoft Windows 7 | 3 | 26-03-2009 21:23 | |
Ошибка - Странная проблема с кодировкой(похоже проблема с преобразованием кодировок) | Mertvii | Microsoft Windows 2000/XP | 1 | 13-07-2008 16:05 | |
Как быстро и точно определить, в чём проблема? Явная проблема в железе | UTU | Непонятные проблемы с Железом | 16 | 22-05-2006 01:27 |
|