
C _Учебник_МОНУ
.pdf
Налагодження програм |
559 |
while(x<15) x-=2;
Edit1->Text=IntToStr(x);
}
При компіляції цього коду жодних повідомлень про помилки чи попередження не виникає. При виконуванні ця програма на певний час “зависає”, а потім виводить до Edit1 число 2147483647, яке є некоректним результатом, оскільки сам програмний код є некоректний.
Установимо курсор усередину циклу (наприклад на рядок x-=2;) і натиснемо <F4>. На екрані з‟явиться форма, клацнемо на Button1. Після цього повертаємось до вікна редагування коду. Якщо клацнути на змінну х, можна побачити її значення (х=5). Натиснемо <Ctrl>+<F7> і побачимо вікно
Натиснемо кнопку Watch, після чого з‟явиться вікно
Якщо багаторазово натискати <F7>, можна спостерігати значення змінної х. Воно зменшується на 2 і ніколи не стане більше за 15. Коли змінна х стане менше за нижню межу типу int, вона набуде довільного значення (можливо, великого додатного). Якщо воно більше за 15, – програма зупиниться і до Edit1 буде виведено це значення.
Приклад 15.1 Обчислити силу струму за формулою I = U / R, де U – напруга джерела (В), R – опір (Ом).
Текст програми:
void __fastcall TForm1::Button1Click(TObject *Sender)
{float u, r, i; u=StrToFloat(Edit1->Text);

560 |
Розділ 15 |
r=StrToFloat(Edit2->Text); i=u/r; Edit3->Text=FloatToStr(i);
}
Якщо при виконуванні програми до Edit1 ввести число 10.5 замість 10,5, тобто розділили цілу і дробову частини крапкою, після клацання на Button1 на екрані з‟явиться повідомлення
Причина виникнення цієї помилки полягає в такому. У тексті програми дробова частина завжди відокремлюється від цілої десятковою крапкою. При введенні даних до Edit1 розділювач залежить від налагодження операційної системи. Для України зазвичай у Windows встановлено розділювачем є кома, Тому за використання десяткової крапки у вікні Edit1 при виконуванні команди
u =StrToFloat(Edit1->Text);
виникне виняткова ситуація, оскільки аргументом функції StrToFloat не є зображення дробового числа.
Після виникнення такої виняткової ситуації і клацання на кнопці ОК у діалоговому вікні Debugger Exception Notification виконування програми можна перервати чи, незважаючи на помилку, продовжити. Щоб перервати виконування програми, слід у меню Run обрати команду Program Reset, а щоб продовжити – Step Over.
Найбільш поширені помилки на етапі виконування програми: 1) Переповнення (нескінченний цикл) stack overflow. Наприклад:
void f(int n)
{f(n+1);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{f(5);
}

Налагодження програм |
561 |
Причиною виникнення помилки є нескінченна рекурсія, унаслідок якої відбувається переповнення стека. Щоб уникнути цієї помилки, слід зазначати умову зупинки рекурсії, наприклад:
void f(int n)
{if (n>=10) return; f(n+1);
}
2) Надто велике/мале число чи то неприпустиме значення для використання у якості аргументу функції спричинюють помилки:
pow: domain error log: SING error.
Приміром, команда програми x=pow(-5, 0.3);
спричинить помилку
Наведемо ще один приклад програмного коду, який призводить до помилки на етапі виконування:
float x=0; Edit1->Text=FloatToStr(log(x));
Причина помилки: логарифм нуля не існує, оскільки значення х<=0 є неприпустиме для цієї функції.
3) Ділення на нуль: Division by zero.
Наприклад:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float x=0;
for(int i=0; i<5; i++) x+=1./i;
Edit1->Text=FloatToStr(x);
}

