Управляющие структуры

Условный переход, ветвление и циклы

Без управляющих структур невозможна автоматизация решения задач.

if

Оператор условного перехода (от англ. если)

Условный переход

var n = /* какое-то число */
if (n > 0) {
  console.log('n — положительное число');
}

Оператор if указывает альтернативные варианты выполнения программы, создавая точку разветвления (подобно развилке на дороге).

Условный переход

Блок из одного выражения можно записать без фигурных скобок:

if (n > 0)
  console.log('n — положительное число');

Альтернативная ветвь

if (n >= 0) {
  console.log('n — неотрицательное число');
} else {
  console.log('n — отрицательное число');
}

Цепочки условий

if (n == 0) {
  console.log('n равно нулю');
} else if (n > 0) {
  console.log('n — положительное число');
} else {
  console.log('n — отрицательное число');
}

switch

Оператор перехода по сопоставлению (от англ. переключатель)

Сопоставление по шаблону

var weekday = /* строка с днем недели */
switch (weekday) {
    case 'понедельник':
    case 'вторник':
    case 'среда':
    case 'четверг':
    case 'пятница':
      console.log('Рабочий день');
      break;
    case 'суббота':
    case 'воскресение':
      console.log('Выходной день');
      break;
    default:
      console.log('Неизвестный день');
  }

Недостатки switch

  • нельзя забывать break
  • сопоставляются только примитивные значения (строки, числа, логические значения)
  • используется точное сопоставление (воскресение и Воскресение — разные строки)
  • нельзя задать дополнительные условия

while

Цикл с предусловием (от англ. до тех пор пока)

Цикл с предусловием

var n = 10;
while (n > 0) {
  console.log(n);
  n -= 1;
}

Цикл while выполняется, пока значение в круглых скобках истинно.

Бесконечный цикл

Самый простой способ «повесить» браузер или интерпретатор:

while (true) {}

Если Вы попробовали так написать, завершите процесс средствами операционной системы и возвращайтесь :)

do ... while

Цикл с постусловием (от англ. делать ... до тех пор пока)

Цикл с постусловием

var n = 10;
do {
  console.log(n);
  n -= 1
} while(n > 0);

Похож на while(...) { ... }, но блок выполняется как минимум один раз.

for

Цикл с параметром (от англ. для [всех значений])

Цикл с параметром

for (var i = 0; i < 10; i++) {
  console.log(i);
}

В консоли появятся числа от 0 до 9 включительно.

Цикл с параметром

В круглых скобках записываются три выражения:

  1. инициализация (что выполнить в начале)
  2. условие завершения (как в while)
  3. продвижение (что выполнять в конце каждой итерации)

Итерация — это одно выполнение блока цикла

Цикл с параметром

for (var i = 0; i < 10; i++) { /*...*/}

Инициализация: объявить переменную i, присвоить значение 0

Условие завершения: выполнять блок, пока i меньше %%10%%

Продвижение: прибавлять единицу к i в конце каждого шага

Бесконечный цикл

Еще более простой способ «повесить» браузер или интерпретатор:

for (;;) {}

Задачи

Задача 1

Вычислить факториал произвольного числа n по формуле:

$$n! = 1 \cdot 2 \cdot \ldots \cdot n$$

Решение

var n = 10;  // замените на любое положительное число
var f = 1;
for (var i = 2; i <= n; i++)
  f = f * i;
console.log('%s! = %s', n, f);

Осторожно! Факториал — очень быстрорастущая функция.

Задача 2

Дано количество баллов от %%0%% до %%100%%.

Вычислить оценку по правилам:

  • %%[85; 100]%% баллов — отлично
  • %%[75; 85)%% баллов — хорошо
  • %%[60; 75)%% баллов — удовлетворительно
  • %%[0; 60)%% баллов — неудовлетворительно

Решение

var score = 81;  // заменить на число от 0 до 100
if (score >= 85)
  console.log('отлично');
else if (score >= 75)
  console.log('хорошо');
else if (score >= 60)
  console.log('удовлетворительно');
else
  console.log('неудовлетворительно')

Задача 3

Вычислить сумму всех чисел от %%0%% до %%100%%, кратных %%3%%.

Решение

var sum = 0;
for (var i = 0; i <= 100; i++) {
  if (i % 3 == 0) // условие кратности 3
    sum += i;
}
console.log(sum);

Как оптимизировать это решение?

В начало1 из 27ВыйтиЗавершить просмотр