MakeFirstStep· Frontend + зеҳни сунъӣ

Дарси 4 · JavaScript

Давраҳо (цикл)

Дар саҳифа 100 молро нишон додан, аз ҳамаи ҳарфҳои парол гузаштан, даромади моҳро ҳисоб кардан, ҷадвал кашидан — ҳамааш «як корро бисёр маротиба кун» аст. Як сатри яксонро сад маротиба навиштан касе нахоҳад кард: барои ин давраҳо (цикл) ҳастанд. Имрӯз шумо навиштани онҳо, қатъ кардани онҳо ва — ки камтар муҳим нест — роҳ надодан ба он ки онҳо ҳеҷ гоҳ қатъ нашаванд, меомӯзед.

  • Амалро тавассути while, for ва do..while такрор кунед ва шарҳ диҳед, ки давра қадам ба қадам чӣ тавр мегузарад
  • Давраи мувофиқи вазифаро интихоб кунед
  • Ҷараёни давраро тавассути break ва continue идора кунед
  • Сатрро ҳарф ба ҳарф бо ёрии for..of аз назар гузаронед
  • Натиҷаро дар тағйирёбанда ҷамъ кунед: маблағ, ҳисобкунак, ҳадди аксар, сатр
  • Бо давраҳои дарунҷоӣ ҷадвал ва шаклҳо кашед ва давраи беохирро бишносед
Бо ин саҳифа чӣ тавр кор кардан лозим аст

Тамоми код дар заминаи торик бо тугмаи ▶ Иҷро кардан — зинда аст. Онро бевосита дар ин ҷо тағйир диҳед ва натиҷаро дарҳол дар консоли поёни он бинед. Вайрон кардед — ↺ Аз нав-ро пахш кунед. Ишораҳои вазифаҳо пинҳон шудаанд: аввал худатон кӯшиш кунед, ишораро танҳо вақте кушоед, ки монд шудед. Имрӯз мо танҳо аз он чи аллакай медонем, истифода мебарем: тағйирёбандаҳо, навъҳо ва шартҳо. Функсияҳо ва массивҳо ҳоло нестанд — онҳо дар дарсҳои 5 ва 6 мебошанд.

01 Давраҳо барои чӣ лозиманд. Давраи while

Тасаввур кунед, ки шумо дар остонаи MakeFirstStep панҷ меҳмонро пешвоз мегиред. Бе давраҳо код чунин менамояд:

Бе давра: сатрҳоро нусха мекунем · Ctrl + Enter
console.log("Гость №1, добро пожаловать!");
console.log("Гость №2, добро пожаловать!");
console.log("Гость №3, добро пожаловать!");
console.log("Гость №4, добро пожаловать!");
console.log("Гость №5, добро пожаловать!");

Панҷ сатр — ҳанӯз тоқатфарсо нест. Аммо агар меҳмонон 500 бошанд? Ва агар шумораи онҳо пешакӣ маълум набошад? Дар ин ҷо давра ба кумак меояд — сохторе, ки блоки кодро то даме ки шарт иҷро мешавад, такрор мекунад. Соддатарин давра — while («то даме ки»):

Бо давраи while · Ctrl + Enter
let i = 1;                 // 1. оғоз: ҳисобкунак аз 1 сар мешавад
while (i <= 5) {           // 2. шарт: то даме ки true аст, такрор мекунем
  console.log(`Гость №${i}, добро пожаловать!`);
  i++;                     // 3. қадам: ҳисобкунакро иваз мекунем
}
console.log("Все гости встречены");
Ташбеҳ аз зиндагӣ

Шумо дар тӯй ошӣ палав тақсим мекунед. Қоида содда: то даме ки дар қазон палав ҳаст — боз як табақ мекашем. Пеш аз ҳар табақ ба қазон менигаред (шартро месанҷед). Палав ҳаст — мекашед (бадани давраро иҷро мекунед). Қазон холӣ — тамом. Чанд табақ мешавад, пешакӣ намедонед: ин аз қазон вобаста аст.

while қадам ба қадам чӣ тавр кор мекунад

  1. Санҷиши шарт. JavaScript ифодаро дар қавсҳо пас аз while ҳисоб мекунад. Ин ҳамон ифодаест, ки дар if: true ё false.
  2. Агар true — ҳар он чи дар қавсҳои фигурӣ аст, иҷро мешавад. Ин бадани давра аст.
  3. Бозгашт ба қадами 1. Ба қавси пӯшанда расидем — боз шартро месанҷем.
  4. Агар false — давра тамом мешавад, барнома ба пеш, ба сатри пас аз } меравад.

Як гузариш аз болои бадан итератсия (ё «давр») номида мешавад. Дар мисоли мо чунин мегузарад:

Даврi пеш аз санҷишi <= 5?Чӣ бароварда мешавадi пас аз i++
11trueГость №12
22trueГость №23
33trueГость №34
44trueГость №45
55trueГость №56
—6falseдавра тамом шуд, ба сатри «Все гости встречены» меравем
Бадани давра
Коди дар қавсҳои фигурӣ, ки такрор мешавад.
Шарт
Ифодае, ки пеш аз ҳар давр санҷида мешавад. true — давр мезанем, false — мебароем.
Итератсия
Як даври давра: як гузариш аз болои бадан.
Ҳисобкунак
Тағйирёбандае, ки аз давр ба давр тағйир меёбад ва дар ниҳоят шартро дурӯғ мекунад. Одатан онро i меноманд.
Ёдоварӣ: навиштҳои кӯтоҳ

i++ — ҳамон чизест, ки i = i + 1. i-- — ба 1 кам кардан. i += 2 — 2 илова кардан, money -= 6 — 6 тарҳ кардан. Ин навиштҳоро мо дар ҳар давра вомехӯрем.

while, вақте ки шумораи давр пешакӣ маълум нест

Қуввати асосии while — ҳолатҳои «кун, то даме ки чизе рух диҳад». Масалан, то даме ки пул барои чой кифоя аст:

Таҳрир кардан мумкин аст · Ctrl + Enter
let money = 20;          // сомонӣ дар ҳамён
const teaPrice = 6;      // нархи як чойник чой

while (money >= teaPrice) {
  money -= teaPrice;
  console.log(`Выпили чай. Осталось: ${money} сомони`);
}
console.log("Денег на чай больше нет");

Чанд чойник мешавад, пешакӣ намоён нест, давра худаш ҳисоб кард. Агар шумораи такрор фавран маълум бошад («маҳз 5 меҳмон»), навишти дигар — for — қулайтар аст, дар бораи он дар бахши оянда.

Хатоҳои маъмул

1. Агар шарт аз худи аввал дурӯғ бошад, бадан ягон маротиба иҷро намешавад — ва ин муқаррарӣ аст, танҳо чизе бароварда намешавад. 2. Агар тағйир додани ҳисобкунакро (i++) фаромӯш кунед, шарт то абад рост мемонад ва давра абадӣ давр мезанад — ин давраи беохир аст. Мо онро дар бахши 08 алоҳида таҳлил мекунем, наметарсед.

Шарт аз аввал дурӯғ: бадан иҷро намешавад · Ctrl + Enter
let n = 10;
while (n < 5) {
  console.log("Сюда мы не попадём");
  n++;
}
console.log("Конец, n =", n);   // → Конец, n = 10

Бештар хонед: learn.javascript.ru — Давраҳои while ва for · MDN — while

Амалия: мустаҳкам мекунем

Се давраи хурди while: ба пеш, ба қафо ҳисоб мекунем ва пул ҷамъ мекунем.

ВАЗИФАИ 1.1

Пешвоз гирифтани меҳмонон

осон

Бо ёрии while даъватномаҳоро барои чор донишҷӯ бароред: Студент №1, проходите в аудиторию ва ҳамин тавр то чорум.

Таҳрир кардан мумкин аст · Ctrl + Enter
let i = 1;
// давраи while-и шумо дар ин ҷо
Натиҷаи интизоршаванда
Студент №1, проходите в аудиторию
Студент №2, проходите в аудиторию
Студент №3, проходите в аудиторию
Студент №4, проходите в аудиторию
Ишора 1

Шарт: то даме ки i аз 4 зиёд нест — while (i <= 4).

Ишора 2

Дар дохили бадан — console.log(`Студент №${i}, проходите в аудиторию`) ва, ҳатман, i++.

ВАЗИФАИ 1.2

Ҳисоби баръакс

осон

Пеш аз оғози имтиҳон ҳисоби баръакс эълон мекунанд: 5, 4, 3, 2, 1 — ва пас аз давра калимаи Начали!. Ҳисобкунак бояд кам шавад.

Таҳрир кардан мумкин аст · Ctrl + Enter
let seconds = 5;
// давраи while дар ин ҷо

console.log("Начали!");
Натиҷаи интизоршаванда
5
4
3
2
1
Начали!
Ишора 1

Шарт — то даме ки seconds аз сифр калон аст: seconds > 0.

Ишора 2

Аввал қиматро мебарорем, баъд кам мекунем: seconds--. Баровардани «Начали!» пас аз қавси пӯшандаи давра истодааст.

ВАЗИФАИ 1.3

Ғулак барои телефон

миёна

Шумо барои гӯшмонакҳо ба маблағи 30 сомонӣ ғулак мекунед. Ҳар рӯз 5 сомонӣ ҷудо мекунед. Барои ҳар рӯз як сатр бароред: День 1: накоплено 5 сомони, то даме ки маблағ ба мақсад нарасад. Ду тағйирёбанда — day ва saved-ро эълон кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const goal = 30;
let saved = 0;
let day = 0;
// давра: то даме ки saved аз goal хурд аст
Натиҷаи интизоршаванда
День 1: накоплено 5 сомони
День 2: накоплено 10 сомони
День 3: накоплено 15 сомони
День 4: накоплено 20 сомони
День 5: накоплено 25 сомони
День 6: накоплено 30 сомони
Ишора 1

Дар давра ду тағйирёбанда тағйир меёбад: day++ ва saved += 5. Шарт ба saved нигоҳ мекунад.

Ишора 2

Аввал day ва saved-ро зиёд кунед, баъд сатрро бароред — он гоҳ дар он фавран рақамҳои дуруст мешаванд.

02 Давраи for

