Sikllar

Sikllar bir xil kod qatorlarini ko‘p marta bajarish kerak bo‘lganda ishlatiladi.

ULASHISH

Sikl nima?

Sikl shart true bo‘lib turar ekan, bir xil kodni qayta-qayta bajaradi.

Quyidagi simulyatsiyada natija 6 bo‘lguncha zar tashlash uchun sikldan foydalaniladi va zar necha marta tashlangani sanaladi.

Dice

{{diceCountDelayed}} marta tashlandi

Sikl natija 6 bo‘lguncha zar tashlashni davom ettiradi, shuning uchun zarni qayta tashlashimizni ta’minlaydigan shart — "zar 6 emas".

Quyida sikl qanday ishlashini tushuntiruvchi blok-sxema va kod keltirilgan:

start dice = random(1,6) true false You got 6! end dice != 6? Condition dice = random(1,6) count += 1 Repeated code dice = random.randint(1,6) print('You got 6!') while Loop type dice != 6: Condition dice = random.randint(1,6) count += 1 Repeated code

Eslatma: != — taqqoslash operatori bo‘lib, u "teng emas" degan ma’noni bildiradi.

Yuqoridagi kod misolida while siklidan foydalanilgan.

Boshqa sikl turlari: for, for-each va do-while.

Sikl turlarining barchasi o‘xshash va ular quyida batafsilroq tavsiflangan.



While sikli

Kod necha marta bajarilishi kerakligini bilmasangiz, while siklidan foydalangan ma’qul.

while sikli eng tushunarli sikl turi, chunki u kundalik hayotimizda qiladigan ko‘p ishlarga o‘xshaydi:

  • Manzilingizga yetib borguningizcha yurishda davom eting (yangi qadamlar tashlang).
  • Qozon kir ekan, uni yuvishda davom eting.
  • Mashina baki to‘lguncha unga yoqilg‘i quyishda davom eting.

Yuqoridagi misolda ko‘rganimizdek, kod necha marta bajarilishi kerakligini bila olmaymiz, chunki foydalanuvchi qachon 6 tushirishini bilmaymiz, shuning uchun while siklidan foydalanamiz.

Quyida turli dasturlash tillarida yozilgan zar tashlashning to‘liq kodi keltirilgan.


dice = random.randint(1,6)
print(dice)
count = 1

while dice != 6:
  dice = random.randint(1,6)
  print(dice)
  count += 1
print('You got 6!')
print('You rolled',count,'times')
let dice = Math.ceil(Math.random()*6);
console.log(dice);
let count = 1;

while (dice != 6) {
  dice = Math.ceil(Math.random()*6);
  console.log(dice);
  count += 1;
}

console.log('You got 6!');
console.log('You rolled',count,'times');
int dice = random.nextInt(6) + 1;
System.out.println(dice);
int count = 1;

while (dice != 6) {
  dice = random.nextInt(6) + 1;
  System.out.println(dice);
  count++;
}

System.out.println("You got 6!");
System.out.println("You rolled " + count + " times");
int dice = rand() % 6 + 1;
cout << to_string(dice) + "\\n";
int count = 1;

while (dice != 6) {
  dice = rand() % 6 + 1;
  cout << to_string(dice) + "\\n";
  count++;
}

cout << "You got 6!\\n";
cout << "You rolled " + to_string(count) + " times\\n";
Misolni ishga tushirish »

Agar kod necha marta bajarilishi kerakligini bilsak, odatda while sikli o‘rniga for siklidan foydalanish ma’qul.


For sikli

Kod necha marta bajarilishi kerakligini bilsangiz, for siklidan foydalangan ma’qul. for sikli bilan qila oladigan eng oddiy ish esa sanash.

Sanash uchun for sikli kod necha marta bajarilganini kuzatib borishda sanovchi o‘zgaruvchidan foydalanadi.

for siklidagi sanovchi o‘zgaruvchi quyidagicha sozlanadi:

  1. Boshlang‘ich qiymat.
  2. Sanovchi o‘zgaruvchidan foydalanadigan shart: for sikli shart rost bo‘lib turar ekan, ishlashda davom etadi.
  3. Sikl har safar bajarilganda sanovchi o‘zgaruvchi qanday o‘zgarishi kerakligi tavsifi.
