Мәселені қалыптастыру
Сен архитектор болсаң, үй салуды бірден кірпіш қалаудан бастамайсың — алдымен ЖОБА сызасың: неше бөлме, қандай мақсатқа. Дәл солай, программаны бірден кодтан бастау — қатенің ЕҢ ЖИІ себебі. IV бөлімде «қалай жазу керек» дегенді үйрендік, ал V бөлімде — «НЕ ЖӘНЕ НЕГЕ жазу керек» дегенге көшеміз. Бұл сабақ — толық программалау процесінің БІРІНШІ, ЕҢ МАҢЫЗДЫ қадамы: мәселені қалыптастыру.
Компьютерде есеп шығару — жеке кезеңдер тізбегі, дәл дәрігердің емдеу процесі сияқты (диагноз → ем жоспары → ем → тексеру → қорытынды).
Есеп шығарудың алты кезеңі: 1) мәселені қалыптастыру; 2) математикалық/ақпараттық модельдеу; 3) алгоритм құру; 4) программа құру; 5) программаны оңдау және тестілеу; 6) нәтижелерді талдау.
БАСТЫ ЕРЕЖЕ: бірінші кезең — ІРГЕТАС. Есептің берілгенін ҚАТЕ түсінсең, кейінгі бес кезеңнің БӘРІ дұрыс орындалса да, нәтиже ҚАТЕ болады. Сондықтан мәселені қалыптастыруға уақыт бөлу — уақытты ЖОҒАЛТУ емес, керісінше, УАҚЫТ ҮНЕМДЕУ.
Мәселені ДҰРЫС қалыптастыру — БЕС бөліктен тұратын нақты жазба түрінде беріледі: 1) Есептің шарты — есептің толық мәтіні; 2) Берілгені — бастапқы мәліметтер; 3) Нәтиже — не шығуы керек; 4) Шарт — бастапқы мәліметтерге қойылатын шектеулер; 5) Байланыс — берілгені мен нәтиженің арасындағы ФОРМУЛА.
Есептің шарты: енгізілген санның факториалын есептеу.
Берілгені: сан n. Нәтиже: n!.
Шарт: n натурал сан болуы тиіс (теріс не бөлшек болмасын!).
Байланыс: n! = 1 × 2 × ... × n.
Байқа: «Шарт» бөлігі болмаса, программа n=−5 немесе n=3,5 үшін де «жауап беруге» тырысар еді — ал факториал тек НАТУРАЛ санда бар мағына.
Берілгені: бастапқы уақыт мен амеба саны. Нәтиже: белгілі уақыттағы амеба саны.
Шарт: коэффициент — 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% дұрыс.
- Мәселені қалыптастыру — компьютерде есеп шығарудың БІРІНШІ ЖӘНЕ ЕҢ МАҢЫЗДЫ кезеңі.
- Бес бөлік: есептің шарты, берілгені, нәтижесі, шектеулері, байланыс формуласы.
- Дұрыс қойылған мәселе — келесі бес кезеңнің БАРЛЫҒЫН жеңілдетеді.
- Есептің НЕГІЗГІ ЗАҢДЫЛЫҒЫН тапқаннан кейін, программа коды сол логиканы Python тіліне АУДАРУ болып шығады.