Написать программу расшифровки - C (СИ)
Формулировка задачи:
Пусть по некоторому каналу связи передается сообщение, имеющее вид последовательности нулей и единиц. Из-за помех возможен ошибочный приём некоторых сигналов: 0 может быть воспринят как 1 и наоборот. Можно передавать каждый сигнал трижды, например последовательность 1,0,1 последовательностью 1,1,1 0,0,0 1,1,1. 3 последовательные цифры при расшифровке заменяются той цифрой при расшифровке заменяются той цифрой, которая встречается среди них покрайней мере дважды. Такое утраивание сигналов существенно повышает вероятность правильного приёма сообщения. Писать на чистом Си
Решение задачи: «Написать программу расшифровки»
textual
Листинг программы
#include <stdio.h>
int main() {
int msg[] = { 1,0,1, 0,1,0, 0,1,1 };
int msg_len = sizeof(msg) / sizeof(*msg);
if (msg_len % 3) {
puts("ERR: (msg_len % 3) != 0");
return 1;
}
int i;
for (i = 0; i < msg_len - 2; i += 3) {
printf("%d", ((i[msg] | msg[i+1]) && (i[msg] | msg[i+2])));
}
printf("\n");
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлена массивная переменная
msgтипаintс длинойmsg_len. - Проверяется, что длина массива
msgкратна трём. Если это не так, выводится сообщение об ошибке и программа завершается. - Инициализируется счётчик
iдля цикла. - В цикле
forвычисляется значение по следующему алгоритму: —i[msg]обращается к элементу массиваmsgс индексомi. —(i[msg] | msg[i+1])побитовое ИЛИ между текущим элементом и следующим. —(i[msg] | msg[i+2])побитовое ИЛИ между текущим элементом и следующим после него. — Результат выводится на экран. - После окончания цикла выводится символ новой строки.
- Программа возвращает 0, то есть успешно завершается.