Кодирование методом контроля четности - Pascal

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

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

Задание: Кодирование методом контроля чётности. Вводится k - число символов в блоке и последовательность двоичных символов, длина которой кратна (k-1). Если кратность нарушается, то последние символы последовательности игнорируются. Для каждой комбинации из (k-1) символов по методу контроля четности определяется значение k-ого, контрольного, символа и вся комбинация из k символов добавляется в результирующую последовательность, выводимую на экран по окончании кодирования всей входной последовательности символов. Я написал программу, но она работает неверно и неверно кодирует, помогите найти ошибку или исправить код, В общем случае : Вводим число k, затем двоичный код, отбрасываем конец пока длина строки не будет кратна k-1, преобразую строку в вид где на месте k пробелы, и надо посчитать, если в одной части ( первые k-1 символы ) количество едениц кратно 2 то ставим еденицу, иначе ноль, и так со всеми частями строки, но вот этот момент я не могу сделать. Помогите пожалуйста. Писал на PascalABC.NET
Листинг программы
  1. Var
  2. i,k,q,g,l,h,b,f:integer;
  3. a: string;
  4. begin
  5. writeln('Введите k');
  6. readln(k);
  7. b:=0;
  8. k:=k-1;
  9. writeln('Введите последовательность двоичных чисел');
  10. read(a);
  11. q:=0;
  12. for i:=1 to length(a) do
  13. q:=q+1;
  14. repeat
  15. if q mod k = 0 then
  16. else
  17. delete(a,length(a),1);
  18. q:=length(a);
  19. writeln ('сокращаем количество символов до: ',q);
  20. until (q mod k =0 );
  21. g:=k;
  22. repeat
  23. insert (' ', a, g+1);
  24. q:=q+1;
  25. g:=g+k+1;
  26. until g=q;
  27. writeln ('Преобразуем строку: ',a);
  28. h:=k+1;
  29. for l:=1 to length(a) do
  30. if (a[l]=' ') then
  31. for f:=1 to h do
  32. if a[f]='1' then
  33. b:=b+1
  34. else b:=b;
  35. if b mod 2 = 0 then
  36. a[h]:='0'
  37. else
  38. a[h]:='1';
  39. h:=h*2;
  40. b:=0;
  41. writeln ('Закодированная последовательность: ',a);
  42. end.

Решение задачи: «Кодирование методом контроля четности»

textual
Листинг программы
  1. begin
  2.   var k := ReadLnInteger('Введите k:'); k -= 1;
  3.   var s := ReadLnString('Введите последовательность двоичных чисел:');
  4.   Delete(s, s.Length - s.Length mod k + 1, k);
  5.   WriteLn('Сокращаем количество символов до ', s.Length div k * k, ': ', s);
  6.   for var i := 1 to s.Length div k do insert(' ', s, i * k + i);
  7.   WriteLn('Преобразуем строку: ', s);
  8.   for var i := 1 to s.Length div (k + 1) do
  9.   begin
  10.     var c := 0;
  11.     for var j := (i - 1) * (k + 1) + 1 to i * (k + 1) - 1 do
  12.       if s[j] = '1' then c += 1;
  13.     s[i * (k + 1)] := chr(48 + c mod 2);
  14.   end;
  15.   WriteLn('Закодированная последовательность: ', s)
  16. end.

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


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

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

7   голосов , оценка 3.857 из 5

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

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

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