Округление до заданного значения

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

sated
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 07.06.2007 (Чт) 16:57

Округление до заданного значения

Сообщение sated » 07.06.2007 (Чт) 17:00

Здраствуйте.
Есть такая задача:
Стандартные диаметры: 100, 125, 140, 160 и т.д.
Значение 120 необходимо округлить до ближайшего стандартного диаметра.
Ответ должен быть - 125
Если 138, то естественно - 140
Если 104, то 100.
Спасибо.

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 07.06.2007 (Чт) 18:06

Вообще-то это чисто арифметическая задача =)

Тебе просто необходимо правильно написать свою формулу, вот и все 8)
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.06.2007 (Чт) 18:12

Foxen, приведи пример такой формулы. С удовольствием посмотрю.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 07.06.2007 (Чт) 18:38

Ладно могу подсказать, хотя задача элементарная =))

Разбивай свое число на сотни десятки и единицы и работай с ними, а именно:


Код: Выделить всё
'x = твое число
X1= x/100
X2 = (x- X1*100)/10
X3 = x - X1*100 - X2*10

Ну и потом делай свои вычисления:
Допустим:
Код: Выделить всё

if X3>5 then X2+=1
if X3 <5 then X3=0
if X3 = 5 then X3 = 5

Ну и все собирай свое число воедино))
Код: Выделить всё

X= X1*100 +X2*10 +X3


Делов то 8)
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 07.06.2007 (Чт) 18:41

Ну конечно нельзя совсем назвать это формулой, ну пусть будет это маленьким алгоритмом))

В принципе работать должно)
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 07.06.2007 (Чт) 18:43

Думаю сойдет такая "формула" :D
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 07.06.2007 (Чт) 18:52

Кстати никто не знает, со скольки ответов дают первую звезду ?
Просто не привычно как то без звезд когда сам являешься админом своего сайта и форума :D
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.06.2007 (Чт) 18:54

Foxen, у нас принято постить не четыре раза подряд, а один. Сбоку от сообщения есть кнопка "Правка".

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 07.06.2007 (Чт) 18:55

Извиняюсь :oops: :)
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.06.2007 (Чт) 19:55

Foxen
Во-первых, приведённый код является бредом. Если от очень нечего делать довести его до рабочего состояния, получится неслабая простыня из многократно вложенных If, абсолютно нечитаемая.
Во-вторых, люди, пришедшие сюда непосредственно за звёздами (да ещё и стремящиеся к ним такими способами), частенько вылетают до получения хотя бы одной.

sated
Код: Выделить всё

  Private Function GetClosest(ByVal arr() As Integer, ByVal value As Integer) As Integer
    Dim pos As Integer = Array.BinarySearch(arr, value)

    If pos >= arr.GetLowerBound(0) Then
      Return arr(pos)
    Else
      pos = Not pos

      Select Case True
        Case pos > arr.GetUpperBound(0)
          Return arr(arr.GetUpperBound(0))
        Case pos = arr.GetLowerBound(0)
          Return arr(arr.GetLowerBound(0))
        Case Else
          If Math.Abs(arr(pos) - value) > Math.Abs(arr(pos - 1) - value) Then
            Return arr(pos - 1)
          Else
            Return arr(pos)
          End If
      End Select
    End If

  End Function


  Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

    MsgBox(GetClosest(New Integer() {100, 125, 140, 160}, 120))

  End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Foxen
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 04.06.2007 (Пн) 0:20
Откуда: Уфа

Сообщение Foxen » 07.06.2007 (Чт) 20:12

Я не за звездами пришел, а просто для общения с другими программистами, а звезда просто для красоты)
Я не говорил что мой код на 100% правильный я просто хотел подтолкнуть человека на свои собственные рассуждения, и принятие собственного решения.

Еще раз извиняюсь за флуд.
90% всех ошибок сидят в полуметре от монитора...
Я бы изменил мир, но Бог не даёт исходников, а дьявол все время что-то кодит...

sated
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 07.06.2007 (Чт) 16:57

Сообщение sated » 08.06.2007 (Пт) 13:12

GSerg спасибо. Это для меня очень тяжело, но сейчас начну разбираться. Потом задам вопросы.
Спс. (Исправил)

Уже разобрался, просто БОМБА. Подстроил под свою программу и УРА!
Большое спасибо.
Вот это реальная помощь.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList