Подправить код, касаемый работы с файлами - 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]);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5