Добавил:
https://vk.com/club199197084 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные Егоров / 0361_ЦукановаПА_№3

.pdf
Скачиваний:
9
Добавлен:
03.02.2024
Размер:
276.34 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра информационной безопасности

ПРАКТИЧЕСКАЯ РАБОТА №3

по дисциплине «Объектно-ориентированное программирование»

ТЕМА: МАТРИЦА, ЗАДАННАЯ НА МНОЖЕСТВЕ РАЦИОНАЛЬНЫХ ЧИСЕЛ

 

 

 

Семенова Е.А.

Студенты гр. 0361

 

Цуканова П.А.

Преподаватель

 

 

Егоров С.С.

Санкт-Петербург

2023

ЗАДАНИЕ НА ПРАКТИЧЕСКУЮ РАБОТУ

Студенты Цуканова П.А., Семенова Е.А. Группа 0361

Исходные данные: Создать GUI приложение, реализующее функции перечисленные в описании работы №1, но на множестве рациональных чисел. Приложение должно включать основной модуль, модуль «interface», модуль «matrix», модуль «rational» и файл number.h.

СПЕЦИФИКАЦИИ КЛАССОВ

1. Класс TInterface.

Атрибуты класса:

1. m, тип атрибута Matrix. Область видимости public. Поле,

которое хранит текущую матрицу.

2.matrix_size, тип атрибута QLabel. Область видимости public. Заголовок поля ввода размера матрицы.

3.matrix_elements, тип атрибута QLabel. Область видимости public. Заголовок поля ввода элементов матрицы.

4.size, тип атрибута QSpinBox. Область видимости public.

Поле ввода размера матрицы.

5.matrix, тип атрибута QTableWidget. Область видимости public. Поле ввода элементов матрицы.

6.matrix_btn, тип атрибута QPushButton. Область видимости public. Кнопка для отправки команды «вывести текущую

матрицу».

7. rank_btn, тип атрибута QPushButton. Область видимости public. Кнопка для отправки команды «вывести ранг текущей матрицы».

8. determinant_btn, тип атрибута QPushButton. Область

видимости public. Кнопка для отправки команды «вывести определитель текущей матрицы».

9. transposed_btn, тип атрибута QPushButton. Область

видимости public. Кнопка для отправки команды «вывести транспонированную текущую матрицу».

10.output, тип атрибута QLabel. Область видимости public.

Неизменяемое текстовое поле для вывода результатов программы.

Методы класса:

1.

TInterface(QWidget *parent = nullptr);. Область

 

видимости public. Конструктор класса.

 

 

2.

printMatrix(). Область видимости

public

slots.

 

Инициирует вывод текущей матрицы в поле результата.

 

3.

printTransposed(). Область видимости public

slots.

 

Инициирует вывод транспонированной матрицы в поле

 

результата.

 

 

4.

printRank(). Область видимости public

slots. Инициирует

 

расчет ранга матрицы и его вывод на экран.

 

5.

printDet(). Область видимости public

slots. Инициирует

 

расчет определителя матрицы и вывод результатов расчета.

6.

handleSizeChange(). Область видимости public slots. При

 

вводе другого размера матрицы обновляет текущую матрицу.

7.

changeMatrix(). Область видимости public slots. При вводе

 

значений матрицы обновляет текущую матрицу.

 

2. Класс Matrix.

Атрибуты класса:

1. size, тип атрибута int. Область видимости private. Поле,

которая хранит значение размера массива.

2.elements, тип атрибута number**. Область видимости private. Поле, хранит в себе элементы матрицы.

Методы класса:

1. Matrix(). Область видимости public. Конструктор класса,

инициирует создание матрицы по умолчанию.

2. Matrix(int n). Область видимости public. Конструктор класса, инициализирует матрицу заданного размера n.

3. ~Matrix(). Область видимости public. Деструктор класса,

освобождает выделенную динамическую память.

4.inputElement(int i, int j, number el). Атрибуты int i,

int j, number el принимают координаты матрицы и новое

public. Производит

значение элемента. Область видимости ввод нового значения матрицы.

