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

2 Создание схемы алгоритма

Алгоритм начинает работать после нажатия на кнопку «Расчёт exp(x)», схема алгоритмов кнопки представлена на рисунках 1-6.

Рисунок 1 – Схема алгоритма функции btnSol_Click с использованием типа Double.

Ранее говорилось, что тип Double не может хранить больше, чем 15 цифр. Есть решение этой проблемы. В качестве типа переменной можно использовать Decimal. Схема алгоритма с использованием Decimal представлена ниже на рисунке 2.

Рисунок 2 – Схема алгоритма функции btnSol_Click.

Функция autoCh автоматически меняет точность в зависимости от введенного значения x, вызывается при нажатии кнопки «Расчёт exp(x)», схема алгоритма представлена на рисунке 3.

Рисунок 3 – Схема алгоритма функции autoCh.

Функция print считает значение экспоненты и выводит ее в текстовое поле вывода, схема алгоритма представлена на рисунке 4.

Рисунок 4 – Схема алгоритма функции print.

Функция btnClose вызывается нажатием на кнопку «Закрыть», схема алгоритма представлена на рисунке 5.

Рисунок 5 – Схема алгоритма функции btnClose_Click.

Функция radioButton*_CheckedChanged меняет значения переменных в зависимости от выбранного положения переключателя, схема алгоритма представлена на рисунке 6.

Рисунок 6 – Схема алгоритма функции radioButton_CheckedChanged

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

int button;

double eps;

double sum;

void Number(System::Windows::Forms::TextBox^ txt,

System::Windows::Forms::KeyPressEventArgs^ e) {

char key = e->KeyChar;

if (Char::IsDigit(e->KeyChar)) {

// Запрет на ввод более одного знака минуса.

if (key == ',' || key == '.')

e->Handled = true; // Запрет ввода

// Запрет ввода повторных нулей в начале числа.

if (e->KeyChar == (char)Keys::D0 ||

e->KeyChar == (char)Keys::NumPad0)

// Если нажата клавиша 0

if (txt->Text->Length >= 1)

// Если строка не пустая

if (txt->Text[0] == '0' &&

txt->SelectionStart < 2)

e->Handled = true;

// Запрет ввода

}

else if (!Char::IsDigit(key)) {

if (e->KeyChar != (char)Keys::Back)

if (e->KeyChar != '-' || txt->Text->IndexOf('-') !=

-1)

e->Handled = true;

if (e->KeyChar == '-' && txt->Text->IndexOf('-') == -1)

txt->SelectionStart = 0;

}

}

private: System::Void radioButton1_CheckedChanged(System::Object^ sender,

System::EventArgs^ e) {

eps = 0.1;

button = 1;

}

private: System::Void radioButton5_CheckedChanged(System::Object^ sender,

System::EventArgs^ e) {

eps = 0.00001;

button = 5;

}

private: System::Void txtEnter_KeyPress(System::Object^ sender,

System::Windows::Forms::KeyPressEventArgs^ e) {

Number(txtEnter, e);

}

private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^

e) {

eps = 0.000001;

button = 6;

}

private: System::Void radioButton2_CheckedChanged(System::Object^ sender,

System::EventArgs^ e) {

eps = 0.01;

button = 2;

}

private: System::Void radioButton3_CheckedChanged(System::Object^ sender,

System::EventArgs^ e) {

eps = 0.001;

button = 3;

}

private: System::Void radioButton4_CheckedChanged(System::Object^ sender,

System::EventArgs^ e) {

eps = 0.0001;

button = 4;

}

private: System::Void radioButton6_CheckedChanged(System::Object^ sender,

System::EventArgs^ e) {

eps = 0.000001;

button = 6;

}

private: System::Void button1_Click(System::Object^ sender,

System::EventArgs^ e) {

this->Close();

}

void autoCh(int x) {

if (x > -17 && x <= -14 && eps != 0.000001) {

radioButton6->Checked = true;

}

if (x >= -13 && x <= -12 && (eps != 0.000001 &&

eps != 0.00001)) {

radioButton5->Checked = true;

}

if (x >= -11 && x <= -10 && (eps == 0.1 || eps == 0.01 ||

eps == 0.001)) {

radioButton4->Checked = true;

}

if (x >= -9 && x <= -8 && (eps == 0.1 || eps == 0.01)) {

radioButton3->Checked = true;

}

if (x >= -7 && x <= -5 && eps == 0.1) {

radioButton2->Checked = true;

}

}

void print(Decimal res, int x, int i) {

res = System::Math::Abs(res);

this->lblEntryValue->Text = x.ToString("0.############");

this->lblAc->Text = eps.ToString("0.##########");

this->lblNumP->Text = Convert::ToString(i);

eps *= 0.1;

Decimal mx = Decimal::Multiply((System::Math::Round(

Decimal::Divide(

(Decimal)System::Math::Exp((Double)x),

(Decimal)eps))), (Decimal)eps);

this->lblAcExp->Text = mx.ToString();

this->lblSum->Text = (Decimal::Round(res, button + 1)).ToString();

eps /= 0.1;

}

private: System::Void btnSol_Click(System::Object^ sender, System::EventArgs^

e) {

int х;

this->lbl`err->Text = L””;

try {

x = System::Convert::ToInt16(txtEnter->Text);

for (i = 1; i >= 0; i++)

{

cur = cur * x;

cur = cur / i;

res = res + cur;

if (System::Math::Abs(cur) <= (double)eps)

break;

}

print(res, x, i);

z = System::Convert::ToInt16(txtEnter->Text);

}

catch {

x = 1;

this->lblErr->Text = L"Число не входит в заданный диапозон!";

clear();

}

if (x > -17 && x <= 20) {

radioButton6->Checked = true;

eps = 0.00001;

button = 5;

}

}

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

this->Close();

}