Инструкция while
Рассмотрим программу, которая вычисляет значение числа л с точностью, задаваемой пользователем во время работы программы. В основе алгоритма вычисления лежит тот факт, что сумма ряда 1-1/3 + 1/5-1/7 + 1/9 +… приближается к значению π/4 при достаточно большом количестве членов ряда.
Каждый член ряда с номером n вычисляется по формуле: 1/(2*n -1) и умножается на минус один, если n четное (определить, является ли п четным, можно проверкой остатка от деления п на 2). Вычисление заканчивается тогда, когда значение очередного члена ряда становится меньше, чем заданная точность вычисления.
Вид диалогового окна программы во время ее работы приведен на рис. 2.15. Пользователь вводит точность вычисления в поле ввода (Edit1). После щелчка на командной кнопке Вычислить (Button1) программа вычисляет значение числа л и выводит результат в поле метки (Label1).
Текст программы приведен в листинге 2.6. Как и в предыдущих примерах, основную работу выполняет процедура обработки события OnClick.
Рис. 2.15. Диалоговое окно программы Вычисление ПИ
Листинг 2.6. Вычисление числа π.
unit pi_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs; type TForm1 = class(TForm) Edit1: TEdit; // точность вычисления Button1: TButton; // кнопка Вычислить Label1: TLabel; Label2: TLabel; // поле вывода результата procedure ButtonlClick(Sender: TObject); private { Private declarations } public { Public declarations) end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var pi:real; // вычисляемое значение ПИ t:real; // точность вычисления n:integer; // номер члена ряда elem:real; // значение члена ряда begin pi: = 0; n: = 1; t: = StrToFloat(editl.text); elem: = 1; // чтобы начать цикл while elem >= t do begin elem: = 1 / (2*n -1); if n MOD 2=0 then pi: = pi – elem else pi: = pi + elem; n: = n + 1; end; pi: = pi * 4; labell.caption: = 'ПИ равно '+ FloatToStr(pi) + #13 + 'Просуммировано '+IntTostr(n)+' членов ряда.'; end; end.