C++. Масиви. Частина 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());


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