Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы Волков / Отчёт индивидуалки.docx
Скачиваний:
0
Добавлен:
09.07.2025
Размер:
2.04 Mб
Скачать

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

Ниже представлен алгоритм функции, которая формирует матрицу и считает количество и сумму положительных элементов над главной диагональю (рисунок 16).

Рисунок 16 – Схема алгоритма функции для формирования матрицы и нахождения результата

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

Рисунок 17 - Схема алгоритма функции обработки нажатия кнопки «Пуск»

На рисунке 18 представлена схема алгоритма функции обработчика нажатия на кнопку "Загрузить". Программа открывает файл на чтение и формирует матрицу.

Рисунок 18 – Схема алгоритма функции обработчика нажатия на кнопку «Загрузить»

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

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

На рисунке 20 представлена схема алгоритма проверки ввода в матрицу.

Рисунок 20 – Схема алгоритма функции проверки ввода в матрицу

На рисунке 21 представлена схема алгоритма, который выполняется при изменении числа N.

Рисунок 21 – Схема алгоритма функции при изменении N

На рисунке 22 представлена схема алгоритма проверки ввода числа N.

Рисунок 22 – Схема алгоритма функции проверки ввода N

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

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

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

// Нажатие кнопки "Пуск"

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

{

if (textBox1->Text != "")

{

int N = Convert::ToInt32(textBox1->Text);

int** a = new int* [N];

int sum = 0, col = 0;

String^ s = Convert::ToString(dataGridView1->Rows[0]->Cells[0]- >Value);

if (s == "")

{

for (int i = 0; i < N; i++) {

a[i] = new int[N];

dataGridView1->Columns[i]->Width = 40;

for (int j = 0; j < N; j++) {

a[i][j] = rand() % 20 - 10;

dataGridView1->Rows[i]->Cells[j]->Value = a[i][j];

if (j > i && a[i][j] > 0) {

sum += a[i][j];

col++;

}

}

}

}

else {

for (int i = 0; i < N; i++) {

a[i] = new int[N];

dataGridView1->Columns[i]->Width = 40;

for (int j = 0; j < N; j++) {

a[i][j] = Convert::ToInt32(dataGridView1- >Rows[i]->Cells[j]->Value);

if (j > i && a[i][j] > 0) {

sum += a[i][j];

col++;

}

}

}

}

label2->Text = "Сумма: " + Convert::ToString(sum);

label3->Text = "Количество: " + Convert::ToString(col);

}

else

{

dataGridView1->RowCount = 1;

dataGridView1->ColumnCount = 1;

dataGridView1->Rows[0]->Cells[0]->Value = "";

label2->Text = "";

label3->Text = "";

}

}

// Нажатие кнопки "Загрузить"

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

double sum = 0;

int col = 0;

OpenFileDialog^ openFileDialog = gcnew OpenFileDialog();

openFileDialog->Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";

if (openFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK)

{

String^ fileName = openFileDialog->FileName;

StreamReader^ sr = gcnew StreamReader(fileName);

String^ line;

array<String^>^ tokens;

line = sr->ReadLine();

tokens = line->Split(' ');

int N = Convert::ToInt32(tokens[0]);

dataGridView1->RowCount = N;

dataGridView1->ColumnCount = N;

for (int i = 0; i < N; i++) {

dataGridView1->Columns[i]->Width = 40;

line = sr->ReadLine();

tokens = line->Split(' ');

for (int j = 0; j < N; j++) {

dataGridView1->Rows[i]->Cells[j]->Value = tokens[j];

if (j > i && Convert::ToInt32(tokens[j]) > 0) {

sum += Convert::ToInt32(tokens[j]);

col++;

}

}

}

label2->Text = "Сумма: " + Convert::ToString(sum);

label3->Text = "Количество: " + Convert::ToString(col);

sr->Close();

}

}

// Нажатие кнопки "Сохранить"

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

SaveFileDialog^ saveFileDialog = gcnew SaveFileDialog();

saveFileDialog->Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";

if (saveFileDialog->ShowDialog() == System::Windows::Forms::DialogResult::OK)

{

String^ fileName = saveFileDialog->FileName;

StreamWriter^ sw = gcnew StreamWriter(fileName);

sw->WriteLine(dataGridView1->RowCount);

for (int i = 0; i < dataGridView1->RowCount; i++) {

for (int j = 0; j < dataGridView1->ColumnCount; j++) {

sw->Write(dataGridView1->Rows[i]->Cells[j]->Value);

if (j < dataGridView1->ColumnCount - 1) {

sw->Write(" ");

}

}

sw->WriteLine();

}

sw->Close();

}

}

private: System::Void dataGridView1_EditingControlShowing(System::Object^ sender, System::Windows::Forms::DataGridViewEditingControlShowingEventArgs^ e)

{

TextBox^ textBox = dynamic_cast<TextBox^>(e->Control);

if (textBox != nullptr) {

textBox->KeyPress += gcnew KeyPressEventHandler(this, &MyForm::dataGridView1_KeyPress);

}

}

// Проверка ввода в матрицу

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

{

if (!Char::IsDigit(e->KeyChar) && e->KeyChar != ',' && e->KeyChar != '\b' && e->KeyChar != '-') {

e->Handled = true;

}

TextBox^ textBox = dynamic_cast<TextBox^>(sender);

if (e->KeyChar == '-' && textBox != nullptr && textBox->Text->IndexOf('-') != -1) {

e->Handled = true;

}

if (e->KeyChar == ',' && textBox != nullptr && textBox->Text->IndexOf(',') != -1) {

e->Handled = true;

}

}

// Изменение N

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

{

if (textBox1->Text == "")

{

dataGridView1->RowCount = 1;

dataGridView1->ColumnCount = 1;

dataGridView1->Rows[0]->Cells[0]->Value = "";

}

else if (textBox1->Text == "0")

{

MessageBox::Show("N должно быть > 0");

this->textBox1->Text = "";

}

else {

int N = Convert::ToInt32(textBox1->Text);

dataGridView1->RowCount = N;

dataGridView1->ColumnCount = N;

}

}

// Запрет ввода не чисел в N

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

if (!Char::IsDigit(e->KeyChar) && e->KeyChar != '\b') {

e->Handled = true;

}

}

// Нажатие кнопки "Закрыть"

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

{

this->Close();

}

};

}