Поиск длины отрезка и количество таких отрезков - C#

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

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

Добрый день! Затупил совсем с задачей. Вот условие:
Файл in.txt cодержит корректные вещественные координаты отрезков на плоскости (по одному отрезку в строке) в формате: (x1;y1) (x2;y2) 1 Создать список вида (len; num) где len – длина отрезка, округлённая до целого значения, а num – количество отрезков длины len. 2) Отсортировать список по убыванию num. Пример файла in.txt: (0 ; 0) ( 2,5; 0) ( 0;1) ( 0; 2 ) (-3,0; 20,1e-1) (-2;2) Вывод: 1;2 3;1 Замечания к задаче 2 – Информационный класс, как обычно, описать в отдельном файле. Считывание файла данных и необходимые действия реализовать в методе Main() приложения. – Строку разобрать методом split( ) через регулярное выражение. Формат строки (неформально): \s*(\s*вещ.число\s*;\s*вещ.число\s*)\s*(\s*вещ.число\s*;\s*вещ.число\s*)\s* Вещественное число во входной строке правильное. Пары скобок и точка с запятой между числами гарантированно имеются. – Для поиска элемента в коллекции использовать метод BinarySearch( ) коллекции. – Для корректной работы BinarySearch() нужно, чтобы список всегда был отсортирован. Возвращаемое значение в случае неудачного поиска может быть использовано для получения индекса, куда нужно вставить новый элемент с сохранением упорядоченности массива. – BynarySearch() использует IComparable< >, а Sort() – IComparer<Segment>. Это позволяет в одном классе иметь два метода сравнения: один по длине отрезка (нужен для поиска BynarySearch()), а второй – по количеству (для сортировки перед выводом). – Длина отрезка = sqrt((x1– x2)2 + (y1–y2)2) – чтобы половинные значения округлялись к большему, нужно вызывать Math.Round(…,MidpointRounding.AwayFromZero);
Я не могу саму идею понять. Получается я создаю List и перед вводом нового значения бинарным поиском сравниваю его с имеющимися, если такого нету то он сам его вставляет в нужное место? А как тогда происходит изменение параметра num, если такое значение уже есть? И что такое IComparer<Segment>, а вернее Segment? Это от балды название или стандартное. В MSDN ничего такого не нашёл.

Решение задачи: «Поиск длины отрезка и количество таких отрезков»

textual
Листинг программы
  1. class Segment : IComparer<Segment>, IComparable<Segment>
  2. {
  3.     public int Length; // Округленная длина
  4.     public int Count;  // Число отрезков
  5.  
  6.     public Segment(double Length, int Count = 0)
  7.     {
  8.         this.Length = (int)Math.Round(Length);
  9.         this.Count = Count;
  10.     }
  11.  
  12.     public override string ToString()
  13.     {
  14.         return String.Format("Length: {0} Count: {1}", Length, Count);
  15.     }
  16.  
  17.     // Предикат для сортировки по убыванию длин отрезков
  18.     public int Compare(Segment x, Segment y)
  19.     {
  20.         return (y.Length.CompareTo(x.Length));
  21.     }
  22.  
  23.     // Предикат для сортировки по убаванию числа одинаковых отрезков
  24.     public int CompareTo(Segment other)
  25.     {
  26.         if (other == null) return 1;
  27.         return other.Count.CompareTo(this.Count);
  28.     }
  29. }

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


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

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

10   голосов , оценка 4.3 из 5

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

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

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