§ 6. Выкарыстанне асноўных алгарытмічных канструкцый для рашэння задач

6.1. Наладка праграм у асяроддзі Code::Blocks

У дапамогу карыстальніку амаль любога асяроддзя праграміравання даюцца сродкі, неабходныя для наладкі праграмы. Яны дазваляюць старанна пратэсціраваць праграму і выправіць усе памылкі ў ёй  (прыклад 6.1). Асяроддзе Code::Blocks змяшчае наладчык, які дазваляе выканаць праграму па радках, праглядаць і мадыфікаваць пераменныя і выразы. Адладчык убудаваны ў інтэграванае асяроддзе, і таму карыстальнік можа рэдагаваць, кампіляваць і адладжваць праграму, не выходзячы з асяроддзя.

Памылкі кампіляцыі

Памылкі кампіляцыі, або сінтаксічныя памылкі, узнікаюць у тым выпадку, калі не апісана некаторая пераменная, перадаецца няправільная колькасць параметраў функцыі, прапушчана кропка з коскай ці дужка і г. д. З выпраўленнем памылак, выяўленых у час кампіляцыі, складанасцей практычна не ўзнікае. Кампілятар, выявіўшы ў праграме памылкі, завяршае працу і выдае інфармацыю пра памылкі ў акне рэдактара кода, на ўкладцы Build log (прыклад 6.2). Исправив ошибки, обнаруженные таким образом, можно повторить компиляцию программы.

Памылкі выканання

Памылкі выканання, або семантычныя памылкі, узнікаюць на этапе выканання пры спробе адкрыць файл, якога не існуе, дзяліць на нуль і г. д. (прыклад 6.3). Пры гэтым выкананне праграмы перарываецца. Узнікненне фатальных памылак прыводзіць да неадкладнага спынення выканання праграмы.

Лагічныя памылкі

Праграма можа змяшчаць і лагічныя памылкі. Лагічныя памылкі дазваляюць кампілятару выканаць праграму, аднак вынік выканання будзе адрознівацца ад чаканага. Наяўнасць такіх памылак вызначаецца з дапамогай тэсціравання. Выявіць памылку гэтай групы, не маючы ніякіх наладачных сродкаў, бывае дастаткова складана. Наяўнасць у праграме такіх памылак з’яўляецца адной з асноўных прычын узнікнення неабходнасці выкарыстання наладчыка, які ўваходзіць у склад інтэграванага асяроддзя. Наладчык дазваляе выканаць праграму ў дыялогавым рэжыме, назіраючы за змяненнем значэнняў асобных пераменных ці выразаў. Маецца магчымасць спыніцца ў зададзеным пункце праграмы і змяніць значэнні некаторых пераменных і выразаў.

Каманды наладчыка сабраны ў меню Debug (прыклад 6.4). Гэтыя ж каманды прадубляваны на панэлі хуткага доступу  (прыклад 6.5). Апісанне каманд наладкі, сабраных у меню Debug, прыведзены ў  Дадатку да главы 1.

Трасіроўка — выкананне зыходнай праграмы па радках, пры якім пасля выканання кожнага радка можна спыніцца і паглядзець вынікі.

Наяўнасць магчымасці выканання зыходнай праграмы да радка, на які паказвае курсор, дазваляе прапусціць трасіроўку малацікавых частак праграмы і адразу перайсці ў пункт пачатку наладкі. Для гэтых мэт можна націснуць F4 у радку з курсорам. Калі гэты радок знаходзіцца пасля ўводу даных, то ўвод даных адбудзецца як звычайна, выкананне праграмы перапыніцца, калі прыйдзе чарга выканання гэтага радка. Неабходна пераключыцца з кансольнага акна ў акно кода. Той радок, які павінен выканацца, пазначаецца жоўтым трохвугольнікам   (прыклад 6.6).

