Назад
Зміст
Вперед
Задачі на обчислення елементів послідовності через попередні елементи
Послідовність – це сукупність чисел, кожне з яких має свій порядковий номер та утворюється за якоюсь формулою або правилом.
Приклад 1
Обчислимо, п'ять елементів послідовності

Для цього підставимо у формулу значення i= 1, 2, 3, 4, 5
a1=1/1=1.00
a2=1/2=0.50
a3=1/3=0.33
a4=1/4=0.25
a5=1/5=0.20
Це дійсні числа 1 0.5 0.33 0.25 0.20
Програма
int i; double a;
cout << fixed; cout.precision(2);
for (i=1;i<=5;i++)
{
a=1.0/i;
cout <<a <<" ";
}
Пояснення коду:
- int i; double a; - оголошення змінних:
- i - лічильник циклу (ціле число)
- a - змінна для зберігання результату обчислень (число з плаваючою точкою)
- cout << fixed; cout.precision(2); - налаштування формату виводу:
- fixed - фіксований формат виводу чисел
- precision(2) - вивід з двома знаками після коми
- for (i=1;i<=5;i++) - цикл, що виконується 5 разів (від 1 до 5)
- a=1.0/i; - обчислення оберненого значення до i (1 поділити на поточне значення лічильника)
- cout <<a <<" "; - вивід результату з пробілом
Результат роботи програми: Виведе числа 1.00 0.50 0.33 0.25 0.20 (значення 1/i для i від 1 до 5 з точністю до двох знаків після коми)
Інші послідовності
Але таким чином можна обчислити елементи не для всіх послідовностей.
Якщо у формулі для обчислення елемента ai присутній один чи декілька попередніх
елементів (ai-1 або ai-2),
або формула для обчислення елементу послідовності містить факторіал,
або словесно вказується, як обчислюється „наступний” елемент через „попередній”,
то цей алгоритм не підходить.
Ми знаємо арифметичну і геометричну прогресію, послідовність Фібоначчі і інші
Арифметична прогресія
Кожне наступне число є сумою попереднього числа та числа 4
3 7 11 15 19 ...
Кожне наступне число є сумою попереднього числа та від’ємного числа -5
45 40 35 30 25 20 ...
Геометрична прогресія
Кожне наступне число є добутком попереднього числа та числа 2
3 6 12 24 48 96...
Кожне наступне число є добутком попереднього числа та числа 0.1
2000.0 200.0 20.0 2.0 0.2 0.02 ...
Факторіал
i!=1*2*3*…*i
Наприклад, 5!=1*2*3*4*5=120
Числа Фібоначчи
Перше і друге числа рівні 1. Кожне наступне число дорівнює сумі двох попередніх
1 1 2 3 5 8 13 21 34...
Правило обчислення елементів послідовності через один попередній
- Для значень елементів послідовності досить одної змінної (a). Порядкові номери елементів в програмі не використовуються.
- Перед циклом потрібно присвоїти перше значення змінній (a). Воно буде „попереднім” (для приклада a=3).
- У циклі, (цикл від 2, бо одне число вже обчислили):
- Виводиться на екран „попередній” елемент (a);
- За формулою обчислюється „наступний” елемент і його значення присвоюється тій же самій змінній (для приклада a=a+4);
- Останній виток циклу для i=n+1, тому що на кожному витку ми виводимо на екран „попередній” елемент та обчислюємо „наступний”.
Тобто при i=2 виводимо на екран a1, а обчислюємо a2, при i=3 виводимо на екран a2,
а обчислюємо a3 і т і. Тобто, останній елемент an виведеться на екран при i=n+1.
|
Приклад 2
Обчислимо, п'ять елементів послідовності

