ГлавнаяПрограммирование → Решение задач, Программирование на языках высокого уровня, программирование C# Коллекции/Массивы.

Решение задач, Программирование на языках высокого уровня, программирование C# Коллекции/Массивы.

Задание

Общие требования:

1)  Код приложения должен быть отформатирован в едином стиле и соответствовать соглашению об именовании Microsoft.

Задания

Максимальное количество баллов за всё домашнее задание – 5:

  • 4.5 в сумме за выполнение всех заданий
  • 0.5 за стиль кода и соответствие правилам именования Microsoft.

 

Задание 1:

1 балл

В кругу стоят N человек, пронумерованных от 1 до N. При ведении счета по кругу вычеркивается каждый второй человек, пока не останется один.

Составить программу, моделирующую данный процесс двумя способами:

  1. используя класс List<T>
  2. используя класс LinkedList<T>

При использовании LinkedList<T> запрещается обращаться к элементам напрямую по индексу. Для List<T> и LinkedList<T> реализовать общий метод, удаляющий ненужные элементы, который может работать с объектами обоих типов.

Задание 2:

2 балла

На базе обычного массива (коллекции .NET не использовать) реализовать свой собственный класс DynamicArray, представляющий собой динамический массив. Элементами данного массива могут быть только объекты, имеющие конструктор без параметров. Память под содержимое массива должна выделяться по мере необходимости (описано ниже).

  • Ёмкость массива – количество элементов, под которые уже выделена память
  • Длина массива – количество элеметов, фактически содержащихся в массиве.

Класс должен содержать:

  1. Конструктор без параметров (создается массив емкостью 8 элементов)
  2. Конструктор с 1 целочисленным параметром (создается массив заданной емкости)
  3. Конструктор, который в качестве параметра принимает массив (его содержимое копируется)
  4. Метод Add, добавляющий в конец массива один элемент. При нехватке места для добавления элемента емкость массива должна увеличиваться в 2 раза
  5. Метод AddRange, добавляющий в конец массива содержимое переданного массива. Обратите внимание на то, что метод должен изменять емкость текущего массива только один раз, вне зависимости от числа элементов добавляемой коллекции
  6. Метод Remove, удаляющий из коллекции указанный элемент. Метод должен возвращать true, если удаление прошло успешно и false в противном случае. При удалении элементов емкость массива не должна уменьшаться
  7. Метод Insert, позволяющий добавить элемент в произвольную позицию массива (обратите внимание, может потребоваться расширить массив). При выходе за границу массива должно генерироваться исключение ArgumentOutOfRangeException
  8. Свойство Length – получение длины массива
  9. Свойство Capacity – получение ёмкости массива
  10. Индексатор, позволяющий работать с элементом с указанным номером. При выходе за границу массива должно генерироваться исключение ArgumentOutOfRangeException
  11. Метод Sort, который принимает делегат описывающий условие сравнения элементов

Задание 3:

1 балл

Требуется написать программу, которая делит игроков на команды. Каждый игрок имеет имя, фамилию и показатель его мастерства. Алгоритм деления игроков на команды может быть выбран любой по договоренности с ментором, желательно такой, чтобы среднее мастерство не сильно отличалось между командами.

Пример

Разделить 6 игроков по парам для игры в настольный теннис:

Имя

Мастерство (макс. 10)

Игрок 1

8

Игрок 2

6

Игрок 3

5

Игрок 4

4

Игрок 5

9

Игрок 6

7

Ожидаемые пары: 5 (9) + 4 (4), 1 (8) + 3 (5), 2 (6) + 6 (7)

 

Для хранения игроков нужно использовать класс DynamicArray из предыдущего задания. Добавьте в него метод Split, который будет в качестве параметра принимать делегат с критерием, по которому нужно делить игроков. Если игроков нельзя поделить на равные по количеству команды, программа должна сообщить об этом.

Задание 4:

0.5 балла

Дополните функционал программы из задания 3 таким образом, чтобы она могла случайным образом составить пары для «Секретного Санты» из любого количества участников.

Детали товара
  • 350 руб.
  • Лабораторная работа
  • C#
  • Нет
  • Visual Studio
  • Есть
Обратите внимание

На нашем сайте есть работы, которые включают в себя несколько задач. Если Вам необходима только одна или несколько задач из всей работы, то вам нет необходимости покупать работу целиком. Мы можем продать задачи по отдельности. Для этого обратитесь к нам удобным для Вас способом.

Также если вдруг какая-то работа будет не соответствовать описанию или вы найдете ошибку, то мы всегда готовы исправить проблему в обговорённые с Вами сроки.