5. print(). Область видимости public. Производит вывод элементов матрицы.

6. determinant(). Область видимости public. Производит расчет определителя матрицы.

7. rank(). Область видимости public. Производит расчет ранга матрицы.

8. transpose(). Область видимости public. Производит транспонирование матрицы.

9.operator=(const Matrix &other). Область видимости

public. Перегрузка оператора присваивания.

3.Класс TRational.

Атрибуты класса:

1. num, тип атрибута int. Область видимости public. Поле,

которое хранит значение делимого.

2. den, тип атрибута int. Область видимости public. Поле,

которое хранит значение делителя.

Методы класса:

1. TRational(). Область видимости public. Конструктор класса,

производит создание рационального нулевого числа.

2. TRational(int n, int d). int n, int d – значения делимого

и делителя соответственно. Область видимости public.

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

с переданными значениями делимого и делителя.

3.TRational(int i). Область видимости public. Конструктор

класса, производит преобразование целого числа до

рационального с делителем 1.

4. operator-(const TRational& c). Область видимости public.

Перегрузка оператора вычитания.

5. operator*(const TRational& c). Область видимости public.

Перегрузка оператора умножения.

6. operator/(const TRational& c). Область видимости public.

Перегрузка оператора деления.

7. operator=(const TRational& c). Область видимости public.

Перегрузка оператора присваивания.

8.operator==(const TRational& c). Область видимости

public. Перегрузка оператора сравнения (равенства).

9.operator!=(const TRational& c). Область видимости

public. Перегрузка оператора сравнения (неравенства).

ДИАГРАММА КЛАССОВ

На рисунке 1 представлена диаграмма классов, дополненная атрибутами и методами.

Рисунок 1 – Диаграмма классов.

ОПИСАНИЕ КОНТРОЛЬНОГО ПРИМЕРА С ИСХОДНЫМИ И

ОЖИДАЕМЫМИ (РАСЧЕТНЫМИ) ДАННЫМИ

Контрольный пример:

 

1/2

2/3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= (3/4

4/5) – исходная матрица.

 

 

 

 

 

 

1/2

2/3

 

1

4

2

3

 

 

 

 

1

 

 

 

 

det = |3/4

4/5|

=

 

 

 

 

 

 

 

= −

 

 

 

 

 

2

5

3

4

 

10

 

 

 

 

1/2

 

3/4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

(2/3

 

4/5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ранг матрицы:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1/2 2/3) ~ ( 1

 

 

 

1

 

 

 

 

1

4

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

3

) ~ (

 

 

3

 

) ~ (1

 

 

 

 

1

 

3

)

3/4

4/5

 

3/4

 

4/5

 

 

 

0

0

1

 

 

 

 

 

 

 

5

( ) = 2.

СКРИНШОТЫ РАБОТЫ ПРОГРАММЫ НА КОНТРОЛЬНЫХ

ПРИМЕРАХ

После запуска программы на экране появляется программное окно, с

полями ввода и кнопками, что показано на рисунке 2.

Рисунок 2 – Запуск программы и начальное меню Необходимо ввести значения элементов матрицы. Для этого нужно

ввести размер матрицы в соответствующее поле. Поле ввода элементов обновится и отобразит таблицу нужного размера. Для ввода элемента матрицы, достаточно кликнуть на ячейку и ввести число. На рисунке 3 показан ввод элементов матрицы из контрольного примера.

Рисунок 3 – Ввод матрицы из контрольного примера

Чтобы вывести получившуюся матрицу на экран, нажмем на кнопку

Actual matrix. В поле результатов появится матрица и введённые на предыдущем шаге элементы (рисунок 4).

Рисунок 4 – Вывод матрицы на экран Вычислим определитель матрицы. Для этого нажмем на кнопку

Determinant. На рисунке 5 показаны результаты работы программы.

Рисунок 5 – Вычисление определителя матрицы Теперь транспонируем матрицу. Чтобы это сделать, нужно нажать на

кнопку Transpose. В поле вывода появится транспонированная матрица

(рисунок 6).

Соседние файлы в папке Лабораторные Егоров