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);