Помогите с кодом на паскале
Есть задача
Декодирование путем повторения символов. Вводится m – нечетное число, задающее кратность повторения, а также последовательность двоичных символов, длина которой кратна m. Если кратность нарушена, то последние символы последовательности игнорируются. В каждой комбинации из m символов путем сравнения числа нулей с числом единиц определяется результат декодирования (ноль или единица), который помещается в результирующую последовательность, выводимую на экран по окончании декодирования всей входной последовательности символов.
Преподаватель просит сделать "По условию задачи кратность повторения m - это НЕЧЕТНОЕ число, а у Вас вводится четное и не только ничего не сообщается об ошибке, но и выдается неверный результат декодирования, потому что число нулей оказывается равным числу единиц."
Я не сильно разбираюсь в паскале
Вот код исходный:
var m, k0, k1, i, j: integer; st, code: string;
begin
write('кратность повторения m = ');
readln(m);
writeln('последовательность двоичных символов:');
readln(st);
code:='';
for i:=1 to length(st) div m do
begin
k0:=0;
k1:=0;
for j:=1 to m do
if st[(i-1)*m+j]='0' then k0:=k0+1
else k1:=k1+1;
if k0>k1 then code:=code+'0'
else code:=code+'1';
end;
writeln(code);
end.
Вывод работы (скрин)
Ответы (2 шт):
repeat
write('НЕЧЁТНАЯ кратность повторения m = ');
readln(m);
until Odd(m);
У меня возник вопрос ко второй задаче Условие:Декодирование методом контроля четности. Вводится k – число символов в блоке и последовательность двоичных символов, длина которой кратна k. Если кратность нарушается, то последние символы последовательности игнорируются. В каждой комбинации из k символов осуществляется проверка четности: если четность не нарушена, то первые (k-1) символов данной комбинации добавляются в результирующую последовательность, если же четность нарушается, то счетчик количества ошибок увеличивается на единицу. По окончании декодирования всей входной последовательности символов результирующая последовательность, а также значение счетчика ошибок выводятся на экран.
код
begin
var k := ReadLnInteger('Введите k:');k -= 1;
var b := ReadLnString('Введите последовательность двоичных чисел:');
Delete(b, b.Length - b.Length mod k - 1, k);
WriteLn('Сокращаем количество символов до ', b.Length div k * k, ': ', b);
for var i := 1 to b.Length div k do insert(' ', b, i * k + i);
WriteLn('Преобразуем строку: ', b);
for var i := 1 to b.Length div (k + 1) do
begin
var c := 0;
for var j := (i - 1) * (k + 1) + 1 to i * (k + 1) - 1 do
if b[j] = '1' then c += 1;
b[i * (k + 1)] := chr(48 + c mod 2);
end;
WriteLn('Закодированная последовательность: ', b)
end.
Этот код для кодирования, а нужно сделать для декодирования
