Рис. 22. Преобразование перечислимого типа
В примере вместо строки
directString=Convert.ToString(myDirect);
можно было бы написать
directString=myDirect.ToString();
Все перечисления происходят от единого базового класса System.Enum. Рассмотрим его методы.
Метод GetUnderlyingType() позволяет получить информацию о том, какой тип данных используется для представления числовых значений элементов перечисления:
enum EmpType
{
Manager = 10,
Grunt = 20,
Contactor = 30,
VP = 40
} …..
Console.WriteLine(Enum.GetUnderlyingType(typeof(EmpType));
Метод Format() позволяет получить имена элементов перечисления по их числовым значениям
EmpType fred;
fred=EnumType.VP;
…..
Console.WriteLine(Enum.Format(typeof(EmpType),fred,"G"));
//будет выведено VP
Console.WriteLine(Enum.Format(typeof(EmpType),fred,"d"));
//будет выведено 40
Свойство IsDefined позволяет определить, является ли выбранная символьная строка элементом указанного перечисления
If (Enum.IsDefined(typeof(EmpType),"SalesPerson"))
Console.WriteLine("Да");
else
Console.WriteLine("Нет");
Для преобразования типа string в перечислимый существует специальный метод Enum.Parse():
(<перечислимыйТип>)Enum.Parse(typeof(<перечислимыйТип>), <значениеСтроки>);
Например:
string myString = “norden”;
ort myDirect = (ort)Enum.Parse(typeof(ort), myString);
Естественно, значение строки должно совпадать со значением из перечисления.
Структуры являются аналогом классов, но в отличие от них являются типом значения. То есть, значения типа структура передаются по значению, а не по ссылке.
Для описания структур используется ключевое слово struct
struct <имяТипа>
{
<объявлениеЧлена>
}
Объявление каждого члена имеет следующий вид
<доступ> <тип> <имя>;
Чтобы код, обращающийся к структуре, имел доступ к ее полям, в разделе <доступ> следует писать ключевое слово public например,
struct route
{
public ort direct;
public double dist;
}
После описания типа route можно объявлять переменные этого типа
route myRoute1, myRoute2;
Для получения доступа к отдельным полям этой переменной используется точка:
myRoute1.direct = ort.norden;
myRoute1.dist = 5.67;
Пример:
using System;
namespace ConsoleApplication3
{
enum ort : byte
{
norden=1,
suden,
osten,
westen
}
struct route
{
public ort direct;
public double dist;
}
class Class1
{
static void Main(string[] args)
{
route myRoute; int myDirect =-1; double myDist;
Console.WriteLine("1) Norden\n2) Suden\n3) Osten\n4) Westen");
do
{
Console.WriteLine("Выбери направление");
myDirect=Convert.ToInt32(Console.ReadLine());
}
while( (myDirect <1) || (myDirect>4));
Console.WriteLine("Введите расстояние");
myDist=Convert.ToDouble(Console.ReadLine());
myRoute.dist=myDist;
myRoute.direct=(ort)myDirect;
Console.WriteLine("Мой маршрут направлен на {0} и его" +
" протяженность {1} км", myRoute.direct, myRoute.dist);
} } }
Рис. 23. Результаты обработки структуры
1. Как объявить перечисление?
2. Чем простая переменная от перечисления?
3. Какие типы можно использовать в качестве базового для перечисления?
4. Что представляет собой структура?
5. Как обратиться к полю структуры?
6. Является ли структура ссылочным типом?
7. Может ли членом структуры быть функция?
Изучить теоретический материал, ответить на контрольные вопросы, составить алгоритм и программу по указанному варианту задания. Представить отчет по выполненному заданию.
Вариант 1
Описать структуру с именем BOOK, содержащую следующие поля:
- автор;
- название книги;
- жанр (тип – перечисление);
- количество страниц;
- цена;
- категория (тип – перечисление);
- год издания.
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из 12 структур типа BOOK;
- сортировку записей по жанру;
- сортировку по цене;
- вывод записей в обратном (сортировке) порядке;
- удаление из массива записей заданной категории;
- вывод на дисплей всех книг, которые были изданы до 2000 года. Если таковых нет, вывести соответствующее сообщение.
Вариант 2
Описать структуру с именем FILM, содержащую следующие поля:
- название;
- режиссер;
- жанр (перечисление);
- продолжительность;
- носитель (тип – перечисление);
- фамилии актеров (тип - массив);
- сборы в 5 странах (тип – массив).
Сведения о режиссере в свою очередь представляет структуру с именем AUTOR со следующими полями:
- фамилия;
- страна, где работает;
- страна, где родился;
- возраст;
- список наиболее известных фильмов.
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из десяти элементов типа FILM;
- вывод на экран информации о режиссере фильма, название которой введено с клавиатуры;
- сортировку по названию фильма;
- вывод фильмов заданного жанра;
- создание нового массива фильмов, имеющих самые низкие сборы;
- вывод фильмов, где снимался конкретный артист.
Вариант 3
Описать структуру с именем CKLAD, содержащую следующие поля:
- название товара;
- категория товара (тип – перечисление);
- оптовая цена;
- торговая наценка в процентах (тип – перечисление);
- объем партии товара;
- дата поступления товара на склад (тип – структура).
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из 12 структур типа CKLAD;
- сортировку записей по категориям;
- сортировку записей по объему партий;
- формирование нового массива заданной категории;
- вывод на дисплей информации о товарах, которые поступили на склад за последние 30 дней. Если таковых нет, вывести соответствующее сообщение.
Вариант 4
Описать структуру с именем AVTO, содержащую следующие поля:
- сведения об автомобиле;
- фамилии владельцев (тип – массив).
Сведения об автомобиле в свою очередь представляет структуру с именем AVTOMOBIL со следующими полями:
- марка (тип – перечисление);
- номер;
- год выпуска;
- цена.
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из 10 элементов типа AVTO;
- сортировку по марке;
- сортировку по количеству владельцев;
- формирование нового массива автомобилей, имеющих только 1 владельца;
- вывод на экран информации об автомобилях, цена которых не более 70000;
- вывести на экран фамилии владельцев, номера машин которых содержат в себе повторяющиеся цифры.
Если таковых нет, выдать на дисплей соответствующее сообщение.
Вариант 5
Описать структуру с именем STUDENT, содержащую следующие поля:
- фамилия и инициалы;
- номер зачетной книжки;
- факультет (тип – перечисление);
- номер группы;
- адрес;
- успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из 12 структур типа STUDENT;
- сортировку записей по факультетам;
- сортировку по группам;
- формирование нового массива – отличников;
- удаление из исходного массива двоечников;
- вывод студентов, имеющих оценки 3 и 4. Если таковых нет, вывести соответствующее сообщение
Вариант 6
Описать структуру с именем STRANA, содержащую следующие поля:
- сведения о стране (тип – структура);
- континент (тип – перечисление);
- число жителей;
- площадь страны.
Сведения о стране в свою очередь представляет структуру с именем SVED со следующими полями:
- название страны;
- государственный язык (тип - массив);
- столица;
- денежная единица.
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из десяти элементов типа STRANA;
- сортировку по плотности населения;
- формирование нового массива из стран, где более 1 гос. языков;
- вывод на экран информации о стране, название которой введено с клавиатуры.
Вариант 7
Описать структуру с именем NОТЕ, содержащую следующие поля:
- фамилия, имя;
- пол (тип – перечисление);
- номер телефона;
- категория знакомства (тип – перечисления)
- день рождения (структура).
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из 14 элементов типа NOTE;
- сортировку записей по датам дней рождения;
- сортировку по номеру телефона;
- создание нового массива родственников;
- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры.
Если такого нет, выдать па дисплей соответствующее сообщение.
Вариант 8
Описать структуру с именем PRODUCT, содержащую следующие поля:
- название товара;
- категория (тип – перечисление);
- оптовая цена;
- торговая наценка в процентах;
- объем партии товара;
- дата поступления товара на склад (тип – структура).
Написать программу, выполняющую следующие действия:
- инициализацию данных массива, состоящего из 10 структур PRODUCT;
- отсортировать массив по возрастанию даты поступления товаров на склад;
- вывести массив в обратном порядке;
- удалить записи из массива по заданной категории;
- вывод на дисплей информации о товарах, которые поступили на склад за последние 5 дней. Если таковых нет, вывести соответствующее сообщение.
Вариант 9
Описать структуру с именем ELEMENT, содержащую следующие поля:
- порядковый номер;
- название элемента;
- группа (тип – перечисление);
- атомный вес.
Написать программу, выполняющую следующие действия:
- инициализацию данных в массиве, состоящем из 10 структур типа ELEMENT;
- сортировку записей по возрастанию порядкового атомного веса;
- вывод записей в обратном порядке;
- создание нового массива записей по заданной группе;
- вывод на дисплей всех элементов и их атомного веса, порядковые номера которых кратны двум.
Если элементов нет, вывести соответствующее сообщение.
Вариант 10
Описать структуру с именем AIRPORT, содержащую следующие поля:
- название пункта назначения рейса;
- номер рейса;
- класс (тип – перечисление);
- время отправления;
- тип самолета (тип – перечисление);
- промежуточные посадки (тип - массив).
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из десяти элементов типа AIROPORT;
- отсортировать записи по возрастанию времени отправления;
- создать новый массив для рейсов, которые не делают посадок в промежуточных пунктах;
- вывод на экран рейсов, отправляющихся в пункт назначения, название которого совпало с названием, введенным с клавиатуры. Если таких рейсов нет, выдать на дисплей соответствующее сообщение.
Вариант 11
Описать структуру с именем PAZIENT, содержащую следующие поля:
- фамилия;
- пол (тип – перечисление);
- дата рождения (тип – структура);
- номер медицинской карты;
- группа крови (тип – перечисление);
- даты обращения (тип – массив структур);
- образование (тип – перечисление).
Написать программу, выполняющую следующие действия:
- инициализацию данных в массив, состоящий из 7 элементов типа PAZIENT;
- сортировку записей по году рождения;
- сортировку записей по номерам карт;
- вывод в обратном порядке;
- удаление повторяющихся записей,
- формирование нового массива записей, для которых образование – заданное значение;
-вывод на экран фамилий пациентов и номеров медицинских карт, группа крови которых 1 и 2. Если таких пациентов нет, выдать на дисплей соответствующее сообщение.
Вариант 12
Описать структуру с именем STUDENT, содержащую следующие поля:
- фамилия и инициалы;
- факультет (тип – перечисление);
- номер группы;
- успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
- заполнение данными массива, состоящего из восьми структур типа STUDENT;
- упорядочение записей по возрастанию факультета и номера группы;
- вывод записей в обратном порядке;
- вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 3 и 4. Если таких записей нет, то вывести соответствующее сообщение
Вариант 13
Описать структуру с именем GOSUDARSTVO, содержащую следующие поля:
- сведения о стране;
- число жителей;
- предпочтения по валюте (тип – перечисление);
- курс национальной валюты относительно предпочитаемой.
Сведения о стране в свою очередь представляет структуру с именем STRANA со следующими полями:
- название страны;
- государственные языки (массив);
- столица;
- денежная единица.
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти элементов типа GOSUDARSTVO;
- вывод на экран информации о стране, название которой введено с клавиатуры;
- ввести с клавиатуры денежную сумму и для каждой страны перевести в долларовый эквивалент.