Розробка уроку — практичної роботи

Тема: cтворення програми з розгалуженням і повторенням з викорис­танням змінних у середовищі Lazarus.

Мета: навчитися:

По завершенню вивчення учень:

Обладнання: ПК із встановленим ОС і середовищем програмування IDE Lazarus.

Структура уроку

  1. Організаційний момент.
  2. Актуалізація опорних знань.
  3. Інструктаж з ТБ.
  4. Вироблення практичних навичок.
  5. Підбиття підсумків уроку.
  6. Домашнє завдання.

Хід уроку

1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

Мотивація навчання: сьогодні ми навчимося складати програми з розгалуженням і повторенням у середовищі Lazarus. Cклавши програму один раз, можна виконати її для різних значень вхідних даних. Це може істотно зекономити час виконання завдань для багатьох варіантів вхідних даних. Сподіваюся, ви навчитеся краще логічно мислити і використовувати програмування для ефективного розв'язання і навчальних, і практичних задач.

2. Актуалізація опорних знань
Описати поняття, назви яких подано жирним написанням шрифту.

Величинавластивість деякого об'єкта, виражена елементом деякої (зазвичай, упорядкованої) множини.

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

Cтала (константа) — величина, значення якої не змінюється..

Прикладом математичної сталої є, наприклад, число Піфагора π — відношення довжини кола до його діаметра. Прикладом фізичної сталої є швидкість світла у порожнечі для різних інерційних систем відліку.

Зміннавеличина, значення якої може змінюватися..

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

Властивості величини у програмуванні:

Деякі стандартні типи величин мови Object Pascal:

Тут для цілих типів вказано діапазон допустимих значень, для дійсних типів — діапазон допустимих значень абсолютної величини.

Логічний тип описує величину, що може набувати лише одне з двох таких значень: false (хибність) або true (істина).

Символьний тип Char передбачає використання символів всієї кодової таблиці комп'ютера ASCII (літер, цифр, спеціальних символів). Цей тип є впорядкованим і порядковим (порівнюють коди символів). Значення записують як символ, взятий у апострофи (наприклад, 'x') або дієз + код символу (наприклад, #222).

Рядковий тип String задає описує послідовність величин типу Char. Цей тип є впорядкованим (порівнюють коди символів спочатку перших, при їхньому збігу — наступних і т.д.). Зазвичай значення записують як послідовність символів, взятих у апострофи. Наприклад, 'abc'.

Усі змінні потрібно оголосити (описати) в розділі опису змінних, який розпочинають службовим словом Var. Усі сталі потрібно оголосити (описати) в розділі опису сталих, який розпочинають службовим словом Const. Наприклад, таким чином:

Var n:integer; k1,k2: real; z: char; t: string;
Const n=12; g=9.8; z='?'; t='Чемпіон!';

При описі неструктурованих сталих (як і в поданому вище прикладі) тип величини зазвичай не вказують. Інакше доведеться писати довше:

Const n: byte =12; g: real =9.8; z:char ='?'; t: string ='Чемпіон!';

3 етапи роботи зі змінними (величинами):

  1. Надання значень (зчитування вхідних даних або оператор надання значень);
  2. Опрацювання даних;
  3. Виведення вихідних даних.

Розгалуженняце така алгоритмічна структура, що передбачає виконання однієї або іншої вказівки залежно від справдження певного висловлювання (умови).

Всі мови програмування мають такі спеціальні вказівки (оператори) для розгалуження залежно від справдження певної умови. Їх називають умовні уператори. У мові Object Pascal є такі види умовного оператора: повний і неповний.

Повний оператор (розгалуження) має такий вигляд:

if умова then вказівка1 else вказівка2

При справдженні умови буде виконано вказівку1, інакше — вказівку2. Тут під вказівками розуміємо як окрему вказівку, так і послідовність вказівок. Тому у блок-схемі повної форми розгалуження замість слова «вказівка» вжито слово «послідовність».

Якщо в умовному операторі після слів then або else виконують послідовність вказівок, їх потрібно брати в операторні дужки словами begin та end. Умовний оператор матиме такий вигляд:

if  умова then 
  begin 
    послідовність вказівок 1
  end 
else 
  begin
    послідовність вказівок 2
  end;

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

Неповний оператор розгалуження у поданні блок-схемою має такий вигляд:

Під час виконання неповного розгалуження при справдженні умови буде виконано вказівку (послідовність вказівок) всередені блока, інакше — здійснено перехід до виконання вказівок, розташованих після вказівки розгалуження. В програмі такий оператор записують таким чином:

if умова then вказівка;

У випадку виконання послідовності вказівок в разі істиності умови цей оператор матиме такий вигляд:

if умова then 
  begin 
    послідовність вказівок
  end;