Дар давраи while се қисми муҳим — оғоз, шарт ва қадам — дар код пароканда шудаанд: оғоз болотар аз давра, қадам дар охири бадан. Чизеро фаромӯш кардан осон аст. Давраи for ҳамаи инро дар як сатр ҷамъ мекунад:

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let i = 1; i <= 5; i++) {
  console.log(`Гость №${i}, добро пожаловать!`);
}

Натиҷа ҳамон аст, ки дар while-и бахши гузашта, вале код камтар аст ва ҳар се қисм фавран намоён мебошад.

for (let i = 1; i <= 5; i++) { console.log(i); }
Се қисм дар қавсҳо бо нуқтаву вергул ҷудо мешаванд
Ташбеҳ аз зиндагӣ

Маршруткаи №8 аз болои истгоҳҳо мегузарад. Сарлавҳаи for — ҷавоб ба се савол аст: дар кадом истгоҳ нишастӣ (let i = 1), то кадом истгоҳ меравӣ (i <= 5) ва чӣ тавр меравӣ — яктогӣ ё як истгоҳ гузашта (i++). Бадани давра — ин он аст, ки дар ҳар истгоҳ мекунӣ: ба тиреза менигарӣ, мебароӣ, пул медиҳӣ.

Ҳама чиз бо кадом тартиб иҷро мешавад

  1. Оғоз let i = 1 як бор, аз ҳама аввал иҷро мешавад.
  2. Шарт i <= 5 пеш аз ҳар давр санҷида мешавад. false — баромадан аз давра.
  3. Бадан пурра иҷро мешавад.
  4. Қадам i++ пас аз бадан иҷро мешавад. Баъд боз қадами 2.

Вариантҳои гуногуни сарлавҳа

Се қисмро тағйир дода, ҳар тавр ҳисоб кардан мумкин аст: аз сифр, бо қадам, ба қафо.

Чӣ лозим астСарлавҳаҚиматҳои i
аз 1 то 5for (let i = 1; i <= 5; i++)1 2 3 4 5
аз 0 то 4 (панҷ давр)for (let i = 0; i < 5; i++)0 1 2 3 4
бо қадами 2for (let i = 2; i <= 10; i += 2)2 4 6 8 10
ба қафоfor (let i = 5; i >= 1; i--)5 4 3 2 1
Таҳрир кардан мумкин аст · Ctrl + Enter
console.log("--- с шагом 5 ---");
for (let i = 0; i <= 20; i += 5) {
  console.log(i);
}

console.log("--- назад ---");
for (let i = 3; i >= 1; i--) {
  console.log(`Осталось ${i}`);
}
Маслиҳат: while ё for?

Пешакӣ медонед, ки чанд давр аст («5 меҳмон», «аз 1 то 100») — for-ро гиред. Давр задан лозим аст «то даме ки чизе рух диҳад» (пул кифоя аст, воридкунӣ тамом нашудааст) — while-ро гиред. Ҳар for-ро ба while аз нав навиштан мумкин аст ва баръакс: ин масъалаи қулайӣ аст.

Дом: ба як хато кардан

Маъмултарин хато дар давраҳо — «хато ба як» (off-by-one). Фарқи байни i < 5 ва i <= 5 — як даври пурраи зиёдатӣ аст. Агар аз сифр ҳисоб кунед, < нависед; агар аз як — <=. Ва ҳамеша қимати якум ва охирин-ро санҷед.

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let i = 1; i < 5; i++) {
  console.log(`Урок ${i}`);   // дарси 5-ум гум шуд!
}

Тағйирёбандаи давра танҳо дар дохил зинда аст

Ин код хато медиҳад · Ctrl + Enter
for (let i = 1; i <= 3; i++) {
  console.log(i);
}
console.log(i);   // ✖ i берун аз давра вуҷуд надорад

Ин муқаррарӣ аст ва ҳатто қулай: ҳар давра i-и худро дорад ва давраҳо ба ҳамдигар халал намерасонанд. Агар қимат пас аз давра лозим бошад, тағйирёбандаро то он эълон кунед. Чаро ин тавр сохта шудааст — дар дарс дар бораи функсияҳо мегӯем.

Бештар хонед: learn.javascript.ru — Давраи for · MDN — for

Амалия: мустаҳкам мекунем

Қимати оғозӣ, қадам ва самтро иваз мекунем.

ВАЗИФАИ 2.1

Самбуса ба 5 сомонӣ

осон

Самбуса 5 сомонӣ меарзад. Арзишро барои 1, 2, 3, 4 ва 5 дона бароред: 3 шт. — 15 сомони. Давраи for-ро истифода баред.

Таҳрир кардан мумкин аст · Ctrl + Enter
const price = 5;
// for ...
Натиҷаи интизоршаванда
1 шт. — 5 сомони
2 шт. — 10 сомони
3 шт. — 15 сомони
4 шт. — 20 сомони
5 шт. — 25 сомони
Ишора 1

Бигзор ҳисобкунаки qty аз 1 то 5 аз ҷумла равад: for (let qty = 1; qty <= 5; qty++).

Ишора 2

Арзиш бевосита дар сатр ҳисоб карда мешавад: `${qty} шт. — ${qty * price} сомони`.

ВАЗИФАИ 2.2

Хаторо ёбед: дарси гумшуда

миёна

Давра бояд дарсҳои 1 то 5-ро барорад, вале чизи дигар мебарорад. Иҷро кунед, ба натиҷа бинигаред ва сарлавҳаи давраро ислоҳ кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let i = 0; i < 5; i++) {
  console.log(`Урок ${i}`);
}
Натиҷаи интизоршаванда пас аз ислоҳ
Урок 1
Урок 2
Урок 3
Урок 4
Урок 5
Ишора 1

Ҳисобкунак ҳоло аз кадом қимат оғоз мешавад ва аз кадом бояд оғоз шавад?

Ишора 2

Ду қисмро иваз кардан мумкин аст: оғозро ба 1 ва шартро ба <= 5. Ё i < 5-ро монед, вале i + 1-ро бароред — ҳар роҳ мувофиқ аст, танҳо ҳар дуро якбора не.

ВАЗИФАИ 2.3

Баромадро пешбинӣ кунед ва илова намоед

миёна

Аввал бе иҷрои код дар дафтар нависед, ки ду давра чӣ мебароранд. Баъд иҷро кунед ва муқоиса намоед. Баъд давраи сеюмро илова кунед, ки C10, C7, C4, C1-ро барорад (аз 10 ба поён бо қадами 3 меравем).

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let i = 3; i > 0; i--) {
  console.log("A" + i);
}

for (let i = 0; i < 10; i += 4) {
  console.log("B" + i);
}

// давраи сеюм дар ин ҷо
Натиҷаи интизоршаванда
A3
A2
A1
B0
B4
B8
C10
C7
C4
C1
Ишора 1

Оғоз — 10, шарт — то даме ки i аз 1 хурд нест (i >= 1).

Ишора 2

Қадами «ба поён ба 3» бо i -= 3 навишта мешавад.

03 Давраи do..while

while бародари дугоник дорад: do..while («кун, то даме ки»). Фарқ ягона, вале муҳим аст: шарт пас аз бадан санҷида мешавад, бинобар ин бадан ҳадди аққал як бор иҷро мешавад, ҳатто агар шарт аз аввал дурӯғ бошад.

Таҳрир кардан мумкин аст · Ctrl + Enter
let attempt = 0;

do {
  attempt++;
  console.log(`Попытка входа №${attempt}`);
} while (attempt < 3);

Ба нуқтаву вергул пас аз while (…) диққат диҳед — дар do..while он лозим аст. Акнун ҳар ду давраро муқоиса кунед, вақте ки шарт фавран дурӯғ аст:

while муқобили do..while · Ctrl + Enter
let cups = 0;

while (cups > 0) {
  console.log("while: тело выполнилось");
}

do {
  console.log("do..while: тело выполнилось");
} while (cups > 0);
Ташбеҳ аз зиндагӣ

Дар чойхона чойникро бо чой фавран, напурсида меоваранд, баъд мепурсанд: «Боз?». Ин do..while аст: аввал амал, баъд савол. Дар муассисаи дигар аввал мепурсанд: «Чой биёрам?» — ва танҳо пас аз «ҳа» меоваранд. Ин while аст: аввал санҷиш, баъд амал.

whiledo..while
Шарт кай санҷида мешавадпеш аз баданпас аз бадан
Ҳадди ақали давр01
Нуқтаву вергул пас аз шартлозим нестлозим аст
Кай интихоб карданқариб ҳамешаамал ҳатман ҳадди аққал як бор иҷро шудан лозим аст: менюро нишон додан, пул гирифтан, воридкуниро хостан
Маслиҳат

do..while хеле камтар аз for ва while вомехӯрад. Донистани он барои саргум нашудан дар коди дигарон лозим аст, вале дар барномаҳои худ одатан аввалин ду кифоя аст.

Бештар хонед: MDN — do...while · learn.javascript.ru — Давраи do..while

Амалия: мустаҳкам мекунем

Ду давраро муқоиса мекунем ва банкомат менависем.

ВАЗИФАИ 3.1

while муқобили do..while

осон

Пешбинӣ кунед, ки код чӣ мебарорад: бадани ҳар кадом чанд маротиба иҷро мешавад ва n дар охир ба чӣ баробар аст. Ҳамаи сатрҳои баромадро бо тартиб ба prediction нависед (агар ягон давра ягон маротиба иҷро нашавад, сатрҳои он дар он ҷо нестанд) ва иҷро кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const log = [];   // дар ин ҷо код «баромад»-ро ҷамъ мекунад
let n = 10;
while (n < 5) {
  log.push(`while: n = ${n}`);
  n++;
}
do {
  log.push(`do..while: n = ${n}`);
  n++;
} while (n < 5);
log.push(`Итог: n = ${n}`);

const prediction = [];   // пешбинии шумо: сатрҳои баромад бо тартиб, масалан ["do: n = 1", …]
console.log(log.join("|") === prediction.join("|") ? "Верно!" : "Не угадали, подумайте ещё");
Натиҷаи интизоршаванда
Верно!
Ишора 1

Шарти n < 5 ҳангоми n = 10 дурӯғ аст. Ин барои while чӣ маъно дорад?

Ишора 2

do..while ҳамеша пеш аз санҷиш як давр мекунад. Пас аз он n 11 мешавад ва санҷиш аллакай даври дуюмро намегузаронад.

ВАЗИФАИ 3.2

Банкомат

миёна

Дар ҳисоб 100 сомонӣ ҳаст. Банкомат ҳар дафъа 30 сомонӣ медиҳад. Давраи do..while-ро нависед: коғази пулро диҳед, сатри Выдано 30 сомони, остаток: …-ро бароред ва такрор кунед, то даме ки бақия аз 30 кам нест. Дар охир бақияи ниҳоиро бароред.

Таҳрир кардан мумкин аст · Ctrl + Enter
let balance = 100;
// do { ... } while (...);

console.log(`Итоговый остаток: ${balance}`);
Натиҷаи интизоршаванда
Выдано 30 сомони, остаток: 70
Выдано 30 сомони, остаток: 40
Выдано 30 сомони, остаток: 10
Итоговый остаток: 10
Ишора 1

Дар бадан: balance -= 30; ва console.log. Шарти идома — balance >= 30.

Ишора 2

Нуқтаву вергулро пас аз while (balance >= 30) фаромӯш накунед. Худро санҷед: ҳангоми бақияи 10 давр такрор намешавад.

04 break ва continue

Баъзан давраро пеш аз мӯҳлат қатъ кардан ё як давраро гузаронидан лозим аст. Барои ин ду калима ҳаст.

  • break — тамоман аз давра баромадан. Барнома аз сатри пас аз давра идома меёбад.
  • continue — бақияи давраи ҷориро гузаронидан ва ба оянда гузаштан.
break: ёфтем — мебароем · Ctrl + Enter
for (let i = 1; i <= 10; i++) {
  if (i === 4) {
    console.log("Нашли нужную остановку! Выходим");
    break;
  }
  console.log(`Проезжаем остановку №${i}`);
}
console.log("Цикл закончился");
Ташбеҳ аз зиндагӣ

Шумо дар чойхона мизи холиро меҷӯед ва аз канори сафҳо мегузаред. Ёфтед — break: дигар намеҷӯед, менишинед. Ва continue — ин «ин миз банд аст, намеистам, ба оянда меравам». Ҷустуҷӯ идома меёбад, вале як мизро шумо танҳо гузаронидед.

Бақияи тақсим: оператори %

Барои мисоли continue ба мо оператори % — бақияи тақсим лозим мешавад. 7 % 3 — ин бақияи тақсими 7 ба 3 аст, яъне 1. Адад ҷуфт аст, агар бақияи тақсим ба 2 ба сифр баробар бошад.

Таҳрир кардан мумкин аст · Ctrl + Enter
console.log(7 % 3);    // → 1   (7 = 3 + 3 + бақия 1)
console.log(10 % 5);   // → 0   (бутун тақсим мешавад)
console.log(9 % 2);    // → 1   (тоқ)
console.log(8 % 2);    // → 0   (ҷуфт)
continue: давраро мегузаронем · Ctrl + Enter
for (let i = 1; i <= 8; i++) {
  if (i % 2 === 0) {
    continue;           // ҷуфтҳоро мегузаронем
  }
  console.log(`Нечётное число: ${i}`);
}
breakcontinue
Чӣ мекунадТамоман аз давра мебароядБақияи давраро мегузаронад
Баъд чӣКоди пас аз давраДавраи оянда (қадами i++ ва санҷиши шарт)
Ҳолати маъмулЧизеро меҷӯстем ва ёфтемЯк қисми қиматҳоро коркард кардан лозим нест

Усул: while (true) ва break

Мешавад, ки пешакӣ фаҳмо нест, кай қатъ шудан лозим. Он гоҳ шарти true («абадӣ» давра) менависанд ва вақте ки вақташ расид, тавассути break мебароянд. Ин ягона ҳолатест, ки давраи «абадӣ» бошуурона аст, зеро баромад барои он пешбинӣ шудааст.

Таҳрир кардан мумкин аст · Ctrl + Enter
let n = 1;
while (true) {
  n *= 2;               // дучанд мекунем
  console.log(n);
  if (n > 50) {
    break;              // баромад пешбинӣ шудааст
  }
}
console.log("Остановились на", n);
Дом: continue дар while

Дар for қадами i++ худаш иҷро мешавад. Дар while бошад, он дар бадан истодааст — ва агар continue пештар аз он кор кунад, ҳисобкунак тағйир намеёбад, шарт рост мемонад, давра овезон мешавад. Ин кодро иҷро кардан лозим нест:

Хатарнок: иҷро накунед, ин давраи беохир аст
let i = 0;
while (i < 5) {
  if (i === 2) {
    continue;      // i++-ро ҷаҳида гузаштем — i то абад ба 2 баробар мемонад
  }
  console.log(i);
  i++;
}

Ҳал: ҳисобкунакро пеш аз continue тағйир диҳед ё for-ро истифода баред. Муфассалтар дар бораи давраҳои беохир — дар бахши 08.

Бештар хонед: MDN — break · MDN — continue · learn.javascript.ru — break ва continue

Амалия: мустаҳкам мекунем

Дар вақти худ аз давра мебароем, зиёдатиро мегузаронем ва хатои маккорро меёбем.

ВАЗИФАИ 4.1

Пул ба самбуса кифоя аст ё не

осон

Дар ҳамён 100 сомонӣ, самбуса 15 меарзад. Давраи for харидани самбусаҳоро бо рақамҳои 1 то 10 кӯшиш мекунад. Агар арзиши умумии i * 15 аз 100 зиёд шавад — Денег больше нет-ро бароред ва тавассути break аз давра бароед. Вагарна Самбуса №…: всего … сомони-ро бароред.

Таҳрир кардан мумкин аст · Ctrl + Enter
const wallet = 100;
const price = 15;
// for (let i = 1; i <= 10; i++) { ... }
Натиҷаи интизоршаванда
Самбуса №1: всего 15 сомони
Самбуса №2: всего 30 сомони
Самбуса №3: всего 45 сомони
Самбуса №4: всего 60 сомони
Самбуса №5: всего 75 сомони
Самбуса №6: всего 90 сомони
Денег больше нет
Ишора 1

Аввал санҷиш: if (i * price > wallet). Дар дохили он — console.log("Денег больше нет") ва break.

Ишора 2

Сатри дар бораи самбусаро пас аз if нависед: ба он танҳо давраҳое мерасанд, ки пул кифоя буд.

ВАЗИФАИ 4.2

Бе ададҳои чандкаратаи се

осон

Ададҳоро аз 1 то 10 бароред, вале ададҳоеро, ки ба 3 тақсим мешаванд, бо ёрии continue гузаронед.

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let i = 1; i <= 10; i++) {
  // чандкаратаҳои серо гузаронед
  console.log(i);
}
Натиҷаи интизоршаванда
1
2
4
5
7
8
10
Ишора 1

Адад ба 3 бутун тақсим мешавад, агар бақияи тақсим ба 3 ба сифр баробар бошад: i % 3 === 0.

Ишора 2

Санҷиш бо continue бояд пеш аз console.log истад, вагарна адад ба баровардан мерасад.

ВАЗИФАИ 4.3

Хаторо ёбед: давра фавран қатъ мешавад

миёна

Давра бояд ададҳоро аз 1 то 5 барорад ва дар панҷ қатъ шавад. Аммо он танҳо якро мебарорад. Иҷро кунед, фикр кунед, ки = ва === аз ҳам чӣ фарқ доранд (дарси шартҳоро ба ёд оред), ва як хаторо ислоҳ кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let i = 1; i <= 10; i++) {
  console.log(i);
  if (i = 5) {
    break;
  }
}
Натиҷаи интизоршаванда пас аз ислоҳ
1
2
3
4
5
Ишора 1

Як аломати = — ин таъинот аст, на муқоиса. Шарти i = 5 дар i рақами 5-ро сабт мекунад ва натиҷа (5) «рост» ҳисобида мешавад.

Ишора 2

Барои муқоиса се аломат лозим аст: i === 5.

05 Аз назар гузаронидани сатр: for..of

Давраро на танҳо аз болои рақамҳо, балки аз болои ҳарфҳои сатр низ иҷро кардан мумкин аст. Барои ин шакли қулайи for..of («барои ҳар … аз …») ҳаст:

Таҳрир кардан мумкин аст · Ctrl + Enter
for (const letter of "Душанбе") {
  console.log(letter);
}

Дар ҳар давр ба тағйирёбандаи letter ҳарфи оянда меафтад. На ҳисобкунак, на шарт, на қадам лозим аст — JavaScript худаш ба охири сатр мерасад. const-ро менависем, зеро дар ҳар давр тағйирёбандаи нав сохта мешавад, дар дохили давр бошад мо онро тағйир намедиҳем.

Ташбеҳ аз зиндагӣ

Тасбеҳ: шумо донаҳоро яккайякӣ, аз аввалин то охирин мегузаронед. for..of — «барои ҳар дона фалон корро кун». Ба шумо муҳим нест, ки он аз рӯи рақам кадом аст, шумо танҳо донаи оянда мегиред, то ресмон тамом шавад.

Ҳамон аз назар гузаронӣ тавассути for-и оддӣ

Ҳар ҳарф дар сатр рақам — индекс дорад. Ададшуморӣ аз сифр оғоз мешавад. Ҳарфро аз рӯи рақам тавассути қавсҳои мураббаъ гирифтан мумкин аст: city[0]. Шумораи ҳарфҳо дар city.length нигоҳ дошта мешавад. Бинобар ин индекси охирин — length - 1 аст.

Таҳрир кардан мумкин аст · Ctrl + Enter
const city = "Хорог";
console.log(city.length);   // → 5
console.log(city[0]);       // → Х
console.log(city[4]);       // → г

for (let i = 0; i < city.length; i++) {
  console.log(`${i}: ${city[i]}`);
}

Вақте ки танҳо худи аломат лозим аст — for..of-ро мегирем, ин содда аст. Вақте ки боз рақам низ лозим аст (масалан, ҳарфи аввал ва охиринро муқоиса кардан) — for-и оддиро бо индекс мегирем.

Вазифаҳои маъмул оид ба сатрҳо

Ҳисоб кардан, ки ҳарф чанд маротиба вомехӯрад:

Таҳрир кардан мумкин аст · Ctrl + Enter
const word = "самбуса";
let count = 0;
for (const ch of word) {
  if (ch === "с") {
    count++;
  }
}
console.log(`Букв «с»: ${count}`);   // → Букв «с»: 2

