JavaScript · Синтаксис · Начальный уровень

Цикл while

14 задач

Упражнения по циклу while в JavaScript: повторение действий, счётчики, суммы чисел, ввод до нужного условия, break, перебор строк и базовая обработка символов.

Как работает цикл while

#
Цикл while продолжает выполнять тело, пока условие остаётся true. В отличие от for, который обходит элементы последовательности, while продолжается, пока что-то не сделает условие false. ```javascript let i = 1; while (i <= 10) { console.log(i); i++; } ``` i++ — стандартный инкремент, добавляет 1 к i. Вы также увидите i += 1 — означает то же самое. В JavaScript обе формы одинаково распространены. JavaScript проверяет условие перед каждой итерацией, включая первую. Если условие false с самого начала — тело не выполнится ни разу. Самая распространённая ошибка: забыть обновить переменную, от которой зависит условие. Если i никогда не меняется — цикл выполняется вечно. Всегда убеждайтесь, что что-то внутри приближает вас к условию выхода. break выходит из цикла немедленно. Полезен, когда точка выхода находится в середине тела: ```javascript while (true) { const password = prompt("Введите пароль: "); if (password === "secret") { break; } console.log("Неверно, попробуйте ещё раз"); } ``` while (true) — намеренный бесконечный цикл, полностью полагающийся на break. Стандартный паттерн для "продолжать спрашивать, пока не получим корректный ввод".

Счётчики, накопители и паттерн «сторожевого значения»

#
Три паттерна встречаются почти во всех задачах с while. Счётчик: начинаем с некоторого значения, увеличиваем или уменьшаем каждую итерацию, останавливаемся на границе. ```javascript let i = 1; while (i <= 10) { console.log(i); i++; } ``` Накопитель: начинаем сумму с нуля, добавляем каждое значение внутри цикла. ```javascript let i = 1; let total = 0; while (i <= 100) { total += i; i++; } console.log(total); ``` Сторожевое значение: продолжаем читать ввод, пока пользователь не введёт сигнал остановки (например, 0). В этих задачах условие остановки обычно передаётся напрямую как часть задачи. ```javascript let total = 0; let num = parseInt(prompt("Введите число (0 для остановки): ")); while (num !== 0) { total += num; num = parseInt(prompt("Введите число (0 для остановки): ")); } console.log(total); ``` Эти три паттерна комбинируются. Таблица умножения использует счётчик. Подсчёт цифр использует счётчик и Math.floor(n / 10) для отрезания цифр по одной (аналог целочисленного деления в Python).

Обход строк с помощью while

