Кодирование методом контроля четности - Pascal
Формулировка задачи:
Задание: Кодирование методом контроля чётности. Вводится k - число символов в блоке и последовательность двоичных символов, длина которой кратна (k-1). Если кратность нарушается, то последние символы последовательности игнорируются. Для каждой комбинации из (k-1) символов по методу контроля четности определяется значение k-ого, контрольного, символа и вся комбинация из k символов добавляется в результирующую последовательность, выводимую на экран по окончании кодирования всей входной последовательности символов.
Я написал программу, но она работает неверно и неверно кодирует, помогите найти ошибку или исправить код,
В общем случае : Вводим число k, затем двоичный код, отбрасываем конец пока длина строки не будет кратна k-1, преобразую строку в вид где на месте k пробелы, и надо посчитать, если в одной части ( первые k-1 символы ) количество едениц кратно 2 то ставим еденицу, иначе ноль, и так со всеми частями строки, но вот этот момент я не могу сделать. Помогите пожалуйста.
Писал на PascalABC.NET
Var i,k,q,g,l,h,b,f:integer; a: string; begin writeln('Введите k'); readln(k); b:=0; k:=k-1; writeln('Введите последовательность двоичных чисел'); read(a); q:=0; for i:=1 to length(a) do q:=q+1; repeat if q mod k = 0 then else delete(a,length(a),1); q:=length(a); writeln ('сокращаем количество символов до: ',q); until (q mod k =0 ); g:=k; repeat insert (' ', a, g+1); q:=q+1; g:=g+k+1; until g=q; writeln ('Преобразуем строку: ',a); h:=k+1; for l:=1 to length(a) do if (a[l]=' ') then for f:=1 to h do if a[f]='1' then b:=b+1 else b:=b; if b mod 2 = 0 then a[h]:='0' else a[h]:='1'; h:=h*2; b:=0; writeln ('Закодированная последовательность: ',a); end.
Решение задачи: «Кодирование методом контроля четности»
textual
Листинг программы
begin var k := ReadLnInteger('Введите k:'); k -= 1; var s := ReadLnString('Введите последовательность двоичных чисел:'); Delete(s, s.Length - s.Length mod k + 1, k); WriteLn('Сокращаем количество символов до ', s.Length div k * k, ': ', s); for var i := 1 to s.Length div k do insert(' ', s, i * k + i); WriteLn('Преобразуем строку: ', s); for var i := 1 to s.Length div (k + 1) do begin var c := 0; for var j := (i - 1) * (k + 1) + 1 to i * (k + 1) - 1 do if s[j] = '1' then c += 1; s[i * (k + 1)] := chr(48 + c mod 2); end; WriteLn('Закодированная последовательность: ', s) end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д