Тема 12. Алгоритми з повтореннями для опрацювання величин.
Цикл із передумовою
Повторення — базова алгоритмічна структура, призначена для організації багаторазового виконання набору команд.
Вираз «багаторазове виконання» означає, що команди будуть виконуватися скінченну кількість разів.
У мовах програмування для опису структури повторення використовують оператори циклу.
Будь-який оператор циклу складається з двох частин:
- Заголовка
- Тіла
- У заголовку циклу записуються умови, за яких виконання циклу триватиме або завершиться
- В тілі циклу містяться команди, виконання яких потрібно повторювати
У програмі цикл може бути реалізований за допомогою конструкцій for, while і repeat.
Цикл із передумовою
У мові програмування Lazarus цикл із передумовою описується оператором while...
|
Скорочена форма оператора while працює таким чином.
- Визначається значення логічного виразу.
- Якщо це значення True, то виконується команда, записана після службового слова do.
- Якщо значення логічного виразу False, то цикл завершується й управління передається команді, записаній у програмному коді після тіла циклу.
- У тілі циклу обов'язково використовують команду, яка змінюватиме значення величини, що використовується в логічному виразі.
Повна форма оператора while мовою програмування Lazarus передбачає, що після службового слова do будуть виконуватись команди, які містяться між операторними дужками:
begin
end
Компонент ListBox (Список). Для виведення отримуваних у циклі значень змінних у кілька рядків зручно скористатися компонентом ListBox (Список).
ListBox1.Items.Add(‘Новий_рядок'); Наприклад, додати до списку ListBox значення виразу 2 * х: ListBox1.ltems.Add (IntToStr (2 * х));
ListBox1.Clear;
|
Багаторядкове текстове поле. Компонент Memo є вікном редагування багаторядкового тексту.
Властивості компонента Memo Методи компонента Memo
|
Розробка проектів з використанням циклу із передумовою
Вправа 1. Поки змінна a менше або дорівнює 100, збільшувати значення a на 15 одиниць, значення змінної k для рахунку кількості повторень. Виводити значення змінних як в елемент керування Label так і в елемент керування ListBox (для порівняння особливості виводу інформації за допомогою цих елементів керування)
У процесі вирішення деяких завдань виникає потреба затримки виконання операцій. Для цих цілей нам підійде метод ProcessMessages та функція Sleep (n), де n це число мілісекунд - тривалість паузи.
Для призупинення роботи програми на 500 мілісекунд ми і використаемо процедуру Sleep.
Або для виведення значень змінних a, k застосуємо елемент керування ListBox
Алгоритм проекту
|
Варіант програмного коду var a, k: Integer; // значення змінної k для рахунку кількості повторень |
Варіант інтерфейсу проекта
|
PS !!!
Виконуючи операції які вимагають тривалих часових затрат, програма не відповідає на дії користувача і не реагує на події додатків, візуальні зміни на формі не відображаються, програма зависає на деякий час. Подібні ситуації можливі в роботі циклів, коли відбувається обробка великого числа даних.
Для того щоб виправити становище, що склалося необхідно використовувати метод ProcessMessages. Даний метод зобов'язує додаток обробити повідомлення які надійшли і які очікують своєї черги.
Вправа 2. Розташуємо на формі компоненти Label і кнопки: "пуск-пауза", "пуск" та "вихід"
За допомогою оператора циклу змусимо перебирати числа від 1 до 1000. І якщо не буде рядка Application.ProcessMessages; - то програма на час зависне поки не видасть кінцевий результат. Тому обробник натискання кнопки (пуск-пауза)повинен бути таким:
Обробник натискання кнопки (пуск-пауза) procedure TForm1.Button1Click(Sender: TObject); |
Для порівнянна обробник натискання кнопки (пуск) : procedure TForm1.Button2Click(Sender: TObject); |
Інтерфейс проекту
або
Цикл While..do. Вправи
Цикл з лічильником
Цикл з післяумовою
Практична робота