Сторінка 1

середу, 14 лютого 2018 р.

Алгоритми опрацювання табличних величин

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Обговорюємо
  1. Яким є алгоритм розв'язування задач, у яких передбачено опрацювання деякої сукупності даних?
  2. Які є способи зміни значень елементів масиву мовами програмування Object Pascal і Python?
  3. Які елементи управління в середовищі Lazarus можна використати для введення і виведення елементів масиву?
  4. Як описати алгоритм зміни значень табличних елементів мовами програмування Object Pascal і Python?
  5. Як описати алгоритм знаходження суми чи добутку значень табличних елементів мовами програмування Object Pascal і Python?
  6. Як описати алгоритм знаходження суми чи кількості табличних елементів, що відповідають заданим умовам, мовами програмування Object Pascal і Python
Діємо разом
  • Вправа 1. Розробіть проект, у якому елементи табличної величини a, яка містить 10 цілих чисел, змінюються їх квадратами.
  • Створення проекту з використанням мови Object Pascal
  1. Відкрийте середовище Lazarus, створіть новий проект, розмістіть на екранній формі об'єкти, як показано на скріншоті,
    Квадрати значень
    і надайте значення їхнім властивостям згідно поданої таблиці:
    Таблиця властивостей для проекту Квадрати значень
  2. Створіть процедуру опрацювання події натиснення кнопки Виконати. У вікні редактора коду опишіть змінні, які будуть використовуватись у проекті: а - масив цілих чисел, i - номер (індекс) елемента масиву.
  3. var i: integer;
        a : array [1..10] of integer;
  4. У вікні редактора коду запишіть команди введення, опрацювання та виведення елементів масиву. Зверніть увагу на те, що багаторядкове поле містить текстові дані, тому для опрацювання їх спочатку слід перетворити на цілі числа, а потім виведення результату подати рядками. 
  5. begin
      for i := 0 to 9 do
            begin
                a[i+1] := StrToInt(Memo1.Lines[i]);
                a[i+1] := Sqr(a[i+1]);
                Memo2.Lines[i] := IntToStr(a[i+1]);
            end;
    end;
  6. Виконайте проект. Введіть у багаторядкове поле ліворуч послідовно 10 натуральних чисел, натискаючи після кожного клавішу Enter. Перевірте на цьому тестовому прикладі, чи відповідають умові завдання дії, пов'язані з об'єктами управління екранної форми. Якщо є помилки, виправте їх. 
  • Створення проекту з використанням мови Python
  1. Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Квадрати значень.
  2. У вікні редактора коду введіть команди.
  3. import math
    # створюємо новий список
    a = []
    for i in range(10):
        # додаємо введені елементи до списку в області виконання проекту
        a.append(int(input('Введіть елемент списку: ')))
        # змінюємо значення введеного елемента списку
        a[i] = a[i] ** 2
    # виводимо результуючий список
    print(a)
  4. Запустіть проект на виконання. Введіть значення елементів списку і проаналізуйте отриманий результат. Якщо є помилки, виправте їх, збережіть зміни.
  • Вправа 2. Створіть програму для знаходження кількості елементів лінійної таблиці із 10 цілих чисел, які дорівнюють значенню її першого елемента.
  • Створення проекту з використанням мови Object Pascal
  1. Відкрийте середовище Lazarus і створіть новий проект, розмістіть на екранній формі об'єкти, як на скріншоті, надайте значення їхнім властивостям самостійно.
    Кількість елементів
  2. Створіть процедуру опрацювання події натиснення кнопки Виконати. У вікні редактора коду опишіть змінні, які будуть використовуватись у проекті: a - масив цілих чисел, k - кількість елементів масиву, i - номер (індекс) елемента масиву.
  3. var i, k: integer;
        a : array [1..10] of integer;
  4. У вікні редактора коду запишіть команди введення значень елементів масиву, їх опрацювання та виведення кількості елементів, які дорівнюють першому елементу, враховуючи, що нумерація в багаторядковому текстовому полі починається з 0.
  5. begin
      k := 0;
      a[1] := StrToInt(Memo1.Lines[0]);
      for i := 1 to 9 do
          begin
            a[i+1] := StrToInt(Memo1.Lines[i]);
            if a[i+1] = a[1] then k := k + 1;
          end;
      Edit1.Text := IntToStr(k);
    end;
  6. Запустіть проект на виконання, проаналізуйте результат, якщо є помилки, виправте їх і збережіть зміни.
  • Створення проекту з використанням мови Python
  1. Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Кількість елементів.
  2. У вікні редактора коду введіть команди.
  3. # створюємо новий список
    a = []
    # k - змінна, яка зберігатиме кліькість елементів списку, що дорівнюють першому
    k = 0
    for i in range(10):
        # додаємо введені елементи до списку
        a.append(int(input('Введіть елемент списку: ')))
    # шукаємо елементи у списку, які рівні з першим
    for i in range(9):
        if a[i+1] == a[0]:
            k += 1
    # виводимо кількість елементів, рівних першому
    print(k)
  4. Запустіть проект на виконання і перевірте, чи відповідають умові завдання отримані результати. Якщо є помилки, виправте їх, збережіть зміни.