Сатри нав ҷамъ кардан — масалан, калимаро баръакс кардан. Ҳар ҳарфи навро ба чап ба сатри аллакай ҷамъшуда мечаспонем:

Таҳрир кардан мумкин аст · Ctrl + Enter
let reversed = "";
for (const ch of "оши") {
  reversed = ch + reversed;
  console.log(`взяли «${ch}» → ${reversed}`);
}
console.log(reversed);   // → ишо

Ва бо массивҳо чӣ? Нигоҳи хурд ба пеш

Ҳамин тавр for..of рӯйхати қиматҳо-ро низ аз назар гузаронда метавонад — он массив ном дорад ва бо қавсҳои мураббаъ навишта мешавад. Ба массивҳо тамоми дарси оянда бахшида шудааст, ҳоло бошад танҳо бинед — шакли давра ҳамон аст:

Нигоҳ ба пеш: массив (муфассал дар дарси 6) · Ctrl + Enter
for (const dish of ["плов", "самбуса", "курутоб"]) {
  console.log(`В меню: ${dish}`);
}
Лозим астМегирем
Амалро N маротиба такрор кардан, ададҳоро аз назар гузарониданfor
То даме ки шарт иҷро мешавад, такрор карданwhile
Ҳар аломати сатр (рақам лозим нест)for..of
Аломатҳои сатр ва рақамҳои онҳоfor бо i ва text[i]
Ду дом

1. Сатрҳоро дар JavaScript «дар ҷояш» тағйир додан мумкин нест: як ҳарфро тавассути word[0] = "К" иваз кардан намешавад. Ҳамеша сатри нав ҷамъ кунед. 2. for..of танҳо аз болои он чи аз назар гузаронидан мумкин аст (сатрҳо, массивҳо) кор мекунад. Рақамро аз назар гузаронидан мумкин нест.

Ин код хато медиҳад · Ctrl + Enter
const word = "Душанбе";
word[0] = "К";             // ✖ сатрро аз рӯи аломатҳо тағйир додан мумкин нест
Ин код хато медиҳад · Ctrl + Enter
for (const digit of 12345) {   // ✖ рақам аз назар гузаронида намешавад
  console.log(digit);
}
Оё медонед?

Барои такрори сатр усули тайёр ҳаст: "*".repeat(5) ***** медиҳад. Дар лоиҳаҳои воқеӣ онро зуд-зуд истифода мебаранд. Аммо то даме ки меомӯзем — сатрҳоро худамон бо давраҳо ҷамъ мекунем: ин тавр шумо мефаҳмед, ки он чӣ тавр кор мекунад.

Бештар хонед: MDN — for...of · learn.javascript.ru — Сатрҳо

Амалия: мустаҳкам мекунем

Бо ҳарфҳо кор мекунем: мебарорем, ҳисоб мекунем, баръакс мекунем ва ба палиндром месанҷем.

ВАЗИФАИ 5.1

Шаҳр ҳарф ба ҳарф

осон

Ҳар ҳарфи калимаи Хуҷанд-ро дар сатри алоҳида дар формати Буква: Х бароред. for..of-ро истифода баред.

Таҳрир кардан мумкин аст · Ctrl + Enter
const city = "Хуҷанд";
// for (const ... of ...)
Натиҷаи интизоршаванда
Буква: Х
Буква: у
Буква: ҷ
Буква: а
Буква: н
Буква: д
Ишора 1

Сарлавҳа: for (const ch of city).

Ишора 2

Дар бадан: console.log(`Буква: ${ch}`).

ВАЗИФАИ 5.2

Ҳарфи «а» чанд маротиба

осон

Ҳисоб кунед, ки ҳарфи хурди а дар матн чанд маротиба вомехӯрад. Ҳисобкунак созед, матнро тавассути for..of аз назар гузаронед ва ҳангоми ёфтани ҳарфи лозимӣ ҳисобкунакро зиёд кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
const text = "Душанбе — столица Таджикистана";
// ҳисобкунак, давра, баровардан
Натиҷаи интизоршаванда
Букв «а»: 5
Ишора 1

Пеш аз давра: let count = 0;. Дар дохил: if (ch === "а") { count++; }.

Ишора 2

Баровардан — пас аз давра: console.log(`Букв «а»: ${count}`). «Т»-и калон ва «a»-и лотинӣ — аломатҳои дигаранд, онҳоро ҳисоб намекунем.

ВАЗИФАИ 5.3

Калима баръакс

миёна

Калимаи MakeFirstStep-ро бо ёрии for..of ва сатри холии ҷамъкунанда баръакс кунед. Натиҷаро бароред.

Таҳрир кардан мумкин аст · Ctrl + Enter
const word = "MakeFirstStep";
// let result = "";
Натиҷаи интизоршаванда
petStsriFekaM
Ишора 1

Ҳар ҳарфи оянда бояд пеш аз сатри аллакай ҷамъшуда илова шавад: result = ch + result.

Ишора 2

Баровардан — пас аз давра, бо як сатр: console.log(result).

ВАЗИФАИ 5.4

Палиндром ё не

душвор

Палиндром аз чап ба рост ва аз рост ба чап яксон хонда мешавад («шалаш»). Калимаро бо for-и оддӣ бо индекс санҷед: ҳарфро бо рақами i ва ҳарфро бо рақами word.length - 1 - i муқоиса кунед. Тағйирёбандаи isPalindrome = true-ро созед ва вақте номувофиқатӣ ёфтед, false гузоред ва тавассути break бароед. Ҳоло дар код калимаи «Душанбе» ҳаст — барои он бояд «не палиндром» шавад. Баъд «шалаш»-ро гузоред ва боварӣ ҳосил кунед, ки код палиндромро муайян мекунад.

Таҳрир кардан мумкин аст · Ctrl + Enter
const word = "Душанбе";
let isPalindrome = true;
// давраи for аз рӯи индексҳо

console.log(`${word} — ${isPalindrome ? "палиндром" : "не палиндром"}`);
Натиҷаи интизоршаванда
Душанбе — не палиндром
Ишора 1

Муқоиса: if (word[i] !== word[word.length - 1 - i]). Барои калимаи 5-ҳарфа ин ҷуфтҳо (0 ва 4), (1 ва 3), (2 ва 2) мебошанд.

Ишора 2

Дар дохили if: isPalindrome = false; break;. Давраро бо i < word.length иҷро кардан мумкин аст: муқоисаҳои зиёдатӣ нимаи дуюми калимаро танҳо тасдиқ мекунанд.

06 Ҳисобкунакҳо ва ҷамъкунандаҳо

Қариб ҳар давра дар барномаи воқеӣ чизеро ҷамъ мекунад: маблағи умумии чек, шумораи молҳои мувофиқ, баландтарин нарх, сатри ниҳоӣ. Барои ин усули универсалӣ ҳаст:

  1. То давра тағйирёбандаро бо қимати оғозӣ месозем (ҷамъкунанда).
  2. Дар бадани давра онро дар ҳар давр нав мекунем.
  3. Пас аз давра натиҷаро истифода мебарем.
Ташбеҳ аз зиндагӣ

Касса дар мағоза дар Бозори Сабз. Субҳ дар он 0 сомонӣ — ин оғоз аст. Ҳар харидор пул мегузорад — ин бадани давра аст. Бегоҳ кассир натиҷаро ҳисоб мекунад — ин коди пас аз давра аст. Касса пас аз ҳар харидор сифр намешавад: вагарна бегоҳ шумо танҳо пули охиринро медидед.

Чиро ҳисоб мекунемОғозДар ҳар давр
Маблағlet sum = 0sum += x
Ҳосили зарбlet product = 1product *= x
Ҳисобкунаки «чанд то мувофиқ аст»let count = 0if (шарт) { count++ }
Ҳадди аксарlet best = 0if (x > best) { best = x }
Сатрlet line = ""line += "матн"

Маблағ

Ғулак: ҳар рӯз 10 сомонӣ бештар · Ctrl + Enter
let total = 0;                       // оғоз — холӣ

for (let day = 1; day <= 5; day++) {
  total += day * 10;                 // дар рӯзи N N × 10 ҷудо мекунем
  console.log(`День ${day}: +${day * 10}, всего ${total}`);
}

console.log(`Накоплено: ${total} сомони`);

Ҳосили зарб

Барои зарб оғоз — як аст: сифр тамоми ҳосили зарбро «мехӯрад». Факториали адад (4! = 1 · 2 · 3 · 4) — классика:

Таҳрир кардан мумкин аст · Ctrl + Enter
let product = 1;
for (let i = 1; i <= 4; i++) {
  product *= i;
}
console.log(`4! = ${product}`);   // → 4! = 24

Ҳисобкунаки «чанд то мувофиқ аст»

Таҳрир кардан мумкин аст · Ctrl + Enter
let count = 0;
for (let n = 1; n <= 50; n++) {
  if (n % 7 === 0) {
    count++;
  }
}
console.log(`Чисел, кратных 7, до 50: ${count}`);   // → 7

Ҳадди аксар ва миёна

Дар кадом рӯз фоида аз ҳама бештар буд · Ctrl + Enter
let best = 0;       // фоидаи беҳтарин
let bestDay = 0;    // дар кадом рӯз буд
let sum = 0;

for (let day = 1; day <= 9; day++) {
  const profit = day * (10 - day);   // формулаи шартии фоида
  sum += profit;
  if (profit > best) {
    best = profit;
    bestDay = day;
  }
}

console.log(`Лучший день: ${bestDay}, прибыль ${best}`);
console.log(`Среднее: ${sum / 9}`);

Сатр

Ҷамъкунанда сатр низ шуда метавонад. Дар давраҳои дарунҷоӣ (бахши 07) ин усул ба мо хеле лозим мешавад:

Таҳрир кардан мумкин аст · Ctrl + Enter
let line = "";
for (let i = 1; i <= 5; i++) {
  line += i + " ";
}
console.log(line);   // → 1 2 3 4 5
Домҳои ҷамъкунандаҳо

1. Ҷамъкунанда дар дохили давра эълон шудааст — дар ҳар давр сифр мешавад. 2. Оғози нодуруст: барои маблағ 0, барои ҳосили зарб 1. 3. Ҷамъкунанда дар дохили давра бароварда мешавад, ва танҳо натиҷа лозим аст — он гоҳ сатрҳо дар экран хеле зиёданд.

