- Домашнее задание №3
- Решение
- Циклы while и for
- Цикл «while»
- Цикл «do…while»
- Цикл «for»
- Пропуск частей «for»
- Прерывание цикла: «break»
- Переход к следующей итерации: continue
- Метки для break/continue
- Итого
- Вывод простых чисел в JS
- 2 ответа 2
- Циклы while, for в JavaScript
- Циклы while, for в JavaScript
- Цикл с предусловием while
- Цикл for
- Оператор continue
- Итоги.
- Задания.
- Какие значения переменной i выведет этот цикл?
- Выведите нечетные числа от 2 до 20.
- Замените for на while
- Вывести все простые числа в диапазоне от 1 до 10.
Домашнее задание №3
1. С помощью цикла while вывести все простые числа в промежутке от 0 до 100.
2. С этого урока начинаем работать с функционалом интернет-магазина.
Предположим, есть сущность корзины.
Нужно реализовать функционал подсчета стоимости корзины в зависимости от находящихся в ней товаров.
3. Товары в корзине хранятся в массиве.
Задачи:
a) Организовать такой массив для хранения товаров в корзине;
b) Организовать функцию countBasketPrice, которая будет считать стоимость корзины.
4.*Вывести с помощью цикла for числа от 0 до 9, не используя тело цикла.
Выглядеть это должно так:
for(…)/>
5. *Нарисовать пирамиду с помощью console.log, как показано на рисунке, только у вашей пирамиды должно быть 20 рядов, а не 5:
x
xx
xxx
xxxx
xxxxx
Решение
1. С помощью цикла while вывести все простые числа в промежутке от 0 до 100.
function primeNumbers() <
var setOfNumbers = +prompt(‘Введите конечное значение числового ряда от 2 до 100 для вывода простых чисел’);
var i = 2;
var primeArr = [ ];
while (i
2. С этого урока начинаем работать с функционалом интернет-магазина.
Предположим, есть сущность корзины.
Нужно реализовать функционал подсчета стоимости корзины в зависимости от находящихся в ней товаров.
3. Товары в корзине хранятся в массиве.
Задачи:
a) Организовать такой массив для хранения товаров в корзине;
b) Организовать функцию countBasketPrice, которая будет считать стоимость корзины.
function countBasketPrice() <
var basket = [
<
title: ‘Товар-1’,
price: 100,
count: 3
>,
<
title: ‘Товар-2’,
price: 200,
count: 5
>,
<
title: ‘Товар-3’,
price: 300,
count: 1
>,
];
var sum = 0;
var quantity = 0;
var name = ‘В корзине находится товар следующих наименований: ‘;
for (var item of basket) <
sum += (item.price * item.count);
quantity += item.count;
name += ‘(‘ + item.title + ‘) ‘;
>
var q = basket.length;
document.getElementById(‘question-2-3’).innerHTML = ‘Всего товаров в корзине: ‘ + q + ‘.’ + name + ‘.’ +
‘Общее количество выбранных позиций товаров составляет, шт.: ‘ + quantity + ‘.’ +
‘Стоимость всех выбранных товаров в корзине составляет, руб.: ‘ + sum + ‘.’;
>
4.*Вывести с помощью цикла for числа от 0 до 9, не используя тело цикла.
Выглядеть это должно так:
for(…)/>
function withoutBody() <
var arr = [ ];
for (var i = 0; i
5. *Нарисовать пирамиду с помощью console.log, как показано на рисунке, только у вашей пирамиды должно быть 20 рядов, а не 5:
x
xx
xxx
xxxx
xxxxx
var i = 1
var x = » «;
while (i
Источник
Циклы while и for
При написании скриптов зачастую встаёт задача сделать однотипное действие много раз.
Например, вывести товары из списка один за другим. Или просто перебрать все числа от 1 до 10 и для каждого выполнить одинаковый код.
Для многократного повторения одного участка кода предусмотрены циклы.
Цикл «while»
Цикл while имеет следующий синтаксис:
Код из тела цикла выполняется, пока условие condition истинно.
Например, цикл ниже выводит i , пока i :
Одно выполнение тела цикла по-научному называется итерация. Цикл в примере выше совершает три итерации.
Если бы строка i++ отсутствовала в примере выше, то цикл бы повторялся (в теории) вечно. На практике, конечно, браузер не позволит такому случиться, он предоставит пользователю возможность остановить «подвисший» скрипт, а JavaScript на стороне сервера придётся «убить» процесс.
Любое выражение или переменная может быть условием цикла, а не только сравнение: условие while вычисляется и преобразуется в логическое значение.
Например, while (i) – более краткий вариант while (i != 0) :
Если тело цикла состоит лишь из одной инструкции, мы можем опустить фигурные скобки <…>:
Цикл «do…while»
Проверку условия можно разместить под телом цикла, используя специальный синтаксис do..while :
Цикл сначала выполнит тело, а затем проверит условие condition , и пока его значение равно true , он будет выполняться снова и снова.
Такая форма синтаксиса оправдана, если вы хотите, чтобы тело цикла выполнилось хотя бы один раз, даже если условие окажется ложным. На практике чаще используется форма с предусловием: while(…) <…>.
Цикл «for»
Более сложный, но при этом самый распространённый цикл — цикл for .
Выглядит он так:
Давайте разберёмся, что означает каждая часть, на примере. Цикл ниже выполняет alert(i) для i от 0 до (но не включая) 3 :
Рассмотрим конструкцию for подробней:
часть | ||
---|---|---|
начало | i = 0 | Выполняется один раз при входе в цикл |
условие | i | Проверяется перед каждой итерацией цикла. Если оно вычислится в false , цикл остановится. |
шаг | i++ | Выполняется после тела цикла на каждой итерации перед проверкой условия. |
тело | alert(i) | Выполняется снова и снова, пока условие вычисляется в true . |
В целом, алгоритм работы цикла выглядит следующим образом:
То есть, начало выполняется один раз, а затем каждая итерация заключается в проверке условия, после которой выполняется тело и шаг.
Если тема циклов для вас нова, может быть полезным вернуться к примеру выше и воспроизвести его работу на листе бумаги, шаг за шагом.
Вот в точности то, что происходит в нашем случае:
В примере переменная счётчика i была объявлена прямо в цикле. Это так называемое «встроенное» объявление переменной. Такие переменные существуют только внутри цикла.
Вместо объявления новой переменной мы можем использовать уже существующую:
Пропуск частей «for»
Любая часть for может быть пропущена.
Для примера, мы можем пропустить начало если нам ничего не нужно делать перед стартом цикла.
Можно убрать и шаг :
Это сделает цикл аналогичным while (i .
А можно и вообще убрать всё, получив бесконечный цикл:
При этом сами точки с запятой ; обязательно должны присутствовать, иначе будет ошибка синтаксиса.
Прерывание цикла: «break»
Обычно цикл завершается при вычислении условия в false .
Но мы можем выйти из цикла в любой момент с помощью специальной директивы break .
Например, следующий код подсчитывает сумму вводимых чисел до тех пор, пока посетитель их вводит, а затем – выдаёт:
Директива break в строке (*) полностью прекращает выполнение цикла и передаёт управление на строку за его телом, то есть на alert .
Вообще, сочетание «бесконечный цикл + break » – отличная штука для тех ситуаций, когда условие, по которому нужно прерваться, находится не в начале или конце цикла, а посередине.
Переход к следующей итерации: continue
Директива continue – «облегчённая версия» break . При её выполнении цикл не прерывается, а переходит к следующей итерации (если условие все ещё равно true ).
Её используют, если понятно, что на текущем повторе цикла делать больше нечего.
Например, цикл ниже использует continue , чтобы выводить только нечётные значения:
Для чётных значений i , директива continue прекращает выполнение тела цикла и передаёт управление на следующую итерацию for (со следующим числом). Таким образом alert вызывается только для нечётных значений.
Цикл, который обрабатывает только нечётные значения, мог бы выглядеть так:
С технической точки зрения он полностью идентичен. Действительно, вместо continue можно просто завернуть действия в блок if .
Однако мы получили дополнительный уровень вложенности фигурных скобок. Если код внутри if более длинный, то это ухудшает читаемость, в отличие от варианта с continue .
Обратите внимание, что эти синтаксические конструкции не являются выражениями и не могут быть использованы с тернарным оператором ? . В частности, использование таких директив, как break/continue , вызовет ошибку.
Например, если мы возьмём этот код:
…и перепишем его, используя вопросительный знак:
…то будет синтаксическая ошибка.
Это ещё один повод не использовать оператор вопросительного знака ? вместо if .
Метки для break/continue
Бывает, нужно выйти одновременно из нескольких уровней цикла сразу.
Например, в коде ниже мы проходимся циклами по i и j , запрашивая с помощью prompt координаты (i, j) с (0,0) до (2,2) :
Нам нужен способ остановить выполнение если пользователь отменит ввод.
Обычный break после input лишь прервёт внутренний цикл, но этого недостаточно. Достичь желаемого поведения можно с помощью меток.
Метка имеет вид идентификатора с двоеточием перед циклом:
Вызов break в цикле ниже ищет ближайший внешний цикл с такой меткой и переходит в его конец.
В примере выше это означает, что вызовом break outer будет разорван внешний цикл до метки с именем outer , и управление перейдёт со строки, помеченной (*) , к alert(‘Готово!’) .
Можно размещать метку на отдельной строке:
Директива continue также может быть использована с меткой. В этом случае управление перейдёт на следующую итерацию цикла с меткой.
Метки не дают возможности передавать управление в произвольное место кода.
Например, нет возможности сделать следующее:
Вызов break/continue возможен только внутри цикла, и метка должна находиться где-то выше этой директивы.
Итого
Мы рассмотрели 3 вида циклов:
- while – Проверяет условие перед каждой итерацией.
- do..while – Проверяет условие после каждой итерации.
- for (;;) – Проверяет условие перед каждой итерацией, есть возможность задать дополнительные настройки.
Чтобы организовать бесконечный цикл, используют конструкцию while (true) . При этом он, как и любой другой цикл, может быть прерван директивой break .
Если на данной итерации цикла делать больше ничего не надо, но полностью прекращать цикл не следует – используют директиву continue .
Обе этих директивы поддерживают метки, которые ставятся перед циклом. Метки – единственный способ для break/continue выйти за пределы текущего цикла, повлиять на выполнение внешнего.
Заметим, что метки не позволяют прыгнуть в произвольное место кода, в JavaScript нет такой возможности.
Источник
Вывод простых чисел в JS
Данный код предназначен для вывода простых чисел, я не могу понять как он пошагово работает:
Идет цикл для i, т.е.
- идет проверка j i/j++ выполняется после тела на каждой итерации, но перед проверкой условия, если идти по синтаксису языка, следовательно, проверка будет провалена и будут выводиться все числа до 9; но по факту это не так.
Я новичок в JS, но хотелось бы сразу понимать что к чему. Можете, пожалуйста, объяснить почему так происходит?
Данный вопрос предназначен для понимания последовательности выполнения действий в циклах.
2 ответа 2
В JS нет переходов по метке, но зато есть операторы continue и break которые на самом деле выглядят как continue и break .
В чём суть. Вы можете пометить цикл for или while меткой, например вот так:
Что происходит, когда интерпретатор находит continue в цикле. Если метки нет, он просто выполняет следующую итерацию. Если же она есть, то выполняет следующую итерацию цикла, помеченного этой меткой. Кстати, это единственный возможный способ в JS воздействовать из внутреннего цикла на внешний. Собственно, в этом и состоял Ваш вопрос (по continue nextPrime; выполнялась следующая итерация внешнего цикла).
Справедливости ради надо рассказать и про break . Если интерпретатор нашел этот оператор без метки в циклах for и while , то он прерывает выполнение цикла, в блоке switch — выходит из него. Главное отличие этого оператора от continue в том, что его можно использовать и вне блоков циклов и оператора switch, тогда писать метку обязательно и выделить меткой можно любой блок <> , например:
В этом примере интерпретатор достигнув break label; найдет эту метку и перейдет в конец этого блока ( 2 не выведется в консоль).
Источник
Циклы while, for в JavaScript
Циклы while, for в JavaScript
Здравствуйте! В этом уроке рассмотрим такое понятие в программировании как циклы. Иногда возникают задачи, когда надо повторить то или иное действие много раз, то есть зациклить. Например вывести список фамилий пользователей или года рождений в выпадающем списке в форме регистрации. Вот как раз для этих и других задач, где надо повторять действия многократно и предусмотрены циклы. О них мы и поговорим.
Цикл с предусловием while
И первый у нас очереди это цикл while он используется редко и имеет следующий вид:
Пока условие в скобках верно – будет выполняться код из тела цикла.
Например, цикл будет выводить i пока i Читайте также Таймеры в JavaScript
Как не трудно заметить такой цикл используется еще реже ввиду того, что условие располагается за циклом и не всегда можно сразу его найти.
Цикл for
Этот цикл используется чаще всего.
Пример цикла, который выполняет alert(i) для i от 0 до 5 включительно:
- Начальное значение: i=0.
- Условие выхода из цикла: i Читайте также Операторы в JavaScript
Например, прервать выполнение цикла на 3 шаге:
В этом примере выполнятся шаги цикла 0,1,2 а потом срабатывает условие в блоке if и происходит выход из цикла.
Оператор continue
Этот оператор используется, тогда когда требуется пропустить шаг цикла. Например надо вывести все числа от1 до 10, кроме 5.
Итоги.
В JavaScript поддерживается 3 вида циклов:
- while – проверка условия перед каждым шагом цикла. Это цикл с предусловием
- do..while – проверка условия после каждого выполнения цикла. Это цикл с постусловием.
- for – проверяет условие после каждого выполнения, а также содержит дополнительные настройки.
Для того чтобы создать бесконечный цикл используется конструкция while(true). Если надо заранее прервать цикл используется оператор break. А вот ежели вам надо пропустить шаг выполнения цикла, то для этого подойдет continue.
Задания.
Что будет в результате выполнения этого кода
Какие значения переменной i выведет этот цикл?
Выведите нечетные числа от 2 до 20.
Замените for на while
Замените цикл for на while.
Вывести все простые числа в диапазоне от 1 до 10.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник