Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Универсальные коллекции языка С#. Учебное пособие
.pdf
словарь, инициализировать его элементами существующего сортированного словаря dictionary, при этом в новом словаре поменять метод
сортировки на comparer. Для примера использован пользовательский
класс Country, тот же, что и в предыдущем примере, и добавлен класс
CountryCompare: IComparer<Country>, реализующий новый метод
сравнения Compare(Country x, Country y). В примере создается сортированный словарь SortedDictionary<Country, int> с ключом типа Coun-
try и значением типа int и инициализируется
тремя элементами, затем
используются метод Add и индексатор для добавления элементов. Затем элементы словаря выводятся на консоль методом Print. Создается
новый сортированный словарь countries1 из элементов сортированного
словаря countries, с новым методом сортировки.
Показано, как просмотреть ключи и значения в словаре, а также,
как просмотреть только ключи и только значения с помощью свойства
Keys и cвойства Values.
publicclassCountry:IComparable<Country>
{
publicstringContinent{get;}
publicstringName{get;}
publicCountry(stringcontinent,stringname)
{
Continent=continent;
Name=name;
}
publicoverridestringToString()
{
return$"Континент:{Continent,10},\tстрана:{Name,10}";
}
publicintCompareTo(Countrycountry)
{
if(Continent==country.Continent&Name==country.Name)
return0;
if((Continent.CompareTo(country.Continent)<0)|
(Continent==country.Continent&Name.CompareTo(country.Name)<0))
return‐1;
return1;
}
}
publicclassCountryCompare:IComparer<Country>
{
91

publicintCompare(Countryx,Countryy)
{
if(x.Continent==y.Continent&x.Name==y.Name)
return0;
if((x.Name.CompareTo(y.Name)<0)|
(x.Name==y.Name&x.Continent.CompareTo(y.Continent)<0))
return‐1;
return1;
}
}
usingSystem;
usingSystem.Collections.Generic;
namespaceExample_3
{
classProgram
{
staticvoidMain(string[]args)
{
//Создаемновыйсортированныйсловарьцелыхзначений,
//сключом,которыйявляетсяобъектомтипаCountry.
//Инициируемеготремязначениями.
SortedDictionary<Country,int>countries=
newSortedDictionary<Country,int>(){
{newCountry("с.Америка","США"),330000},
{newCountry("с.Америка","Канада"),34346},
{newCountry("с.Америка","Мексика"),111212
{newCountry("Африка","Ангола"),25021}
};
//Дабавляемновыеэлементы.
countries.Add(newCountry("Европа","Франция"),63929);
countries.Add(newCountry("Европа","Германия"),80780);
countries.Add(newCountry("Африка","Амбазония"),3521);
countries[newCountry("Африка","Алжир")]=39666;
//Выводимэлементысловарянаконсоль.
Print(countries);
//Можноскопироватьэлементысуществующегословарявновый
//приэтомизменивправиласортировки.
SortedDictionary<Country,int>countries1=
newSortedDictionary<Country,int>(countries,newCountryCompare());
Print(countries1);
//ДляполучениятолькозначенийиспользуйтесвойствоValues.
SortedDictionary<Country,int>.ValueCollectionvalueColl=
},
92

countries1.Values;
//ЭлементыValueCollectionимеюттип,
//которыйописандлязначенийсловаря.
Console.WriteLine();
foreach(intvinvalueColl)
{
Console.WriteLine($"Значение={v}");
}
//ДляполучениятолькоключейиспользуйтесвойствоKeys.
SortedDictionary<Country,int>.KeyCollectionkeyColl=
countries1.Keys;
//ЭлементыKeyCollectionимеюттип,которыйописандляключейсловаря.
Console.WriteLine();
foreach(CountrykinkeyColl)
{
Console.WriteLine($"Ключ={k}");
}
}
//Методдлявыводасловарянаконсоль
staticvoidPrint(IEnumerable<KeyValuePair<Country,int>>col)
{
Console.WriteLine();
foreach(varelincol)
Console.WriteLine(el.ToString());
Console.WriteLine();
}
}
}
Результатработыпримера:
[Континент:Африка,страна:Алжир,39666]
[Континент:Африка,страна:Амбазония,3521]
[Континент:Африка,страна:Ангола,25021]
[Континент:Европа,страна:Германия,80780]
[Континент:Европа,страна:Франция,63929]
[Континент:с.Америка,страна:Канада,34346]
[Континент:с.Америка,страна:Мексика,111212]
[Континент:с.Америка,страна:США,330000]
[Континент:Африка,страна:Алжир,39666]
[Континент:Африка,страна:Амбазония,3521]
[Континент:Африка,страна:Ангола,25021]
.
93

[Континент:Европа,страна:Германия,80780]
[Континент:с.Америка,страна:Канада,34346]
[Континент:с.Америка,страна:Мексика,111212]
[Континент:с.Америка,страна:США,330000]
[Континент:Европа,страна:Франция,63929]
Значение=39666
Значение=3521
Значение=25021
Значение=80780
Значение=34346
Значение=111212
Значение=
Значение=63929
Ключ=Континент:Африка,страна:Алжир
Ключ=Континент:Африка,страна:Амбазония
Ключ=Континент:Африка,страна:Ангола
Ключ=Континент:Европа,страна:Германия
Ключ=Континент:с.Америка,страна:Канада
Ключ=Континент:с.Америка,страна:Мексика
Ключ=Континент:с.Америка,страна:США
Ключ=Континент:Европа,страна:Франция
330000
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. В чем особенности коллекции List<>?
2. В чем особенности коллекции LinkedList<>?
3. В чем особенности коллекции SortedListList<>?
4. В чем особенности коллекции HashSetSet<>?
5. В чем особенности коллекции SortedSet<>?
6. В чем особенности коллекции Dictionary<>?
7. В чем особенности коллекции SortedDictionary<>?
94

ПРИЛОЖЕНИЕ
РАСЧЕТНО-ГРАФИЧЕСКОЕ ЗАДАНИЕ
Цель: сформировать практические навыки реализации абстрактных
типов данных с помощью коллекций C#.
ЗАДАНИЕ. ВАРИАНТЫ ВЫПОЛНЕНИЯ
1. Реализовать абстрактный тип данных «Полином» в соответствии
с приведенной ниже спецификацией и вариантом задания.
2. Протестировать каждую операцию, определенную на типе дан-
ных.
3. Варианты задания приведены в таблице ниже.
Номер варианта Отношение Кооллекция
1 Наследование LinkedList<T>
2 Наследование SortedList<TKeyTValue>
3 Наследование List<T>
4 Наследование HashSet<T>
5 Наследование SortedSet<T>
6 Наследование Dictionary<TKeyTValue>
7 Наследование SortedDictionary<TKeyTValue>
8 Композиция LinkedList<T>
9 Композиция SortedList<TKeyTValue>
10 Композиция List<T>
11 Композиция HashSet<T>
12 Композиция SortedSet<T>
13 Композиция Dictionary<TKeyTValue>
14 Композиция SortedDictionary<TKeyTValue>
Спецификация абстрактного типа данных «Полином».
ADTPoly
Данные
Полиномы Poly – это неизменяемые полиномы с целыми коэффи-
циентами.
95

Операции
–
–
Операции могут вызываться только объектом «Полином» (тип
Poly), указатель на который передается в них по умолчанию. При опи-
сании операций этот объект в разделе «Вход» не указывается.
Описание операций на ADT Poly
Наименование
операции
Poly Конструктор
Начальные
значения
Процесс Создает одночленный полином с коэффициентом (с) и сте-
Выход Указатель на созданный полином
Постусловия Нет
Degree Степень
Вход Нет
Предусловия Нет
Процесс Отыскивает степень n полинома, т. е. наибольшую сте-
Выход n
Постусловия Нет
Coef Коэффициент
Вход n
Предусловия Полином –не нулевой
Процесс Отыскивает коэффициент (c) при члене полинома со сте-
Коэффициент (с) и степень (n) одночленного полинома
пенью (n), или ноль-полином, если коэффициент (с) равен
0 и возвращает указатель на него.
Например:
Конструктор(6,3) = 6x^3
Конструктор(3,0) = 3
Конструктор() = 0
пень при ненулевом коэффициенте (c). Степень нулевого
полинома равна 0.
Например:
a = (x^2+1), a. Степень = 2
a = (17), a. Степень = 0
целое число –степень полинома
целое число –степень полинома
пенью n (c*x^n). Возвращает коэффициент (c) найденного
члена или 0, если n больше степени полинома
Описание
96

