Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЭС 1.docx
Скачиваний:
8
Добавлен:
14.06.2025
Размер:
708 Кб
Скачать
☆

Приложение а

«Код main.c»

using System;

using System.Collections.Generic;

using System.Linq;

class HammingCodeSimulation

{

static void Main()

{

Console.Write("Введите строку: ");

string input = Console.ReadLine();

// Преобразование в ASCII-код

List<string> binaryBlocks = ToAscii(input);

// Код Хемминга

List<string> encodedBlocks = binaryBlocks.Select(EncodeHamming).ToList();

// Ошибка 50%

List<string> transmittedBlocks = encodedBlocks.Select(SimulateTransmission).ToList();

// Исправление ошибки

List<string> correctedBlocks = transmittedBlocks.Select(CorrectHamming).ToList();

// Декодирование

List<string> decodedBinary = correctedBlocks.Select(DecodeHamming).ToList();

// Преобразование обратно в строку

string output = ConvertFromBinaryAscii(decodedBinary);

k1:

Console.WriteLine($"\nПринятая строка: {output}");

// Выбор символа

Console.Write("\nВведите индекс символа для анализа (0 - {0}): ", input.Length - 1);

int index = int.Parse(Console.ReadLine());

Console.WriteLine($"\nАнализ символа '{input[index]}' под индексом {index}:");

Console.WriteLine($"1. Двоичное ASCII: {binaryBlocks[index]}");

Console.WriteLine($"2. Код Хемминга: {encodedBlocks[index]}");

Console.WriteLine($"3. После передачи: {transmittedBlocks[index]}");

Console.WriteLine($"4. После исправления: {correctedBlocks[index]}");

Console.WriteLine($"5. Расшифрованный байт: {decodedBinary[index]}");

Console.WriteLine($"6. Итоговый символ: {(char)Convert.ToByte(decodedBinary[index], 2)}");

goto k1;

}

public static List<string> ToAscii(string input)

{

List<string> binaryList = new List<string>();

foreach (char c in input)

{

string binary = Convert.ToString((byte)c, 2).PadLeft(8, '0');

binaryList.Add(binary);

}

return binaryList;

}

public static string ConvertFromBinaryAscii(List<string> binaryList)

{

return new string(binaryList.Select(b => (char)Convert.ToByte(b, 2)).ToArray());

}

// Хэмминг

static string EncodeHamming(string data)

{

int[] bits = new int[12];

bits[2] = data[0] - '0';

bits[4] = data[1] - '0';

bits[5] = data[2] - '0';

bits[6] = data[3] - '0';

bits[8] = data[4] - '0';

bits[9] = data[5] - '0';

bits[10] = data[6] - '0';

bits[11] = data[7] - '0';

bits[0] = bits[2] ^ bits[4] ^ bits[6] ^ bits[8] ^ bits[10];

bits[1] = bits[2] ^ bits[5] ^ bits[6] ^ bits[9] ^ bits[10];

bits[3] = bits[4] ^ bits[5] ^ bits[6] ^ bits[11];

bits[7] = bits[8] ^ bits[9] ^ bits[10] ^ bits[11];

return string.Join("", bits);

}

// Ошибка в случайном бите

static string SimulateTransmission(string code)

{

Random rnd = new Random();

char[] bits = code.ToCharArray();

if (rnd.Next(2) == 0)

{

int pos = rnd.Next(12);

bits[pos] = bits[pos] == '0' ? '1' : '0';

}

return new string(bits);

}

// Исправление ошибок

static string CorrectHamming(string code)

{

int[] bits = code.Select(c => c - '0').ToArray();

int p1 = bits[0] ^ bits[2] ^ bits[4] ^ bits[6] ^ bits[8] ^ bits[10];

int p2 = bits[1] ^ bits[2] ^ bits[5] ^ bits[6] ^ bits[9] ^ bits[10];

int p4 = bits[3] ^ bits[4] ^ bits[5] ^ bits[6] ^ bits[11];

int p8 = bits[7] ^ bits[8] ^ bits[9] ^ bits[10] ^ bits[11];

int errorPosition = p1 * 1 + p2 * 2 + p4 * 4 + p8 * 8;

if (errorPosition != 0)

{

bits[errorPosition - 1] ^= 1; // Исправление

}

return string.Join("", bits);

}

// Вывод

static string DecodeHamming(string code)

{

int[] bits = code.Select(c => c - '0').ToArray();

string data = $"{bits[2]}{bits[4]}{bits[5]}{bits[6]}{bits[8]}{bits[9]}{bits[10]}{bits[11]}";

return data;

}

}

Томск 2025

Соседние файлы в предмете Теория электрической связи