Здравствуйте. Я только начал разбираться в Ардуино. Помогите пожалуйста разобраться в следующем. Вот здесь http://wiki.amperka.ru/программирование:константы-переменные-арифметика есть формула (пункт "Зацикленная змейка") для расчета номера последующего пина к которому подключён светодиод: ledPin = (ledPin - FIRST_LED + 1) % TOTAL_LEDS + FIRST_LED; Вот мне не совсем понятно как она работает, а именно "оператор остатка от деления" - %. Методом использования различного количества светодиодов я понял что формула универсальная, НО хотел бы до конца разобраться в её работе так как если я по ней считаю, почему то не сходится ничего. Допустим у меня не 10 как в примере а 8 светодиодов (TOTAL_LEDS=8), первый светодиод подключён к 4 пину и далее по порядку, что тогда получается, как я понимаю при расчёте: (4 - 4 + 1) % 8 + 4 = (1) % 8 + 4 =1 + 4 = (так как 1/8=0,125, а остаток % берёт только первую цифру после запятой, так?) 5 далее (5 - 4 + 1) % 8 + 4 = (2) % 8 + 4 =2 + 4 = (так как 2/8 =0 ,25) 6 (6 - 4 + 1) % 8 + 4 = (3) % 8 + 4 =3 + 4 = (так как 3/8=0,375) 7 (7 - 4 + 1) % 8 + 4 = (4) % 8 + 4 = И вот здесь возникает у меня ступор, потому что 4/8 = 0,5 То есть ответ 9 пин, но никак не 8 по порядку. Как так? Извините, если вопрос покажется глупым, я понимаю что где-то в логике сам ошибся, но хоть убей никак не разберусь. Формула правильная и программы с разным количеством светодиодов работают правильно, но я бы хотел досконально разобраться, так как если не понимаю столь элементарных вещей, дальше будет сложнее. Спасибо.
Я так понимаю, что пины не обязательно должны у вас идти по порядку. Тем более у вас есть в расчетах ошибки - вы не используете округление, а просто выдергиваете последнюю цифру после запятой. P.S. Могу ошибаться т.к. сам новичек - это только предположение
Вроде бы разобрался. В примере на приведённой в первом сообщении ссылке, можно войти в заблуждение, так как там делится всё на 10 светодиодов и я подумал, что берётся первая цифра после нуля, но оказывается оператор % работает не так, он считает по следующей формуле х1 % х2 = х1 - (х1 / х2) * х2, к примеру: 4%8 = 4 - (4/8)*8 А так как у нас тип данных int, то в скобках всегда будет 0.
Согласно тем допущениям, что я принял, в моих расчётах нет ошибки. А в слове новичОк, да, действительно ошибся. Но я рад, что Вы это заметили. К сожалению так никто и не подтвердил мои предположения насчёт всего остального. И на том спасибо.
А что подтверждать? Погуглите деление с остатком если забыли, Вы это в начальной школе проходили. Оператор % возвращает как раз тот самый остаток.
Операция % целочисленная. 1 % 8 = 1 2 % 8 = 2 3 % 8 = 3 4 % 8 = 4 5 % 8 = 5 6 % 8 = 6 7 % 8 = 7 8 % 8 = 0 9 % 8 = 1