Програма
int i,a;
a=3;
for (i=2;i<=6;i++)
{
cout << a << " ";
a=a+4;
}
Пояснення коду:
- int i,a; - оголошення змінних:
- i - лічильник циклу (ціле число)
- a - змінна для зберігання та обчислення значень (ціле число)
- a=3; - ініціалізація змінної a значенням 3
- for (i=2;i<=6;i++) - цикл, що виконується для значень i від 2 до 6 включно (5 ітерацій)
- cout << a << " "; - виведення поточного значення змінної a з пробілом
- a=a+4; - збільшення значення a на 4 після кожної ітерації
Результат роботи програми: Виведе послідовність чисел 3 7 11 15 19 (кожне наступне число на 4 більше за попереднє)
Логіка роботи:
- Початкове значення a = 3
- Перша ітерація (i=2): виводить 3, a стає 7
- Друга ітерація (i=3): виводить 7, a стає 11
- Третя ітерація (i=4): виводить 11, a стає 15
- Четверта ітерація (i=5): виводить 15, a стає 19
- П'ята ітерація (i=6): виводить 19, a стає 23
Приклад 3
Дано ціле число n. Надрукувати n елементів послідовності

З визначення факторіала не видно, як можна обчислити i! через попереднє значення. Щоб отримати цю формулу виконаємо обчислення:
a1=1!=1
a2=2!=1*2=a1*2=2
a3=3!=1*2*3=a2*3=6
a4=4!1*2*3*4=a3*4=24
a5=5!=1*2*3*4*5=a4*5=120
Звідси, формула:
a1=1; ai= ai-1*i, при і=2,3, …
int i,a,n;
cin >> n;
a=1;
for (i=2;i<=n+1;i++)
{
cout << a << " ";
a=a*i;
}
Приклад роботи програми:
Якщо ввести n=5, програма виведе: 1 2 6 24 120
Математична логіка:
- Початкове значення a = 1 (0! = 1)
- Перша ітерація (i=2): виводить 1 (0!), a = 1*2 = 2 (1!)
- Друга ітерація (i=3): виводить 2 (1!), a = 2*3 = 6 (2!)
- Третя ітерація (i=4): виводить 6 (2!), a = 6*4 = 24 (3!)
- Четверта ітерація (i=5): виводить 24 (3!), a = 24*5 = 120 (4!)
- П'ята ітерація (i=6): виводить 120 (4!), a = 120*6 = 720 (5!)
Таким чином, програма виводить послідовність факторіалів чисел від 0 до n-1.
Приклад 4
Дано ціле число n. Надрукувати n елементів послідовності

Задача дуже схожа на попередню, але є одна важлива відмінність.
З формули видно, що вона складається з двох частин.
- i!, накопичується, обчислюється через попередній елемент. Для нього потрібне початкове значення.
- Обчислюється а = i! +2 (не накопичується). Початкового значення не має.
Тому для накопичення i! використовується одна змінна, а для обчислення елемента а послідовності інша змінна.
int i, a, n, f;
cin >> n; f=1;
for (i=2; i<=n+1; i++)
{
a=f+2;
cout << a << " ";
f=f*i;
}
Приклад роботи програми:
Якщо ввести n=4, програма виведе: 3 4 8 26
Детальний розбір:
- Початкові значення: n=4, f=1
- Перша ітерація (i=2):
- a = 1 + 2 = 3
- Виведення: 3
- f = 1 * 2 = 2
- Друга ітерація (i=3):
- a = 2 + 2 = 4
- Виведення: 4
- f = 2 * 3 = 6
- Третя ітерація (i=4):
- a = 6 + 2 = 8
- Виведення: 8
- f = 6 * 4 = 24
- Четверта ітерація (i=5):
- a = 24 + 2 = 26
- Виведення: 26
- f = 24 * 5 = 120
Математична логіка: Програма виводить послідовність значень (n-1)! + 2 для n від 1 до введеного значення.
Приклад 5
Дано ціле число n. Надрукувати n елементів послідовності

