Лекция · 4.3

Кірістірілген циклдерді ұйымдастыру

Өткен екі сабақта кірістірілген циклмен көбейту кестесін салдық — онда ішкі цикл ӘРҚАШАН БІРДЕЙ рет қайталанды. Бірақ бір қызық сұрақ туады: ішкі цикл СЫРТҚЫ айнымалыға ТӘУЕЛДІ болса ше? Дәл осыдан — үшбұрыш пен пирамида тәрізді үлгілер туады! Бұл сабақта кірістірілген циклдерді ҰЙЫМДАСТЫРУДЫҢ жүйелі логикасын бекітеміз.

Тұрақты vs айнымалы ішкі шек

Көбейту кестесінде екі циклдің де шегі ТҰРАҚТЫ болды: for j in range(1, n+1) — n әрқашан бірдей. Бірақ Python ережесі бойынша ешкім саған ішкі range-тің шегін СЫРТҚЫ айнымалыға байлауға тыйым салмайды!

for i in range(1, n+1):
    for j in range(1, i+1):
        ...

Мұнда назар аудар: ішкі range(1, i+1) — i ӨЗГЕРГЕН САЙЫН ішкі циклдің қаншамен айналатыны да өзгереді! i=1 болғанда ішкі цикл 1 рет, i=2 болғанда 2 рет, i=5 болғанда 5 рет жұмыс істейді.

🪜
Аналогия: бұл — баспалдаққа ұқсас: бірінші саты бір адымдық, екінші саты екі адымдық, әрбір келесі саты алдыңғысынан ұзынырақ. Циклдің «ұзындығы» өзгеріп отырады.
Жұлдызша үшбұрыштары
Есеп: 5 жолдан тұратын өсу үшбұрышын сал (*, **, ***, ****, *****).
n = 5
for i in range(1, n+1):
    for j in range(1, i+1):
        print('*', end='')
    print()
Талдау: i=1 → ішкі цикл range(1,2) → 1 рет → «*». i=2 → range(1,3) → 2 рет → «**». ... i=5 → range(1,6) → 5 рет → «*****». Әр сыртқы қадамнан кейінгі ЖАЛҚЫ print() — жаңа жолға көшу үшін.
Басты идея: ішкі циклдің шегі ретінде ТҰРАҚТЫ санның орнына СЫРТҚЫ АЙНЫМАЛЫНЫ (i) қойсақ, әр жол ӨЗГЕРМЕЛІ ұзындықта болады.
Есеп: Кему ретті үшбұрыш (*****, ****, ***, **, *).
n = 5
for i in range(n, 0, -1):
    for j in range(1, i+1):
        print('*', end='')
    print()
Талдау: бұл жолы СЫРТҚЫ циклдің ӨЗІ кему ретімен жүреді (range(n,0,-1) → 5,4,3,2,1). Ішкі цикл әрқашан range(1, i+1) — бірақ i КЕМІП жатқандықтан, ішкі цикл да кемиді.
Салыстыру: алдыңғы есепте СЫРТҚЫ өсті, бұл есепте СЫРТҚЫ кеміді — ал ІШКІ логика (range(1, i+1)) ЕКЕУІНДЕ ДЕ БІРДЕЙ қалды! Кірістірілген циклдегі «сыртқы бағыт» пен «ішкі формула» тәуелсіз таңдалады.
⚠️
Жиі қате: ішкі циклдің шегіне i+1 орнына жай i жазып қою. range(1, i) деп жазсаң, i=1 болғанда ішкі цикл БІРДЕ ДЕ орындалмайды (range(1,1) — бос)! Әрқашан «нешеу керек» деп ойланып, +1 ережесін қолдан.
Қайталану санын есептеу

Соңғы маңызды дағды — кірістірілген циклдің ЖАЛПЫ қанша рет орындалғанын есептеу, БІРАҚ бұл жолы ішкі шек ТҰРАҚТЫ ЕМЕС жағдайда.

Естеріңде ме, өткен сабақта n рет × n рет = n² деп үйрендік — бұл ТЕК ішкі шек тұрақты болғанда дұрыс. Ал үшбұрыш есебінде ішкі цикл әр жолда 1, 2, 3, 4, 5 рет орындалды. Жалпы саны: 1+2+3+4+5 = 15. Бұл — n² = 25 ЕМЕС! Себебі ішкі цикл толық n рет емес, ӨСІП отыратын рет қайталанды.

Мұндай қосынды (1+2+...+n) арифметикалық прогрессия деп аталады, оны формуламен де табуға болады: n(n+1)/2 = 5·6/2 = 15 — дәл сәйкес келеді!

Қорытынды ереже
Ішкі цикл шегі тұрақты болса — жалпы қайталану n² (немесе n³). Ішкі цикл шегі СЫРТҚЫ айнымалыға тәуелді болса — әр қадамдағы санды ҚОСУ керек.
🎯 ҰБТ байланысы
Кірістірілген цикл ұйымдастыру бойынша сұрақтар.
1
Ішкі циклдің шегі сыртқы айнымалыға тәуелді кодтарды «қолмен» орындап көру (үшбұрыш/пирамида үлгілері).
2
Жалпы қайталану санын есептеу: тұрақты шек — көбейту (n×n), айнымалы шек — қосу (1+2+...+n).
3
range(1, i+1) мен range(1, i) арасындағы айырманы ажырату.
4
Жиі қателер: ішкі шекке +1 қосуды ұмыту; сыртқы мен ішкі бағытты (өсу/кему) шатастыру.
Сабақ қорытындысы
  • Кірістірілген циклдерде ішкі шек ТҰРАҚТЫ да, СЫРТҚЫ АЙНЫМАЛЫҒА ТӘУЕЛДІ де бола алады.
  • Айнымалы ішкі шек — үшбұрыш, пирамида сияқты өзгермелі геометриялық үлгілер жасауға мүмкіндік береді.
  • Сыртқы циклдің бағыты (өсу/кему) мен ішкі формула бір-бірінен ТӘУЕЛСІЗ таңдалады.
  • Жалпы қайталану санын есептегенде: тұрақты ішкі шек — көбейт (n²), айнымалы ішкі шек — әр қадамдағы санды қос.