Поменять в файле местами минимальное и максимальное значения среди четных и нечетных элементов - C#

Узнай цену своей работы

Формулировка задачи:

Дан бинарный файл целых чисел. Поменять в нем местами минимальное и максимальное значения среди четных элементов. То же самое выполнить для нечетных элементов

Решение задачи: «Поменять в файле местами минимальное и максимальное значения среди четных и нечетных элементов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ConsoleApplication3
  9. {
  10.  
  11.     class Program
  12.     {
  13.         private static Stream _stream;
  14.  
  15.         static void Main(string[] args)
  16.         {
  17.             var fileName = @"E:\Документы\numbers.bin";
  18.             using (_stream = new FileStream(fileName, FileMode.Create,
  19.                 FileAccess.Write, FileShare.None))
  20.             {
  21.                 WriteIntegers(5, 4, 1, 3, 6, 8);
  22.             }
  23.  
  24.  
  25.             Console.WriteLine("Исходные данные из файла " + fileName);
  26.             PrintToConsole(fileName);
  27.  
  28.  
  29.             using (_stream = new FileStream(fileName, FileMode.Open,
  30.                 FileAccess.ReadWrite, FileShare.None))
  31.             {
  32.                 ExchangeMinMax(true); // true для четных
  33.                 ExchangeMinMax(false); // false для нечетных
  34.             }
  35.  
  36.             Console.WriteLine();
  37.             Console.WriteLine("Измененные данные из файла " + fileName);
  38.  
  39.             PrintToConsole(fileName);
  40.  
  41.  
  42.             Console.ReadKey();
  43.         }
  44.  
  45.         private static void PrintToConsole(string fileName)
  46.         {
  47.             using (_stream = File.OpenRead(fileName))
  48.             {
  49.                 var values = ReadIntegers();
  50.                 foreach (var value in values)
  51.                 {
  52.                     Console.WriteLine(value);
  53.                 }
  54.             }
  55.         }
  56.  
  57.         public static IEnumerable<int> ReadIntegers()
  58.         {
  59.             using (var br = new BinaryReader(_stream, Encoding.Default, true))
  60.             {
  61.                 var list = new List<int>();
  62.                 br.BaseStream.Seek(0, 0);
  63.                 while (br.BaseStream.Position != br.BaseStream.Length)
  64.                 {
  65.                     list.Add(br.ReadInt32());
  66.                 }
  67.                 return list;
  68.             }
  69.         }
  70.  
  71.  
  72.         public static void WriteIntegers(params int[] values)
  73.         {
  74.             using (var bw = new BinaryWriter(_stream, Encoding.Default, true))
  75.             {
  76.                 bw.Seek(0, 0);
  77.                 foreach (var i in values)
  78.                 {
  79.                     bw.Write(i);
  80.                 }
  81.             }
  82.         }
  83.  
  84.  
  85.         private static void ExchangeMinMax(bool evenOnly)
  86.         {
  87.             var minPos = 0;
  88.             var minVal = int.MaxValue;
  89.             var maxPos = 0;
  90.             var maxVal = int.MinValue;
  91.  
  92.             var pos = -sizeof(int);
  93.             var count = 0;
  94.  
  95.             using (var br = new BinaryReader(_stream, Encoding.Default, true))
  96.             {
  97.                 br.BaseStream.Seek(0, 0);
  98.                 while (br.BaseStream.Position != br.BaseStream.Length)
  99.                 {
  100.  
  101.                     var value = br.ReadInt32();
  102.                     pos += sizeof(int);
  103.  
  104.                     var flag = evenOnly ? value % 2 == 0 : value % 2 != 0;
  105.                     if (flag) {
  106.                         count++;
  107.                         if (value > maxVal)
  108.                         {
  109.                             maxVal = value;
  110.                             maxPos = pos;
  111.                         }
  112.  
  113.                         if (value < minVal)
  114.                         {
  115.                             minVal = value;
  116.                             minPos = pos;
  117.                         }
  118.                     }
  119.                 }
  120.             }
  121.  
  122.             if (count > 0 && maxVal != minVal)
  123.             {
  124.                 using (var bw = new BinaryWriter(_stream, Encoding.Default, true))
  125.                 {
  126.                     bw.Seek(minPos, 0);
  127.                     bw.Write(maxVal);
  128.                     bw.Seek(maxPos, 0);
  129.                     bw.Write(minVal);
  130.                 }
  131.             }
  132.         }
  133.  
  134.     }
  135. }

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


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

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

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы