Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [VB .NET] Округление до заданного значения 
:(
    Опции темы
sated
Дата 7.6.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.6.2007

Репутация: нет
Всего: нет



Здраствуйте.
Есть такая задача:
Стандартные диаметры: 100, 125, 140, 160 и т.д.
Значение 120 необходимо округлить до ближайшего стандартного диаметра.
Ответ должен быть - 125
Если 138, то естественно - 140
Если 104, то 100.
Спасибо.
PM MAIL   Вверх
Дрон
Дата 7.6.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 92



И в чём тебе надо помочь?


--------------------
Да. Именно так.
PM   Вверх
Exception
Дата 7.6.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



Код
''' <summary>Находит ближайшее значение к заданному числу среди предложенных.</summary>
''' <returns>Ближайшее значение к <c>num</c> из массива <c>variants</c>.</returns>
''' <param name="num">Заданное число.</param>
''' <param name="variants">Массив возможных значений.</param>
Public Function FindClosest (num As Integer, variants As Integer()) As Integer
    variants.Sort ()
    Dim myIndex As Integer = variants.BinarySearch (num)
    If myIndex >= 0 Then ' точное совпадение
        Return variants(myIndex)        
    Else
        myIndex = Not (myIndex) ' получаем индекс ближайшего большего элемента
        If myIndex >= variants.Length Then ' больше самого большого
            Return variants(variants.Length - 1) ' возвращаем последнее допустимое значение
        Else ' где-то между двумя значениями
            Dim lesser As Integer = variants(myIndex - 1) ' предыдущее
            Dim greater As Integer = variants(myIndex) ' последующее
            Return Interaction.IIf (num - lesser < greater - num, lesser, greater) ' ближайшее
    End If
End Function

' ...

Dim values As Integer() = New Integer() {10, 15, 20, 25, 30}
Assert.AreEqual (FindClosest (3, values), 10)
Assert.AreEqual (FindClosest (11, values), 10)
Assert.AreEqual (FindClosest (14, values), 15)
Assert.AreEqual (FindClosest (17.5, values), 20) ' возвращает больший
Assert.AreEqual (FindClosest (39, values), 30)


Тесты написал специально, т.к. код писался в браузере и, само собой, не тестировался.


Это сообщение отредактировал(а) Exception - 7.6.2007, 18:42
PM   Вверх
Exception
Дата 7.6.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



PM   Вверх
Exception
Дата 7.6.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: нет
Всего: 186



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0878 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.