Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
05 Массивы одномерные.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
288 Кб
Скачать
☆

2.Приклади програм

Приклад 1. Дано натуральне число n і масив з n цілих чисел ( ). Чи правда, що вміст масиву однаково читається в прямому і зворотному напрям­ках?

Розв’язок.

#include <iostream> #include <conio.h> using namespace std; int main() { int n; // Кількість елементів масиву int a[20]; // Масив bool flag = true; cout << "n = "; cin >> n; for (int i = 0; i < n; i++) { cout << "a[" << i << "] = "; cin >> a[i]; } for (int i = 0, j = n - 1; i < j; i++, j--) if (a[i] != a[j]) { flag = false; break; } if (flag) cout << "Yes"; else cout << "No"; cout << "Press any key"; _getch(); return 0; }

Можна запропонувати декілька варіантів програм для розв’язання сфор­мульованої задачі, які дещо відрізняються від наведеної вище. Так, у наступній програмі використовується тільки одна змінна для індексування:

#include <iostream> #include <conio.h> using namespace std; int main() { int n; // Кількість елементів масиву int a[20]; // Масив bool flag; cout << "n = "; cin >> n; for (int i = 0; i < n; i++) { cout << "a[" << i << "] = "; cin >> a[i]; } for (int i = 0, flag = true; (i < n / 2) && flag; i++) if (a[i] != a[n - 1 - i]) flag = false; if (flag) cout << "Yes"; else cout << "No"; cout << "Press any key"; _getch(); return 0; }

Приклад 2. Які різні цифри входять у ціле число N?

Розв’язок.

#include <iostream> #include <conio.h> using namespace std; int main() { long int N; // Не більше 10 цифр! int Numerals[10], // Різні цифри QuantityOfNumerals, // Кількість різних цифр Numeral; // Виділювана цифра bool Flag; cout << "N = "; cin >> N; cout << "Number " << N << " contains such various numerals: \n"; QuantityOfNumerals = 0; // Поки що немає жодної цифри do { Numeral = abs(N % 10); // Одержуємо нову цифру Flag = false;//Вважаємо, що цифра раніше не виділялася // і в циклі перевіряємо, чи виділялася раніше така цифра for (int i = 0; i < QuantityOfNumerals; i++) if (Numeral == Numerals[i]) { Flag = true; // Раніше така цифра вже була! break; // Вихід з циклу } if (Flag == false) // Краще так: if (!Flag) { Numerals[QuantityOfNumerals] = Numeral; QuantityOfNumerals++; } N = N / 10; // Відтинаємо останню цифру в запису числа } while (N != 0); for (int i = 0; i < QuantityOfNumerals; i++) cout << Numerals[i] << '\n'; cout << "Press any key"; _getch(); return 0; }

Зауважимо, що в програмі цифри виділяються, починаючи від самої пра­вої з них у запису числа. Аналогічно вони і виводяться. Щоб змінити порядок ви­ведення на протилежний, останній цикл for потрібно записати так:

for (int i = QuantityOfNumerals -1; i >= 0; i--) cout << Numerals[i] << '\n';

Значно простішою є така програма:

#include <iostream> #include <conio.h> using namespace std; int main() { long int N; // Не більше 10 цифр! int Amount[10]; // Кількість входжень цифр cout << "N = "; cin >> N; cout << "Number " << N << " contains such various numerals: \n"; for (int i = 0; i < 10; i++) // Поки що вважаємо, що цифри Amount[i] = 0; // не входять у число do { Amount[abs(N % 10)]++; N = N / 10; // Відтинаємо останню цифру в запису числа } while (N != 0); for (int i = 0; i < 10; i++) if (Amount[i] > 0) cout << i << '\n'; cout << "Press any key"; _getch(); return 0; }

Приклад 3. Упорядкувати числовий масив, що вміщує не більш 20 дійсних чисел, за неспаданням методом «бульбашки». Дано натуральне число n ( ) і послідовність дійсних чисел , , …, . Упорядкувати члени послідовності за неспаданням методом «спливання» («бульбашки»). Сутність методу полягає в наступному: для будь-якого значення i з ряду 1, 2, ..., n – 1 послідовно розглядаються всі члени , j = n – 1, n – 2, ..., i – 1, і при виконанні умови члени і міняються місцями з переходом до нового зна­чення j, незалежно від того, переставлялися числа чи ні.

Розв’язок.

#include <iostream> #include <conio.h> using namespace std; int main() { int N; // Кількість елементів масиву double a[20]; // Масив double b; cout << "N = "; cin >> N; for (int i = 0; i < N; i++) { cout << "a[" << i << "] = "; cin >> a[i]; } cout << "\nInitial array\n"; // Виводимо початкові дані for (int i = 0; i < N; i++) cout << a[i] << " "; for (int i = 0; i < N - 1; i++) // Метод "бульбашки" for (int j = N - 1; j > i; j--) if (a[j] < a[j - 1]) { b = a[j]; a[j] = a[j - 1]; a[j - 1] = b; } cout << "\nResultant array\n"; for (int i = 0; i < N; i++) // Виводимо результуючий масив cout << a[i] << " "; cout << "\nPress any key"; _getch(); return 0; }

Приклад 4. Дано натуральне число n ( ), дійсне число w і масив з n дійс­них чисел. Видалити з масиву елемент, що є найближчим до числа w.

Розв’язок.

#include <iostream> #include <conio.h> using namespace std; int main() { double a[20], w; int N; int k; // Номер елемента, що видалятиметься double Min; // Мінімальна відстань cout << "w = "; cin >> w; cout << "N = "; cin >> N; for (int i = 0; i < N; i++) { cout << "a[" << i << "] = "; cin >> a[i]; } cout << "\nInitial array\n"; // Виводимо початкові дані for (int i = 0; i < N; i++) cout << a[i] << " "; k = 0; Min = abs(w - a[0]); for (int i = 1; i < N; i++) // Перебираємо елементи if (fabs(w - a[i]) < Min) { k = i; // Запам'ятовуємо номер елемента Min = fabs(w - a[i]); // та відстань до нього } for (int i = k + 1; i < N; i++) a[i - 1] = a[i]; // Зсув елементів N--; // Розмір масиву зменшився cout << "\nResultant array"; if (N == 0) cout << " is empty"; else { cout << ":\n"; for (int i = 0; i < N; i++) // Виводимо результуючий cout << a[i] << " "; // масив } cout << "\nPress any key"; _getch(); return 0; }

Приклад 5. Дано натуральне число ( ) і масив з дійсних чисел. Визна­чити в цьому масиві кількість ділянок, на яких його елементи убувають.

Розв’язок.

#include <iostream> #include <conio.h> using namespace std; int main() { int n, i; // Кількість елементів масиву double a[100]; // Масив int c; // Кількість ділянок bool flag; cout << "n = "; cin >> n; for (i = 0; i < n; i++) { cout << "a[" << i << "] = "; cin >> a[i]; } c = 0; flag = true; for (i = 1; i < n; i++) // Починаємо з другого елемента if (a[i] > a[i - 1]) // Є зростання { if (flag) // Нова ділянка { c++; flag = false; } } else // Незростання flag = true; cout << "Count = " << c << '\n'; cout << "Press any key"; _getch(); return 0; }