Для решения этого задания надо знать как складываются двоичные числа: 0+0 = 0, 0+1 = 1, 1+0 = 1, 1+1 = 10. Запишем этот пример в столбик и просто подберём числа, для уверенности можно сложить эти двоичные числа, чтобы знать что мы не ошиблись. Начинаем подбирать числа с конца, т.к. при сложении в столбик мы складываем с конца. Видим складываются числа 1 и * и получается 0, это значит что под звёздочкой число 1, 1+1=10, 0 пишем 1 в запоминаем Потом складываются цифры * и * и 1 (та что мы запомнили) в ответе получается 1, значит под звёздочками 0. 0+1 = 1 Далее складывается * и 0, в ответе 0, значит под звёздочкой 0. и так далее.
Свою запись прикреплю в приложении.
ответ: 0101011001 + 1011101001 = 10001000010
P.S. Все нули, которые стоят перед первой единицей в числе, можно опустить т.к. они незначащие. То есть число 0101011001 можно записать так 101011001
Если использовать коды длины N, то должно существовать не менее 16 различных строчек из символов 0 и 1, таких, что в каждой такой строчке будет чётное число единиц (это очевидно, конечно: если таких строчек будет меньше 16, то кодов попросту не хватит).
3 не подходит: даже без ограничений на количество единиц число строчек 2^3 = 8, что меньше 16.
4 тоже не подходит: без ограничений на количество единиц число строчек 2^4 = 16, но как минимум одна не подходит (например, 0001 - не удовлетворяет требованиям). Хороших строчек остается не больше 15, что меньше 16. (На самом деле, хороших строчек длины 4 всего 8).
Пробуем 5. Если придумаем как закодировать 16 символов - победа. А закодировать можно вот как: первые 4 символа - двоичная запись номера символа (нумеруем начиная с нуля, например 5-й символ - 0101), а последний символ - 0, если число единиц среди первых четырёх символов чётно и 1 - если нечётно. Тогда в любом случае получится чётное количество единиц.
// PascalABC.NET 3.0, сборка 1073 const s=''; var c:char; p:integer; begin repeat Write('Введите латинскую букву, иной символ завершит работу: '); Readln(c); p:=Pos(c,s); if p>0 then Writeln('Рядом буква "',s[p+1],'"') until p=0 end.
Тестовое решение: Введите латинскую букву, иной символ завершит работу: y Рядом буква "u" Введите латинскую букву, иной символ завершит работу: H Рядом буква "J" Введите латинскую букву, иной символ завершит работу: m Рядом буква "q" Введите латинскую букву, иной символ завершит работу: P Рядом буква "A" Введите латинскую букву, иной символ завершит работу: 5
Запишем этот пример в столбик и просто подберём числа, для уверенности можно сложить эти двоичные числа, чтобы знать что мы не ошиблись. Начинаем подбирать числа с конца, т.к. при сложении в столбик мы складываем с конца.
Видим складываются числа 1 и * и получается 0, это значит что под звёздочкой число 1, 1+1=10, 0 пишем 1 в запоминаем
Потом складываются цифры * и * и 1 (та что мы запомнили) в ответе получается 1, значит под звёздочками 0. 0+1 = 1
Далее складывается * и 0, в ответе 0, значит под звёздочкой 0.
и так далее.
Свою запись прикреплю в приложении.
ответ: 0101011001 + 1011101001 = 10001000010
P.S. Все нули, которые стоят перед первой единицей в числе, можно опустить т.к. они незначащие. То есть число 0101011001 можно записать так 101011001