Поменять в файле местами минимальное и максимальное значения среди четных и нечетных элементов - C#
Формулировка задачи:
Дан бинарный файл целых чисел. Поменять в нем местами
минимальное и максимальное значения среди четных элементов.
То же самое выполнить для нечетных элементов
Решение задачи: «Поменять в файле местами минимальное и максимальное значения среди четных и нечетных элементов»
textual
Листинг программы
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 { class Program { private static Stream _stream; static void Main(string[] args) { var fileName = @"E:\Документы\numbers.bin"; using (_stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { WriteIntegers(5, 4, 1, 3, 6, 8); } Console.WriteLine("Исходные данные из файла " + fileName); PrintToConsole(fileName); using (_stream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) { ExchangeMinMax(true); // true для четных ExchangeMinMax(false); // false для нечетных } Console.WriteLine(); Console.WriteLine("Измененные данные из файла " + fileName); PrintToConsole(fileName); Console.ReadKey(); } private static void PrintToConsole(string fileName) { using (_stream = File.OpenRead(fileName)) { var values = ReadIntegers(); foreach (var value in values) { Console.WriteLine(value); } } } public static IEnumerable<int> ReadIntegers() { using (var br = new BinaryReader(_stream, Encoding.Default, true)) { var list = new List<int>(); br.BaseStream.Seek(0, 0); while (br.BaseStream.Position != br.BaseStream.Length) { list.Add(br.ReadInt32()); } return list; } } public static void WriteIntegers(params int[] values) { using (var bw = new BinaryWriter(_stream, Encoding.Default, true)) { bw.Seek(0, 0); foreach (var i in values) { bw.Write(i); } } } private static void ExchangeMinMax(bool evenOnly) { var minPos = 0; var minVal = int.MaxValue; var maxPos = 0; var maxVal = int.MinValue; var pos = -sizeof(int); var count = 0; using (var br = new BinaryReader(_stream, Encoding.Default, true)) { br.BaseStream.Seek(0, 0); while (br.BaseStream.Position != br.BaseStream.Length) { var value = br.ReadInt32(); pos += sizeof(int); var flag = evenOnly ? value % 2 == 0 : value % 2 != 0; if (flag) { count++; if (value > maxVal) { maxVal = value; maxPos = pos; } if (value < minVal) { minVal = value; minPos = pos; } } } } if (count > 0 && maxVal != minVal) { using (var bw = new BinaryWriter(_stream, Encoding.Default, true)) { bw.Seek(minPos, 0); bw.Write(maxVal); bw.Seek(maxPos, 0); bw.Write(minVal); } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д