3 Текст программы
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e)
{
NumberFormatInfo^ nfi = NumberFormatInfo::CurrentInfo;
ds = (char)nfi->NumberDecimalSeparator[0];
// Ввод десятичного разделителя из системы
}
private: System::Void CloseBtn_Click(System::Object^ sender, System::EventArgs^ e)
{
this->Close(); // Закрытие программы
}
private: System::Void txt_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
// Обработчик нажатий в поля ввода для генерации (мин. и макс.)
{
// Очистка исходного массива и результата
txtArray->Text = "";
txtResult->Text = "";
// Объявление переменной активного текстового поля
TextBox^ ActiveTextBox;
// Присваивание значения активного текстового поля
// соответствующей переменной
if (txtMin->ContainsFocus == true) ActiveTextBox = txtMin;
else if (txtMax->ContainsFocus == true) ActiveTextBox = txtMax;
// Если нажатая клавиша не цифровая.
if (!Char::IsDigit(e->KeyChar))
// Запрет на ввод более одного знака минуса.
if (e->KeyChar != '-' || ActiveTextBox->Text->IndexOf('-')
!= -1)
// Запрет на ввод более одного десятичного разделителя.
if (e->KeyChar != ds || ActiveTextBox->Text->IndexOf(ds) != -1)
// Если нажатая клавиша не является клавишей
// 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; // Запрет ввода
// Замена десятичного разделителя в начале числа на "0,".
if (e->KeyChar == ds) // Если введен десятичный разделитель
{
x1 = 0;
if (ActiveTextBox->Text != "" && ActiveTextBox->Text[0] == '-')
x1 = 1;
if (ActiveTextBox->Text->IndexOf(ds) == -1
&& ActiveTextBox->SelectionStart == x1)
{
// Если десятичный разделитель уже есть,
// то 0 вставлять не нужно
ActiveTextBox->Text =
ActiveTextBox->Text->Insert(x1, "0"); //Вставка 0
ActiveTextBox->SelectionStart = x1 + 1;
// Текстовый курсор в конец
}
}
// Перенос точки ввода минуса в начало (ввод минуса только спереди)
if (e->KeyChar == '-' && ActiveTextBox->Text->IndexOf('-') == -1)
ActiveTextBox->SelectionStart = 0; // Текстовый курсор в начало
}
private: System::Void txtNum_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
// Обработчик нажатий в поле ввода числа элементов для генерации
{
// Очистка исходного массива и результата
txtArray->Text = "";
txtResult->Text = "";
// Объявление переменной активного текстового поля
TextBox^ ActiveTextBox = txtNum;
// Если нажатая клавиша не цифровая.
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 txtArray_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
// Обработка нажатий в поле исходного массива
{
// Очистка полей для генерации и результата
txtNum->Text = "";
txtMin->Text = "";
txtMax->Text = "";
txtResult->Text = "";
}
private: System::Void GenerateBtn_Click(System::Object^ sender, System::EventArgs^ e) // Функция генерация массива
{
int ArrNum, ArrMinNum, ArrMaxNum;
bool CorrectInput = true;
if ((txtNum->Text != "") && (txtMin->Text != "")
&& (txtMax->Text != "")) // Если поля не пустые
{
try // Попытка перевести числа в тип Integer
{
ArrNum = Convert::ToInt16(txtNum->Text);
ArrMinNum = Convert::ToInt16(txtMin->Text);
ArrMaxNum = Convert::ToInt16(txtMax->Text);
}
catch (...)
// При некорректном вводе (при ошибке перевода в int) -
// сообщение об ошибке
{
CorrectInput = false;
DialogResult = MessageBox::Show(this,
"Значения должны быть в диапазоне от -32768 до 32767, а число элементов - от 1 до 1000",
"Обработка массива",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
if ((ArrMinNum > -32768) && (ArrMaxNum < 32767) && (ArrNum <= 1000) && (ArrNum > 0)) // Если числа в правильных диапазонах
{
if (ArrMaxNum < ArrMinNum)
// Если минимальное число больше максимального –
// меняет местами
{
int x = ArrMaxNum; // Вспомогательная переменная
ArrMaxNum = ArrMinNum;
ArrMinNum = x;
txtMin->Text = Convert::ToString(ArrMinNum);
// Вывод нового минимального
txtMax->Text = Convert::ToString(ArrMaxNum);
// Вывод нового максимального
}
// Массив целых чисел
array<int>^ arr = gcnew array<int>(ArrNum);
// Инициализация датчика случайных чисел
Random^ rnd = gcnew Random();
// Заполнение массива случайными числами
for (int i = 0; i < ArrNum; i++)
arr[i] = rnd->Next(ArrMinNum, ArrMaxNum + 1);
String^ ArrStr = "";
for (int i = 0; i < ArrNum; i++)
if (i < ArrNum - 1)
ArrStr = ArrStr + Convert::ToString(arr[i]) + " ";
else ArrStr = ArrStr + Convert::ToString(arr[i]);
txtArray->Text = ArrStr;
// Вывод строки массива в поле "Исходный массив"
}
else if (CorrectInput == true)
// Если числа не удовлетворяют условию диапазонов –
// сообщение пользователю
DialogResult = MessageBox::Show(this,
"Значения должны быть в диапазоне от -32768 до 32767, а число элементов - от 1 до 1000", "Обработка массива",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
else
// Если хотя бы одно поле для генерации не заполнено –
// сообщение пользователю
DialogResult = MessageBox::Show(this,
"Пожалуйста, введите количество элементов, а также минимальное и максимальное значение диапазона.", "Обработка массива",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
String^ FixString(String^ InputStr)
// Функция для исправления вводимой строки (в формат вывода массива)
{
array<int>^ Arr = gcnew array<int>(InputStr->Length);
// Создание нового массива типа integer
String^ NewStr = ""; // Переменная новой строки
Arr = ToArr(InputStr); // Обращение к функции перевода строки в массив
for (int i = 0; i < Arr->Length; i++)
NewStr += (Arr[i]) + " "; // Добавление элементов массива
NewStr = NewStr->Remove((NewStr->Length) - 1);
// Удаляет последний пробел
return(NewStr); // Возвращает исправленную строку
}
array<int>^ ToArr(String^ InputStr)
// Функция перевода строки в массив (делит строку посимвольно,
// заполняя массив, и через функцию исправления возвращает новый массив)
{
array<char>^ ArrChar = gcnew array<char>(InputStr->Length);
// Массив из элементов char
for (int n = 0; n < InputStr->Length; n++)
ArrChar[n] = (char)(InputStr[n]);
// Ввод символов строки в элементы массива как char
return(ArrConcat(ArrChar));
// Отправляет в функцию исправления, возвращает новый
// массив без лишних символов
}
array<int>^ ArrConcat(array<char>^ InputArr)
// Функция склеивания элементов массива
{
array<char>^ Arr = gcnew array<char>(InputArr->Length);
// Массив, который заполнится исходными элементами char
array<int>^ ArrInt = gcnew array<int>(Arr->Length);
// Новый массив с целочисленными значениями integer
// Строковые представления элементов
String^ El1 = "";
String^ El2 = "";
// Целочисленные представления элементов
int IntEl1 = 0;
int IntEl2 = 0;
// Счётчик элементов конечного массива с элементами integer
int p = 0;
// Счётчик проверенных элементов n массива Arr
int count = 0;
// Стартовая позиция "считывания" (склеивания)
int Start = 0;
// Флаг перехода к следующему элементу массива ArrInt
bool ScipFlag = true;
// Флаг постановки минуса "-"
bool MinusFlag = false;
for (int i = 0; i < InputArr->Length; i++)
// Заполнение массива Arr элементами переданного в функцию
// массива InputArr
Arr[i] = ((char)(InputArr[i]));
for (int a = 0; a < Arr->Length; a++)
// Цикл поиска начальной позиции считывания (склеивания)
{
if ((Arr[a] >= 48) && (Arr[a] <= 57))
// Если элемент является цифрой
{
ArrInt[0] = Convert::ToInt32(Char::ToString(Arr[a]));
// Перевод цифры в integer
Start = a; // Новая стартовая позиция
if (MinusFlag) // Если был включен флаг минуса
{
ArrInt[0] = Convert::ToInt32("-" + Convert::ToString(ArrInt[0]));
// Добавляем минус в начало элемента
MinusFlag = false; // Выключаем флаг минуса
}
break; // Остановка (выход из цикла)
}
else if (Arr[a] == '-') MinusFlag = true;
// Поиск минусов до стартовой позиции склеивания цифр,
// включение флага минуса
}
for (int n = Start; n < (Arr->Length - 1); n++)
// Цикл склеивания цифр в отдельные элементы нового массива
{
El1 = Convert::ToString(ArrInt[p]);
// Строковое представление текущего элемента нового массива
El2 = Char::ToString(Arr[n + 1]);
// Строковое представление следующего элемента старого массива
count = n;
// Счётчик n (для проверки на пустой элемент в конце)
if ((Arr[n+1] >= 48) && (Arr[n+1] <= 57))
// Если след. элемент - цифра
{
ArrInt[p] = Convert::ToInt32(El1 + El2);
// Добавление новой цифры к текущему элементу
// нового массива
ScipFlag = true;
// Включение флага перехода к следующему элементу
if (MinusFlag) // Если был включен флаг минуса
{
ArrInt[p] = Convert::ToInt32("-" + Convert::ToString(ArrInt[p]));
// Добавляем минус в начало элемента
MinusFlag = false; // Выключаем флаг минуса
}
}
else if (ScipFlag)
// Если след. элемент - НЕ цифра, И включен флаг перехода
{
p += 1; // Переходим к следующему элементу
ScipFlag = false;
// Выключаем флаг перехода (чтобы не было лишних
// пустых элементов при нескольких разделителях)
if (((Arr[n + 1]) == '-')&& (Arr[n + 2] >= 48) &&
(Arr[n + 2] <= 57)) MinusFlag = true;
// Если следующий элемент - минус, то включаем флаг минуса
}
else if (((Arr[n + 1]) == '-') && (Arr[n + 2] >= 48) &&
(Arr[n + 2] <= 57)) MinusFlag = true;
// Если следующий элемент - минус, то включаем флаг минуса
}
if (count > 0)
if (!((Arr[count + 1] >= 48) && (Arr[count + 1] <= 57)))
p -= 1;
// Если в конце был любой разделитель (например пробел) –
// удалит лишний добавившийся элемент массива
if (p < InputArr->Length) // Если массив уменьшился в размерах
{
array<int>^ ArrIntNew = gcnew array<int>(p+1);
// Создаём новый массив длиной p+1 (количеством заполненных
// элементов массива ArrInt)
for (int n = 0; n <= p; n++) // Заполняем новый массив
ArrIntNew[n] = ArrInt[n];
return (ArrIntNew); // Функция возвращает новый массив
}
else return(ArrInt);
// Если размер остался прежним (почти никогда) – возвращаем
// массив ArrInt
}
private: System::Void FileInputBtn_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 (txtFileInput->Text == "") openFileDialog1->FileName = FileDirectory;
// Если своё имя файла не введено - выбор имени
// директории в качестве имени
else openFileDialog1->FileName = txtFileInput->Text;
// Если введено имя файла - его ввод
if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) // Если файл успешно выбран
{
if ((myStream = openFileDialog1->OpenFile()) != nullptr)
// Если файл успешно открыт
{
StreamReader^ sr =
gcnew StreamReader(openFileDialog1->FileName);
String^ ReadedStr = sr->ReadToEnd();
// Чтение всего файла в строку
txtArray->Text = FixString(ReadedStr);
// С помощью функции FixString представление содержимого
// файла в виде массива выводится в поле "Исходный массив"
txtResult->Text = ""; // Очистка результата
txtFileInput->Text = openFileDialog1->FileName;
// Запись имени файла в соответстующее поле
sr->Close();
myStream->Close();
}
}
}
private: System::Void txtArray_Leave(System::Object^ sender, System::EventArgs^ e) // Функция при покидании поля исходного массива
{
if (txtArray->Text != "") // Если поле не пустое
{
String^ InStr = txtArray->Text;
txtArray->Text = FixString(InStr);
// «Исправление» введённой строки массива
}
}
String^ ArrSum(array<int>^ Arr) // Функция нахождения суммы элементов массива
{
String^ NewStr = ""; // Переменная новой строки
int Sum = 0; // Переменная суммы элементов
for (int i = 0; i < Arr->Length; i++)
Sum = Sum + Arr[i];
// Подсчёт суммы прибавлением к предудущему значению суммы
// значения каждого нового элемента
NewStr = Convert::ToString(Sum);
return(NewStr);
}
String^ ArrAvg(array<int>^ Arr)
// Функция нахождения среднего значения элементов
{
String^ NewStr = ""; // Переменная новой строки
int Sum = 0; // Переменная суммы
double Avg = 0; // Переменная среднего значения
for (int i = 0; i < Arr->Length; i++)
Sum = Sum + Arr[i];
// Подсчёт суммы прибавлением к предудущему значению суммы
// значения каждого нового элемента
Avg = (Convert::ToDouble(Sum) / Convert::ToDouble(Arr->Length));
// Подсчёт среднего
NewStr = Convert::ToString(Avg); // Возврат в виде строки
return(NewStr);
}
String^ ArrMin(array<int>^ Arr) // Функция нахождения минимального элемента
{
String^ NewStr = ""; // Переменная новой строки
int Min = 32767; // Переменная минимального значения
for (int i = 0; i < Arr->Length; i++)
if (Min > Arr[i]) Min = Arr[i];
// Значения элементов массива в цикле сравниваются с
// минимальным значением
NewStr = Convert::ToString(Min);
return(NewStr);
}
String^ ArrMax(array<int>^ Arr) // Функция нахождения максимального элемента
{
String^ NewStr = ""; // Переменная новой строки
int Max = 0; // Переменная максимального значения
for (int i = 0; i < Arr->Length; i++)
if (Max < Arr[i]) Max = Arr[i];
// Значения элементов массива в цикле сравниваются с
// максимальным значением
NewStr = Convert::ToString(Max);
return(NewStr);
}
String^ ArrEven(array<int>^ Arr) // Функция нахождения чётных элементов
{
String^ NewStr = ""; // Переменная новой строки
for (int i = 0; i < Arr->Length; i++)
if ((Arr[i] % 2) == 0)
NewStr += Arr[i] + " ";
// Проверяется чётность элементов и чётные
// добавляются в строку
if ((NewStr->Length) > 0)
NewStr = NewStr->Remove((NewStr->Length) - 1);
// Удаляет последний пробел
return(NewStr);
}
String^ ArrOdd(array<int>^ Arr) // Функция нахождения нечётных элементов
{
String^ NewStr = ""; // Переменная новой строки
for (int i = 0; i < Arr->Length; i++)
if ((Arr[i] % 2) != 0)
NewStr += Arr[i] + " ";
// Проверяется чётность элементов и нечётные
//добавляются в строку
if ((NewStr->Length) > 0)
NewStr = NewStr->Remove((NewStr->Length) - 1);
// Удаляет последний пробел
return(NewStr);
}
String^ ArrSortUp(array<int>^ Arr) // Функция сортировки по возрастанию
{
String^ NewStr = ""; // Переменная новой строки
for (int i = 0; i < Arr->Length; i++)
{
for (int n = 0; n < Arr->Length-1; n++)
{
if (Arr[n] > Arr[n + 1])
{
int b = Arr[n]; // Дополнительная переменная
Arr[n] = Arr[n + 1];
// Меняются местами значения элементов
Arr[n + 1] = b;
}
}
}
for (int i = 0; i < Arr->Length; i++)
NewStr += Arr[i] + " "; // Запись элементов в строку
NewStr = NewStr->Remove((NewStr->Length) - 1);
// Удаляет последний пробел
return(NewStr);
}
String^ ArrSortDown(array<int>^ Arr) // Функция сортировки по убыванию
{
String^ NewStr = ""; // Переменная новой строки
for (int i = 0; i < Arr->Length; i++)
{
for (int n = 0; n < Arr->Length - 1; n++)
{
if (Arr[n] < Arr[n + 1])
{
int b = Arr[n]; // Дополнительная переменная
Arr[n] = Arr[n + 1];
// Меняются местами значения элементов
Arr[n + 1] = b;
}
}
}
for (int i = 0; i < Arr->Length; i++)
NewStr += Arr[i] + " "; // Запись элементов в строку
NewStr = NewStr->Remove((NewStr->Length) - 1);
// Удаляет последний пробел
return(NewStr);
}
private: System::Void RB_CheckedChanged(System::Object^ sender, System::EventArgs^ e) // Функция при нажатии на кнопки смены операции
{
txtResult->Text = ""; // Очистка результата
// Значение RB меняется в зависимости от нажатой кнопки
if (SumRB->Checked) RB = 1;
if (AvgRB->Checked) RB = 2;
if (MinRB->Checked) RB = 3;
if (MaxRB->Checked) RB = 4;
if (EvenRB->Checked) RB = 5;
if (OddRB->Checked) RB = 6;
if (MinToMaxRB->Checked) RB = 7;
if (MaxToMinRB->Checked) RB = 8;
}
private: System::Void RunBtn_Click(System::Object^ sender, System::EventArgs^ e) // Функция обработки нажатия на кнопку "Выполнить"
{
if (txtArray->Text != "") // Если поле исходного массива не пустое
{
String^ InStr = txtArray->Text;
// Ввод строки ввода из поля исходного массива
array<int>^ Arr = gcnew array<int>(InStr->Length);
// Новый массив с длиной как у этой строки
Arr = ToArr(InStr); // Перевод строки в массив функцией ToArr
switch (RB)
// Вывод результата в зависимости от выбранной операции
{
case 1:
txtResult->Text = "Сумма элементов: " + ArrSum(Arr);
break;
case 2:
txtResult->Text = "Среднее значение: " + ArrAvg(Arr);
break;
case 3:
txtResult->Text = "Минимальный элемент: " + ArrMin(Arr);
break;
case 4:
txtResult->Text = "Максимальный элемент: " + ArrMax(Arr);
break;
case 5:
txtResult->Text = "Чётные элементы: " + ArrEven(Arr);
break;
case 6:
txtResult->Text = "Нечётные элементы: " + ArrOdd(Arr);
break;
case 7:
txtResult->Text = "Сортировка по возрастанию: " +
ArrSortUp(Arr);
break;
case 8:
txtResult->Text = "Сортировка по убыванию: " +
ArrSortDown(Arr);
break;
default:
txtResult->Text = "";
}
}
else // Если исходного массива нет - сообщение пользователю
DialogResult = MessageBox::Show(this,
"Пожалуйста, введите массив", "Обработка массива",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}
private: System::Void FileOutputBtn_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 (txtFileOutput->Text == "")
saveFileDialog1->FileName = FileDirectory;
// Если поле имени файла вывода пустое,
// имя файла - сама директория
else saveFileDialog1->FileName = txtFileOutput->Text;
// Если заполнено имя файла ввода - выбор этого имени файла
if (txtResult->Text != "") // Если есть результат операции
{
if (saveFileDialog1->ShowDialog() ==
System::Windows::Forms::DialogResult::OK)
// Если файл сохранения успешно выбран
{
txtFileOutput->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, "Исходный массив: " +
txtArray->Text);
// Переменная индекса строки
// исходного массива в файле
int OperIndex =
ArrLines->IndexOf(ArrLines, txtResult->Text, StartIndex);
// Переменная индекса строки ТЕКУЩЕЙ операции
if (ArrLines->Length == 0) // Если файл пустой
{
ArrLines->Resize(ArrLines, 2);
// Смена размера массива
// Запись строк в массив, выбор стартовой
// позиции поиска текущей операции
ArrLines[0] = "Исходный массив: " +
txtArray->Text;
ArrLines[1] = txtResult->Text;
StartIndex = 0;
}
else if (InArrIndex == -1)
// Если не найден текущий исходный массив
{
ArrLines->Resize(ArrLines, ArrLines->Length + 3); // Смена размеров массива
ArrLines[ArrLines->Length - 3] = "";
// Разделитель между массивами
// Запись строк нового исходного и результата
// в массив, изменение стартовой позиции
// поиска текущей операции
ArrLines[ArrLines->Length - 2] =
"Исходный массив: " + txtArray->Text;
ArrLines[ArrLines->Length - 1] =
txtResult->Text;
StartIndex = ArrLines->Length - 2;
}
else if (OperIndex == -1)
// Если операция ещё не была
// (не найдена со стартовой позиции)
{
ArrLines->Resize(ArrLines, ArrLines->Length + 1); // Увеличение размера массива строк на 1
ArrLines[ArrLines->Length - 1] =
txtResult->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("Исходный массив: " + txtArray->Text);
sw->WriteLine(txtResult->Text);
sw->Close();
}
}
}
else // Если нет результата операции - сообщение пользователю
DialogResult = MessageBox::Show(this,
"Пожалуйста, выполните операцию перед сохранением",
"Обработка массива",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation,
MessageBoxDefaultButton::Button1);
}