Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 сем / индив 3.docx
Скачиваний:
0
Добавлен:
03.06.2025
Размер:
2 Мб
Скачать
☆

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);

}

}

Соседние файлы в папке 2 сем