Четверг, 18.04.2024, 22:11
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

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


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


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

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

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

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

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

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

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

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

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

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


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

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


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

 begin 
end 

Компонент ListBox (Список).

Для виведення отримуваних у циклі значень змінних у кілька рядків зручно скористатися компонентом ListBox (Список).

  1. Компонент Listbox (вкладка Standard на палітрі компонентів) призначений для зберігання й опрацювання текстових даних.
  2.  Кожен рядок Listbox зберігає рядок даних у форматі String.
  3. Доступ до рядків надає властивість Items цього компонента.
  4. Для додавання рядка до списку програмним шляхом призначено метод Add. Синтаксис його виклику такий:

ListBox1.Items.Add(Новий_рядок');

Наприклад, додати до списку ListBox значення виразу 2 * х:

ListBox1.ltems.Add (IntToStr (2 * х));

  1. Щоб очистити вміст списку, для елемента керування ListBox викликають метод Clear:

ListBox1.Clear;

  1. Властивість Count зберігає кількість рядків, доданих до списку. 

 

Багаторядкове текстове поле.  

Компонент 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 для рахунку кількості повторень
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. Вправи
Цикл з лічильником
Цикл з післяумовою
Практична робота

Форма входа
Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

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