Для ілюстрації виконання повної форми вказівки розгалуження розглянемо фрагмент проекту, у якому пропонують перевірити правильність введення 4-цифрового паролю, значення якого задають у розділі опису сталих. Наприклад, таким чином:

const parol_1 = 1243;

На збіг перевіряють пароль parol_2, який вводять у поле редагування Edit1.

 
parol_2:=StrToInt(Edit1.Text);
if parol_2 = parol_1 then 
  Label3.Caption:=' Пароль правильний!'
else   
  Label3.Caption:=' Пароль неправильний!');

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

 
If а >5 then 
begin
  а := а*2; 
  Label3.Caption:='a = ' + IntToStr(a); 
end;

Для ілюстрації виконання вказівки розгалуження з вкладеними додатковими операторами розгалуження розглянемо фрагмент проекту, у якому менше з двох різних цілих чисел треба замінити їхньою різницею, більше — їхнім подвоєним добутком та вивести їхнє відношення і (нові) їхні значення. У разі збігу значень чисел ніяких операцій з числами не виконувати, а лише вивести повідомлення про їхню рівність.

 
if a < b then
  begin
  Label3.Caption:=IntToStr(a)+' < '+ IntToStr(b); 
  a := a - b;
  b := 2*a*b;
  Label4.Caption:='a = '+IntToStr(a)+'   b = '+IntToStr(b)
  end
else   
  if b < a then
    begin
    Label3.Caption:=IntToStr(b)+' < '+ IntToStr(a);
    b := a - b;
    a := 2*a*b;
    Label4.Caption:='a = '+IntToStr(a)+'   b = '+IntToStr(b)  
    end
  else Label4.Caption:='Значення чисел збігаються і дорівнюють '+IntToStr(a);

При складанні програм часто виникає потреба повторити виконання певної вказівки або послідовності вказівок кілька разів.

Цикл (вказівка повторення)різновид керівної конструкції мови програмування, призначеної для організації багаторазового виконання послідовності вказівок, яку називають тілом циклу.

Види циклів мови програмування Object Pascal:

Цикл з лічильникомцикл, тіло якого виконують певну кількість разів, тобто для всіх послідовних цілих чисел величин лічильника з певного діапазону.

Зазвичай цикл з лічильником використовують, якщо кількість виконуваних повторень відома заздалегідь хоча б у момент початку виконання циклу. Його блок-схема (у випадку зростання значень лічильника циклу) має такий вигляд.

Загальний вигляд цієї вказівки такий:

for назва змінної := вираз1 to вираз2 do
begin
  тіло циклу
end;

або

for назва змінної := вираз1 downto вираз2 do
begin
  тіло циклу
end;

Перший рядок у поданих записах називають рядком заголовка вказівки циклу з лічильником. Змінну в рядку заголовку вказівки циклу з лічильником називають лічильником циклу. На блок-схемі лічильник циклу має назву і. І лічильник циклу, і вираз1, і вираз2 мають набувати лише цілих значень.

Першим подано вигляд для зростання лічильника, який застосовують, якщо значення виразу1 не перевищує значення виразу2. Наступним подано вигляд для спадання лічильника, який застосовують, якщо значення виразу1 не менше від значення виразу2.

Якщо тіло циклу складається лише з однієї вказівки, операторні дужки begin та end можна на використовувати.

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

Var i, s: integer;
begin
  s:=0;
  for i:=1 to 100 do s:=s+i;
  Label2.Caption:=IntToStr(s);
end;

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

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

Вигляд вказівки циклу з передумовою

While умова do begin тіло циклу end;

Для ілюстрації виконання циклу з передумовою розглянемо фрагмент проекту, у якому обчислюють суму перших ста натуральних чисел.

Var i,s: integer;
begin
  s:=0;
  i:=1;
  while i<=100 do begin
    s:=s+i;
    i:=i+1;
  end;
  Label2.Caption:=IntToStr(s);
end;

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

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

Вигляд вказівки циклу з післяумовою

Repeat тіло циклу until умова;

Для ілюстрації виконання вказівки циклу з післяумовою розглянемо фрагмент проекту, у якому обчислюють суму перших ста натуральних чисел.

Var i,s: integer;
begin
  s:=0;
  i:=1;
  repeat
    s:=s+i;
    i:=i+1;
  until i=101;
  Label2.Caption:=IntToStr(s);
end;

3. Інструктаж з ТБ
4. Вироблення практичних навичок


Задача 1. Обчислити значення виразу z = (а + 2b)/(а – 3b), де а, Ь — дійсні числа.

Знаменник дробу може дорівнювати нулю. Тому алгоритм розв'язання має містити розгалуження, в якому будуть враховані два можливих випадки:

