using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.IO;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
//создадим массив, который состоит 8 бит
int[] nachmas = new int[8];
//заполним массив значениями с клавиатуры
for (int i = 0; i < 8; i++)
{
nachmas[i] = int.Parse(Console.ReadLine());
}
int t = 0;//j-счетчик 8-битного массива
//создадим массив для кода Хэмминга, который состоит из 12 бит
int[] Hemming = new int[12];
for (int i = 0; i < 12; i++)
{
//проверим, являются ли индексы массива контрольными значениями, и если нет, то заполним их
if ((i != 0) && (i != 1) && (i != 3) && (i != 7))
{
Hemming[i] = nachmas[t];
t++;
}
}
//посчитаем контрольные значения
int E1 = (Hemming[2] + Hemming[4] + Hemming[6] + Hemming[8] + Hemming[10]) % 2;
int E2 = (Hemming[2] + Hemming[5] + Hemming[6] + Hemming[9] + Hemming[10]) % 2;
int E4 = (Hemming[4] + Hemming[5] + Hemming[6] + Hemming[11]) % 2;
int E8 = (Hemming[8] +Hemming[9] + Hemming[10] + Hemming[11]) % 2;
//выведем контрольных значений
Console.WriteLine("Вывод контрольных значений: ");
Console.WriteLine("E1 = {0}, E2 = {1}, E4 = {2}, E8 = {3}", E1, E2, E4, E8);
//заполним индексы, оставленные для контрольных значений, контрольными значениями
Hemming[0] = E1;
Hemming[1] = E2;
Hemming[3] = E4;
Hemming[7] = E8;
Console.WriteLine("Итоговый массив: ");
for (int i = 0; i < 12; i++)
{
Console.Write(Hemming[i]);
Console.Write(" ");
}
Console.WriteLine();
Console.WriteLine("Введите разряд, в котором будет ошибка");
int error = int.Parse(Console.ReadLine());
//поменяем значение в разряде с ошибкой
if (Hemming[error - 1] == 0)
{
Hemming[error - 1] = 1;
}
else
{
Hemming[error - 1] = 0;
}
Console.WriteLine();
Console.WriteLine("Массив с ошибкой");
for (int i = 0; i < 12; i++)
{
Console.Write(Hemming[i]);
Console.Write(" ");
}
//посчитаем контрольные биты
int K1 = (E1 + (Hemming[2] + Hemming[4] + Hemming[6] + Hemming[8] + Hemming[10])) % 2;
int K2 = (E2 + (Hemming[2] + Hemming[5] + Hemming[6] + Hemming[9] + Hemming[10])) % 2;
int K4 = (E4 + (Hemming[4] + Hemming[5] + Hemming[6] + Hemming[11])) % 2;
int K8 = (E8 + (Hemming[8] + Hemming[9] + Hemming[10] + Hemming[11])) % 2;
int[] oshibka = new int[4];//создадим массив для вычисления ошибки
oshibka[0] = K1;
oshibka[1] = K2;
oshibka[2] = K4;
oshibka[3] = K8;
double index = 0;
//посчитаем разряд, в котором находится ошибка
for (int i = 0; i < oshibka.Length; i++)
{
index += oshibka[i] * Math.Pow(2, i);
}
Console.WriteLine(" ");
Console.WriteLine("Ошибка находится в разряде: ");
Console.Write(index);
Console.ReadKey();
}
}
}