Кодирование методом контроля четности - 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.

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


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

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

7   голосов , оценка 3.857 из 5
Похожие ответы