Код находит индекс ближайшего к заданному числу элемента массива и возвращает его (индекс). Код | ''' <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 myIndex Else myIndex = Not (myIndex) ' индекс ближайшего большего элемента If myIndex >= variants.Length Then ' выходит за рамки Return variants.Length - 1 ' возвращаем индекс последнего значения Else ' где-то между двумя значениями Dim lesser As Integer = variants(myIndex - 1) ' предыдущее Dim greater As Integer = variants(myIndex) ' последующее Return Interaction.IIf (num - lesser < greater - num, myIndex - 1, myIndex) ' ближайшее End If End Function ' ... Dim values As Integer() = New Integer() {10, 15, 20, 25, 30} Assert.AreEqual (values(FindClosest (3, values)), 10) Assert.AreEqual (values(FindClosest (11, values)), 10) Assert.AreEqual (values(FindClosest (14, values)), 15) Assert.AreEqual (values(FindClosest (17.5, values)), 20) ' возвращает больший Assert.AreEqual (values(FindClosest (39, values)), 30) |
|