Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
161693.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
188.42 Кб
Скачать

2. Алгоритми обробки одновимірних масивів 2.1 Ініціалізація масиву

Ініціалізація масиву - це привласнення елементам масиву початкових значень. Ініціалізацію масиву можна виконати на етапі опису масиву, як це показано в п.1.1. Але в тому випадку, коли початкові значення отримують лише деякі елементи масиву, а інші обчислюються в процесі виконання програми, в програмі записують оператори присвоювання. Наприклад:

a [0] = -1; a [1] = 1.1;

Присвоювання всім елементам масиву одного і того ж значення здійснюється в циклі. Наприклад, щоб усім елементів масиву a присвоїти значення 0, можна скористатися алгоритмом зображений на рис. 2.1.

for (i = 0; i

a [i] = 0;

// або за допомогою циклу while

i = 0;

while (i

{

a [i] = 0;

i = i +1;

}

Малюнок 2.1 Алгоритм і фрагмент програми ініціалізації масиву

У представленому алгоритмі всі елементи масиву в циклі послідовно инициализируются значення...

a [i];

i = i + step;

}

Малюнок 2.6 Графічна схема і фрагмент програми обчислення суми елементів масиву стоять на заданих місцях

Наприклад, щоб обчислити суму елементів, що стоять в масиві на парних місцях, необхідно "Змусити" i приймати значення 1, 3, 5, ... (оскільки нумерація елементів масиву в С починається з нуля тобто елемент масиву з індексом a [0] - перший елемент масиву). Для цього досить у блоці 2 записати i = 1 , в блоці 3 - ( i , а в блоці 5 записати i = i +2 ( step = 2 ). У програмі на мові С відповідний фрагмент буде виглядати наступним чином:

s = 0;

for (i = 1; i

s + = a [i];// або s = s + a [i];

Для обчислення суми тільки тих елементів, які задовольняють деякому умові , необхідно в алгоритмі обчислення суми (малюнок 2.6) блок 4 замінити на розгалуження, яке забезпечує виконання команди s = s + a i тільки тоді, коли умова виконана для розглянутого елемента масиву a i . У цьому випадки алгоритм обчислення суми прийме наступний вигляд (рисунок 2.7).

/* за допомогою циклу for */

s = 0;

for (i = in; i

if (умова) s + = a [i];// або s = s + a [i];

/* за допомогою циклу w hile */

s = 0; i = in;

while (i

{

if (умова) s + = a [i];

i = i + step;

}

Малюнок 2.7 Графічна схема і фрагмент програми обчислення суми елементів масиву стоять на заданих місцях

Застосуємо отриманий алгоритм для обчислення суми позитивних елементів масиву стоять на непарних місцях. Для цього в блоці 2 запишемо i = 0 , в блоці 3 ( i , в 4 умова - ( a [i]> 0 ), а в блоці 6 зміна параметра циклу ( Step = 2 ) i = i +2 . Тоді відповідний фрагмент програми можна записати у вигляді:

s = 0;

for (i = 0; i

if (a [i]> 0) s + = a [i];// або s = s + a [i];

Розглянемо приклади використання розглянутих алгоритмів.

Приклад 2.3.

У одновимірному масиві a розмірністю n , обчислити суму елементів масиву, менших заданого значення В і стоять на місцях, кратних трьом.

Рішення

Об'єднаємо алгоритми введення - виведення масиву (рисунок 2.2) і обчислення суми (малюнок 2.7). Для скорочення запису графічної схеми алгоритму введення і виведення масиву, тут і надалі використовуємо прості блоки виду:

В алгоритмі для обчислення шуканої суми розглядаються тільки ті елементи, які в масиві стоять на місцях, кратних трьом, при цьому необхідно враховувати що нумерація елементів масиву в С починається з нуля тобто елемент масиву з індексом a [0] це перший елемент масиву. Таким чином, елементи стоять на місцях кратних трьом - а 2 , а 5 , а 8 , ..., індекс елемента масиву (Він же - параметр циклу) повинен послідовно приймати значення 2, 5, 8, ..., тобто змінюватися від 2 із кроком 3, що і досягається змінами в блоках 2 і 6 алгоритму обчислення суми (малюнок 2.7). Так в блоці 2 запишемо i = 2 , в блоці 3 ( i , а в блоці 6 - ( step = 3 ) i = i +3 . Для підсумовування з розглянутих елементів тільки тих, які менше заданого В , використовується розгалуження з умовою а i <В (Блок 4). Остаточний алгоритм обчислення суми заданих елементів прийме, наступний вигляд (рисунок 2.8). У задачі будемо використовувати динамічний спосіб завдання масиву. У даному прикладі для звернення до елементів масиву використовуються покажчики. Як вже зазначалося в розділі 1.1, ім'я масиву є покажчиком на його перший елемент.

Використовувані змінні:

n - число елементів масиву;

a [] - динамічний масив;

s - сума елементів масиву;

B - задане число;

i - параметр циклу;

# include

main ()

{

int n, i;

float s, B;

puts ("Введіть число елементів масиву a ");

scanf ("% d", & n);

float * a = new float [n];

for (i = 0; i

{printf ("Введіть число a [% 2d] = ", i);

scanf ("% f", a + i);

}

puts ("Введіть B");

scanf ("% f", & B);

s = 0;

for (i = 2; i

if (* (a + i)

puts ("Масив a");

for (i = 0; i

printf ("% .1 f ", * (A + i));

printf (" n");

printf ("Сума чисел, менших % .1 F, що стоять на місцях, кратних 3, дорівнює% .2 f n ", B, s);

delete [] a;// звільнення пам'яті

return (0);

}

Малюнок 2.8 Графічна схема і програма прикладу 2.3

2.5 Підрахунок кількості елементів масиву, що задовольняють заданій умові

Підрахунок кількості елементів масиву, задовольняють заданій умові, проводиться за алгоритмами, аналогічним обчисленню суми. Відмінність полягає в тому, що замість додавання елемента масиву до суми, змінна - лічильник ( k ) збільшується на одиницю ( k = k +1 ). Таким чином, якщо в графічних схемах алгоритмів, малюнок 2.5-2.7, замість s = 0 і s = s + a i записати k = 0 і k = k +1 , 2.9.

}

Оскільки

Наприклад, для

main ()

{

}

{

полож.

}

. (2.5)

елементів.

. твір

p>

# include

# include

main ()

{

float a [20];

int n, i, k;

double P, Sg;

puts ("Введіть число елементів масиву a ");

scanf ("% d", & n);

for (i = 0; i

{printf ("Введіть число a [% 2d] = ", i);

scanf ("% f", & a [i]);

}

P = 1; k = 0;

for (i = 0; i

if (a [i]! = 0) {P * = a [i]; k + +;}

puts ("Масив a");

for (i = 0; i

printf ("a [% 2d] =% 6.2f N ", i, a [i]);

if (k> 0)

{

if (P> 0) Sg = powl (P, 1.0/k);

else Sg =-powl (fabs (P), 1.0/k);

printf ("Середнє геометричне ненульових елементів масиву =% .4 lf n ", Sg);

printf ("P =% .4 lf k =% d n ", P, k);

}

else puts ("У масиві всі елементи дорівнюють нулю! ");

return (0);

}

Малюнок 2.11 Графічна схема і програма для прикладу 2.6

У програмі для зведення P в ступінь 1/k використовується функція

powl (підстава, ступінь) , перший аргумент якої може бути тільки позитивним числом. Тому для негативного P використано вираз, запис якого на мові З має вигляд: - powl (fabs (P), 1.0/k) .