Айнцвайдрайченко пише:
Надо разруливать... Ещё раз внимательно прочел ТЗ. Нет, это не код Морзе, поскольку продолжительность нажатия не учитывается.
Причем тут длительность нажатия? Вспомните фильмы, как в тюрьме заключенные перестукивались через стенку. Где там длительность нажатия? Но ничего, как-то получалось и на паузах.
Алгоритм предлагается следующий:
Первое нажатие на ключ или "тук" (любой продолжительности, не бесконечной, разумеется) - программа подготовилась к приему кода.
Отпустили ключ (пауза) - программа начала отсчет времени.
2-е нажатие - программа сравнила прошедшее время паузы с заданными интервалами. Определила - пауза длинная (тире) или короткая (точка). После отпускания ключа программа начала новый отсчет.
3-е нажатие - см. 2-е...
...
150-е...
Если в какой-то момент пауза выйдет за все пределы - программа будет считать, что ввод кода завершен. Сравнит полученные точки и тире с правильным кодом и примет решение: свой-чужой.
Чем не морзянка?
Сделать еще разделение на буквы и слова? Тоже можно, но это во-первых, не имеет смысла, во-вторых, пользователю будет сложнее не ошибиться самому.
Айнцвайдрайченко пише:
Только мне непонятно вот это:
количество пауз - 5
количество точек - 10
Это понимает только
Vakula, но наверно это секретная информация и не желает ее раскрывать.
Айнцвайдрайченко пише:
Итого 10 градаций запоминаемой длительности. Но это справедливо для данного примера. Если взять более точный допуск, то количество градаций увеличится.
По градациям, выше я уже говорил (на примере нот). Количество градаций программно можно реализовать хоть 100 или 1000... Ради бога. Вот это уже будет не Морзе. Но сколько пользователь сможет безошибочно воспроизвести сам?
Еще раз повторюсь. Считаю вполне достаточным две градации - точка и тире, или короткая и длинная паузы, если терминология Морзе вас смущает.