Некаторыя радкі праграмы могуць быць пазначаны як пункты перарывання. Для гэтага дастаткова клікнуць мышшу злева ад радка праграмы. У гэтым месцы з’явіцца чырвоны круг  (прыклад 6.7).

Калі ў працэсе выканання аладкі праграмы (запуск з дапамогай клавішы F8 ці ) дасягаецца пункт перарывання, выкананне праграмы прыпыняецца і на экране адлюстроўваецца фрагмент зыходнага тэксту праграмы, які змяшчае пункт перарывання. Па-над пунктам перарывання ўстанаўліваецца маркер наладкі праграмы  . Спыніўшыся ў пункце перарывання, можна прагледзець значэнні пераменных, пачаць трасіроўку ці выканаць праграму да наступнага пункта перарывання.

Наладчык інтэграванага асяроддзя Code::Blocks дае магчымасць назірання за змяненнем пераменных ці выразаў. Аб’екты, за якімі назіраюць, адлюстроўваюцца ў акне назірання Watches, паказваючы змяненні ў праграме пры пакрокавым выкананні. Для адкрыцця акна Watches можна выканаць каманду Debug → ebugging Windows Watches ці выбраць яго са спісу наладачных вокнаў на панэлі хуткага доступу  (прыклад 6.8).

Для дабаўлення пераменнай у акно прагляду трэба дабавіць яе імя ў першы слупок акна Watches. 

Прыклад 6.1. Тыпы памылак:

  • памылкі кампіляцыі (сінтаксічныя);
  • памылкі выканання;
  • лагічныя памылкі.

Пыклад 6.2. Прыклад памылкі кампіляцыі.

Усе памылкі вылучаюцца чырвоным колерам. Для кожнай памылкі паказваецца нумар радка, у якім выяўлена памылка, і апісанне гэтай памылкі. Шэрым фонам падсвечваецца тая з памылак, якая вылучана ў праграме знакам   .

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

Alt + F2, а вярнуцца да папярэдняй — Alt + F1.

Прыклад 6.3. Прыклад памылкі выканання.

Тэкст праграмы:

#include <iostream>

 

using namespace std;

 

int main()

{

    int x;

    cout << "x = ";

    cin >> x;

    int y = x / (- 5);

    cout << y;

    return 0;

}

Тэсціраванне:

Пры x = 5 узнікае памылка дзялення на нуль, і асяроддзе выдае паведамленне з кодам памылкі: «Process returned –1073741676». Калі праграма выканалася паспяхова, то код памылкі 0: «Process returned 0».

Пры аналізе праграмы кампілятар выдае не толькі памылкі, але і папярэджанні (warning) пра тое, што некаторыя запісы могуць прывесці да памылкі. Папярэджанні вылучаюцца сінім колерам.

Калі ў праграме вышэй запісаць 

    int = x / (- x);   

то пры кампіляцыі праграмы можна ўбачыць папярэджанне:

Прыклад 6.4. Меню  Debug:

Прыклад 6.5. Панэль хуткага доступу з камандамі наладкі:

  Прыклад 6.6. Рэжым наладкі:

Прыклад 6.7. Пункты перарывання:

Калі пункт перарывання ўстаноўлены ўнутры цыкла, то можна вызначыць, колькі ітэрацый цыкла будзе прапушчана, перад тым як праграма перапыніцца. Зрабіць гэта можна з кантэкставага меню пункта перарывання. Таксама можна паказаць лагічны выраз, пры якім спрацуе пункт перарывання.

Прыклад 6.8. Акно назірання за значэннямі пераменных  Watches:

Акно Watches з’яўляецца «вісячым», пры жаданні яго можна прычапіць да акна рэдактара кода. Для гэтага трэба перамясціць акно Watches да акна рэдактара кода і выбраць месца яго змяшчэння. У працэсе перамяшчэння акна месца, куды яго можна «прычапіць», будзе адлюстроўвацца прамавугольнікам шэрага колеру.

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