//сложение по модулю 2 двух битовых последовательностей //размер конечно должен быть одинаковый public int[] xorVectVect(int[] a, int[] b) { if (a == null) { Console.WriteLine("PANIC! <xorVectVect(a,b)> input parameter a is null"); return(null); } if (b == null) { Console.WriteLine("PANIC! <xorVectVect(a,b)> input parameter b is null"); return(null); } if (a.Length != b.Length) { return(null); } int[] sum = new int[a.Length]; for (int i = 0; i < a.Length; i++) { if (Hem.isEven(a[i] + b[i])) { sum[i] = 0; } else { sum[i] = 1; } } return(sum); }
static void Main(string[] args) { Console.WriteLine("hem encode start"); Console.Write("введите сигнал:\t\t"); string inputMsg = Console.ReadLine(); //string inputMsg = "101"; int n = inputMsg.Length; if ((n < 2) || (n > 10)) { Console.WriteLine("количесво бит в сообщении должно быть от 3 до 10."); Environment.Exit(0); } // объект класса Hem обеспечивает кодирование/декодирование, проверку сообщений // в нём хранятся матрицы соответствующие данной длине сообщения Hem hem = new Hem(n); if (hem.k < 0) { Console.WriteLine("количество бит во входном сигнале больше допустимого, количество бит должно быть от 3 до 10"); } //отладочный вывод матриц { /*Console.WriteLine("G"); * hem.PrintG(); * Console.WriteLine("H"); * hem.PrintH(); * Console.WriteLine("Ht"); * hem.PrintHt();*/ } int[] a = Hem.StrToBits(inputMsg); int[] b = hem.encode(a); Console.WriteLine("закодированный сигнал:\t" + Hem.BitsToStr(b)); Console.Write("исправьте сигнал:\t"); b = Hem.StrToBits(Console.ReadLine()); //b = Hem.StrToBits("001101"); //sindrom() возвращает битовый массив ошибки //результат нужно проверять на null - это признак внутренней ошибки int[] sind = hem.sindrom(b); Console.WriteLine("синдром:\t\t" + Hem.BitsToStr(sind)); int e = Hem.BitsToInt(sind); if (e == 0) { Console.WriteLine("ошибка отсутствует:\t" + e); } else { //если ошибка есть, то надо ковырять //ищем в генерирующей таблице G строку в которой контрольные биты совпадают с синдромом e = hem.errorPos(sind); if (e >= 0) { Console.WriteLine("позиция ошибки:\t\t" + e); b = hem.fix(b, e); } else { Console.WriteLine("сигнал получен верный, ошибочно передан один из битов коррекции"); } } int[] B = hem.signal(b); Console.WriteLine("правильный сигнал:\t" + Hem.BitsToStr(B)); }