#
Цикл while хорошо подходит для обхода строк по индексу, когда нужно больше контроля, чем даёт for...of — движение в обратном направлении, построение результата символ за символом. Вывод строки в обратном порядке: ```javascript const word = "JavaScript"; let i = word.length - 1; while (i >= 0) { process.stdout.write(word[i]); i--; } ``` i начинается с индекса последнего символа и уменьшается до 0. process.stdout.write не добавляет перенос строки после каждого символа (аналог Python's end=""). Построение отфильтрованной строки — оставляем только символы, не входящие в набор: ```javascript const punctuation = "!@#$%^&./,?|"; const text = "Hello, world!"; let result = ""; let i = 0; while (i < text.length) { if (!punctuation.includes(text[i])) { result += text[i]; } i++; } console.log(result); ``` punctuation.includes(text[i]) проверяет, есть ли символ в строке знаков пунктуации. ! отрицает результат, поэтому в result добавляются только символы без пунктуации.
01

Числа от 1 до 10.

#

Выведите на печать (console.log) числа от 1 до 10 с помощью цикла while .

let i = 1;
Решение
let i = 1;
while (i <= 10) {
    console.log(i);
    i += 1;
}

// или так можно: условие остановки поставить внутри цикла
let i = 1;

while (true) {
    if (i > 10) {
        break;
    }
    console.log(i);
    i += 1;
}
02

Обратный отсчёт от 10.

#

Выведите числа от 10 до 1 в обратном порядке.

let i = 10;
Решение
let i = 10;
while (i >= 1) {
    console.log(i);
    i -= 1;
}

// или так можно: использовать условие больше нуля
let i = 10;

while (i > 0) {
    console.log(i);
    i -= 1;
}
03

Числа до введённого значения.

#

Пользователь вводит число. Выведите все числа от 1 до этого числа.

let n = 5;
let i = 1;
Решение
let n = 5;
let i = 1;
while (i <= n) {
    console.log(i);
    i += 1;
}
04

Только чётные до числа.

#

Пользователь вводит число. Выведите только чётные числа от 1 до этого числа.

let n = 5;
let i = 1;
Решение
let n = 5;
let i = 1;
while (i <= n) {
    if (i % 2 === 0) {
        console.log(i);
    }
    i += 1;
}

// второй вариант: сразу идти только по чётным числам
let n = 10;
let i = 2;

while (i <= n) {
    console.log(i);
    i += 2;
}
05

Сумма от 1 до 100.

#

Найдите сумму всех чисел от 1 до 100 с помощью цикла while .

let i = 1;
let total = 0;
Решение
let i = 1;
let total = 0;
while (i <= 100) {
    total += i;
    i += 1;
}
console.log("Сумма:", total);

// или так можно через формулу суммы от 1 до n
let total = (100 * 101) / 2;
console.log("Сумма:", total);
06

Сумма до введённого числа.

#

Пользователь вводит число. Найдите сумму всех чисел от 1 до этого числа.

let n = 5;
let i = 1;
let total = 0;
Решение
let n = 5;
let i = 1;
let total = 0;
while (i <= n) {
    total += i;
    i += 1;
}
console.log("Сумма:", total);
07

Таблица умножения.

#

Пользователь вводит число. Выведите таблицу умножения для этого числа от 1 до 10.

let n = 5;
let i = 1;
Решение
let n = 5;
let i = 1;
while (i <= 10) {
    console.log(`${n} x ${i} = ${n * i}`);
    i += 1;
}

// или так можно: сначала посчитать произведение
let n = 5;
let i = 1;

while (i <= 10) {
    let result = n * i;
    console.log(`${n} x ${i} = ${result}`);
    i += 1;
}
08

Пароль до правильного ввода.

#

Пользователь вводит пароль. Запрашивайте пароль снова, пока он не будет равен "javascript" .

let password = "";
Решение
let password = "";

while (password !== "javascript") {
    console.log("Неверный пароль");
    password = "javascript"; // имитация нового ввода
}

console.log("Пароль принят");
09

Сумма чисел до нуля.

#

Пользователь вводит числа. Программа должна считать сумму введённых чисел, пока пользователь не введёт 0 .

let total = 0;
let num = 5;
Решение
let total = 0;
let num = 5;

while (num !== 0) {
    total += num;
    // В реальной программе здесь можно получить следующее значение.
    // Для примера завершим цикл.
    num = 0;
}

console.log("Сумма:", total);
10

Подсчёт цифр в числе.

#

Пользователь вводит число. Подсчитайте, сколько цифр в этом числе. Можно без цикла решить любым способом.

let num = 5;
Решение
let num = -12345;
let count = String(Math.abs(num)).length;

console.log("Количество цифр:", count);
11

Слово задом наперёд.

#

Выведите слово в терминал задом-наперед.

let word = "иладеп";
Решение
let word = "иладеп";
console.log(word.split('').reverse().join(''));

// или:
word = "иладеп";
let drow = "";
let index = word.length - 1;
while (index > -1) {
    drow += word[index];
    index -= 1;
}
console.log(drow);
12

Текст между одинаковыми символами.

#

Тут я наверно заигрался и это задание наверно не простое. Но не страшно, давайте попробуем не спеша пошагово продумать что нужно делать. Условие: Есть строка с любой информацией, например: 'Компания ООО "Рога и Копыта" выиграли тындырындын по закупке чего-то.' Нужно из нее вырезать кусок между какими-то одинаковыми символами. Например в данном случае чтоб получить название компании, нужно вырезать вежду кавычками. Метод строк split не использовать. Нужно использовать только метод index!! Можете поэкспериментировать и решить задание без цикла и с циклом, как хотите. P.S. Понадобятся срезы, и сделайте запрос текста и запрос символа между повторением которого вырезать через input. P.P.S См. таблицу методов строк. Метод index возвращает индекс ПЕРВОГО вхождения символа в строке (второго не возвращает (если не "намутить" что он станет первым в какой-то промежуточной строке") ).

let text = "JavaScript";
let symbol = "a";
Решение
let text = 'Компания ООО "Рога и Копыта" выиграла тендер';
let symbol = '"';

let startIndex = text.indexOf(symbol);

if (startIndex === -1) {
    console.log("Символ не найден");
} else {
    startIndex += 1;
    let newText = "";

    while (startIndex < text.length) {
        let char = text[startIndex];

        if (char === symbol) {
            break;
        }

        newText += char;
        startIndex += 1;
    }

    console.log(newText);
}
13

Ступеньки из букв.

#

Тут всё просто: Есть строка "ступеньки", выведите ее в терминал вот так: с -т --у ---п ----е -----н ------ь -------к --------и

let text = "ступеньки";
Решение
let word = "ступеньки";
let i = 0;

while (i < word.length) {
    console.log("-".repeat(i) + word[i]);
    i += 1;
}
14

Удаление пунктуации из текста.

#

Есть перечень знаков пунктуации и спец. символов: punctuation = "!@#$%^&./,?|" И есть строка текста, в котрой они могут присутствовать. Сформируйте новую строку без знаков пунктуации, оставив только текст, пробелы сохранить. Так нужно вот и всё.

let punctuation = "!@#$%^&./,?|";
let text = "Наверно на этом упражнении закончим. Хватит! Мы хотим отдыхать! #@&#@&!!!";
Решение
let punctuation = "!@#$%^&./,?|";
let text = "Наверно на этом упражнении закончим. Хватит! Мы хотим отдыхать! #@&#@&!!!";

let newText = "";
let idx = 0;

while (idx < text.length) {
    let char = text[idx];

    if (!punctuation.includes(char)) {
        newText += char;
    }

    idx += 1;
}

console.log(newText);