Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_Delphi_1.doc
Скачиваний:
15
Добавлен:
18.09.2019
Размер:
1.64 Mб
Скачать

5.Циклы с неизвестным числом повторений

Подготовка к работе

1. По указанной литературе изучить:

  • организацию циклов с неизвестным числом повторений;

  • организацию таких циклов с помощью операторов while...do и repeat...until;

  • вычисление суммы членов бесконечного ряда.

2. Разработать алгоритм решения задачи.

3. Составить программы решения задачи.

Контрольные вопросы.

  1. Циклический процесс с неизвестным числом повторений.

  2. Его отличия от цикла с заданным числом повторений.

  3. Операторы языка Delphi для организации таких циклов. Их сравнение.

  4. Формат оператора while...do.

  5. Как выполнить группу операторов в цикле while...do?

  6. Формат оператора repeat...until.

  7. Как выполнить группу операторов в цикле repeat...until?

  8. Прямое вычисление значения суммы членов бесконечного ряда.

  9. Вычисление значения суммы членов бесконечного ряда по рекуррентной формуле.

  10. Условие выхода из цикла при вычислении значения суммы членов бесконечного ряда.

Задание к работе

  1. Вычислить значение суммы членов бесконечного ряда с заданной точностью Е с использованием оператора цикла while...do. На печать вывести значение суммы и число членов ряда, вошедших в сумму. Варианты заданий даны в табл. 5 .4. Проект – консольное приложение.

  2. Выполнить ту же задачу с применением оператора цикла repeat...until. Проект – консольное приложение.

табл. 5.4. Варианты заданий

N

Сумма членов ряда

x

Точность Е

1

0.1

0.00001

2

0.1

0.00005

3

0.15

0.001

4

0.12

0.0001

5

0.7

0.0001

6

1.7

0.001

7

1.5

0.0005

8

0.0001

9

0.00005

10

0.00005

11

0.75

0.0005

12

0.2

0.0001

13

0.25

0.0001

14

0.3

0.00001

15

0.62

0.00001

Пример выполнения

Задание 1

Вычислить значение суммы членов бесконечного ряда

при x = 0.1 с точностью до члена ряда с модулем, меньшим E=10-10.

Для вычисления очередного члена ряда будем использовать рекуррентное соотношение, связывающее его с предыдущим членом a(n+1) = q*a(n). Применение рекуррентных формул позволяет избежать вычисления факториала и возведения в произвольную степень. Рекуррентный коэффициент q найдем из выражений для текущего и следующего членов ряда

и .

Деля второе выражение на первое, получим

Значение начального члена ряда задаем до цикла путем прямого присваивания (номер начального члена n в разных вариантах равен 0 или 1, правильное значение определяется по формуле текущего члена). В нашем задании n=0, a=x.

Блок- схема алгоритма приведена на рис. 5 .9. В блоке 1 вводятся исходные данные. Инициализация данных для цикла выполняется в блоке 2. Блок 3 открывает цикл while...do. Блок 4 – тело цикла. Результаты выводятся в блоке 5. Окно работающего приложения задания 1 показано на рис. 5 .10.

Листинг программы

program Prg_05_1;

{$APPTYPE CONSOLE}

uses

SysUtils, RusTrans;

var

a,e,q,s,x: real;

n: integer;

begin

writeln(Rus('Введите точность')); // Ввод данных

write('e=');

readln(e);

writeln(Rus('Введите аргумент'));

write('x=');

readln(x);

n := 0; // Инициализация цикла

a := x;

s := a;

while abs(a)>E do // Начало цикла

begin // Тело цикла

q:=-x*x/(2*n+2)/(2*n+3);

a:=a*q;

s:=s+a;

n:=n+1;

end;

writeln;

writeln(Rus('Результат')); // Вывод результатов

writeln(Rus('Сумма s='),s:8:3);

writeln(Rus('Членов ряда n='),n);

readln;

end.

рис. 5.9. Блок- схема алгоритма задания 1

рис. 5.10.Окно работающего приложения задания 1

Задание 2

Блок- схема алгоритма приведена на рис. 5 .11. В блоке 1 вводятся исходные данные. Инициализация данных для цикла выполняется в блоке 2. Блок 3 - цикл repeat...until. Результаты выводятся в блоке 4. Результат работа программы такой же, как для задания 1.

Листинг программы

program Prg_5_2;

{$APPTYPE CONSOLE}

uses

SysUtils,RusTrans;

var

a,e,q,s,x: real;

n: integer;

begin

writeln(Rus('Введите точность')); // Ввод данных

write('e=');

readln(e);

writeln(Rus('Введите аргумент'));

write('x=');

readln(x);

n := 0; // Инициализация цикла

a := x;

s := a;

repeat // Начало цикла

q:=-x*x/(2*n+2)/(2*n+3); // Тело цикла

a:=a*q;

s:=s+a;

n:=n+1;

until abs(a)<e;

writeln;

writeln(Rus('Результат')); // Вывод результатов

writeln(Rus('Сумма s='),s:8:3);

writeln(Rus('Членов ряда n='),n);

readln;

end.

рис. 5.11. Блок- схема алгоритма задания 2

Выводы

  1. Для организации циклов с неизвестным числом повторений применяются операторы:

  • while...do (цикл ДО),

  • repeat...until (цикл ПОКА).

  1. Для выполнения в цикле while...do группы операторов необходимо превратить ее в один составной оператор с помощью операторных скобок beginend.

  2. При выполнении цикла repeat...until в теле цикла может находиться множество операторов. Составной оператор не требуется.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]