Оператор переходу goto
3.3 Оператор переходаGoto. Цикли.
При описі розгалужуються процесів зазвичай використовують поняття умовного і безумовного переходу. Якщо в програмі потрібно порушити порядок виконання операторів без попередніх перевірок будь-яких умов, перехід називається безумовним.
Для реалізації такого переходу в мові Турбо-Паскаль служить оператор безумовного переходу
Тут n - мітка тієї рядки в програмі, яка повинна виконуватися після переходу.
Більшість мов програмування, в т. Ч. Паскаль влаштовані так, що оператори виконуються в тому порядку, в якому вони записані. Зустрічаючи оператор Goto, комп'ютер перериває послідовне виконання програми і переходить до оператора, наступного за вказаною міткою. Як приклад створимо програму, яка б нескінченно друкувала «Це наш перший цикл». Ми хочемо змусити комп'ютер багато разів виконувати одне і теж дія - інакше кажучи, організувати цикл.
Цикл - це спосіб змусити програму багато разів виконувати один і той же дію. Група операторів, що виконуються багаторазово, називається тілом циклу.
Зазвичай для виходу з циклу використовується умовний операторIf. Напишемо програму, що друкує числа від 1000 до 600.
Тепер розглянемо програми, звані лічильниками, оскільки в них підраховується кількість елементів, що задовольняють певній умові.
У комп'ютер вводяться пари цілих чисел. Підрахувати, скільки серед них пар, що дають в сумі число 13. Підрахунок завершити після введення пари нулів.
При написанні подібних програм змінні лічильники обов'язково повинні обнулятиметься (початкове значення дорівнює нулю).
У комп'ютер вводиться N чисел. Порахувати і надрукувати кількість позитивних, негативних чисел і чисел, великих 10.
Тут ми організуємо одночасно три лічильника: PL, MI - для підрахунку позитивних і негативних чисел, С - для чисел, великих 10>
VAR I, X, PL, MI, C, N: INTEGER;
До теперішнього моменту ми могли виконувати розрахунок за програмою тільки один раз. Для повторного розрахунку нам доводилося запускати програму заново. Тепер розглянемо можливість багаторазового виконання розрахунку, використовуючи оператор Repeat. Як приклад розглянемо наступну програму.
В деякій країні жили добрі слоники, кожен з них мав власний будиночок. Несподівано на них напали злі мамонти. Слоники вирішили захистити свої будиночки високими парканами: кожен будиночок оточений парканом, кожна група будиночків оточена парканом, причому паркани не повинні перетинатися. Всі будиночки оточені спільним парканом (див. Малюнок). Знаючи кількість слоників знайти мінімальне число побудованих зборів. Перевірку виконати для числа слоників 100, 5000 і 1000000. Результат представити у вигляді:
WriteLn ( 'Number of slonik-?');
C - кількість слоників;
S - кількість парканів;
Ch - символьна змінна для завершення роботи програми.
Між числом слоників і числом зборів існує співвідношення:
При натисканні клавіші 'q' програма завершує роботу, при натисканні будь-якої іншої клавіші пропонується виконати ще один розрахунок.
Тепер навчимося працювати з знакозмінними рядами, тобто рядами, в яких позитивні і негативні елементи чергуються.
Написати програму для знаходження суми n членів послідовності:
if m mod 2<>0 then
(Оператор з попередньою умовою).
Форма запису оператора:
While<логическое условие>do
Оператори циклічної частини;
Вся конструкція перекладається так: «Поки умова істинна, виконуй оператори». Працює оператор наступним чином. Спочатку програма перевіряє істинність умови, що стоїть після While. Якщо умова істинно, то виконуються оператори, що стоять після Do. Потім знову перевіряється істинність умови і в разі істинності знову виконуються оператори і т. Д. Якщо умова помилкова, то оператор While припиняє свою роботу і програма переходить до виконання наступного оператора. Розглянемо ряд прикладів.
Вивести на екран послідовність цілих чисел від M до N.
Вивести на екран квадрати натуральних чисел від введеного числа до 1.
VAR I, M, N: INTEGER;
WRITELN ( 'ENTER M AND N');
While N> 0 do
Знайти суму чисел від 1 до N для довільного N.
VAR I, N, SUM: INTEGER;
VAR N: INTEGER; S: REAL;
Зведення цілого числа
в цілу ступінь.
VAR A, N, S, I: INTEGER;
WRITELN ( 'ENTER A AND N');
Зведення довільного числа
в цілу ступінь.
WRITELN ( 'ENTER A AND N');
Написати програму для розрахунку суми накопичень за строковим вкладом з урахуванням складних відсотків при нарахуванні. Забезпечити можливість багаторазового запуску програми.
VAR AMOUNT, INTEREST: REAL;
Для вирішення багатьох завдань цикл потрібно виконувати певне, заздалегідь відоме число раз. У цьому випадку зручно використовувати оператор FOR ... DO. У Турбо-Паскалі є два оператора для організації регулярного циклу: прямий і зворотний. Прямий перерахунок йде від відомого меншого числа до відомого більшого, на кожному кроці додається одиниця (наприклад, від 20 до 30: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30).
Оператор прямого перерахунку:
Тут i - параметр циклу (лічильник), ця змінна такого типу, значення якого відомо точно, наприклад, целочисленная. При прямому перерахунку завжди змінюється від меншого значення до більшого;
n l і n 2 - вираження того ж типу, що й параметр циклу, значення яких відповідно рівні початкового і кінцевого значення лічильника.
Після заголовка (for i: = nl to n2 do) оператора повинен стояти один оператор, який повторюється циклічно (тіло циклу). Тіло циклу може не містити операторів (порожній цикл), а в загальному випадку містить складовою оператор (один і більше операторів). При i = n 1 цикл виконується перший раз (якщо значення n 1 не перевищує n 2). Потім береться таке значення змінної i (для цілочисельний змінної це i +1) і здійснюється перевірка, чи не перевищила отримане значення величину n 2. Якщо i +1 <= n 2, то оператор выполняется, если нет, то происходит выход из цикла и выполнение следующего по порядку оператора программы.
Оператор зворотного перерахунку:
For i: = n2 downto n1 do (n2> n1)
Розглянемо ряд прикладів на використання оператора FOR.
Надрукувати 20 разів слово computer.