0 / 0 / 0
Регистрация: 20.12.2013
Сообщений: 6
1

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

11.04.2016, 08:11. Показов 3750. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание: Кодирование методом контроля чётности. Вводится k - число символов в блоке и последовательность двоичных символов, длина которой кратна (k-1). Если кратность нарушается, то последние символы последовательности игнорируются. Для каждой комбинации из (k-1) символов по методу контроля четности определяется значение k-ого, контрольного, символа и вся комбинация из k символов добавляется в результирующую последовательность, выводимую на экран по окончании кодирования всей входной последовательности символов.

Я написал программу, но она работает неверно и неверно кодирует, помогите найти ошибку или исправить код,
В общем случае : Вводим число k, затем двоичный код, отбрасываем конец пока длина строки не будет кратна k-1, преобразую строку в вид где на месте k пробелы, и надо посчитать, если в одной части ( первые k-1 символы ) количество едениц кратно 2 то ставим еденицу, иначе ноль, и так со всеми частями строки, но вот этот момент я не могу сделать. Помогите пожалуйста.

Писал на PascalABC.NET

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2016, 08:11
Ответы с готовыми решениями:

Реализовать 8-разрядную схему контроля четности
Ребят,чо эт ваще такое?! У меня глаза разъезжаются) Реально не понимаю этого задания.Получил его...

Кодирование методом Хаффмана и Фано
Добрый день, не выполнить задание, Написать программу, которая осуществляет кодирование...

Кодирование методом Шеннона-Фано и Хаффмана
Добрый день уважаемые форумчане, не могу выполнить задание по дискретной математике, нужно написать...

Кодирование методом Хаффмана
Написать программу, которая осуществляет кодирование Вашей фамилии, имени и отчества методом...

4
0 / 0 / 0
Регистрация: 20.12.2013
Сообщений: 6
15.04.2016, 19:45  [ТС] 2
Я переделал код, но все-равно неверно шифрует :с не могу понять в чем дело. ПОМОГИТЕ пожалуйста. Хотябы скажите в чем ошибка!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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:=2;
l:=h-1;
 
repeat // ВОТ ОТСЮДА НЕ ПОЛУЧАЕТСЯ
 
if a[h]<>' ' then 
else // если значение пробел, то выполняем перебор по подстроке от 1 до пробела
 
for f:=l to h // сам перебор
do
begin
if a[f]='1' then // ищем еденицы
b:=b+1;
end;
 
if b mod 2 = 0 then // если количество едениц четное, то ставим 0, если нечетное, то 1
a[h]:='0'
else
a[h]:='1';
 
l:=h+1; // меняем точку отсчета
h:=h+h; // меняем конечную точку
b:=0; // обнуляем b и начинаем сначала
until h>length(a);
writeln ('Закодированная последовательность: ',a);
end.
0
318 / 208 / 162
Регистрация: 08.12.2015
Сообщений: 863
15.04.2016, 21:17 3
Помимо того, что не очень понятно, что именно делает программа, есть куча лишних операторов, циклов, присвоений.
А что должна делать программа?
Я запустил:
Код
Введите k
5
Введите последовательность двоичных чисел
01101001100100110101010011001100
сокращаем количество символов до: 32
Преобразуем строку: 0110 1001 1001 0011 0101 0100 1100 1100
Закодированная последовательность: 0010 1001 1001 0011 0101 0100 1000 1100
И что? Ответ какой то есть. Что не так?
0
44 / 44 / 66
Регистрация: 22.07.2015
Сообщений: 191
15.04.2016, 21:17 4
Лучший ответ Сообщение было отмечено m0rfy как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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.
0
0 / 0 / 0
Регистрация: 20.12.2013
Сообщений: 6
16.04.2016, 15:10  [ТС] 5
Спасибо большое! Просто только начинаю и многое что мне не понятно :с Программа работает верно ) Еще раз спасибо )
0
16.04.2016, 15:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2016, 15:10
Помогаю со студенческими работами здесь

Кодирование методом Хаффмана
Создать программу методом хакмана. Я не понимаю как. Помогите пожалуйста.:cry:

. Выполнить кодирование и декодирование русскоязычного текста методом Хаффмана
Выполнить кодирование и декодирование русскоязычного текста методом Хаффмана. MatLab Добавлено...

Декодирование методом контроля четности (Pascal -> Python)
Помогите перевести код с pascal на python. begin var k := ReadLnInteger('Введите k:'); k -= 1;...

Девятиразрядная схема контроля четности
написать программу девятиразрядная схема контроля чётности


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru