Роботландский Университет © А.А.Дуванов

# ЗНАКОМСТВО С ЯЗЫКОМ

i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | ?

урок 3 | зачет | задания | дополнения | урок 5

## урок 4: повторения

На предыдущих уроках рассматривались команды:

команда присваивания | `result = x*y;`
условная команда | `if (x) z++;`
переключатель |
    switch(x)
    {
      case "1":
        str = "one";
        break;
      case "2":
        str = "two";
        break;
      default:
        str = "ошибка";
    }
блок (составная команда) | `{ c = x; x = y; y = c; }`

Продолжим знакомство с командами JavaScript.

### команды цикла

#### цикл while

общий вид |  | пример |
--- | --- | --- | ---
    while(условие)
      команда
    var i   = 1;
    var sum = 0;
    while(i <= 100)
    {
      sum += i;
      i++;
    }
    alert("Сумма 1+2+...+100 = " + sum);

Цикл работает так. Сначала проверяется условие. Если оно истинно, выполняется `команда` (тело цикла). И эти действия повторяются, то есть снова проверяется условие, если оно истинно, выполняется тело цикла и т.д.

Цикл заканчивает работу, когда при очередной проверке условие оказывается ложным. Так как условие проверяется перед выполнением тела цикла, то команды, входящие в цикл, могут не выполниться ни разу.

#### Цикл for

общий вид |  | пример |
--- | --- | --- | ---
    for(начало;условие;приращение)
      команда
    var i;
    var sum = 0;
    for(i=1; i<=100; i++) sum += i;
    alert("Сумма 1+2+...+100="+sum);

Цикл работает так. Команда, помещаемая в начало, выполняется до циклического повторения (в примере это команда `i=1;`), а сам цикл образуется следующими действиями:

1. Проверка условия (в примере `i<=100`).
2. Выполнение тела цикла (в примере `sum += i`).
3. Выполнение команды, записанной в разделе приращение (в примере `i++`).

Как и в команде `while`, тело цикла может не выполниться ни разу, если условие ложно с самого начала. Не выполнится при этом и команда из раздела приращение. А вот команда из раздела начало выполняется всегда, независимо от условия, и выполняется ровно один раз.

> Замечание. В заголовке цикла `for` любая из трех конструкций начало, условие, приращение может быть опущена, при этом соответствующую точку с запятой опускать нельзя. Когда опущено условие, считается, что оно имеет значение `true`. Таким образом, цикл превращается в бесконечный:

>     for(;;) команда;
> |  | Этот цикл не остановится, если только не будет содержать внутри себя команду `break`.

### Команды break и continue

Эти команды используют в теле цикла для изменения последовательного хода выполнения команд.

Команда `continue` заставляет браузер пропустить выполнение всех команд после нее и до конца тела цикла. Но цикл продолжается.

Команда `break` еще радикальнее — она заставляет браузер немедленно прекратить выполнение цикла.

##### пример 1 (continue)

Найти сумму 5 четных чисел, случайным образом взятых из диапазона [1,20].

    var len     = 5;  // Количество чисел.
    var a       = 1;  // Левая граница интервала.
    var b       = 20; // Правая граница интервала.
    var sum     = 0;  // Сумматор.
    var counter = 0;  // Счетчик чисел.
    var number;       // Случайное число.
    var str = "";     // Строка для вывода.
    while (counter < len)
    {
      number = Math.floor(a + (b-a+1)*Math.random());
      if (number%2) continue;
      sum += number;
      str += number;
      if (counter < len-1) str += " + ";
      else                 str += " = ";
      counter++;
    }
    str += sum;
    alert(str);

> Замечание. Стандартная функция `Math.random()` генерирует случайное число из отрезка [0,1]. Стандартная функция `Math.floor(num)` возвращает ближайщее целое число, меньшее или равное аргументу.

##### пример 2 (break)

Целые числа случайным образом генерируются из диапазона [1,20]. Требуется суммировать эти числа до тех пор, пока очередное случайное число не станет равным 10.

    var a       = 1;  // Левая граница интервала.
    var b       = 20; // Правая граница интервала.
    var special = 10; // Критическое значение случайного числа.
    var sum     = 0;  // Сумматор.
    var number;       // Случайное число.
    var str     = ""; // Строка для вывода.
    for (;;)
    {
      number = Math.floor(a + (b-a+1)*Math.random());
      sum += number;
      str += number;
      if (number == special) break;
      str += " + ";
    }
    str += " = " + sum;
    alert(str);

> Замечание. Конструкция `for(;;){...}` используется для задания бесконечного цикла.

Испытатель while

Испытатель for

Угадайка

Программа Угадайки

Дополнительный материал

В каждом задании трех Зачетных классов нужно записать сообщение, которое появится в окошке `alert` после выполнения скрипта.

#### Зачетный класс 1

Сначала нажмите кнопку Сброс, затем приступайте к решению.

Чтобы увидеть результат работы, нажмите кнопку Оценка.

#### Зачетный класс 2

Сначала нажмите кнопку Сброс, затем приступайте к решению.

Чтобы увидеть результат работы, нажмите кнопку Оценка.

#### Зачетный класс 3

Сначала нажмите кнопку Сброс, затем приступайте к решению.

Чтобы увидеть результат работы, нажмите кнопку Оценка.

1. Создайте приложение для обучения малышей устному счету. Программа должна автоматически генерировать примеры типа “`число1 + число2 =`”, проверять ответы, реагировать на ошибки, выставлять оценку в конце работы.