Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Не понимаю, начиная с циклов (https://javascript.ru/forum/offtopic/49143-ne-ponimayu-nachinaya-s-ciklov.html)

xSPiRiTx 30.07.2014 23:48

Не понимаю, начиная с циклов
 
По учебной программе идёт javascript.
Все хорошо, первые лекции все понимаю, с интересом вникаю. Но! Только доходит дело до циклов и первых же лабораторных с ними я становлюсь в ступор. Вот пример: преподаватель объясняет и показывает циклы while. Мне все понятно. И сразу же он задаёт очень простую задачку - "возвести 2 в степень 10, применить цикл while и вывести результат в консоль".
Я как тупица не могу сообразить как это описать, как составить алгоритм. Когда преподаватель показал и написал код я сразу все понял.
Далее снова лаба на этом же уроке: "вывести на экран символы таким образом, используя while
*
**
***
****
*****

я снова в ступоре не могу сообразить алгоритм.


Всё плохо?

BETEPAH 31.07.2014 00:00

да. Попробуйте выйти из ступора, изложите в словах свои мысли. Здесь же несложно совсем

xSPiRiTx 31.07.2014 00:55

дошло, но только после просмотра кода и объяснения преподавателя!

var num =2, exp =10, result =1; count = 0;
while (count<exp) {
	result = result*num;
	count++;
}
console.log(result);


для удобства и для того, чтобы в будущем можно было легко менять значения, не перелопачивая весь код объявляем переменные: num - число, которое будем возводить в степень, exp - сама степень, result - переменная для получения результата, мы ее обозначили как числовой тип и присвоили единицу, потому что если там будет 0, то при возведении в степень всегда будет результат 0, count - ну и счётчик...причем у нас ему присвоен 0, значит в решении count должен быть меньше exp ибо отсчет начинается с нуля...а с нуля до девяти - это уже 10 (нам требуется возвести в степень 10)...если же в count мы запихаем 1, то тогда в решении будет count <= exp, потому что начнется отсчёт с единицы пока не станет равно нашей exp, которая в свою очередь равна 10.

результатом будет присвоение переменно result умножение её на число, которое возводится в степень. т.е. 1*2=2, теперь уже переменная result = 2. а значит в следующем цикле result = result*num будет выглядеть как 2*2. счётчик увеличился на один шаг (count++) и пока что в теле while значение true, поэтому он продолжает запускать цикл заново. Таким образом пока счетчик не перестанет соответствовать условию, что он меньше 10 (count<exp) циклы будут запускаться снова и снова. в то же время переменная result все набирает и набирает обороты. 2*2 - уже она равна 4 и выражениу result*num уже выглядит как 4*2 (у нас уже получается 2 в степени 3).

Vlasenko Fedor 31.07.2014 01:30

var num = 2;
  var exp = 10;
  var count = 1;
  var result = 1; //2 в 0
  while (count <= exp) {
    result *= num;
    count++;
  }
  alert(result);
alert(Math.pow(2, 10));

xSPiRiTx 31.07.2014 01:58

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

xSPiRiTx 31.07.2014 03:15

вторая задача с треугольником решилась очень просто:
var string = "", cnt = 1;
while (cnt<=5) {
string += "*";
console.log(string);
cnt++;
}

BETEPAH 31.07.2014 10:23

xSPiRiTx,
ну, вот :) стоило только преодолеть ступор.
Инкремент, кстати, можно вынести в условие. Даже более логично и наглядно здесь было бы использовать декремент.
var string = "", cnt = 5;
while (cnt--) {
string += "*";
console.log(string);
}

kobezzza 31.07.2014 10:42

xSPiRiTx, у всех так было. Практикуйся, сиди и тупи над задачами и если хватит задротства, то всё начнёт получаться. У меня первый год обучения был таким, например, мне почему то очень трудно давалась тема массивов, хз почему. Когда начал JS изучать, то очень долго не понимал прототипов (первые 2 года боялся их юзать и не вылезал за пределы задачек jQuery), а потом как то утром проснулся и всё само стало ясно.

Главное тут понять, что процесс обучения - это долгая штука. Я, например, уже 12+ лет изучаю программирование (начинал с Pascal, потом Delphi, потом PHP, потом C#, а уже потом JS), на JS 7 лет и процесс обучения всё идёт (в идеале он никогда не должен кончаться).

Shaci 31.07.2014 10:48

Цитата:

Сообщение от kobezzza
на JS 7 лет

и как, сильно торкает? ))

kobezzza 31.07.2014 10:54

Цитата:

Сообщение от Shaci (Сообщение 323550)
и как, сильно торкает? ))

Ну, кол-во лет не главное на самом деле, а типы решаемых задач. Первые 3 года я делал всякую хрень: попачики, всплывашки, слайдеры и т.д. короче банальный UI и если бы так всё продолжалось, то наверное бы развитие уже давно остановилось, но потом круг задач резко изменился, и слава Богу:)

А вообще меня очень печалит, что нет времени ни на что, кроме JS и он мне порядком уже надоел, хочется поковырять Rust, D, но пока только совсем на примитив есть время :(


Часовой пояс GMT +3, время: 16:48.