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