Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по Visual Studio C++ (Волков) - ОТЧЁТЫ с подробным кодом / Лабораторная работа №6 (Обработка массива).docx
Скачиваний:
0
Добавлен:
04.09.2024
Размер:
3.07 Mб
Скачать

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

}