Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
STIP_Labs_2015_16(C#).doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

4.Класс матриц c#

- Почему Яндекс всегда так долго ищет?

- Он гуглит...

Цель работы – освоить разработку класса с перегруженными операциями (4час.).

4.1.Задание

Ознакомьтесь с простеньким примером класса матриц и его использованием.

Каждому понятно, что реализация приведенного класса страдает многими недостатками, например, такими:

  • не предусмотрен ни один способ инициализации элементов матрицы (поле класса mtr). Если его разработать, то можно будет использовать перегруженную операцию сложения матриц (М3=М1+М2);

  • надо добавить более строгий контроль размеров матриц. Например, если реализуется сложение матриц, то обе матрицы должны быть просто одинаковыми и не обязательно квадратными;

  • при обнаружении ошибок класс должен выбрасывать исключительную ситуацию (оператор throw);

  • в тестирующей программе предусмотреть перехват исключительных ситуаций;

  • и т.д. и т.п.

Естественно, что ваша программа будет лишена перечисленных и всяких других мыслимых и немыслимых ошибок и недостатков.

Добавьте в класс перегруженную операцию транспонирования матрицы. Транспонировать можно любую прямоугольную матрицу, не только квадратную.

Также добавьте в класс операцию умножения матриц. Вспомните, что операция умножения может быть реализована, если число столбцов первой матрицы равно числу строк второй.

Тестирующая программа должна обладать следующими фантастическими свойствами:

  • запрашивать у пользователя размеры каждой из исходных матриц (число строк и столбцов);

  • генерировать, с помощью класса Random, значения элементов матриц как псевдослучайных чисел;

  • запрашивать у пользователя и выполнять над матрицами операции, предусмотренные в вашем варианте;

  • выводить на монитор результирующую матрицу и сообщения об ошибках.

Выберите по своему усмотрению каркас программы, например, консольное приложение, приложение WForms с отображением матриц в DataGridView и т.д.

5.Ассоциативные массивы на c#

Разговаривают студенты:

- Ты уже сколько экзаменов завалил?

- Вместе с завтрашним - пять.

Цель работы – освоить разработку класса ассоциативный массив с использованием индексаторов (4час.).

5.1.Задание вкупе с ценными методическими указаниями

Для пояснения идеи ассоциативного массива опишем следующую практическую задачу из счастливой и беззаботной студенческой жизни. Имеются дисциплины, студенты и отметки студентов по дисциплинам. Названия дисциплин и фамилии студентов естественно имеют строковый тип, а отметки – целочисленный массив произвольного размера. Необходимо разработать класс, который бы позволил накапливать перечисленные данные и возвращать их по запросу, например, таким удобным образом:

int n;

//...

int [] Mark = new int [n];

// ...

// MyArr - экземпляр вашего гениального класса

If(MyArr.Add("Охорона студента від викладача", "Тугодумко Петро", Mark)) /* Слава Україні!*/; else /* Вибачте, маячня!*/;

If(MyArr.Add("Хвілосохвія", "Розумниця Настя", new int [] {2,3,2})) /* Сало понад усе!*/; else /* Пробачте, нісенітниця!*/;

Mark = MyArr["Сміхотехніка", "Розумниця Настя"];

MyArr["Гідра-дінаміка", "Голодупенко Іван"]=Mark;

// and so on ...

Обобщая изложенное, можно сказать, что в данном примере мы имеем такой класс, объекты которого можно интерпретировать как двумерные массивы с индексами строкового типа.

В решении подобного рода задачи вам могут помочь так называемые индексаторы [8, раздел 5.13] и никак не поможет обобщенный класс Dictionary или тот же пресловутый List, потому что вы его использовать не будете – и точка.

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

  • для своих внутренних структур данных, например, массивов, класс не должен резервировать память под какое-то заранее определенное количество элементов;

  • расширение «внутренних» массивов класса должна выполняться автоматически при добавлении новых элементов с помощью функции Add;

  • для обработки ошибок он широко использует механизм исключительных ситуаций;

  • класс предоставляет удобные в использовании методы для выборок: извлечь ФИО всех студентов (в форме массива строк), изучающих заданную дисциплину и массив дисциплин, изучаемых данным студентом;

  • для удобства тестирования класса и сдачи л.р. преподавателю настоятельно рекомендуется задать некоторое достаточное количество входных данных и операторов, которые позволят убедиться в корректности реализации класса. Эти данные можно задать в форме инициализированных массивов или прочитать из текстового файла.

Если вы все это сделаете, то будет вам счастье в этой жизни и, возможно, хорошая отметка за л.р. Если удастся класс за какие-нибудь деньги продать «на сторону» – поделитесь выручкой с кафедрой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]