Лекция · 5.2

Алгоритмді әзірлеу

Мәселені (өткен сабақ) қойдық: «не берілген, не керек» — белгілі. Енді екінші қадам: НАҚТЫ ЖОСПАР құру. Архитектор мысалына оралайық — жобаны қойғаннан кейін, ол бірден кірпіш қаламайды, алдымен СЫЗБА (чертёж) салады. Программалауда бұл сызба — БЛОК-СЫЗБА. Бұл сабақта алгоритм әзірлеудің үш кезеңімен және циклдік алгоритмнің үш бөлшегімен танысамыз.

Алгоритм қасиеттері мен түрлері

Есіңе түсірейік: алгоритм — есепті шешуге бағытталған әрекеттер тізбегі. Ол бес қасиетке ие болуы керек: атқарушыға ТҮСІНІКТІ, ҚАРАПАЙЫМ қадамдардан тұратын (дискретті), ДӘЛ (анық), СОҢЫ бар (нәтижелі), ЖИНАҚТЫ.

Алгоритмді жазудың төрт түрі бар: сөздік (табиғи тілмен), графикалық (блок-сызба), псевдокод (шартты алгоритмдік тіл), программалық (нақты код).

Неге бірден кодқа өтпей, алдымен блок-сызба саламыз? Себебі БІР есепті ӘРТҮРЛІ алгоритммен шешуге болады. Блок-сызба саған әртүрлі шешімдерді САЛЫСТЫРУҒА, ТИІМДІСІН ТАҢДАУҒА мүмкіндік береді.

🗺️
Аналогия: блок-сызба — саяхат алдындағы маршрут картасы: жолды алдын ала жоспарласаң, ЕҢ ҚЫСҚА, ЕҢ ЫҢҒАЙЛЫ жолды таңдай аласың. Ал картасыз жүрсең — адасып, артқа қайту ықтимал.
Алгоритм әзірлеудің 3 кезеңі

1-кезең — Математикалық сипаттама. Есепті ФОРМУЛА түрінде жаз. Мысалы: n! = 1×2×...×n.

2-кезең — Кіріс/шығыс мәліметтерін анықтау. Не беріледі (кіріс), не шығуы керек (шығыс), ЦИКЛ ПАРАМЕТРІН таңда: оның бастапқы мәні, соңғы мәні, қадамы қандай.

3-кезең — Алгоритмді әзірлеу. Сөздік сипаттама ЖӘНЕ блок-сызба құрастыру.

Ал циклдік алгоритмнің ІШКІ құрылымы да ТҰРАҚТЫ үш бөліктен тұрады: 1) Цикл дайындау — параметрдің бастапқы мәнін, соңғы мәнін, қадамын АНЫҚТАУ; 2) Цикл денесі — қайталанатын әрекет(тер) + параметрдің КЕЛЕСІ мәнін дайындау; 3) Циклдің қайталану шарты — параметр соңғы мәнге жеткенде/асқанда ТОҚТАТУ.

Анықтама
Қайталау алгоритмі — циклдің қайталану шарты жалған болғанша белгілі әрекеттердің қайталануын анықтайтын алгоритм.
Факториал есебі
Тапсырма: n санының факториалын есептеу алгоритмі.
1-кезең (математика): n! = 1×2×3×...×n, немесе цикл формасында: F = F×i.
2-кезең (кіріс/шығыс): кіріс — n (натурал сан); шығыс — F. Цикл параметрі i: бастапқы мәні 1, соңғы мәні n, қадамы 1. МАҢЫЗДЫ: F-тің БАСТАПҚЫ мәні — 1 (ЕМЕС 0!).
3-кезең (алгоритм, сөздік): 1) Басы. 2) Дайындау: F=1, i=1. 3) Шарт: i≤n болса → 4-ке, әйтпесе → 6-ға. 4) F:=F×i. 5) i:=i+1, 3-ке қайта орал. 6) F-ті шығар. 7) Соңы.
Жауабы: n=5 болса, F = 1×2×3×4×5 = 120.
⚠️
Ең жиі қате: қосынды есептегенде бастапқы мән — 0 (S=0), КӨБЕЙТІНДІ есептегенде бастапқы мән — 1 (F=1). Бұл екеуін шатастырсаң: F=0-ден бастасаң ЕШҚАШАН дұрыс факториал шықпайды (0×кез келген сан = 0); S=1-ден бастасаң, қосынды артық 1-ге көп болады.
Тапсырма: амеба әрбір 3 сағатта 2 еселенеді, 3-тен 24 сағатқа дейінгі санды тап.
1-кезең: C(i+1) = C(i)×2.
2-кезең: кіріс — C=1, h=3 (период); шығыс — C. Цикл параметрі h: бастапқы 3, соңғы 24, қадамы 3.
3-кезең: цикл денесінде h≤24 тексеріліп, әр қадамда C 2 есе артады.
Жауабы: h=3→2, h=6→4, h=9→8, ..., h=24→256.

Салыстыру: факториал есебінде F КӨБЕЙЕДІ (×i, ӨЗГЕРМЕЛІ көбейткіш), амеба есебінде C да КӨБЕЙЕДІ (×2, ТҰРАҚТЫ көбейткіш) — екеуі де «жинақтаушы» циклдер, тек көбейткіштің табиғаты бөлек.

Толық мысал: функция мәндерін кестелеу

Мәселе: x-ті 1-ден 10-ға дейін 1 қадаммен өзгерте отырып, y = x²+3x−4 мәндерін шығару және қосындысын табу.

Формальдау: қайталану саны АЛДЫН АЛА белгілі (1-ден 10-ға дейін) — демек, ПАРАМЕТРЛІ (for) цикл қолданамыз. Қосынды: s = s+y.

s = 0
for x in range(1, 11):
    y = x*x + 3*x - 4
    print('x=', x, 'y=', y)
    s = s + y
print('қосынды=', s)

Нәтиже: x=1→y=0, x=2→y=6, ..., x=10→y=126; жалпы қосынды s=510.

Байқа: бұл есепте ЦИКЛ ПАРАМЕТРІ (x) ІС ЖҮЗІНДЕ ЕКІ рөл атқарады: (1) функция АРГУМЕНТІ ретінде, (2) циклдің САНАУЫШЫ ретінде.

Программаны ұйымдастырудың үш әдісі бар: құрылымдалған программалау (қарапайым, оқуға жеңіл), процедуралық программалау (функцияларға бөлу), модульдік программалау (тәуелсіз бөліктерге бөлу). 8-сыныпта негізінен ҚҰРЫЛЫМДАЛҒАН тәсілді қолданасың.

🎯 ҰБТ байланысы
Алгоритм әзірлеу бойынша тексерілетін дағды.
1
Цикл параметрінің бастапқы/соңғы мәні мен қадамын дұрыс анықтау.
2
Қосынды (0-ден) мен көбейтінді (1-ден) бастапқы мәндерін шатастырмау.
3
Формула бойынша блок-сызба құру және оны кодқа айналдыру.
4
Есептің кіріс/шығыс мәліметтерін дәл ажырату.
Сабақ қорытындысы
  • Алгоритм әзірлеу: (1) формула, (2) кіріс/шығыс + цикл параметрі, (3) сөздік алгоритм + блок-сызба.
  • Циклдің өзі: дайындау → дене → шарт.
  • Ең жиі қате — қосынды мен көбейтіндінің бастапқы мәндерін шатастыру (0 vs 1).
  • Дұрыс жоспарланған алгоритм — келесі кезеңде кодтауды жеңілдетеді.