Бібліографічний список
1Архангельский А. Я. Приемы программирования в С++ Builder 6 и 2006 / А. Я. Архангельский. – М. : ООО Бином-Пресс, 2006. – 992 с.
2Архангельский А. Я. Программирование в С++ Builder 6 и 2006 / А. Я. Архангельский, М. А. Тагин. – М. : ООО Бином-Пресс, 2007. – 1184 с.
3Боровский А. Н. C++ и Borland C++ Builder. Самоучитель / А. Н. Бо-
ровский. – 1-е изд. – СПб. : Питер, 2005. – 256 с.
4Бобровский С. И. Самоучитель программирования на языке С++ в си-
стеме Borland C++ Builder 5.0 / С.И. Бобровский. – М. : ДЕСС КОМ, 2001. – 272 с.
5Бобровский С. И. Технологии C++ Builder. Разработка приложений для бизнеса. Учебный курс / С.И. Бобровский. – СПб. : Питер, 2007. – 560 с.
6Глушаков С. В. Программирование в среде С++ Builder 6 / С. В. Глушаков, В. Н. Зорянский, С. Н. Хоменко. – Харьков : Фолио, 2003. – 508 с.
7Глушаков С. В. Практикум по С++ / С. В. Глушаков, С. В. Смирнов, А. В. Коваль. – Харьков : Фолио, 2006. – 526 с.
8Глушков С. В. Язык программирования С++ : учебн. курс / С. В. Глушаков, С. В. Смирнов, А. В. Коваль.– Харьков : Фолио, 2001. – 500 с.
9Дейтел Х.М. Как программировать на С++ / Х. М. Дейтел,
П. Дж. Дейтел; пер. с англ. – 5-е изд. – М. : ООО Бином-Пресс, 2008. – 1456 с.
10Динман М. И. С++. Освой на примерах / М. И. Динман. – СПб. : БХВПетербург, 2006. – 384 с.
11Джосьютис Н. С++. Стандартная библиотека / Н. Джосьютис. – СПб. :
Питер, 2004. – 730 с.
12Златопольский Д. М. Сборник задач по программированию / Д. М. Златопольский. – 2-е изд. – СПб. : БХВ-Петербург, 2007. – 240 с.
13Ковалюк Т. В. Основи програмування / Т. В. Ковалюк. – К. : ВHV,
2005. – 384 c.
14Крупник А. Б. Изучаем С++ / А. Б. Крупник. – СПб. : Питер, 2004. –
251 с.
15Крячков А. В. Программирование на С и С++. Практикум : учебник / А. В. Крячков, И. В. Сухинина, В. К. Томшин. – 2-е изд. – М. : Горячая линия − Телеком, 2000. – 344 с.
16Культин Н. Б. Самоучитель С++ Builder / Н. Б. Культин. – СПб. : БХВ-Петербург, 2004. – 320 с.
17Культин Н. Б. С/С++ в задачах и примерах / Н. Б. Культин. – СПб. : БХВ-Петербург, 2007. – 336 с.
18Лафоре Р. Объектно-ориентированное программирование в С++ / Р. Лафоре. – 4-е изд. – СПб.: Питер, 2003. – 928 с.
19Либерти Дж. Освой самостоятельно C++ за 21 день / Джесс Либерти, Брэдли Джонс. – 5-е изд. – М. : Вильямс, 2009. – 784 с.
20Липпман С. Б. Язык программирования С++. Вводный курс / С. Б. Липпман, Ж. Лажойе, Б. Э. Му. – СПб.: Невский диалект, 2001. – 1088 с.
21Лупал А. М. Теория автоматов : учеб. пособие / А. М. Лупал. – СПб. : СПбГУАП, 2000. – 119 с.

