- •«Московский технический университет связи и информатики»
- •Отчёт по лабораторной работе №7
- •2.1 Постановка задачи индивидульного задания №2 30
- •3.1 Постановка задачи индивидульного задания №3 46
- •4.1 Постановка задачи индивидульного задания №4 64
- •1.1 Постановка задачи индивидульного задания №1
- •23. Последовательность a1, a2, ..., аn состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.
- •1.2 Схемы алгоритмов индивидуального задания №1
- •1.3 Текст программы индивидуального задания №1
- •1.4 Результаты тестирования программы индивидуального задания №1
- •Выводы о выполнении индивидуального задания №1
- •2.1 Постановка задачи индивидульного задания №2
- •83. Сформировать квадратную матрицу порядка n по заданному образцу (рисунок 22)
- •2.2 Схемы алгоритмов индивидуального задания №2
- •2.3 Текст программы индивидуального задания №2
- •2.4 Результаты тестирования программы индивидуального задания №2
- •Выводы о выполнении индивидуального задания №2
- •3.1 Постановка задачи индивидульного задания №3
- •159. Дано простое число. Составить функцию, которая будет выводить следующее за ним простое число.
- •3.2 Схемы алгоритмов индивидуального задания №3
- •3.3 Текст программы индивидуального задания №3
- •3.4 Результаты тестирования программы индивидуального задания №3
- •Выводы о выполнении индивидуального задания №3
- •4.1 Постановка задачи индивидульного задания №4
- •220. В строке имеется одна точка с запятой (;). Подсчитать количество символов до точки с запятой и после неё.
- •3.2 Схемы алгоритмов индивидуального задания №3
- •4.3 Текст программы индивидуального задания №4
- •4.4 Результаты тестирования программы индивидуального задания №4
- •Выводы о выполнении индивидуального задания №4
2.2 Схемы алгоритмов индивидуального задания №2
Прежде всего, на рисунке 22 представлена схема алгоритма обработчика нажатия на кнопку закрытия программы btnClose_Click, который выполняет закрытие программы.
Рисунок 22 – Схема алгоритма функции обработчика нажатия на кнопку «Закрыть» (btnClose_Click)
Для запрета некорректного ввода в поле txtN (вводимый порядок N) реализован алгоритм функции txt_KeyPress2, его схема представлена на рисунке 23.
Рисунок 23 – Схема алгоритма функции обработки ввода txt_KeyPress2
При нажатии на кнопку «Выполнить» выполняется алгоритм расчёта двумерного массива (и вывода его в виде матрицы в поле вывода), представленный на рисунке 24
Рисунок 24 – Схема алгоритма функции обработки нажатия на кнопку «Выполнить» RunBtn2_Click
На рисунке 25 показан алгоритм обработчика выбора вкладки, который при выборе вкладки данного задания включает возможность разворачивания окна приложения на полный экран.
Рисунок 25 – Схема алгоритма функции подсчёта делителей числа CountDiv()
Наконец, при нажатии на кнопку «Сохранить в файл» алгоритм, схема которого представлена на рисунках 26 – 27, выполняет сохранение порядка n и результата в виде матрицы в файл методом дозаписи.
Рисунок 26 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click2
Рисунок 27 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click2, продолжение
Рисунок 28 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click2, продолжение
2.3 Текст программы индивидуального задания №2
private: System::Void txt_KeyPress2(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
// Обработчик нажатий в поля ввода для генерации (мин. и макс.)
{
// Очистка результата
txtResult2->Text = "";
TextBox^ ActiveTextBox = txtN;
// Объявление переменной активного текстового поля
// Если нажатая клавиша не цифровая.
if (!Char::IsDigit(e->KeyChar))
// Если нажатая клавиша не является клавишей BackSpace.
if (e->KeyChar != (char)Keys::Back)
e->Handled = true; // Запрет ввода
// Запрет ввода повторных нулей в начале числа.
if (e->KeyChar == (char)Keys::D0 || e->KeyChar == (char)Keys::NumPad0)
// Если нажата клавиша 0
if (ActiveTextBox->Text->Length >= 1) // Если строка не пустая
if (ActiveTextBox->Text[0] == '0' &&
ActiveTextBox->SelectionStart < 2)
e->Handled = true; // Запрет ввода
}
private: System::Void RunBtn2_Click(System::Object^ sender, System::EventArgs^ e)
{
txtResult2->Text = "";
if (txtN->Text != "")
{
int InN = Convert::ToInt64(txtN->Text);
if ((InN <= 70) && (InN > 0))
{
array<Int64, 2>^ Arr = gcnew array<Int64, 2>(InN, InN);
Int64 n = 0;
for (int i = 0; i < InN; i++)
{
for (int j = 0; j < InN; j++)
{
if (i == j)
{
n += 1;
Arr[i, j] = n * (n + 1);
}
txtResult2->Text += String::Format("{0, 5}",
Convert::ToString(Arr[i, j]));
}
txtResult2->Text += "\n";
}
}
else // Если нет результата операции - сообщение пользователю
DialogResult = MessageBox::Show(this,
"Значение n слишком велико,
оно должно не превышать 70 и быть больше 0",
"Формирование матрицы",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
else // Если нет результата операции - сообщение пользователю
DialogResult = MessageBox::Show(this,
"Пожалуйста, введите значение n", "Формирование матрицы",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
private: System::Void tabControl1_SelectedIndexChanged
(System::Object^ sender, System::EventArgs^ e)
{
if ((this->tabControl1->SelectedIndex == 1) ||
(this->tabControl1->SelectedIndex == 3)) {
this->MaximizeBox = true;
}
else {
this->MaximizeBox = false;
this->WindowState = FormWindowState::Normal;
}
}
private: System::Void FileOutputBtn_Click2(System::Object^ sender, System::EventArgs^ e) // Сохранение файла при нажатии "Сохранить в файл"
{
SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;
// Новый элемент диалогового окна сохранения файла
saveFileDialog1->Title = "Сохранение файла"; // Название окна
saveFileDialog1->Filter = "txt files (*.txt)|*.txt";
// Фильтр - текстовые файлы
String^ Username = Environment::UserName;
// Получение имени пользователя и его ввод в путь директории
String^ FileDirectory = "c:\\Users\\" + Username + "\\Desktop\\";
saveFileDialog1->InitialDirectory = (FileDirectory);
if (txtFileOutput2->Text == "")
saveFileDialog1->FileName = FileDirectory;
// Если поле имени файла вывода пустое, имя файла - сама директория
else saveFileDialog1->FileName = txtFileOutput2->Text;
// Если заполнено имя файла ввода - выбор этого имени файла
if (txtResult2->Text != "") // Если есть результат операции
{
if (saveFileDialog1->ShowDialog() ==
System::Windows::Forms::DialogResult::OK)
// Если файл сохранения успешно выбран
{
txtFileOutput2->Text = saveFileDialog1->FileName;
// Вывод названия файла сохранения в соотвествующее поле
if (IO::File::Exists(saveFileDialog1->FileName))
// Если файл существует
{
StreamReader^ sr =
File::OpenText(saveFileDialog1->FileName);
array<String^>^ ArrLines = File::ReadAllLines(saveFileDialog1->FileName);
// Чтение всех строк файла в архив
sr->Close();
int InIndex = ArrLines->IndexOf(ArrLines,
"Для n = " + txtN->Text + " матрица: ");
// Переменная индекса строки исходного
// массива в файле
if (ArrLines->Length == 0) // Если файл пустой
{
ArrLines->Resize(ArrLines, 2);
// Смена размера массива
// Запись строк в массив, выбор стартовой
// позиции поиска текущей операции
ArrLines[0] = "Для n = " + txtN->Text +
" матрица: ";
ArrLines[1] = (txtResult2->Text);
}
else if (InIndex == -1)
// Если не найден текущий исходный массив
{
ArrLines->Resize(ArrLines,
ArrLines->Length + 3);
// Смена размеров массива
ArrLines[ArrLines->Length - 3] = "";
// Разделитель между массивами
// Запись строк нового исходного и результата
// в массив, изменение стартовой
// позиции поиска текущей операции
ArrLines[ArrLines->Length - 2] = "Для n = " +
txtN->Text + " матрица: ";
ArrLines[ArrLines->Length - 1] =
(txtResult2->Text);
}
StreamWriter^ sw =
File::CreateText(saveFileDialog1->FileName);
// Создание текста в файле (запись)
for (int i = 0; i < ArrLines->Length; i++)
sw->WriteLine(ArrLines[i]);
// Построчная запись в файл из массива
sw->Close();
}
else // Если файл не существует
{
StreamWriter^ sw =
File::CreateText(saveFileDialog1->FileName);
// Создание текста в файле (запись)
// Построчная запись в файл
sw->WriteLine("Для n = " + txtN->Text +
" матрица: ");
sw->WriteLine(txtResult2->Text);
sw->Close();
}
}
}
else // Если нет результата операции - сообщение пользователю
DialogResult = MessageBox::Show(this,
"Пожалуйста, выполните операцию перед сохранением",
"Формирование матрицы",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
