НавигацияВход для пользователейМетки20 лет
25 лет
9860
add-ins
Atmega16
CAS
Casio
casio 9860
Casio fx-570
Casio fx-9750
CITIZEN
ClassPad 330
COM-порт
FA-124
HP
HP-35S
HP-48
HP-50
HP 15C LE
HP 50g
IDE
iOS
mk.exe
mkl2mkp
SPI
TI
TI-89 Titanium
Unix
Андроид
Анонсы
Дополнительные вопросы по SPI-интерфейсу.
Игры
Импульсная характеристика
История
КЭИ
Комбинаторика
Комплексные числа
Конкурсы
Криптография
Куплю БРП Москва
Лунолёт
Лунолёты
МК-52
МК-161
Математика
Мысли
ПМК
ПО
Поломка
Пробел в знаниях
Программные метки в МК-1хх
Программы
Прогрессия
Простые числа
Разложение
Регламент
Самоделки
Секундомер
Сервис
События
Справочное пособие
Стыковка
Факторизация
Физика
Фото
ЭКВМ
Юмор
ЯВУ
браузер
версия
внешний модуль
гибкий
гипербола
дети
калькулятор
книги
компилятор
кривые второго порядка
матрицы
методичка
мк-61
парабола
подзатыльник
практическое руководство
преобразоване координат
программируемый
прошивка
ротор
рынок
справочник
среда разработки
текст
точность вычислений
тригонометрия
учебник
цветы жизни
цифровая обработка сигналов
читалка
шахматы
эллипс
Новости других сайтов |
Симметрия на часах (конкурс)Симметрия на часах (конкурс)На рекламных фотографиях часовая и минутная стрелки часов обычно устанавливаются на отметках 10 и 2 часа, таким образом, чтобы они были симметричны по отношению к вертикальной оси. Реальные часы имеют некоторую дискретность. Например, у конкретной модели часовая стрелка может перемещаться только после окончания очередной минуты. А то и 12 минут. Будем считать наши часы более совершенными: часовая стрелка перемещается всегда пропорционально минутной, а минутная, в свою очередь, пропорционально секундной. Соответственно, говорить о полной симметрии вряд ли уместно, углы могут незначительно отличаться. Требуется найти все положения часовой и минутной стрелок, соответственно, с точностью до секунды, когда достигается симметрия и выбрать из них максимально симметричное относительно оси "12-6" часов. Решений может быть представлено два:
Для участия в конкурсе нужно предложить программы для ПМК, описание и результаты расчетов. Никаких ограничения по моделям нет. Язык программирования должен быть основным входным языком для данного устройства. Допускаются также программы для эмуляторов ПМК. Критерии оценки решения:
Пример решенияДля начала мы попробуем предложить более формальную постановку задачи и наиболее простое в алгоритмическом плане решение на МК-61/52/152. Нетрудно заметить, что за часовая стрелка поворачивается на 30° за 1 час, а минутная и секундная - на 6° за минуту и секунду, соответственно. Если задавать время в виде тройки чисел (h, m, s), где h - часы в диапазоне [0..11], m - минуты [0..59], s - секунды [0..59], тогда углы стрелок можно вычислить следующим образом: Симметрию можно определить по-разному. Используя тригонометрию, необходимо найти значения cos b и cos c, отличающиеся на заданную погрешность. При этом sin b и sin с должны иметь разные знаки. Получаем систему уравнений: Арифметическая проверка чуть более длинная: Поскольку тригонометрия в общем случае вычисляется медленнее арифметики, то для программы поиска решений методом перебора будем использовать арифметику. Программа для МК-61/52/152 будет выглядеть следующим образом: 00.Сх 01.1 02.8 03.0 04.П5 05.1 06.1 07.ПО 08.5 09.9 10.П1 11.5 12.9 13.П2 14.ИП2 15.6 16.0 17.: 18.ИП1 19.+ 20.2 21.: 22.3 23.0 24.ИП0 25.х 26.+ 27.ПС 28.ИП2 29.1 30.0 31.: 32.ИП1 33.6 34.х 35.+ 36.ПВ 37.ИПС 38.Кmax 39.ИП5 40.- 41.Fх≥0 42.68 43.ИП5 44.- 45.К|к| 46.ипс 47./-/ 48.ИПВ 49./-/ 50.Кmax 51./-/ 52.XY 53.FO 54.B^ 55.ИП5 56.- 57.Fx<0 58.68 59.FO 60.- 61.П4 62.К|к| 63.ип3 64.- 65.Fх<0 66.68 67.С/П 68.КИП2 69.ИП2 70.Fх<0 71.14 72.КИП1 73.ИП1 74.Fх<0 75.11 76.КИП0 77.ИП0 78.Fх<0 79.08 80.С/П В регистр П3 заносим µ2. Опытным путем выбрано значение 0,055. Меньшие значения пропускают часть решений, бОльшие дают группы аналогичных результатов с разными погрешностями. Предостерегаю от запуска программы на старых ПМК. Очевидно, что вычисления и проверки на интервале в 1 секунду будут выполняться медленее, чем эта самая секунда, поэтому счет может затянуться на несколько суток. Прогон на эмуляторе дает следующие результаты в порядке их вычислений (положение стрелок 0 часов 0 минут 0 секунд не рассматриваем).
Что дальше?Имеются пути оптимизации переборного алгоритма. Например, можно ограничиться перебором положений часовой стрелки, вычислять симметричное положение минутной и искать положение реальной стрелки в окрестностях этого угла. Думаю, такой алгоритм работал бы на порядки быстрее. Решение, полученое в аналитическом виде (система уравнений и программа поиска корней) потенциально может оказаться наиболее быстрым.
|
Полный расчёт =
Полный расчёт = 34 мин.
Один цикл = 34 мин./43200(число циклов) = 34*60 сек./43200 = 0,047(2) сек.
Найденные значения при П0=0,5 теперь выложила в блоге на соотв. странице.