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; }
