Подправить код, касаемый работы с файлами - C#
Формулировка задачи:
Вообще дан такой алгоритм:
Исходный файл f разбивается на два вспомогательных файла f1 и f2. Распределение происходит следующим образом: поочередно считываются записи ai исходной последовательности (неупорядоченной) таким образом, что если значения ключей соседних записей удовлетворяют условию f(ai)<=f(ai+1), то они записываются в первый вспомогательный файл f1. Как только встречаются f(ai)>f(ai+1), то записи ai+1 копируются во второй вспомогательный файл f2. Процедура повторяется до тех пор, пока все записи исходной последовательности не будут распределены по файлам.
Мой код:
Как можно исправить?
int[] Arr = new int[10];
TextWriter txtWriter = new StreamWriter("D:\\F.txt"); //Создали файл. StreamWriter реализует поток для записи через TextWriter.
{
Random rnd = new Random();
for (int i = 0; i < Arr.Length; i++)
{
Arr[i] = rnd.Next(100);
txtWriter.WriteLine(Arr[i]);//Записываем случайные числа в наш файл
}
}
txtWriter.Close(); //Закрываем поток
TextWriter txtWriter1 = new StreamWriter("D:\\F1.txt"); //создали файл F1.txt
TextWriter txtWriter2 = new StreamWriter("D:\\F2.txt"); //создали файл F2.txt
TextReader txtReader = new StreamReader("D:\\F.txt"); //Читаем наш файл
for (int i = 0; i < Arr.Length; i++)
{
if (Arr[i] < Arr[i+1]) //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Здесь пишет, что индекс находился за границами диапазона
txtWriter1.WriteLine(Arr[i]);
else
txtWriter2.WriteLine(Arr[i+1]);
}
txtReader.Close();
txtWriter1.Close();
txtWriter2.Close();
Console.ReadLine();Решение задачи: «Подправить код, касаемый работы с файлами»
textual
Листинг программы
bool firstfile = true; //создается переменная, в которую запоминается файл, в который мы сейчас пишем. По умолчанию мы пишем в первый файл, поэтому она изначально true, когда станет false-будем писать во второй.
for (int i = 1; i < Arr.Length; i++) //просматриваем массив
{
if (firstfile) txtWriter1.WriteLine(Arr[i - 1]); //тут пишем в файл, соответствующий значению переменной
else txtWriter2.WriteLine(Arr[i - 1]);
if (!(Arr[i - 1] <= Arr[i])) firstfile = !firstfile; //а тут меняем файл, в который мы запишем следующую переменную, если следующее значение больше предыдущего.
}
if (firstfile) txtWriter1.WriteLine(Arr[Arr.Length - 1]); //Тут пишем последний элемент в файл, в который мы писали на момент окончания цикла. Цикл его не записал по той причине, что ему надо сравнивать со следующим, а следующего после последнего нет.
else txtWriter2.WriteLine(Arr[Arr.Length - 1]);