Вопрос по циклам
Здравствуйте. Задание было таким:
"Запросите количество строк и выведите соответствующий треугольник $ $$ $$$ $$$$ $$$$$" Решение оказалось таким: var rows = +prompt('Введите количество строк', 5); for(var i = 1; i <= rows; i++){ for(var n = 0; n < i; n++){ document.write('$'); } document.write('</br>'); } Собственно, в чем загвоздка. На каждой строке выводится +1 символ '$'. Т.е. на каждой новой строке document.write повторяется на 1 больше раз. Ок. Но почему-то тогда </br> из внешнего цикла повторяется только 1 раз на каждой итерации? Конструкция циклов фактически одинаковая, но почему во внешнем цикле переменная i отвечает за количество строк, а не за вывод document.write, в то время как во внутреннем цикле переменная n отвечает как раз таки за количество повторений document.write за одну итерацию? |
Цитата:
Попробуйте написать этот код на бумаге и попробуйте "прочитать" и осознать что делает каждая часть кода. И когда вы поймёте как он работает, попробуйте решить похожую задачу (чтобы треугольник был по другую сторону от диагонали) |
Цитата:
Одним циклом все делается... batcave, это букварская задачка. Предполагается, что даже новичок ее сможет сделать, прочитав учебник по JS... Но ты даже по готовому примеру так и не понял как все это работает. :( |
Цитата:
Т.ч. то, что предлагается это не худший вариант |
Цитата:
<!DOCTYPE html> <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=windows-1251' /> <!-- <script src='http://code.jquery.com/jquery-latest.js'></script> <script src="https://code.angularjs.org/1.3.9/angular.min.js"></script> <script src="https://code.angularjs.org/1.3.9/angular-route.js"></script> --> <style type='text/css'> </style> <script type='text/javascript'> var rows = +prompt('Введите количество строк', 5); var str=''; for(var i = 1; i <= rows; i++){ str+='$' document.write(str+'</br>'); } </script> </head> <body> </body> </html> Цитата:
|
Если не затруднит, подскажите что дальше.
1) Пользователь вводит значение в prompt, например 3. 2) Начинает работу внешний цикл. i=1. 1 < 3. Условие верно, выполняем тело. 3) В теле внутренний цикл. В нем n=0. 0<1. Условие верно. Выполняем тело. 4) Выполняет document.write('$'). На странице выводится символ $. 5) Выполняется шаг n++. n = 1. 6) Внутренняя итерация завершена. Теперь происходит внешняя. Document.write добавляет на страницу </br>, делая тем самым переход на новую строку. 7) Выполняется шаг. i = 2. Полный цикл завершен. Теперь начинается второй: 8) Проверяем условие. i = 2. 2 < 3. Условие верно. Переходим к внутренней функции. 9) n = 1. 1 < 2. верно. выполним тело. 10) document.write срабатывает дважды. Почему? Почему он просто не повторит его один раз, как делает внешний цикл с <br>? он считает 0 и 1 как "сработай на этой строке 2 раза"? |
Цитата:
попробуйте перечитать: https://learn.javascript.ru/while-for#цикл-for |
Окей, я понял, что внутренний цикл повторяется i количество раз. Но почему это происходит - нет. И по ссылке там нет никакого подобия объяснения. Можно провести аналогию с электронными часами. Часы слева увеличиваются на 1 после того, как минуты справа увеличатся на 60. Вопрос теперь приобретает другую форму - почему внутренний цикл повторяется i количество раз?
---------- Значение n не имеет отношения к количеству символов. Это просто проверка условия. А вот i - это количество повторения внутреннего цикла. Ура. Похоже это оно. ---------- ААААА. Кажется понял. Во внутреннем цикле на каждой новой строке n обнуляется, а i увеличивается, оттого то все так и работает. |
Часовой пояс GMT +3, время: 15:25. |