Додаток А
Таблиці кодів ASCII
Таблиця А.1
Символи ASCII
.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
0. |
NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF |
VT |
FF |
CR |
SO |
SI |
|
|||||||||||||||||
|
|
0 |
1 |
2 |
3 |
|
4 |
|
5 |
|
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
|||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
1. |
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS |
GS |
RS |
US |
|
|||||||||||||||||||
|
|
16 |
17 |
18 |
19 |
|
20 |
|
21 |
|
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. |
|
(sp) |
! |
" |
# |
|
$ |
|
% |
|
& |
' |
( |
) |
* |
+ |
, |
- . |
/ |
|
||||
|
|
32 |
33 |
34 |
35 |
|
36 |
|
37 |
|
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. |
0 |
1 |
2 |
3 |
|
4 |
|
5 |
|
6 |
7 |
8 |
9 |
: |
; |
< |
= |
> |
? |
|
||||
|
|
48 |
49 |
50 |
51 |
|
52 |
|
53 |
|
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
|
|||
4. |
|
@ A B C D E E G H I J K L |
M N O |
|
||||||||||||||||||||
|
|
64 |
65 |
66 |
67 |
|
68 |
|
69 |
|
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
|
|||
5. |
|
P Q R S T U V W X Y Z [ |
\ |
] ^ _ |
|
|||||||||||||||||||
|
|
80 |
81 |
82 |
83 |
|
84 |
|
85 |
|
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
|
|||
6. |
` |
a |
b |
c |
|
d |
|
e |
|
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
|
||||
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7. |
|
p |
q |
r |
s |
|
|
t |
|
u |
|
v |
w |
x |
y |
z |
{ |
| |
} |
~ |
DEL |
|
||
|
|
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблиця А.2 |
|
||
|
|
|
|
|
|
|
|
Керувальні символи ASCII |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Код |
|
|
Ім’я |
|
|
|
Ctrl- |
|
|
|
|
|
Призначення |
|
|
|
|
|||||||
|
|
|
|
|
код |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
Використовується для передавання у разі |
|
|
|||||||||
|
|
|
NUL (Null – |
|
|
|
|
|
|
|
відсутності даних. Вживається у багатьох мовах |
|
||||||||||||
0 |
|
порожньо, |
|
|
|
^@ |
|
програмування як кінець рядка. |
|
|
|
|
||||||||||||
|
|
|
дані є відсутні) |
|
|
|
|
|
|
В деяких операційних системах NUL – останній |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
символ кожного текстового файла |
|
|
|
|
|||||||
|
|
|
SOH (Start of |
|
|
|
|
|
|
|
Використовується для зазначення початку |
|
|
|||||||||||
1 |
|
Heading – початок |
|
|
|
^A |
|
заголовка, який може містити інформацію |
|
|
||||||||||||||
|
|
|
заголовка) |
|
|
|
|
|
|
|
про маршрутизацію чи адресу |
|
|
|
|
|
||||||||
2 |
|
STX (Start of Text – |
|
^B |
|
Вказує на початок тексту і водночас на кінець |
|
|||||||||||||||||
|
початок тексту) |
|
|
|
|
заголовка |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
3 |
|
ETX (End of Text – |
|
|
^C |
|
Використовується при завершенні тексту, |
|
|
|||||||||||||||
|
кінець тексту) |
|
|
|
|
який розпочинався символом STX |
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
EOT (End of |
|
|
|
|
|
|
|
У системі UNIX <Ctrl>+<D> означає кінець |
|
|
|||||||||||
4 |
|
Transmission – |
|
|
|
^D |
|
|
|
|||||||||||||||
|
|
|
|
|
файла при введенні даних з клавіатури |
|
|
|
||||||||||||||||
|
|
|
кінець передачі) |
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
5 |
|
ENQ (Enquiry – |
|
|
|
^E |
|
Запит ідентифікаційних даних |
|
|
|
|
|
|||||||||||
|
запит) |
|
|
|
|
|
|
від віддаленої станції |
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
|
|
Додаток А |
|
|
|
|
|
Продовження табл. А.2 |
Код |
|
Ім’я |
Ctrl- |
Призначення |
|
код |
|||
|
|
|
|
|
|
|
ACK (Acknowledge – |
|
Приймальний пристрій передає цей символ |
6 |
|
^F |
відправникові як потвердження успішного |
|
|
потвердження) |
|||
|
|
|
прийому даних |
|
|
|
|
|
|
|
|
BEL (Bell – |
|
Використовується для керування пристроями |
7 |
|
дзвоник, |
^G |
сигналізації. У мовах програмування C та C++ |
|
|
звуковий сигнал) |
|
позначається \a |
|
|
BS (BackSpace – |
|
Повертання на одну позицію назад, |
8 |
|
повертання на один |
^H |
відбувається вилучання попереднього |
|
|
символ) |
|
символу |
|
|
HT (Horizontal |
|
Відбувається переміщення курсора |
9 |
|
Tabulation – |
^I |
до наступної позиції табуляції. У багатьох |
|
горизонтальне |
мовах програмування позначається \t |
||
|
|
|
||
|
|
табулювання), чи TAB |
|
|
|
|
|
|
Відбувається переміщення курсора до початку |
|
|
|
|
наступного рядка (на один рядок вниз). У кінці |
|
|
|
|
кожного рядка текстового файлу ставиться чи |
10 |
|
LF (Line Feed – |
^J |
то цей символ, чи CR, чи вони обидва разом |
|
переведення рядка) |
(CR, а потім LF), залежно від операційної |
||
|
|
|
||
|
|
|
|
системи. У багатьох мовах програмування |
|
|
|
|
позначається \n і при виведенні тексту |
|
|
|
|
призводить до переведення рядка |
|
|
VT (Vertical Tabulation |
|
Відбувається переміщення курсора |
11 |
|
– вертикальне |
^K |
до наступної групи рядків |
|
|
табулювання) |
|
|
12 |
|
FF (Form Feed – |
^L |
Відбувається переміщення курсора до |
|
переведення сторінки) |
початку наступної сторінки, форми чи екрана |
||
|
|
|
||
|
|
|
|
Відбувається переміщення курсора до початку |
|
|
|
|
(крайньої лівої) позиції поточного рядка. |
|
|
|
|
У багатьох мовах програмування позначається |
13 |
|
CR (Carriage Return – |
^M |
\r і використовується для повертання на |
|
|
переведення каретки) |
|
початок рядка без переведення рядка. У деяких |
|
|
|
|
операційних системах цей символ позначається |
|
|
|
|
<Ctrl>+<M> і ставиться наприкінці кожного |
|
|
|
|
рядка текстового файла перед LF |
|
|
|
|
Указує, що всі наступні кодові комбінації |
14 |
|
SO (Shift Out) |
^N |
мають інтерпретуватися згідно із зовнішнім |
|
|
|
|
набором символів до приходу символу SI |
|
|
|
|
Указує, що наступні кодові комбінації мають |
15 |
|
SI (Shift In) |
^O |
інтерпретуватися згідно зі стандартним |
|
|
|
|
набором символів |
|
|
Таблиці кодів ASCII |
567 |
||
|
|
|
|
Продовження табл. А.2 |
|
Код |
Ім’я |
Ctrl- |
|
Призначення |
|
код |
|
||||
|
|
|
|
||
|
|
|
Використовується для змінювання значення |
||
16 |
DLE (Data Link Escape – |
^P |
наступних символів для додаткового |
||
|
перемикання) |
|
контролю чи для передавання довільної |
||
|
|
|
комбінації бітів |
|
|
17 |
DC1/XON |
^Q |
(Device Controls |
– контроль пристрою) |
|
18 |
DC2 |
^R |
|||
символи для керування допоміжними |
|||||
19 |
DC3/XOFF |
^S |
|||
пристроями (спеціальними функціями) |
|||||
20 |
DC4 |
^T |
|||
|
|
||||
|
NAK (Negative |
|
Приймальний пристрій передає цей символ |
||
21 |
Acknowledgement – |
^U |
відправнику у разі відмови прийому даних |
||
|
непотвердження) |
|
|
|
|
|
|
|
Використовується у синхронізованих системах |
||
|
SYN |
|
передавання. У моменти відсутності |
||
22 |
(Synchronous/Idle – си- |
^V |
передавання даних система безперервно |
||
|
нхронізація) |
|
надсилає символи SYN для забезпечення |
||
|
|
|
синхронізації |
|
|
|
ETB (End of |
|
Указує на кінець блока даних для комуніка- |
||
23 |
Transmission Block – |
^W |
ційних цілей. Використовується для розбиття |
||
|
кінець блока передачі) |
|
на окремі блоки великих обсягів даних |
||
|
CAN (Cancel – |
|
Зазначає, що даними, які передували цьому |
||
24 |
^X |
символові у повідомленні чи блоці, слід |
|||
відміна) |
|||||
|
|
знехтувати (зазвичай у разі виявлення помилки) |
|||
|
|
|
|||
25 |
EM (End of Medium – |
^Y |
Указує на фізичний кінець носія інформації |
||
кінець носія) |
|||||
|
|
|
|
||
|
|
|
Використовується для заміни помилкового чи |
||
|
SUB (Substitute – |
|
неприпустимого символу. <CTRL>+<Z> |
||
26 |
^Z |
використовується як кінець файла при |
|||
замінник) |
|||||
|
|
введенні даних з клавіатури у системах DOS |
|||
|
|
|
|||
|
|
|
та Windows |
|
|
|
ESC (Escape – |
|
Використовується для розширення коду, |
||
27 |
^[ |
зазначаючи те, що наступний символ має |
|||
розширення) |
|||||
|
|
альтернативне значення |
|||
|
|
|
|||
28 |
FS (File Separator – ро- |
^\ |
|
|
|
зділювач файлів) |
|
|
|||
|
|
|
|
||
29 |
GS (Group Separator – |
^] |
Набір керувальних символів, що |
||
розділювач груп) |
|||||
|
|
використовувались у минулому |
|||
|
RS (Record Separtator – |
|
|||
30 |
^^ |
як розділювачі меж порцій інформації |
|||
розділювач записів) |
|||||
|
|
|
|
||
31 |
US (Unit Separator – |
^_ |
|
|
|
розділювач юнітів) |
|
|
|||
|
|
|
|

568 |
|
|
Додаток А |
|
|
|
|
|
Закінчення табл. А.2 |
Код |
|
Ім’я |
Ctrl- |
Призначення |
|
код |
|||
|
|
|
|
|
32 |
|
(sp) (Space – |
|
Недрукований символ для розділювання слів чи пере- |
|
пробіл) |
|
міщування курсора на екрані вперед на одну позицію |
|
|
|
|
||
127 |
|
DEL (Delete – |
^? |
Використовується для вилучання (стирання) символу з |
|
вилучання) |
поточної позиції курсора |
Таблиця А.3
Кодування другої половини ASCII
Кодування ср866
Кодування cp1251 (Windows-1251)