Алгоритмнің трассировкасы
Программаң жұмыс істейді, бірақ нәтиже КҮТКЕНІҢДЕЙ шықпайды. Компьютер сені жазаламайды, тек «дұрыс емес сан» береді де қояды — ал НЕГЕ қате екенін өзің табу керек. Қалай? Компьютерге айналып, ӘР ҚАДАМДЫ ӨЗІҢ, ҚОЛМЕН қайталап көресің! Бұл — трассировка: программаны кітап оқығандай емес, ЕСЕПТЕГІШТЕЙ, әр жолды, әр айнымалының мәнін қадағалап отырып оқу өнері.
Ойлан: компьютер программаны қалай «оқиды»? Ол жолды жол артынан, ДӘЛ жазылған ретпен орындайды, әр кезде айнымалылардың мәнін жаңартып отырады. Сен де дәл осылай істей аласың — қағазға.
Трассировка — алгоритмнің жұмысын тексеру үшін программаны ҚАДАМ-ҚАДАММЕН орындау процесі.
Неге бұл маңызды? Себебі компьютерде программаны «сынап көру» әрдайым мүмкін немесе ыңғайлы бола бермейді. Ал трассировка арқылы АДАМНЫҢ ӨЗІ, компьютерсіз-ақ, программаның дұрыс жұмыс істейтінін тексере алады. Бұл — ҰБТ-дағы «код нәтижесін тап» есептерінің ЖАЛҒЫЗ сенімді әдісі.
Трассировка кестесі — процессордың жұмысын модельдейтін кесте: әр бағанда бір айнымалы, әр жолда бір қадам (оператордың орындалуы) көрсетіледі.
Трассировка кестесін құру алгоритмі қарапайым: 1) кодтағы әр АЙНЫМАЛЫҒА бөлек баған аш; 2) кодты БІРІНШІ ЖОЛДАН бастап, ЖОЛ-ЖОЛМЕН оқы; 3) әр оператор орындалғанда, ӨЗГЕРГЕН айнымалының жаңа мәнін жаз; 4) циклдегі ШАРТТЫ тексерген сайын, «ақиқат/жалған» деп белгіле; 5) шарт жалған болғанда — цикл тоқтайды, қорытынды мәнді ал.
S = 0 for N in range(1, 6): S = S + N print('Сандардың қосындысы', S)
| Оператор | N | S |
|---|---|---|
| S=0 | — | 0 |
| N=1 | 1 | 0+1=1 |
| N=2 | 2 | 1+2=3 |
| N=3 | 3 | 3+3=6 |
| N=4 | 4 | 6+4=10 |
| N=5 | 5 | 10+5=15 |
| цикл аяқталды | ??? | — |
Жауабы: S = 15. Есіңде болсын: цикл аяқталғаннан кейін N-нің нақты мәні кейде «белгісіз» (???) болып қалады — маңыздысы, S қорытынды мәні дұрыс есептелгені.
While циклінің трассировкасы ЕРЕКШЕ мұқият болуды талап етеді — себебі шартты ӘР ИТЕРАЦИЯДА тексеру керек.
k=1 s=5 while k<300: s=s+10 k=k*5 print('Қосынды=', s)
| Қадам | k | s | Шарт (k<300) |
|---|---|---|---|
| бастапқы | 1 | 5 | — |
| 1-итерация | 5 | 15 | 1<300 True |
| 2-итерация | 25 | 25 | 5<300 True |
| 3-итерация | 125 | 35 | 25<300 True |
| 4-итерация | 625 | 45 | 125<300 True |
| тексеру | 625 | — | 625<300 False → тоқта |
Жауабы: «Қосынды= 45». Назар аудар: k ӘР ИТЕРАЦИЯДА 5-ке КӨБЕЙЕДІ (1→5→25→125→625), ал s ӘРҚАШАН 10-ға АРТАДЫ. Циклдің тоқтау сәтін дәл табу үшін — k-ны 300-мен ӘР ҚАДАМДА салыстыр.
Трассировкада екі тәсіл бар: сипаттамалық (сөзбен) және кестелік (сандармен). Кестелік тәсіл дәлірек әрі жылдамырақ тексеріледі — ҰБТ емтиханында уақыт тапшы болса да, КЕСТЕ ЖАЗУ ЖЫЛДАМЫРАҚ ӘРІ ДӘЛ нәтиже береді.
- Трассировка — программаны компьютерсіз, қолмен, қадам-қадаммен «орындау» өнері.
- Әр айнымалыға баған ашып, кодты жол-жолмен оқып, өзгерістерді кестеге жазасың.
- Циклдерде — шартты ӘР ИТЕРАЦИЯДА тексеру маңызды.
- Бұл дағды: (1) программаның қатесін табуға, (2) ҰБТ-дағы «код нәтижесін тап» есептерін дәл шешуге қызмет етеді.