Сторінка 1

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

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

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Діємо разом
  • Вправа 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 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)