Сторінка 1

вівторок, 7 березня 2017 р.

Реалізація алгоритмів з графічним відображенням даних засобами мови програмування

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Обговорюємо
      1. Які особливості малювання геометричних фігур за координатами в середовищі програмування Lazarus?
      2. Чим відрізняється додавання зображень у середовищах програмування мовами Python та Object Pascal?
      Діємо разом
      • Вправа 1. У середовищі програмування мовою Python розробіть проект, у якому у вікні головної форми буде побудована стовпчаста діаграма, що демонструє співвідношення між числами 15, 50, 70, 25, 10, 30.
      1. Завантажте середовище програмування мовою Python, створіть новий файл і збережіть його з іменем Побудова діаграми
      2. У вікно редактора коду введіть програмний код:
        """ 
            Проект "Стовпчаста діаграма" 
            
        """
        import tkinter
        from tkinter import ttk
        from tkinter import messagebox
        main = tkinter.Tk()
        main.wm_title('Стовпчаста діаграма')
        
        # оголошення списку значень 
        data = [15, 50, 70, 25, 10, 30]
        
        # створення полотна для малювання та розміщення на головній формі
        cnv = tkinter.Canvas(main, width=200, height=100)
        cnv.pack()
        
        # команди для малювання на полотні - створення графічного примітиву: прямокутника
        cnv.create_rectangle(0, 100, 200, 100)
        i = 0
        d_list = len(data)
        while i < d_list:
            cnv.create_rectangle(10 + i * 30,
                                 100,
                                 30 + i * 30,
                                 100 - data[i], 
                                 fill='yellow')
            i += 1
        
        #запуск опрацювання подій програми
        main.mainloop()
      3. Запустіть проект на виконання. Перевірте, чи отримали ви вікно форми, зображене на малюнку.
      • Вправа 2. У середовищі програмування Lazarus розробіть проект, у якому кошеня після натискання кнопки Бігти змінює своє положення. Зображення кошеняти збережені у файлах cat1.pngcat2.png, cat3.png, cat4.png. 
      1. Завантажте середовище Lazarus і створіть новий проект.
      2. Додайте на форму 4 зображення кошеняти, використовуючи компонент Image
      3. Додайте на форму кнопку з написом "Бігти".
      4. Додайте на форму компонент Timer (встановлює затримки часу при виконанні тих чи інших дій).
      5. Для компонента Timer (1) в Інспекторів об'єктів встановіть такі значення властивостей, як на скріншоті: (2) - включення/виключення таймера, (3) - інтервал часу в мілісекундах, через який будуть змінюватися зображення кошеняти
      6. Результуюча форма матиме такий вигляд:
      7. Запишіть програмний код у вікні редактора коду перед словом implementation, в якому описані дві змінні: stage - може набувати значень цілих значень 0, 1, 2, 3 - це положення кошеняти (або номер зображення кошеняти), flag - логічна змінна, набуває значення істини (True) або хибності (False)
        var
          Form1: TForm1;
          stage : Integer;
          flag : Boolean;
        implementation 
      8. Створіть процедуру опрацювання події натиснули кнопку Бігти. Для цього двічі натисніть на кнопку з написом Бігти і у вікні редактора коду введіть команди
        procedure TForm1.Button1Click(Sender: TObject);
        begin
        
         flag := True;
         case stage of
            0:
              begin
                Image1.Visible := False;
                Image2.Visible := True;
                stage:= stage + 1;
              end;
            1:
              begin
                Image2.Visible := False;
                Image3.Visible := True;
                stage:= stage + 1;
              end;
            2:
              begin
                Image3.Visible := False;
                Image4.Visible := True;
                stage:= stage + 1;
              end;
            3:
              begin
                Image4.Visible := False;
                Image1.Visible := True;
                stage:=0;
              end;
        
        end;
        end;  
      9. Двічі натисніть на формі на зображенні годинника (компонент Timer). У вікні редактора коду запишіть програмний код для обробника подій:
        procedure TForm1.Timer1Timer(Sender: TObject);
        begin
          Timer1.Enabled := flag;
          stage:=0;
        end;
      10. Запустіть проект на виконання. Перевірте, чи змінює своє положення і вигляд кошеня після натискання кнопки Бігти.
      Виконуємо самостійно
      • Завдання 1. Розробіть проект Енциклопедія, у якому на екранній формі Сенсорна система після натиснення кнопки Відобразити можна отримати відомості про основні сенсорні системи: зорову, слухову, смаку, нюху, рівноваги, руху, дотику, температури, болю. Спосіб відображення відомостей – малюнок, текст обирається за допомогою елементів управління. Вибір сенсорної системи – відповідними перемикачами. Потрібні відомості та зображення знайдіть в Інтернеті. Орієнтовний зразок форми:
        Створіть програму в середовищі Lazarus, скориставшись програмним кодом нижче. Зверніть увагу, на використання нового компонента Memo (текстове поле для зберігання великих текстів)
        та проаналізуйте код на наявність нових конструкцій і назв, які не зустрічалися до цього часу. Знайдіть інформацію про їхнє використання.
        procedure TForm1.Button1Click(Sender: TObject);
        var m, t : boolean;
        begin
          m := CheckBox1.Checked;
          t := CheckBox2.Checked;
          if RadioGroup1.ItemIndex = 0 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/zir.jpg')
              else
                  Image1.Picture := nil;
              if t then Memo1.Lines.Add('Орган зору людини складається з очного яблука і допоміжного апарату. Очне яблуко розміщене в очній ямці черепа. Має кулясту форму і складається з трьох оболонок: зовнішньої — щільної білкової, яка захищає очне яблуко від пошкоджень та проникнення сторонніх тіл ззовні (спереду вона переходить у прозору і проникну для світла рогівку), до неї прикріплюються м' + #39 + 'язи, які рухають око; середньої — судинної (пронизаною густою сіткою кровоносних судин, що постачають кров очному яблуку); внутрішньої — сітчастої (в ній розміщені рецептори ока — палички і колбочки), де під дією світла виникають нервові збудження, які по зоровому нерву передаються в зорову зону кори головного мозку.')
        
            end
          else if RadioGroup1.ItemIndex = 1 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/sluh.png')
              else
                  Image1.Picture := nil;
              if t then Memo1.Lines.Add('Вухо як орган слуху забезпечує сприйняття звукових коливань. Завдяки слуху розрізняють звуки навколишнього середовища. Людина спроможна визначити напрямок звуку з джерела, що дає змогу орієнтування в навколишньому середовищі, а також висоту, тембр, силу звуку. Слух є одним із чуттів людини, які сприяють психічному розвитку повноцінної особистості. З слухом пов' + #39 + 'язані звукові, мовні спілкування. Орган слуху розташований в отворі слухового проходу скроневої кістки черепа. Він складається з трьох основних відділів: зовнішнього вуха, середнього вуха, внутрішнього вуха. Перші два беруть участь тільки в проведенні звукових коливань, а третій відділ містить звукосприймальний і вестибулярний апарат.')
        
            end
          else if RadioGroup1.ItemIndex = 2 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/smak.jpg')
              else
                 Image1.Picture := nil;
              if t then Memo1.Lines.Add('Смак — це сприйняття смакових особливостей речовин, що потрапляють в ротову порожнину. Рецептори смаку розташовані в смакових цибулинах виростів слизової оболонки язика — сосочків на стінках глотки і м'+#39+'якого піднебіння. Збудження від рецепторів передається по волокнах язикового нерва у довгастий мозок, міст, до скроневої кістки, де формується сприйняття у вигляді різних смакових відчуттів. Смак допомагає людині визначити якість їжі, сприяє виділенню травних соків і проходження процесу травлення в цілому.')
        
            end
          else if RadioGroup1.ItemIndex = 3 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/nuh.jpg')
              else
                 Image1.Picture := nil;
              if t then Memo1.Lines.Add('Нюх — це сприйняття запахів різних речовин. Велика кількість нюхових рецепторів міститься в слизовій оболонці порожнини носа. Від нюхових рецепторів нервові імпульси передаються у проміжний мозок, потім у лобову частку кори, де проходить аналіз речовин, що вдихаються. За запахом людина відрізняє недоброякісну їжу, вловлює появу в повітрі шкідливих для її здоров'+ #39+'я домішок.')
        
            end
          else if RadioGroup1.ItemIndex = 4 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/dotuk.jpg')
              else
                 Image1.Picture := nil;
              if t then Memo1.Lines.Add('Дотик — це сприйняття форми, розміру, щільності, температури різних предметів. У слизових оболонках шкіри містяться дотикові рецептори. Найбільше їх на губах, кінчику язика, пальців, а також на долоні. Користуючись дотиком, людина може визначити фізичні властивості предметів такі, як форма, твердість, м'+#39+'якість, характер поверхні, тепло або холод, орієнтуватися в темряві, блискавично реагувати на загрозливу небезпеку.')
        
            end
          else if RadioGroup1.ItemIndex = 5 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/rivnovaga3.jpg')
              else
                 Image1.Picture := nil;
              if t then Memo1.Lines.Add('Функція регуляції положення тіла в просторі і рівноваги забезпечується вестибулярним апаратом, який утворюється рецепторами мішечків і напівколових каналів внутрішнього вуха. Коли змінюється положення голови або людина рухається, рецептори збуджуються, виникають нервові імпульси. Вони проходять по нервових шляхах у середній мозок, мозочок і кору великих півкуль. Завдяки аналізатору контролю рівноваги і положення тіла забезпечується прямоходіння.')
        
            end
          else if RadioGroup1.ItemIndex = 6 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/ruh.jpg')
              else
                 Image1.Picture := nil;
              if t then Memo1.Lines.Add('М’язова система є джерелом численної сенсорної імпульсації. До складу нервів, що іннервують м’язи, вхо­дить від 30 до 50% аферентних волокон. Рецепторний апарат м'+ #39 + 'язів і суглобів сигналізує в нервову систему про ступінь напружен­ня м’язових волокон, положення суглобів і різних частин тіла однієї відносно інших. Ця зворотна інформація необхідна для автоматич­ної регуляції постави і рухових актів. При порушеннях рухового аналізатора людина не може ні ходити, ні стояти. Імпульси від рухового аналізатора необхідні також для підтримання тонусу м’язів і тонкого пристосування вегетативних функцій до умов м’язової роботи.')
        
            end
          else if RadioGroup1.ItemIndex = 7 then
            begin
              Memo1.Lines.Clear;
              if m then Image1.Picture.LoadFromFile('img/dotuk.jpg')
              else
                 Image1.Picture := nil;
              if t then Memo1.Lines.Add('Згідно із сучасними уявленнями, біль є суб' + #39 + 'єктивним сприй­няттям системних процесів, які включають сенсорну оцінку інфор­мації про ноцирецептивні (які порушують цілість тканин) стимули і про різноманітні рефлекторні реакції, спрямовані на захист організму від дії цих стимулів. Біль, на відміну від інших сенсорних модальностей, інформує нас про небезпеку, яка загрожує організмові. За образним вислов­люванням стародавніх греків, біль є сторожовим псом здоров' + #39 + 'я. Справді, незважаючи на те що біль майже завжди порушує жит­тєдіяльність, знижує працездатність людини, позбавляє її сну, він усе ж таки потрібний і до певних меж корисний.')
            end
        end;
      • Завдання 2. Розробіть проект Природні зони, у якому на формі розміщене зображення карти України, збережене у файлі Map_of_Ukraine.png. Після вибору у списку однієї з природних зон рівнинної частини України: зона мішаних лісів і широколистяних лісів, зона лісостепу, зона степу – межі відповідної зони виділяються ламаною червоного кольору.
        Розгляньте програмний код (координати точок спробуйте визначити самостійно) і реалізуйте програму:
        procedure TForm1.RadioGroup1SelectionChanged(Sender: TObject);
        begin
          Image1.Canvas.Pen.Color := clRed;
          Image1.Canvas.Pen.Width := 3;
          Image1.Canvas.Pen.Style := psDot;
          if RadioGroup1.ItemIndex = 0 then
              begin
        
                   Image1.Canvas.MoveTo(46,169);
                   Image1.Canvas.LineTo(96,121);
                   Image1.Canvas.LineTo(107,121);
                   Image1.Canvas.LineTo(109,100);
                   Image1.Canvas.LineTo(97,65);
                   Image1.Canvas.LineTo(98,45);
                   Image1.Canvas.LineTo(130,34);
                   Image1.Canvas.LineTo(275,56);
                   Image1.Canvas.LineTo(352,68);
                   Image1.Canvas.LineTo(380,31);
                   Image1.Canvas.LineTo(487,14);
                   Image1.Canvas.LineTo(511,50);
                   Image1.Canvas.LineTo(506,78);
                   Image1.Canvas.LineTo(434,96);
                   Image1.Canvas.LineTo(371,143);
                   Image1.Canvas.LineTo(46,169)
              end
          else
              if RadioGroup1.ItemIndex = 1 then
                  begin
                      Image1.Canvas.MoveTo(46,170);
                      Image1.Canvas.LineTo(366,145);
                      Image1.Canvas.LineTo(434,96);
                      Image1.Canvas.LineTo(506,80);
                      Image1.Canvas.LineTo(633,121);
                      Image1.Canvas.LineTo(646,183);
                      Image1.Canvas.LineTo(305,220);
                      Image1.Canvas.LineTo(319,336);
                      Image1.Canvas.LineTo(242,248);
                      Image1.Canvas.LineTo(127,289);
                      Image1.Canvas.LineTo(18,239);
                      Image1.Canvas.LineTo(46,170);
        
                  end
              else
                  if RadioGroup1.ItemIndex = 2 then
                      begin
                           Image1.Canvas.MoveTo(321,336);
                           Image1.Canvas.LineTo(321,336);
                           Image1.Canvas.LineTo(306,220);
                           Image1.Canvas.LineTo(645,184);
                           Image1.Canvas.LineTo(633,122);
                           Image1.Canvas.LineTo(773,182);
                           Image1.Canvas.LineTo(742,269);
                           Image1.Canvas.LineTo(702,275);
                           Image1.Canvas.LineTo(681,324);
                           Image1.Canvas.LineTo(543,389);
                           Image1.Canvas.LineTo(556,432);
                           Image1.Canvas.LineTo(489,454);
                           Image1.Canvas.LineTo(446,438);
                           Image1.Canvas.LineTo(492,391);
                           Image1.Canvas.LineTo(371,370);
                           Image1.Canvas.LineTo(323,446);
                           Image1.Canvas.LineTo(281,447);
                           Image1.Canvas.LineTo(260,432);
                           Image1.Canvas.LineTo(295,369);
                           Image1.Canvas.LineTo(341,367);
        
                      end;
        end;
        
        procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        begin
             Edit1.Text := IntToStr(X)+' ; '+IntToStr(Y)
        end;
        
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          Image1.Picture.LoadFromFile('Map_of_Ukraine.png')
        end;                                              
      Домашнє завдання
      • Опрацювати підручник: §27 с. 181-189

      неділю, 5 лютого 2017 р.

      Відображення базових графічних примітивів засобами мови програмування

      Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
      Види навчальної діяльності
      Обговорюємо
          1. Для чого використовують компонент Shape в середовищі програмування Lazarus?
          2. Як змінюють властивості геометричних фігур, побудованих за допомогою компонента Shape?
          Діємо разом
          • Вправа 1. У середовищі програмування Lazarus створіть проект, у якому, коли натискають мишку на зображенні круга, він зафарбовується в колір, обраний у групі перемикачів Колір, а коли натискають мишкою зображення квадрата, - зафарбовується обраним кольором та застосовується стиль заливки, який обирають у групі Заливка.
          1. Завантажте середовище Lazarus і створіть новий проект. 
          2. Змініть значення властивостей об'єкта Form1, розмістіть на формі об'єкти, як на зразку, та надайте значень їх властивостям:
          3. Для додавання на форму фігур скористайтеся компонентом Shape:
          4. Для додавання на форму груп перемикачів скористайтеся компонентом RadioGroup і додайте відповідні значення у властивість Items:
          5. У вікні Інспектора об'єктів встановіть властивості для фігур: Shape1 (Круг) і Shape2 (Квадрат)
          6. Створіть процедуру опрацювання події натискання кнопкою миші на першій фігурі. Для цього оберіть у вікні Інспектора об'єктів компонент Shape1, на вкладці Події двічі натисніть у клітинці праворуч (...) від OnMouseDown 
            і введіть команди у вікні редактора коду:
            procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
            begin
               if RadioGroup1.ItemIndex = 0 then
                  Shape1.Brush.Color:=clRed
               else if RadioGroup1.ItemIndex = 1 then
                  Shape1.Brush.Color:=clBlue
               else if RadioGroup1.ItemIndex = 2 then
                  Shape1.Brush.Color:=clYellow
               else
                  Shape1.Brush.Color:=clGreen;
            end;
          7. Створіть аналогічно процедуру опрацювання події натискання кнопкою миші на другій фігурі. Використайте такий програмний код:
            procedure TForm1.Shape2MouseDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
            begin
               if RadioGroup1.ItemIndex = 0 then
                  Shape2.Brush.Color:=clRed
               else if RadioGroup1.ItemIndex = 1 then
                  Shape2.Brush.Color:=clBlue
               else if RadioGroup1.ItemIndex = 2 then
                  Shape2.Brush.Color:=clYellow
               else
                  Shape2.Brush.Color:=clGreen;
            
               if RadioGroup2.ItemIndex = 0 then
                  Shape2.Brush.Style:=bsHorizontal
               else if RadioGroup2.ItemIndex = 1 then
                  Shape2.Brush.Style:=bsVertical
               else
                  Shape2.Brush.Style:=bsSolid;
            end; 
          8. Проаналізуйте програмний код опрацювання подій для обох фігур. Запустіть проект на виконання. Перевірте, чи змінюють свої властивості геометричні фігури.
          9. Завершіть роботу з проектом і середовищем програмування.
          • Вправа 2. У середовищі програмування Lazarus розробіть проект Лінії, у якому на формі будуть малюватися лінії за допомогою протягування мишею: початок лінії буде розташовано в позиції, в якій натиснули кнопку миші, а кінець – де відпустили кнопку миші.
          1. Завантажте середовище Lazarus і створіть новий проект.
          2. Створіть процедуру опрацювання події натиснули кнопкою миші. Для цього оберіть у вікні Інспектора об'єктів компонент Form1, на вкладці Події двічі натисніть у клітинці праворуч (...) від OnMouseDown 
            і введіть команди у вікні редактора коду
            procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
            begin
              DownM := True;
              Form1.Canvas.MoveTo(X,Y);
            end; 
          3. У вікні редактора коду запишіть програмний код для оголошення змінної логічного типу DownM, яка передаватиме стан натиснення миші в кожну процедуру опрацювання події
            DownM: Boolean;
            Зверніть увагу, що ми записуємо її у програмний код до опису процедури опрацювання подій:
          4. У програмний код (аналогічно, як у пункті 2) запишіть процедури опрацювання подій для форми OnMouseUp - відпущена кнопка миші і OnMouseMove - переміщення миші:
            procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
              Shift: TShiftState; X, Y: Integer);
            begin
              DownM := False;
            end;
            
            procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
              Y: Integer);
            begin
               if DownM = True then
                  begin
                    Form1.Canvas.Pen.Color:=clFuchsia;
                    Form1.Canvas.Pen.Width:=5;
                    Form1.Canvas.Pen.Style:=psDot;
                    Form1.Canvas.LineTo(X,Y)
                  end
            end;  
          5. Проаналізуйте програмний код створених процедур, зверніть увагу на використання властивості Canvas - властивості компонента Form, який у свою чергу є об'єктом, що має свої методи і властивості. 
          6. Запустіть проект на виконання. Спробуйте намалювати лініями своє ім'я.
          7. Завершіть роботу з проектом і середовищем програмування.
          Працюємо в парах
          • Поміркуйте, як створити проект, у якому можна продемонструвати різні стилі заливки фігур. Реалізуйте цей проект у середовищі програмування Lazarus.
          Виконуємо самостійно
          • Завдання. Розробіть проект Прямокутник, у якому в текстові поля чи у список даних вводять пари координат чисел, натискають кнопку Побудувати й отримують прямокутник, побудований за вказаними значеннями координат. Розкоментуйте рядок з кодом і проаналізуйте зміни у виконанні програми. Орієнтовний зразок інтерфейсу
            і програмний код, який можна використати у проекті:
            procedure TForm1.Button1Click(Sender: TObject);
            var x1, x2, y1, y2: integer;
            begin
              x1:=StrToInt(Edit1.Text);
              y1:=StrToInt(Edit2.Text);
              x2:=StrToInt(Edit3.Text);
              y2:=StrToInt(Edit4.Text);
              Form1.Canvas.Brush.Color:=clYellow;
              Form1.Canvas.Rectangle(x1,y1,x2,y2);
              // Form1.Canvas.FillRect(x1,y1,x2,y2);
            end; 
          Домашнє завдання
          • Опрацювати підручник: §27 с. 183-188

          суботу, 4 лютого 2017 р.

          Відображення рисунків із зовнішніх файлів

          Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
          Види навчальної діяльності
          Обговорюємо
              1. Як у проектах, розроблених у середовищі програмування Lazarus, розміщують графічні зображення на формі? Яке їх призначення?
              2. Які засоби передбачені в середовищі програмування Lazarus, щоб додані на форму малюнки не спотворювались, збільшувались, імітували рух?
              Діємо разом
              • Вправа 1. У середовищі програмування Lazarus створіть проект, форма якого містить малюнок, що збережений у файлі ozon.png. При натисненні кнопки Збільшити розміри малюнка збільшується (імітується ефект наближення). 
              1. Завантажте середовище Lazarus і створіть новий проект. 
              2. Змініть значення властивостей об'єкта Form1, розмістіть на формі об'єкти, як на зразку, та надайте значень їх властивостям:
              3. Для додавання на форму зображення скористайтеся компонентом Image:
              4. У вікні Інспектора об'єктів встановіть властивості для зображення:
                1 - виберіть об'єкт Image1,  2 (AutoSize) - автоматична зміна розміру компонента до реального розміру зображення, 3 (Hint) - текст вспливаючої підказки, коли курсор над об'єктом, 4 (Picture) - завантаження зображення, 5 (ShowHint) - показувати чи не показувати текстову підказку, 6 (Stretch) - автоматичне масштабування (стиснення чи розтягнення). 
              5. Створіть процедуру опрацювання події натиснення кнопки Збільшити і введіть команди у вікні редактора коду для переміщення малюнка та збільшення його:
                procedure TForm1.Button1Click(Sender: TObject);
                begin
                  Image1.Top := Image1.Top + 100;
                  Image1.Left := Image1.Left + 100;
                  Image1.Height := Image1.Height + 100;
                  Image1.Width := Image1.Width + 100;
                end;
              6. Запустіть проект на виконання. Перевірте, чи отримали ви потрібний результат.
              7. Завершіть роботу з проектом і середовищем програмування.
              • Вправа 2. У середовищі програмування Lazarus створіть проект Полюси магнітів, який містить два малюнки магнітів, розташовані один напроти другого. Потрібні зображення збережені у файлах magnit1.pngmagnit2.png. Коли натиснути мишею на лівому малюнку, вони обидва наближаються один до одного, а на правому – віддаляються.
              1. Завантажте середовище Lazarus і створіть новий проект.
              2. Змініть значення властивостей об'єкта Form1, розмістіть на формі об'єкти, як на зразку, та надайте значень їх властивостям:
              3. Створіть процедуру опрацювання події натиснули кнопкою миші. Для цього оберіть у вікні Інспектора об'єктів компонент Іmage1, на вкладці Події двічі натисніть у клітинці праворуч (...) від OnMouseDown 
                і введіть команди у вікні редактора коду для переміщення малюнка:
              4. procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
                  Shift: TShiftState; X, Y: Integer);
                begin
                  Image1.Left := Image1.Left + 10;
                  Image2.Left := Image2.Left - 10
                end; 
              5. Виконайте аналогічні дії для компонента Image2, врахувавши зміни у програмному коді. 
              6. Запустіть проект на виконання. Перевірте, чи отримали ви потрібний результат.
              7. Завершіть роботу з проектом і середовищем програмування.
              Працюємо в парах
              • Поміркуйте, як скласти таблицю узагальнення щодо роботи із графічними об'єктами в середовищі програмування Lazarus. Складіть її засобами текстового процесора. Доповнюйте таблицю новими відомостями.
              Виконуємо самостійно
              • Завдання. Створіть проект Площа фігур, вікно якого містить зображення трикутника, прямокутника й круга (створити в графічному редакторі), та опрацьовуються такі події: при наведенні вказівника миші на кожну фігуру та утримання натиснутою її лівої кнопки миші на екранній формі в написі виводиться формула площі відповідної фігури; якщо кнопку відпустити, формула зникне. Розгляньте зразок виконаного проекту
                і проаналізуйте програмний код для опрацювання подій першого зображення (трикутника):
                procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
                  Shift: TShiftState; X, Y: Integer);
                begin
                  Label1.Caption := 'S = sqrt(p*(p-a))*(p-b)*(p-c)';
                end;
                
                procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
                  Shift: TShiftState; X, Y: Integer);
                begin
                  Label1.Caption := 'Формула площі';
                end;    
                Напишіть програмний код для обробки подій для інших зображень (прямокутника і круга), при виконанні завдання для компонентів Image змінюйте значення таких властивостей:
              Домашнє завдання
              • Опрацювати підручник: §27 с. 181-183

              суботу, 28 січня 2017 р.

              Складання та виконання алгоритмів з повтореннями та розгалуженнями для опрацювання величин

              Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
              Види навчальної діяльності
              Обговорюємо
                  1. Як описати алгоритмічну структуру розгалуження мовами програмування Free Pascal та Python?
                  2. Як описати алгоритмічну структуру повторення мовами програмування Free Pascal та Python?
                  3. Як описати операції над величинами різних типів мовами програмування Free Pascal та Python?
                  4. Для чого на електронних формах використовують елементи управління перемикач, прапорець, список?
                  Виконуємо самостійно
                  • Завдання 1. В Україні за споживання електроенергії визначено такий порядок оплати залежно від спожитого обсягу: вартість 1 кВт при споживанні електроенергії до 100 кВт за місяць – 0,71 грн., від 100 кВт до 600 кВт – 1,29 грн., понад 600 кВт – 1,64 грн. Деяким споживачам надається пільговий обсяг безоплатного користування електроенергію, наприклад, 30 кВт. Якщо така пільга є, то її віднімають від спожитого обсягу, а далі розрахунок здійснюється за прийнятими тарифами. Розробіть у середовищі програмування Lazarus проект Оплата за електроенергію, у якому користувач вносить у текстове поле обсяг спожитої електроенергії, та позначає за допомогою елементів управління (визначте самостійно) наявність пільги. Після натиснення кнопки Розрахувати отримує у вікні повідомлення суми для оплати за електроенергію. Орієнтовний вигляд екранної форми і результати виконання програми у вікнах повідомлень:
                    Проаналізуйте програмний код, де враховується пільговий обсяг електроенергії:
                  • procedure TForm1.Button1Click(Sender: TObject);
                    var result, outgo, privilege, price1, price2, price3: real;
                    begin
                         privilege:=30;
                         price1:=0.71;
                         price2:=1.29;
                         price3:=1.64;
                         outgo:=StrToFloat(Edit1.Text);
                         if CheckBox1.Checked = True then outgo:=outgo-privilege;
                         if outgo < 100 then
                            result:=price1*outgo
                         else if (outgo >= 100) and (outgo < 600) then
                            result:=price2*outgo
                         else
                            result:=price3*outgo;
                         MessageDlg('Сума для оплати за електроенергію:' + #13#10 + FloatToStr(result) + ' грн.', mtInformation, [mbOk], 0);
                    end;
                  • Завдання 2У магазині на деякі товари (молоко, фрукти, овочі, печиво) прийняли систему знижок: товар, який не проданий за тиждень, наступного тижня дешевшає на 10%, ще через тиждень – на 20% і т.д. Розробіть у середовищі Lazarus проект Знижки, у якому користувач обирає товар й у текстове поле вносить номер тижня покупки
                    Після натиснення кнопки Розрахувати у вікні повідомлення – отримує ціну товару на дату покупки
                    Візьміть до уваги, що відсотки знижки розраховуються, починаючи із другого тижня за формулою:
                    Проаналізуйте рядки програмного коду, де вибираються товари, і як обчислюється ціна товару зі знижкою, в залежності від порядкового номера тижня:
                  • procedure TForm1.Button1Click(Sender: TObject);
                    var n, i: integer;
                        price, p_milk, p_fruits, p_vegetables, p_cookies:real;
                        result: string;
                    begin
                       n:=StrToInt(Edit1.Text);
                       p_milk:=30;
                       p_fruits:=55;
                       p_vegetables:=25;
                       p_cookies:=15;
                       if ComboBox1.ItemIndex = 0 then
                              price:=p_milk
                       else if ComboBox1.ItemIndex = 1 then
                              price:=p_fruits
                       else if ComboBox1.ItemIndex = 2 then
                              price:=p_vegetables
                       else
                              price:=p_cookies;
                    
                       if n >= 2 then
                          begin
                             i:=2;
                             while i <= n do
                                   begin
                                        price:=price*(100-i*10)/100;
                                        i:=i+1;
                                   end;
                             result:='Ціна товару зі знижкою: ' + FloatToStr(price) + ' грн.' + #13#10 + 'на ' + IntToStr(n) + ' тижні.';
                          end
                       else
                           result:='Ціна товару: ' + FloatToStr(price) + ' грн.' + #13#10 + 'Знижка відсутня.';
                       MessageDlg(result, mtInformation, [mbOk], 0);
                    end;
                  • Завдання 3. Один дідусь у селі вирішив розводити кроликів. Він знає, що ще в ХІІІ ст. Леонардо Пізанський вивів формулу закону розмноження кроликів, яка визначає ряд чисел, що отримали назву чисел Фібоначчі: 1, 1, 2, 3, 5, 8… Можна помітити, що починаючи з третього числа, кожне наступне дорівнює сумі двох попередніх, тобто має місце формула: 
                    Розробіть проект у середовищі програмування мовою Python, за яким після натиснення кнопки Розрахувати за введеним у текстове поле порядковим номером, що визначає послідовність етапу розмноження кроликів, у вікні повідомлення буде відображено відповідне число Фібоначчі. Наприклад, програма може мати такий вигляд екранної форми і відповідний результат:
                    Скористуйтеся програмним кодом, поданим нижче, для аналізу роботи алгоритму повторення:
                  • import tkinter
                    from tkinter import ttk
                    from tkinter import messagebox
                    main = tkinter.Tk()
                    main.title('Кролеферма')
                    
                    # створення об'єкта для отримання значення з текстового поля: Етап розведення кроликів
                    n_var = tkinter.StringVar()
                    
                    # опрацювання події натиснення кнопки
                    def button_click():
                        
                        # отримання значення введеного рядка Етап розведення кроликів і присвоєння змінній n
                        n = int(n_var.get())
                        
                        fibonacci = 0
                        fib1 = 1
                        for i in range(n):
                            fib2 = fib1
                            fib1 = fibonacci
                            fibonacci = fib1 + fib2
                    
                        # виведення повідомлення кількість кроликів на вибраному етапі розведення    
                        tkinter.messagebox.showinfo('Число кроликів', str(fibonacci))
                            
                    #створення текстового напису Введіть номер тижня та його розміщення на головній формі
                    label = tkinter.Label(text='Етап розведення кроликів')
                    label.pack()
                    
                    #створення текстового поля Етап розведення кроликів та його розміщення на головній формі
                    edit = tkinter.Entry(main, textvariable=n_var)
                    edit.pack()
                    
                    #створення кнопки та розміщення об'єкта на головній формі
                    button = tkinter.Button(main, text='Отримати число кроликів', command=button_click)
                    button.pack()
                    
                    #запуск опрацювання подій програми
                    main.mainloop()
                  • Завдання 4Члени математичного гуртка ознайомились із поняттям факторіала числа – добутку натуральних чисел від 1 до даного числа: 
                    Розробіть проект у середовищі програмування мовою Python, з допомогою якого можна буде порівняти значення факторіала числа та його квадрата. Спроектуйте інтерфейс екранної форми і вікна повідомлення (наприклад, як на зразку)
                    і проаналізуйте програмний код для реалізації завдання:
                  • import tkinter
                    from tkinter import ttk
                    from tkinter import messagebox
                    main = tkinter.Tk()
                    main.title('Порівняння')
                    
                    # створення об'єкта для отримання значення з текстового поля: Введіть число
                    n_var = tkinter.StringVar()
                    
                    # опрацювання події натиснення кнопки
                    def button_click():
                        
                        # отримання значення введеного рядка Етап розведення кроликів і присвоєння змінній n
                        n = int(n_var.get())
                        # початкове значення факторіала = 1
                        factorial = 1
                        # result - змінна для зберігання результатів порівнння, початкове значення - порожній рядок
                        result = ''
                        # знаходження факторіала введеного числа
                        for i in range(2, n+1):
                            factorial = factorial * i
                        # порівняння квадрата і факторіала введеного числа 
                        if factorial > n*n: 
                            result = '>'
                        elif factorial < n*n:
                            result = '<'
                        else:
                            result = '='
                        # виведення повідомлення про порівняння факторіала числа та його квадрата    
                        tkinter.messagebox.showinfo('Порівняння', 'Факторіал числа дорівнює: ' + str(factorial) + '\nКвадрат числа дорівнює: ' + str(n*n) + '\nФакторіал числа ' + str(result) + ' Квадрат числа')
                            
                    #створення текстового напису Введіть число та його розміщення на головній формі
                    label = tkinter.Label(text='Введіть число')
                    label.pack()
                    
                    #створення текстового поля Введіть число та його розміщення на головній формі
                    edit = tkinter.Entry(main, textvariable=n_var)
                    edit.pack()
                    
                    #створення кнопки та розміщення об'єкта на головній формі
                    button = tkinter.Button(main, text='Порівняти', command=button_click)
                    button.pack()
                    
                    #запуск опрацювання подій програми
                    main.mainloop()
                  Домашнє завдання
                  • Опрацювати підручник: §25 с. 170-177

                  Складання та реалізація алгоритмів з повтореннями для опрацювання величин

                  Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
                  Види навчальної діяльності
                  Обговорюємо
                      1. Що спільного й чим відрізняються цикли while та repeat у мові програмування Free Pascal?
                      2. Поясніть, коли припиняється виконання команд у тілі циклу для циклів із передумовою, післяумовою та циклу з лічильником. Чи можна вимушено перервати виконання циклу?
                      3. Чим відрізняються способи отримання випадкового значення величини в мовах програмування Free Pascal та Python?
                      Діємо разом
                      • Вправа 1. Число називається простим, якщо воно ділиться без остачі тільки на одиницю й на себе. Розробіть програму у середовищі Lazarus, за допомогою якої буде перевірятись, чи є простим число введене в текстове поле. 
                      1. Завантажте середовище Lazarus і створіть новий проект. 
                      2. Змініть значення властивостей об'єкта Form1, розмістіть на формі об'єкти, як на зразку, та надайте значень їх властивостям
                      3. Змініть шрифт і розмір текстових написів на формі.
                      4. Створіть процедуру опрацювання події натиснення кнопки Перевірити:
                        procedure TForm1.Button1Click(Sender: TObject);
                        var n, i: integer;
                        begin
                           n := StrToInt(Edit1.Text);
                           i := 1;
                           repeat
                              i := i+1
                           until n mod i = 0;
                           if n = i then
                              Edit2.Text := 'введене число просте'
                           else
                              Edit2.Text := 'введене число не просте'
                        end;
                      5. Запустіть проект на виконання для чисел: 15, 19. Перевірте отриманий результат.
                      6. Збережіть проект і завершіть роботу із середовищем програмування.
                      • Вправа 2Складіть програму мовою програмування Python, яка реалізує гру Відгадай число між комп'ютером та користувачем. Користувач не більше ніж за 6 спроб має відгадати «задумане» число з діапазону від 1 до 20. Якщо користувач відгадає, то на екран виводиться повідомлення про кількість спроб, якщо ні – виводиться «задумане» число..
                      1. У середовищі програмування мовою Python створіть новий файл з іменем Відгадай число.
                      2. В області програмного коду запишіть команди за зразком:
                      3. import random
                        guessesTaken = 0
                        myName = input('Привіт! Як тебе звати? ')
                        number = random.randint(1, 20)
                        print('Отже, ' + myName + ', я задумав число від 1 до 20.')
                        while guessesTaken < 6:
                            guess = int(input('Спробуй відгадати. '))
                            guessesTaken += 1
                            if guess < number:
                                print('Твоє число менше від задуманого.')
                            elif guess > number:
                                print('Твоє число більше за задумане.')
                            else:
                                break
                        if guess == number:
                            print('Дуже добре, ' + myName + '! Для відгадування тобі знадобилося ' + str(guessesTaken) + ' разів!')
                        else:
                            print('Ні. Число, яке я задумав: ' + str(number))
                      4. Проаналізуйте програмний код кожного рядка, запустіть проект на виконання. Якщо є помилки - виправте їх.
                      5. Збережіть проект і завершіть роботу із середовищем програмування.
                      Працюємо в парах
                      • Поміркуйте, чим відрізнятиметься проект Відгадай число, створений мовою програмування Python, від аналогічного, розробленого мовою програмування Free Pascal. Реалізуйте такий проект у середовищі Lazarus.
                      Виконуємо самостійно
                      • Завдання 1. Розробіть проект у середовищі програмування Lazarus, у якому із тексту, який вводиться з клавіатури, буде виводитися та його частина, що розташована: а) до першої крапки; б) від другої крапки й до кінця. Екранна форма може мати такий вигляд:
                        Використайте програмний код для процедур опрацювання подій натиснення кнопок: для першої кнопки
                        procedure TForm1.Button1Click(Sender: TObject);
                        var s, result: string;
                            i, d: integer;
                        begin
                          d := length(Edit1.Text);
                        
                          s := Edit1.Text;
                          for i:= 0 to d do
                              if copy(s, i, 1) = '.' then
                                   begin
                                     result:=copy(s, 0, i-1);
                                     break
                                   end;
                          MessageDlg(result, mtInformation, [mbOk], 0);
                        end;
                        і для другої кнопки
                        procedure TForm1.Button2Click(Sender: TObject);
                        var s, result: string;
                            k, i, d: integer;
                        begin
                            d := length(Edit1.Text);
                            k := 0;
                            s := Edit1.Text;
                            for i:= 0 to d do
                                if copy(s, i, 1) = '.' then
                                     begin
                                       k := k + 1;
                                       if k = 2 then
                                            begin
                                                 result:=copy(s, i+1, d);
                                                 break
                                            end;
                                     end;
                            MessageDlg(result, mtInformation, [mbOk], 0);
                        end;     
                        Проаналізуйте програмний код, де використовуються функції обробки текстових величин.
                      • Завдання 2Розробіть проект у середовищі програмування мовою Python, у якому у введеному виразі, що містить арифметичні операції без дужок і математичних функцій, у повідомленні буде виводитись, які дії потрібно виконати.
                        Проаналізуйте програмний код, поданий нижче, зверніть увагу на використання у програмі операторів розгалуження і повторення:
                      • import tkinter
                        from tkinter import ttk
                        from tkinter import messagebox
                        main = tkinter.Tk()
                        main.title('Повідомлення, які дії виконати у виразі')
                        
                        # створення об'єкта для отримання значення з текстового поля: Введіть вираз
                        text_var = tkinter.StringVar()
                        
                        # опрацювання події натиснення кнопки
                        def button_click():
                            # отримання значення введеного рядка і присвоєння змінній text
                            text = text_var.get()
                            # k_plus, k_minus, k_division, k_product  - змінні, що позначатимуть кіьбкість відповідних арифметичних операцій
                            k_plus, k_minus, k_division, k_product = 0, 0, 0, 0
                            # обчислюємо довжину введеного тексту
                            d = len(text)
                            # result - змінна для зберігання результуючого рядка
                            result = 'У виразі необхідно виконати такі дії: \n'
                            # виконуємо обхід у циклі по тексту для пошуку знаків арифметичних операцій (+ - * /)
                            for i in range(d):
                                if text[i] == '+':
                                    k_plus += 1
                                elif text[i] == '-':
                                    k_minus += 1
                                elif text[i] == '*':
                                    k_product += 1
                                elif text[i] == '/':
                                    k_division += 1
                                else:
                                    pass
                            if k_product != 0:
                                result += 'множення, ' + str(k_product) + ' разів\n'
                            if k_division != 0:
                                result += 'ділення, ' + str(k_division) + ' разів\n'
                            if k_plus != 0:
                                result += 'додавання, ' + str(k_plus) + ' разів\n'
                            if k_minus != 0:
                                result += 'віднімання, ' + str(k_minus) + ' разів'         
                            # виведення повідомлення про дії у арифметичному виразі
                            tkinter.messagebox.showinfo('Дії у виразі', result)
                                
                        #створення текстового напису Введіть вираз та його розміщення на головній формі
                        label = tkinter.Label(text='Введіть вираз')
                        label.pack()
                        
                        #створення текстового поля Введіть вираз та його розміщення на головній формі
                        edit = tkinter.Entry(main, textvariable=text_var)
                        edit.pack()
                        
                        #створення кнопки та розміщення об'єкта на головній формі
                        button = tkinter.Button(main, text='Вивести повідомлення', command=button_click)
                        button.pack()
                        
                        #запуск опрацювання подій програми
                        main.mainloop()
                      Домашнє завдання
                      • Опрацювати підручник: §25 с. 174-177