Darslar 44–45 · 2 ta dars · M. R. Fayziyeva, D. M. Sayfurov, N. S. Xaytullayeva. Informatika va axborot texnologiyalari, 9-sinf. «Nashriyot uyi Tasvir», Toshkent, 2020
45
Amaliy mashg‘ulot: while operatori
Darslik: 88–89-betlar
MaqsadAmaliy mashg‘ulotda while yordamida sonning raqamlari bilan ishlaydi (yig‘indi, sanash), foydalanuvchi javobiga qarab takrorlanuvchi dasturlar yozadi.
Yangi so‘zlar
raqamlar yig‘indisi · digit sum: add x % 10, then remove the last digit with x //= 10sinov-xato o‘yini · guessing game: the loop repeats until the guess matchessikl o‘zgaruvchisi · loop variable: the value changed in the body so that the condition can stop the loopkuzatuv jadvali · trace table: a table of the variable values after each pass
Tushuntirish
while siklining eng yaxshi qo‘llanishi – sonning raqamlari bilan ishlash. Raqamlar yig‘indisi: s = 0; sikl x > 0 bo‘lguncha ishlaydi; har gal oxirgi raqam s ga qo‘shiladi (x % 10) va x dan olib tashlanadi (x //= 10). Raqamlarni sanash uchun ham xuddi shu andoza ishlatiladi, faqat s += x % 10 o‘rniga k += 1 qo‘yiladi. Ikkinchi turdagi masala – javob to‘g‘ri bo‘lguncha so‘rash: birinchi javob siklgacha so‘raladi, shart «javob noto‘g‘ri» ko‘rinishida yoziladi, tanada esa yana so‘ralib, javob yangilanadi. Bu o‘yinda yashirin son dastur ichida beriladi; aslida tasodifiy son keyinroq (random moduli) o‘rganiladi. Har bir dasturni kuzatuv jadvalida qo‘lda bajarib ko‘ring: shunda siklning qachon to‘xtashi aniq bo‘ladi.
Namunalar
Raqamlar yig‘indisi: x = int(input()) ⏎ s = 0 ⏎ while x > 0: ⏎ s += x % 10 ⏎ x //= 10 ⏎ print(s) 2749 uchun 9 + 4 + 7 + 2 = 22 chiqadi.
Topishmoq: guess = int(input()) ⏎ while guess != 7: ⏎ print("Yana urining") ⏎ guess = int(input()) ⏎ print("Topdingiz") 3 va 9 xato, shuning uchun ikki marta «Yana urining» chiqadi; 7 kiritilganda sikl tugaydi va «Topdingiz» chiqadi.
Sinfda faoliyat
«Raqamlar bilan o‘yin»: juftliklar o‘z sonlarini tanlab, raqamlar yig‘indisi dasturini kuzatuv jadvalida ijro etadi va oxirgi javobni IDLE bilan solishtiradi; so‘ng dasturni «raqamlar ko‘paytmasi» uchun o‘zgartiradi.
Mashq
1
5081 sonining raqamlari yig‘indisi nechaga teng?
14
2
1 dan n gacha sonlar yig‘indisini while bilan hisoblovchi dastur yozing (n = 10 da 55).
n = int(input()) ⏎ i = 1 ⏎ s = 0 ⏎ while i <= n: ⏎ s += i ⏎ i += 1 ⏎ print(s)
3
40105 sonida nechta 0 raqami bor? Buni hisoblovchi dastur yozing.
x = int(input()) ⏎ k = 0 ⏎ while x > 0: ⏎ if x % 10 == 0: ⏎ k += 1 ⏎ x //= 10 ⏎ print(k) Javob: 2.
4
Nima uchun raqamlar siklida x //= 10 bo‘lmasa, sikl to‘xtamaydi?
x o‘zgarmaydi, x > 0 sharti doim rost bo‘lib qoladi; x //= 10 esa x ni kamaytirib nolga yetkazadi.