Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования C# - umotnas.ru o_O
Главная
Поиск по ключевым словам:
Похожие работы
Название работы Кол-во страниц Размер
Конспект лекций по дисциплине «Объектно-ориентированное программирование» 3 374.25kb.
Программа вступительного экзамена по специальности 05. 13. 18 Математическое... 1 113.98kb.
Рабочая программа по дисциплине «Объектно-ориентированное программирование»... 1 129.85kb.
Рабочая программа по курсу «Объектно-ориентированное программирование»... 1 58.66kb.
Объектно-ориентированное программирование 3 568.1kb.
Объектно-ориентированное программирование 6 944.02kb.
Пояснительная записка к курсовому проекту по дисциплине «Объектно-ориентированное... 1 189.09kb.
Курсовой проект предполагает создание проекта на С#, отвечающего... 1 7.82kb.
Объектно-ориентированное программирование на современном фортране 1 288.94kb.
Структура, содержание и методические подходы к преподаванию в области... 1 59.03kb.
Контрольная работа по дисциплине «Объектно-ориентированное программирование» 1 46.12kb.
Вопросы обеспечения балансовой и оперативной надежности энергосистемы 1 80.87kb.
Викторина для любознательных: «Занимательная биология» 1 9.92kb.

Лабораторные работы по курсу Объектно-ориентированное программирование: язык программирования - страница №6/9

Лабораторная работа 3. Варианты второго уровня

Универсальные типы. Классы-коллекции. Методы расширения класса System.Linq.Enumerable

Информация для всех вариантов


Во всех вариантах второго уровня требуется определить универсальный делегат
delegate System.Collections.Generic.KeyValuePair

GenerateElement(int j);

и универсальный класс TestCollections<TKey,TValue>, который содержит закрытые поля следующих типов

System.Collections.Generic.List;

System.Collections.Generic.List ;

System.Collections.Generic.Dictionary ;

System.Collections.Generic.Dictionary;

GenerateElement.


Конкретные значения типовых параметров TKey и TValue зависят от варианта.

В конструкторе класса TestCollections<TKey,TValue> создаются коллекции с заданным числом элементов. Надо сравнить время поиска элемента в коллекциях-списках List и время поиска элемента по ключу и элемента по значению в коллекциях-словарях Dictionary.

Для автоматической генерации элементов коллекций надо определить метод, который принимает один целочисленный параметр типа int и возвращает ссылку на объект типа KeyValuePair. Метод должен инициализировать объекты KeyValuePair так, чтобы соответствие между номером элемента и объектом TKey в паре ключ-значение было взаимно-однозначным.

Метод для автоматической генерации элементов коллекций передается в класс TestCollections через параметр конструктора класса. Для этого в классе TestCollections надо определить конструктор c двумя параметрами, имеющими тип int и GenerateElement. Через целочисленный параметр объектам класса передается число элементов в коллекциях, через экземпляр делегата GenerateElement – метод, который используется для автоматической генерации пары ключ-значение в виде объекта KeyValuePair.

Число элементов в коллекциях пользователь вводит в процессе работы приложения. Если при вводе была допущена ошибка, приложение должно обработать исключение, сообщить об ошибке ввода и повторить прием ввода до тех пор, пока не будет правильно введено целочисленное значение.

Для четырех разных элементов – первого, центрального, последнего и элемента, не входящего в коллекцию, – надо измерить время поиска

элемента в коллекциях List и List с помощью метода Contains;

элемента по ключу в коллекциях Dictionary< TKey, TValue> и Dictionary с помощью метода ContainsKey;

значения элемента в коллекции Dictionary< TKey, TValue > с помощью метода ContainsValue.

Так как статический метод для автоматической генерации элементов должен обеспечивать взаимно-однозначное соответствие между значением целочисленного параметра метода и объектами TKey, его можно использовать как при создании коллекций, так и для генерации элемента для поиска.


Вариант 1. Требования к программе


Определить новые версии классов Exam и Student из лабораторной работы 2.

В класс Exam добавить реализацию интерфейсов

System.IComparable для сравнения объектов типа Exam по названию предмета;

System.Collections.Generic.IComparer для сравнения объектов типа Exam по оценке.

Определить вспомогательный класс, реализующий интерфейс System.Collections.Generic.IComparer, который можно использовать для сравнения объектов типа Exam по дате экзамена.

