Лекция · 5.1

Мәселені қалыптастыру

Сен архитектор болсаң, үй салуды бірден кірпіш қалаудан бастамайсың — алдымен ЖОБА сызасың: неше бөлме, қандай мақсатқа. Дәл солай, программаны бірден кодтан бастау — қатенің ЕҢ ЖИІ себебі. IV бөлімде «қалай жазу керек» дегенді үйрендік, ал V бөлімде — «НЕ ЖӘНЕ НЕГЕ жазу керек» дегенге көшеміз. Бұл сабақ — толық программалау процесінің БІРІНШІ, ЕҢ МАҢЫЗДЫ қадамы: мәселені қалыптастыру.

Алты кезең

Компьютерде есеп шығару — жеке кезеңдер тізбегі, дәл дәрігердің емдеу процесі сияқты (диагноз → ем жоспары → ем → тексеру → қорытынды).

Анықтама
Есеп шығарудың алты кезеңі: 1) мәселені қалыптастыру; 2) математикалық/ақпараттық модельдеу; 3) алгоритм құру; 4) программа құру; 5) программаны оңдау және тестілеу; 6) нәтижелерді талдау.

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

🏗️
Аналогия: мәселені қалыптастыру — үйдің ФУНДАМЕНТІ сияқты: көрінбейді, кейде «неге уақыт кетіреміз» деп ойлайсың, БІРАҚ фундамент қисық болса, ЕҢ СҰЛУ қабырға да құлайды.
Мәселе қалыптастырудың 5 бөлігі

Мәселені ДҰРЫС қалыптастыру — БЕС бөліктен тұратын нақты жазба түрінде беріледі: 1) Есептің шарты — есептің толық мәтіні; 2) Берілгені — бастапқы мәліметтер; 3) Нәтиже — не шығуы керек; 4) Шарт — бастапқы мәліметтерге қойылатын шектеулер; 5) Байланыс — берілгені мен нәтиженің арасындағы ФОРМУЛА.

Мысал: енгізілген санның факториалын есептеу.
Есептің шарты: енгізілген санның факториалын есептеу.
Берілгені: сан n. Нәтиже: n!.
Шарт: n натурал сан болуы тиіс (теріс не бөлшек болмасын!).
Байланыс: n! = 1 × 2 × ... × n.
Байқа: «Шарт» бөлігі болмаса, программа n=−5 немесе n=3,5 үшін де «жауап беруге» тырысар еді — ал факториал тек НАТУРАЛ санда бар мағына.
Мысал: амеба әрбір 3 сағатта 2 еселенеді. 3-тен 24 сағатқа дейінгі санды тап.
Берілгені: бастапқы уақыт мен амеба саны. Нәтиже: белгілі уақыттағы амеба саны.
Шарт: коэффициент — 2, период — 3 сағат.
Байланыс: T(i+1) = T(i)+3 (уақыт), C(i+1) = C(i)×2 (сан).
Байқа: «Байланыс» бөлігі — БҰЛ ЕКІ ФОРМУЛА, циклдің дәл КОДЫНА айналады: T мен C-ны ӘР ИТЕРАЦИЯДА жаңарту.
Толық жоба мысалы

Енді бір есепті БАСЫНАН АЯҒЫНА дейін алты кезеңмен өткізейік — «Ағашты тең бөліктерге бөлу» жобасы. Есеп: N метр ағашты M тең бөлікке бөлу керек. Тең бөлінбесе — айырмашылығы 1-ден артық емес бөліктерге бөлу.

1-кезең — Мәселе қою: екі шарт мүмкін: N нақты M-ге қалдықсыз бөлінеді, немесе бөлінбейді.

2-кезең — Математикалық модель: N%M==0 болса — t=N//M, M рет шығарылады. Болмаса — t=N//M (негізгі бөлік), қалдық P=N%M; (M−P) рет t мәнін, P рет (t+1) мәнін шығарамыз.

Талдау мысалы: 13-ті 4-ке бөлсек — бөлінді 3, қалдық 1. Демек: 3 рет «3» ЖӘНЕ 1 рет «4» → «3 3 3 4».

3-кезең — Алгоритм: input/print таңдау → N%M шартын тексеру → for циклімен шығару.

4-кезең — Программа:

n, m = map(int, input().split())
t = n // m
if n % m == 0:
    for i in range(1, m+1):
        print(t, end=' ')
else:
    p = n % m
    for i in range(1, (m-p)+1):
        print(t, end=' ')
    for i in range(1, p+1):
        print(t+1, end=' ')

5-кезең — Тестілеу: есеп шартында N≥2, M≥2 деп жазылған — 0 немесе теріс сан ЕНГІЗБЕУ керек.

6-кезең — Талдау: N=37, M=8 болғанда → 4 4 4 5 5 5 5 5 (t=4, P=5: 3 рет «4», 5 рет «5»). Нәтиже алдын ала есептегенмен СӘЙКЕС КЕЛСЕ — есеп 100% дұрыс.

⚠️
Жиі қате: «Шарт» бөлігін (шектеулерді) елемеу. Мысалы, N=0 немесе теріс сан енгізсең, программа МАТЕМАТИКАЛЫҚ тұрғыдан «жауап беруге» тырысады, БІРАҚ нәтиже МАҒЫНАСЫЗ болады (ағаш ұзындығы 0 болуы мүмкін емес!).
🎯 ҰБТ байланысы
Мәселе қалыптастыру бойынша тексерілетін дағды.
1
Есептің «Берілгені» мен «Нәтиже» бөлігін дұрыс АЖЫРАТУ.
2
«Байланыс» формуласын есеп шартынан ДӘЛ ШЫҒАРУ — бұл циклдің «дене» бөлігіне айналады.
3
Шектеулерді (шарттарды) назардан тыс қалдырмау.
4
Алты кезеңнің ретін білу: мәселе → модель → алгоритм → код → тест → талдау.
Сабақ қорытындысы
  • Мәселені қалыптастыру — компьютерде есеп шығарудың БІРІНШІ ЖӘНЕ ЕҢ МАҢЫЗДЫ кезеңі.
  • Бес бөлік: есептің шарты, берілгені, нәтижесі, шектеулері, байланыс формуласы.
  • Дұрыс қойылған мәселе — келесі бес кезеңнің БАРЛЫҒЫН жеңілдетеді.
  • Есептің НЕГІЗГІ ЗАҢДЫЛЫҒЫН тапқаннан кейін, программа коды сол логиканы Python тіліне АУДАРУ болып шығады.