Тема, шрифт, мова та інші налаштування інтерфейсу.
Статистика використання. Вимкнена, доки ви її не дозволите.
Реклама та вимірювання реклами. Вимкнені, доки ви їх не дозволите.
ПРО САЙТ
Усі відкриті вкладки сайту
JavaScript · Синтаксис · Початковий рівень
Цикл while
14 завдань
Вправи по циклу while в JavaScript: повторення дій, лічильники, сума чисел, введення до потрібної умови, break, перебір рядка і базова обробка символів.
Короткий вступ до теми та пояснення перед вправами (вправи нижче):
Цикл 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 добре підходить для обходу рядків за індексом, коли потрібно більше контролю, ніж дає 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 додаються лише символи без пунктуації.
Виведіть у консоль (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;
}
let i = 10;
while (i >= 1) {
console.log(i);
i -= 1;
}
// або так можна: використовувати умову більше нуля
let i = 10;
while (i > 0) {
console.log(i);
i -= 1;
}
Користувач вводить число.
Виведіть тільки парні числа від 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;
}
Знайдіть суму всіх чисел від 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);
Користувач вводить число.
Виведіть таблицю множення для цього числа від 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;
}
Користувач вводить числа.
Програма повинна рахувати суму введених чисел,
поки користувач не введе 0.
let total = 0;
let num = 5;
Рішення
let total = 0;
let num = 5;
while (num !== 0) {
total += num;
// У реальній програмі тут можна отримати наступне значення.
// Для прикладу завершимо цикл.
num = 0;
}
console.log("Сума:", total);
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);
Тут я мабуть загрався і це завдання мабуть не просте. Але нічого страшного,
давайте спробуємо не поспішаючи покроково продумати що потрібно робити. Умова: Є рядок з будь-якою інформацією, наприклад: 'Компанія ТОВ "Роги і Копита" виграла тендер на закупівлю чогось.' Потрібно з нього вирізати шматок між однаковими символами. Наприклад у цьому
випадку щоб отримати назву компанії, потрібно вирізати між лапками. Метод рядків 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);
}
Є перелік знаків пунктуації та спец. символів: 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);
No split tab
Налаштування cookies
Ми використовуємо необхідні cookies для роботи сайту. З вашого дозволу ми також можемо зберігати налаштування сайту та використовувати аналітичні й рекламні cookies, щоб розуміти використання сайту й підтримувати розвиток проєкту.
* Ви завжди можете змінити свій вибір у налаштуваннях сайту.
Оберіть категорії cookies
Налаштування аналітики
Можна вимкнути аналітику використання платформи. Також можна надіслати в Google Analytics запит на видалення даних про використання цього сайту, пов'язаних із цим браузером.
Навчальний workspace
Навчайтеся, читаючи, запускаючи код і розв'язуючи задачі.
Практикуйте програмування з поясненнями тем, вправами, інструментами browser IDE, перевіркою regex і тренуванням друку коду в одному workspace.
Відкривайте інструменти у вкладках.Вправи, IDE-інструменти й тренажери залишаються доступними як вкладки сайту.
Перемикайтеся без втрати контексту.Переходьте між поясненнями, кодом та утилітами, зберігаючи своє місце.
Використовуйте sidebar як карту.Ліві панелі містять навігацію, налаштування, файли, libraries та керування інструментами.
PythonJavaScriptSQLite
Одна IDE, три практичні режими
Python у браузері.Запускайте невеликі скрипти, пробуйте бібліотеки й тренуйте API-запити без встановлення.
JavaScript для швидких експериментів.Перевіряйте код для браузера й порівнюйте ідеї поруч із навчальними матеріалами.
SQLite для практики з даними.Відкривайте оглядач бази даних, переглядайте таблиці, пишіть запити й вивчайте SQL локально.
ТемаIDE
Працюйте поруч у split tabs
Тримайте інструкції перед очима.Відкрийте вправу або довідкову сторінку поруч з IDE, замість постійних перемикань.
Порівнюйте інструменти під час навчання.Розміщуйте перевірки regex, пояснення та експерименти з кодом поруч, коли це потрібно для задачі.
Закрийте split, коли завершите.Workspace повернеться до однієї сфокусованої вкладки, а відкриті вкладки сайту залишаться доступними.
Тренажер друку коду
Або звичайного тексту
Тренажер розрахований на фізичну клавіатуру.Відкрийте цей розділ на ноутбуці або комп'ютері з широким екраном. На телефоні тренування друку не працюватиме коректно.
Швидкість: 0 зн/хв
0 слів/хв
Найкраща швидкість (60с): 0 зн/хв
0 слів/хв
Помилки: 0
Загальний час: 0.0 с
Щоб тренувати сліпий друк, не підглядайте на фізичну клавіатуру.