Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцый для 1 курса-1 семестр.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
2.95 Mб
Скачать

Адладка праграм

Калі тэсціраванне паказала, што ў праграме ёсць памылкі, тады па­чы­на­ецца адладка – працэс лакалізацыі і выпраўлення памылак.

Перш за ўсё трэба пакласці перад сабой тэкст праграмы і пра­ана­лі­за­ваць яе на наяўнасць апісак. Далей пачынаецца лакалізацыя ўчаст­ка, які і прыводзіць да памылковага выніку. Дзеля гэтага можна не­ка­торыя апе­ра­та­ры вылучыць як каментарыі, зрабіць іх невыканальнымі і прадоўжыць тэсціраванне.

Памылкі могуць праяўляцца па-рознаму. Самы просты выпадак, калі здараецца аварыйнае завяршэнне праграмы: дзяленне на нуль, overflow, underflow, выхад за межы масіву. Пры гэтым звычайна паказваецца на апе­ратар, выкананне якога прывяло да аварыі. У рэжыме адладкі можна пра­глядзець значэнні велічынь, якія ўваходзяць у выраз, і прааналізаваць іх. Трэба шукаць, што прывяло да памылковага выніку.

Цяжэй за ўсё знайсці памылку, калі праграма працуе «амаль пра­віль­на» або «доўга». Трэба пастарацца прааналізаваць алгарытм, напрыклад рас­тлумачыць яго каму-небудзь.

Пры выпраўленні праграмы неабходна прадумаць, каб выпраўленне адной часткі алгарытму не прывяло да памылак у другім месцы. Ёсць та­кое правіла: калі правак надта многа, то лепш напісаць праграму нанава.

Прыклад. Рашыць прыведзенае квадратнае ўраўненне

Этапы рашэння гэтай задачы будуць скарочаны, таму што методыка рашэння такіх ураўненняў вядома.

Алгарытм. Атрымаем наступную паслядоўнасць дзеянняў.

1. Атрымаць каэфіцыенты p, q.

2. Падлічыць .

3. Калі D = 0, то інакш калі D < 0, то каранёў няма; інакш (D > 0) .

4. Надрукаваць вынік.

Блок-схема алгарытму:

Структураграма алгарытму:

Заданне p, q

Падлік

< 0

D – ?

 0

Каранёў няма

D – ?

= 0

> 0

Друкуем х1, х2

Канец

Праграма, якая рэалізуе алгарытм на мове Pascal:

PROGRAM Pr1;

CONST p = …; q = …;

VAR x1, x2, D: Real;

BEGIN

D := p * p – 4 * q;

IF D < 0 THEN Writeln ('D < 0, няма каранёў')

ELSE

BEGIN

IF D = 0 THEN

BEGIN

Writeln ('D = 0, кратны корань');

x1 := -p / 2; x2 := x1

END

ELSE

BEGIN

Writeln ('D > 0, два розныя карані');

x1 := (-p - sqrt(D)) / 2;

x2 := (-p + sqrt(D)) / 2;

END;

Writeln('X1=', x1, ' X2=', x2)

END;

Readln

END.

Для тэсціравання алгарытму праграмы рашыце наступныя ўра­ў­ненні:

Пры дапамозе атрыманай праграмы падлічыце карані гэтых ураў­нен­няў. Тэсціраванне пакажа: нягледзячы на тое, што ўсе ўраўненні з’яў­ля­юц­ца поўнымі квадратамі, вынік работы праграмы будзе розным. Для пер­ша­га ўраўнення праграма надрукуе «D = 0, кратны корань», для дру­го­га – «D < 0, няма каранёў», для трэцяга – «D > 0, два розныя карані».

Тым, хто незнаёмы з тэмай уяўлення сапраўдных даных у ЭВМ, маг­чы­ма, і зусім будзе незразумела, чаму камп’ютар няправільна пад­ліч­вае дыскрымінанты. Аказваецца, што добра вядомыя чалавеку ал­га­рыт­мы на ЭВМ іншы раз паводзяць сябе непрадказальна, таму што існуе такая ўлас­цівасць у ЭВМ, як паталогія лікаў (напрыклад, (1 / 3) * 3  1).

Калі тэставыя ўраўненні прывесці да віду ўраўненняў з цэлымі каэфі­цы­ен­та­мі, то памылкі пры падліку дыскрымінанта не будзе зусім.