Урок 27. Алгоритми знаходження суми чи кількості елементів табличної величини.

Цілі:
  • навчальна: познайомити учнів з особливостями опрацювання табличних величин;
  • розвивальна:  розвивати логічне мислення; формувати вміння діяти за інструкцією, планувати свою діяльність, аналізувати i робити висновки;
  • виховна:  виховувати інформаційну культуру учнів, уважність, акуратність, дисциплінованість.
Тип уроку: засвоєння нових знань;  
Хід уроку
І. Організаційний етап
ІІ. Актуалізація опорних знань
Дайте відповіді на запитання:
  • Яка величина називається табличною?
  • Що таке елемент табличної величини?
  • Із чого складається його ім’я?
  • Як описується таблична величина в рядку var ?
ІІІ. Оголошення теми та мети уроку . Мотивація навчальної діяльності
На сьогоднішньому уроці ви дізнаєтесь :
  • як обчислити суму чи кількість елементів табличної величини
IV. Вивчення нового матеріалу
Розглянемо кілька типових задач опрацювання табличних величин: обчислення суми значень усіх її елементів, суми і кількості значень еле­ментів, що відповідають певним умовам, знаходження найбільшого та найменшого елементів, пошук заданого елемента.
Такі задачі досить часто розв’язують на практиці. Наведемо лише кілька прикладів. Так, синоптики визначають найбільшу, найменшу та середню температуру за день, середню кількість опадів протягом місяця тощо. У процесі визначення переможців у деяких змаганнях відкидають найбільшу та найменшу оцінки суддів і обчислюють середнє арифметичне тих оцінок, що залишилися. Адміністрацію вашого навчального закладу може цікавити, скільки учнів 9-х класів мають семестрові оцінки 10, 11 або 12 з інформатики, чи є у вашому класі учні, що отримали оцінку 8 за останню практичну роботу, тощо.
У всіх задачах, які розглянемо в цьому пункті, будемо вводити зна­чення елементів табличної величини з багаторядкового текстового поля, значення інших змінних — з текстових полів. Якщо результатом є зна­чення елементів табличної величини, то виводитимемо їх у багаторядкове текстове поле, а значення інших змінних — у написи.
Для розв’язування цих задач створимо процедури, що оброблятимуть подію Click для кнопки. Аналогічно ви зможете створювати процедури, які будуть обробляти інші події для кнопки або події для інших об’єктів.
Розглядатимемо табличні величини з 10 елементів. Якщо кількість елементів табличної величини інша, то потрібно внести до наведених тек­стів процедур відповідні зміни.
Задача 1. Визначити суму значень усіх елементів табличної величини
Опрацювання елементів табличної величини здійснюватиметься з ви­користанням циклу. Використаємо змінну s для накопичування суми зна­чень елементів табличної величини. Перед циклом надамо їй значення 0.
У циклі послідовно переглядатимемо елементи табличної величини та до­даватимемо їхні значення до змінної s.
Звертаємо вашу увагу: якщо в циклі використовується команда змі- нення значення певної величини (у даній задачі s := s + a[i]), то перед циклом цій змінній обов’язково потрібно присвоїти початкове значення (у даній задачі s:= 0).
Задача 2. Визначити, скільки разів задане дійсне число трапляється серед значень елементів табличної величини.
Очевидно, що для розв’язування цієї задачі потрібно переглянути по­слідовно значення всіх елементів табличної величини, порівняти кожне з них із заданим числом, і якщо деяке з них дорівнює цьому числу, то збільшити лічильник таких елементів на 1.
Задача 3. Визначити, чи є задане дійсне число серед значень елементів даної табличної величини.
Цю задачу можна було б розв’язати аналогічно до попередньої: визна­чити, скільки елементів табличної величини дорівнюють заданому числу, і якщо ця кількість дорівнює 0, то заданого числа серед значень елемен­тів табличної величини немає, а якщо більше 0, то є.
Але такий метод розв’язування цієї задачі є нераціональним. Уявіть собі, що задане число є значенням уже першого елемента табличної величини. Тоді всі інші її елементи переглядати вже не потрібно, і це значно економить час розв’язування цієї задачі, особливо якщо кількість еле­ментів табличної величини велика.
Для реалізації раціонального методу розв’язування цієї задачі вико­ристаємо змінну логічного типу f і нехай її значення false означатиме, що заданого числа серед значень елементів табличної величини немає, а значення true — що є. Перед початком перегляду значень елементів таб­личної величини присвоїмо змінній f значення false, адже задане число в табличній величині поки що не знайшлося. Порівнюватимемо в циклі послідовно значення елементів табличної величини із заданим числом, і якщо одне з них дорівнює заданому числу, то змінимо значення змінної f на true та перервемо виконання циклу командою break (англ. break — пе­реривати). Виведення реалізуємо залежно від значення змінної f.
Задача 4. Визначити найбільше значення елементів табличної величини.
Спочатку вважатимемо, що значення першого елемента табличної ве­личини є найбільшим. Після цього послідовно переглядатимемо значення всіх інших елементів табличної величини, і якщо трапиться значення, що більше того, яке на даний момент вважаємо найбільшим, то вважати­мемо тепер уже це значення найбільшим.
Задача 5. Дано табличну величину, значення всіх елементів якої різні. Визначити найбільше та найменше значення серед елементів цієї  таблич­ної величини та поміняти їх місцями.
Оскільки треба поміняти місцями найбільше та найменше значення серед значень елементів табличної величини, то потрібно визначити не тільки самі ці значення, а ще й номер елемента, значення якого найбіль­ше, та номер елемента, значення якого найменше. Визначимо все це, пе­реглядаючи значення елементів табличної величини лише один раз.
Спочатку вважатимемо, що значення першого елемента і найбільше, і найменше, а номер найбільшого і найменшого елементів — 1. Після цьо­го послідовно переглядатимемо всі інші елементи масиву. Якщо значення чергового елемента табличної величини більше того значення, яке на той момент вважаємо найбільшим, то замінюємо найбільше значення серед уже переглянутих і номер найбільшого елемента. Якщо ні, то може це значення менше, ніж те, яке поки що вважаємо найменшим. І якщо це так, то замінюємо найменше значення серед уже переглянутих і номер найменшого елемента.
V.  Інструктаж з ТБ
VI. Засвоєння нових знань, формування вмінь
Практичне завдання .
Задача 6. Багаторядкове текстове поле містить дійсні числа. Відомо, що їх кількість не перевищує 20. Увести ці числа як значення елементів таб­личної величини. Визначити суму значень і кількість її елементів, які ма­ють додатні значення. Визначити середнє арифметичне значень цих елемен­тів. Вивести значення цих елементів в інше багаторядкове текстове поле.
  1. Відкрийте вікно середовища Lazarus.
  2. Розмістіть на формі:
  • два багаторядкових текстових поля висотою 400 пікселів;
  • два написи: над першим багаторядковим текстовим полем з тек­стом Елементи та над другим — з текстом Додатні елементи;
  • три текстових поля;
  • три написи по одному зліва від кожного текстового поля з текста­ми відповідно Сума, Кількість, Середнє арифметичне;
  • кнопку з текстом Додатні елементи.
  1. Збережіть проект у папці з іменем Вправа 6.2, створеній у вашій папці.
  2. Створіть обробник події Click для кнопки для обчислення суми додат­них значень елементів табличної величини.
Оскільки за умовою задачі кількість елементів табличної величини невідома, і знаємо лише, що вона не перевищує 20, то в рядку var оголосимо табличну величину максимально можливої кількості елемен­тів (20) з номерами від 0 до 19. Це дасть змогу під час виконання проекту вводити в перше багаторядкове текстове поле довіль­ну кількість чисел, яка не перевищує 20.
Для визначення реальної кількості елементів для кожного такого введення скористаємося властивістю Memol.Lines.
Count, яка, нагадуємо, визначає реальну кількість заповнених рядків багаторяд­кового текстового поля.          
  1. Уведіть такий текст процедури:  для задачі 6
var a: array [0..19] of real; s: real; n, i: integer;
begin
n := Memol.Lines.Count;
for i := 0 to n - 1 do
a[i] := StrToFloat(Memo1.Lines[i]);
s :=0;
for i := 0 to n - 1 do
 If a[i] > 0 Then s := s + a[i];
Editl.Text := FloatToStr(s);
 end;
 
  1. Збережіть оновлену версію проекту.
  2. Запустіть проект на виконання.
  3. Уведіть у перше багаторядкове текстове поле числа: 3,4; -7; 0; -13; 8,75; 23; 15. Виберіть кнопку Додатні елементи. Проаналізуйте отри­маний результат.
  4. Видаліть числа з першого багаторядкового текстового поля та введіть інші: -16; 98,43; 45; 0; 45; -1; 29; -2,67; 55. Виберіть кнопку Додатні елементи. Проаналізуйте отриманий результат.
  5. Закрийте вікно виконання проекту.
  6. Додайте до тексту процедури такий фрагмент:
k := 0;
for і := 0 to n - 1 do
 If a[i] > 0 Then k := k + 1;
Edit2.Text := IntToStr(k);
а також змінну k до списку змінних типу integer у рядку var.
  1. Збережіть оновлену версію проекту.
  2. Уведіть свій набір чисел до першого багаторядкового текстового поля. Виберіть кнопку Додатні елементи. Проаналізуйте отримані резуль­тати.
  3. Закрийте вікно виконання проекту.
  4. Додайте до тексту процедури такий фрагмент:
sa := s/k;
Edit3.Text := FloatToStr(sa);
Memo2.Clear;
for i := 0 to n - 1 do
If a[i] > 0
Then Memo2.Lines.Append(FloatToStr(a[i]));
а також змінну sa до списку змінних типу real у рядку var.
  1. Збережіть оновлену версію проекту.
  2. Увед іть свій набір чисел до першого багаторядкового текстового поля. Виберіть кнопку Додатні елементи. Проаналізуйте отримані резуль­тати. Зверніть особливу увагу на числа, що будуть виведені у друге багаторядкове текстове поле.
  3. Закрийте вікно виконання проекту.
  4. Закрийте вікно середовища Lazarus.
VІІ. Підсумки уроку