Работа с массивами. Подскажите в чем ошибка. - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток всем. Помогите найти оптимальный путь решения проблемы. Дано: Есть массив конечной длинны ARRAY, с элементами типа float. Отсортирован по возрастанию. Некое число типа float X, которое точно больше самого меньшего элемента массива. И меньше самого большего элемента массива. Задача: Найти элемент массива ARRAY, который ближе всего к заданному числу X. Задача кажется простой, но при реализации возникают непредвиденные трудности. У меня есть два метода. В первом цикл, который тупо перебирает все элементы массива.
Листинг программы
  1. for(byte i = 0; i < ARRAY.Length; i++){
  2. if(IsAdjacent(ARRAY,i,X))
  3. Modifier = 4;
  4. ..........
  5. }
Во втором методе, собственно, определяется является ли данный элемент ближайшим к заданному числу
Листинг программы
  1. public static bool IsAdjacent(float []ARRAY,byte number, float X){
  2. if(number==0){
  3. if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number+1])){
  4. return true;
  5. }
  6. }else if(number==ARRAY.Length){
  7. if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number-1])){
  8. return true;}
  9. }else{
  10. if(Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number+1])&&Math.Abs(X-ARRAY[number]) < Math.Abs(X-ARRAY[number-1])){
  11. return true;}
  12. }
  13. return false;
  14. }
При компиляции выскакивает исключение, говорящие о выходе за рамки массива. Хотя, как он может выйти за рамки массива если цикл по определению не может обратится к индексу, больше размера массива.

Решение задачи: «Работа с массивами. Подскажите в чем ошибка.»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace ConsoleApplicationTest {
  5.     public static class Program {
  6.         private static void Main() {
  7.             // Начальные данные.
  8.             const int min = 0;
  9.             const int max = 50;
  10.             const int count = 10;
  11.             const int x = 20;
  12.  
  13.             // Создаём массив из случайных упорядоченных элементов.
  14.             Random r = new Random();
  15.             var array = (from i in Enumerable.Repeat( 0, count )
  16.                          let n = r.Next( min, max )
  17.                          orderby n
  18.                          select n).ToArray();
  19.  
  20.             // Находим элемент с минимальным отклонением от x.
  21.             int result = array
  22.                 .Skip( 1 )
  23.                 .Aggregate(
  24.                     new { d = Math.Abs( array.First() - x ), item = array.First() },
  25.                     ( accum, i ) => Math.Abs( i - x ) < accum.d ? new { d = Math.Abs( i - x ), item = i } : accum,
  26.                     accum => accum.item );
  27.  
  28.             // Выводим результаты.
  29.             foreach ( var i in array ) {
  30.                 Console.WriteLine( i );
  31.             }
  32.             Console.WriteLine( "Result = " + result );
  33.  
  34.             Console.ReadKey();
  35.         }
  36.     }
  37. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы