Масиви. Частина 3. Приклади розв’язку найпоширеніших задач з одновимірними масивами

Масиви. Частина 3. Приклади розв’язку найпоширеніших задач з одновимірними масивами

Дана тема базується на темі: Масиви. Одновимірні масиви. Ініціалізація масиву


Зміст


1. Знаходження сум та добутків елементів масиву. Приклади

Приклад 1. Задано масив A, що містить 100 цілих чисел. Знайти суму елементів цього масиву. Фрагмент коду, що розв’язує цю задачу.

// сума елементів масиву A зі 100 цілих чисел
int A[100];
int suma; // змінна, що містить суму
int i; // допоміжна змінна

// ввід масиву A
// ...

// Обчислення суми
suma = 0; // обнулити суму
for (i=0; i<100; i++)
    suma += A[i];

Перебір усіх елементів масиву виконується в циклі for. Змінна sum зберігає результуюче значення суми елементів масиву. Змінна i є лічильником, який визначає індекс елементу масиву A[i].



Приклад 2. Задано масив B, що містить 20 дійсних чисел. Знайти суму елементів масиву, що лежать на парних позиціях. Вважати, що позиції 0, 2, 4 і т.д. є парними.

// сума елементів масиву B
// що лежать на парних позиціях
float B[20];
float sum; // змінна, що містить суму
int i; // допоміжна змінна

// ввід масиву
// ...

// Обчислення суми
sum = 0; // обнулити суму
for (i=0; i<20; i++)
    if ((i%2)==0)
        sum += B[i];

У цьому прикладі вираз

(i%2)==0

визначає парну позицію (парний індекс) масиву B. Якщо потрібно взяти непарні позиції, то потрібно написати

(i%2)==1

Приклад 3. Задано масив, що містить 50 цілих чисел. Знайти суму додатніх елементів масиву.

// сума додатніх елементів масиву
int A[50];
int sum; // змінна, що містить суму
int i; // допоміжна змінна

// ввід масиву
// ...

// Обчислення суми
sum = 0; // обнулити суму
for (i=0; i<50; i++)
    if (A[i]>0)
        sum = sum + A[i];

Приклад 4. Задано масив з 50 цілих чисел. Знайти добуток елементів масиву, що є непарними числами.

// добуток непарних елементів масиву
int A[50];
int d; // змінна, що містить добуток
int i; // допоміжна змінна

// ввід масиву
// ...

// Обчислення добутку
d = 1; // початкове встановлення добутку
for (i=0; i<50; i++)
    if ((A[i]%2)==1)
        d = d * A[i];

Щоб визначити, чи елемент масиву A[i] є непарним, потрібно перевірити умову

(A[i]%2)==1

Якщо умова виконується, то елемент масиву є непарне число.

2. Знаходження максимального (мінімального) елементу масиву. Приклади

Приклад 1. Задано масив з 30 дійсних чисел. Знайти елемент (індекс), який має максимальне значення в масиві.

// пошук позиції (індексу), що містить максимальне значення
float B[30];
float max; // змінна, що містить максимум
int index; // позиція елементу, що містить максимальне значення
int i; // допоміжна змінна

// ввід масиву
// ...

// пошук максимуму
// встановити максимум як 1-й елемент масиву
index = 0;
max = B[0];
for (i=1; i<30; i++)
    if (max<B[i])
    {
        max = B[i]; // запам'ятати максимум
        index = i; // запам'ятати позицію максимального елементу
    }

У вищенаведеному прикладі змінна max містить максимальне значення. Змінна index містить позицію елементу, що має максимальне значення. На початку змінній max присвоюєтья значення першого елементу масиву. Потім, починаючи з другого елементу, відбувається проходження всього масиву в циклі for. Одночасно перевіряється умова

if (max<B[i])

Якщо умова виконується (знайдено інший максимум), тоді нове значення максимуму фіксується у змінних max та index.