В новой версии класса Student для списков зачетов и экзаменов использовать типы

System.Collections.Generic.List для списка зачетов;

System.Collections.Generic.List для списка экзаменов.

В новой версии класса Student сохранить все остальные поля, свойства и методы из предыдущей версии класса, внести необходимые исправления в код свойств и методов из-за изменения типов полей для списков.

В классе Student определить методы для сортировки списка экзаменов

по названию предмета;

по оценке;

по дате экзамена.

Определить универсальный делегат


delegate TKey KeySelector(Student st);

Определить универсальный класс StudentCollection, содержащий коллекцию объектов Student, в котором для хранения коллекции используется тип System.Collections.Generic.Dictionary. Типовой параметр TKey универсального класса StudentCollection определяет тип ключа в коллекции Dictionary.

Метод, который используется для вычисления ключа при добавлении элемента Student в коллекцию класса StudentCollection, отвечает делегату KeySelector и передается StudentCollection через параметр единственного конструктора класса.

Класс StudentCollection содержит

закрытое поле типа System.Collections.Generic.Dictionary;

закрытое поле типа KeySelector для хранения экземпляра делегата с методом, вычисляющим ключ для объекта Student;

конструктор c одним параметром типа KeySelector ;

метод void AddDefaults (), c помощью которого можно добавить некоторое число элементов типа Student для инициализации коллекции по умолчанию;

метод void AddStudents ( params Student[] ) для добавления элементов в коллекцию Dictionary;

перегруженную версию виртуального метода string ToString() для формирования строки, содержащей информацию обо всех элементах коллекции Dictionary, в том числе значения всех полей класса Student, включая список зачетов и экзаменов;

метод string ToShortString(), который формирует строку c информацией обо всех элементах коллекции Dictionary, состоящую из значений всех полей, среднего балла, числа зачетов и экзаменов для каждого элемента Student, но без списка зачетов и экзаменов.

В классе StudentCollection определить свойства и методы, выполняющие операции со словарем Dictionary с использованием методов расширения класса System.Linq.Enumerable и статические методы-селекторы, которые необходимы для выполнения соответствующих операций с коллекцией:

свойство типа double (только с методом get), возвращающее максимальное значение среднего балла для элементов Dictionary; если в коллекции нет элементов, свойство возвращает некоторое значение по умолчанию; для поиска максимального значения среднего балла надо использовать метод Max класса System.Linq.Enumerable;

метод IEnumerable>EducationForm(Education value), возвращающий подмножество элементов коллекции Dictionary с заданной формой обучения; для формирования подмножества использовать метод Where класса System.Linq.Enumerable;

свойство типа IEnumerable>> (только с методом get), выполняющее группировку элементов коллекции Dictionary в зависимости от формы обучения студента с помощью метода Group класса System.Linq.Enumerable.

В методе Main()



  1. Создать объект Student и вызвать методы, выполняющие сортировку списка экзаменов List по разным критериям, после каждой сортировки вывести данные объекта. Выполнить сортировку

по названию предмета;

по оценке;

по дате экзамена.

55.Создать объект типа StudentCollection. Добавить в коллекцию несколько разных элементов типа Student и вывести объект StudentCollection.

56.Вызвать методы класса StudentCollection, выполняющие операции с коллекцией-словарем Dictionary, и после каждой операции вывести результат операции. Выполнить

вычисление максимального значения среднего балла для элементов коллекции; вывести максимальное значение;

вызвать метод EducationForm для выбора студентов с заданной формой обучения, вывести результат фильтрации;

вызвать свойство класса, выполняющее группировку элементов коллекции по форме обучения; вывести все группы элементов.

57.Создать объект типа TestCollection
. Ввести число элементов в коллекциях и вызвать метод для поиска первого, центрального, последнего и элемента, не входящего в коллекции. Вывести значения времени поиска для всех четырех случаев.

Вариант 2. Требования к программе


Определить новые версии классов Article, Edition и Magazine из лабораторной работы 2.

В класс Article добавить реализации интерфейсов

System.IComparable для сравнения объектов типа Article по названию статьи;

System.Collections.Generic.IComparer

для сравнения объектов типа Article по фамилии автора.

