- •«Московский технический университет связи и информатики»
- •Отчёт по лабораторной работе №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
3.2 Схемы алгоритмов индивидуального задания №3
Прежде всего, на рисунке 47 представлена схема алгоритма обработчика нажатия на кнопку закрытия программы btnClose_Click, который выполняет закрытие программы.
Рисунок 47 – Схема алгоритма функции обработчика нажатия на кнопку «Закрыть» (btnClose_Click)
Для очистки поля результата при вводе в поле ввода строки реализуется алгоритм обработчика txtInStr_KeyPress, представленный на рисунке 48.
Рисунок 48 – Схема алгоритма функции обработки ввода txtInStr_KeyPress
При нажатии на кнопку «Выполнить» алгоритм, представленный на рисунке 49 – здесь цикл проверяет всю строку от начала и для каждой точки с запятой выводит её индекс, число символов до и после неё.
Рисунок 49 – Схема алгоритма функции обработки нажатия на кнопку «Выполнить» RunBtn4_Click
На рисунке 50 – алгоритм обработчика нажатия на кнопку «Ввод из файла» для осуществления функции ввода строки из тектового файла.
Рисунок 50 – Схема алгоритма функции обработчика нажатия на кнопку «Ввод из файла» FileInputBtn4_Click
Наконец, при нажатии на кнопку «Сохранить в файл» алгоритм, схема которого представлена на рисунках 51 – 53, выполняет сохранение (исходной строки и результата обработки) в файл методом дозаписи.
Рисунок 51 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click4
Рисунок 52 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click4, продолжение
Рисунок 53 – Схема алгоритма функции обработки нажатия на кнопку «Сохранить в файл» FileOutputBtn_Click4, продолжение
4.3 Текст программы индивидуального задания №4
private: System::Void RunBtn4_Click(System::Object^ sender, System::EventArgs^ e)
{
String^ FullString = txtInStr->Text;
bool NoSeparator = true;
if (FullString != "")
{
for (int i = 0; i < FullString->Length; i++)
{
if (FullString[i] == ';')
{
NoSeparator = false;
txtInStr->SelectionStart = i;
txtInStr->SelectionLength = 1;
txtInStr->SelectionBackColor = Color::Yellow;
txtResult4->Text +=
"Для точки с запятой с индексом " + (i + 1)
+ ":\n";
txtResult4->Text += "Число символов до ';' = " +
(i) + "\n";
txtResult4->Text += "Число символов после ';' = " +
(FullString->Length - i - 1) + "\n";
txtResult4->Text += "\n";
}
}
if (NoSeparator == true) // Если нет символа ;
DialogResult = MessageBox::Show(this,
"Пожалуйста, добавьте в строку символ ';' в качестве разделителя",
"Обработка строки",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
else // Если пустой ввод
DialogResult = MessageBox::Show(this,
"Пожалуйста, введите строку с символом ';'", "Обработка строки",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
private: System::Void txtInStr_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
{
txtResult4->Text = "";
}
private: System::Void FileInputBtn4_Click(System::Object^ sender, System::EventArgs^ e)
{
IO::Stream^ myStream;
OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
// Создание элемента диалогового окна открытия файла
openFileDialog1->Title = "Открытие файла"; // Название окна
openFileDialog1->Filter = "txt files (*.txt)|*.txt";
// Выбор фильтра файлов
openFileDialog1->RestoreDirectory = false;
// Отключение восстановления директории
String^ Username = Environment::UserName;
// Получение имени пользователя
String^ FileDirectory = "c:\\Users\\" + Username + "\\Desktop\\";
// Директория
openFileDialog1->InitialDirectory = (FileDirectory);
// Присвоение директории
if (txtFileInput4->Text == "")
openFileDialog1->FileName = FileDirectory;
// Если своё имя файла не введено – выбор
// имени директории в качестве имени
else openFileDialog1->FileName = txtFileInput4->Text;
// Если введено имя файла - его ввод
if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) // Если файл успешно выбран
{
if ((myStream = openFileDialog1->OpenFile()) != nullptr)
// Если файл успешно открыт
{
StreamReader^ sr
= gcnew StreamReader(openFileDialog1->FileName);
String^ ReadedStr = sr->ReadToEnd();
// Чтение всего файла в строку
txtInStr->Text = (ReadedStr); // Запись прочитанной строки
txtInStr->SelectionStart = 0;
txtInStr->SelectAll();
txtInStr->SelectionBackColor = Color::Empty;
txtResult4->Text = ""; // Очистка результата
txtFileInput4->Text = openFileDialog1->FileName;
// Запись имени файла в соответстующее поле
sr->Close();
myStream->Close();
}
}
}
private: System::Void FileOutputBtn4_Click(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 (txtFileOutput4->Text == "")
saveFileDialog1->FileName = FileDirectory;
// Если поле имени файла вывода пустое, имя файла - сама директория
else saveFileDialog1->FileName = txtFileOutput4->Text;
// Если заполнено имя файла ввода - выбор этого имени файла
if (txtResult4->Text != "") // Если есть результат операции
{
if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
// Если файл сохранения успешно выбран
{
txtFileOutput4->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 InArrIndex =
ArrLines->IndexOf(ArrLines, txtInStr->Text);
// Переменная индекса строки
// исходного массива в файле
if (ArrLines->Length == 0) // Если файл пустой
{
ArrLines->Resize(ArrLines, 2);
// Смена размера массива
// Запись строк в массив, выбор
// стартовой позиции поиска текущей операции
ArrLines[0] = "Исходная строка: \n" +
txtInStr->Text + "\n";
ArrLines[1] = (txtResult4->Text);
}
else if (InArrIndex == -1)
// Если не найден текущий исходный массив
{
ArrLines->Resize(ArrLines,
ArrLines->Length + 4);
// Смена размеров массива
ArrLines[ArrLines->Length - 4] = "";
// Разделитель между массивами
ArrLines[ArrLines->Length - 3] = "";
// Разделитель между массивами
// Запись строк нового исходного и результата
// в массив, изменение стартовой позиции
// поиска текущей операции
ArrLines[ArrLines->Length - 2] = "Исходная
строка: \n" + txtInStr->Text + "\n";
ArrLines[ArrLines->Length - 1] =
(txtResult4->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" +
txtInStr->Text + "\n");
sw->WriteLine(txtResult4->Text);
sw->Close();
}
}
}
else // Если нет результата операции - сообщение пользователю
DialogResult = MessageBox::Show(this,
"Пожалуйста, выполните операцию перед сохранением",
"Обработка строк",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