Хато: ҷамъкунанда дар ҳар давр аз нав мешавад · Ctrl + Enter
for (let i = 1; i <= 3; i++) {
  let total = 0;           // ← ҳар давр аз сифр оғоз мекунем!
  total += i;
  console.log(`total = ${total}`);   // 1, 2, 3 ба ҷои 1, 3, 6
}
Ишораи ЗС

Вақте ки ЗС дар ҷавоб ҳалли «зебо»-и вазифа дар бораи маблағ ё ҷустуҷӯи ҳадди аксарро пешниҳод мекунад, аксар вақт reduce, Math.max ва чизҳои дигареро мебинед, ки мо ҳоло нагузаштаем. Агар ҳалли маҳз тавассути давра лозим бошад, дар промпт ошкоро нависед: «танҳо давраи for, бе усулҳои массив ва бе функсияҳо».

Бештар хонед: MDN — Давраҳо ва итератсия · learn.javascript.ru — Давраҳо

Амалия: мустаҳкам мекунем

Маблағ, миёна, ҳосили зарб ва аввалин вазифаи «молиявӣ».

ВАЗИФАИ 6.1

Маблағ аз 1 то 10

осон

Ҳамаи ададҳои бутунро аз 1 то 10 ҷамъ кунед ва натиҷаро бароред.

Таҳрир кардан мумкин аст · Ctrl + Enter
// let sum = 0;
Натиҷаи интизоршаванда
Сумма: 55
Ишора 1

Давраи for (let i = 1; i <= 10; i++), дар дохил sum += i.

Ишора 2

Баровардан — як бор, пас аз давра: console.log(`Сумма: ${sum}`).

ВАЗИФАИ 6.2

Даромади ҳафта

миёна

Мағоза дар Шоҳмансур дар рӯзи бо рақами d d * 20 сомонӣ ба даст меорад (рӯзи 1 — 20, рӯзи 2 — 40 ва ҳамин тавр то 7). Даромади ҳафта ва даромади миёнаи рӯзро ҳисоб кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
// ҷамъкунанда, давра аз рӯи рӯзҳои 1..7, ду баровардан
Натиҷаи интизоршаванда
Итого: 560 сомони
В среднем за день: 80 сомони
Ишора 1

Ҷамъ мекунем total += day * 20. Миёна — ин натиҷа тақсимшуда ба шумораи рӯзҳо (7).

Ишора 2

Ҳар ду баровардан — пас аз давра. 20 + 40 + … + 140 = 560, ва 560 / 7 = 80.

ВАЗИФАИ 6.3

Хаторо ёбед: факториали сифрӣ

миёна

Барнома бояд 5! = 120-ро барорад, вале сифр мебарорад. Сабабро ёбед ва як сатрро ислоҳ кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
let result = 0;
for (let i = 1; i <= 5; i++) {
  result *= i;
}
console.log(`5! = ${result}`);
Натиҷаи интизоршаванда пас аз ислоҳ
5! = 120
Ишора 1

Ҳар адад, ки ба сифр зарб карда шавад, — сифр аст. Ҷамъкунанда ҳангоми зарб аз чӣ оғоз шавад?

Ишора 2

let result = 0-ро ба let result = 1 иваз кунед.

ВАЗИФАИ 6.4

Амонат кай дучанд мешавад

душвор

Шумо ба бонк 1000 сомониро бо 10% солона гузоштед. Ҳар сол маблағ ба 1.1 зарб мешавад. Пас аз чанд соли пурра амонат на камтар аз 2000 мешавад? Давраи while ва ҳисобкунаки солҳоро истифода баред. Дар охир шумораи солҳо ва маблағи ниҳоиро, ки бо функсияи Math.round(...) то бутун мудаввар карда шудааст, бароред.

Таҳрир кардан мумкин аст · Ctrl + Enter
let balance = 1000;
let years = 0;
// то даме ки balance аз 2000 хурд аст
Натиҷаи интизоршаванда
Вклад удвоится через 8 лет: 2144 сомони
Ишора 1

Шарт — balance < 2000. Дар бадан: balance *= 1.1; ва years++;.

Ишора 2

Баровардан пас аз давра: `Вклад удвоится через ${years} лет: ${Math.round(balance)} сомони`. Маблағ бо қисми касрӣ нигоҳ дошта мешавад, мудаввар кардан танҳо ҳангоми баровардан аст.

07 Давраҳои дарунҷоӣ

Дар дохили давра давраи дигар шуда метавонад. Инро давраҳои дарунҷоӣ меноманд. Онҳо дар ҳама ҷое лозиманд, ки «аз назар гузаронии дукарата» ҳаст: рӯзҳо ва ҷуфтҳо дар ҷадвали дарсҳо, сатрҳо ва сутунҳо дар ҷадвал, қаторҳо ва ҷойҳо дар толор.

Ҷадвали дарсҳо: рӯзҳо × ҷуфтҳо · Ctrl + Enter
for (let day = 1; day <= 2; day++) {
  for (let lesson = 1; lesson <= 3; lesson++) {
    console.log(`День ${day}, пара ${lesson}`);
  }
}
Ташбеҳ аз зиндагӣ

Соат. Ақрабаки соатӣ як қадам мегузорад, ақрабаки дақиқагӣ дар ин вақт тамоми сафҳаро — 60 қадамро мегардад. Давраи беруна — ақрабаки соатӣ, дохилӣ — дақиқагӣ. То даме ки беруна як давр мезанад, дохилӣ ҳамаи даврҳои худро аз аввал то охир мегузарад.

Ин чӣ тавр иҷро мешавад

  1. Давраи беруна давр оғоз мекунад: day = 1.
  2. Давраи дохилӣ аз худи аввал оғоз мешавад ва ҳамаи даврҳои худро мегузарад: lesson = 1, 2, 3.
  3. Дохилӣ тамом шуд. Беруна қадам мегузорад: day = 2.
  4. Дохилӣ боз аз сифр оғоз мешавад ва боз ҳамаи даврҳоро мегузарад.
ҚадамdaylessonБаромад
111День 1, пара 1
212День 1, пара 2
313День 1, пара 3
421День 2, пара 1
522День 2, пара 2
623День 2, пара 3

Дар маҷмӯъ бадани давраи дохилӣ 2 × 3 = 6 маротиба иҷро шуд. Қоида: шумораи иҷрои бадан = даврҳои беруна × даврҳои дохилӣ.

Шаклҳо мекашем

console.log ҳамеша ба сатри нав мегузарад, бинобар ин қатори аломатҳоро дар як сатр бевосита кашидан мумкин нест. Ҳал — тамоми сатрро бо давраи дохилӣ дар ҷамъкунанда ҷамъ кардан ва онро пас аз давраи дохилӣ баровардан:

Росткунҷаи 3 × 5 · Ctrl + Enter
for (let row = 1; row <= 3; row++) {
  let line = "";                       // барои ҳар сатр сатри холии нав
  for (let col = 1; col <= 5; col++) {
    line += "*";
  }
  console.log(line);                   // сатри тайёрро мебарорем
}

Барои гирифтани секунҷа кифоя аст, ки давраи дохилӣ аз беруна вобаста бошад: дар сатри рақами row — маҳз row аломат.

Секунҷа · Ctrl + Enter
for (let row = 1; row <= 4; row++) {
  let line = "";
  for (let col = 1; col <= row; col++) {
    line += "#";
  }
  console.log(line);
}

Ва ниҳоят, ҷадвали зарб: дар хона ҳосили зарби рақами сатр ва рақами сутун истодааст.

Ҷадвали зарби 3 × 3 · Ctrl + Enter
for (let row = 1; row <= 3; row++) {
  let line = "";
  for (let col = 1; col <= 3; col++) {
    line += row * col + " ";
  }
  console.log(line);
}
Домҳои давраҳои дарунҷоӣ

1. Ҷамъкунандаи сатрро барои ҳар сатр сифр кардан лозим аст — яъне дар байни давраи беруна ва дохилӣ эълон кардан, мисли let line = "" дар боло. 2. Ҳар ду тағйирёбандаро якхела ном нагузоред: i ва j ё фаҳмои row ва col-ро истифода баред. 3. break танҳо аз давраи дохилӣ мебарояд — беруна кор карданро давом медиҳад.

break дар давраи дохилӣ · Ctrl + Enter
for (let day = 1; day <= 3; day++) {
  for (let lesson = 1; lesson <= 3; lesson++) {
    if (day === 2 && lesson === 2) {
      break;            // танҳо ҷуфтҳои рӯзи дуюмро қатъ кардем
    }
    console.log(`День ${day}, пара ${lesson}`);
  }
}
Маслиҳат: ин чӣ қадар кор мекунад

Давраи дарунҷоии 1000 × 1000 — ин миллион иҷрои бадан аст, компютер дар як ҳисса аз сония бармеояд. Аммо давраи сегонаи 10 000 × 10 000 × 10 000 аллакай метавонад саҳифаро «овезон кунад». Ҳар қадар дарунҷоӣ амиқтар бошад, ҳамон қадар эҳтиёткортар будан лозим аст.

Амалия: мустаҳкам мекунем

Мураббаъҳо, ҷойҳо дар толор, секунҷаҳо ва тахтаи шоҳмот.

ВАЗИФАИ 7.1

Мураббаъ аз решётка

осон

Мураббаъи 4 × 4-ро аз аломатҳои # кашед.

Таҳрир кардан мумкин аст · Ctrl + Enter
// ду давраи дарунҷоӣ
Натиҷаи интизоршаванда
####
####
####
####
Ишора 1

Давраи беруна — чор сатр, дохилӣ — чор аломат дар ҳар кадом.

Ишора 2

Байни давраҳо: let line = "";. Пас аз давраи дохилӣ: console.log(line);.

ВАЗИФАИ 7.2

Ҷойҳо дар толори кино

осон

Дар толор 2 қатор ба 3 ҷой ҳаст. Ҳамаи ҷойҳоро дар формати Ряд 1, место 1 бароред.

Таҳрир кардан мумкин аст · Ctrl + Enter
// for аз рӯи қаторҳо, дар дохил for аз рӯи ҷойҳо
Натиҷаи интизоршаванда
Ряд 1, место 1
Ряд 1, место 2
Ряд 1, место 3
Ряд 2, место 1
Ряд 2, место 2
Ряд 2, место 3
Ишора 1

