Урок № 6. C# Теория
- Перечисление — это структура, которая позволяет создать переменную с фиксированным набором возможных значений. Наиболее распространенным примером является использование перечисления для определения дня недели. Есть только семь возможных значений для дней недели, и вы можете быть достаточно уверены, что эти значения никогда не изменятся.
- Необходимо определять перечисления непосредственно в пространстве имен, чтобы все классы в этом пространстве имен имели к нему доступ, если это необходимо.
- По умолчанию значения перечисления начинаются с
0
, и каждый последующий элемент увеличивается на значение 1. - Чтобы создать перечисление, вы объявляете его в файле кода со следующим синтаксисом, который демонстрирует создание перечисления с именем Day, содержащего дни недели:
enum Day { Воскресенье, Понедельник, Вторник, Среда, Четверг, Пятница, Суббота }; |
По умолчанию значения перечисления начинаются с 0
, и каждый последующий элемент увеличивается на значение 1:
Воскресенье = 0 Понедельник = 1 Вторник = 2 и т. д.
День перечисления { Воскресенье = 1, Понедельник, Вторник, Среда, Четверг, Пятница, Суббота }; |
enum
используется для указания «типа» переменной Day
. В данном случае это тип перечисления.Использование:
// инициализируем переменную типа enum значением по имени Day favoriteDay = Day.Friday; // инициализируем переменную типа enum значением по индексу Day favoriteDay = (Day)4; |
Последовательности
Для работы с последовательностями подключите две директивы:
using System.Collections.Generic; using System.Linq; |
Пример: Генерация последовательности в указанном итнтервале:
Range (int start, int count);
start
— The value of the first integer in the sequence.
count
— The number of sequential integers to generate.
IEnumerable<int> seq; // definition seq = System.Linq.Enumerable.Range(3, 10); foreach (var x in seq) Console.Write($"{x} "); // 3 4 5 6 7 8 9 10 11 12 |
Пример: Сгенерировать последовательность целых чисел от 1 до 10, затем выбрать только четные числа данной последовательности:
IEnumerable<int> s; s = Enumerable.Range(1, 10); // 1 2 3 4 5 6 7 8 9 10 s = s.Where(x => x % 2 == 0); //2 4 6 8 10 foreach (int num in s) { Console.WriteLine(num); } |
Пример: Сгенерировать последовательность целых чисел от 1 до 10 и вычислить квадраты этих чисел:
IEnumerable<int> squares; squares=Enumerable.Range(1, 10).Select(x => x * x); foreach (int num in squares) { Console.WriteLine(num); } |
Пример: Последовательность чисел в интервале от 1 до 9 с правилом: (a+b)*2
(т.е. для первых двух чисел последовательности имеем (0+1)*2
= 2)
IEnumerable<int> seq; seq= Enumerable.Range(1, 9).Select((a, b) => (a+b)*2); foreach (int num in seq) { Console.Write(num); // 2 6 10 14 18 22 26 30 34 } |
Задания и лабораторные си шарп
Выполнить: Попросите пользователя ввести отметку (значения 1, 2, 3, 4, 5). Проверьте введенное число, и распечатайте характеристику отметки (very_bad — 1, bad — 2, satisfactory — 3, good — 4, excellent — 5). А также необходимо вывести отметку соответствующую характеристике удовлетворительно (satisfactory).
Указание: Создайте функцию CheckMark
с оператором switch
, чтобы проверить введенную отметку.
Пример выполнения:
Введите отметку 2 Характеристика отметки 2: bad Отметка для satisfactory: 3
[Название проекта: Lesson_6Lab1
, название файла L6Lab1.cs
]
✍ Алгоритм:
- Создайте консольное приложение с именем
Lesson_6Lab1
. - В окне Обозреватель решений (Solution Explorer) найдите файл Program.cs и переименуйте его в
L6Lab1.cs
. - Подключите класс
Console
, чтобы постоянно не писать его название при обращении к его методам: - После открывающей скобки класса и непосредственно перед методом
Main()
введите следующий код для создания перечисленияMarks
, представляющего характеристики отметок: - В функцию
Main()
добавьте следующий код: - Этот код показывает два аспекта использования перечислений. Во-первых, можно исполльзовать предлагаемое автозаполнение и з выпадающего списка
Marks.satisfactory
. Во-вторых, можно использовать номер необходимого значения перечисления, сконвертировав его в типint
. -
Запустите приложение, щелкнув
CTRL+F5
. - Под этим кодом добавьте код, в котором попросите пользователя ввести отметку (
1
—5
): - Создайте свою функцию
CheckMark
с двумя параметрами: параметрmark
типаint
— вводимый параметр, и параметрcharacteristic
с ключевым словомref
и типом данныхMarks
. - В функцию добавьте оператор switch для проверки введенного числа и присваивания соответствующей характеристики переменной
characteristic
: - В функции
main
инициализируйте переменные, которые будут использоваться в качестве параметров функции: - Вызовите функцию и посмотрите на результат:
- Запустите программу.
... Console; ...System.
...
Marks { very_bad, bad, satisfactory, good, excellent, noSuchMark };
...
... satisfactory; Console.WriteLine($"And also the characteristic satisfactory is for: {x} mark"); ...x = ( )Marks.
... WriteLine("Please enter a number"); mark = .Parse(ReadLine()); ...
static CheckMark( mark, ref Marks characteristic) { ... }
switch (mark) { case 1: characteristic = Marks.very_bad; break; case 2: characteristic = Marks.bad; break; case 3: characteristic = Marks.satisfactory; break; case 4: characteristic = Marks.good; break; case 5: characteristic = Marks.excellent; break; default: WriteLine("Invalid selection. Please select 1, 2, 3, 4 or 5."); characteristic = Marks.noSuchMark; break; }
... WriteLine("Введите отметку"); mark = .Parse(ReadLine()); // этот код был Marks characteristic = Marks.very_bad; //нужно присвоить какое-то значение, неважно какое
... CheckMark(mark, ref characteristic); WriteLine($"The characteristic for {mark} is: {characteristic}");
Выполнить: Создайте консольное приложение Lesson_6Task1
. Удалите полностью функцию Main
из проекта. Скопируйте код из текстового файла и вставьте его в основной класс (class Program
) созданного проекта. Следуйте всем тегам TODO
и выполняйте то, что там написано. Убедитесь, что проект работает правильно.
Пример выполнения:
Введите день недели: 2 Вторник
[Название проекта: Lesson_6Task1
, название файла L6Task1.cs
]
Последовательности
Выполнить: Создайте последовательность из N
целых чисел, начинающихся с a
. a
и N
— это натуральные числа.
Пример выполнения:
Введите натуральные числа N и a: 2 5 Результат: 2 3 4 5 6
[Название проекта: Lesson_6Task2
, название файла L6Task2.cs
]
Выполнить: Дана последовательность целых чисел в диапазоне [-5;5]. Создайте запросы, чтобы отфильтровать элементы последовательности по следующим правилам:
1) положительные элементы последовательности
2) элементы, кратные 5
3) нечетные элементы последовательности.
Указание: Для выполнения заданий потребуется запрос вида:
... .Where(a => ...);
Пример выполнения:
Последовательность: -5 -4 -3 -2 -1 0 1 2 3 4 5 1) 1 2 3 4 5 2) -5 0 5 3) -5 -3 -1 1 3 5
[Название проекта: Lesson_6Task3
, название файла L6Task3.cs
]
Выполнить: Создайте последовательность из 9
целых чисел в диапазоне [1,10]. Измените последовательность, сделав сдвиг элементов в диапазон [3,12].
Указание: Для выполнения задания потребуется запрос вида:
... .Select(a => ...);
Пример выполнения:
1 2 3 4 5 6 7 8 9 10 Результат: 3 4 5 6 7 8 9 10 11 12
[Название проекта: Lesson_6Task4
, название файла L6Task4.cs
]