Працюємо в парах
  • Мовами програмування Object Pascal і Python, запишіть фрагмент програми, у якій будуть реалізовані такі завдання:
  1. 5-му елементу лінійної таблиці A рядкового типу з 10 елементів надати значення 123.
  2. першому елементу лінійної таблиці А цілого типу з 10 елементів надати значення 8-го елемента цієї ж таблиці.
  3. Елементу з номером i лінійної таблиці А дійсного типу надати значення 19.81.
  4. 7-му елементу лінійної таблиці Number цілого типу з 10 елементів надати деяке конкретне значення.
  5. 2-му елементу лінійної таблиці Number дійсного типу з 10 елементів надати значення вмісту цієї ж клітинки, збільшене вдвічі.
  • Мовами програмування Object Pascal і Python, запишіть фрагмент програми, у якій перевірятимуться такі умови:
  1. Вміст першого елемента лінійної таблиці Year рядкового типу дорівнює значенню високосний.
  2. Вміст кожного елемента лінійної таблиці A дійсного типу належить заданому відрізку [a, b].
  3. Вміст 6-го елемента лінійної таблиці А дійсного типу не перевищує значення величини H.
  4. Вміст 5-го елемента лінійної таблиці з іменем Book цілого типу не збігається з 15-тим елементом цієї ж таблиці, збільшеним утричі.
  5. Вміст 7-го елемента лінійної таблиці А дійсного типу не перевищує дійсного числа K і вміст елемента лінійної таблиці з іменем City літерного типу дорівнює Київ.
  • Масив A[1..5] заповнено числами 3, 8, 5, 7, 6. Виконайте дії з елементами масиву:
  • a) For i:=1 to 5 do A[i]:=-A[i];
    b) For i:=1 to 5 do
           if A[i] mod 3 = 0 Then A[i]:=A[i] div 3;
    c) For i:=1 to 5 do
           if i mod 2 = 0 Then A[i]:=0;
    d) S:=0; For i:=1 to 5 do S:=S+A[i];
    e) P:=1; For i:=1 to 5 do If A[i]<=5 Then P:=P*A[i];
    f) K:=0; For i:=1 to 5 do If A[i]>5 Then K:=K+1;
    
  • Дано масив А[1..5]. Запишіть команди для реалізації завдань: 
  1. Ввести з клавіатури значення елементів масиву. 
  2. Знайти добуток елементів масиву. 
  3. Знайти мінімальний елемент масиву. 
  4. Знайти кількість додатних елементів масиву.