Продолжение таблицы
Наименование
операции
Описание
Например:
p = (x^3+2x+1), p.Coeff (4) = 0
p = (x^3+2x+1), p.Coeff (1) = 2
Выход Целое число
Постусловия Нет
Очистить (Clear)
Вход q – полином
Предусловия Нет
Процесс Удаляет члены полинома
Выход Полином
Постусловия q – нуль-полином
Add Сложить
Вход q – полином
Предусловия Нет
Процесс Создает полином, являющийся результатом сложения
полинома с полиномом q, и возвращает его
Выход Полином
Постусловия Нет
Multil Умножить
Вход q – полином
Предусловия Нет
Процесс Создает полином, являющийся результатом умножения
полинома на полином q, и возвращает его
Выход Полином
Постусловия Нет
Subject Вычесть
Вход q – полином
Предусловия Нет
Процесс Создает полином, являющийся результатом вычитания из
полинома полинома q, и возвращает его
Выход Полином
Постусловия Нет
97

Продолжение таблицы
–
–
–
Наименование
операции
Описание
Minus Минус
Вход Нет
Предусловия Нет
Процесс Создает полином, являющийся разностью ноль-полинома
и полинома, и возвращает его
Выход Полином
Постусловия Нет
Equel Равно
Вход q
полином
Предусловия Нет
Процесс Сравнивает полином с полиномом q на равенство. Воз-
вращает значение True, если полиномы равны, т. е. имеют
одинаковые коэффициенты при соответствующих членах,
и значение False
в противном случае
Выход Булевское значение
Постусловия Нет
Dif Дифференцировать
Вход Нет
Предусловия Нет
Процесс Создает полином, являющийся производной полинома, и
возвращает его.
Например:
3
a= (x
+7x+5), a. Дифференцировать = 3x2+7
Выход Полином
Постусловия Нет
Eval Вычислить
Вход x
действительное число
Предусловия Нет
Процесс Вычисляет значение полинома в точке x и возвращает
его.
Например:
2
a= (x
+3x), а. Вычислить (2) = 10
Выход Действительное число
Постусловия Нет
98

Окончание таблицы
–
Наименование
операции
Items[] Элемент
Вход i
Предусловия Нет
Процесс Обеспечивает доступ к члену полинома с индексом i для
Выход Коэффициент –целое число, степень –целое число
Постусловия Полином не модифицируется
целое число –номер члена полинома
чтения его коэффициента (c) и степени (n) так, что если
изменять i от 0 до количества членов в полиноме минус
один, то можно просмотреть все члены полинома
Описание
endTpoly
РЕКОМЕНДАЦИИ К ВЫПОЛНЕНИЮ
1. Тип данных реализовать, используя коллекцию С# в соответ-
ствии с вариантом.
Выбрав коллекцию, вы можете реализовать полином в двух вари-
антах, представленных ниже на рисунке.
2. Полином можно рассматривать как список одночленных по-
линомов, поэтому для реализации полинома полезно реализовать
99

абстрактный вспомогательный тип данных одночленный полином.
Спецификация для него приведена ниже.
Спецификация абстрактного типа данных «Одночлен»
ADTMember
Данные
Одночлены Member – это изменяемые одночленные полиномы с
целыми коэффициентами. Коэффициент и степень хранятся в полях
целого типа Coeff и Degree соответственно.
Операции
Операции могут вызываться только объектом «одночлен» (тип
Member), указатель на который this передается в
них по умолчанию.
При описании операций этот объект в разделе «Вход» не указывается.
Описание операций ADT Member.
Наименование
операции
Member
Начальные
значения
Процесс Инициализирует поля одночлена коэффициентом (с)
Выход Нет
Постусловия Нет
Degree
Вход Нет
Предусловия Нет
Процесс Возвращает степень n одночленного полинома (содер-
Конструктор
Коэффициент (с) и степень (n) одночленного полинома
и степенью (n) или ноль-полином, если коэффициент (с)
равен 0.
Например:
Member(6,3) = 6x^3
Member (3,0) = 3
Member () = 0
Взять
жимое поля Degree). Степень нулевого полинома равна 0.
Например:
a = (1x^2), a. Степень = 2
Описание
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
