Вкладені цикли


Вкладені цикли

Часто буває так, що при повтореннях змінюється не одна величина, а дві (чи навіть більше). І при кожному значенні однієї величини інша величина «пробігає» усі свої значення.

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

Вкладення циклів використовується зокрема при розв'язуванні таких задач:
·         задачі на перебір варіантів;
·         табулювання функцій;
·         обробка двовимірних масивів.

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

Правило вкладення циклів: внутрішній цикл цілком укладається в тіло зовнішнього циклу.

Приклад № 1. Обчислити значення змінної Y=2*K+N при всіх значеннях змінних N=1, 2, 3 і K=2, 4, 6, 8.

Якщо перебирати всі значення N і K, ми повинні отримати 12 значень змінної Y.

Скласти програму можна в такий спосіб: для кожного значення N перебрати всі значення К від 2 до 8, тобто N використати як параметр зовнішнього циклу, К - як параметр внутрішнього циклу.

Текст програми:

Program priklad_1;
var n, k, y:integer;
begin
for n:=1 to 3 do
begin
k:=2;
while k<=8 do
begin
y:=2*k+n;
writeln(n:3, k:3,y:3);
k:=k+2;
end;
end;
end.

Параметр N змінюється з кроком 1, тому зовнішній цикл організований з використанням оператора For; параметр К змінюється з кроком 2, тому внутрішній цикл є циклом While.

Приклад № 2. Старовинна задача. Скільки можна купити биків, корів та телят, якщо вартість одного бика - 10 руб, однієї корови - 5 руб, а за одного теля платять 0,5 рубля. І якщо на 100 рублів потрібно купити 100 голів скоту.

Розв'язування:

Позначимо через b кількість биків; k - кількість корів; t - кількість телят. Після цього можна записати два рівняння:

10b + 5k + 0.5t = 100 і b + k + t = 100

На 100 рублів можна купити:
не більше 10 биків, тобто 0<=b<=10;
не більше 20 корів, тобто 0<=k<=20;
не більше 200 телят, тобто 0<=t<=200.

Отже отримуємо:

Program Priklad_2;
var b, k, t:integer;
begin
for b:=0 to 10 do
for k:=0 to 20 do
for t:=0 to 200 do
if (10b + 5k + 0.5t = 100) and (b + k + t = 100) then
writeln('биків - ', b, ' корів - ', k,' телят - ',t);
end.

Комментариев нет:

Отправить комментарий