
- •Форма № н-6.01
- •Курсова робота
- •2.2 Модульне програмування
- •2.3 Об’єктно-орієнтоване програмування
- •2. Алгоритми обробки одновимірних масивів 2.1 Ініціалізація масиву
- •2. Алгоритми обробки одновимірних масивів 2.1 Ініціалізація масиву
- •2.7 Пошук елементів, що володіють заданою властивістю
- •2.10 Формування нового масиву
- •If (умова)
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) .