Вказівки до складання програми для обчислення значення виразу у середовищі програмування  Lazarus.

  1. Завантажити середовище Lazarus і отримати на екрані монітора відображення кількох вікон: Lazarus IDE, Редактор тексту, Інспектор об'єктів, Повідомлення, Form1.









    Останнє вікно — об’єкт для розташування кнопок, полів, написів, меню, смуг прокрутки тощо — має таке контексне меню.

  2. Скористатися вказівкою меню Файл / Новий ...

    для виклику вікна діалогу Новий .... У цьому вікні вибирати пункт Програма та натиснути кнопку Гаразд.

  3. У вікні Інспектора об'єктів Властивості надати такі значення властивостям форми:

    • Сaption — Обчислення значення виразу z = (а + 2b) / (а – 3b), де а і b — дійсні числа;
    • Color — clSkyBlue;
    • Height — 400;
    • Left — 300;
    • Top — 220;
    • Width — 500.
  4. Створити окрему теку для проекту з назвою Ваше прізвище_Вираз у теці, вказаній учителем. Для збереження всіх файлів:

    • або використати комбінацію клавіш Shift + Ctrl + S;
    • або натиснути кнопку Зберегти всі на Панелі інструментів;
    • або скористатися вказівкою меню Файл / Зберегти всі.

    У результаті вам буде запропоновано зберегти файли project1.lpi та unit1.pas, для яких потрібно буде вказати новостворену теку для зберігання.

  5. Використовуючи Панель компонентів, розмістити на формі об’єкти: 2 кнопки, 2 поля і 4 написи. Для цього зробити таке:

    • натиснути віповідну кнопку на вкладенні Standard вікна Lazarus IDE:
      tbutton — для створення кнопки;
      tedit — для створення поля;
      tlabel — для створення напису.

    • розташувати вказівник миші на формі у вершині прямокутника, у якому буде розташовано об'єкт;

    • натиснути ліву кнопку миші і, не відпускаючи кнопки миші, змістити вказівник миші по діагоналі прямокутника (розташування об'єкта);

    • відпустити кнопку миші і пересвідчитися, що об'єкт розташовано у потрібному місці.

  6. Використовуючи Інспектор об'єктів, встановити властивості об'єктів таким чином (не вказані властивості — довільні):

    • для напису Label1 Caption (текст напису):
      "Для обчислення значення виразу z = (а + 2b)/(а – 3b) введіть значення:";
    • для напису Label2 Caption: "а =";
    • для напису Label3 Caption: "b =";
    • для напису Label4 Caption порожня;
    • для полів edit1 та edit2 Text порожня;
    • для кнопки button1 Caption: Обчислити;
    • для кнопки button2 Caption: "Закрити",

    щоб надати формі такого вигляду.

  7. На формі виділити кнопку з написом Обчислити.

  8. У вікні Інспектор об'єктів перейти на вкладення Події, вибрати подію OnClick і двічі клацнути у полі OnClick.

  9. У вікні Редактор тексту ввести такий код процедури.

    procedure TForm1.Button1Click(Sender: TObject);
    var a,b,x,y,z:real;
    begin
      a:=StrToFloat(Edit1.Text);
      b:=StrToFloat(Edit2.Text);
      x:=a-3*b;
      y:=a+2*b;
      if x<>0 then
      begin
        z:=y/x;
        label4.Caption:='z='+FloatToStr(z);
      end
      else
      label4.Caption:='Значення виразу не визначене.';
    end;

    У цій процедурі використано такі змінні:

    • a, b — вхідні дані, які вводять у поля Edit1 та Edit2;
    • х — знаменник виразу;
    • y — чисельник виразу;
    • z — значення виразу.

    У процедурі використано такі вказівки:

    • StrToFloat — перетворення рядка тексту в десяткове число;
    • FloatToStr — перетворення десяткового числа у текстовий рядок.
  10. Пересвідчитися, що у вікні Редактор тексту буде таке виділення

    • зарезервовані слова — напівжирним шрифтом;
    • знаки пунктуації — червоним кольором;
    • рядки тексту — синім кольором.
  11. На формі виділити кнопку з написом Закрити.

  12. У вікні Інспектор об'єктів перейти на закладку Події.

  13. Вибрати подію OnClick і двічі клацнути у полі OnClick.

  14. У вікні Редактор тексту ввести такий код процедури.

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      close;
    end;
    Зберегти зміни в проекті:

    • або використати комбінацію клавіш Shift + Ctrl + S;
    • або натиснути кнопку Зберегти всі на Панелі інструментів;
    • або скористатися вказівкою меню Файл / Зберегти всі.
  15. Натиснути кнопку Виконати. Якщо все зроблено правильно, вікно Повідомлення матиме такий вигляд:

    і файл project1.exe буде запущено на виконання.

  16. У вікні виконання програми ввести значення змінних: a = 1 і b = 2, натиснути кнопку Обчислити і побачити результат обчислення виразу.

    Аналогічно пересвідчитися у коректності роботи програми при а = 3, b = 1 з дігностикою: "Значення виразу невизначене."

  17. Для перевірки роботи кнопки Закрити клацнути на ній і побачити результат:

  18. Натиснути кнопку Гаразд.

Таким чином проект для обчислення значення виразу створено і перевірено. Для кращого засвоєння матеріалу можна переглянути навчальне відео

Задача 2. Створити проект для розв'язання відомої задачі-головоломки «Кролики і числа», описаної у «Книзі Абака» в 1202 році італійським математиком Леонардо Фібоначчі. На початку січня тобі подарували пару новонароджених кроликів. Відомо, що кожна пара кроликів кожні 2 місяці народжує нову пару кроликів. Скільки пар кроликів у тебе буде у грудні?

Розв'язання. Позначимо через kj кількість кроликів на початку j-го місяця. Маємо:

k1 = k2 = 1.

Для решти місяців маємо:

kj + 2 = kj + 1 + kj

див. ілюстрацію, запозичену з сайту http://animalworld.com.ua/.

Кожний член послідовності {kj }, починаючи з третього, є сумою двох попередніх. Послідовність: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..., породжена розв'язанням цієї задачі, зустрічається в найнесподіваніших ситуаціях.

При створенні проекту використаємо цикл з лічильником та розгалуження (для перевірки коректності введеного номера місяця). Перед створенням проекту створити окрему теку для проекту з назвою Ваше прізвище_Кролики у теці, вказаній учителем.

Вказівки до складання програми для розв'язання задачі про кроликів у середовищі програмування  Lazarus.

  1. У середовищі Lazarus, встановити властивості форми й розташувати на ній об'єкти згідно з поданим зразком (як це робити див. у вказівках до попередньої задачі).



    Для заповнення властивості Label2.Caption (текст умови завдання) скористайтесь кнопкою Редактор рядків.

    Малюнок для форми вставити таким чином: на вкладенні Additional панелі компонентів вибрати компонент TImage, та протягуванням вказати місце розташування малюнка на формі.

    У вікні Інспектор об'єктів на вкладенні Властивості для об'єкта Image1 встановити значення властивості Strech як True, для того щоб зображення заповнило повністю рамку, якою позначене місце для зображення. У рядку властивості Picture треба скористатися кнопкою для виклику вікна Діалог завантаження зображення - Image...

    У цьому вікні треба виконати таку послідовність дій:

    • натиснути кнопку Завантажити;
    • вибрати у вікні діалогу потрібне зображення;
    • натиснути кнопка Відкрити;
    • натиснути кнопку Гаразд.
  2. На формі виділити кнопку з написом Обчислити.

  3. У вікні Інспектор об'єктів перейти на вкладення Події.

  4. Вибрати подію OnClick і двічі клацнути у полі OnClick.

  5. У вікні Редактор тексту ввести такий код процедури:

    procedure TForm1.Button1Click(Sender: TObject);
    var  n,k,k1,k2,i:integer;
    begin
      n:=StrToInt(Edit1.Text);
      if n>0 then
      begin
        k1:=1;
        k2:=1;
        k:=0;
        For i:=2 to n do
        begin
          k2:=k1+k;
          k:=k1;
          k1:=k2;
        end;
      Label3.Caption:='Наприкінці цього місяця в тебе буде '+IntToStr(k2)+ ' пар кроликів.';
      end
      else Label3.Caption:='Введено некоректні дані!'
    end;
  6. Зберегти проект:

    • або використати комбінацію клавіш Shift + Ctrl + S;
    • або натиснути кнопку Зберегти всі на Панелі інструментів;
    • або скористатися вказівкою меню Файл / Зберегти всі.
  7. Натиснувши кнопку Виконати, перевірити роботу програми для таких вхідних даних: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, отримавши відповідно такі вихідні дані: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 і «Введено некоректні дані!».

  8. Впевнившись у правильності роботи програми, закрити вікно виконання програми та вийти з середовища Lazarus.

6. Підбиття підсумків уроку
Виставлення оцінок.

7. Домашнє завдання
Доробити проекти у разі потреби. Якщо необхідно, порівняти з демонстраційним розв'язанням. Створити 2 модифікації проекту для задачі 2, передбачивши використання циклів з передумовою та з післяумовою.


Текст упорядкувала Любов Василівна Зуєва, учитель спеціалізованої школи № 3 Подільського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 03.10.2016 по 03.11.2016.