З формули не видно, як отримати наступний елемент через попередній. Виконаємо обчислення елементів, підставимо значення і у формулу:
a1=3!=1*2*3=6
a2=5!=1*2*3*4*5=3!*4*5=120
a3=7!=1*2*3*4*5*6*7=5!*6*7=5040
a4=9!=1*2*3*4*5*6*7*8*9=7!*8*9=362880
Звідси, формула:
a1=6; ai= ai-1*2*i*(2*i+1), при і=2,3, …
Тобто, перший елемент, при і=1 a1=6;
Кожний наступний отримаємо помножаючи попередній на 2*i*(2*i+1)
int i,a,n;
cin >> n;
a=6;
for (i=2;i<=n+1;i++)
{
cout << a << " ";
a=a*(2*i+1)*(2*i);
}
Приклад роботи програми:
Для n=3 програма виведе: 6 180 37800
Детальний розбір:
- Початкові значення: n=3, a=6
- Перша ітерація (i=2):
- Виведення: 6
- a = 6*(2*2+1)*(2*2) = 6*5*4 = 120
- Друга ітерація (i=3):
- Виведення: 120
- a = 120*(2*3+1)*(2*3) = 120*7*6 = 5040
- Третя ітерація (i=4):
- Виведення: 5040
- a = 5040*(2*4+1)*(2*4) = 5040*9*8 = 362880
Математична закономірність:
Програма генерує послідовність чисел, де кожен наступний елемент обчислюється як попередній, помножений на (2i+1)*(2i), де i - номер ітерації. Початкове значення 6 = 3! (факторіал 3).
Послідовність можна представити як добутки факторіалів непарних чисел:
- 6 = 3!
- 180 = 3! × 5 × 4
- 37800 = 3! × 5 × 4 × 7 × 6
- і так далі...
Приклад 6
Дано ціле число n. Надрукувати n елементів послідовності

