3 Текст программы
1-ый проект:
private:
// === Кнопка "Сжать массив" ===
void compressButton_Click(Object^ sender, EventArgs^ e) {
if (String::IsNullOrWhiteSpace(inputTextBox->Text)) {
MessageBox::Show("Введите данные массива!", "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
std::vector<int> inputArray = ParseInputString(inputTextBox->Text);
if (inputArray.empty()) return;
std::vector<int> compressedArray;
for (int num : inputArray) {
if (num != 0) compressedArray.push_back(num);
}
outputTextBox->Text = VectorToString(compressedArray);
saveToFileButton->Enabled = true;
// Обновление статистики
statsTextBox->Text = String::Format(
"Исходный размер: {0}\nРазмер после сжатия: {1}\nУдалено нулей: {2}",
inputArray.size(), compressedArray.size(), inputArray.size() - compressedArray.size());
}
// === Кнопка "Сгенерировать случайный массив" ===
void randomGenerateButton_Click(Object^ sender, EventArgs^ e) {
int size = Decimal::ToInt32(arraySizeUpDown->Value);
int min = Decimal::ToInt32(minValueUpDown->Value);
int max = Decimal::ToInt32(maxValueUpDown->Value);
if (min > max) std::swap(min, max);
if (size <= 0) return;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dist(min, max);
std::vector<int> randomArray(size);
for (int& num : randomArray) num = dist(gen);
// Гарантируем хотя бы один ноль
if (std::find(randomArray.begin(), randomArray.end(), 0) == randomArray.end()) {
randomArray[rand() % size] = 0;
}
inputTextBox->Text = VectorToString(randomArray);
outputTextBox->Clear();
compressButton->Enabled = true;
saveToFileButton->Enabled = false;
}
// === Кнопка "Загрузить из файла" ===
void loadFromFileButton_Click(Object^ sender, EventArgs^ e) {
OpenFileDialog^ dialog = gcnew OpenFileDialog();
dialog->Filter = "Текстовые файлы (*.txt)|*.txt";
if (dialog->ShowDialog() == DialogResult::OK) {
try {
String^ content = File::ReadAllText(dialog->FileName);
inputTextBox->Text = Regex::Replace(content, "[^0-9,\\- \r\n]", "");
compressButton->Enabled = true;
}
catch (Exception^ ex) {
MessageBox::Show("Ошибка чтения: " + ex->Message, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}
}
// === Кнопка "Сохранить в файл" ===
void saveToFileButton_Click(System::Object^ sender, System::EventArgs^ e) {
if (String::IsNullOrWhiteSpace(outputTextBox->Text)) {
MessageBox::Show("Нет данных для сохранения!", "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Warning);
return;
}
SaveFileDialog^ dialog = gcnew SaveFileDialog();
dialog->FileName = "array_result.txt";
if (dialog->ShowDialog() == DialogResult::OK) {
try {
String^ content = String::Format(
"Исходный массив:\n{0}\n\nСжатый массив:\n{1}\n\n{2}",
inputTextBox->Text, outputTextBox->Text, statsTextBox->Text);
File::WriteAllText(dialog->FileName, content);
MessageBox::Show("Файл сохранен!", "Успех", MessageBoxButtons::OK,
MessageBoxIcon::Information);
}
catch (Exception^ ex) {
MessageBox::Show("Ошибка сохранения: " + ex->Message, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}
}
// === Кнопка "Очистить" ===
void clearButton_Click(Object^ sender, EventArgs^ e) {
inputTextBox->Clear();
outputTextBox->Clear();
statsTextBox->Clear();
compressButton->Enabled = false;
saveToFileButton->Enabled = false;
}
// Вспомогательные функции
std::vector<int> ParseInputString(String^ input) {
std::vector<int> result;
array<String^>^ elements = input->Split(
gcnew array<Char> { ' ', ',', ';', '\t' },
StringSplitOptions::RemoveEmptyEntries);
for each (String ^ element in elements) {
try {
result.push_back(Int32::Parse(element->Trim()));
}
catch (...) {
MessageBox::Show("Ошибка формата: " + element, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
return std::vector<int>();
}
}
return result;
}
String^ VectorToString(const std::vector<int>& vec) {
String^ result = "";
for (int num : vec) result += num.ToString() + " ";
return result->Trim();
}
2-ой проект:
private:
System::Void buttonGenerate_Click(System::Object^ sender, System::EventArgs^ e)
{
try
{
int n = Int32::Parse(textBoxN->Text);
// Генерация матрицы
std::vector<std::vector<int>> matrix(n, std::vector<int>(n, 0));
for (int i = 0; i < n; ++i)
{
matrix[i][i] = 1; // Главная диагональ
matrix[i][n - 1 - i] = 1; // Побочная диагональ
}
// Отображение матрицы
DisplayMatrix(matrix);
}
catch (Exception^)
{
MessageBox::Show("Введите корректное число!", "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}
private:
System::Void bSaveToFile_Click(System::Object^ sender, System::EventArgs^ e)
{
// Проверка наличия данных
if (String::IsNullOrWhiteSpace(richTextBoxMatrix->Text))
{
MessageBox::Show("Сначала сгенерируйте матрицу!", "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Warning);
return;
}
// Настройка диалога сохранения
SaveFileDialog^ saveDialog = gcnew SaveFileDialog();
saveDialog->Filter = "Text files (*.txt)|*.txt";
saveDialog->Title = "Сохранить матрицу";
saveDialog->FileName = "matrix.txt";
if (saveDialog->ShowDialog() != Windows::Forms::DialogResult::OK)
return;
String^ filePath = saveDialog->FileName;
try
{
// Формирование содержимого файла
String^ content = String::Format(
"Матрица:\n{0}\nРазмер: {1}x{1}\nЕдиниц: {2}",
richTextBoxMatrix->Text,
textBoxN->Text,
CountOnesInMatrix(richTextBoxMatrix->Text));
// Сохранение в файл
File::WriteAllText(filePath, content);
MessageBox::Show("Матрица сохранена!", "Успех",
MessageBoxButtons::OK, MessageBoxIcon::Information);
}
catch (Exception^ ex)
{
MessageBox::Show("Ошибка сохранения: " + ex->Message, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}
// Вспомогательная функция для подсчета единиц
int CountOnesInMatrix(String^ matrixText)
{
return matrixText->Split('1')->Length - 1;
}
3-ий проект:
// Загрузка из файла
System::Void btnLoadFromFile_Click(System::Object^ sender, System::EventArgs^ e) {
if (openFileDialog->ShowDialog() != DialogResult::OK) return;
try {
String^ content = File::ReadAllText(openFileDialog->FileName,
Encoding::UTF8);
tbInput->Text = FilterStudentList(content);
}
catch (Exception^ ex) {
MessageBox::Show("Ошибка загрузки: " + ex->Message, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}
// Сохранение в файл
System::Void btnSaveToFile_Click(System::Object^ sender, System::EventArgs^ e) {
if (String::IsNullOrWhiteSpace(tbOutput->Text)) {
MessageBox::Show("Нет данных для сохранения!", "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Warning);
return;
}
if (saveFileDialog->ShowDialog() != DialogResult::OK) return;
try {
File::WriteAllText(saveFileDialog->FileName, tbOutput->Text,
Encoding::UTF8);
MessageBox::Show("Файл сохранен!", "Успех", MessageBoxButtons::OK,
MessageBoxIcon::Information);
}
catch (Exception^ ex) {
MessageBox::Show("Ошибка сохранения: " + ex->Message, "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
}
}
// Основная обработка списка студентов
void ProcessStudentList(bool silentMode) {
if (String::IsNullOrWhiteSpace(tbInput->Text)) {
MessageBox::Show("Введите список учеников!", "Ошибка",
MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
array<String^>^ students = tbInput->Text->Split('\n');
List<String^>^ validStudents = gcnew List<String^>();
List<String^>^ invalidStudents = gcnew List<String^>();
for each (String ^ student in students) {
String^ trimmed = student->Trim();
if (IsValidStudent(trimmed)) {
validStudents->Add(FormatStudentName(trimmed));
}
else if (!String::IsNullOrEmpty(trimmed)) {
invalidStudents->Add(trimmed);
}
}
if (invalidStudents->Count > 0) {
ShowValidationErrors(invalidStudents);
}
validStudents->Sort();
tbOutput->Text = GenerateOutput(validStudents);
}
}
