Вторник, 12.11.2019, 16:12
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

Тема 12. Алгоритми з повтореннями для опрацювання величин. 

Цикл із передумовою

Повторення — базова алгоритмічна структура, призначена для організації багаторазового виконання набору команд.

Вираз «багаторазове виконання» означає, що команди будуть виконуватися скінченну кількість разів.
У мовах програмування для опису структури повторення використовують оператори циклу.

Будь-який оператор циклу складається з двох частин:

  1. Заголовка 
  2. Тіла 
  • У заголовку циклу записуються умови, за яких виконання циклу триватиме або завершиться 
  • В тілі циклу містяться команди, виконання яких потрібно повторювати

 У програмі цикл може бути реалізований за допомогою конструкцій for, while і repeat.

Цикл із передумовою

У мові програмування Lazarus цикл із передумовою описується оператором while... 


Скорочена форма оператора while працює таким чином.

  • Визначається значення логічного виразу.
  • Якщо це значення True, то виконується команда, записана після службового слова do.
  • Якщо значення логічного виразу False, то цикл завершується й управління передається команді, записаній у програмному коді після тіла циклу.
  • У тілі циклу обов'язково використовують команду, яка змінюватиме значення величини, що використовується в логічному виразі.


Повна форма оператора while мовою програмування Lazarus передбачає, що після службового слова do будуть виконуватись команди, які містяться між операторними дужками:

 begin 
end 

Вправа 1. Поки змінна a менше або дорівнює  100, збільшувати значення a на 15 одиниць, значення змінної  k для рахунку кількості повторень. Виводити значення змінних як в елемент керування  Label так і в елемент керування ListBox (для порівняння особливості виводу інформації за допомогою цих елементів керування)

У процесі вирішення деяких завдань виникає потреба затримки виконання операцій. Для цих цілей нам підійде метод  ProcessMessages  та функція Sleep (n), де n це число мілісекунд - тривалість паузи.

Для призупинення роботи програми на 500 мілісекунд  ми і використаемо  процедуру Sleep. 

Або для виведення  значень змінних a, k застосуємо елемент керування  ListBox

Алгоритм проекту

Варіант програмного коду

var a, k: Integer; // значення змінної  k для рахунку кількості повторень
begin
  а := 0; k := 0 // початкові значення а, k
  While а <= 100 do // умова продовження циклу
  begin
    a:= a+ 15; k:= k +1;
 
  Label1.Caption := '  k= ' + IntToStr(k)  + '          a  =  ' + IntToStr(a);
ListBox1.Items.Add('  k= ' + IntToStr(k)  + '          a  =  ' + IntToStr(a));
    Application.ProcessMessages; // обробка повідомлень
    Sleep(500);  // зупинка на 0,5 с
  end;
end;

Варіант інтерфейсу проекта

PS !!!

Виконуючи операції які  вимагають тривалих часових затрат, програма не відповідає на дії користувача і не реагує на події додатків, візуальні зміни на формі не відображаються, програма зависає на деякий час. Подібні ситуації можливі в роботі циклів, коли відбувається обробка великого числа даних.
Для того щоб виправити становище, що склалося необхідно використовувати метод ProcessMessages.  Даний метод зобов'язує додаток обробити повідомлення  які надійшли і які очікують своєї черги.

Вправа2. Розташуємо на формі компоненти Label і кнопки: "пуск-пауза", "пуск" та "вихід"
За допомогою оператора циклу змусимо перебирати числа від 1 до 1000. І якщо не буде рядка
Application.ProcessMessages; - то програма на час зависне поки не видасть кінцевий результат. Тому обробник натискання кнопки (пуск-пауза)повинен бути таким:

Обробник натискання кнопки (пуск-пауза)

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  i:= 1;
  While  i<=1000  do
   begin
     Label1.Caption := 'Значение равно ' +IntToStr(i);
     Application.ProcessMessages;
     sleep(10);
     i:= i + 1;
    end;
end;           

Для порівнянна обробник натискання кнопки (пуск) :

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
   i:= 1;
   While  i<=1000  do
   begin
     Label1.Caption := 'Значение равно ' +IntToStr(i);
     sleep(10);
     i:= i + 1;
   end;
end;            

Інтерфейс проекту

 або 

Цикл While..do. Вправи
Цикл з лічильником
Цикл з післяумовою
Практична робота

Форма входа
Поиск
Календарь
«  Ноябрь 2019  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2019
    Конструктор сайтов - uCoz