Результат можна отримати діленням 1 на відповідний елемент послідовності
int i,n,f=6; double a;
cin >> n;cout << fixed;
cout.precision(8);
for (i=2; i<=n+1;i++)
{
a=1.0/f;
cout << a << " ";
f=f*(2*i+1)*(2*i);
}
Пояснення коду:
- int i,n,f=6; double a; - оголошення змінних:
- i - лічильник циклу
- n - кількість елементів для обчислення
- f - знаменник (ініціалізований як 6)
- a - результат обчислення (1/f)
- cin >> n; cout << fixed; - введення n та встановлення фіксованого формату виводу
- cout.precision(8); - встановлення точності виводу до 8 знаків після коми
- for (i=2; i<=n+1;i++) - цикл для обчислення n елементів
- a=1.0/f; - обчислення поточного елементу послідовності
- cout << a << " "; - виведення результату
- f=f*(2*i+1)*(2*i); - оновлення знаменника для наступної ітерації
Приклад роботи (n=3):
Виведе: 0.16666667 0.00555556 0.00002646
Математична суть:
- Початковий елемент: 1/6 ≈ 0.16666667
- Другий елемент: 1/(6×5×4) = 1/120 ≈ 0.00833333
- Третій елемент: 1/(120×7×6) = 1/5040 ≈ 0.00019841
- Четвертий елемент: 1/(5040×9×8) = 1/362880 ≈ 0.00000276
Зв'язок з математичними рядами:
Ця послідовність пов'язана з оберненими факторіалами та може бути використана для обчислення деяких спеціальних функцій у математиці.
Форматування виводу:
- Використовується фіксований формат з 8 знаками після коми
- Між значеннями вставляються пробіли
Приклад 7
Дано натуральне число n. Надрукувати n чисел, що створюють послідовність Фібоначчи:
f1=1; f2=1; fi=fi-2+fi-1; i=3,4,5...
В цій формулі для обчислення елементів послідовності видно, що кожний елемент, починаючи з третього, обчислюється через два попередніх (fi-1 та fi-2 ).
Правило обчислення елементів послідовності через два попередніх
- Для значень елементів послідовності потрібно три змінних (a1, a2, a3).
- Перед циклом потрібно:
- присвоїти початкові значення першим двом змінним (a1, a2). Вони повинні співпадати з двома першими елементами послідовності.
- Вивести на екран значення першої змінної (a1).
- У циклі, (цикл від 2, бо одне число вже вивели на екран):
- Вивести на екран значення другої змінної (a2).
- За формулою обчислити значення третьої змінної a3, через a1 та a2.
- Перед переходом на наступний виток циклу переприсвоюємо значення двох „попередніх” елементів: a1=a2, a2=a3.
- Останній виток циклу для i=n, тому що на кожному витку ми виводимо на екран і-й елемент послідовності та обчислюємо і+1-й елемент. Тобто при i=2 виводимо на екран друге число та обчислюємо третє, при i=3 виводимо на екран третє число, та обчислюємо четверте і т і. Тобто, останній елемент виведеться на екран при i=n.
|
Результат роботи програми
| Ввід | Вивід | Пояснення |
| 6 | 1 1 2 3 5 8 | Вводимо 6 - кількість чисел. Отримаємо шість елементів послідовності Фібоначчи
|
Змінні:
Вхідні:
- n – кількість чисел (цілого типу)
Вихідні:
- f1– „перше попереднє” число (цілого типу, за умовою)
- f2– „друге попереднє” число (цілого типу, за умовою)
- f3– „наступне число” (цілого типу, за умовою)
Проміжні:
- i – параметр циклу (цілого типу)
Алгоритм
- Спочатку вводимо n – кількість чисел, що потрібно обчислити та вивести на екран.
- До початку циклу присвоїмо початкові значення двом попереднім елементам: змінним f1 та f2.
Вони співпадають з двома першими числами послідовності та дорівнюють 1.
- Виводимо на екран «перше попереднє» число.
- У циклі будемо виконувати такі дії:
- Виводимо на екран «друге попереднє» число.
- Оператор f3=f1+f2 обчислює „наступне” число.
- Перед переходом на наступний виток циклу, „друге попереднє” число повинно стати „першим попередним”
f1=f2, а „наступне” число повинно стати „другим попереднім” f2=f3.
int i,n,f1,f2,f3;
cin >> n;
f1=1; cout << f1 << " ";
f2=1;
for (i=2;i<=n;i++)
{
cout << f2 << " ";
f3=f1+f2;
f1=f2; f2=f3;
}
Пояснення коду:
- int i,n,f1,f2,f3; - оголошення змінних:
- i - лічильник циклу
- n - кількість чисел послідовності для виведення
- f1, f2, f3 - змінні для обчислення чисел Фібоначчі
- cin >> n; - введення кількості чисел
- f1=1; cout << f1 << " "; - ініціалізація та виведення першого числа (1)
- f2=1; - ініціалізація другого числа
- for (i=2;i<=n;i++) - цикл для генерації та виведення чисел
- cout << f2 << " "; - виведення поточного числа
- f3=f1+f2; - обчислення наступного числа як суми двох попередніх
- f1=f2; f2=f3; - оновлення значень для наступної ітерації
Приклад роботи (n=7):
Виведе: 1 1 2 3 5 8 13
Хід виконання:
| Ітерація | f1 | f2 | f3 | Вивід |
| Початок | 1 | 1 | - | 1 |
| i=2 | 1 | 1 | 2 | 1 |
| i=3 | 1 | 2 | 3 | 2 |
| i=4 | 2 | 3 | 5 | 3 |
| i=5 | 3 | 5 | 8 | 5 |
| i=6 | 5 | 8 | 13 | 8 |
| i=7 | 8 | 13 | 21 | 13 |
Особливості:
- Генерує послідовність Фібоначчі
- Виводить перші n чисел послідовності
- Починається з двох одиниць (1, 1, 2, 3, 5...)
- Використовує три змінні для обчислення наступного числа
Варіанти задач
Варіант 1
- Надрукуйте у рядок 10 чисел з 1 знаком після крапки, якщо перше число 0.5, а кожне наступне число є сумою попереднього та числа 3.5.
- Дано натуральне n. Надрукувати n чисел ai=2*i!, де i=1, 2, ...n.
Варіант 2
- Надрукуйте у рядок 10 чисел з 3 знаками після крапки, якщо перше число 1, а кожне наступне число є добутком попереднього та 0.5.
- Дано натуральне n. Надрукувати n чисел ai=(i+1)! , де i=1, 2, ...n.
Варіант 3
- Надрукуйте у рядок 10 чисел з 3 знаками після крапки, якщо перше число 5, а кожне наступне число є добутком попереднього та дійсного числа b.
- Дано натуральне n. Надрукувати n чисел ai=(2*i)! , де i=1, 2, ...n.
Варіант 4
- Надрукуйте у рядок 10 чисел з 1 знаком після крапки, якщо перше число 1000, а кожне наступне число є добутком попереднього та числа 0.5.
- Дано натуральне n. Надрукувати n чисел ai=(2*i-1)! , де i=1, 2, ...n.
Варіант 5
- Дано натуральне n. Надрукувати n чисел: a1=1, ai=2*ai-1+1 де i=2,3...n
- Дано натуральне n. Надрукувати з 5 знаками після крапки n чисел:

