Консольное приложение, использующее алгоритм Хемминга для поиска ошибок в коде - PullRequest
1 голос
/ 10 ноября 2010

Мне нужно консольное приложение для коррекции байтов, используя алгоритм Хемминга.Кто-нибудь может мне помочь в этом вопросе?

Вводимое слово будет, например: 11100100

Ответы [ 2 ]

1 голос
/ 11 ноября 2010
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Bits
{
    class Program
    {
        static void Main(string[] args)
        {
            string NrBinary;
            int pp, Key, number;
            double x, y;
            Console.WriteLine("Give binary value till 8 bit: ");
            NrBinary = Console.ReadLine();
            if (NrBinary.Length <= 8)
            {
                if (NrBinary.Length == 1) NrBinary = "0000000" + NrBinary;
                if (NrBinary.Length == 2) NrBinary = "000000" + NrBinary;
                if (NrBinary.Length == 3) NrBinary = "00000" + NrBinary;
                if (NrBinary.Length == 4) NrBinary = "0000" + NrBinary;
                if (NrBinary.Length == 5) NrBinary = "000" + NrBinary;
                if (NrBinary.Length == 6) NrBinary = "00" + NrBinary;
                if (NrBinary.Length == 7) NrBinary = "0" + NrBinary;


                pp = NrBinary.Length;
                number = Convert.ToInt32(NrBinary);
                Console.WriteLine("PP = " + pp);

                for (Key = 0; Key < pp; ++Key)
                {
                    x = Math.Pow(2, Key) - 1;
                    y = pp + Key;

                    if (x >= y)
                    {
                        goto Mess;
                    }
                }
            Mess:
                Console.WriteLine("Controled bit needed Key = " + Key + "\n");

                int[] parity = new int[pp];
                int[] DI = new int[pp];
                int[] CI = new int[Key];

                DI[0] = number % 10;
                DI[1] = (number / 10) % 10;
                DI[2] = (number / 100) % 10;
                DI[3] = (number / 1000) % 10;
                DI[4] = (number / 10000) % 10;
                DI[5] = (number / 100000) % 10;
                DI[6] = (number / 1000000) % 10;
                DI[7] = (number / 10000000) % 10;

                CI[0] = DI[0] ^ DI[1] ^ DI[3] ^ DI[4] ^ DI[6];
                CI[1] = DI[0] ^ DI[2] ^ DI[3] ^ DI[5] ^ DI[6];
                CI[2] = DI[1] ^ DI[2] ^ DI[3] ^ DI[7];
                CI[3] = DI[4] ^ DI[5] ^ DI[6] ^ DI[7];

                Console.WriteLine("\n  = " + CI[0] + "" + CI[1] + "" + CI[2] + "" + CI[3] + "\n");
                Console.Write("Bit with Hamming code: ");
                Console.WriteLine(DI[7] + "" + DI[6] + "" + DI[5] + "" + DI[4] + "" + CI[3] + "" + DI[3]
                + "" + DI[2] + "" + DI[1] + "" + CI[2] + "" + DI[0] + "" + CI[1] + "" + CI[0]);
            }
            else
            {
                Console.WriteLine("\n\n 8 bit character maximaly:)");
            }
        }
    }
}
0 голосов
/ 10 ноября 2010

В предположении, что это домашняя работа, вот указатель на общий алгоритм .Попробуйте сами, опубликуйте информацию о том, что вы пробовали, и о проблемах, с которыми вы столкнулись, и люди могут помочь вам.

...