Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2015, 12:01
Аватар для _Walker
Новичок на форуме
Отправить личное сообщение для _Walker Посмотреть профиль Найти все сообщения от _Walker
 
Регистрация: 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
... и так далее

Итак кто чем может помочь прошу под кат.
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2015, 12:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

_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);
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2015, 12:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от _Walker
мой вариант(нерабочий):
почему не рабочий?
Ответить с цитированием
  #4 (permalink)  
Старый 06.05.2015, 13:08
Аватар для _Walker
Новичок на форуме
Отправить личное сообщение для _Walker Посмотреть профиль Найти все сообщения от _Walker
 
Регистрация: 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.
У меня нет программерского образования, но я когда-то заканчивал техникум на электронщика. Там мы решали задачи типа: сколько вариантов выходного сигнала будет при определённом количестве входящих сигналов, но уже многое позабыл. Это было очень увлекательно, теперь хочу вспомнить это и применять в программировании.
Ответить с цитированием
  #5 (permalink)  
Старый 06.05.2015, 13:41
Аватар для _Walker
Новичок на форуме
Отправить личное сообщение для _Walker Посмотреть профиль Найти все сообщения от _Walker
 
Регистрация: 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);
Ответить с цитированием
  #6 (permalink)  
Старый 06.05.2015, 16:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

_Walker,
читать учебник, он недавно обновился, качаться можно здесь на форуме - ссылки вверху
Ответить с цитированием
  #7 (permalink)  
Старый 06.05.2015, 16:56
Аватар для _Walker
Новичок на форуме
Отправить личное сообщение для _Walker Посмотреть профиль Найти все сообщения от _Walker
 
Регистрация: 24.04.2012
Сообщений: 6

Сообщение от рони Посмотреть сообщение
_Walker,
читать учебник
Учебник про конкретный ЯП, а я хотел бы почитать именно про алгоритм решения задачи. Не знаю как правильнее сформулировать мой запрос. Я хочу получив задачу, сразу определить сколько у неё может быть ветвлений, т.е. сколько вариантов else надо проверять для каждого if, чтоб ничего не упустить. Есть ли доки направленные именно на это, а не на знание операторов и т.п. Или я хожу вокруг да около, но не вижу дальше своего носа?

UPD: Слышал краем уха, что есть такие штуки как паттерны - может я говорю именно о них? Повторюсь я хочу иметь в голове примерный план действий при обработке задачи, например:
1) проверить какие данные и в каком количестве приходят.
2) просчитать количество возможных комбинаций для проверок
3) построить дерево условий/зависимостей
4) написать код на любимом языке
5) сделать все проверки и быть уверенным, что ни при каких входных данных скрипт на выдаст исключение (Exception)
6) получить профит

Последний раз редактировалось _Walker, 06.05.2015 в 17:10.
Ответить с цитированием
  #8 (permalink)  
Старый 06.05.2015, 19:05
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

_Walker,
я не думю что у вас получится понять программирование в целом, не изучая при этом конкретного языка. Все приходит с опытом и понимание алгоритмов и их нахождение. Опыт получается в ходе работы с конкретным языком. Да есть паттерны программирования, они часто подходят ко многим языкам программирования. А могут и не подходить (не все, а какие-то конкретные) или быть не нужными в силу особенностей языка. К тому же не думаю что вы осилите паттерны без знания хотябы одного языка опятьже.
Ответить с цитированием
  #9 (permalink)  
Старый 06.05.2015, 23:00
Аватар для Makarov
Профессор
Отправить личное сообщение для Makarov Посмотреть профиль Найти все сообщения от Makarov
 
Регистрация: 08.07.2013
Сообщений: 212

Самый простой способ научиться решать задачи - это решать задачи. На лоу уровне ничего лучше мне неизвестно. Способности формализовывать задачи и оперировать большой цикломатической сложностью можно тренировать и искуственно, но я не знаю как делать это достаточно эффективно.

Паттерны - это уже имхо advanced уровень, когда ты умеешь нормально писать на каком-то языке и озабочен всякими архитектурными задачами и взаимодействием с другими разработчиками.

Теперь про алгоритмическую подготовку.Нужно понимать одну вещь: алгоритмическая подготовка - вещь безусловно очень полезная для программирования, но в основном потому что она мозги шевелиться заставляет. Для работы хорошее знание тех или иных алгоритмов пригождается немногим. Если чисто для себя интересно - другое дело.

К конкретике:
Решение практических задач:
basic - любой задачник по информатике/учебник с задачами (в том числе учебник Кантора конечно), студенты набегающие в сессию на множество программистских форумов, работа
middle - работа

Паттерны:
basic - ненене!
middle - банда четырех

Алгоритмы:
Basic: Теория - мне понравилась 1я часть этого курса на курсере от того же автора. Она там где-то есть, просто искать лень).
Ну то есть это не basic-для идиотов, но достаточно понятно. Курса для идиотов по алгоримам мне неизвестно)
Практика: Идешь на topcoder.com, регишься, смотришь список задач на algorithm competition и пытаешься решить самые легкие из них.
Advanced - хз, я еще близко не адвансед, но думаю продолжение тех же алгокурсов и решение более сложных задач могут помочь

Хрена я много написал, мне бы это лень читать было
Ответить с цитированием
  #10 (permalink)  
Старый 07.05.2015, 12:14
Аватар для _Walker
Новичок на форуме
Отправить личное сообщение для _Walker Посмотреть профиль Найти все сообщения от _Walker
 
Регистрация: 24.04.2012
Сообщений: 6

tsigel
Спасибо, за отклик. Я понимаю что учить ЯП необходимо, но меня интересовал вопрос именно по теории программирования.
Я, увы, не учился в институте - у нас, к сожалению, нет нормальных ВУЗов, где работают знающие (читай - практикующие) преподы, и где дают знания, а не собирают урожай "зелёных листиков" каждую сессию. Покупать диплом в течении 4-5ти лет мне не улыбается, поэтому изучаю то, что необходимо конкретно мне, и для конкретных задач.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск