mozok.click » Інформатика » Алгоритми опрацювання табличних величин
Інформація про новину
  • Переглядів: 3787
  • Автор: admin
  • Дата: 14-09-2017, 06:32
14-09-2017, 06:32

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

Категорія: Інформатика

Для розв’язування багатьох прикладних задач треба аналізувати значення величин, що зберігаються в таблицях, упорядковувати дані, підбивати підсумки. Уявіть, що, знаючи результати глядацького онлайн-оцінювання нового фільму, вам потрібно обчислити середнє значення оцінок і визначити кількість глядачів, які поставили найвищу оцінку. Розв’язування таких задач базується на типових алгоритмах опрацювання масивів, які передбачають послідовний перегляд елементів масиву і виконання певних дій із кожним елементом.

Задачі опрацювання масивів

Серед різноманіття задач опрацювання масивів можна виділити такі основні типи (рис. 34.1):

Опрацювання елементів масиву виконується в циклах, де параметром циклу є індекс. Розглянемо способи розв’язування таких задач на прикладі опрацювання числового одновимірного масиву А[1..ВД.

Задачі на змінювання значень елементів масиву



Заміна значень усіх елементів масиву

Алгоритм розв’язування задачі: послідовно перебрати всі елементи масиву і значення чергового елемента змінити за певним правилом (рис. 34.2).

Наприклад, змінити знак елементів на протилежний, надати всім елементам нульові значення, збільшити значення всіх елементів на певну величину.

Подвоїти значення елементів масиву A[1..N].

Заміна значень елементів масиву, що відповідають умові

Алгоритм розв’язування задачі: послідовно перебрати всі елементи масиву; якщо поточний елемент відповідає деякій умові, його значення змінити за певним правилом (рис. 34.3).

В умові може перевірятися значення елемента масиву або його індексу на кратність деякому числу, додатність, рівність нулю тощо.

Від’ємні елементи масиву A[1..N] замінити числом 25.

For і := 1 to N do

If А[і] < 0 Then A[i] := 25;

Елементи масиву A[1..N], що мають парні індекси, замінити нулем. For і := 1 to N do

If і mod 2 = 0 Then А[і] := 0;

Задачі на пошук у масиві елемента із заданою властивістю

Визначення кількості елементів із заданою властивістю

Алгоритм розв’язування задачі: послідовно перебрати всі елементи масиву; якщо черговий елемент відповідає деякій умові, значення лічильника збільшується на 1.

Визначити кількість додатних елементів масиву A[1..N].

К := 0; // лічильник елементів із заданою властивістю

For і := 1 to N do

f А[і] > 0 Then К := К + 1;


Визначення найбільшого (найменшого) елемента масиву

Алгоритм розв’язування задачі: припустити, що найбільшим є перший елемент масиву, після чого послідовно перебрати елементи масиву, починаючи з другого; якщо черговий елемент більший за знайдений раніше максимальний, його значення запам’ятати як максимальне. Часто крім значення найбільшого елемента потрібно знайти і його індекс.

Визначити індекс найбільшого числа в масиві А[1..N].

Max := A[1]; // змінна для збереження найбільшого значення елемента

K := 1; // змінна для збереження індексу найбільшого елемента

For і := 2 to N do // перебираємо елементи, починаючи з другого If А[і] > Max Then begin

Max := A[i]; К := і; end;

Edit1.Text := 'Найбільший елемент має індекс ' + IntToStr(K);

Edit2.Text := 'Max=' + IntToStr(Max);

Визначення номера першого елемента масиву, значення якого відповідає умові

Алгоритм розв’язування задачі: збільшувати індекс і доти, доки елемент з індексом і не задовольнятиме даній умові та величина і не перевищуватиме розмірність масиву. Якщо після виходу з циклу і > N, це означає, що в масиві не знайдено елемента, значення якого відповідає умові.

Визначити номер першого елемента масиву A[1..N], значення якого дорівнює Р (рис. 34.4). і := 0;

Repeat і := і + 1

Until (А[і] = Р) Or (і > N); { N — кількість еле

ментів у масиві А }

If і <= N Then Edit1 .Text := 'і=' + IntToStr(i)

Else Edh:1.Text := 'значення не знайдене';

Задачі на знаходження суми (добутку) елементів

Знайти добуток всіх елементів масиву A[1..N].

P := 1; For i := 1 to N do P := P * A[i];

Знайти суму додатних елементів масиву А[1..N].

S := 0;

For i := 1 to N do If A[i] > 0 Then S := S + A[i];

Питання для самоперевірки

1. Масив А[1..5] заповнено числами 3, 8, 5, 7, 6. Виконайте дії з елементами масиву:

а) For i := 1 to 5 do A[i] := -A[i];

