Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created October 7, 2025 11:55
Show Gist options
  • Save sunmeat/d2d81dd88a532b4a4c0db193546f86ad to your computer and use it in GitHub Desktop.
Save sunmeat/d2d81dd88a532b4a4c0db193546f86ad to your computer and use it in GitHub Desktop.
ДЗ на інтерфейси IComparer, IEnumerator та IEnumerable

Робота з інтерфейсами IComparer та IEnumerable

Мета

Ознайомитися з інтерфейсами IComparer<T> та IEnumerable<T> у C#, реалізувати сортування колекцій та ітерацію елементів. Розвинути навички створення вкладених класів-компараторів та реалізації ітераторів для власних типів.

1. Реалізація компараторів у класі Student

Додайте до класу Student вкладені (nested) класи, які реалізують інтерфейс IComparer<Student>:

  • AverageGradeComparer: сортує студентів за зростанням середнього балу (ascending). У разі рівних балів — за алфавітом ПІБ.
  • FullNameComparer: сортує студентів за ПІБ (прізвище + ім'я) в алфавітному порядку (case-insensitive). У разі однакового ПІБ — за середнім балом (descending).

Врахуйте:

  • Обробку null-значень у Compare (кидайте ArgumentNullException для безпеки).
  • Використовуйте string.Compare для текстових порівнянь.

2. Реалізація ітератора в класі Group

Клас Group повинен:

  • Реалізувати узагальнений інтерфейс IEnumerable<Student> (рекомендовано; альтернативно — duck typing з методом GetEnumerator()).
  • Надати можливість ітерації студентів за допомогою foreach.
  • Реалізувати вкладений клас GroupEnumerator, який успадковує IEnumerator<Student> (з методами MoveNext, Reset, Dispose та властивістю Current).
  • Додати неявну реалізацію неузагальненого IEnumerable.GetEnumerator() для сумісності.

Врахуйте:

  • Початковий стан енумератора (index = -1).
  • Правильну логіку MoveNext для обходу колекції без виходу за межі.

3. Тестування в методі Main

  • Створіть 3–7 об'єктів Student з різними значеннями (бали випадкові).
  • Додайте їх до екземпляра Group.
  • Виконайте сортування колекції групи:
    • За середнім балом (використовуйте Array.Sort або List.Sort з AverageGradeComparer).
    • За ПІБ (з FullNameComparer).
  • Виведіть результати сортувань у консоль (формат: "Ім'я Прізвище: середній бал = X").
  • Перевірте ітерацію: використайте foreach для виведення всіх студентів групи (до та після сортувань).

Очікувані результати

  • Консольний вивід демонструє правильне сортування та ітерацію без помилок компіляції/виконання.
  • Код компілюється та виконується в .NET 9.
  • Демонстрація різниці між компараторами та ітератором.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment