Сторінка 1

Показ дописів із міткою Табличні величини. Показати всі дописи
Показ дописів із міткою Табличні величини. Показати всі дописи

субота, 17 березня 2018 р.

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

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Виконуємо самостійно
  • Завдання 1. У магазині утворилася черга з 5-ти покупців. Час обслуговування кожного покупця в черзі подано в таблиці.
    Таблиця часу обслуговування покупця в черзі
    У вибраному середовищі програмування створіть проект Черга, у якому можна отримати: а) номер покупця, якого обслуговували найкоротший час; б) час найтривалішого обслуговування у черзі; в) лінійну таблицю або список із сумарним часом очікування свого обслуговування кожним покупцем. 
  • Створення проекту з використанням мови Object Pascal
  1. Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, як показано на скріншоті, надайте значення їхнім властивостям самостійно.
    Проект Черга
  2. Опишіть глобальний масив duration_of_service[1..5], який зберігатиме значення часу обслуговування для кожного покупця.
  3. var
      Form1: TForm1;
      duration_of_service: array[1..5] of integer = (140, 215, 75, 130, 85);
    implementation
  4. Створіть процедуру опрацювання події OnCreate для форми. Проаналізуйте програмний код і використайте його у процедурі. 
  5. procedure TForm1.FormCreate(Sender: TObject);
    var i: Integer;
    begin
       StringGrid1.Cells[0,0] := 'Покупці';
       StringGrid1.Cells[0,1] := 'Тривалість, с';
       StringGrid2.Cells[0,0] := 'Покупці';
       StringGrid2.Cells[0,1] := 'Тривалість, с';
       For i := 1 to 5 do
           begin
                StringGrid1.Cells[i,0] := IntToStr(i) + ' покупець';
                StringGrid2.Cells[i,0] := IntToStr(i) + ' покупець';
                // виведення елементів масиву у таблицю
                StringGrid1.Cells[i,1] := IntToStr(duration_of_service[i]);
           end;
    end;
  6. Створіть процедуру опрацювання події OnClick для кнопки Визначити. 
  7. procedure TForm1.Button1Click(Sender: TObject);
    var i, nmin, tmax, min, s: integer;
    begin
       // пошук номера найменшого
       nmin := 1;
       min := duration_of_service[1];
       for i := 2 to 5 do
           if duration_of_service[i] < min then
               begin
                    nmin := i;
                    min := duration_of_service[i];
               end;
       Edit1.Text := IntToStr(nmin);
    
       // пошук найбільшого елемента
       tmax := duration_of_service[1];
       for i := 2 to 5 do
           if duration_of_service[i] > tmax then tmax := duration_of_service[i];
       Edit2.Text := IntToStr(tmax);
    
       // створення та виведення нової таблиці із часом очікування
       s := 0;
       for i := 1 to 5 do
           begin
                s := s + duration_of_service[i];
                StringGrid2.Cells[i,1] := IntToStr(s);
           end;
       StringGrid2.Visible := True;
    end;
  8. Виконайте проект і проаналізуйте результати. Якщо є помилки, виправте їх і збережіть зміни.
    Проект Черга
    Зверніть увагу, для компонента StringGrid2 змінюється значення його властивості Visible, що дозволяє приховувати компонент після створення форми і показувати його на формі після натискання кнопки Визначити.
  • Створення проекту з використанням мови Python
  1. Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Обслуговування черги.
  2. У вікні редактора коду запишіть команди для реалізації проекту. Проаналізуйте кожен рядок програмного коду.
  3. # список із значеннями часу обслуговування 5-ти покупців
    service_time = [140, 215, 75, 130, 85]
    # номер покупця, якого обслуговували найшвидше
    min_n = service_time.index(min(service_time))
    # максимальне значення списку - час найтривалішого обслуговування у черзі
    max_element = max(service_time)
    # новий список - міститиме значення часу очікування у черзі для кожного покупця
    waiting_time = []
    # t - час очікування
    t = 0
    
    print('Час обслуговування: ')
    for i in range(len(service_time)):
        print('{0}-й покупець: {1} сек.'.format(i + 1, service_time[i]))
        t += service_time[i]
        waiting_time.append(t)
        
    print('\nНомер покупця, якого обслуговували найшвидше:', min_n + 1)
    print('\nЧас найтривалішого обслуговування у черзі:', max_element, 'ceк.')
    
    print('\nТривалість очікування: ')
    for i in range(len(waiting_time)):
        print('{0}-й покупець: {1} сек.'.format(i + 1, waiting_time[i]))
  4. Запустіть проект на виконання. Якщо є помилки - виправте їх. Збережіть зміни.
  • Завдання 2. Створіть проект Табель, у якому реалізовано електронний табель. У проекті передбачте, що в лінійній таблиці задають назви предметів, які вивчає учень. Елементи управління екранної форми передбачають можливість: а) за номером предмета дізнатись оцінку з відповідного предмета; б) отримати дані про максимальну оцінку з предметів, що вивчаються; в) отримати кількість предметів, які мають найвищу та найнижчу оцінки; г) середній бал успішності.
  • Створення проекту з використанням мови Object Pascal
  1. Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, самостійно надайте значення їхнім властивостям.
    Проект Табель
  2. Створіть процедуру опрацювання події OnClick для кнопки Обчислити. Використовуючи поданий програмний код, проаналізуйте і застосуйте його. 
  3. procedure TForm1.Button1Click(Sender: TObject);
    var   i, n, oz, max, kmax, kmin, min: integer;
          s: real;
          a: array[1..7] of  integer;
    begin
       // введення елементів масиву
       for i := 1 to 7 do
           a[i] := StrToInt(StringGrid1.cells[i,1]);
    
       // виведення елемента масиву за номером
       n := StrToInt(Edit1.Text);
       oz := a[n];
       Edit2.Text := IntToStr(oz);
    
       // знаходження найбільшого та найменшого елемента масиву, суми  елементів
       max := a[1];
       min := a[1];
       s := a[1];
       for i := 2 to 7 do
           begin
                s := s + a[i];
                if a[i] < min then min := a[i];
                if a[i] > max then max := a[i];
           end;
       // виведення найбільшого та середнього значення елеменів масиву
       s := s / 7;
       Edit3.Text := IntTostr(max);
       Edit6.Text := FloatToStr(s);
    
       // знаходження кількості найбільших та найменших елементів масиву
       kmin := 0;
       kmax := 0;
       for i := 1 to 7 do
           begin
                if a[i] = max then kmax := kmax + 1;
                if a[i] = min then kmin := kmin + 1;
           end;
       Edit4.Text := IntToStr(kmin);
       Edit5.Text := IntToStr(kmax);
    end;
  4. Запустіть проект на виконання і проаналізуйте результати виконання. 
    Проект Табель
    У разі появи помилок, виправте їх і збережіть зміни.
  • Завдання 3. Створіть проект Шаховий турнір за поданою таблицею результатів шкільного шахового турніру, у якому брало участь 5 команд. Визначте команду-переможницю і призерів турніру.
  • Створення проекту з використанням мови Object Pascal
  1. Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, самостійно надайте значення їхнім властивостям.
    Проект Шаховий турнір
    Компонент StringGrid призначено для виведення турнірної таблиці (таблиця заповнюється через контекстне меню, пункт Змінити StringGrid...); компонент Memo  - для виведення масиву рейтингу; компонент ListBox - для виведення списку призерів.
  2. Опишіть глобальний масив Tur: array[1..5, 1..6] of Integer; для збереження турнірної таблиці.
  3. var
      Form1: TForm1;
      Tur: array[1..5, 1..6] of Integer;
    implementation
  4. У процедурі обробки події OnCreate для форми запишіть оператори для виведення заголовків рядків і стовпців таблиці StringGrid1. Заголовку шостого стовпця надайте значення Сума.
  5. procedure TForm1.FormCreate(Sender: TObject);
    var i, j: Integer;
    begin
      For i := 1 to 5 do StringGrid1.Cells[0, i] := IntToStr(i);
      For j := 1 to 5 do StringGrid1.Cells[j, 0] := IntToStr(j);
      StringGrid1.Cells[6, 0] := 'Сума';
    end;
  6. У процедурі обробки події OnClick для кнопки Занести бали до масиву запишіть програмний код, що реалізує читання значень із таблиці StringGrid1 і присвоєння цих значень елементам масиву Tur.
  7. procedure TForm1.Button1Click(Sender: TObject);
    var i, j: Integer;
    begin
      For i := 1 to 5 do
      For j := 1 to 5 do
      If Length(StringGrid1.Cells[j,i]) <> 0
         then Tur[i,j] := StrToInt(StringGrid1.Cells[j,i])
         else Tur[i,j] := 0;
    end;
  8. Обчисліть суму балів кожної команди-учасниці. Для цього в процедурі обробки події OnClick для кнопки Знайти суму балів команд запишіть оператори для заповнення шостого стовпця таблиці.
  9. procedure TForm1.Button2Click(Sender: TObject);
    var sum, i, j: Integer;
    begin
      For i := 1 to 5 do
          begin
            sum := 0;
            For j := 1 to 5 do Sum := sum + Tur[i,j];
            Tur[i,6] := sum;
            StringGrid1.Cells[6,i] := IntToStr(Tur[i,6]);
          end;
    end;
  10. Визначте рейтинг команд і розташуйте їхні номери за зменшенням суми балів. Найбільша сума балів, яку може отримати кожна команда в ході турніру, дорівнює 8 (чотири перемоги).
    Турнірна таблиця
    Тому для кнопки Визначити рейтинг процедура додавання до масиву Memo1.Lines[k] номерів команд за зменшенням суми балів може бути наступною:
  11. procedure TForm1.Button3Click(Sender: TObject);
    var i, N, k: Integer;
    begin
      k := 0;
      For N := 8 downto 0 do
          For i := 1 to 5 do
              If Tur[i, 6] = N Then
                 begin
                       Memo1.Lines[k] := IntToStr(i);
                       k := k + 1;
                 end;
    end;
  12. У процедурі обробки події OnClick для кнопки Визначити переможців запишіть програмний код для виведення трьох перших елементів масиву Memo1.Lines[k] як номерів команд-призерок турніру.
  13. procedure TForm1.Button4Click(Sender: TObject);
    begin
       ListBox1.Items.Add('І місце - ' + Memo1.Lines[0] + ' команда.');
       ListBox1.Items.Add('ІІ місце - ' + Memo1.Lines[1] + ' команда.');
       ListBox1.Items.Add('ІІІ місце - ' + Memo1.Lines[2] + ' команда.');
    end;
  14. Перевірте правильність роботи програми, заповнивши турнірну таблицю, як на зразку. Числа в таблиці означають: 2 - виграш, 1 - нічия, 0 - програш. 
    Проект Шаховий турнір
  15. Запустіть проект на виконання для різних варіантів заповнення турнірної таблиці.
  16. Збережіть проект. Зробіть висновок: як застосувати алгоритми пошуку значень у масиві до розв'язування задач.
