
- •Программирование в Delphi
- •Структура проекта Delphi
- •Данные в Delphi
- •Символьный тип данных
- •Целочисленный тип данных
- •Вещественный тип данных
- •Тип дата-время
- •Логический тип данных
- •Var переменные: новый_тип;
- •Var имя:(знач_1,знач_2,…);
- •Указатели
- •Операции и выражения
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Стандартные функции
- •Понятие алгоритма
- •Изображение алгоритма в виде блок-схемы
- •Оператор присваивания
- •Составной оператор
- •Условные операторы
- •Вывод сообщений
- •Обработка ошибок
- •Ораторы цикла
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с заданным числом повторений
- •Операторы передачи управления
Ораторы цикла
Циклический процесс или просто цикл это повторение одних и тех же действий. Последовательность действий, которые повторяются в цикле, называют телом цикла. Один проход цикла называют шагом или итерацией. Переменные, которые изменяются внутри цикла, и влияют на его окончание, называются параметрами цикла.
При написании циклических алгоритмов следует помнить следующее. Во-первых, чтобы цикл имел шанс когда-нибудь закончиться, содержимое его тела должно обязательно влиять на условие цикла. Во-вторых, условие должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла.
В языке Pascal предусмотрены три оператора, реализующих циклический процесс.
Оператор цикла с предусловием
Блок-схема алгоритма.
Оператор, реализующий алгоритм:
while выражение do оператор;
Работает цикл с предусловием так. Вычисляется значение выражения. Если оно истинно (True), выполняется оператор. В противном случае цикл заканчивается, и управление передается оператору, следующему за телом цикла. Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение ложно (False), цикл не выполнится ни разу.
Выражение должно быть логической константой, переменной или логическим выражением.
Если тело цикла состоит более чем из одного оператора, необходимо использовать составной оператор:
while условие do
begin
оператор_1;
оператор_2;
…
оператор_n;
end;
Задача.
Вывести значения функции
на отрезке [0;]
с шагом 0.1.
procedure TForm1.btn1Click(Sender: TObject);
var x,y:Real;
begin
x:=0;
while x<=Pi do
begin
y:=Exp(Sin(x))*cos(x);
mmo1.Lines.Add('x='+
FloatToStr(x)+
'y='+floattostr(y));
x:=x+0.1;
end;
end;
Оператор цикла с постусловием
Блок-схема алгоритма
Цикл с постусловием реализован конструкцией
repeat
оператор;
until выражение;
или, если тело цикла состоит более чем из одного оператора
repeat
оператор_1;
оператор_2;
.............
оператор_N;
until выражение;
Работает цикл следующим образом. В начале выполняется оператор, представляющий собой тело цикла. Затем вычисляется значение выражения. Если оно ложно (False), оператор тела цикла выполняется еще раз. В противном случае цикл завершается, и управление передается оператору, следующему за циклом.
Цикл с постусловием всегда будет выполнен хотя бы один раз, в отличие от цикла с предусловием, который может не выполниться ни разу.
Задача. Вывести значения функции на отрезке [0;] с шагом 0.1.
procedure TForm1.btn1Click(Sender: TObject);
var x,y:Real;
begin
x:=0;
repeat
y:=Exp(Sin(x))*cos(x);
mmo1.Lines.Add('x='+
FloatToStr(x)+
' y='+floattostr(y));
x:=x+0.1;
until x>Pi;
end;
Оператор цикла с заданным числом повторений
Блок-схема алгоритма
«Безусловный» циклический процесс реализован оператором
for параметр:=нач_зн to кон_зн do
оператор;
for парам:=кон_зн downto нач_зн do
оператор;
где оператор – любой оператор языка, параметр_цикла, а также диапазон его изменения (начальное_значение и конечное_значение) – переменные или выражения целочисленного или перечислимого типа.
Шаг цикла for всегда постоянный и равен интервалу между двумя ближайшими значениями типа параметра цикла.
В случае если тело цикла состоит более чем из одного оператора, необходимо использовать составной оператор:
for параметр:=нач_зн to кон_зн do
begin
оператор_1;
оператор_2;
.............
оператор_N;
end;
Алгоритм работы цикла for … do:
1. Параметру_цикла присваивается начальное_значение.
2. Если значение параметра_цикла превосходит конечное_значение, то цикл завершает свою работу. В противном случае выполняется п. 3.
3. Выполняется оператор.
4. Значение параметра_цикла изменяется на соответствующий шаг и осуществляется переход к п.2, и т.д.
Понятно, что этот алгоритм представляет собой цикл с предусловием.
Задача. Вывести значения функции на отрезке [0;] с шагом 0.1.
Здесь количество повторений цикла явно не задано. Вычислим его:
В общем случае, если параметр цикла х принимает значения в диапазоне от xn до xk, изменяясь с шагом dх, тогда количество повторений тела цикла можно определить по формуле:
округлив результат деления до целого числа.
procedure TForm1.btn1Click(Sender: TObject);
var x,y:Real;
n,i: Byte;
begin
n:=round((pi-0)/0.1)+1;
x:=0;
for i:=1 to n do
begin
y:=Exp(Sin(x))*cos(x);
mmo1.Lines.Add(IntToStr(i)+
' x='+FloatToStr(x)+
'y='+floattostr(y));
x:=x+0.1;
end;
end;