Переривання та продовження циклів

продовження
Основи програмування Кожен професіонал колись був чайником. Напевно, вам знайомий стан, коли "не знаєш як почати думати, щоб до такого додуматися". Напевно, ви стикалися з ситуацією, коли ви просто не знаєте, з чого почати. Ця книга орієнтована саме на таких людей, хто хотів би стати програмістом, але зовсім не знає, як розпочати цей шлях. Детальніше.

У деяких випадках необхідно вийти з циклу раніше, ніж виконуються всі його ітерації.

Бувають інші випадки, коли не потрібно виконувати все тіло циклу.

Для таких випадків у Паскалі є дві функції:

Break - перериває цикл

Continue - починає нову ітерацію циклу

Отже, припустимо, що ми виводимо в циклі 10 рядків, але чомусь не хочемо чекати, коли будуть виведені всі рядки і хочемо, щоб цикл перервався на 5-й ітерації. Ось приклад:

У цьому прикладі ми перевіряємо значення індексної змінної. Як воно стає рівним 5, ми перериваємо цикл з допомогою функціїBreak. Таким чином, рядок “Привіт, СВІТ” буде виведено на екран 5 разів, а рядок “Цей рядок не буде виведено 5-й раз” буде виведено лише 4 рази, оскільки після словаBreak код циклу вже не виконується та цикл завершується.

Ще один приклад:

Навіщо взагалі потрібні команди переривання та продовження циклів?

Насправді вони використовуються досить часто. Прикладів можна навести багато, але багато прикладів я наводити не буду, тому що, розробляючи свої програми, ви самі незабаром переконаєтеся в корисності цих операторів. Ось лише один приклад.

Припустимо, у вас є якась таблиця із двох стовпців. Вам потрібно значення першого стовпця поділити значення другого стовпця. Робити це зручнішеу циклі. І виглядатиме це приблизно так:

Як ви розумієте, це псевдокод, а не мова Паскаль. Але я так був змушений зробити, тому що нам поки що недостатньо знань, щоб розглянути реальний приклад. Ми ще не вивчали масиви та інші принади.

Тут спочатку ми отримуємо значення другого стовпця. Але відразу ділити значення першого стовпця на значення другого стовпця ми можемо, оскільки у другому стовпці може бути нуль. Тому ми спочатку перевіряємо значення другого шпальти. Якщо вона дорівнює нулю, то ми не виконуємо поділ, а починаємо нову ітерацію циклу, тобто переходимо до наступного рядка таблиці.

Ще один важливий момент. Можливо, ви зараз цього не зрозумієте, але я про це розповім. Отже, чому я написав саме такий код:

y := Стовпець2 [i]; if y = 0 then Continue; x:= Стовпець1[i];

а, наприклад, не такий

x: = Стовпець1 [i]; y := Стовпець2 [i]; if y = 0 then Continue;

Адже другий варіант здається більш логічним та зрозумілішим. Так. Але це лише на перший погляд.

Як працюватиме програма у другому варіанті?

Ми отримуємо значення першого шпальти, потім отримуємо значення другого шпальти. Потім перевіряємо значення другого шпальти.

Але ж воно може виявитися рівним нулю, і тоді значення першого стовпця нам не потрібне! А ми його вже отримали та витратили на цей дорогоцінний процесорний час!

Хоча обидва варіанти працюватимуть правильно, але варіант

y := Стовпець2 [i]; if y = 0 then Continue; x:= Стовпець1[i];

буде грамотнішим з погляду економії процесорного часу, тому що в цьому варіанті ми НЕ виконуємо код

якщо значення другого стовпця дорівнює нулю. Тобто ми заощаджуємо процесорний час і наша програма працюватиме швидше.

Така переробка вихідного тексту програми називаєтьсяоптимізацією коду. Існує кілька видів оптимізації, але це окрема та велика тема. Поки що просто знайте, що це існує. Тобто ваша програма в ідеалі має працювати не тільки правильно, а й оптимально з точки зору, наприклад, швидкості.

Інформації до роздумів я надавав вам у тексті статті. Тому домашнього завдання не буде. Просто розберіться докладно з тим, що зараз прочитали.