ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 15.09.2024
Просмотров: 30
Скачиваний: 0
|
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
|
D |
|
|
|
|||
|
|
|
Y |
P |
|
|
|
|
or |
e |
|
|
B |
Y |
|
|
|
|
|
|
|
m |
|
B |
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
||||
|
|
|
|
|
|
|
|
0 |
|||
A |
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
|
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
|
A BBYY |
c |
|
|||
|
|
|
|
|
|
|
|
2.12 Компоновка
AB
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
D |
|
|
|
|||
|
|
Y |
P |
|
|
|
|
or |
e |
|
B |
Y |
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
|||
|
|
|
|
|
|
|
|
0 |
||
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
||||
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
A B BYY |
c |
|
|||
|
|
|
|
|
|
|
Якщо в програмі немає помилок, то можна виконати компоновку. Для цього треба в меню Compile вибрати команду Make або Build. Різниця між командами Make і Build
полягає в наступному. Команда Make забезпечує компоновку файлів проекту, а команда Build — примусову перекомпіляцію, а потім — компоновку.
На етапі компоновки також можуть виникнути помилки. Найчастіше причина помилок під час компоновки полягає в недоступності файлів бібліотек або інших
модулів, що раніше відкомпілювалися. Усуваються ці помилки шляхом налаштування середовища розробки і включенням в проект бракуючих модулів. У простих проектах помилки часу компіляції, як правило, не виникають.
2.13 Запуск програми
Пробний запуск програми можна виконати безпосередньо з середовищ розробки, не завершуючи роботу з C++ Builder. Для цього потрібно в меню Run вибрати команду Run або клацнути на командній кнопці Run (мал. 2.33).
Мал. 2.33. Запуск програми з середовища розробки
2.14 Помилки часу виконання
Під час роботи додатки можуть виникати помилки, які називаються помилками
часу виконання (run time errors) або виключеннями (exceptions). В більшості випадків
причинами виключень є невірні початкові дані.
Наприклад, якщо під час роботи програми обчислення сили струму в полі Напругу ввести ю.5, тобто розділити цілу і дробову частину крапкою, то в результаті
клацання на кнопці Обчислити на екрані з'явиться вікно з повідомленням про помилку
(мал. 2.34).
33
AB
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
D |
|
|
|
|||
|
|
Y |
P |
|
|
|
|
or |
e |
|
B |
Y |
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
|||
|
|
|
|
|
|
|
|
0 |
||
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
||||
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
A BBYY |
c |
|
|||
|
|
|
|
|
|
|
AB
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
D |
|
|
|
|||
|
|
Y |
P |
|
|
|
|
or |
e |
|
B |
Y |
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
|||
|
|
|
|
|
|
|
|
0 |
||
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
||||
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
A B BYY |
c |
|
|||
|
|
|
|
|
|
|
Мал. 2.34. Приклад вікна з повідомленням про помилку часу виконання (програма запущена з Windows)
Причина виникнення помилки в наступному. У тексті програми дробова частина числа від цілої відділяється крапкою. При введенні даних в полі редагування користувач може відокремити дробову частину числа цілою крапкою або комою. Який з
цих двох символів є правильним, залежить від налаштування Windows.
Якщо в налаштуванніWindows вказане, що роздільник цілої і дробової частин числа — кома (для Росії це стандартна установка), а користувач використовував крапку
(ввів в поле Напругу (Edit1) рядок10.5), то при виконанні інструкції
u = StrToFloat(Editl->Text);
виникне виключення, оскільки при вказаному налаштуванніWindows вміст поля редагування і, отже, аргумент функції Strtofloat не є зображенням дробового числа.
Якщо програма запущена з середовища розробки, то при виникненні виключення виконання програми припиняється і на екрані з'являється вікно з повідомленням про
помилку і її тип. Як приклад на мал. 2.35 приведено вікно повідомлення про виникнення
виключення, причина якого полягає в тому, що рядок, введений користувачем в полі редагування, не є дробовим числом.
Мал. |
2.35. Приклад повідомлення про |
виникнення |
виключення(програма |
запущена з C++ Builder) |
|
|
|
Після |
виникнення виключення і клацання |
на кнопці |
ОК у діалоговому вікн |
Debugger Exception Notification (мал. 2.35) виконання програми можна перервати або,
не дивлячись на виниклу помилку, продовжити. Щоб перервати виконання програми,
треба в меню Run вибрати команду Program Reset щоб продовжити — команду Step Over.
Обробку виключень бере на себе код, що автоматично додається у виконувану
програму, який забезпечує, зокрема, і виведення інформаційного повідомлення. Разом з тим C++ Builder дає можливість програмі самій виконати обробку виключення.
34
AB
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
D |
|
|
|
|||
|
|
Y |
P |
|
|
|
|
or |
e |
|
B |
Y |
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
|||
|
|
|
|
|
|
|
|
0 |
||
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
||||
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
A BBYY |
c |
|
|||
|
|
|
|
|
|
|
Інструкція обробки виключення виглядає так:
try
{
// тут інструкції, виконання яких може викликати виключення
}
catch ( Тип &е)
{
// тут інструкції обробки виключення
}
де:
AB
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
D |
|
|
|
|||
|
|
Y |
P |
|
|
|
|
or |
e |
|
B |
Y |
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
|||
|
|
|
|
|
|
|
|
0 |
||
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
||||
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
A B BYY |
c |
|
|||
|
|
|
|
|
|
|
§try — ключове слово, що позначає, що далі слідують інструкції, при виконанні яких можливе виникнення виключень, і що обробку цих виключень бере на себе програма;
§catch — ключове слово, що позначає початок секції обробки виключення.
Інструкції цієї секції будуть виконані, якщо в програмі виникне виключення вказаного типу.
Основною характеристикою виключення є його тип. У таблиці. 2.12 перераховані найбільш часто виникаючі виключення і вказані причини, які можуть привести до їх
виникнення.
Таблиця 2.12. Типові виключення
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Виключення |
|
|
|
Виникає |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||||
|
EConvertError |
— |
|
|
При виконанні перетворення, якщо перетворювана |
|
|
||||||
|
|
величина не може бути приведена до необхідного типу. |
|||||||||||
|
помилка перетворення |
|
|
Найчастіше виникає при перетворенні рядка символів в |
|||||||||
|
|
|
|
|
число |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EDivByZero |
— |
|
|
При |
виконанні |
операції |
цілочисельного |
ділення, |
||||
|
цілочисельне |
ділення |
|
|
на |
||||||||
|
нуль |
|
|
|
якщо дільник дорівнює нулю |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
EZeroDivide |
— |
|
|
При |
виконанні |
операції |
ділення над |
дробовими |
||||
|
ділення на нуль |
|
|
|
операндами, якщо дільник дорівнює нулю |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
При |
виконанні |
файлових |
операцій. Найбільш |
|
|
||
|
EInOutError |
— |
|
частою причиною є відсутність необхідного файлу або, у |
|
|
|||||||
|
помилка введення/виводу |
|
|
разі використання змінного диска, відсутність диска |
в |
||||||||
|
|
|
|
|
накопичувачі |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35
AB
|
|
|
F |
|
|
|
D |
|
|
Y |
P |
B |
Y |
|
|
|
|
||
|
|
|
|
w |
Click |
||
|
|||
|
|
w |
|
|
|
|
w. |
|
|
|
A |
Tran |
sf |
|
|
|
|
|
|
|
|
|
F Tran |
sf |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
D |
|
|
|
|
|||||
|
|
|
or |
e |
|
|
|
Y |
P |
|
|
|
|
or |
e |
||||
|
|
|
|
m |
|
B |
Y |
|
|
|
|
|
|
|
|
m |
|||
|
|
buy |
|
r |
B |
|
|
|
|
|
|
buy |
r |
||||||
|
|
|
2 |
|
|
|
|
|
|
|
2 |
||||||||
|
|
|
0 |
|
|
|
|
|
|
|
|
0 |
|||||||
|
to |
|
|
|
|
. |
A |
|
|
|
|
|
|
|
to |
|
|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
here |
|
|
|
|
|
|
|
|
|
|
|
|
here |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Click |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
m |
У програмі обчислення сили струму виключення можуть виникнути при виконанні |
|
|
|
|
m |
||||||||
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
o |
|
|
|
|
w |
|
|
|
|
|
|
o |
|||
|
|
|
c |
|
перетворення рядків, введених в поля редагування, в числа і при обчисленні величини |
|
|
c |
|
||||||||||
|
|
. |
|
|
|
|
|
|
|
|
w. |
|
|
. |
|
|
|||
BBYY |
|
|
|
|
|
|
|
|
|
|
A B BYY |
|
|
|
струму. Виключення EConvertCrror виникне, якщо користувач неправильно введе числа в поля редагування: наприклад, розділив цілу і дробову частини крапкою. Виключення EZeroDivide виникне, якщо користувач задасть величину опору рівну нулю. У лістингу 2.3 приведена функція обробки події OnСlick на командній кнопці Обчислити. У функцію
включені інструкції обробки виключень.
Лістинг 2.3. Обробка виключень
void __fastcall TForm1::Button1Click(TObject *Sender)
{ |
|
float u; |
// напруга |
float r; |
// опір |
float i; |
// струм |
//отримати дані з полів введення
//можливе виключення — помилка перетворення рядка в число
try
{
u = StrToFloat(Editl->Text);
r = StrToFloat(Edit2->Text);
}
catch (EConvertError &e)
(
ShowMessage("При введенні дробових чисел використову кому.");
return;
}
//обчислити струм
//можливе виключення — ділення на нуль
try
36
AB
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
D |
|
|
|
|||
|
|
Y |
P |
|
|
|
|
or |
e |
|
B |
Y |
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
|||
|
|
|
|
|
|
|
|
0 |
||
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
||||
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
A BBYY |
c |
|
|||
|
|
|
|
|
|
|
{
i = u/r;
}
catch (EZeroDivide &e)
{
AB
|
|
|
|
|
F Tran |
sf |
|
|||
|
|
|
|
D |
|
|
|
|||
|
|
Y |
P |
|
|
|
|
or |
e |
|
B |
Y |
|
|
|
|
|
|
|
m |
|
|
|
|
|
|
|
buy |
r |
|||
|
|
|
|
|
|
|
2 |
|||
|
|
|
|
|
|
|
|
0 |
||
|
|
|
|
|
|
|
to |
|
|
. |
|
|
|
|
|
|
here |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
||
w |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
||||
|
|
w |
w. |
|
|
|
|
o |
||
|
|
|
|
|
|
|
. |
|
||
|
|
|
|
|
A B BYY |
c |
|
|||
|
|
|
|
|
|
|
ShowMessage("Величина опору не має дорівнювати нулю"); Edit2->SetFocus(); // курсор а поле Опір
return; }
// вивести результат в полі мітки
Label4->Caption = "Струм : " +
FloatToStrf(i,ffgeneral,7,3);
У приведеній функції для виведення повідомлень у разі виникнення виключень
використана функція ShowMessage, яка виводить на екран вікно з текстом і командною
кнопкою .ОК Інструкція виклику функціїShowMessage виглядає так: ShowMessage(Повідомлення);
Де повідомлення — строкова константа (текст, який треба вивести). На мал. 2.36 приведений вид вікна повідомлення, отриманого в результаті виконання інструкції:
ShowMessage("Величина опору не має дорівнювати нулю.");
Мал. 2.36. Повідомлення, виведене функцією ShowMessage
Слід звернути увагу на те, що в заголовку вікна повідомлення, що виводиться функцією ShowMessage указується назва додатку. Назва додатку задається на вкладці Application вікна Project Options. Якщо назва додатку не задана, то в заголовку буде ім'я виконуваного файлу.
Для виведення повідомлень можна використовувати функціюMessagedig.
Функція Messagedig дозволяє помістити у вікно з повідомленням один із стандартних
значків, наприклад "Увага", задати кількість і тип командних кнопок і визначити, яку з
37