Инструкция (цикл) while
используется в том случае, если некоторую последовательность действий (инструкций
программы) надо выполнить несколько раз, причем необходимое число повторений
во время разработки программы неизвестно и может быть определено только во время
работы программы.
Типичными примерами
использования цикла while являются вычисления с заданной точностью, поиск в
массиве или в файле.
В общем виде инструкция
while записывается следующим образом:
while
условие do
begin
// здесь инструкции, которые надо выполнить несколько раз
end
где условие — выражение
логического типа, определяющее условие выполнения инструкций цикла.
1. Инструкция while
выполняется следующим образом:
2. Сначала вычисляется
значение выражения условие.
3. Если значение выражения
условие равно False (условие не выполняется), то на этом выполнение инструкции
while завершается.
4. Если значение выражения
условие равно True (условие выполняется), то выполняются расположенные между
begin и end инструкции тела цикла. После этого снова проверяется выполнение
условия. Если условие выполняется, то инструкции цикла выполняются еще раз.
И так до тех пор, пока условие не станет ложным (False).
Алгоритм, соответствующий
инструкции while, представлен на рис. 2.14.
Внимание!
Для того чтобы инструкции цикла while, которые находятся между begin и end, были выполнены хотя бы один раз, необходимо, чтобы перед выполнением инструкции while значение выражения условие было истинно.
Рис. 2.14. Алгоритм
инструкции while
Для того чтобы цикл
завершился, нужно, чтобы последовательность инструкций между begin и end влияла
на значение выражения условие (изменяла значения переменных, входящих в выражение
условие).
Рассмотрим программу,
которая вычисляет значение числа л с точностью, задаваемой пользователем во
время работы программы. В основе алгоритма вычисления лежит тот факт, что сумма
ряда 1 - 1/3 + 1/5 -1/7 + 1/9 + ... приближается к значению л/4 при достаточно
большом количестве членов ряда.
Каждый член ряда с
номером n вычисляется по формуле: 1/(2*n - 1) и умножается на минус один, если
n четное (определить, является ли п четным, можно проверкой остатка от деления
п на 2). Вычисление заканчивается тогда, когда значение очередного члена ряда
становится меньше, чем заданная точность вычисления.
Вид диалогового окна
программы во время ее работы приведен на рис. 2.15. Пользователь вводит точность
вычисления в поле ввода (Editi). После щелчка на командной кнопке Вычислить
(Buttonl) программа вычисляет значение числа л и выводит результат в поле
метки (Labeii).
Текст программы приведен
в листинге 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.
1. Электромагнитная волна (в религиозной терминологии релятивизма - "свет") имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например, ~200 тыс км/с в стекле и ~3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью "Температура эфира и красные смещения"), разную скорость для разных частот (см. статью "О скорости ЭМ-волн")
2. В релятивизме "свет" есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский "свет" - это волнение ничего в ничем. У него нет среды-носителя колебаний.
3. В релятивизме возможны манипуляции со временем (замедление), поэтому там нарушаются основополагающие для любой науки принцип причинности и принцип строгой логичности. В релятивизме при скорости света время останавливается (поэтому в нем абсурдно говорить о частоте фотона). В релятивизме возможны такие насилия над разумом, как утверждение о взаимном превышении возраста близнецов, движущихся с субсветовой скоростью, и прочие издевательства над логикой, присущие любой религии.
4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те "подтверждающие теорию Эйнштейна факты", которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в FAQ по эфирной физике.