- •Отчёт по индивидуальным лабораторным работам
- •1 Первая задача
- •1.1 Постановка задачи
- •1.2 Схемы алгоритмов
- •1.3 Текст программы
- •1.4 Результаты тестирования программы
- •1.5 Заключение
- •2 Вторая задача
- •2.1 Постановка задачи
- •2.2 Схемы алгоритмов
- •2.3 Текст программы
- •2.4 Результаты тестирования программы
- •2.5 Заключение
- •3 Третья задача
- •3.1 Постановка задачи
- •3.2 Схемы алгоритмов
- •3.3 Текст программы
- •3.4 Результаты тестирования программы
- •3.5 Заключение
- •4 Четвёртая задача
- •4.1 Постановка задачи
- •4.2 Схемы алгоритмов
- •4.3 Текст программы
- •4.4 Результаты тестирования программы
- •4.5 Заключение
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();
}
};
}
