Сторінка 1

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

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

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Обговорюємо
  1. У чому полягає особливість пошуку елемента лінійної таблиці, який відповідає заданій умові?
  2. З якою метою впорядковують дані в лінійній таблиці?
  3. Чим відрізняється алгоритм пошуку найменшого елемента лінійної таблиці від алгоритму пошуку найбільшого елемента?
Виконуємо самостійно
  • Завдання 1. Створіть проект у середовищі Lazarus під назвою Кількість опадів. Згідно умови, дано таблицю кількості опадів протягом року за місяцями. Необхідно визначити: кількість опадів за рік; місяць, в якому кількість опадів була найменшою; місяць, в якому кількість опадів була найбільшою; місяці, в які кількість опадів була менша від 40 мм, та кількість таких місяців. Реалізуйте також обчислення середнього арифметичного значень кількості опадів за рік.
  1. Створіть новий проект. Розробіть інтерфейс програми згідно скріншотів.
  2. Опишіть масиви-константи для збереження назв місяців і кількостей опадів як глобальні.
  3. var
      Form1: TForm1;
    const month: array[1..12] of string = ('січень', 'лютий', 'березень', 'квітень', 'травень', 'червень', 'липень', 'серпень', 'вересень', 'жовтень', 'листопад', 'грудень');
          data: array[1..12] of integer = (54, 13, 30, 15, 40, 32, 10, 20, 46, 60, 56, 38);
    implementation
  4. У процедурі обробки події OnCreate для форми запрограмуйте виведення назв місяців до рядка заголовків стовпців, а значення елементів масиву кількостей опадів - до першого рядка таблиці.
  5. // заповнення таблиці даними про місяці і дані опадів
    procedure TForm1.FormCreate(Sender: TObject);
    var i: Integer;
    begin
       StringGrid1.Cells[0,0] := 'місяць';
       StringGrid1.Cells[0,1] := 'дані';
       For i := 1 to 12 do
           begin
                StringGrid1.Cells[i,0] := month[i];
                StringGrid1.Cells[i,1] := IntToStr(data[i]);
           end;
    end;
  6. Створіть процедуру обробки події OnClick для командної кнопки Кількість опадів за рік, мм, користуючись алгоритмом знаходження суми елементів масиву. Реалізуйте обчислення середнього арифметичного кількості опадів за рік.
  7. // Обчислення кількості опадів за рік - сума елементів масиву даних про опади
    procedure TForm1.Button1Click(Sender: TObject);
    var i, sum: Integer;
    begin
       sum := 0;
       For i := 1 to 12 do
           sum := sum + data[i];
       ListBox1.Items.Add('Кількість опадів за рік: ' + IntToStr(sum) + ' мм.');
       ListBox1.Items.Add('Середнє значення: ' + FormatFloat('0.##', sum/12) + ' мм.');
    end;
  8. Створіть процедуру обробки події OnClick для командної кнопки Найсухіший місяць, користуючись алгоритмом знаходження найменшого елемента масиву.
  9. // Найсухіший місяць - найменший елемент масиву (впорядкування за спаданням)
    procedure TForm1.Button2Click(Sender: TObject);
    var i, c: Integer;
        prap: boolean;
        m: string;
    begin
      Repeat
            prap := False;
     For i := 1 to 11 do
         If data[i] < data[i+1] Then
                   begin
          c := data[i];
                        data[i] := data[i+1];
                        data[i+1] := c;
    
    
                        m := month[i];
                        month[i] := month[i+1];
                        month[i+1] := m;
    
                        prap := True;
                   end;
      Until prap = False;
      ListBox1.Items.Add('Найсухіший місяць в році: ' + month[12] + '.');
    end;
  10. Створіть процедуру обробки події OnClick для командної кнопки Найвологіший місяць, користуючись алгоритмом знаходження найбільшого елемента масиву.
  11. // Найвологіший місяць - найбільший елемент масиву (впорядкування за спаданням)
    procedure TForm1.Button3Click(Sender: TObject);
    var i, c: Integer;
        prap: boolean;
        m: string;
    begin
         Repeat
            prap := False;
     For i := 1 to 11 do
         If data[i] < data[i+1] Then
                   begin
          c := data[i];
                        data[i] := data[i+1];
                        data[i+1] := c;
    
    
                        m := month[i];
                        month[i] := month[i+1];
                        month[i+1] := m;
    
                        prap := True;
                   end;
      Until prap = False;
      ListBox1.Items.Add('Найвологіший місяць в році: ' + month[1] + '.');
    end;
  12. Створіть процедуру обробки події OnClick для командної кнопки Місяці, в які кількість опадів менша від 40, користуючись алгоритмом визначення кількості елементів із заданою властивістю. Додайте до цієї процедури команди для обчислення k - кількості елементів масиву, що задовольняють вищезгаданій умові, і виведення значення цієї кількості.  
  13. // Місяці, в які кількість опадів менша від 40 та їх кількість
    procedure TForm1.Button4Click(Sender: TObject);
    var i, k: Integer;
    begin
      k := 0;
      ListBox1.Items.Add('Місяці, в які кількість опадів менша від 40:');
      For i := 1 to 12 do
           begin
              if StrToInt(StringGrid1.Cells[i,1]) < 40 then
                 begin
                      k := k + 1;
                      ListBox1.Items.Add(StringGrid1.Cells[i,0]);
                 end;
           end;
      ListBox1.Items.Add('Кількість місяців з опадами менше 40 мм: ' + IntToStr(k) + '.');
    end;
  14.  Реалізуйте обробку події OnClick при натисненні кнопки Очистити результати.
  15. // Очищення результатів виведення
    procedure TForm1.Button5Click(Sender: TObject);
    begin
      ListBox1.Clear;
    end;
  16. Перевірте роботу програми. Виправте помилки, якщо такі з'являться, збережіть зміни.
  17. Зробіть висновок: як застосовувати типові алгоритми опрацювання одновимірних масивів для розв'язування задач.
  • Завдання 2. Cтворіть проект Магазин одягу. Згідно умови, у магазині одягу є гнучка система зміни цін. Кожного тижня товар змінював свою ціну згідно таблиці.
    Створіть проект, у якому за введеною вартістю товару можна обчислити значення ціни товару протягом кожного тижня та вивести її на екран у вигляді таблиці (списку) значень. Зверніть увагу, щоб знайти результат збільшення ціни price на 1%, виконують дію price*1.01; щоб зменшити на 1%, виконують дію price*0.99.
  • Cтворення проекту з використанням мови Python
  1. Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Магазин одягу.
  2. У вікні редактора коду введіть команди.
  3. price = float(input('Введіть вартість товару (у грн.): '))
    discount = [1.1, 1.05, 0.93, 0.90]
    up_down = 'підвищення'
    result = 0
    print('Зміна значень ціни товару протягом 4-ох тижнів: ')
    for i in range(len(discount)):
        if i == 0:
            result = price * discount[0]
        else:
            if discount[i] >= 1:
                up_down = 'підвищення'
                result = result * discount[i]
            else:
                up_down = 'зниження'
                result = result * discount[i]
        print('У {0} тиждень ціна товару становить {1:0.2f} грн. ({2} на {3}%)'.format(i + 1, result, up_down, round(abs(100 - discount[i] * 100))))
  4. Запустіть проект на виконання і проаналізуйте результат.
  5. Змініть код програми, наприклад, зменшіть/збільшіть % зміни цін на товари, додайте ще один тиждень зміни ціни тощо.
  • Cтворення проекту з використанням мови Object Pascal
  1. Створіть новий проект. Розмістіть на формі компоненти і налаштуйте їхні властивості згідно із скріншотом.
  2. Таблицю з початковими даними заповніть за допомогою пункту Змінити StringGrid... контекстного меню компонента.
  3. Проаналізуйте програмний код, поданий нижче, і реалізуйте проект.
  4. procedure TForm1.Button1Click(Sender: TObject);
    var i: integer;
        s: real;
        a: array[1..4, 1..2] of real;
    begin
         s := StrToFloat(Edit1.Text);
         a[1,2] := s * StrToFloat(StringGrid1.Cells[1,1]);
         StringGrid1.Cells[1,2] := FloatToStr(a[1,2]);
         for i := 2 to 4 do
             begin
               a[i,2] := a[i-1,2] * StrToFloat(StringGrid1.Cells[i,1]);
               StringGrid1.Cells[i,2] := FloatToStr(a[i,2]);
             end;
    end;
  5. Перевірте роботу програми. Виправте помилки, якщо такі з'являться, збережіть зміни.
Домашнє завдання
  • Опрацювати підручник: §32-§36 с. 179-202 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)