for ( console.log(i); } console.log('Liftoff!'); let i = 10; 1. Starting value i > 0; 2. Condition i--) { 3.Change of counting variable

Quyidagi kod misoli kosmik raketaning uchirilishini simulyatsiya qiladi. U i sanovchi o‘zgaruvchili for siklidan foydalanib, 10 dan 1 gacha teskari sanaydi, so‘ngra "Liftoff!" deb yozadi.


for i in range(10, 0, -1):
  print(i)
print('Liftoff!')
for (let i = 10; i > 0; i--) {
  console.log(i);
}
console.log('Liftoff!');
for (int i = 10; i > 0; i--) {
  System.out.println(i);
}
System.out.println("Liftoff!");
for (int i = 10; i > 0; i--) {
  cout << to_string(i) + "\n";
}
cout << "Liftoff!\n";
Misolni ishga tushirish »

Sanovchi o‘zgaruvchidan foydalanadigan bunday for sikllari Python tilida Python range() funksiyasi yordamida biroz boshqacha yoziladi, lekin g‘oya bir xil. Python tilida for sikllari qanday ishlashi haqida bu yerda batafsil o‘qishingiz mumkin.

Eslatma: Sanovchi o‘zgaruvchi ko‘pincha i, j yoki k deb nomlanadi. Bu nomni qisqa qiladi va o‘qishni osonlashtiradi. Bu harflar matematikada ham shunga o‘xshash narsalar uchun ishlatiladi.


For-each sikli

Elementlar ro‘yxatini, masalan, arrayni sanovchi o‘zgaruvchisiz for sikli yordamida ko‘rib chiqish "iteratsiya qilish" yoki "for-each siklidan foydalanish" deb atalishi mumkin.

Massivdagi qiymatlar bo‘ylab iteratsiya qilish uchun for-each siklidan quyidagicha foydalanamiz:


myFruits = ['banana','apple','orange']

for fruit in myFruits:
  print(fruit)
const myFruits = ['banana','apple','orange'];

for (let fruit of myFruits) {
  console.log(fruit);
}
String[] myFruits = {"banana", "apple", "orange"};

for (String fruit : myFruits) {
  System.out.println(fruit);
}
string myFruits[] = {"banana", "apple", "orange"};

for (auto fruit : myFruits) {
  cout << fruit + "\n";
}
Misolni ishga tushirish »

Massiv bo‘ylab iteratsiya qilishning yana bir usuli — indekslar uchun sanovchi o‘zgaruvchili for siklidan foydalanish, masalan:


myFruits = ['banana','apple','orange']

for i in range(len(myFruits)):
  print(myFruits[i])
const myFruits = ['banana','apple','orange'];

for (let i = 0; i < myFruits.length; i++) {
  console.log(myFruits[i]);
}
String[] myFruits = {"banana", "apple", "orange"};

for (int i = 0; i < myFruits.length; i++) {
  System.out.println(myFruits[i]);
}
string myFruits[] = {"banana", "apple", "orange"};
int size = sizeof(myFruits)/sizeof(myFruits[0]);

for (int i = 0; i < size; i++) {
  cout << myFruits[i] + "\n";
}
Misolni ishga tushirish »

Do-while sikli

do-while sikli oddiy while sikliga o‘xshaydi, lekin unda avval sikl ichidagi kod bajariladi, shart esa keyin tekshiriladi.

Demak, do-while sikli sikl ichidagi kod kamida bir marta bajarilishiga ishonch hosil qilmoqchi bo‘lganingizda foydali.

Bu sahifadagi oddiy while sikli qanday ishlashini ko‘rsatuvchi birinchi kod misolini (6 tushguncha zar tashlash) olib, uni do-while sikli yordamida soddalashtirishimiz mumkin, masalan:


count = 0

while True:
  dice = random.randint(1,6)
  print(dice)
  count += 1
  if dice == 6:
    break

print('You got 6!')
print('You rolled',count,'times')
let dice;
let count = 0;

do {
  dice = Math.ceil(Math.random()*6);
  console.log(dice);
  count += 1;
} while (dice != 6);

console.log('You got 6!');
console.log('You rolled',count,'times');
int dice;
int count = 0;

do {
  dice = random.nextInt(6) + 1;
  System.out.println(dice);
  count++;
} while (dice != 6);

System.out.println("You got 6!");
System.out.println("You rolled " + count + " times");
int dice;
int count = 0;

do {
  dice = rand() % 6 + 1;
  cout << to_string(dice) + "\n";
  count++;
} while (dice != 6);

cout << "You got 6!\n";
cout << "You rolled " + to_string(count) + " times\n";
Misolni ishga tushirish »

Bu maqsad uchun do-while ko‘proq mos keladi, chunki avval zarni tashlaymiz, keyin 6 tushganini tekshiramiz, to‘g‘rimi?

Eslatma: Python tilida aslida do-while sikli yo‘q, lekin yuqoridagi kod misolida ko‘rib turganingizdek, uni zar 6 bo‘lganda sikldan chiqish uchun if ishlatilgan while sikli yordamida simulyatsiya qilish mumkin.


Ichma-ich sikllar

Ichma-ich sikl — bu boshqa sikl ichidagi sikl.

6 tushishi uchun o‘rtacha necha marta tashlash kerakligini hisoblash uchun ichma-ich sikldan (for sikli ichidagi while sikli) quyidagicha foydalanishimiz mumkin:


numExperiments = 1000
totalRolls = 0

for i in range(numExperiments):
  count = 0
  while True:
    dice = random.randint(1,6)
    count += 1
    if dice == 6:
      break
  totalRolls += count

print('Doing',numExperiments,'experiments')
print('Average rolls to get 6:',totalRolls/numExperiments)
let numExperiments = 1000;
let totalRolls = 0;

for (let i = 0; i < numExperiments; i++) {
  let count = 0;
  while (true) {
    let dice = Math.floor(Math.random() * 6) + 1;
    count++;
    if (dice === 6) {
      break;
    }
  }
  totalRolls += count;
}

console.log('Doing ' + numExperiments + ' experiments');
console.log('Average rolls to get 6:', totalRolls / numExperiments);
int numExperiments = 1000;
int totalRolls = 0;

for (int i = 0; i < numExperiments; i++) {
  int count = 0;
  while (true) {
    int dice = random.nextInt(6) + 1;
    count++;
    if (dice == 6) {
      break;
    }
  }
  totalRolls += count;
}
System.out.println("Doing " + numExperiments + " experiments");
double average = (double) totalRolls / numExperiments;
System.out.println("Average rolls to get 6: " + average);
int numExperiments = 1000;
int totalRolls = 0;

for (int i = 0; i < numExperiments; i++) {
  int count = 0;
  while (true) {
    int dice = rand() % 6 + 1;
    count++;
    if (dice == 6) {
      break;
    }
  }
  totalRolls += count;
}
cout << "Doing " + to_string(numExperiments) + " experiments\n";
double average = static_cast(totalRolls) / numExperiments;
cout << "Average rolls to get 6: " + to_string(average) + "\n";
Misolni ishga tushirish »

E’tibor bering: 6 tushganda ichki sikldan chiqish uchun break operatoridan foydalaniladi, tashqi sikl esa ishlashda davom etadi.



W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!