06.05.2015, 12:01
|
|
Новичок на форуме
|
|
Регистрация: 24.04.2012
Сообщений: 6
|
|
правильная(!) Логика зацикливания анимации "туда - обратно".
Есть задача зациклить движение некоего объекта на странице. Важна именно логика поэтому работать будем с одной переменной - X.
Итак, задача такова:
1)X инициируется со значением 0
2)при каждой итерации он увеличивается на 0.1 и растёт до 1
3)как только он стал равен 1, он начинает уменьшаться до -1 с тем же шагом
4)опустившись до -1 он снова растет до 1
5)и так по кругу до бесконечности
Вопрос как правильно составить логику?
мой вариант(нерабочий):
var back,x,cicle;
x = 0;
back = !true;
cicle = setInterval(function(){
if (!back) { x+=0.1;if (x>=1) {back = true;}} else {x-=0.1;if (x<=-1) {back = !true;}}
console.log(x);
},100);
Вот что выдает этот скрипт:
(прошу прощения, я не нашёл как ставить спойлер)
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
0.9999999999999999
0.8999999999999999
0.7999999999999999
0.7
0.6
0.5
0.4
0.30000000000000004
0.20000000000000004
0.10000000000000003
2.7755575615628914e-17
-0.09999999999999998
-0.19999999999999998
-0.3
-0.4
... и так далее
Итак кто чем может помочь прошу под кат.
|
|
06.05.2015, 12:36
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
_Walker,
var x = 0, back = true,
cicle = setInterval(function(){
x += back ? 0.1 : -0.1;
if (x>1||x<0) back = !back;
console.log(x);
},100);
|
|
06.05.2015, 12:39
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от _Walker
|
мой вариант(нерабочий):
|
почему не рабочий?
|
|
06.05.2015, 13:08
|
|
Новичок на форуме
|
|
Регистрация: 24.04.2012
Сообщений: 6
|
|
Сообщение от рони
|
почему не рабочий?
|
потому что на тот момент я не понимал откуда берутся миллиардные доли и двойка. потом я нашёл .tofixed(1) и поправил ваш код для выполнения моей задачи
var x = 0, back = true,
cicle = setInterval(function(){
x += back ? 0.1 : -0.1;
if (x.toFixed(1)>=1||x.toFixed(1)<=-1) back = !back;
console.log(x.toFixed(1));
},100);
Я понимаю что этот .tofixed(1) можно вставить в одно место, чтоб код был аккуратнее, но пока не нашёл куда.
А ваш код просто красота!
Подскажите, что можно почитать чтоб прокачать скилы составления/расчета логики алгоритмов, в идеале в формате игры или курсов с заданиями типа KhanAcademy.
У меня нет программерского образования, но я когда-то заканчивал техникум на электронщика. Там мы решали задачи типа: сколько вариантов выходного сигнала будет при определённом количестве входящих сигналов, но уже многое позабыл. Это было очень увлекательно, теперь хочу вспомнить это и применять в программировании.
|
|
06.05.2015, 13:41
|
|
Новичок на форуме
|
|
Регистрация: 24.04.2012
Сообщений: 6
|
|
Сообщение от _Walker
|
if (x.toFixed(1)>=1||x.toFixed(1)<=-1) back = !back;
console.log(x.toFixed(1));
Я понимаю что этот .tofixed(1) можно вставить в одно место, чтоб код был аккуратнее, но пока не нашёл куда.
|
сделаю пока так:
x=x.toFixed(1);
|
|
06.05.2015, 16:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
_Walker,
читать учебник, он недавно обновился, качаться можно здесь на форуме - ссылки вверху
|
|
06.05.2015, 16:56
|
|
Новичок на форуме
|
|
Регистрация: 24.04.2012
Сообщений: 6
|
|
Сообщение от рони
|
_Walker,
читать учебник
|
Учебник про конкретный ЯП, а я хотел бы почитать именно про алгоритм решения задачи. Не знаю как правильнее сформулировать мой запрос. Я хочу получив задачу, сразу определить сколько у неё может быть ветвлений, т.е. сколько вариантов else надо проверять для каждого if, чтоб ничего не упустить. Есть ли доки направленные именно на это, а не на знание операторов и т.п. Или я хожу вокруг да около, но не вижу дальше своего носа?
UPD: Слышал краем уха, что есть такие штуки как паттерны - может я говорю именно о них? Повторюсь я хочу иметь в голове примерный план действий при обработке задачи, например:
1) проверить какие данные и в каком количестве приходят.
2) просчитать количество возможных комбинаций для проверок
3) построить дерево условий/зависимостей
4) написать код на любимом языке
5) сделать все проверки и быть уверенным, что ни при каких входных данных скрипт на выдаст исключение (Exception)
6) получить профит
Последний раз редактировалось _Walker, 06.05.2015 в 17:10.
|
|
06.05.2015, 19:05
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
_Walker,
я не думю что у вас получится понять программирование в целом, не изучая при этом конкретного языка. Все приходит с опытом и понимание алгоритмов и их нахождение. Опыт получается в ходе работы с конкретным языком. Да есть паттерны программирования, они часто подходят ко многим языкам программирования. А могут и не подходить (не все, а какие-то конкретные) или быть не нужными в силу особенностей языка. К тому же не думаю что вы осилите паттерны без знания хотябы одного языка опятьже.
|
|
06.05.2015, 23:00
|
|
Профессор
|
|
Регистрация: 08.07.2013
Сообщений: 212
|
|
Самый простой способ научиться решать задачи - это решать задачи. На лоу уровне ничего лучше мне неизвестно. Способности формализовывать задачи и оперировать большой цикломатической сложностью можно тренировать и искуственно, но я не знаю как делать это достаточно эффективно.
Паттерны - это уже имхо advanced уровень, когда ты умеешь нормально писать на каком-то языке и озабочен всякими архитектурными задачами и взаимодействием с другими разработчиками.
Теперь про алгоритмическую подготовку.Нужно понимать одну вещь: алгоритмическая подготовка - вещь безусловно очень полезная для программирования, но в основном потому что она мозги шевелиться заставляет. Для работы хорошее знание тех или иных алгоритмов пригождается немногим. Если чисто для себя интересно - другое дело.
К конкретике:
Решение практических задач:
basic - любой задачник по информатике/учебник с задачами (в том числе учебник Кантора конечно), студенты набегающие в сессию на множество программистских форумов, работа
middle - работа
Паттерны:
basic - ненене!
middle - банда четырех
Алгоритмы:
Basic: Теория - мне понравилась 1я часть этого курса на курсере от того же автора. Она там где-то есть, просто искать лень).
Ну то есть это не basic-для идиотов, но достаточно понятно. Курса для идиотов по алгоримам мне неизвестно)
Практика: Идешь на topcoder.com, регишься, смотришь список задач на algorithm competition и пытаешься решить самые легкие из них.
Advanced - хз, я еще близко не адвансед, но думаю продолжение тех же алгокурсов и решение более сложных задач могут помочь
Хрена я много написал, мне бы это лень читать было
|
|
07.05.2015, 12:14
|
|
Новичок на форуме
|
|
Регистрация: 24.04.2012
Сообщений: 6
|
|
tsigel
Спасибо, за отклик. Я понимаю что учить ЯП необходимо, но меня интересовал вопрос именно по теории программирования.
Я, увы, не учился в институте - у нас, к сожалению, нет нормальных ВУЗов, где работают знающие (читай - практикующие) преподы, и где дают знания, а не собирают урожай "зелёных листиков" каждую сессию. Покупать диплом в течении 4-5ти лет мне не улыбается, поэтому изучаю то, что необходимо конкретно мне, и для конкретных задач.
|
|
|
|