Ми обчислювали елементи послідовності таким чином: або підставляли номер елемента послідовності у формулу, або використовували значення попередніх елементів. Але ми завжди знали, скільки елементів послідовності потрібно обчислити та надрукувати, тому використовували оператор FOR.
В описаному нижче алгоритмі, обчислення та друк елементів послідовності обмежується не їх кількістю, а значенням обчисленого елементу або різницею між значеннями двох сусідніх елементів. Ясно, що для реалізації цього алгоритму потрібно використовувати цикл while, бо спочатку потрібно перевірити значення обчисленого елементу, а потім, в залежності від значення, або друкувати цей елемент та обчислювати наступний, або завершувати цикл.
Друкувати числа , i=1, 2, 3... поки ai >=1.2
У цій задачі елементи послідовності обчислюються підставленням їх номера у формулу. Підставимо та отримаємо:
a1=2.0000, a2=1.5000, a3=1.3333, a4=1.2500, a5=1.2000.
Обчислений елемент a6= 1.1667 менший, ніж 1.2, тому він на екран вже не виводиться.
Відповідь |
---|
2.0000 1.5000 1.3333 1.2500 1.2000 |
Вхідних даних немає.
Вихідні:
a – елемент послідовності (дійсного типу, бо є ділення)
Проміжні:
i – номер елемента послідовності (цілого типу)
var i:integer; a:real; begin i:=1; a:=2; while a >=1.2 do begin write(a:1:4,' '); i:=i+1; a:=1+1/i; end; end. |
Дано дійсне число e. Друкувати числа , i=1, 2, 3... поки ai >=e.
Ця задача відрізняється від попередньої тільки тим, що число e, яке обмежує друк обчислених елементів послідовності, вводиться з клавіатури і, в залежності від введеного числа, на екран виводиться більше або менше елементів послідовності.
Ввід | Вивід |
---|---|
1.1 | 2.0000 1.5000 1.3333 1.2500 1.2000 1.1667 1.1429 1.1250 1.1111 1.1000 |
1.3 | 2.0000 1.5000 1.3333 |
Вхідні:
e – число, яке обмежує друк елементів послідовності (дійсного типу, за умовою)
Вихідні:
a – елемент послідовності (дійсного типу, бо є ділення)
Проміжні:
i – номер елемента послідовності (цілого типу)
var i:integer; a,e:real; begin read(e); i:=1; a:=2; while a >=e do begin write(a:1:4,' '); i:=i+1; a:=1+1/i; end; end. |
Дано дійсне число e. Знайти суму всіх чисел , i=1, 2, 3..., які ai >=e
Ця задача відрізняється від попередньої тим, що елементи послідовності, які ai>=e, не виводяться на екран, а накопичуються у суму, яка виводиться на екран після завершення циклу.
Ввід | Вивід |
---|---|
1.1 | 12.9290 |
1.3 | 4.8333 |
Вхідні:
e – число, яке обмежує друк елементів послідовності (дійсного типу, за умовою)
Вихідні:
s – сума елементів послідовності (дійсного типу, бо елементи дійсні)
Проміжні:
i – номер елемента послідовності (цілого типу)
a – елемент послідовності (дійсного типу, бо є ділення)
var i:integer; a,e,s:real; begin read(e); i:=1; a:=2; s:=0; while a >=e do begin s:=s+a; i:=i+1; a:=1+1/i; end; writeln(s:1:4); end. |
Дано дійсне число e. Знайти серед чисел , i=1, 2, 3..., перше число ai < e і його порядковий номер i.
Ця задача відрізняється від задачі у прикладі 2 тим, що елементи послідовності, які ai >=e, обчислюються, але не виводяться на екран. Цикл завершиться при ai < e, яке можна вивести на екран, якщо поставити оператор виводу після завершення циклу.
Ввід | Вивід |
---|---|
1.2 | 1.1667 6 |
Вхідні:
e – число, яке обмежує обчислення елементів послідовності (дійсного типу, за умовою)
Вихідні:
a – елемент послідовності (дійсного типу, бо є ділення)
i – номер елемента послідовності (цілого типу)
var i:integer; a,e:real; begin read(e); i:=1; a:=2; while a >=e do begin i:=i+1; a:=1+1/i; end; writeln(a:1:4,' ',i); end. |
Дано дійсне число e. Друкувати числа , i=1, 2, 3,..., поки ai-1 - ai >=e
Ця задача відрізняється від задачі у прикладі 2 тим, що елементи послідовності обчислюються та виводяться на екран тоді, коли різниця між „попереднім” та „наступним” елементами досить велика та перевищує введене число e.
Тобто потрібно додатково використовувати вже відомий алгоритм: для зберігання елементів послідовності використовувати дві змінних – „попереднє” (a1) та „наступне” (a2). Причому, кожний елемент послідовності (крім першого та останнього) на одному витку циклу є „наступним”, а на другому витку „попереднім”.
Ввід | Вивід |
---|---|
0.03 | 2.0000 1.5000 1.3333 1.2500 1.2000 1.1667 |
0.02 | 2.0000 1.5000 1.3333 1.2500 1.2000 1.1667 1.1429 |
Вхідні:
e – число, яке обмежує друк елементів послідовності (дійсного типу, за умовою)
Вихідні:
a1 – "попередній' елемент послідовності (дійсного типу)
a2 – "наступний" елемент послідовності (дійсного типу)
Проміжні:
i – номер елемента послідовності (цілого типу)
var a1,a2,e:real; i:byte; begin read(e); i:=1; a1:=2; write(a1:1:4,' '); i:=2; a2:=1.5; while a1-a2>=e do begin write(a2:1:4,' '); a1:=a2; i:=i+1; a2:=1+1/i; end; end. |
Дано дійсне число e. Знайти серед чисел , i=1, 2, 3,..., перше число ai і його номер i, таке що ai-1 - ai < e
Ця задача відрізняється від задачі у прикладі 5 тим, що елементи послідовності, які ai-1 - ai>=e, обчислюються? але не виводяться на екран. Цикл завершиться при ai-1 - ai< e. Значення ai та його порядкового номеру i можна вивести на екран, якщо поставити оператор виводу після завершення циклу.
Ввід | Вивід |
---|---|
0.03 | 1.1429 7 |
0.02 | 1.1250 8 |
Вхідні:
e – число, яке обмежує друк елементів послідовності (дійсного типу, за умовою)
Вихідні:
a2 – "наступний" елемент послідовності (дійсного типу)
i – номер елемента послідовності (цілого типу)
Проміжні:
a1 – "попередній" елемент послідовності (дійсного типу)
var a1,a2,e:real; i:byte; begin read(e); i:=1; a1:=2; i:=2; a2:=1.5; while a1-a2>=e do begin a1:=a2; i:=i+1; a2:=1+1/i; end; writeln(a2:1:4,' ',i); end. |
Дано натуральне число n<>1. Чи є воно елементом послідовності Фібоначчі?
Згадаємо послідовність Фібоначчи: 1, 1, 2, 3, 5, 8, 13, 21, ...
Ввід | Вивід |
---|---|
6 | no |
13 | yes |
У послідовності Фібоначчі елементи обчислюються через два попередніх, тому для їх зберігання потрібно три змінних.
Вхідні:
n – число, яке перевіряється (цілого типу, за умовою)
Вихідні:
f3 – "наступне число", яке будемо порівнювати з n (цілого типу)
Проміжні:
f1 – "перше попереднє" число (цілого типу)
f2 – "друге попереднє" число (цілого типу)
var n,f1,f2,f3:longint; begin readln(n); f1:=1; f2:=1; repeat f3:=f2+f1; f1:=f2; f2:=f3; until f3>=n; if f3=n then writeln('yes') else writeln('no'); end. |