Давраи беруна аз рӯи row аз 1 то 2, дохилӣ аз рӯи seat аз 1 то 3.

Ишора 2

Баровардан — дар бадани давраи дохилӣ: console.log(`Ряд ${row}, место ${seat}`).

ВАЗИФАИ 7.3

Зинапоя

миёна

«Зинапоя»-ро бо баландии 5 кашед: дар сатри аввал як ситорача, дар дуюм ду ва ҳамин тавр. Аломатро ба тағйирёбандаи symbol баред.

Таҳрир кардан мумкин аст · Ctrl + Enter
const symbol = "*";
const height = 5;
Натиҷаи интизоршаванда
*
**
***
****
*****
Ишора 1

Дар сатри рақами row бояд row аломат бошад — шарти давраи дохилӣ аз беруна вобаста аст.

Ишора 2

for (let col = 1; col <= row; col++) { line += symbol; }

ВАЗИФАИ 7.4

Хаторо ёбед: сатрҳои афзоянда

миёна

Код бояд се сатри яксони ***-ро кашад, вале зинапояи афзояндаро мекашад. Иҷро кунед, сабабро ёбед ва ислоҳ кунед — шумораи давраҳоро тағйир надода.

Таҳрир кардан мумкин аст · Ctrl + Enter
let line = "";
for (let row = 1; row <= 3; row++) {
  for (let col = 1; col <= 3; col++) {
    line += "*";
  }
  console.log(line);
}
Натиҷаи интизоршаванда пас аз ислоҳ
***
***
***
Ишора 1

Тағйирёбандаи line як бор эълон шудааст ва ҳеҷ гоҳ тоза намешавад — ҳамаи ситорачаҳо дар он минбаъд ҷамъ мешаванд.

Ишора 2

let line = "";-ро ба дохили давраи беруна, пеш аз дохилӣ гузаронед.

ВАЗИФАИ 7.5

Тахтаи шоҳмот

душвор

Тахтаи 4 × 4-ро кашед: хонаҳо иваз мешаванд — # ва .. Хонаи аввал — #. Ишора ба ғоя: хона «торик» аст, агар маҷмӯи рақамҳои сатр ва сутун (аз сифр ҳисоб мекунем) ҷуфт бошад.

Таҳрир кардан мумкин аст · Ctrl + Enter
// сатрҳо ва сутунҳо аз сифр: 0..3
Натиҷаи интизоршаванда
#.#.
.#.#
#.#.
.#.#
Ишора 1

Давраҳои for (let row = 0; row < 4; row++) ва for (let col = 0; col < 4; col++).

Ишора 2

Дар дохил: if ((row + col) % 2 === 0) { line += "#"; } else { line += "."; }. Дар бораи line барои ҳар сатр фаромӯш накунед.

08 Давраи беохир: чӣ тавр овезон нашудан

Давра танҳо вақте қатъ мешавад, ки шарти он ягон вақт false шавад. Агар шарт ҳамеша рост бошад, давра ҳеҷ гоҳ тамом намешавад. Ин давраи беохир аст ва ин маъруфтарин хатои барномасозони навкор (ва на танҳо онҳо) мебошад. Саҳифа бо чунин давра «овезон мешавад»: тугмаҳо пахш намешаванд, ҷадвал ҷавоб намедиҳад.

Ташбеҳ аз зиндагӣ

Таксирон ҳисобкунакро фаъол кард ва хомӯш кардани онро фаромӯш намуд. Мусофир кайҳо баромадааст, рақамҳо бошанд меафзоянд — ва то даме ки касе мошинро қатъ накунад, ҳамин тавр аст. Давра бе ҳисобкунаки тағйирёбанда — ҳамон таксии «фаромӯшшуда» аст.

Ин дар саҳифаи мо чӣ тавр менамояд

Иҷрокунандаи ин саҳифа муҳофизат шудааст: агар код аз чанд сония зиёд «хомӯш» бошад, он маҷбуран қатъ мешавад ва паёми сурх менависад. ▶ Иҷро кардан-ро пахш кунед ва тақрибан се сония интизор шавед:

Давраи беохир: худаш пас аз ~3 сония қатъ мешавад · Ctrl + Enter
let i = 1;
while (i <= 5) {
  // i++-ро навиштанро фаромӯш кардем — шарт ҳамеша true аст
}
console.log("Эта строка никогда не выполнится");

Шумо паёми ⏱ Код хеле дароз иҷро мешавад (эҳтимол даври беохир)-ро мебинед. Ин суғуртаи танҳо саҳифаи мост. Дар барномаи оддӣ ё дар сайти воқеӣ чунин суғурта нест ва ҳама чиз танҳо овезон мешавад.

Давраҳои беохир аз куҷо пайдо мешаванд

СабабМисолЧӣ тавр ислоҳ кардан
Тағйир додани ҳисобкунакро фаромӯш кардемwhile (i <= 5) { … } бе i++i++-ро ба бадан илова кунед
Ба самти нодуруст тағйир медиҳемfor (let i = 10; i > 0; i++)i--
Шарт ҳеҷ гоҳ дурӯғ намешавадfor (let i = 1; i !== 10; i += 2) — аз 10 ҷаҳида мегузарадБа ҷои !== аз < истифода баред
continue пеш аз тағйири ҳисобкунакбахши 04-ро бинедҲисобкунакро пеш аз continue тағйир диҳед
while (true)-и бошуурона бе баромадbreak-ро фаромӯш кардемҲамеша break-ро андеша кунед

Се савол пеш аз оғози давра

  1. Дар ҳар давр чӣ тағйир меёбад? Бояд тағйирёбанда аз шарт тағйир ёбад.
  2. Ба кадом самт тағйир меёбад? Ба сарҳади шарт, на аз он.
  3. Оё шарт false шуда метавонад? 2–3 қиматро гузоред ва бо даст санҷед.

Муҳофиз: давраи овезон шуда наметавонист

Вақте ки давраро бо шарти ғайриоддӣ менависед, ҳисобкунаки даврҳоро илова кунед ва онро маҳдуд намоед. Агар чизе нодуруст равад — давра худаш мебарояд ва шумо инро дар консол мебинед, на саҳифаи овезонро мегиред:

Муҳофиз · Ctrl + Enter
let money = 18;
let rounds = 0;

while (money > 0) {
  rounds++;
  if (rounds > 100) {          // муҳофиз
    console.log("Аварийная остановка: слишком много кругов");
    break;
  }
  money -= 6;                  // пулро ба 6 кам мекунем
}
console.log(`Кругов: ${rounds}, денег: ${money}`);
Агар овезон шуд, чӣ кор кардан лозим

Дар браузер: ҷадвалро бибандед (баъзан браузер худаш пешниҳод мекунад, ки саҳифаро қатъ кунад). Дар терминал ҳангоми иҷрои node: Ctrl + C-ро пахш кунед. Дар ҳар ду ҳолат — давраро ёбед ва ба се саволи боло ҷавоб диҳед.

Бештар хонед: MDN — Давраҳо ва итератсия · learn.javascript.ru — Давраҳо

Амалия: мустаҳкам мекунем

ВАЗИФАИ 8.1

Давраи овезонро қатъ кунед

осон

Давра бояд се дарсро барорад, вале дар он тағйир додани ҳисобкунакро фаромӯш кардаанд. Барои он ки саҳифа овезон нашавад, ба код муҳофиз илова шудааст — он пас аз 6 давр кор мекунад ва «Аварийная остановка»-ро мебарорад. Ёбед, ки чӣ намерасад, ва ислоҳ кунед. Муҳофизро нест накунед — пас аз ислоҳ он танҳо кор намекунад.

Таҳрир кардан мумкин аст · Ctrl + Enter
let lesson = 1;
let safety = 0;

while (lesson <= 3) {
  console.log(`Урок ${lesson}`);

  safety++;
  if (safety > 5) {
    console.log("Аварийная остановка");
    break;
  }
}
Натиҷаи интизоршаванда пас аз ислоҳ
Урок 1
Урок 2
Урок 3
Ишора 1

Дар шарти lesson <= 3 дар ҳар давр чӣ тағйир меёбад? Ҳоло — ҳеҷ чиз.

Ишора 2

Ба бадани давра сатри lesson++;-ро илова кунед.

09 Блоки ЗС: шарҳи коди дигарон сатр ба сатр

Дар кор шумо қариб ҳеҷ гоҳ кодро аз сифр наменависед: бештар он чиро мехонед, ки ҳамкор навишт, дар интернет ёфтед ё ЗС дод. Малакаи таҳлили давраи бегона — яке аз малакаҳои асосӣ аст. ЗС дар ин ҷо ёрдамчии аъло аст, агар дуруст пурсед: на «ҳал кун», балки «мисли навомӯз шарҳ деҳ».

Қоидаҳои курс оид ба ЗС — ёдрас мекунем

1) Аввал 15 дақиқа худатон кӯшиш мекунед: нависед, ки тағйирёбандаҳо дар се даври аввал ба чӣ баробаранд. 2) Кодеро, ки сатр ба сатр шарҳ дода наметавонед, намегузоред. 3) Дар промпт ҳамеша: контекст → вазифа → маҳдудиятҳо → формати ҷавоб → санҷиш.

Коди бегонаро мегирем

Фарз мекунем, ки ҳамкор чунин барномаро фиристод. Он чӣ мекунад?

Коди бегона · Ctrl + Enter
let total = 0;
for (let n = 1; n <= 10; n++) {
  if (n % 2 === 0) continue;
  total += n;
}
console.log(total);

Дархости заиф ва қавӣ

код шарҳ деҳ
Контекст: ман дар JavaScript навомӯзам. Тағйирёбандаҳо, навъҳо, шартҳои if ва давраҳои for/while-ро медонам. Функсияҳо ва массивҳоро ҳоло намедонам. Вазифа: мисли навомӯз шарҳ деҳ, ки ин код чӣ мекунад: [код] Маҳдудиятҳо: кодро аз нав нанавис. Агар калимаи ношинос вомехӯрад, онро бо суханони оддӣ дар як сатр шарҳ деҳ. Формати ҷавоб: ҷадвали «сатри код → чӣ мекунад». Баъд — қиматҳои тағйирёбандаҳо пас аз ҳар кадом аз се даври аввали давра. Дар охир як ҷумла: тамоми барнома чӣ мекунад. Санҷиш: як тағйиротро номбар кун, ки натиҷаро иваз мекунад, ва бигӯ, ки чӣ мешавад.

