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

Отчёт по квадратным уравнениям

.docx
Скачиваний:
20
Добавлен:
10.01.2023
Размер:
292.49 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Ордена Трудового Красного Знамени Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

(МТУСИ)

Кафедра: «Информатика»

Дисциплина «Технологии программирования»

Отчёт по лабораторной работе №4

на тему

«Разработка программы с разветвлениями

«Решение квадратного уравнения»»

Выполнила: студент гр. БСТ____ AliceIlina

Проверил: Волков А.И.

Москва 2022

Оглавление

1. Постановка задачи

Разработать линейную программу с разветвлениями «Решение квадратного уравнения» в среде разработки Visual Studio. Данная программа способна осуществлять вычисление корней квадратного уравнения. Если уравнение полное и дискриминант больше нуля, программа выводит 2 квадратных корня. Если дискриминант равен нулю, программа выведет 2 одинаковых корня. Если же дискриминант меньше нуля, программа выведет соответствующее сообщение. При отсутствии квадратного члена уравнения, программа считает обыкновенное линейное уравнение.

Помимо этого, в оконном приложении будут кнопки «Сброс» (для сброса введенных членов уравнения и результатов) и «Закрыть» (для закрытия оконного приложения).

Программа должна правильно реагировать на попытку деления на 0, выдавая соответствующее сообщение. Она должен правильно обрабатывать операции с действительными(вещественными) числами. При возможных ошибках в работе программы или при вводе исходных данных необходимо выводить в дополнительную метку под результатом операции.

Вывод данных происходит путем нажатия кнопок.

Нестандартные ситуации, которые необходимо рассмотреть:

  1. Расстановка запятых;

  2. Смена знака числа.

Для реализации данной программы необходимы следующие элементы интерфейса (таблица 1).

Таблица 1 – Элементы интерфейса программы

Свойства

Описание

Значения

Элементы Button

Элементы

Label

Элемент TextBox

(Name)

Имя элемента

btnSolve, btnReset, btnClose

lblInfo,

lblComment,

lblError,

lblA, lblB, lblC,

lbl1, lbl2,

lbl3, lbl4

textBoxA, textBoxB,

textBoxC

TextAlign

Способ выравнивания текста

MiddleCenter

Right

ReadOnly

Только для чтения

(Отсутствует)

ForeColor

Цвет текста

ControlText

Size.Width

Ширина

100

80

90

Size.Height

Высота

30

13

20

Location.X

Расстояние от левого края

240

12, 10, 110

110

Location Y

Расстояние от верхнего края

10, 40, 70, 100, 150, 185

185, 60, 90, 120, 10

60, 90, 120

Text

Текст элемента

Решить, Сбросить, Закрыть

"Необходимо ввести данные во все поля"

Пустое поле, Результат, Первое число, Второе число,

Третье число

Пустое поле

Font

Шрифт

Шрифт – MS Sans Serif;

Начертание – Обычный; Размер – 8 pt

2. Схемы алгоритмов

При нажатии на кнопку «Закрыть», выполняется алгоритм закрытия программы (рисунок 2).

Рисунок 1 – Схема алгоритма нажатия кнопки «Закрыть»

При нажатии на кнопку «Сбросить», выполняется алгоритм, представленный на рисунке 3.

Рисунок 2 – Схема алгоритма нажатия кнопки «Сбросить»

При нажатии на кнопку «Решить», выполняется алгоритм, складывающий заданные значения (рисунок 4).

Рисунок 3 – Схема алгоритма нажатия кнопки «Решить»

3. Текст программы

#pragma endregion

