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

Задачі на обчислення елементів послідовності з заданою точністю

Ми обчислювали елементи послідовності таким чином: або підставляли номер елемента послідовності у формулу, або використовували значення попередніх елементів. Але ми завжди знали, скільки елементів послідовності потрібно обчислити та надрукувати, тому використовували оператор FOR.

В описаному нижче алгоритмі, обчислення та друк елементів послідовності обмежується не їх кількістю, а значенням обчисленого елементу або різницею між значеннями двох сусідніх елементів. Ясно, що для реалізації цього алгоритму потрібно використовувати цикл while, бо спочатку потрібно перевірити значення обчисленого елементу, а потім, в залежності від значення, або друкувати цей елемент та обчислювати наступний, або завершувати цикл.

Приклад 1

Друкувати числа , 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

Змінні:

Вхідних даних немає.

 

Вихідні:

Проміжні:

Алгоритм

  1. До початку циклу присвоїмо початкові значення змінним a та i. Вони повинні співпадати з даними першого елемента послідовності. Номер елемента i:=1, значення елемента a:=2.
  2. Нам потрібно друкувати елементи послідовності, які >=1.2. Тому у заголовку циклу while будемо перевіряти цю умову:
  3. У тілі циклу, в операторних дужках будемо виконувати такі дії:

Програма

 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.

Приклад 2

Дано дійсне число 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

Змінні:

Вхідні:

Вихідні:

Проміжні:

Програма

 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.

Приклад 3

Дано дійсне число e. Знайти суму всіх чисел , i=1, 2, 3..., які ai >=e

Ця задача відрізняється від попередньої тим, що елементи послідовності, які ai>=e, не виводяться на екран, а накопичуються у суму, яка виводиться на екран після завершення циклу.

Результат роботи програми

Ввід Вивід
1.1 12.9290
1.3 4.8333

Змінні:

Вхідні:

Вихідні:

Проміжні:

Алгоритм

  1. До початку циклу присвоїмо початкові значення змінним a та i. Вони повинні співпадати з даними першого елемента послідовності (номер елемента i:=1, значення елемента a:=2).
  2. Ми будемо накопичувати суму. Тому присвоїмо початкове значення суми s:=0.
  3. Введемо з клавіатури значення e оператором read(e).
  4. Нам потрібно друкувати елементи послідовності, які >= e. Тому у заголовку циклу while будемо перевіряти цю умову:
  5. У тілі циклу, в операторних дужках будемо виконувати такі дії:
  6. Коли цикл закінчиться, виведемо на екран накопичену суму оператором writeln(s:1:4).

Програма

 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.

Приклад 4

Дано дійсне число e. Знайти серед чисел , i=1, 2, 3..., перше число ai < e і його порядковий номер i.

Ця задача відрізняється від задачі у прикладі 2 тим, що елементи послідовності, які ai >=e, обчислюються, але не виводяться на екран. Цикл завершиться при ai < e, яке можна вивести на екран, якщо поставити оператор виводу після завершення циклу.

Результат роботи програми

Ввід Вивід
1.2 1.1667 6

Змінні:

Вхідні:

Вихідні:

Програма

 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.

Приклад 5

Дано дійсне число 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

Змінні:

Вхідні:

Вихідні:

Проміжні:

Алгоритм

  1. Введемо з клавіатури значення e оператором read(e).
  2. Оскільки ми будемо порівнювати різницю між „попереднім” та „наступним” елементами послідовності та число e, та використовувати цикл з передумовою while, то до початку циклу потрібно:
  3. Нам потрібно друкувати елементи послідовності, різниця між якими >=e. Тому у заголовку циклу while будемо перевіряти цю умову:
  4. У тілі циклу, в операторних дужках будемо виконувати такі дії:

Програма

 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.

Приклад 6

Дано дійсне число 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

Змінні:

Вхідні:

Вихідні:

Проміжні:

Програма

 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.

Приклад 7

Дано натуральне число n<>1. Чи є воно елементом послідовності Фібоначчі?

Згадаємо послідовність Фібоначчи: 1, 1, 2, 3, 5, 8, 13, 21, ...

Результат роботи програми

Ввід Вивід
6 no
13 yes

У послідовності Фібоначчі елементи обчислюються через два попередніх, тому для їх зберігання потрібно три змінних.

Змінні:

Вхідні:

Вихідні:

Проміжні:

Алгоритм

  1. Введемо з клавіатури значення n оператором read(n).
  2. Оскільки ми будемо обчислювати елементи послідовності через два попередніх, то до початку циклу потрібно присвоїти початкові значення першим двом змінним (f1, f2). Вони повинні співпадати з двома першими елементами послідовності.
  3. Далі, у циклі, будемо обчислювати елемент f3 до тих пір, поки його значення не стане більшим або рівним введеному числу n. Тобто цикл завершиться при f3>=n. Можливі два випадки: цикл завершився при f3>n , тобто всі наступні елементи послідовності більші n і такого числа у послідовності немає; або цикл завершився при f3=n, тоді таке число є у послідовності.
  4. Оскільки ми спочатку будемо обчислювати f3, а потім порівнювати його з n, краще використовувати цикл repeat.
  5. У циклі будемо обчислювати елементи послідовності Фібоначчі таким чином:
  6. Перевіримо умову завершення циклу:
  7. Після завершення циклу потрібно перевірити, як завершився цикл:

Програма

 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.

Варіанти задач

  1. Дано дійсне число e. Друкувати числа i=2, 3,... ,поки ai<=e.
  2. Дано дійсне число e. Друкувати числа , i=1, 2, 3,..., поки ai >=e.
  3. Дано дійсне число e. Друкувати числа , i=2, 3, ... , поки ai<=e.
  4. Дано дійсне число e. Знайти суму всіх чисел ai>=e, якщо числа , i=1, 2, 3, ...
  5. Дано ціле число e. Знайти суму всіх чисел ai<=e, якщо числа , i=1, 2, 3, ...
  6. Дано дійсне число e. Знайти серед чисел , i=1, 2, 3, ...,  перше число ai< e і його номер i.
  7. Дано дійсні числа e, z(0< z <1), q(q >e). Знайти серед чисел , i=2, 3, ...,  перше число ai< e і його номер i.
  8. Дано дійсне число e. Знайти серед чисел , i=2, 3, ...,  перше число ai>e і його номер i.
  9. Дано натуральні числа e, x. Друкувати числа , i=1, 2, 3, ...,  поки ai - ai-1<=e
  10. Дано дійсне число e. Друкувати числа ,  i=2, 3, ...,  поки .
  11. Дано дійсне число e. Знайти суму всіх чисел, у яких , якщо числа , i=1, 2, 3, ...
  12. Дано дійсне число e. Знайдіть суму всіх чисел, у яких , якщо числа , i=2,3...
  13. Дано дійсне число e та натуральне число x. Знайти серед чисел , i=1, 2, 3, ...,  перше число ai і його номер i, таке що ai - ai-1< e.
  14. Дано дійсні додатні числа e, x, b. Знайти серед чисел i=1, 2, 3, ..., перше число ai і його номер i, таке що .
  15. Дано натуральні числа e, z (z>1), q (q< e). Чи є серед чисел i=2, 3, ... число e?
  16. Дано натуральне число b. Чи є це число серед чисел послідовності , i=3, 4, ...?
  17. Дано натуральні числа x, b, c, d, q, r. Чи є число x серед чисел послідовності , i=3, 4, ...? Якщо ні, то надрукувати перше число ai і його номер i , таке що ai> x.

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