Варіант 6
- Дано натуральне n. Надрукувати n чисел: a1=1, ai=3*ai-1+2 де i=2,3...n
- Дано натуральне n. Надрукувати з 7 знаками після крапки n чисел:

Варіант 7
- Дано натуральне n. Надрукувати з 2 знаками після крапки n чисел:

- Дано натуральне n. Надрукувати з 7 знаками після крапки n чисел:

Варіант 8
- Дано натуральне n. Надрукувати з 4 знаками після крапки n чисел:

- Дано натуральне n. Надрукувати з 5 знаками після крапки n чисел:

Варіант 9
- Дано натуральне n. Надрукувати з 4 знаками після крапки n чисел:

- Дано натуральне n. Надрукувати з 5 знаками після крапки n чисел:

Варіант 10
- Дано натуральне n. Надрукувати з 2 знаками після крапки n чисел:

- Дано натуральне n та дійсне х. Надрукувати з 5 знаками після крапки n чисел:

Варіант 11
- Дано натуральне n. Надрукувати з 6 знаками після крапки n чисел:

- Дано натуральне n та дійсне х. Надрукувати з 5 знаками після крапки n чисел:

Варіант 12
- Дано натуральне n. Надрукувати з 6 знаками після крапки n чисел:

- Дано натуральне n та дійсне х. Надрукувати з 5 знаками після крапки n чисел:

Варіант 13
- Дано натуральне n. Надрукувати з 6 знаками після крапки n чисел:

- Дано натуральне n та дійсне х. Надрукувати з 5 знаками після крапки n чисел:

Варіант 14
- Дано натуральне n. Надрукувати з 4 знаками після крапки n чисел:

- Дано натуральне n. Надрукувати з 5 знаками після крапки n чисел:

Варіант 15
- Дано натуральне n. Надрукувати з 5 знаками після крапки n чисел:

- Послідовність u1, u2, u3, ... утворюється за законом u1=0; u2=1; ui=ui-2+ui-1+fi (i=3,4, ...),
де fi відповідний член послідовності Фібоначчі (f1=1; f2=1; f3=2; f4=3; f5=5;...). Дано натуральне число n.
Надрукуйте послідовність u1, u2, u3,..., un (0 1 3 7 15 30...).
Варіант 16
- Послідовність u1, u2, u3, ... утворюється за законом u1=0; u2=1; ui=ui-2+ui-1+fi-1 (i=3,4, ...),
де fi-1 відповідний член послідовності Фібоначчі (f1=1; f2=1; f3=2; f4=3; f5=5;...). Дано натуральне число n.
Надрукуйте послідовність u1, u2, u3,..., un (0 1 2 5 10 20 ...).
- Дано натуральне n. Надрукуйте з 6 знаками після крапки послідовність чисел n чисел:

Варіант 17
- Послідовність u1, u2, u3, ... утворюється за законом u1=0; u2=1; ui=ui-2+ui-1+fi-2 (i=3,4, ...),
де fi-2 відповідний член послідовності Фібоначчі (f1=1; f2=1; f3=2; f4=3; f5=5;...). Дано натуральне число n.
Надрукуйте послідовність u1, u2, u3,..., un (0 1 2 4 8 15 ...).
- Дано натуральне n. Надрукуйте з 3 знаками після крапки послідовність чисел n чисел:

Назад
Зміст
Вперед