Где ошибка? Код Хэмминга (15,11) - C#

Узнай цену своей работы

Формулировка задачи:

Ввожу 11-битовое кодовое слово, умножаю его на порождающую матрицу, получаю закодированное слово, затем ввожу это закодированное слово и он пишет, что есть ошибка, хотя такого быть не должно. Где ошибка в коде найти не могу.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. namespace ConsoleApplication1
  7. {
  8. class Test
  9. {
  10. static void Main()
  11. {
  12. char[] data = new char[11];
  13. int[] encoded = new int[15];
  14. int[] edata = new int[15];
  15. int[] syndrome = new int[12];
  16. int[,] hmatrix = new int[4, 15]{{1,0,0,0,1,0,0,1,0,1,1,0,1,1,1},
  17. {0,1,0,0,1,1,0,0,1,0,1,1,0,1,1},
  18. {0,0,1,0,0,1,1,1,0,0,1,1,1,0,1},
  19. {1,0,0,1,0,0,1,0,1,1,0,1,1,1,1}};
  20. char[,] gmatrix = new char[11, 15] { { '1', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' },
  21. { '0', '1', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0' },
  22. { '0', '0', '1', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0' },
  23. { '1', '0', '1', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0' },
  24. { '0', '1', '0', '1', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0' },
  25. { '1', '0', '0', '1', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0' },
  26. { '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0' },
  27. { '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0' },
  28. { '1', '0', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0' },
  29. { '1', '1', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0' },
  30. { '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1' }};
  31. int i, j;
  32. Console.Write("\nКод Хэмминга. Кодирование\n\nВведите 11-битовое слово: \n");
  33. for (int d = 0; d < 11; d++)
  34. {
  35. data[d] = Convert.ToChar(Console.ReadLine());
  36. }
  37. //Console.Write("\nGenerator matrix enter\n");
  38. /* for(i=0;i<11;i++){
  39. for(j=0;j<15;j++){
  40. Console.Write("{0},{1}",i,j);
  41. gmatrix[i,j]=Convert.ToChar(Console.ReadLine());
  42. }
  43. Console.WriteLine();
  44. }
  45. */
  46. Console.Write("\nПорождающая матрица\n");
  47. for (i = 0; i < 11; i++)
  48. {
  49. for (j = 0; j < 15; j++)
  50. {
  51. Console.Write("{0} \t|", gmatrix[i, j]);
  52. }
  53. Console.WriteLine();
  54. }
  55. Console.WriteLine("\nКодированные данные\n");
  56. for (i = 0; i < 15; i++)
  57. {
  58. for (j = 0; j < 11; j++)
  59. encoded[i] += ((data[j] - 0) * (gmatrix[j, i] - 0));
  60. encoded[i] = encoded[i] % 2;
  61. Console.Write("{0} |", encoded[i]);
  62. }
  63. Console.Write("\nКод Хэмминга. Декодирование\n\nВведите кодированные данные : \n");
  64. for (i = 0; i < 15; i++)
  65. edata[i] = Convert.ToChar(Console.ReadLine());
  66. for (i = 0; i < 4; i++)
  67. {
  68. for (j = 0; j < 15; j++)
  69. syndrome[i] += (edata[j] * hmatrix[i, j]);
  70. syndrome[i] = syndrome[i] % 2;
  71. }
  72. for (j = 0; j < 15; j++)
  73. if ((syndrome[0] == hmatrix[0, j]) && (syndrome[1] == hmatrix[1, j]) && (syndrome[2] == hmatrix[2, j]) && (syndrome[3] == hmatrix[3, j]))
  74. break;
  75. if (j == 15)
  76. Console.Write("\nОшибок нет\n");
  77. else
  78. {
  79. Console.Write("\nОшибка получена в {0} бите данных\n", j + 1);
  80. edata[j] = 0;
  81. Console.Write("\nДанные должны быть такими : ");
  82. for (j = 0; j < 15; j++)
  83. if (edata[j] == 48)
  84. Console.Write("{0} |", 0);
  85. else if (edata[j] == 49)
  86. Console.Write("{0} |", 1);
  87. else
  88. Console.Write("{0} |", edata[j]);
  89. }
  90. Console.ReadKey();
  91. }
  92. }
  93. }
Например я ввожу 10100101111. Получаю закодированное слово 100010100101111. Ввожу 100010100101111 и он пишет, что ошибка находится в 4 бите. Такого быть не должно.
Хэлпаните как-нибудь уже

Решение задачи: «Где ошибка? Код Хэмминга (15,11)»

textual
Листинг программы
  1. Console.Write("\nДанные должны быть такими : ");
  2.                 for (j = 0; j < 15; j++)
  3.                     if (edata[j] == 48)
  4.                         Console.Write("{0} |", 0);
  5.                     else if (edata[j] == 49)
  6.                         Console.Write("{0} |", 1);
  7.                     else
  8.                         Console.Write("{0} |", edata[j]);
  9.             }
  10.  
  11.             Console.ReadKey();
  12.         }
  13.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы