- •1.Интегрированная среда разработки Delphi
- •2.Структура программы и типы в языке Delphi
- •3.Линейные структуры
- •4.Структуры с ветвлениями
- •5.Циклы с неизвестным числом повторений
- •6.Циклы с заданным числом повторений
- •Задание к работе
- •7.Массивы
- •8.Файлы
- •9.Подпрограммы
- •10.Динамическая память Подготовка к работе
- •Контрольные вопросы
- •Задание к работе
- •Задание 1
- •Задание 2
- •11.Исключения
5.Циклы с неизвестным числом повторений
Подготовка к работе
1. По указанной литературе изучить:
организацию циклов с неизвестным числом повторений;
организацию таких циклов с помощью операторов while...do и repeat...until;
вычисление суммы членов бесконечного ряда.
2. Разработать алгоритм решения задачи.
3. Составить программы решения задачи.
Контрольные вопросы.
Циклический процесс с неизвестным числом повторений.
Его отличия от цикла с заданным числом повторений.
Операторы языка Delphi для организации таких циклов. Их сравнение.
Формат оператора while...do.
Как выполнить группу операторов в цикле while...do?
Формат оператора repeat...until.
Как выполнить группу операторов в цикле repeat...until?
Прямое вычисление значения суммы членов бесконечного ряда.
Вычисление значения суммы членов бесконечного ряда по рекуррентной формуле.
Условие выхода из цикла при вычислении значения суммы членов бесконечного ряда.
Задание к работе
Вычислить значение суммы членов бесконечного ряда с заданной точностью Е с использованием оператора цикла while...do. На печать вывести значение суммы и число членов ряда, вошедших в сумму. Варианты заданий даны в табл. 5 .4. Проект – консольное приложение.
Выполнить ту же задачу с применением оператора цикла 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
Выводы
Для организации циклов с неизвестным числом повторений применяются операторы:
while...do (цикл ДО),
repeat...until (цикл ПОКА).
Для выполнения в цикле while...do группы операторов необходимо превратить ее в один составной оператор с помощью операторных скобок begin…end.
При выполнении цикла repeat...until в теле цикла может находиться множество операторов. Составной оператор не требуется.