Шарҳи ЗС-ро чӣ тавр санҷидан

ЗС метавонад бо боварӣ шарҳ диҳад — ва хато кунад. Бинобар ин ҷавоб ҳамеша бо се қадам санҷида мешавад:

  1. Кодро иҷро кунед ва баромади воқеиро дар консол нависед.
  2. Муқоиса кунед бо он чи ЗС «гуфт». Мувофиқат накард — ЗС хато кард, ба консол бовар кунед.
  3. Пайгирӣ илова кунед: console.log дар дохили давра, ки ҳисобкунак ва ҷамъкунандаро дар ҳар давр чоп мекунад. Ҳамин тавр шумо тамоми роҳро мебинед, на танҳо натиҷаро.

Боз ду қолаб барои машқ

Аз китобхонаи промптҳои курс: хоҳиш кардан, ки сатр ба сатр бе аз нав навиштан шарҳ диҳад, ва хоҳиш кардан, ки вазифаҳо бе ҳалли тайёр диҳад.

Ин код: [код]. Сатр ба сатр шарҳ деҳ, ки чӣ рӯй медиҳад ва чаро натиҷа чунин аст. Кодро аз нав нанавис — танҳо шарҳ деҳ.
Барои навомӯз 5 вазифа оид ба давраҳо деҳ, аз содда ба душвор, бе ҳал. Танҳо for, while, if ва сатрҳоро истифода бар — бе функсияҳо ва массивҳо.

Санҷиши ҷавоб: боварӣ ҳосил кунед, ки вазифаҳо аз рӯи мавзӯъ мебошанд ва дар ҷавоб коди ҳалли тайёр нест. Ҳалҳоро худатон меҷӯед.

Хатоҳои маъмули ЗС ҳангоми шарҳи давраҳо

Дар ҷавоби ЗС чӣ метавонад бошадМушкил дар чистЧӣ тавр санҷидан
Шарҳ медиҳад, ки барнома «барои чӣ» аст, вале қиматҳои тағйирёбандаҳоро нишон намедиҳадШумо намебинед, ки ҷамъкунанда чӣ тавр тағйир меёбадХоҳиш кунед, ки «қиматҳоро пас аз ҳар давр нишон деҳ» ё console.log илова кунед
< ва <=-ро омехта мекунадХато ба як: давраи охирин гум мешавад ё давраи зиёдатӣ пайдо мешавадҚимати якум ва охирини ҳисобкунакро бо даст санҷед
Баромадро «аз ёд» мегӯяд, бе иҷрои кодЗС коди шуморо иҷро намекунад — натиҷаро тахмин мекунадҲамеша кодро иҷро кунед ва муқоиса намоед
Давраро ба усулҳои ношинос (reduce, filter) аз нав менависадШумо чунин кодро дар муҳофиза шарҳ дода наметавонедИлова кунед «танҳо for/while, бе усулҳои массив»
Хатари давраи беохирро пай намебарадКод метавонад дар маълумоти дигар овезон шавадСе саволи бахши 08-ро дар бораи ин давра диҳед

Амалия: мустаҳкам мекунем

ВАЗИФАИ 9.1

Суханони ЗС-ро бо пайгирӣ санҷед

миёна

Тасаввур кунед, ки ЗС коди бегонаи болоро чунин шарҳ дод: «Барнома ададҳоро аз 1 то 10 ҷамъ мекунад ва 55-ро мебарорад». Месанҷем. Ба давра пайгирӣ илова кунед: пас аз сатри total += n дар ҳар давр n=…, total=…-ро бароред. Дар ниҳоят барнома воқеан чиро ҳисоб мекунад?

Таҳрир кардан мумкин аст · Ctrl + Enter
let total = 0;
for (let n = 1; n <= 10; n++) {
  if (n % 2 === 0) continue;
  total += n;
  // пайгириро дар ин ҷо илова кунед
}
console.log(total);
Натиҷаи интизоршаванда
n=1, total=1
n=3, total=4
n=5, total=9
n=7, total=16
n=9, total=25
25
Ишора 1

Пайгирӣ — console.log-и оддӣ дар дохили давра, вале пас аз continue ва пас аз total += n.

Ишора 2

Сатр: console.log(`n=${n}, total=${total}`);. Ҷавоб ба савол: барнома танҳо ададҳои тоқро ҷамъ мекунад, ҷуфтҳоро тавассути continue мегузаронад; ЗС хато кард.

10 Амалия дар дарс: чор вазифаи классикӣ

FizzBuzz, ҷадвали зарб, ададҳои оддӣ ва пирамида — барномаҳое, ки дар мусоҳибаҳо талаб мекунанд ва ҳамаи барномасозони навкор дар ҷаҳон бо онҳо меомӯзанд. Бо тартиб меравем, барои ҳар кадом — таҳлил ва баъд вазифа бо санҷиш. Кодро худатон чоп кунед, нусха накунед.

1. FizzBuzz

Шарт: ададҳоро аз 1 то 15 бароред. Аммо агар адад ба 3 тақсим шавад — ба ҷои он калимаи Fizz, агар ба 5 — Buzz, агар якбора ҳам ба 3 ва ҳам ба 5 — FizzBuzz.

Нақша: давра аз рӯи ададҳо, дар дохил занҷири if / else if / else. Маъмултарин дом — тартиби санҷишҳо. Бубинед, агар «ба 3»-ро аввал санҷед, чӣ мешавад:

Тартиби нодуруст: барои 15 Fizz бароварда мешавад, на FizzBuzz · Ctrl + Enter
for (let i = 1; i <= 15; i++) {
  if (i % 3 === 0) {
    console.log("Fizz");
  } else if (i % 5 === 0) {
    console.log("Buzz");
  } else if (i % 15 === 0) {
    console.log("FizzBuzz");   // то ин шоха кор намерасад
  } else {
    console.log(i);
  }
}

Қоидаи умумии занҷири if / else if: шарти аз ҳама танг — аввал. Ададе, ки ҳам ба 3 ва ҳам ба 5 тақсим мешавад, — нодиртарин ҳолат аст.

ВАЗИФАИ 10.1

FizzBuzz

миёна

FizzBuzz-и дурустро барои ададҳо аз 1 то 15 нависед.

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let i = 1; i <= 15; i++) {
  // занҷири if / else if / else
}
Натиҷаи интизоршаванда
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
Ишора 1

Аввал тақсимшавӣ ба 3 ва ба 5-ро якбора санҷед: i % 3 === 0 && i % 5 === 0 (ё як шарти i % 15 === 0).

Ишора 2

Баъд else if барои 3, баъд else if барои 5, ва дар охир else — танҳо i-ро бароред.

2. Ҷадвали зарб

Шарт: ҷадвали зарби 9 × 9: дар ҳар сатр — ҳосили зарби рақами сатр ба ададҳо аз 1 то 9. Ин давраи дукаратаи шинос бо сатри ҷамъкунанда аст:

Қолаб: ҷадвали 3 × 3 · Ctrl + Enter
for (let row = 1; row <= 3; row++) {
  let line = "";
  for (let col = 1; col <= 3; col++) {
    line += row * col + " ";
  }
  console.log(line);
}
ВАЗИФАИ 10.2

Ҷадвали зарби 9 × 9

миёна

Қолабро то 9 × 9 васеъ кунед. Ададҳоро дар сатр бо фосила ҷудо кунед.

Таҳрир кардан мумкин аст · Ctrl + Enter
for (let row = 1; row <= 3; row++) {
  let line = "";
  for (let col = 1; col <= 3; col++) {
    line += row * col + " ";
  }
  console.log(line);
}
Натиҷаи интизоршаванда
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
Ишора 1

Ҳар ду сарҳадро тағйир диҳед: row <= 9 ва col <= 9.

Ишора 2

Фосилаи зиёдатӣ дар охири сатр санҷишро вайрон намекунад — фосилаҳои канорӣ нодида гирифта мешаванд.

3. Ададҳои оддӣ

Шарт: ҳамаи ададҳои оддиро то 30 ёфтан. Адади оддӣ танҳо ба 1 ва ба худаш тақсим мешавад (2, 3, 5, 7, 11…). Як ҳамчун оддӣ ҳисоб намешавад.

Нақша: аввал санҷидани як ададро меомӯзем. Тақсимкунандаҳои d-ро аз 2 то n - 1 кӯшиш мекунем. Тақсимкунанда ёфт шуд — адад таркибӣ аст, минбаъд санҷидан лозим нест (break). Натиҷаро дар «парчам» — тағйирёбандаи true / false нигоҳ медорем:

Як ададро месанҷем · Ctrl + Enter
const n = 29;
let isPrime = true;                 // то ҳол оддӣ мешуморем

for (let d = 2; d < n; d++) {
  if (n % d === 0) {                // тақсимкунанда ёфтем
    isPrime = false;
    break;
  }
}

console.log(`${n} — ${isPrime ? "простое" : "составное"}`);

n = 21 ва n = 2-ро кӯшиш кунед. Акнун санҷишро ба давраи беруна аз рӯи n аз 2 то 30 печонед ва ададҳои оддиро дар сатри ҷамъкунанда ҷамъ кунед.

ВАЗИФАИ 10.3

Ададҳои оддӣ то 30

душвор

Ҳамаи ададҳои оддиро аз 2 то 30 дар як сатр бо фосила, пас аз матни «Простые числа до 30:» бароред.

Таҳрир кардан мумкин аст · Ctrl + Enter
let primes = "";
// давраи беруна аз рӯи n, дохилӣ аз рӯи тақсимкунандаҳои d

console.log("Простые числа до 30: " + primes);
Натиҷаи интизоршаванда
Простые числа до 30: 2 3 5 7 11 13 17 19 23 29
Ишора 1

Барои ҳар n аз нав let isPrime = true гузоред — дар дохили давраи беруна, пеш аз дохилӣ. Ин ҳамон усули «барои ҳар сатр сифр кардани ҷамъкунанда» аст.

Ишора 2

