Практическая работа №1.
Знакомство с базовыми типами и конструкциями в C#
Задача 1. «Консольное меню»
Конструкция switch
Работа с объектом Console: вывод на экран, очистка экрана, изменение цвета экрана, цвета шрифта
Задача 2. Информация по типам
Вывод информации по типам: полное имя, минимальное/максимальное значение, является ли значимым типом, является ли ссылочным типом, указателем, число свойств, число методов, число полей. Тип выбирается пользователем в консольном меню.
Задача 3. Текстовый анализатор
Ввод текста. Вывод статистической информации (число слов, число символов, статистика по встречаемости букв). Автоматическая правка текста (перевод в верхний/нижний регистр, удаление лишних пробелов).
Задача 4. Матрично-векторные операции
Создание класса Vector. Конструкторы, перегрузки операций (сложение/вычитание векторов, умножение на число), вывод на консоль. Создание класса Matrix. Конструкторы, перегрузка операций (сложение/вычитание матриц, умножение на число, умножение матрицы на вектор, матричное умножение) вывод на консоль.
Рекомендации к выполнению работы
Частичное определение класса. Проект рекомендуется организовать из нескольких файлов. Например, Program.cs – основной код (консольное меню), Matr.cs – для матрично-векторных операций, TextAn.cs – текстовый анализатор, Types.cs – информация по типам.
Если в разных файлах частично реализуется один класс (отдельные методы, поля класса), то класс необходимо объявлять во всех файлах с ключевым словом partial. Например, класс Program – общий,
в Matr.cs:
partial class Program {
static void MatrOperations() {.. }
..
}
в TextAn.cs:
partial class Program {
static void TextAn() { .. }
..
}
в Program.cs:
partial class Program {
static bool b;
static void Main() { .. }
..
Консольное меню. Для выбора одной из задач реализуйте в главном файле консольное меню.
Практическая работа №1
------------------------------H - Помощь
T – Информация по типам
S - Текстовый анализатор
M – Матрично-векторные операции
E - Выход
-------------------------------
Вывод строки с форматированием, заданным в коде программы, осуществляется с помощью символа “@”:
Console.WriteLine(
@”Выберете необходимое действие:
1 – Задача №1
2 – Задача №2
3 – Выход”);
Чтение символа с консоли реализуется с помощью метода Console.ReadKey(). Метод возвращает объект типа ConsoleKeyInfo, свойство KeyChar которого возвращает код символа типа Char.
Для организации выбора действия в зависимости от нажатой кнопки используйте конструкцию switch. В качестве параметра могут быть и символы, и строки.
while(true)
{
switch(char.ToLower(Console.ReadKey(true).KeyCode))
{
case ‘h’ : Help(); break;
case ‘t’ : TestTypes(); break;
case ‘e’ : return;
default: break;
}
}
Информация по типам. Информация о типе содержится в объекте типа Type. Пользователь выбирает тип в консольном меню.
Информация по типам
---------------------------------------1 – uint
2 – int
3 – long
4 – float
5 – double
6 – char
7 - string
8 – Vector
9 – Matrix
0 – Выход в главное меню
---------------------------------------В зависимости от выбора пользователя экземпляр класса Type инициализируется одним из типов, например: t = typeof(int).
Вывод информации о типе может быть следующим:
Имя типа: String.Int32
Тип-значение: true
Указатель: false
Минимальное значение: -2147483648
Максимальное значение: 2147483647
Число свойств (properties): 0
Число методов (methods): 17
Число полей (fields): 2
Число членов (members): 19
Список полей: MinValue, MaxValue
------------------------------------------------
Методы: Число перегрузок Число параметров
MethodGroup1 2 0..2
MethodGroup2 3 0..1
Объект Type содержит множество булевых свойств, характеризующих тип: IsValueType, IsAbstract, IsPointer, IsByRef, IsClass и т.д.
Члены типа можно получить с помощью соответствующих методов объекта Type: GetMethods, GetFields, GetProperties, GetMembers.
Арифметические типы содержат статические поля MinValue и MaxValue. Для вывода максимальных и минимальных значений арифметических типов можно обратиться к полю по имени и получить значение:
m = t.GetField("MinValue").GetRawConstantValue();
Некоторые типы содержат несколько одноименных методов с разными аргументами и возвращаемыми значениями (перегрузки методов). Реализуйте вывод методов, сгруппированных по имени – отображается имя метода, число перегрузок методов, число параметров. Для группировки имен используйте оператор LINQ GroupBy:
string[] GrouppedMethods = methods
.GroupBy(m => m.Name)
.Select(g => g.Key)
.ToArray();
Матрично-векторные операции. Реализуйте два класса: Matrix и Vector. Для каждого класса реализуйте конструкторы (с разными параметрами), операции (сложение, вычитание, умножение), методы вывода на экран, операцию индексирования, операцию преобразования в тип string. Предусмотрите «защиту» от неправильного использования: несоответствие размеров при операциях сложения/вычитания, индекс выходит за границы и др.
class Vector
{
int[] values;
public Vector(int nDim) { .. }
public Vector(int[] InitValues) { .. }
public int Size { get; set; }
public static Vector operator+(Vector v1, Vector v2)
public static Vector operator-(Vector v1, Vector v2)
public static Vector operator*(Vector v1, int d)
public int this[int i] {..}
public void print() {..}
public void print(string sName) {..}
public override string ToString() {..}
}
Манипуляции с классами Vector и Matrix могут быть следующими:
Vector v1 = new Vector (new int[] {3, 4, 5});
Vector v2 = new Vector (new int[] {1, 1, 1});
v1.print(“v1 =”);
v2.print(“v2 =”);
(v1 + v2).print(“v1 + v2 = ”);
(v1 * 0.56).print(“v1 * 0.56 =”);
Продумайте, как организовать возможность ввода матриц/векторов и манипуляций с ними с помощью консольного меню.
Матрично-векторные операции
------------------------------1 – Ввод вектора
2 – Ввод матрицы
3 - Операции
4 – Вывод результатов
0 - Выход
-------------------------------
Текстовый анализатор. Текстовый анализатор предназначен для ввода и обработки строк.
Функции анализатора могут быть следующими:
Текстовый анализатор
---------------------------------------1 – Ввод текста
2 – Статистика
3 – Автоматическая корректировка
4 – Вывод текста
0 - Выход
---------------------------------------В качестве статистики отображается число слов, число символов, доминирующие символы (буквы) и частоты символов, число знаков пунктуации.
Для разбиения текста на слова можно воспользоваться методом Split:
string[] words = text.Split(' ');
Для подсчета встречаемости символов можно либо вручную просмотреть строчку как массив символов:
var CharDic = new Dictionary<char, int>();
foreach (char c in text)
{
if(CharDic.ContainsKey(c))
CharDic[c]++;
else
CharDic.Add(c, 1);
}
Для определения типа символа (буква, цифра, пробел, знак пунктуации и др.) можно использовать статические свойства класса char, начинающиеся с “Is”: IsLetter, IsDigit и др.
Альтернативный подход к оценке встречаемости символов заключается в использовании операторов LINQ:
var MeetingTable = text
.GroupBy(c => char.ToLower(c))
.Select(g =>
new {Letter = g.Key, Count = g.Count()});
В качестве корректировки текста можно осуществлять: изменение регистра, удаление лишних пробелов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.