Поменять в файле местами минимальное и максимальное значения среди четных и нечетных элементов - 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);
- }
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д