private: System::Void btnSolve_Click(System::Object^ sender, System::EventArgs^ e) {

double a, b, c, x1, x2, D;

textBoxX1->Text = L"";

textBoxX2->Text = L"";

a = System::Convert::ToDouble(textBoxA->Text);

b = System::Convert::ToDouble(textBoxB->Text);

c = System::Convert::ToDouble(textBoxC->Text);

this->lblError->Text = L"";

if (a != 0) {

D = b * b - 4 * a * c;

if (sqrt(D) > 0) {

x1 = (-b + sqrt(D)) / (2 * a);

x2 = (-b - sqrt(D)) / (2 * a);

this->lblComment->Text = L"Дискриминант > 0. Уравнение\nимеет два корня.";

textBoxX1->Text = System::Convert::ToString(x1);

textBoxX2->Text = System::Convert::ToString(x2);

}

if (sqrt(D) == 0) {

x1 = (-b / (2 * a));

x2 = (-b / (2 * a));

this->lblComment->Text =

L"Дискриминант = 0. Уравнение\nимеет два одинаковых корня.";

textBoxX1->Text = System::Convert::ToString(x1);

textBoxX2->Text = System::Convert::ToString(x2);

}

if (D < 0) {; this->lblComment->Text =

L"Дискриминант < 0. Уравнение\nне имеет действительных корней."; }

}

if ((a == 0) && (b != 0) && (c != 0)) {

x1 = (-c / b);

textBoxX1->Text = System::Convert::ToString(x1);

this->lblComment->Text = L"Линейное уравнение -\nимеет один корень";

}

if ((a == 0) && (b == 0) && (c != 0)) { this->lblComment->Text = L"Ложное тождество!"; }

if ((a == 0) && (b == 0) && (c == 0)) { this->lblComment->Text = L"Верное тождество."; }

}

}

private: System::Void btnReset_Click(System::Object^ sender, System::EventArgs^ e) {

this->lblComment->Text = L"";

textBoxA->Text = L"";

textBoxB->Text = L"";

textBoxC->Text = L"";

textBoxX1->Text = L"";

textBoxX2->Text = L"";

lblError->Text = L"";

}

private: System::Void btnClose_Click(System::Object^ sender, System::EventArgs^ e) {

this->Close();

}

//Обработка корректного ввода первой ячейки

private: System::Void textBoxA_Leave(System::Object^ sender, System::EventArgs^ e) {

//Проверка пустого поля

if (textBoxA->Text == "") {

this->lblError->Text = L"Необходимо ввести данные во все поля";

}

else if (textBoxA->Text[0] == 45 && textBoxA->Text[1] == 44 && textBoxA->Text->Length == 2) {

this->textBoxA->Text = this->textBoxA->Text[0] + "0" + this->textBoxA->Text[1] + "1";

}

}

private: System::Void textBoxA_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

//Ввод только цифр

char number = e->KeyChar;

if (!Char::IsDigit(number) && number != 8 && number != 44 && number != 45) { e->Handled = true; }

if (number == 44) { if (textBoxA->Text->IndexOf(44) != -1) { e->Handled = true; } else { e->Handled = false; } }

if (number == 45) { if (textBoxA->Text->IndexOf(45) != -1) { e->Handled = true; } else { e->Handled = false;} }

}

private: System::Void textBoxA_TextChanged(System::Object^ sender, System::EventArgs^ e) {

//Допустима только одна запятая

if (this->textBoxA->Text->Length > 0 && this->textBoxA->Text[0] == ',') {

this->textBoxA->Text = "0" + this->textBoxA->Text;

textBoxA->SelectionStart = textBoxA->Text->Length;

}

//Минус допустим лишь в начале

if (this->textBoxA->Text->Length > 0) {

String^ s1;

s1 = textBoxA->Text->Substring(textBoxA->Text->Length - 1, 1);

if (s1 == "-") {

textBoxA->Text = "-" + textBoxA->Text->Remove(textBoxA->Text->Length - 1);

textBoxA->SelectionStart = textBoxA->Text->Length;

}

}

}

//Обработка корректного ввода второй ячейки

private: System::Void textBoxB_Leave(System::Object^ sender, System::EventArgs^ e) {

//Проверка пустого поля

if (textBoxB->Text == "") {

this->lblError->Text = L"Необходимо ввести данные во все поля";

}

else if (textBoxB->Text[0] == 45 && textBoxB->Text[1] == 44 && textBoxB->Text->Length == 2) {

this->textBoxB->Text = this->textBoxB->Text[0] + "0" + this->textBoxB->Text[1] + "1";

}

}

private: System::Void textBoxB_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

//Ввод только цифр

char number = e->KeyChar;

if (!Char::IsDigit(number) && number != 8 && number != 44 && number != 45) { e->Handled = true; }

if (number == 44) { if (textBoxB->Text->IndexOf(44) != -1) { e->Handled = true; } else { e->Handled = false; } }

if (number == 45) { if (textBoxB->Text->IndexOf(45) != -1) { e->Handled = true; } else { e->Handled = false; } }

}

private: System::Void textBoxB_TextChanged(System::Object^ sender, System::EventArgs^ e) {

//Допустима только одна запятая

if (this->textBoxB->Text->Length > 0 && this->textBoxB->Text[0] == ',') {

this->textBoxB->Text = "0" + this->textBoxB->Text;

textBoxB->SelectionStart = textBoxB->Text->Length;

}

//Минус допустим лишь в начале

if (this->textBoxB->Text->Length > 0) {

String^ s1;

s1 = textBoxB->Text->Substring(textBoxB->Text->Length - 1, 1);

if (s1 == "-") {

textBoxB->Text = "-" + textBoxB->Text->Remove(textBoxB->Text->Length - 1);

textBoxB->SelectionStart = textBoxB->Text->Length;

}

}

}

//Обработка корректного ввода третьей ячейки

private: System::Void textBoxC_Leave(System::Object^ sender, System::EventArgs^ e) {

//Проверка пустого поля

if (textBoxC->Text == "") {

this->lblError->Text = L"Необходимо ввести данные во все поля";

}

else if (textBoxC->Text[0] == 45 && textBoxC->Text[1] == 44 && textBoxC->Text->Length == 2) {

this->textBoxC->Text = this->textBoxC->Text[0] + "0" + this->textBoxC->Text[1] + "1";

}

}

private: System::Void textBoxC_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

//Ввод только цифр

char number = e->KeyChar;

if (!Char::IsDigit(number) && number != 8 && number != 44 && number != 45) { e->Handled = true; }

if (number == 44) { if (textBoxC->Text->IndexOf(44) != -1) { e->Handled = true; } else { e->Handled = false; } }

if (number == 45) { if (textBoxC->Text->IndexOf(45) != -1) { e->Handled = true; } else { e->Handled = false; } }

}

private: System::Void textBoxC_TextChanged(System::Object^ sender, System::EventArgs^ e) {

//Допуск лишь одной запятой

if (this->textBoxC->Text->Length > 0 && this->textBoxC->Text[0] == ',') {

this->textBoxC->Text = "0" + this->textBoxC->Text;

textBoxB->SelectionStart = textBoxB->Text->Length;

}

//Минус допустим лишь в начале

if (this->textBoxC->Text->Length > 0) {

String^ s1;

s1 = textBoxC->Text->Substring(textBoxC->Text->Length - 1, 1);

if (s1 == "-") {

textBoxC->Text = "-" + textBoxC->Text->Remove(textBoxC->Text->Length - 1);

textBoxC->SelectionStart = textBoxC->Text->Length;

}

}

}

};

}

4. Результаты тестирования программы

Результаты тестирования представлены в таблице 2.

Таблица 2 – Тестирование программы

Ввод

Вывод

№ теста

Первое окно ввода

Второе окно ввода

Третье окно ввода

Окно результата

Блок сообщения

1

4

2

-2

X1 = -1

X2 = 0.5

Дискриминант > 0. Уравнение имеет два корня.

2

4

4

1

X1 = 0,5

X2 = 0.5

Дискриминант = 0. Уравнение имеет два одинаковых корня.

3

4

4

4

Дискриминант < 0. Уравнение не имеет действительных корней.

4

0

2

2

Линейное уравнение – имеет 1 корень.

5

0

0

3

Ложное тождество!

6

0

0

0

Верное тождество!

7

,1

3

4

X1 = 28,8

X2 = -1,39

Дискриминант > 0. Уравнение имеет два корня.

Скриншоты работы программы представлены на рисунках 4-10.

Рисунок 4 – Работа программы при положительном дискриминанте

Рисунок 5 – Работа программы при нулевом дискриминанте

Рисунок 6 – Работа программы с отрицательным дискриминантом

Рисунок 7 – Работа программы при решении линейного уравнения

Рисунок 8 – Работа программы при отсутствии двух членов

Рисунок 9 – Работа программы при отсутствии двух членов

Рисунок 10 – Работа программы при неполном вводе первого коэффициента

Выводы

В результате выполнения данного задания был разработан программный продукт "Решение квадратного уравнения". При помощи этой программы можно высчитывать определенные арифметические операции. Программа не занимает много места, не требовательна к установленному программному обеспечению. Также было проведено исследование полученного программного продукта. В результате были выявлены следующие достоинства и недостатки полученного программного продукта.

Достоинства:

1 Существует возможность сбрасывать результат;

2 Программный продукт малотребователен к системным ресурсам компьютера.

Недостатки:

1 Невозможность выполнения некоторых других математических операций;

2 Невозможность сохранения операндов или результатов в памяти программы;

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