Сторінка 1

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

Компетентнісні задачі: табличні величини та алгоритми їх опрацювання

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Виконуємо самостійно
  • Завдання 1. Створити комп'ютерну програму, яка реалізує відому гру «Морський бій».
  1. Постановка задачі.
    1. Двовимірний масив А розмірністю 6x6 випадковим чином заповнено нулями та одиницями.
    2. Якщо A(i,j) = 1, то у відповідній позиції знаходиться корабель. Гравець задає координати елементу масиву і «стріляє».
    3. Якщо елемент з указаними індексами дорівнює 1, то виводиться повідомлення «Влучив!», значення лічильника влучень збільшується на 1. Якщо A(i,j) = 0, виводиться повідомлення «Не влучив!», місце влучення позначається кружком.
    4. Якщо гравець робить три невдалі спроби, виводиться повідомлення «Ти програв!».
    5. Якщо ж значення лічильника влучень зрівняється з кількістю кораблів, виводиться повідомлення «Ти виграв!».
  2. Побудова інформаційної моделі
    Інформаційна модель гри "Морський бій"
  3. Визначення засобів опрацювання даних
    1. Підготовка графічних файлів за допомогою графічного редактора.
    2. Пошук в Інтернеті й опрацювання інформації про відображення графічних даних у комірках об'єкта StringGrid.
    3. Створення проекту з використанням мови Object Pascal і середовища Lazarus.
  4. Опрацювання даних
    1. Підготовка зображень. У графічному редакторі підготуйте малюнки для відображення етапів гри (або скористайтеся поданими нижче).
      Корабель
      Влучив у корабель
      Море
      Не влучив у корабель
    2. Повторення навчального матеріалу
      1. Опрацювання двовимірних масивів.
      2. Використання компонентів Image, Edit, Button.
      3. Відображення графічних даних у комірках об'єкта StringGrid.
    3. Створення програми.
      1. Розробіть інтерфейс програми (наприклад, як на зразку).
        Інтерфейс програми "Морський бій"
      2. Опишіть глобальні змінні.
      3. Form1: TForm1;
          A: array[0..5, 0..5] of Integer;
          k, sum, sproba: Integer;
      4. У процедурі обробки події OnCreate для форми запрограмуйте заповнення випадковим чином нулями та одиницями масиву А і відображення значень A[i,j] у таблиці StringGrid.
      5. procedure TForm1.FormCreate(Sender: TObject);
        var i, j: Integer;
        begin
          k := 0; sum := 0; sproba := 0;
          For i := 0 to 5 do begin
             StringGrid1.ColWidths[i] := 50;
             StringGrid1.RowHeights[i] := 50;
             end;
        Randomize;
        For i := 0 to 5 do
             For j:=0 to 5 do begin
                A[i,j] := Random(2);
         sum := sum+A[i,j];
         StringGrid1.Cells[j,i] := IntToStr(A[i,j]);
         end;
        end;
      6. Для виведення малюнків у комірки StringGrid створіть для цього об'єкта обробник події OnDrawCell. Процедура StringGrid1DrawCell викликається під час кожного звернення до комірки StringGrid1DrawCell[j,i], значення індексів комірки (j,i) надаються параметрами aCol, aRow. Залежно від текстового значення StringGrid1DrawCell[j,i] до комірки виводиться малюнок з одного з об'єктів Image. Запишіть програмний код, поданий нижче.
      7. procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
          aRect: TRect; aState: TGridDrawState);
        begin
          If StringGrid1.Cells[aCol, aRow] = '1' Then
            begin
               If sproba < 3 Then  // якщо гру не закінчено, малюнок «Хвилі»
                  StringGrid1.Canvas.StretchDraw(aRect, Image1.Picture.Graphic)
               Else StringGrid1.Canvas.StretchDraw(aRect,Image3.Picture.Graphic);
            end;
        If StringGrid1.Cells[aCol, aRow] = '2' Then  // якщо влучив
           StringGrid1.Canvas.StretchDraw(aRect, Image2.Picture.Graphic);
        If StringGrid1.Cells[aCol, aRow] = '0' Then
           StringGrid1 .Canvas.StretchDraw(aRect, Image1.Picture.Graphic);
        If StringGrid1.Cells[aCol, aRow] = '3' Then  // якщо не влучив
           StringGrid1.Canvas.StretchDraw(aRect, Image4.Picture.Graphic);
        end;
      8. Реалізація алгоритму гри здійснюється в обробнику події для кнопки Стріляй!.
      9. procedure TForm1.Button1Click(Sender: TObject);
        var x, y, i, j: Integer;
        begin
        x := StrToInt(Edit1.Text); // введення координат корабля
        y := StrToInt(Edit2.Text);
        If a[x,y] = 1 Then
          begin
             sproba := 0;
             k := k+1;
             a[x,y] := 2;
             StringGrid1.Cells[y,x] := IntToStr(A[x,y]);
             Label2.Caption := 'Влучив!';
          end
           Else If a[x,y] = 0 Then
             begin
                a[x,y] := 3;
         StringGrid1.Cells[y,x] := IntToStr(A[x,y]);
         sproba := sproba+1;
                Label2.Caption := 'Мимо!';
             end;
        If sproba = 3 Then
          begin
             Label2.Caption := 'Ти програв!';
             Edit1.Visible := False; Edit2.Visible := False;
             Button1.Visible := False;
             { якщо гру програно, виводяться кораблі, в які не влучили }
             For i := 0 to 5 do
                 For j := 0 to 5 do StringGrid1.Cells[j,i] := IntToStr(A[i,j]);
          end;
        If k = sum Then
          begin
             Label2.Caption := 'Ти виграв!';
             Edit1.Visible:= False;
             Edit2.Visible:= False;
             Button1.Visible := False;
             sproba := 3;   // кінець гри
          end;
        end;
  5. Аналіз результатів
    1. Перевірте роботу програми (нумерація клітинок ігрового поля починається з нуля). 
      Гра "Морський бій"
    2. Оцініть повноту і вірогідність результатів розв'язування задачі.
  • Завдання 2. Розробіть програму «Телефонний довідник»
  1. Постановка задачі. Довідник складається із двох полів: Прізвище та Номери телефонів. У програмі треба реалізувати завантаження із файлу прізвищ абонентів і запис у інший файл прізвищ і номерів телефонів абонентів через кому у вигляді, наприклад, Хокінг, 123456. Номери телефонів вводяться вручну в поле Номери телефонів навпроти відповідного прізвище з поля Прізвище. Запрограмуйте пошук номера телефону абонента за введеним прізвищем і пошук прізвище -  за введеним номером телефону. 
  2. Побудова інформаційної моделі.
  3. Визначення засобів опрацювання даних.
    1. Створення двох текстових файлів (input.txt - з прізвищами абонентів, вводяться вручну за допомогою текстового редактора, output.txt - із прізвищами і телефонами, розділеними через кому, записуються через саму програму довідника).
    2. Пошук в Інтернеті й опрацювання інформації про об'єкт MainMenu, завантаження даних із файлу і запис даних у файл.
    3. Створення проекту з використанням мови Object Pascal і середовища Lazarus.
  4. Опрацювання даних.
    1. Повторення навчального матеріалу.
      1. Використання компонентів Image, Edit, Button.
      2. Відображення даних у комірках об'єкта Memo, GroupBox.
    2. Створення програми.
      1. Розробіть інтерфейс програми (наприклад, як на зразку). Для додавання пунктів меню для об'єкта MainMenu викличте контекстне меню і оберіть команду Menu Editor... .
        Створення інтерфейсу програми "Телефонний довідник"
        Створення пунктів меню
      2. Створіть процедуру обробки події OnClick для кнопки Відкрити із меню Файл.
        Процедура обробки події OnClick для кнопки "Відкрити"
      3. // пункт Файл - Відкрити
        // відкривання файлу з прізвищами і запис у поле Мемо1
        procedure TForm1.MenuItem2Click(Sender: TObject);
        var f: TextFile;  // для текстових файлів
            s: String;    // міститиме кожний рядок з файлу
        begin
           AssignFile(f, 'input.txt');      // зв'язок файлової змінної з файлом на диску
             Reset(f);                        // встановлення режиму для читання з файлу
             while (not EOF(f)) do            // доки не кінець файлу
                   begin
                        Readln(f, s);         // зчитування порядково з файлу
                        Memo1.Lines.Add(s);   // запис кожного рядка у поле Мемо
                   end;
             CloseFile(f);                    // закриття роботи з файлом
        end;
      4. Створіть процедуру обробки події OnClick для кнопки Записати із меню Файл (аналогічно, як і на попередньому кроці).
      5. // пункт Файл - Записати
        // записуються дані з двох полів Мемо1 і Мемо2 у файл
        procedure TForm1.MenuItem3Click(Sender: TObject);
        var f: TextFile;
            i: Integer;
        begin
             AssignFile(f, 'output.txt');
             Rewrite(f);                      // створюється новий файл або перезаписується старий
             for i:=0 to Memo1.Lines.Count - 1 do
                 Writeln(f, Memo1.Lines[i] + ', ' + Memo2.Lines[i]);  // запис у файл з поля Мемо
             CloseFile(f);
        end;
      6. Створіть процедуру обробки події OnClick для кнопки Пошук по прізвищу.
      7. // Кнопка Пошук по прізвищу
        // перед пошуком записати номери в поле Мемо2 навпроти прізвищ
        procedure TForm1.Button1Click(Sender: TObject);
        var i: integer;
        begin
           Edit2.Text := '';
           for i := 0 to Memo1.Lines.Count - 1 do
              if Edit1.Text = Memo1.Lines[i] then Edit2.Text := Memo2.Lines[i];
        end;
      8. Створіть процедуру обробки події OnClick для кнопки Пошук по номеру.
      9. // Кнопка Пошук по номеру
        // перед пошуком записати номери в поле Мемо2 навпроти прізвищ
        procedure TForm1.Button2Click(Sender: TObject);
        var i: integer;
        begin
           Edit1.Text := '';
           for i := 0 to Memo2.Lines.Count - 1 do
              if Edit2.Text = Memo2.Lines[i] then Edit1.Text := Memo1.Lines[i];
        end;
  5. Аналіз результатів.
    1. Перевірте роботу програми. Зверніть увагу на вміст текстових файлів input.txt і output.txt.
      Файли з прізвищами і номерами телефонів
    2. Вкажіть, на вашу думку, на позитивні та негативні моменти в роботі програми.
    3. Поміркуйте, як можна удосконалити програму.
  • Завдання 3. Розробіть програму «Текстовий редактор»
  1. Постановка задачі. Текстовий редактор матиме наступні функції: створення нового файлу, відкривання і зберігання файлів, форматування тексту (зміна шрифту, накреслення, розміру). У програмі також необхідно реалізувати кнопки: Вихід - для закривання текстового редактора і Про програму - з інформацією про текстовий редактор, ім'я розробника тощо.
  2. Побудова інформаційної моделі.
  3. Визначення засобів опрацювання даних.
    1. Пошук в Інтернеті й опрацювання інформації про об'єкти MainMenu, OpenDialog, SaveDialog, FontDialog.
    2. Створення проекту з використанням мови Object Pascal і середовища Lazarus.
  4. Опрацювання даних.
    1. Повторення навчального матеріалу.
      1. Використання компоненту Memo, функцій MessageDlg і ShowMessage.
      2. Відображення даних в об'єкті Memo.
    2. Створення програми.
      1. Розробіть інтерфейс програми (наприклад, як на зразку).
        Простий текстовий редактор (анімація)
        Додайте на форму об'єкт MainMenu1. 
        Об'єкт MainMenu
        Для додавання пунктів меню для об'єкта MainMenu1 викличте контекстне меню і оберіть команду Menu Editor.... Додайте пункти меню.
      2. Додайте на форму інші компоненти (OpenDialog1SaveDialog1FontDialog1, Memo1), як на малюнку.
        Компоненти форми текстового редактора
      3. Змініть властивість Caption доданих на форму компонентів.
      4. Створіть процедуру обробки події OnClick для кнопки Новий файл із меню Файл.
      5. // пункт Файл - Новий файл
        procedure TForm1.MenuItem7Click(Sender: TObject);
        begin
          Memo1.Clear;
        end;  
        
      6. Створіть процедуру обробки події OnClick для кнопки Відкрити файл із меню Файл (аналогічно, як і на попередньому кроці).
      7. // пункт Файл - Відкрити файл
        procedure TForm1.MenuItem2Click(Sender: TObject);
        begin
          if OpenDialog1.Execute
          then Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
        end;
        
      8. Створіть процедуру обробки події OnClick для кнопки Зберегти файл із меню Файл.
      9. // пункт Файл - Зберегти файл
        procedure TForm1.MenuItem3Click(Sender: TObject);
        begin
          if SaveDialog1.Execute
          then Memo1.Lines.SaveToFile(SaveDialog1.FileName);
        end; 
      10. Створіть процедуру обробки події OnClick для кнопки Шрифт із меню Редагувати.
      11. // пункт Редагувати - Шрифт
        procedure TForm1.MenuItem5Click(Sender: TObject);
        begin
          if FontDialog1.Execute
          then Memo1.Font := FontDialog1.Font;
        end; 
        
      12. Створіть процедуру обробки події OnClick для кнопки Про програму із меню Довідка.
      13. // пункт Довідка - Про програму
        procedure TForm1.MenuItem9Click(Sender: TObject);
        begin
          // #13#10 - перехід на новий рядок
          ShowMessage('Простий текстовий редактор.' + sLineBreak + 'Розробник - Мізюк Олександр Миколайович.');
        end;
        
      14. Створіть процедуру обробки події OnClick для кнопки Вихід із меню Файл.
      15. // пункт Файл - Вихід
        procedure TForm1.MenuItem8Click(Sender: TObject);
        begin
          if MessageDlg('Вийти з програми?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
          then Application.Terminate;
        end; 
        
  5. Аналіз результатів.
    1. Перевірте роботу програми. Створіть новий файл, збережіть його у форматі txt, відкрийте вже створений текстовий файл, відформатуйте текст у файлі.
    2. Вкажіть, на вашу думку, на позитивні та негативні моменти в роботі програми.
    3. Поміркуйте, як можна удосконалити програму, додавши необхідні функції.
  • Завдання 4. Розробіть програму «Тест»
  1. Постановка задачі. Текстова програма матиме наступні функції: вибір варіантів тесту (з текстових файлів variant1.txt, variant2.txt і т.д.), оцінювання тесту і виведення інформації про тест та результатів тестування. У програмі також необхідно реалізувати кнопки: Вихід - для закривання тестової програми і Про програму - з інформацією про тестову програму, ім'я розробника тощо. Тестова програма міститиме лише один тип запитань - одинарний вибір з багатьох.
  2. Побудова інформаційної моделі.
  3. Визначення засобів опрацювання даних.
    1. Пошук в Інтернеті й опрацювання інформації про об'єкт MainMenu, роботу з файлами.
    2. Створення проекту з використанням мови Object Pascal і середовища Lazarus.
  4. Опрацювання даних.
    1. Повторення навчального матеріалу.
      1. Використання компоненту RadioGroup, функції MessageDlg, операторів repeat until.
      2. Відображення даних в об'єкті ListBox.
    2. Створення програми.
      1. Розробіть інтерфейс програми (наприклад, як на зразку).
        Тестова програма
        Додайте на форму об'єкт MainMenu1. 
        Для додавання пунктів меню для об'єкта MainMenu1 викличте контекстне меню і оберіть команду Menu Editor.... Додайте пункти меню.
      2. Додайте на форму інші компоненти (RadioGroup1, ListBox1, Button1), як на малюнку.
        Інтерфейс тестової програми
      3. Змініть властивість Caption доданих на форму компонентів.
      4. Опишіть глобальні змінні.
      5. var
          Form1: TForm1;
          f: TextFile; // файлова змінна
          s, v: String;   // s - міститиме кожний рядок з файлу, v - назва варіанта
          n, number, points: integer; // n - номер правильної відповіді, number - номер запитання, points - кількість набраних балів
          rate: real; // відсоток правильних відповідей
        
        implementation 
      6. Створіть процедуру обробки події FormCreate (створення форми).
      7. // початкові налаштування при створенні форми
        procedure TForm1.FormCreate(Sender: TObject);
        begin
          MenuItem7.Enabled := False; // кнопк Запуск тесту не активна
          Button1.Enabled := False;   // кнопк Далі не активна
          RadioGroup1.Caption := 'Оберіть варіант тесту з меню Варіанти';
        end;
      8. Створіть процедуру обробки події OnClick для кнопки Варіант 1  меню Варіанти.
      9. // Варіанти  - Варіант 1
        procedure TForm1.MenuItem2Click(Sender: TObject);
        begin
           MenuItem2.Enabled := False; // вибір Варіант 1 стає недоступним
           MenuItem3.Enabled := True;  // вибір Варіант 2 стає доступним
           MenuItem7.Enabled := True; // кнопк Запуск тесту стає активною
           v := 'variant1.txt';
           RadioGroup1.Items.Clear; // очищення вмісту радіогрупи для наступного запитання
           ListBox1.Clear;
           ListBox1.Items.Add('Тут відображатимуться результати тесту');
           RadioGroup1.Caption := 'Запустіть тест з меню Тестування';
        end;   
        
      10. Створіть процедуру обробки події OnClick для кнопки Варіант 2  меню Варіанти.
      11. // Варіанти  - Варіант 2
        procedure TForm1.MenuItem3Click(Sender: TObject);
        begin
           MenuItem3.Enabled := False; // вибір Варіант 2 стає недоступним
           MenuItem2.Enabled := True;  // вибір Варіант 2 стає доступним
           MenuItem7.Enabled := True; // кнопк Запуск тесту стає активною
           v := 'variant2.txt';
           RadioGroup1.Items.Clear; // очищення вмісту радіогрупи для наступного запитання
           ListBox1.Clear;
           ListBox1.Items.Add('Тут відображатимуться результати тесту');
           RadioGroup1.Caption := 'Запустіть тест з меню Тестування';
        end;   
        
      12. Створіть процедуру обробки події OnClick для кнопки Запуск тесту із меню Тестування.
      13. // Тестування - Запуск тесту
        procedure TForm1.MenuItem7Click(Sender: TObject);
        begin
          MenuItem7.Enabled := False; // кнопк Запуск тесту не активна
          AssignFile(f, v); // зв'язок файлової змінної з файлом обраного варіанта
          Button1.Enabled := True;   // після обрання варіанта активізуємо кнопку Далі
          Reset(f); // встановлення режиму для читання з файлу
          points := 0; // початкова кількість балів рівна нулю
          number := 1; // початковий номер запитання
          Readln(f, s); // зчитування першого рядка з файлу
          repeat
            if (s[1] = '+') then           // якщо перший символи "+" значить це запитання
                  begin
                    Delete(s,1,1);         // видаляємо символ "+" із зчитаного рядка
                    RadioGroup1.Caption := 'Запитання №1. ' + s; // формування заголовка в радіогрупі
        
                  end
            else if (s[1] = '*') then      // якщо перший символ "*" значить це номер правильної відповіді
                  begin
                      Delete(s,1,1);       // видаляємо символ "*" із зчитаного рядка
                      n := StrToInt(s);    // записуємо номер правильної відповіді у змінну n
                  end
            else
                RadioGroup1.Items.Add(s); // інакше це варіант відповіді
            Readln(f, s);
           until (s[1] = '+') or (EOF(f));
           number := number + 1;  // збільшення номера запитань на 1
        end; 
        
      14. Створіть процедуру обробки події OnClick для кнопки Далі в процесі проходження тесту.
      15. // кнопка Далі
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          if (RadioGroup1.ItemIndex > -1) and (not EOF(f)) then
            begin
              if RadioGroup1.ItemIndex = n-1 then points += 1; // якщо обрано вірну відповідь, збільшуємо кількість балів
              RadioGroup1.Items.Clear; // очищення вмісту радіогрупи для наступного запитання
        
              repeat
                if (s[1] = '+') then
                  begin
                    Delete(s,1,1);
                    RadioGroup1.Caption := 'Запитання №' + IntToStr(number) + '. ' + s;
        
                  end
                else if (s[1] = '*') then
                    begin
                      Delete(s,1,1);
                      n := StrToInt(s);
                    end
                else
                    RadioGroup1.Items.Add(s);
                Readln(f, s);
              until (s[1] = '+') or (EOF(f));
              number += 1;
            end
          else if EOF(f) then
                 begin
                   Delete(s,1,1);
                   n := StrToInt(s);
                   if RadioGroup1.ItemIndex = n-1 then points += 1;
                   ListBox1.Clear; // очищення результатів тесту
                   ListBox1.Items.Add('Результати тесту: ');
                   ListBox1.Items.Add('----------');
                   ListBox1.Items.Add('Всього задано запитань: ' + IntToStr(number-1) + '.');
                   ListBox1.Items.Add('Система оцінювання: 2 бали за вірну відповідь.');
                   ListBox1.Items.Add('Максимально можна набрати: ' + IntToStr((number-1)*2) + ' балів.');
                   ListBox1.Items.Add('----------');
                   ListBox1.Items.Add('Вірних відповідей: ' + IntToStr(points) + '.');
                   rate := points/(number-1)*100;
                   if rate <> 0 then
                          ListBox1.Items.Add('Відсоток правильних відповідей: ' + FormatFloat('#,##', rate) + '%.')
                   else
                          ListBox1.Items.Add('Відсоток правильних відповідей: 0%.');
                   ListBox1.Items.Add('Ви набрали: ' + IntToStr(points*2) + ' бали(ів).');
                   // додаткове повідомлення
                   if (rate >= 80) and (rate <= 100) then ListBox1.Items.Add('Тест успішно пройдено! Молодець!')
                   else if (rate >= 60) and (rate < 80) then ListBox1.Items.Add('Тест пройдено! Але ти можеш краще!')
                   else if (rate >= 40) and (rate < 60) then ListBox1.Items.Add('Тест не пройдено! Забагато помилок, спробуй ще!')
                   else if (rate <40) then ListBox1.Items.Add('Тест не пройдено! Ще раз опрацюй навчальний матеріал, і тоді повертайся до тесту!');
                   CloseFile(f);      // закриття роботи з файлом
                   Button1.Enabled := False;
                 end;
        end;
        
      16. Створіть процедуру обробки події OnClick для кнопки Про програму із меню Довідка.
      17. // Довідка - Про програму
        procedure TForm1.MenuItem6Click(Sender: TObject);
        begin
            // #13#10 - перехід на новий рядок
          ShowMessage('Тестова програма.' + sLineBreak + 'Розробник - Мізюк Олександр Миколайович.');
        end; 
        
      18. Створіть процедуру обробки події OnClick для кнопки Вихід.
      19. // кнопка Вихід
        procedure TForm1.MenuItem8Click(Sender: TObject);
        begin
          if MessageDlg('Завершити тестування?', mtConfirmation, [mbYes, mbNo], 0) = mrYes
          then Application.Terminate;
        end;   
        
  5. Аналіз результатів.
    1. Створіть файли variant1.txtvariant2.txt і т.д. наступного вмісту.
      Зміст тесту
    2. Використовуються такі позначення: символом + починається рядок із запитанням (запитань можна створювати довільну кількість), символом * починається рядок із номером правильної відповіді на запитання, усі інші рядки - це варіанти відповідей, яких може бути довільна кількість. 
    3. Перевірте роботу програми, пройшовши тест. 
    4. Вкажіть, на вашу думку, на позитивні та негативні моменти в роботі програми.
    5. Поміркуйте, як можна удосконалити програму, додавши необхідні функції.

      суботу, 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 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)