Отчёт по квадратным уравнениям
.docxМинистерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
(МТУСИ)
Кафедра: «Информатика»
Дисциплина «Технологии программирования»
Отчёт по лабораторной работе №4
на тему
«Разработка программы с разветвлениями
«Решение квадратного уравнения»»
Выполнила: студент гр. БСТ____ AliceIlina
Проверил: Волков А.И.
Москва 2022
Оглавление
1. Постановка задачи
Разработать линейную программу с разветвлениями «Решение квадратного уравнения» в среде разработки Visual Studio. Данная программа способна осуществлять вычисление корней квадратного уравнения. Если уравнение полное и дискриминант больше нуля, программа выводит 2 квадратных корня. Если дискриминант равен нулю, программа выведет 2 одинаковых корня. Если же дискриминант меньше нуля, программа выведет соответствующее сообщение. При отсутствии квадратного члена уравнения, программа считает обыкновенное линейное уравнение.
Помимо этого, в оконном приложении будут кнопки «Сброс» (для сброса введенных членов уравнения и результатов) и «Закрыть» (для закрытия оконного приложения).
Программа должна правильно реагировать на попытку деления на 0, выдавая соответствующее сообщение. Она должен правильно обрабатывать операции с действительными(вещественными) числами. При возможных ошибках в работе программы или при вводе исходных данных необходимо выводить в дополнительную метку под результатом операции.
Вывод данных происходит путем нажатия кнопок.
Нестандартные ситуации, которые необходимо рассмотреть:
Расстановка запятых;
Смена знака числа.
Для реализации данной программы необходимы следующие элементы интерфейса (таблица 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 Невозможность сохранения операндов или результатов в памяти программы;
В целом, поставленная в начале цель была достигнута. В программе выполняются все необходимые функциональные требования.