Виконуємо самостійно
  • Завдання 1. Створіть проект у середовищі Lazarus під назвою Надбавка, у якому заробітна плата 10 працівників деякого підприємства, подана дійсними величинами в лінійній таблиці, збільшується на задане число відсотків. Вікно екранної форми може мати такий вигляд.
    Надбавка до заробітної плати
    Проаналізуйте програмний код, наведений нижче і скористайтеся ним для реалізації проекту.
  • procedure TForm1.Button1Click(Sender: TObject);
    var i : integer;
        salary : array[1..10] of Real;
        k : real;
    begin
        k := StrToFloat(Edit1.Text);
        for i := 1 to 10 do
            salary[i] := StrToFloat(Memo1.Lines[i-1]);
        for i := 1 to 10 do
            Memo2.Lines.Add(FloatToStr(salary[i] + (salary[i] * k / 100)));
    
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Memo1.Clear;
      Memo2.Clear;
      Edit1.Text := '';
    end; 
  • Завдання 2. Створіть у середовищі Lazarus програму для для виконання завдання: масив numbers[1..50] заповнено випадковими числами в межах від 1 до 100. Визначити, скільки елементів масиву відрізняються від останнього елемента. Вікно екранної форми може мати вигляд.
    Кількість елементів, відмінних від останнього
    Проаналізуйте програмний код і використайте його для реалізації проекту.
  • procedure TForm1.Button1Click(Sender: TObject);
    var i, k, element : integer;
        numbers : array [1..50] of integer;
    begin
      Memo1.Clear;
      Randomize;
      k := 0;
      for i := 1 to 50 do
          begin
               numbers[i] := Random(100);
               Memo1.Lines.Add(IntToStr(numbers[i]));
          end;
    
      element := StrToInt(Memo1.Lines[49]);
      for i := 0 to 48 do
          begin
            if StrToInt(Memo1.Lines[i]) <> element
               then k := k + 1;
          end;
      Edit1.Text := IntToStr(k);
    end; 
  • Завдання 3. Використовуючи мову програмування Python, створіть програму за допомогою якої знаходять суму додатних і кількість від'ємних елементів лінійної таблиці дійсного типу.
  1. Відкрийте середовище програмування мовою Python, створіть новий файл і збережіть його під іменем Підрахунок.
  2. У вікні редактора коду введіть команди.
  3. # імпорт модуля генерування випадкових чисел
    import random
    # створюємо порожній список
    a = []
    # вказуємо змінну s для обчислення суми доатних елементів
    s = 0
    # вказуємо змінну k для обчислення кількості від'ємних елементів
    k = 0
    for i in range(10):
        # додаємо згенеровані виипадковим чином елементи до списку
        a.append(round(random.uniform(-10, 10), 1))
    for i in range(10):
        if a[i] >= 0:
            s += a[i]
        else:
            k += 1
    # виводимо згенерований список
    print(a)
    # виводимо суму додатних елементів
    print(round(s, 2))
    # виводимо кількість від'ємних елементів
    print(round(k, 2))
  4. Запустіть проект на виконання і проаналізуйте результат.
  • Завдання 4. У магазині обслужили за день n (n <= 200) покупців, кожен з яких витратив на покупки не більше за k (k <= 500) гривень. Створіть проект у середовищі Lazarus, у якому визначте денний прибуток магазину і середню суму споживчого чека. Знайдіть кількість покупців, які витратили на покупки суму, більшу за середній чек за день.
  1. Створіть новий проект. Змініть властивості Caption форми, розмістіть на формі компоненти і налаштуйте їхні властивості згідно із скріншотом. Текстове поле Edit1 призначене для введення кількості покупців, поле Memo1 - для виведення значень елементів масиву, список ListBox1 - для виведення результатів обчислень.
    Денний прибуток
  2. Опишіть змінні, необхідні для розв'язування задачі, як глобальні, тому що областю видимості для них є процедури обробки події обох кнопок Заповнити масив і Обчислити прибуток.
  3. var
      Form1: TForm1;
      buyers : array[1..200] of integer;
      sr: real;
      n : integer;
    
    implementation 
  4. Властивості ScrollBars елемента керування Memo1 задайте значення ssAutoVertical. Створіть процедуру обробки події для кнопки Заповнити масив.
  5. var i : integer;
    begin
      Randomize;
      Memo1.Clear;
      n := StrToInt(Edit1.Text);
      for i := 1 to n do
          begin
            buyers[i] := 1 + Random(500);
            Memo1.Lines.Add(IntToStr(buyers[i]));
          end;  
  6. Створіть процедуру обробки події для кнопки Обчислити прибуток. Результати обчислення виведіть у поле списку ListBox1.
  7. var i, sum : integer;
    begin
      sum := 0;
      for i := 1 to n do
           sum := sum + buyers[i];
      ListBox1.Items.Add('Денний прибуток: ' + IntToStr(sum) + ' грн.');
      sr := sum/n;
      ListBox1.Items.Add('Середній чек: ' + FormatFloat('0.##', sr) + ' грн.');  
  8. Створіть процедуру обробки події для кнопки Знайти кількість чеків. Запишіть команди для знаходження кількості елементів масиву, значення яких більші за середнє значення. Результати обчислень виведіть у поле списку ListBox1.
  9. var i, k: integer;
    begin
      k := 0;
      for i := 1 to n do
           if buyers[i] > sr then k := k + 1;
      ListBox1.Items.Add('Кількість чеків,');
      ListBox1.Items.Add('більших за середній: ' + IntToStr(k));
    end;
  10. Перевірте роботу програми, у разі появи помилок, виправте їх. Збережіть зміни.
Домашнє завдання
  • Опрацювати підручник: §34 с. 189-193 (Інформатика, 9 клас, автори: Бондаренко О. О., Ластовецький В. В., Пилипчук О. П., Шестопалов Є. А.)