б) For i := 1 to 5 do

If A[i] mod 3 = 0 Then A[i] := A[i] div 3;

в) For i := 1 to 5 do

If і mod 2 =  0  Then  A[i] := 0;

г) S  := 0; For i  :=  1  to 5  do S := S  +  A[i];

д) P  := 1; For i  :=  1  to 5  do If A[i]  <= 5 Then  P  := P  *  A[i];

е) K  := 0; For i  :=  1  to 5  do If A[i]  >  5 Then  K :=  K  +  1;

2. Дано масив А[1..5]. Запишіть оператори для реалізації завдань:

а) ввести з клавіатури значення елементів масиву;

б) знайти добуток елементів масиву;

в) знайти мінімальний елемент масиву;

г) знайти кількість додатних елементів масиву.

3. Складіть програму для виконання завдання: «Масив Numbers[1..50] заповнено випадковими числами в межах від 1 до 100. Визначити, скільки елементів масиву відрізняються від останнього елемента.»


Вправа 34

У магазині обслужили за день N (N < 200) покупців, кожен із яких витратив на покупки не більше за K (K< 500) гривень. Визначити денний прибуток магазину і середню суму споживчого чека. Знайти кількість покупців, які витратили на покупки суму, більшу за середній чек за день.

1) Створіть новий проект. Змініть значення властивості Caption форми, розмістіть на формі компоненти і налаштуйте їхні властивості згідно з рисунком. Текстове поле Edit1 призначене для введення кількості покупців; поле Memo1 — для виведення значень елементів масиву; список ListBox1 — для виведення результатів обчислень.

2) Опишіть змінні, необхідні для розв’язування задачі, як глобальні, тому що областю видимості для них є процедури обробки події обох кнопок:

var Forml: TForml;

Mas: array[1..200] of Integer; sr: Real; N: Integer;

3) Властивості ScrollBars елемента керування Memol задайте значення ssAutoHorizontal.

Створіть процедуру обробки події для кнопки Заповнити масив.

var i: Integer; begin

N := StrToInt(Edit1 .Text);

Randomize; Memol .Clear;

For i := 1 to N do begin Mas[i] := 1 + Random(500);

Memol.Lines. Add(IntToStr(Mas[i])); end; end;

4) Створіть процедуру обробки події для кнопки Обчислити денний прибуток. Результати обчислення виведіть у поле списку ListBoxl. var i, sum: Integer;

begin

sum := 0;

For i := 1 to N do sum := sum + Mas[i];

ListBoxl.Items. Add('Денний прибуток: ' + IntToStr(sum) + ' грн.'); sr := sum/N;

ListBoxl.Items. Add('Сeреднiй чек: ' + FormatFloat('0.##',sr) + ' грн.'); end;

5) Створіть процедуру обробки події для кнопки Знайти кількість чеків. Запишіть оператори для знаходження кількості елементів масиву, значення яких більші за середнє значення. Результати обчислень виведіть у поле списку ListBoxl.

6) Перевірте роботу програми. Збережіть проект у папці Вправа 34. Завершіть роботу за комп’ютером.

Комп'ютерне тестування

Виконайте тестове завдання 34 із автоматичною перевіркою на сайті «Інтерактивне навчання».

 

Це матеріал з підручника Інформатика 9 клас Бондаренко

 






^