Домашнє завдання
  • Опрацювати підручник: повторити §36-§39, с. 177-224 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)

Опрацювання двовимірних масивів даних

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Діємо разом
  • Вправа 1. На гральній дошці, яка має форму прямокутної таблиці із 5 стовпців і 5 рядків, випадково розміщуються білі і чорні фігури. У середовищі Lazarus створіть проект Гра, у якому після запуску гри фігури розташовуються у таблиці випадковим чином й виводиться повідомлення, фігур якого кольору на полі для гри виявилося більше. 
  • Створення проекту з використанням мови Object Pascal
  1. Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, подані на скріншоті, надайте значення їхнім властивостям самостійно.
    Проект Кількість білих і чорних фігур на дошці
  2. Створіть процедуру опрацювання події натиснення кнопки Старт. Скористайтеся програмним кодом, поданим нижче, для реалізації проекту. 
  3. procedure TForm1.Button1Click(Sender: TObject);
    var a: array[1..5,1..5] of string;
        i, j, k: integer;
    begin
      Randomize;
      k := 0;
      for i := 1 to 5 do
          for j := 1 to 5 do
              begin
                if random(2) = 0 then
                                     a[i,j] := 'w' // w - white (білий)
                                 else
                                     a[i,j] := 'b'; // b - black (чорний)
                StringGrid1.Cells[i,j] := a[i,j];
                // обчислення кількості білих фігур
                if StringGrid1.Cells[i,j] = 'w' then k := k + 1;
              end;
      Edit1.Text := IntToStr(k);
      Edit2.Text := IntToStr(25 - k);
    end;
  4. Виконайте проект.
    Проект Кількість білих і чорних фігур на дошці
    Виправте помилки, якщо такі з'являться, збережіть зміни.
  • Вправа 2. У деяких видах спортивних змагань виступ спортсмена оцінюється десятьма суддями. Із сукупності виставлених ними балів вилучається найвищий і найнижчий бали. На основі решти балів обчислюється середнє арифметичне, яке й зараховується спортсмену як оцінка його виступу. Судді користуються системою, виставляючи оцінки від 0 до 10. Розробіть проект Спортивні змагання, у якому за виставленими суддівськими оцінками та вказаними правилами розрахунку визначити середню оцінку виступу спортсмена.
  • Створення проекту з використанням мови Object Pascal
  1. Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, надайте значенням їхнім властивостям самостійно.
    Проект Спортивні змагання
  2. Створіть процедуру опрацювання події OnCreate, проаналізуйте і використайте наступний програмний код у цій процедурі.
  3. procedure TForm1.FormCreate(Sender: TObject);
    var i: integer;
    begin
       StringGrid1.Cells[0,0] := 'Суддя';
       StringGrid1.Cells[0,1] := 'Оцінка';
       for i := 1 to 10 do
          StringGrid1.Cells[i,0] := IntToStr(i);
    end;
  4. Створіть процедуру опрацювання події натиснення кнопки Підсумок. Скористайтеся наступним програмним кодом для даної процедури.
  5. procedure TForm1.Button1Click(Sender: TObject);
    var i, max, min: integer;
        s: real;
        a: array[1..10] of integer;
    begin
       // введення елементів масиву випадково із діапазону
       Randomize;
       for i := 1 to 10 do
          begin
            a[i] := random(10);
             StringGrid1.Cells[i,1] := IntToStr(a[i]);
          end;
       // пошук найбільшого, найменшого елемента масиву та суми значень елементів
       max := a[1];
       min := a[1];
       s := a[1];
       for i := 2 to 10 do
          begin
             if a[i] < min then min := a[i];
             if a[i] > max then max := a[i];
             s := s + a[i];
          end;
       s := s - min - max;
       s := s / 8;
       Edit1.Text := FloatToStr(s);
    end;
  6. Виконайте проект.
    Проект Спортивні змагання
    Виправте помилки, якщо такі з'являться, збережіть зміни.
