Знакомство с базовыми типами и конструкциями в C# (Рекомендации к выполнению практической работы № 1)

Страницы работы

Содержание работы

Практическая работа №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()});

В качестве корректировки текста можно осуществлять: изменение регистра, удаление лишних пробелов.

Похожие материалы

Информация о работе