Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C _Учебник_МОНУ

.pdf
Скачиваний:
206
Добавлен:
12.05.2015
Размер:
11.12 Mб
Скачать

Налагодження програм

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);

}

562

Розділ 15

При запусканні програми на виконання і клацанні на Button1 з‟являється повідомлення

Це пов‟язано з тим, що на першій ітерації циклу за і=0 виконується ділення 1./0. Щоб уникнути цієї помилки, слід змінити початкове значення і (наприклад на і=1) або долучити оператор перевірки:

if(i!=0) x+=1./i;

Питання та завдання для самоконтролю

1)Які типи помилок можуть виникати у програмах на С++ Builder?

2)Що спричинює помилки при компіляції програми?

3)Які помилки є помилками другого рівня?

4)Які помилки можуть виникнути на етапі компонування?

5)Чим синтаксичні помилки відрізняються від логічних?

6)Чи запуститься на виконання програма, у якій знайдено синтаксичну помилку?

7)Чи можна виконати програму, у якій є логічна помилка?

8)Що може статися унаслідок логічної помилки?

9)Чи можна виконати програму, якщо при компіляції було видано попередження?

10)Про що свідчить повідомлення про помилку “Statement missing ;”? Як виправити таку помилку?

11)Про що може свідчити повідомлення про помилку “Compound statement missing }”? Як виправити таку помилку?

12)Унаслідок чого може з‟явитися повідомлення про помилку

Misplaced else”?

13)Яких помилок припущено у такому фрагменті програми? Як їх випра-

вити?

double x, y, z;

double y=sqrt(pow(3,x);

14)Про що може свідчити повідомлення про помилку “log: SING error” при виконуванні програми? Як її уникнути?

15)Яке повідомлення виведено, якщо у програмі із компонента Edit зчитується число з неправильним розділювачем (крапкою замість коми)?

16)Яким чином реагує компілятор, якщо у програмі оголошено змінну, але вона не використовується?

Бібліографічний список

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 с.

564

Бібліографичний список

22Мозговой М. В. Классика программирования: алгоритмы, языки, автоматы, компиляторы. Практический поход / М. В. Мозговой. – СПб. : Наука и техника, 2006. – 320 с.

23Павловская Т. А. С/С++. Программирование на языке высокого уровня : / Т. А. Павловская. – СПб. : Питер, 2002. – 464 с.

24Павловская Т. А. С/С++. Структурное программирование: практикум

:учебник / Т. А. Павловская, Ю.А. Щупак. – СПб. : Питер, 2003. – 240 с.

25Прата Ст. Язык программирования С++. Лекции и упражнения: учебник / Стивен Прата; пер. с англ. – СПб. : ООО ДиаСофтЮП, 2005. – 1104 с.

26С++. Основи програмування. Теорія та практика: підручник / [О. Г. Трофименко, Ю. В. Прокоп, І. Г. Швайко, Л. М. Буката та ін.] ; за ред. О. Г. Трофименко. – Одеса : Фенікс, 2010. – 544 с.

27Страуструп Б. Дизайн и эволюция С++ / Бьерн Страуструп; пер. с англ. – М. : ДМК Пресс; СПб. : Питер, 2006. – 448 с.

28Страуструп Б. Язык программирования С++. Специальное издание / Бьерн Страуструп; пер. с англ. – М. : ООО Бином-Пресс, 2007. – 1104 с.

29Шамис В. А. С++ Builder. Техника визуального программирования / В. А. Шамис. – 3-е изд. – М. : Нолидж, 2001. – 688 с.

30Шилдт Г. С++: базовый курс / Герберт Шилдт. – 3-е изд. – М. : Виль-

ямс, 2009. – 624 с.

31Шилдт Г. Справочник программиста по C/C++ / Герберт Шилдт. –

М. : Вильямс, 2006. – 432 с.

Додаток А

Таблиці кодів 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)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]