Працюємо в парах
  1. Запишіть оператор для обчислення суми елементів першого рядка масиву A[1..5,1..5].
  2. Запишіть фрагмент програмного коду для заміни нулями парних елементів масиву A[1..5,1..5].
  3. Знайдіть максимальний елемент другого стовпця масиву B[1..4,1..5].
    Виконуємо самостійно
    • Завдання 1. У 5 міст відправили вагони з десятьма різними видами товарів. Створіть проект Товарообіг у середовищі Lazarus для обчислення загальної маси продукції, відправленої в кожне місто, і загальної маси продукції кожного виду товару.
    1. У середовищі Lazarus створіть новий проект і розмістіть на екранній формі об'єкти, як на скріншоті, надайте значенням їхнім властивостям самостійно.
      Проект Товарообіг
    2. Опишіть глобальні змінні і константу для збереження масивів: towns - назви 5-ти міст, goods - масив із 10 назв різних видів товарів, mass - двовимірний масив цілих значень маси товару кожного виду.
    3. const towns: array[1..5] of string = ('Київ', 'Луцьк', 'Дніпро', 'Одеса', 'Харків'); // масив назв міст
      var
        Form1: TForm1;
        goods: array[1..10] of string;   // масив товарів
        mass: array[1..5,1..10] of integer; // масив значень маси товарів
      implementation
    4. Створіть процедуру опрацювання події OnCreate проаналізувавши і скориставшись поданим нижче програмним кодом.
    5. procedure TForm1.FormCreate(Sender: TObject);
      var i, j: Integer;
      begin
        ComboBox1.Items.Clear; // очищення списку Обрати місто
        ComboBox2.Items.Clear; // очищення списку Обрати товар
        For i := 1 to 5 do
             begin
                  // формування у таблиці назв міст
                  StringGrid1.Cells[0,i] := towns[i];
                  // заповнення списку Обрати місто
                  ComboBox1.Items.Add(towns[i]);
             end;
      
        For i := 1 to 10 do
             begin
                  // формування у таблиці назв товарів
                  goods[i] := 'Товар' + IntToStr(i);
                  StringGrid1.Cells[i,0] := goods[i];
                  // заповнення списку Обрати товар
                  ComboBox2.Items.Add(goods[i]);
             end;
        // заповнення масиву mass і таблиці значеннями маси товару випадковим чином
        Randomize;
        for i := 1 to 5 do
             for j := 1 to 10 do
                  begin
                     mass[i,j] := random(100) + random(50);
                     StringGrid1.Cells[j,i] := FloatToStr(mass[i,j]);
                  end;
      end;
    6. Створіть процедуру обробки події OnClick для кнопки Обчислити. Використайте для цього програмний код, поданий нижче.
    7. procedure TForm1.Button1Click(Sender: TObject);
      var i, j, s_town, s_good, row, col: Integer;
      begin
        s_town := 0; // сума маси продукції, відправленої в обране місто
        s_good := 0; // сума маси продукції обраного виду товару
      
        // вибір із списку міст
        row := ComboBox1.ItemIndex;
        If row <> -1 then
            begin
                 for j := 1 to 10 do
                     s_town := s_town + mass[row+1,j];
                 Edit1.Text := IntToStr(s_town);
            end
        else
            Edit1.Text := '';
      
        // вибір із списку товарів
        col := ComboBox2.ItemIndex;
        If col <> -1 then
            begin
                 for i := 1 to 5 do
                      s_good := s_good + mass[i,col+1];
                 Edit2.Text := IntToStr(s_good);
            end
        else
            Edit2.Text := '';
      end;
    8. Перевірте роботу програми, запустивши проект на виконання.
      Проект Товарообіг
      Виправте помилки, якщо такі з'являться, збережіть зміни.
    • Завдання 2. Створіть проект Робота з двовимірним масивом у середовищі Lazarus. Заповніть двовимірний масив a[1..6,1..7] випадковими цілими числами з діапазону [-50;50] і визначте: а) суму елементів k-того рядка; б) середні арифметичні значення елементів кожного рядка; в) максимальні значення для кожного стовпця; г) кількість додатних елементів k-того рядка.
    1. Створіть інтерфейс програми згідно зразка. Для таблиці StringGrid1 задайте значення властивостей ColCount = 8, RowCount = 7.
      Проект Робота з двовимірним масивом
    2.  Опишіть масив a[1..6,1..7] як глобальний.
    3. var
        Form1: TForm1;
        a: array[1..6,1..7] of Integer;
      implementation
    4. У процедурі обробки події OnCreate для форми запрограмуйте: виведення заголовків рядків і стовпців таблиці StringGrid1; заповнення масиву a випадковими числами з діапазону [-50;50] і виведення значень елементів до таблиці StringGrid1.
    5. procedure TForm1.FormCreate(Sender: TObject);
      var i, j:integer;
      begin
         Randomize;
         For i := 1 to 6 do StringGrid1.Cells[0,i] := IntToStr(i);
         For j := 1 to 7 do StringGrid1.Cells[j,0] := IntToStr(j);
         For i := 1 to 6 do
             For j := 1 to 7 do
                 begin
                      a[i,j] := random(100) - 50; // обчислення елемента масиву a
                      StringGrid1.Cells[j,i] := IntToStr(a[i,j]); // виведення a[i,j]
                 end;
      end;
    6. У процедурі обробки події OnClick для кнопки Сума елементів рядка запрограмуйте: введення номера рядка k з текстового поля Edit1; знаходження суми елементів k-того рядка; виведення значення суми в текcтове поле Edit2.
    7. procedure TForm1.Button1Click(Sender: TObject);
      var s_row, j, k: integer;
      begin
         s_row := 0; // сума у вибраному рядку
         k := StrToInt(Edit1.Text); // номер рядка
         for j := 1 to 7 do
             begin
                  s_row := s_row + StrToInt(StringGrid1.Cells[j,k]);
             end;
         Edit2.Text := IntToStr(s_row);
      end;
    8. Створіть процедуру обробки події OnClick для кнопки Середні арифметичні по рядках. Проаналізуйте, які дії виконуються для кожного рядка програмного коду, поданого нижче.
    9. procedure TForm1.Button2Click(Sender: TObject);
      var i, j, sum: integer;
          sr: real;
          r: String;
      begin
         r := '';
         For i := 1 to 6 do
             begin
                  sum := 0; // перед початком додавання сума обнуляється
                  For j := 1 to 7 do sum := sum + a[i,j]; // додавання елементів і-го рядка
                  sr := sum / 7; // середнє арифметичне і-го рядка
                  r := r + FormatFloat('0.0', sr) + ' '; // формування рядка відповіді r
             end;
         Edit3.Text := r;
      end;
    10. Створіть процедуру обробки події OnClick для кнопки Максимальні у стовпцях, скориставшись наступним програмним кодом.
    11. procedure TForm1.Button3Click(Sender: TObject);
      var i, j, max_col: integer;
          r: String;
      begin
         r := '';
         For j := 1 to 7 do
             begin
                  max_col := StrToInt(StringGrid1.Cells[j,1]);
                  For i := 1 to 6 do
                      if StrToInt(StringGrid1.Cells[j,i]) > max_col then
                         max_col := StrToInt(StringGrid1.Cells[j,i]);
                  r := r + IntToStr(max_col) + ' '; // формування рядка відповіді r
             end;
         Edit4.Text := r;
      end;
    12. Створіть процедуру обробки події OnClick для кнопки Кількість додатних рядка, скориставшись наступним програмним кодом (номер рядка задається в текстовому полі Edit5).
    13. procedure TForm1.Button4Click(Sender: TObject);
      var k_row, j, k: integer;
      begin
         k_row := 0; // кількість додатних у вибраному рядку
         k := StrToInt(Edit5.Text); // номер рядка
         for j := 1 to 7 do
             begin
                  if StrToInt(StringGrid1.Cells[j,k]) > 0 then
                     k_row := k_row + 1;
             end;
         Edit6.Text := IntToStr(k_row);
      end;
    14. Перевірте роботу програми. Збережіть проект.
    Домашнє завдання
    • Опрацювати підручник: §39 с. 217-222 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)

    неділя, 11 березня 2018 р.

    Двовимірний масив даних

    Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
    Види навчальної діяльності
    Обговорюємо
    1. Опишіть двовимірний масив цілих чисел із 5 рядків і 8 стовпців.
    2. Як запрограмувати введення значень елементів двовимірного масиву з клавіатури?
    3. Як заповнити двовимірний масив випадковими числами?
    4. Запишіть фрагмент програми, що дозволяє створити такі масиви:
      Масиви цілих чисел
    Діємо разом
    • Вправа 1. Створіть проект, у якому знаходять суму додатних елементів заданої таблиці.
    • Створення проекту з використанням мови Object Pascal
    1. Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, як показано на скріншоті.
      Проект Сума додатних елементів двовимірної таблиці
    2. Заповніть таблицю значеннями. Для цього в контекстному меню об'єкта StringGrid1 оберіть команду Змінити StringGrid1... і  у вікні редактора введіть потрібні значення.
    3. Створіть процедуру опрацювання події натиснення кнопки Розрахувати. У вікні редактора коду опишіть змінні, які будуть використовуватись у проекті: а - масив дійсних чисел, i (номер рядка) та j (номер стовпця) - номери (індекси) елемента двовимірного масиву, s - сума додатних елементів масиву.
    4. var i, j : integer;
          s : real;
          a : array[1..4, 1..4] of real;
    5. У вікні редактора коду запишіть команди для присвоювання значень елементам масиву із таблиці, їх опрацювання та виведення значення суми додатних елементів. 
    6. begin
           s := 0;
           for i := 1 to 4 do
              for j := 1 to 4 do
                 begin
                   a[i,j] := StrToFloat(StringGrid1.Cells[i,j]);
                   if a[i,j] > 0 then s := s + a[i,j];
                 end;
           Edit1.Text := FloatToStr(s);
      end;
    7. Виконайте проект і проаналізуйте результати. Якщо є помилки, виправте їх і збережіть зміни. Обчисліть суму додатних елементів самостійно і порівняйте з результатами роботи програми.
    • Створення проекту з використанням мови Python
    1. Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Сума додатних елементів.
    2. У вікні редактора коду запишіть команди для реалізації поставленого завдання.
    3. # імпорт модуля генерування випадкових чисел
      import random
      # створюємо два порожніх списки для утворення вкладеного
      a = []
      b = []
      for i in range(4):
          for j in range(4):
              # додаємо згенеровані виипадковим чином елементи до списку a
              a.append(round(random.uniform(-10, 10), 1))
          # формуємо список а у списку b
          b.append(a[-4:])
      # вводимо змінну s для обчислення суми елементів, значення яких більші нуля
      s = 0
      for i in range(4):
          for j in range(4):
              if b[i][j] > 0:
                  s += b[i][j] # знаходимо суми відібраних елементів
      # виводимо вкладений список
      print(b)
      # виводимо результат суми
      print(round(s, 1))
      
    4. Запустіть проект на виконання. Якщо є помилки - виправте їх. Обчисліть суму додатних елементів самостійно і порівняйте з результатами роботи програми.
    • Вправа 2. На 10 земельних ділянках проведено обстеження рівня pH ґрунту. Результати обстеження подано в таблиці. Створіть проект Ґрунти, у якому можна визначити кількість земельних ділянок з кислими (pH < 7), нейтральними (pH = 7) та лужними (pH > 7) ґрунтами.
    • Створення проекту з використанням мови Object Pascal
    1. Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, самостійно надайте значення їхнім властивостям.
    2. Створіть процедуру опрацювання події натискання на кнопку Визначити. Проаналізуйте програмний код нижче і використайте його у процедурі. 
    3. procedure TForm1.Button1Click(Sender: TObject);
      var i, kk, kn, kl: integer;
          a: array[1..10] of integer;
      begin
         kk := 0;
         kn := 0;
         kl := 0;
         for i := 1 to 10 do
            begin
              a[i] := StrToInt(StringGrid1.Cells[i,1]);
              if a[i] < 7 then
                 kk := kk + 1
              else if a[i] > 7 then
                       kl := kl + 1
                   else
                       kn := kn + 1
            end;
         Edit1.Text := IntToStr(kk);
         Edit2.Text := IntToStr(kn);
         Edit3.Text := IntToStr(kl);
      end;
    4. Запустіть проект на виконання і проаналізуйте результати виконання. У разі появи помилок, виправте їх і збережіть зміни.
      Виконуємо самостійно
      • Завдання 1. У ході вивчення теми 5 учнів отримали оцінки з 10 тестів. Створіть проект у середовищі Lazarus під назвою Тестові оцінки для визначення суми балів, набраної кожним учнем.
        Проект Тестові оцінки
        Проаналізуйте програмний код, наведений нижче і скористайтеся ним для реалізації проекту.
      • procedure TForm1.FormCreate(Sender: TObject);
        var i: integer;
        begin
           // заповнення заголовків стовпців і рядків двовимірної таблиці
           for i := 1 to 10 do
              StringGrid1.Cells[i,0] := 'Тест ' + IntToStr(i);
           for i := 1 to 5 do
              StringGrid1.Cells[0,i] := 'Учень ' + IntToStr(i);
        end;
        
        procedure TForm1.Button1Click(Sender: TObject);
        var i, j, k, sum: integer;
        begin
           // очищення поля з результатами
           ListBox1.Clear;
           // заповнення двовимірного масиву оцінками
           Randomize;
           for i := 1 to 10 do
               for j := 1 to 5 do
                  StringGrid1.Cells[i,j] := IntToStr(random(12));
           // обчислення суми оцінок за тести по кожному учню і виведення результатів
           ListBox1.Items.Add('Сума балів за тести: ');
           k := 1;    // лічильник рядка таблиці
           sum := 0;  // початкове значення суми
           for j := 1 to 5 do
              begin
                   for i := 1 to 10 do
                      begin
                        sum := sum + StrToInt(StringGrid1.Cells[i,j]);
                      end;
                   ListBox1.Items.Add(StringGrid1.Cells[0,k] + ': ' + IntToStr(sum) + ' балів.');
                   k := k + 1;
              end;
        end;
      • Завдання 2. Магічний квадрат - квадратна таблиця (n = m), в якій суми чисел кожного рядка, стовпця і діагоналі є рівними. Створіть у середовищі Lazarus ігровий проект, в якому гравець (або програмно випадковим чином) має заповнити порожні клітинки квадрата 3х3 числами від 4 до 12 таким чином, щоб утворити магічний квадрат.
        Проект Магічний квадрат
        Проаналізуйте програмний код (зверніть увагу, поданий увесь код із файлу
        unit1.pas) і використайте його для реалізації проекту.
      • unit Unit1;
        
        {$mode objfpc}{$H+}
        
        interface
        
        uses
          Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
          Grids;
        
        type
        
          { TForm1 }
        
          TForm1 = class(TForm)
            Button1: TButton;
            Button2: TButton;
            Edit1: TEdit;
            Edit2: TEdit;
            Edit3: TEdit;
            Edit4: TEdit;
            Edit5: TEdit;
            Edit6: TEdit;
            Edit7: TEdit;
            Edit8: TEdit;
            Label1: TLabel;
            StringGrid1: TStringGrid;
            procedure Button1Click(Sender: TObject);
            procedure Button2Click(Sender: TObject);
            procedure FormCreate(Sender: TObject);
          private
            { private declarations }
          public
            { public declarations }
          end;
        
        var
          Form1: TForm1;
          mk: array[1..3, 1..3] of Integer; // числа магічного квадрата
          Numbers: array[1..9] of Integer; // масив чисел від 4 до 12
          edit_array: array[1..8] of TEdit;
        implementation
        
        {$R *.lfm}
        
        { TForm1 }
        
        procedure TForm1.FormCreate(Sender: TObject);
        begin
          edit_array[1] := Edit1;
          edit_array[2] := Edit2;
          edit_array[3] := Edit3;
          edit_array[4] := Edit4;
          edit_array[5] := Edit5;
          edit_array[6] := Edit6;
          edit_array[7] := Edit7;
          edit_array[8] := Edit8;
        end;
        
        // кнопка Нова гра
        procedure TForm1.Button1Click(Sender: TObject);
        var i, j, k, n: Integer;
        begin
          Randomize;
          For i := 1 to 3 do // заповнення масиву mk нулями
              For j := 1 to 3 do mk[i,j] := 0;
          For i := 0 to 2 do StringGrid1.Rows[i].Clear; // очищення таблиці
          For i := 1 to 9 do Numbers[i] := i + 3; // заповнення масиву Numbers
          k := 0;
          While k < 9 do
              begin // k — лічильник виведених до таблиці значень
          { задавання індексів клітинок для початкових значень }
                  i := random(3) + 1;
                  j := random(3) + 1;
                  n := random(12) + 1; // випадковий вибір числа з масиву Numbers
                  If (mk[i,j] = 0) and (Numbers[n] <> 0) Then
                     begin
                          { якщо клітинка mk[i,j] вільна і значення Numbers[n] ще не задіяне }
                          mk[i,j] := Numbers[n];
                          k := k + 1;
                          Numbers[n] := 0; // використаний елемент Numbers[n] обнуляється
                          StringGrid1.Cells[j-1,i-1] := IntToStr(mk[i,j]);
                     end;
              end;
        end;
        
        // кнопка Перевірити
        procedure TForm1.Button2Click(Sender: TObject);
        var i, j, sum_row, sum_col, sum_diag: Integer;
            prap: Boolean;
        begin
            // присвоєння масиву значень, якими заповнений квадрат
            For i := 1 to 3 do
                For j := 1 to 3 do mk[i,j] := StrToInt(StringGrid1.Cells[j-1,i-1]);
            // обчислення суми по рядках (сума має = 24)
            prap := True;
            For i := 1 to 3 do
                begin
                     sum_row := 0;
                     For j := 1 to 3 do
                        sum_row := sum_row + mk[i,j];
                     edit_array[i].Text := IntToStr(sum_row);
                     If sum_row <> 24 Then
                        prap := False;
                end;
        
            // обчислення суми по стовцях (сума має = 24)
            For j := 1 to 3 do
                begin
                     sum_col := 0;
                     For i := 1 to 3 do
                        sum_col := sum_col + mk[i,j];
                     edit_array[j+3].Text := IntToStr(sum_col);
                     If sum_col <> 24 Then
                        prap := False;
                end;
        
            // обчислення суми по діагоналі (зліва-направо, згори-вниз) (сума має = 24)
            sum_diag := 0;
            for i := 1 to 3 do
               sum_diag := sum_diag + StrToInt(StringGrid1.Cells[i-1,i-1]);
            edit_array[7].Text := IntToStr(sum_diag);
            if sum_diag <> 24 then prap := False;
        
            // обчислення суми по діагоналі (cправа-наліво, згори-вниз) (сума має = 24)
            sum_diag := 0;
            for i := 1 to 3 do
               sum_diag := sum_diag + StrToInt(StringGrid1.Cells[3-i,i-1]);
            edit_array[8].Text := IntToStr(sum_diag);
            if sum_diag <> 24 then prap := False;
        
            // виведення результату
            If prap = True Then Label1.Caption := 'Перемога!'
            else Label1.Caption := 'Спробуй ще!';
        end;
        end.
        Магічний квадрат
      Домашнє завдання
      • Опрацювати підручник: §38 с. 212-217 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)

      Візуалізація елементів табличної величини за допомогою графічних примітивів

      Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
      Види навчальної діяльності
      Обговорюємо
      1. Опишіть порядок створення масиву автофігур типу TShape.
      2. Який графічний метод використовують для побудови гістограми; кругової діаграми?
      3. Опишіть алгоритм побудови кругової діаграми.
      Діємо разом
      • Вправа 1. Побудова лінійчатої діаграми.
      • Створення проекту з використанням мови Object Pascal
      1. Відкрийте середовище Lazarus, створіть новий проект, у якому відображатимуться у вигляді лінійчатої діаграми дані з таблиці.
        Таблиця Довжина річок в Україні
      2. Розробіть інтерфейс програми згідно скріншота.
        Проект Довжина річок в Україні
      3. На форму додайте компонент Panel як контейнер для компонентів Image і Shape. Розмістіть на панелі компонент Image і 4 компоненти Shape (за кількістю елементів у масиві). Для створення легенди діаграми на форму додамо 4 компоненти Label. 
      4. Об'єкти TShape належать до типу даних TShape. У розділі опису глобальних змінних опишемо наступним чином.
        var
          Form1: TForm1;
          sh: array[1..4] of TShape; // масив типу TShape
        
        implementation
        Тепер можна працювати з автофігурами, звертаючись до них, як до елементів масиву sh[i]. Аналогічно створимо масив типу TLabel для об'єктів Label.
        var
          Form1: TForm1;
          sh: array[1..4] of TShape; // масив типу TShape
          lb: array[1..4] of TLabel; // масив типу TLabel
        
        implementation
      5. Заповнення масивів відбуватиметься під час створення форми.
      6. procedure TForm1.FormCreate(Sender: TObject);
        begin
          Image1.Canvas.Brush.Color := clWhite; // встановлюємо колір області
          Image1.Canvas.FillRect(Image1.ClientRect); // побудови діаграми
          { заповнення масиву типу TShape }
          sh[1] := Shape1; { 1-й елемент масиву sh — фігура з іменем Shape1 }
          sh[2] := Shape2; sh[3] := Shape3; sh[4] := Shape4;
          { заповнення масиву типу TLabel }
          lb[1] := Label1;   lb[2] := Label2; lb[3] := Label3; lb[4] := Label4;
        end;
      7. У процедурі обробки події OnClick для кнопки Побудувати діаграму створимо масиви-константи назв річок і довжин річок. Числові значення досить великі, тому значенням властивості Width елементів масиву автофігур присвоїмо значення елементів масиву довжин річок D[i], зменшені в 5 разів.
        sh[i].Width := D[i] div 5;
      8. Код процедури обробки події OnClick для кнопки Побудувати діаграму може бути таким.
      9. procedure TForm1.Button1Click(Sender: TObject);
        const D: array[1..4] of Integer = (981, 705, 591, 174);
        Nazva: array[1..4] of String = ('Дніпро', 'Дністер', 'Десна', 'Дунай');
        var   i: Integer;
        begin
          For i := 1 to 4 do
              begin
                sh[i].Width := D[i] div 5;
                lb[i].Caption := Nazva[i];
                { вирівнювання об'єкта Shape і відповідного об'єкта Label}
                sh[i].Top := 20*i;   lb[i].Top := 20*i;
                { виведення тексту на полотно здійснюється за допомогою методу TextOut(x,y,Text); підписи даних виводяться з відступом 20 пікселів від правого краю об'єкта Shape }
                Image1.Canvas.TextOut (D[i] div 5+20, 20*i, IntToStr(D[i]));
              end;
        end;
      10. Вікно програми з діаграмою, побудованою за даними таблиці довжин річок в Україні, може мати наступний вигляд.
        Довжина річок в Україні
      • Вправа 2. Побудова гістограми з використанням графічних методів.
      • Створення проекту з використанням мови Object Pascal
      1. Відкрийте середовище Lazarus, створіть новий проект, у якому за допомогою гістограми буде показана успішність учнів з кількох начальних предметів. Розмістіть на формі такі елементи інтерфейсу, як на скріншоті.
        Проект Гістограма успішності учнів
      2. Код процедури побудови гістограми може бути таким.
      3. procedure TForm1.Button1Click(Sender: TObject);
        const Ndu: array[1..4] of Real = (9.8, 8.5, 9.1, 7.4);
        Nazva: array[1..4] of String = ('Інформатика', 'Алгебра', 'Геометрія', 'Фізика');
        var i, k: Integer;
         begin
           Label1.Caption :='';
           Image1.Canvas.Brush.Color := clWhite; // встановлюємо колір області
           Image1.Canvas.FillRect(Image1.ClientRect);  // побудови діаграми
           { побудова координатних осей }
           Image1.Canvas.Polyline ([Point(5,5),Point(5,190),Point (295,190)]);
           Image1.Canvas.Polyline ([Point (2,8), Point (5,5), Point (9,9)]);
           Image1.Canvas.Polyline ([Point (292,187), Point (295,190), Point (292,193)]);
           { побудова прямокутників — стовпців гістограми }
           For i := 1 to 4 do begin
                With Image1.Canvas do begin
                     { колір і стиль заливки і-го стовпця }
                     Brush.Color := RGBToColor (i*60, 150, 150);
                     Brush.Style := bsSolid;
                     Rectangle (i*60, 200-Round(Ndu [i]*15), i*60+40, 190);
                     Brush.Style := bsClear;
                     Font.Size := 14; { підписи даних виводяться на 20 пікселів вище за верхній край прямокутника }
         TextOut (i*60, 180-Round(Ndu[i]*15), FloatToStr(Ndu[i]));
                end;
           { елементи масиву Nazva виконують роль імен категорій і додаються до заголовка об'єкта Label1 }
           Label1.Caption := Label1.Caption + ' ' + Nazva[i];
        end;
        end;
      4. Проаналізуйте програмний код і виконайте проект.
        Гістограма успішності учнів
        Виправте помилки, якщо такі з'являться. Збережіть проект.
      • Вправа 3. Побудова кругової діаграми.
      • Створення проекту з використанням мови Object Pascal
      1. Відкрийте середовище Lazarus, створіть новий проект, у якому за допомогою кругової діаграми буде показана прибутковість підприємства за 4 квартали року.
      2. Створіть інтерфейс програми як на скріншоті.
        Проект Прибуток підприємства за 4 квартали року
      3. Код процедури побудови кругової діаграми може бути таким.
      4. procedure TForm1.Button1Click(Sender: TObject);
        const   pr: array[1..4] of Integer = (100, 40, 80, 70);
        cl: array[1..4] of TColor = (clBlue, clGreen, clYellow,
        clRed);  // масив кольорів
        var i, sum: Integer; ps: Real; // градусна міра сектора
        x0, y0: Integer; // координати центра діаграми
        wx, wy: Integer; // координати першої точки
        x, y: Integer;  // координати наступних точок
        r: Integer;       // радіус
        begin
          sum := 0;
          For i := 1 to 4 do sum := sum+pr[i];
          { обчислення координат центра діаграми }
          x0 := Image1.Width div 2; y0 := Image1.Height div 2;
          r := Image1.Width div 2; // обчислення радіуса
          wx := x0+r; wy := y0;  // перша точка
          ps := 0;
          For i := 1 to 4 do
              With Image1.Canvas do begin
                      ps := ps+2*pi*pr[i]/sum; // кут сектора
          { обчислення координат х, у кінця дуги, що обмежує і-1 сектор}
                      x := Round(x0+r*cos(ps));
                      y := Round(y0+r*sin(ps)); Brush.Color := cl[i];
                      Pie(x0-r,y0-r, x0+r,y0+r, x,y, wx,wy);
                      wx := x; wy := y;
         end;
          For i := 1 to 4 do //виведення прямокутників легенди
         With Form1.Canvas do   begin
          Brush.Color := cl[i];
          Rectangle(170,32+(i-1)*16,185,47+(i-1)*16);
        end;
        end;
      5. Проаналізуйте програмний код і виконайте проект.
        Прибуток підприємства за 4 квартали року
        Виправте помилки, якщо такі з'являться, збережіть проект.
      • Вправа 4. Побудова графіка.
      • Створення проекту з використанням мови Object Pascal
      1. Відкрийте середовище Lazarus, створіть новий проект, у якому необхідно побудувати графік зміни прибутку підприємства за 4 квартали.
      2. Сформуйте інтерфейс проекту як на скріншоті.
        Проект Графік зміни прибутку підприємства за 4 квартали року
      3. Проаналізуйте наступний програмний код і використайте його у процедурі для події OnClick кнопки Побудувати графік.
      4. procedure TForm1.Button1Click(Sender: TObject);
        const pr: array[1..4] of Integer = (100, 40, 80, 70);
              nom: array[1..4] of String = ('I', 'II', 'III', 'IV');
              { масив імен категорій }
        var   i: Integer;
        begin
           // суцільна заливка полотна кольором (білим)
           Image1.Canvas.Brush.Color := RGBToColor(255,255,255);
           Image1.Canvas.FloodFill(100,100,0,fsSurFace);
           { побудова координатних осей }
           Image1.Canvas.Polyline ([Point (5,5), Point (5,150), Point (155,150)]);
           Image1.Canvas.Polyline ([Point (2,8), Point (5,5), Point (9,9)]);
           Image1.Canvas.Polyline ([Point (150,147), Point (155,150), Point (151,154)]);
           { виведення імен категорій }
           For i := 1 to 4 do Image1.Canvas.TextOut (30*i, 152, Nom[i]);
           { встановлення олівця в початкову позицію }
           Image1.Canvas.MoveTo (5,150);
           Image1.Canvas.Pen.Width := 3; { товщина олівця }
           Image1.Canvas.Pen.Color := clBlue; { колір олівця }
           { малювання відрізків графіка }
           For i := 1 to 4 do Image1.Canvas.LineTo (30*i, 150-pr[i]);
        end;
      5. Виконайте проект, виправте помилки, якщо такі з'являться, збережіть проект.
        Графік зміни прибутку підприємства за 4 квартали року
      Виконуємо самостійно
      • Завдання. У таблиці наведено дані про обсяг продаж книжкового магазину за місяцями у період із січня по червень.
        Таблиця Обсяг продажу книжкового магазину
        Визначити сумарний обсяг продаж за півріччя, побудувати гістограму і кругову діаграму обсягів продажу за місяцями.
      • Cтворення проекту з використанням мови Object Pascal
      1. Створіть новий проект в середовищі Lazarus. Розробіть інтерфейс програми згідно зразка.
        Проект Аналіз обсягу продаж книжкового магазину
      2. Опишіть глобальні масиви для збереження значень, назв категорій, кольорів.
      3. var
          Form1: TForm1;
        const sales: array[1..6] of real = (11, 17, 18, 32.5, 18.5, 15.5);
              category: array[1..6] of string = ('Січ', 'Лют', 'Бер', 'Квт', 'Трв', 'Чрв');
              color_name: array[1..6] of TColor = (clBlue, clGreen, clYellow, clRed, clNavy, clAqua);
        
        implementation
      4. У процедурі обробки події OnCreate для форми запрограмуйте зафарбовування прямокутників легенди.
      5. // зафарбовування прямокутників легенди
        procedure TForm1.FormCreate(Sender: TObject);
        var i: integer;
            sh: array[1..6] of TShape;
        begin
           sh[1] := Shape1;
           sh[2] := Shape2;
           sh[3] := Shape3;
           sh[4] := Shape4;
           sh[5] := Shape5;
           sh[6] := Shape6;
        
           for i := 1 to 6 do
               sh[i].Brush.Color := color_name[i];
        end;
      6. Створіть процедуру обробки події OnClick для командної кнопки Знайти сумарний обсяг і запрограмуйте знаходження суми елементів масиву sales і виведення значення в поле Edit1.
      7. procedure TForm1.Button1Click(Sender: TObject);
        var i: integer;
            sum: real;
        begin
           sum := 0;
           for i := 1 to 6 do
               sum := sum + sales[i];
           Edit1.Text := FloatToStr(sum);
        end;
      8. Створіть процедуру обробки події OnClick для командної кнопки Побудувати гістограму і запрограмуйте побудову гістограми за значеннями елементів масиву sales.
      9. procedure TForm1.Button2Click(Sender: TObject);
        var i: integer;
        begin
          // мітка для підписів під гістограмою
          Label9.Caption := '';
          // встановлення кольору побудови - white
          Image1.Canvas.Brush.Color := clWhite;
          // побудова тла - зафарбованого прямокутника попередньо встановленим кольором - white
          Image1.Canvas.Fillrect(Image1.ClientRect);
          // побудова координатних осей
          Image1.Canvas.Polyline([Point(5,5), Point(5,300), Point(420,300)]);
          Image1.Canvas.Polyline([Point(2,8), Point(5,5), Point(9,9)]);
          Image1.Canvas.Polyline([Point(415,296), Point(420,300), Point(415,304)]);
          // побудова прямокутників гістограми
          for i := 1 to 6 do
              begin
                with Image1.Canvas do
                     begin
                       Brush.Color := color_name[i];
                       Brush.Style := bsSolid;
                       Rectangle(i * 55, 250 - Round(sales[i]), i * 55 + 45, 300);
                       Brush.Style := bsClear;
                       Font.Size := 12;
                       // виведення підписів над стовпцями гістограми
                       TextOut(i * 55, 230 - Round(sales[i]), FloatToStr(sales[i]));
                     end;
                // додавання елементів масиву category як імен категорій під гістограмою
                Label9.Caption := Label9.Caption + '       ' + category[i];
              end;
        end;
      10. Створіть процедуру обробки події OnClick для командної кнопки Побудувати кругову діаграму і запрограмуйте побудову кругової діаграми за значеннями елементів масиву sales.
      11. procedure TForm1.Button3Click(Sender: TObject);
        var i: integer;
            sum, ps: real;      // сума продажів і градусна міра сектора
            x0, y0: integer;    // координати центра діаграми
            wx, wy: integer;    // координати першої точки
            x, y: integer;      // координати наступних точок
            r: integer;         // радіус
        begin
          // встановлення кольору побудови - white
          Image2.Canvas.Brush.Color := clWhite;
          // побудова тла - зафарбованого прямокутника попередньо встановленим кольором - white
          Image2.Canvas.Fillrect(Image1.ClientRect);
          sum := 0;
          for i := 1 to 6 do
               sum := sum + sales[i];
          // обчислення координат центра діаграми
          x0 := Image2.Width div 2;
          y0 := Image2.Height div 2;
          r := Image2.Width div 2; // обчислення радіуса
          wx := x0 + r; wy := y0;  // перша точка
          ps := 0;
          for i := 1 to 6 do
              with Image2.Canvas do
                   begin
                     ps := ps + 2 * pi * sales[i]/sum; // кут сектора
                     x := Round(x0 + r * cos(ps));
                     y := Round(y0 + r * sin(ps));
                     Brush.Color := color_name[i];
                     Pie(x0 - r, y0 - r, x0 + r, y0 + r, x, y, wx, wy);
                     // виведення підписів над стовпцями гістограми
                     Brush.Style := bsClear;
                     TextOut(wx-15, wy, FloatToStr(sales[i]));
                     wx := x;
                     wy := y;
                   end;
        end;
      12. Перевірте роботу програми. Виправте помилки, якщо такі з'являться, збережіть зміни.
      13. Зробіть висновок: Яку з побудованих діаграм доцільно використовувати для аналізу обсягів продажу за півріччя?
      • Додаткове завдання. Cтворіть проект для побудови графіків функцій: y=x*x, y=sin(x), використовуючи графічні методи.
      • Cтворення проекту з використанням мови Object Pascal
      1. Створіть новий проект в середовищі Lazarus. Розмістіть на формі компоненти і налаштуйте їхні властивості згідно із скріншотом.
        Проект Графіки функцій
      2. Опишіть в розділі глобальних описів змінні, константу і масив.
      3. const scale = 100; // масштаю побудови графіків
        var
          Form1: TForm1;
          xmas: array[1..100] of Real; // значення x
          x0, y0: integer; // координати центра площини координат
        implementation
      4. Створіть процедуру події OnCreate і запрограмуйте побудову площини координат. 
      5. procedure TForm1.FormCreate(Sender: TObject);
        begin
          // центр площини координат
          x0 := Image1.Width div 2;
          y0 := Image1.Height div 2;
        
          with Image1.Canvas do
               begin
                  // малюємо осі координат
                  // суцільна заливка полотна кольором (білим)
                  Image1.Canvas.Brush.Color := RGBToColor(255,255,255);
                  Image1.Canvas.FloodFill(100,100,0,fsSurFace);
        
                  Image1.Canvas.Pen.Color := RGBToColor(163,73,164);
                  Image1.Canvas.MoveTo(x0,0);
                  Image1.Canvas.LineTo(x0,Image1.Height);
                  Image1.Canvas.MoveTo(0,y0);
                  Image1.Canvas.LineTo(Image1.Width,y0);
               end;
        end;
      6. Проаналізуйте програмний код, поданий нижче, і реалізуйте процедуру обробки події натиснення кнопки y=x*x і малювання графіка функції y=x*x.
      7. // функція y=x*x
        procedure TForm1.Button1Click(Sender: TObject);
        var f1: array[1..100] of Real;
            x, y1, h: real;
            i: integer;
        begin
          Memo1.Clear;
        
          // табулюємо функцію і малюємо графік
          // нижня межа діапазона
          x := -2;
          // крок
          h := 0.1;
          i := 1;
          Memo1.Lines.Add('x           y=x*x');
          Image1.Canvas.MoveTo(-2,4);
          repeat
                begin
                  // Обчислення функції y=x*x
                  y1 := -x * x;
                  // Заносимо обчислені значення у масив
                  f1[i] := y1*(-1);
                  xmas[i] := x;
                  // виводимо значення у моле Мемо
                  Memo1.Lines.Add(FormatFloat('0.###', xmas[i]) + '          ' +
                  FormatFloat('0.###', f1[i]));
                  // малювання графіку y=x*x
                  Image1.Canvas.Pen.Color := RGBToColor(255,127,39);
                  Image1.Canvas.LineTo(Trunc(x * scale) + x0, Trunc(y1 * scale) + y0);
                  // Обчислення положення наступної точки
                  x := x + h;
                  i := i + 1;
                end;
          until x >= 2;
        end;
      8. Проаналізуйте програмний код, поданий нижче, і реалізуйте процедуру обробки події натиснення кнопки y=sin(x) і малювання графіка функції y=sin(x).
      9. // функція y=sin(x)
        procedure TForm1.Button2Click(Sender: TObject);
        var f2: array[1..100] of Real;
            x, y2, h: real;
            i: integer;
        begin
          Memo1.Clear;
          // табулюємо функцію і малюємо графік
          // нижня межа діапазона
          x := -3;
          // крок
          h := 0.1;
          i := 1;
          Memo1.Lines.Add('x           y=sin(x)');
          Image1.Canvas.MoveTo(-2,-1);
          repeat
                begin
                    // Обчислення функції y=sin(x)
                    y2 := sin(x);
                    // Заносимо обчислені значення у масив
                    f2[i] := y2;
                    xmas[i] := x;
                    // виводимо значення у моле Мемо
                    Memo1.Lines.Add(FormatFloat('0.###', xmas[i]) + '          ' +
                    FormatFloat('0.###', f2[i]));
                    // малювання графіку y=sin(x)
                    Image1.Canvas.Pen.Color := RGBToColor(0,162,232);
                    Image1.Canvas.LineTo(Trunc(x * scale) + x0, Trunc(y2 * scale) + y0);
                    // Обчислення положення наступної точки
                    x := x + h;
                    i := i + 1;
                end;
          until x >= 3;
        end;
      10. Перевірте роботу програми.
        Графіки функцій
        Виправте помилки, якщо такі з'являться, збережіть зміни.
      Домашнє завдання
      • Опрацювати підручник: §37, с. 205-211 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)