Управління циклами в Delphi
У цьому прикладі запускається цикл, в якому змінна i буде змінюватися від -3 до 3. На кожному кроці ділиться 10 на значення i і зберігається результат у змінній r.
При розподілі використовується функція round, яка округлює передане їй значення. В якості вихідного значення ми передаємо їй результат ділення 10 на змінну i, тобто round (io / i). Таким чином, в змінну г буде записаний округлений до цілого результат ділення.
Наступним дією є додавання результату в ListBox1, з одночасним перетворенням змінної г в рядок.
Давайте подивимося, що станеться, коли змінна i буде дорівнює 0. У цьому випадку число 10 буде ділитися на 0, а значить, відбудеться помилка, тому що на 0 ділити не можна. Як же тоді вийти з цієї ситуації? Можна на кожному етапі циклу перевіряти значення i, і якщо воно дорівнює 0, то не виконувати ніяких дій. Два можливих рішення наведені в лістингах:
procedure TForml.CalculateButt # 111; nclick (Sender: TObj ect); var
begin for i: = - 3 to 3 do
begin 11 Це початок для оператора for if i<>0 then
begin // Це початок для оператора if
ListBoxi.Items.Add (40 / '+ IntToStr (i) +' = '+ IntToStr (r)); end; // Цей end для оператора if end; // Цей end для оператора for end;
У цьому прикладі на кожному етапі перевіряється значення i, і якщо воно не дорівнює 0, то тільки в цьому випадку виробляються обчислення.
Це дуже просте рішення для маленьких і простих програм. Але якщо ваш цикл великий і виконує багато дій, то таке рішення буде як мінімум незручно і може загубитися "читабельність" коду. У гіршому випадку, взагалі може нічого не вийти. Ось тут на допомогу приходить оператор continue.
procedure TFormi.CalculateButt # 111; nclick (Sender: TObj ect); var
i, r: Integer; begin for i: = - 3 to 3 do
begin // Це початок для оператора for if 1 = 0 then
begin /./ Це початок для оператора if
ListBoxi.Items.Add ( 'На нуль ділити не можна');
Continue; end; // Цей end для оператора if
ListBoxi.Items.Add ('10 / '+ IntToStr (i) +' = 'VlntToStr (r)); end; // Цей end для оператора for end;
У цьому прикладі ми також перевіряємо на кожному етапі значення змінної i. Якщо воно дорівнює нулю, то виводиться повідомлення в ListBox1 про те, що на нуль ділити не можна, і виконується оператор continue. Як тільки програма зустрічає такий оператор, вона відразу перериває подальше виконання циклу і переходить на наступний крок. Це те ж саме, що виконати команду "Зупинити подальше виконання програми,
збільшити значення змінної i і почати виконання циклу з наступним значенням ".
Як тільки програма зустрічає оператор continue, вона перескакує на кінець циклу, де збільшується значення лічильника (в даному випадку змінна i) і продовжується виконання вже з наступного кроку.
На рис. показана форма з результатом роботи нашого прикладу.
Використання continue разом з циклом for досить зручно і безпечно, на відміну ВІД РЕЖИМІВ while або repeat. until. Подивимося на наступний приклад:
while i<3 do begin if i=0 then continue;
Коли виконуєте оператор continue в циклі while. переконайтеся що лічильник змінюється. В даному випадку потрібно було зробити наступну перевірку:
if i = 0 then begin i: = i + l; continue; end;
У цьому випадку перед перериванням кроку циклу значення змінної i збільшується на одиницю, а значить, на наступному кроці вона вже не буде дорівнює нулю.
Тепер давайте розберемося з оператором break. Як тільки програма зустрічає такий оператор, цикл переривається і виконання передається наступному оператору після оператора циклу. Давайте візьмемо наш попередній приклад і замінимо У ньому continue на break:
procedure TForml.CalculateButt # 111; nclick (Sender: TObj ect); var
i, r: Integer; begin for i: = - 3 to 3 do
begin // Це початок для оператора for if 1 = 0 then
begin // Це початок для оператора if ListBoxl.Items.Add ( 'Ha нуль ділити не можна'); break;
end; // Цей end для оператора if r: = round (10 / i);
ListBoxl.Iterns.Add ('10 / '+ IntToStr (i) +' = '+ IntToStr (r)); end; // Цей end для оператора for ListBox1.Items.Add ( 'Розрахунок закінчено'); end;
В цьому випадку якщо значення i дорівнюватиме нулю, то виводиться повідомлення про те, що на нуль ділити не можна і цикл переривається. Після цього управління передається наступному оператору після циклу.
Як бачите, після зустрічі з нулем в циклі більше нічого не виконується і оператор break просто завершує його роботу.