Определить вспомогательный класс, реализующий интерфейс System.Collections.Generic.IComparer

, который можно использовать для сравнения объектов типа Article по рейтингу статьи.

В новой версии класса Magazine использовать типы

System.Collections.Generic.List для списка редакторов журнала;

System.Collections.Generic.List

для списка статей в журнале.

В новых версиях Edition и Magazine сохранить все остальные поля, свойства и методы из предыдущей версии класса, внести необходимые исправления в код свойств и методов из-за изменения типов полей для списка редакторов журнала и списка статей.

В классе Magazine определить методы для сортировки списка статей

по названию статьи;

по фамилии автора;

по рейтингу статьи.

Определить универсальный делегат


delegate TKey KeySelector(Magazine mg);

Определить универсальный класс MagazineCollection, содержащий коллекцию объектов типа Magazine, в котором для хранения коллекции используется тип System.Collections.Generic.Dictionary. Типовой параметр TKey универсального класса MagazineCollection определяет тип ключа в коллекции Dictionary.

Метод, который используется для вычисления ключа при добавлении элемента Magazine в коллекцию класса MagazineCollection, отвечает делегату KeySelector и передается MagazineCollection через параметр единственного конструктора класса.

Класс MagazineCollection содержит

закрытое поле типа System.Collections.Generic.Dictionary;

закрытое поле типа KeySelector для хранения экземпляра делегата с методом, вычисляющим ключ для объекта Magazine;

конструктор c одним параметром типа KeySelector ;

метод void AddDefaults(), c помощью которого можно добавить некоторое число элементов типа Magazine для инициализации коллекции по умолчанию;

метод void AddMagazines ( params Magazine[] ) для добавления элементов в коллекцию Dictionary;

перегруженную версию виртуального метода string ToString() для формирования строки, содержащей информацию обо всех элементах коллекции Dictionary, в том числе значения всех полей, включая список редакторов издания и список статей в журнале для каждого элемента Magazine;

метод string ToShortString(), который формирует строку с информацией обо всех элементах коллекции Dictionary, содержащую значения всех полей, значение среднего рейтинга статей, число редакторов издания и число статей в журнале для каждого элемента Magazine, но без списков редакторов и статей.

В классе MagazineCollection<TKey> определить свойства и методы, выполняющие операции со словарем Dictionary с использованием методов расширения класса System.Linq.Enumerable и статические методы-селекторы, которые необходимы для выполнения соответствующих операций с коллекцией:

свойство типа double (только с методом get), возвращающее максимальное значение среднего рейтинга статей для элементов коллекции; если в коллекции нет элементов, свойство возвращает некоторое значение по умолчанию; для поиска максимального значения среднего рейтинга статей надо использовать метод Max класса System.Linq.Enumerable;

метод IEnumerable>FrequencyGroup(Frequency value), возвращающий подмножество элементов коллекции Dictionary с заданной периодичностью выхода журнала; для формирования подмножества использовать метод Where класса System.Linq.Enumerable;

свойство типа IEnumerable>> (только с методом get), выполняющее группировку элементов коллекции Dictionary в зависимости от периодичности выхода журнала с помощью метода Group класса System.Linq.Enumerable.

В методе Main()



  1. Создать объект Magazine и вызвать методы, выполняющие сортировку списка List
    статей в журнале по разным критериям, после каждой сортировки вывести данные объекта. Выполнить сортировку

по названию статьи;

по фамилии автора;

по рейтингу статьи.

58.Создать объект MagazineCollection. Добавить в коллекцию несколько разных элементов типа Magazine и вывести объект MagazineCollection.

59.Вызвать методы класса MagazineCollection, выполняющие операции с коллекцией-словарем Dictionary, и после каждой операции вывести результат операции. Выполнить

вычисление максимального значения среднего рейтинга статей для элементов коллекции;

вызвать метод FrequencyGroup для выбора журналов с заданной периодичностью выхода;

вызвать свойство класса, выполняющее группировку элементов коллекции по периодичности выхода; вывести все группы элементов.

60.Создать объект типа TestCollection. Ввести число элементов в коллекциях и вызвать метод для поиска первого, центрального, последнего и элемента, не входящего в коллекции. Вывести значения времени поиска для всех четырех случаев.

<< предыдущая страница   следующая страница >>