|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Проблема с арифметикой. |
|
|
[решено] Проблема с арифметикой.
|
Старожил Сообщения: 379 |
Профиль | Отправить PM | Цитировать Здравствуйте. Как можно попроще найти числа, которые находятся в каком либо числовом промежутке и КРАТНЫЕ 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 |
|