§ 42. Складання циклічних алгоритмів опрацювання величин
Цикл називають вкладеним, якщо він міститься в тілі іншого циклу.
такий цикл також називають внутрішнім, а цикл, у якому він міститься, — зовнішнім.
Вкладені цикли організовані таким чином: внутрішній цикл повністю вміщується в тілі зовнішнього циклу (рис. 42.1).
• А — зовнішній цикл;
• В — внутрішній цикл.
Внутрішній і зовнішній цикли можуть бути циклами з параметром, з передумовою або з післяумовою.
Принцип роботи вкладених циклів такий: при першій ітерації зовнішній цикл викликає внутрішній, який виконується до свого завершення, після чого керування передається в тіло зовнішнього циклу. При другій ітерації зовнішній цикл знову викликає внутрішній. І так доти, поки не завершиться зовнішній цикл.
Надрукувати числа у вигляді таблиці:
Рядок із п’яти цифр можна сформувати за допомогою циклу For: S := ' ';
For i := 1 to 5 do S := S + '5 '; // S — рядок
Щоб повторити виведення даного рядка тричі, вставляємо цей цикл всередину іншого:
For k := 1 to 3 do // тричі виконується цикл із параметром k begin
S := '';
For i := 1 to 5 do S := S + '5 '; // 5 разів виконується цикл із параметром i ListBoxI .Items.Add(S); end;
Параметрами вкладених циклів For повинні бути різні змінні.
Надрукувати таблицю множення (рис. 42.2). var N, K: Integer; begin
For N := 2 to 9 do begin For K := 1 to 9 do begin
ListBox1.Items.Add(IntToStr(N) + ' x ' +
IntToStr(K) + ' = ' + IntToStr(N * K)); end;
ListBox1 .Items.Add('---------------');
end; end;
Знайти всі трицифрові натуральні числа, сума цифр яких дорівнює їхньому добутку, та визначити кількість таких чисел (рис. 42.3).
Для розв’язання задачі можна перебрати всі можливі сполучення цифр, з яких утворюється десятковий запис трицифрового числа, і перевіряти для кожного сполучення умову задачі. var A, B, C, K: Integer; begin K := 0;
For A := 1 to 9 do // перша цифра For B := 0 to 9 do // друга цифра For C := 0 to 9 do // третя цифра If A + B + C = A * B * C Then begin
K := K + 1;
ListBoxI .Items. Add (I ntToStr(100 * A + 10 * B + C)); end;
ListBoxI.Items.Add('K=' + IntToStr (K)); end;
У задачі використано вкладені цикли. Зверніть увагу, що лише тіло внутрішнього циклу з параметром C взято в операторні дужки begin..end, оскільки складається з двох операторів. Для циклів вищих рівнів у цьому немає потреби, оскільки в кожному з них тіло циклу містить лише один оператор: цикл із параметром C є тілом циклу з параметром B, а той, у свою чергу, є тілом циклу з параметром A.
Питання для самоперевірки
1. Які види циклів ви знаєте? У яких випадках застосовують кожний із цих циклів?
2. У чому полягає правило вкладення циклів?
3. Проаналізуйте циклічну конструкцію:
For i := 1 to 2 do
For j := 1 to 3 do For k := 1 to 3 do
ListBox1.Items.Add(IntToStr(i) + IntToStr(j) + IntToStr(k));
а) Назвіть тіло кожного циклу.
б) Скільки разів буде виконаний кожний цикл?
в) Який результат буде виведений після виконання програми?
4. Який рядок S буде сформовано в результаті виконання фрагмента програми?
S := ' ';
For i := 0 to 1 do For j := 0 to 1 do
S := S + IntToStr(i) + IntToStr(j);
5. Складіть програму для обчислення значення виразу 2k + n при всіх значеннях змінних n = 1, 2, 3 і k = 2, 4, 6, 8.
6. Складіть програму для обчислення F = x + x2 + x3 + ... + xn для х = 0,1; 0,2; ...; 1,0 і введеного з клавіатури значення n.
Вправа 42
Скласти програму для розв’язання старовинної задачі.
Плата за одного бика — 20 карбованців, за корову — 10 карбованців, за теля — 1 карбованець. скільки можна купити биків, корів і телят, якщо на 200 карбованців треба купити 100 голів худоби?
1) Створіть новий проект. Змініть заголовок форми на «Старовинна задача».
2) Розмістіть на формі компонент ListBox згідно з рисунком.
3) Додайте на форму кнопку Button1. Змініть заголовок доданої кнопки на «Виконати».
4) Розв’язання задачі.
Позначимо літерою b кількість биків; k — кількість корів; t — кількість телят. Загальна кількість голів дорівнює 100: b + k + t = 100.
За биків заплатили 20b карбованців, за корів — 10k карбованців, за телят — t карбованців, отже, 20b + 10k + t = 200. На 200 карбованців можна купити: не більше 10 биків, тобто 0 <= b <= 10; не більше 20 корів, тобто 0 <= k <= 20; не більше 200 телят, тобто 0 <= t <= 200. Таким чином, необхідно перебрати всі можливі значення змінних b, k, t і вивести в поле ListBox той набір значень, для яких виконується умова (20 * b + 10 * k + t = 200) and (b + k + t = 100).
5) Створіть процедуру обробки події onclick для кнопки Старовинна задача. У програмному коді створеної процедури запишіть такі оператори:
6) Запустіь проект на виконання. Перевірте роботу програми. Збережіть проект у папці Вправа 42.
Комп’ютерне тестування
Виконайте тестове завдання 42 з автоматичною перевіркою на сайті interactive.ranok.com.ua.
Практична робота 15
Складання та виконання алгоритмів із повтореннями та розгалуженнями для опрацювання величин
Завдання: скласти програму для обчислення найбільшого спільного дільника (НСД) чисел А і В за алгоритмом Евкліда. Обладнання: ПК із встановленим середовищем програмування Lazarus.
хід роботи
Під час роботи з комп’ютером дотримуйтеся правил безпеки.
І. Розміщення елементів керування на формі
1. Створіть новий проект.
•2. Розробіть інтерфейс програми згідно з рис. 1.
ІІ. Написання процедури обробки подій
3. Створіть процедуру обробки події onclick для кнопки Обчислити NSD, за допомогою якої обчислюється НСД чисел А і B: поки А ^ В, від більшого числа віднімати менше (рис. 2).
4. Додайте на форму текстове поле Edit4. Змініть заголовок кноп
ки на «Обчислити NSD і NSK».
5. Додайте до програмного коду оператори для обчислення зна
чення найменшого спільного кратного (НСК) чисел А і В та виведення цього значення в поле Edit4. Скористайтеся формулою: NSK(A1B) = А * В / NSD(A, В).
ІІІ. Тестування проекту
6. Запустіть проект на виконання. Перевірте роботу програми
для різних наборів чисел. Збережіть проект у папці Практична робота 15. Завершіть роботу за комп’ютером.
Зробіть висновок: як складати та виконувати циклічні алгоритми з розгалуженням усередині циклу для розв’язування задач.
Це матеріал з підручника Інформатика 8 клас Бондаренко
Автор: admin от 7-10-2016, 22:45, Переглядів: 3460