Вищенаведений приклад знаходить тільки один максимум. Однак, в масивах може бути декілька максимальних значень. У цьому випадку для збереження позицій (індексів) максимальних значень потрібно використовувати додатковий масив як показано у наступному прикладі.

Приклад 2. Задано масив з 50 цілих чисел. Знайти позицію (позиції) елементу, що має мінімальне значення. Якщо таких елементів декілька, сформувати додатковий масив індексів.

// пошук позицій (індексів), що містять мінімальне значення
int A[50];
int min; // змінна, що містить мінімальне значення
int INDEXES[50]; // позиції елементів, що містять мінімальне значення
int n; // кількість однакових мінімальних значень
int i; // допоміжна змінна

// ввід масиву
// ...

// 1. Пошук мінімального значення
// встановити мінімум як 1-й елемент масиву
min = A[0];
for (i=1; i<50; i++)
    if (min>A[i])
        min = A[i]; // запам'ятати мінімальне значення

// 2. Формування масиву
n = 0; // онулити лічильник в масиві INDEXES
for (i=0; i<50; i++)
    if (min == A[i])
        {
            n++; // збільшити кількість елементів в INDEXES
            INDEXES[n-1] = i; // запам'ятати позицію
        }

listBox1->Items->Clear();

// 3. Вивід масиву INDEXES в listBox1
for (i=0; i<n; i++)
    listBox1->Items->Add(INDEXES[i].ToString());

У вищенаведеному лістингу спочатку шукається мінімальне значення min.

На другому кроці формується масив INDEXES, в якому кількість елементів записується в змінну n. Відбувається пошук мінімального значення в масиві A з одночасним формуванням масиву INDEXES.

На третьому кроці наведено приклад, як вивести масив INDEXES в елемент управління listBox1(ListBox).

3. Сортування масиву методом вставки

Приклад. Дано масив A з 10 цілих чисел. Здійснити сортування елементів масиву у спадному порядку з допомогою методу вставки.

// сортування масиву методом вставки
int A[10];
int i,j; // допоміжні змінні - лічильники
int t; // допоміжна змінна

// ввід масиву A
// ...

// сортування
for (i=0; i<9; i++)
    for (j=i; j>=0; j--)
        if (A[j]<A[j+1])
        {
            // поміняти місцями A[j] та A[j+1]
            t = A[j];
            A[j] = A[j+1];
            A[j+1] = t;
        }

4. Пошук елементу в масиві. Приклади

Приклад 1. Визначити, чи знаходиться число k в масиві M з 50 цілих чисел.

// визначення наявності заданого числа в масиві чисел
int M[50];
int i;
int k; // шукане значення
bool f_is; // результат пошуку, true - число k є в масиві, інакше false

// ввід масиву M
// ...
// ввід числа k
// ...

// пошук числа в масиві
f_is = false;
for (i=0; i<50; i++)
    if (k==M[i])
        {
            f_is = true; // число знайдене
            break; // вихід з циклу, подальший пошук не має сенсу
        }

// вивід результату
if (f_is)
    label1->Text = "Число " + k.ToString() + " є в масиві M.";
else
    label1->Text = "Числа " + k.ToString() + " немає в масиві M.";

Приклад 2. Знайти всі позиції входження числа k в масиві M з 50 цілих чисел.

// визначення всіх позицій заданого числа в масиві чисел
int M[50]; // масив чисел
int i; // допоміжна змінна
int k; // шукане значення
int INDEXES[50]; // шуканий масив позицій входження числа k
int n; // кількість знайдених позицій або кількість елементів в масиві INDEXES

// ввід масиву M
// ...
// ввід числа k
// ...

// пошук числа k в масиві M і одночасне формування масиву INDEXES
n = 0;
for (i=0; i<50; i++)
    if (k==M[i])
    {
        // число знайдено
        n++;
        INDEXES[n-1] = i;
    }

// вивід результату в listBox1
listBox1->Items->Clear();

for (i=0; i<n; i++)
    listBox1->Items->Add(INDEXES[i].ToString());


Зв’язані теми