Вкладений арифметичний цикл
Під вкладеним арифметичним циклом розуміють таку алгоритмічну структуру, при якій в тіло одного циклу з параметром включений інший цикл зі своїм параметром.
Іншими словами складова інструкція:
FOR I: =.
DO FOR J: =.
DO.
є ознакою вкладеного арифметичного циклу.
Приклад 20. Обчислити
Для вирішення цього завдання необхідна додаткова змінна, як іноді кажуть, робоча осередок R для накопичення в процесі обчислення S вкладеної суми:
PROGRAM PR20;
VAR
R, S: REAL;
К, P: INTEGER;
BEGIN
S: = 0;
FOR K: = 1 TO 10
DO BEGIN
R: = 0;
FOR P: = 1 T0 15
DO R: = R + SQR (K - P);
S: = S + K * K * K * R
END;
WRITELN ( 'S =', S: 10: 8)
END.
Кількість рівнів вкладення арифметичних циклів може бути більше трьох десятків. У наступному прикладі використовується алгоритмічна конструкція, що має шість рівнів вкладення арифметичних циклів.
Приклад 21. Використовуючи вкладений цикл, визначити число щасливих квитків S, номери яких змінюються від 000001 до 999999.
В основі алгоритму вирішення цього завдання лежить принцип десяткового лічильника, що має шість розрядів. Роль розрядів грають індекси в наступному порядку I, J, K, L, М, N. Щасливим називається такий номер, у якого три лівих розряду в сумі дорівнюють сумі трьох правих розрядів, тобто I + J + K = L + M + N .
PROGRAM PR21;
VAR
S: REAL;
I, N, J, K, L, M: INTEGER;
BEGIN
S: = - l;
FOR I: = 0 TO 9
DO FOR J: = 0 TO 9
DO FOR K: = 0 TO 9
DO FOR L: = 0 TO 9
DO FOR M: = 0 TO 9
DO FOR N: = 0 TO 9
DO
IF I + J + K = L + M + N
THEN S: = S + 1;
WRITELN ( 'ЧИСЛО щасливих квитків =', S: 6: 0)
END.
У зв'язку з тим, що номер 000000 в котушці квитків відсутня, то цей номер потрібно відняти від знайденого числа. Це можна зробити різними способами. У запропонованому алгоритмі це реалізовано так S: = -1. Це рішення логічно. При початковому стані лічильника: I = 0, J = 0, К = 0, L = 0, М = 0, N = 0, умова I + J + K = L + М + N приймає значення TRUE, і S стає рівним нулю S = -1 + 1 = 0. Таким чином, всі змінні прийняли початкове значення для подальших розрахунків. Ви можете купити ноутбук для ігор з оптимальною і доступною ціною. Ігрові ноутбуки можна купити недорого від кращих світових виробників комп'ютерної техніки.
Основною перевагою вкладеного циклу є можливість в виразах (в заголовку циклу або його тілі) використовувати параметри зовнішніх циклів. Наприклад, в описаному вище прикладі, в тілі циклу з параметром N використовуються також поточні значення параметрів I, J, K, L, М зовнішніх циклів по відношенню до цього циклу. До параметрів внутрішніх процедур з зовнішнього циклу не повинно бути звернень. Транслятор з Паскаля такі звернення не перевіряє, але для зовнішніх циклів значення параметрів внутрішніх циклів не визначено. Допускається вихід з тіла циклу FOR. DO. будь-якого рівня вкладення на будь-який попередній рівень до повного завершення циклу за допомогою оператора GOTO, але не рекомендується це робити. При виході з циклу (дострокове або нормальному) значення параметра циклу стає невизначеним. Можна безпосередньо з циклу завершити роботу програми. Для цієї мети використовують оператор HALT [(Код)], де код - це необов'язковий параметр, що представляє собою ціле число типу WORD, яке є кодом повернення вашого ЕХЕ модуля.