Пас аз давраи дохилӣ: if (isPrime) { primes += n + " "; }. Барои n = 2 давраи дохилӣ ягон маротиба иҷро намешавад (d = 2 аз 2 хурд нест), ва ду оддӣ мемонад — чунон ки лозим аст.

4. Пирамида аз аломатҳо

Шарт: пирамидаро бо баландии 5 кашидан. Дар сатри рақами row (height − row) фосила дар чап ва (2·row − 1) аломат лозим аст. Барои сатри аввал ин 4 фосила ва 1 ситора, барои охирин — 0 фосила ва 9 ситора.

  1. Давраи беруна аз рӯи сатрҳо: row аз 1 то height.
  2. Давраи дохилии аввал ба сатр фосилаҳо илова мекунад.
  3. Давраи дохилии дуюм аломатҳо илова мекунад.
  4. Сатри тайёрро пас аз ҳар ду давраи дохилӣ мебарорем.
ВАЗИФАИ 10.4

Пирамида

душвор

Пирамидаро бо баландии 5 аз аломати symbol кашед. Баъд symbol-ро ба # ва height-ро ба 3 иваз кунед — боварӣ ҳосил кунед, ки код барои ҳар қимат кор мекунад.

Таҳрир кардан мумкин аст · Ctrl + Enter
const symbol = "*";
const height = 5;

for (let row = 1; row <= height; row++) {
  let line = "";
  // фосилаҳо
  // аломатҳо
  console.log(line);
}
Натиҷаи интизоршаванда
    *
   ***
  *****
 *******
*********
Ишора 1

Фосилаҳо: for (let s = 1; s <= height - row; s++) { line += " "; }.

Ишора 2

Аломатҳо: for (let k = 1; k <= 2 * row - 1; k++) { line += symbol; }. Фосилаҳо бо давраи аввал, аломатҳо — бо дуюм меоянд.

Хулосаи амалия

Дар чор вазифа ҳамаи абзорҳои дарс вомехӯранд: for ва шарт, давраҳои дарунҷоӣ, парчами true/false бо break, ҷамъкунандаи сатр. Ҳамин усулҳо дар асоси қариб ҳар вазифа оид ба давраҳо дар кори хонагӣ мебошанд.

11 Вазифаи хонагӣ: loops.js

Натиҷаи кори хонагӣ — як файли loops.js бо ҳалли ҳашт вазифа ва файли алоҳидаи explain.md бо таҳлили ҳалли бегона якҷоя бо ЗС. Вазифаҳо танҳо бо он чи мо гузаштем, ҳал мешаванд: тағйирёбандаҳо, шартҳо, for, while, for..of, break, continue. Функсияҳо ва массивҳо нестанд.

8 вазифа

Ҳар вазифаро бо блоки алоҳида ороиш диҳед: шарҳ бо рақам ва ном, баъд код. Ҳалро бо иҷро санҷед — баромад бояд ҳамон бошад, ки тавсиф шудааст.

  1. Ҷадвал ба 7. Ҷадвали зарбро ба 7 аз 1 то 10 бароред: 7 × 1 = 7, … , 7 × 10 = 70.
  2. Ададҳои ҷуфт. Маблағи ҳамаи ададҳои ҷуфтро аз 1 то 100 ёбед. Ҷавоб — 2550.
  3. Ҳисоби баръакс. Ададҳоро аз 10 то 1 бароред, вале адади 5-ро гузаронед (continue), пас аз давра бошад «Пуск!»-ро бароред.
  4. Факториалҳо. Барои ҳар n аз 1 то 10 сатри n! = …-ро бароред (давраи дарунҷоӣ лозим нест: ҷамъкунандаро бевосита дар давраи беруна нав кардан мумкин аст). Сатри охирин: 10! = 3628800.
  5. Садонокҳо. Садонокҳоро дар сатри "ассалому алейкум" ҳисоб кунед (а, е, о, у). Ҷавоб — 7. Санҷиши «ҳарф садонок аст» — тавассути занҷири ||.
  6. Фибоначчи. 12 адади аввали Фибоначчиро бароред (ҳар оянда — маҷмӯи ду қаблӣ): 1 1 2 3 5 8 13 21 34 55 89 144. Ду тағйирёбандаи «қаблӣ» ва «ҷорӣ» лозиманд.
  7. Маҷмӯи рақамҳо. Маҷмӯи рақамҳои адади 98765-ро ёбед. Ишора: n % 10 — рақами охирин, Math.floor(n / 10) — адад бе он. Ҷавоб — 35.
  8. Арчаи ромб. Ромбро бо баландии 7 аз аломати * кашед: боло — пирамидаи амалия (4 сатр), поён — чаппа (3 сатр). Паҳноии васеътарин сатр — 7.

Таҳлили ҳалли бегона бо ЗС

Инак ҳалле, ки «дар интернет ёфтанд». Он маҷмӯи ҳамаи ададҳоро аз 1 то 100, ки ба 3 ё 5 чандкарата мебошанд, ҳисоб мекунад. Иҷро кунед:

Ҳалли бегона · Ctrl + Enter
let sum = 0;
for (let i = 1; i <= 100; i++) {
  if (i % 3 !== 0 && i % 5 !== 0) continue;
  sum += i;
}
console.log(sum);
  1. 15 дақиқа сарф кунед: дар дафтар нависед, ки ҳар сатр чӣ мекунад ва чаро шарт тавассути !== ва && навишта шудааст.
  2. Кодро ба ЗС аз рӯи қолаби қавии бахши 09 диҳед (формулаи «мисли навомӯз шарҳ деҳ»). Промпти худро захира кунед.
  3. Ҷавобро бо баромади воқеӣ (2418) ва бо қайдҳои худатон муқоиса кунед. Пайгирии console.log илова кунед ва ҳадди ақал се давраро нишон диҳед.
  4. Шартро чунон аз нав нависед, ки соддатар хонда шавад, бе continue: if (i % 3 === 0 || i % 5 === 0) { sum += i; }. Боварӣ ҳосил кунед, ки натиҷа ҳамон аст.
  5. Дар explain.md нависед: (а) промпти худро; (б) ЗС чиро дуруст шарҳ дод; (в) ЗС чиро аз қалам партофт ё нодақиқ навишт; (г) шумо аз ҷавоби он чиро намегирифтед ва чаро.

Чӣ супоридан лозим аст

  • Файли loops.js бо ҳашт вазифа. Ҳар кадом натиҷаро ба консол мебарорад.
  • Файли explain.md бо таҳлил (бандҳои а–г). Ҳадди ақал 8 сатри пурмазмун, бе нусхаи пурраи ҷавоби ЗС.
  • Истиноди репозиторийи GitHub ё бойгонӣ ба гурӯҳи Telegram.

Чӣ тавр баҳо медиҳем (0–10)

МеъёрБаллҳоЧиро мебинем
Вазифаҳои 1–44Барои ҳар вазифа 1 балл: код кор мекунад ва баромади интизоршавандаро медиҳад, зиёдатӣ нест
Вазифаҳои 5–84Барои ҳар вазифа 1 балл; барои ромб — балли пурра, агар паҳноӣ ва симметрия дуруст бошанд
Таҳлил бо ЗС2Промпт аз рӯи қолаб, таҳлили софдилонаи ҷавоб, намоён аст, ки шумо кодро фаҳмидед

Бонус (бе балл): тахтаи шоҳмоти 8 × 8, ададҳои палиндромӣ аз 100 то 200, секунҷаи Паскал.

Ёдоварӣ

Ҳангоми санҷиш муаллим метавонад хоҳиш кунад, ки ҳар сатри loops.js-и шуморо шарҳ диҳед. Агар шарҳ дода натавонед, ки чаро дар вазифа оид ба ададҳои оддӣ парчам дар дохили давраи беруна эълон шудааст, — ҳалро аз нав таҳлил кардан лозим аст.

✓ Варақаи хулосаи дарс

  • Давра блоки кодро такрор мекунад. Як гузариш — итератсия. Шарт пеш аз ҳар давр санҷида мешавад.
  • while: while (шарт) { … } — вақте ки шумораи давр маълум нест. Ҳисобкунакро дар бадан тағйир додан лозим аст.
  • for: for (оғоз; шарт; қадам) { … } — вақте ки шумораи давр маълум аст. Тартиб: оғоз (як бор) → шарт → бадан → қадам → шарт…
  • do..while: do { … } while (шарт); — бадан ҳадди ақал як бор иҷро мешавад, шарт пас аз он санҷида мешавад.
  • break тамоман аз давра мебарояд, continue бақияи давраро мегузаронад. Дар дохили давраҳои дарунҷоӣ break танҳо аз дохилӣ мебарояд.
  • for..of аз болои сатр: for (const ch of "текст"). Рақами ҳарф лозим аст — for бо text[i] ва text.length. Индексҳо аз сифр, охирин — length - 1. Сатрро «дар ҷояш» тағйир додан мумкин нест — нав ҷамъ мекунем.
  • Ҷамъкунандаҳо: маблағ — оғоз 0, ҳосили зарб — оғоз 1, ҳисобкунак — count++ аз рӯи шарт, ҳадди аксар — if (x > best), сатр — line += …. То давра эълон мекунем.
  • Давраҳои дарунҷоӣ: бадани дохилӣ «даврҳои беруна × даврҳои дохилӣ» маротиба иҷро мешавад. Сатри расмро бо давраи дохилӣ ҷамъ мекунем ва пас аз он мебарорем. Ҷамъкунандаи сатр — дар дохили давраи беруна.
  • Бақияи тақсим %: x % 2 === 0 — ҷуфт, x % 3 === 0 — чандкарата ба 3.
  • Давраи беохир: шарт ҳамеша true аст. Сабабҳо — тағйир додани ҳисобкунакро фаромӯш кардем, ба самти нодуруст тағйир медиҳем, continue пеш аз қадам, break дар while (true) нест. Се савол пеш аз оғоз: чӣ тағйир меёбад, ба кадом самт, оё шарт false шуда метавонад. Муҳофиз кумак мекунад — ҳисобкунаки даврҳо бо break.
  • Бо ЗС: коди бегона — «мисли навомӯз шарҳ деҳ, сатр ба сатр, қиматҳоро дар даврҳои аввал нишон деҳ, аз нав нанавис». Ҷавобро ҳамеша бо иҷро ва пайгирии console.log санҷед.