Работа с массивами. Подскажите в чем ошибка. - C#
Формулировка задачи:
Доброго времени суток всем.
Помогите найти оптимальный путь решения проблемы.
Дано: Есть массив конечной длинны ARRAY, с элементами типа float. Отсортирован по возрастанию.
Некое число типа float X, которое точно больше самого меньшего элемента массива. И меньше самого большего элемента массива.
Задача: Найти элемент массива ARRAY, который ближе всего к заданному числу X.
Задача кажется простой, но при реализации возникают непредвиденные трудности.
У меня есть два метода. В первом цикл, который тупо перебирает все элементы массива.
Во втором методе, собственно, определяется является ли данный элемент ближайшим к заданному числу
При компиляции выскакивает исключение, говорящие о выходе за рамки массива. Хотя, как он может выйти за рамки массива если цикл по определению не может обратится к индексу, больше размера массива.
for(byte i = 0; i < ARRAY.Length; i++){ if(IsAdjacent(ARRAY,i,X)) Modifier = 4; .......... }
public static bool IsAdjacent(float []ARRAY,byte number, float X){ if(number==0){ if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number+1])){ return true; } }else if(number==ARRAY.Length){ if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number-1])){ return true;} }else{ if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number+1])&&Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number-1])){ return true;} } return false; }
Решение задачи: «Работа с массивами. Подскажите в чем ошибка.»
textual
Листинг программы
using System; using System.Linq; namespace ConsoleApplicationTest { public static class Program { private static void Main() { // Начальные данные. const int min = 0; const int max = 50; const int count = 10; const int x = 20; // Создаём массив из случайных упорядоченных элементов. Random r = new Random(); var array = (from i in Enumerable.Repeat( 0, count ) let n = r.Next( min, max ) orderby n select n).ToArray(); // Находим элемент с минимальным отклонением от x. int result = array .Skip( 1 ) .Aggregate( new { d = Math.Abs( array.First() - x ), item = array.First() }, ( accum, i ) => Math.Abs( i - x ) < accum.d ? new { d = Math.Abs( i - x ), item = i } : accum, accum => accum.item ); // Выводим результаты. foreach ( var i in array ) { Console.WriteLine( i ); } Console.WriteLine( "Result = " + result ); Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д