Цикл с переменной
Весьма часто возникает необходимость просто выполнить участок программы заданное число раз. Конечно, можно организовать такой цикл при помощи оператора WHILE. Например, нам нужно перебрать все целые числа от 10 до 20 и просуммировать их. Сделать это можно следующим образом:
VAR i: BYTE; s: WORD;
BEGIN
i:=10;
s:=0;
WHILE i<=20 DO
BEGIN
s:=s+i;
i:=i+1
END;
Такая программа работоспособна, но громоздка и некрасива.
Есть способ лучше – использовать цикл с переменной FOR..TO. Его общий вид таков:
FOR переменная:=начальное значение TO конечное значение DO
оператор;
или
FOR переменная:=начальное значение TO конечное значение DO
begin
{последовательность инструкций, которая называется телом цикла }
end;
Оператор FOR автоматически перебирает значения целой переменной от начального до конечного c шагом 1и при каждом увеличении переменной на единицу выполняет оператор. Обратите внимание, что оператор FOR работает только с целыми числами и шаг приращения всегда равен единице. Также обратите внимание, что в случае, если начальное значение счетчика превышает конечное значение счетчика, то последовательность операторов между begin и end ни разу не будет выполнена.
Замечание. Если между инструкциями begin и end находится только одна инструкция, то их можно не писать.
Перепишем нашу программу, используя оператор FOR:
VAR i: BYTE; s: WORD;
BEGIN
s:=0;
FOR i:=10 TO 20 DO
s:=s+i;
Программа стала проще и понятнее. Кстати, не следует думать, что уменьшение длины исходного текста программы приводит и к уменьшению размера создаваемого при компиляции исполнимого файла.
А что делать, если нужно перебирать не целые, а дробные значения? Единственный выход – по-прежнему перебирать целые, а в теле цикла делить их на 10,100,1000… для получения дробного числа. Например, просуммируем числа от 0.1 до 1.2 с шагом 0.1:
VAR i:BYTE; s:REAL;
BEGIN
s:=0.0; { обязательно 0.0, а не 0 – это вещественное число }
FOR i:=1 TO 12 DO
s:=s+i/10;
Иногда нужно перебирать числа в обратную сторону – от большего к меньшему. Обычный цикл FOR в случае, когда начальное значение переменной цикла меньше конечного, вообще не будет выполняться ни разу. Однако в Delphi предусмотрен вариант цикла с переменной, в котором шаг равен минус единице. Все отличие состоит в том, что слово TO заменяется на DOWNTO:
FOR i:=20 DOWNTO 10 DO…
На блок-схемах цикл с переменной изображается так, как показано на рис. 3.
Рис. 3. Обозначение цикла с переменной на блок-схемах.
Следующая программа вычисляет сумму первых 10 элементов ряда:
1+1/2+1/3+... (значение 1-го элемента ряда связано с его номером формулой 1/1). После вычисления очередного элемента ряда в поле метки формы, предназначенное для вывода результата, выводится номер элемента ряда и его значение.
Диалоговое окно программы содержит два компонента: поле метки (Label1) и командную кнопку (Button1). Вычисление суммы ряда и вывод результата выполняет процедура обработки события onClick, текст которой приведен ниже.
procedure TFonnl.ButtonlClick(Sender: TObject);
var
i: integer; { номер элемента ряда }
elem: real; { значение элемента ряда }
summ: real; { сумма элементов ряда }
begin
summ:=0;
Label1.Caption:=' ' ;
for i:=l to 10 do begin
elem:=l/i;
Labell.Caption: =Labell.Caption +
IntToStr(i)+' '+FloatToStr(elem)+#13;
summ:=summ+elem;
end;
Labell.Caption:=Labell.Caption+
' Сумма ряда: '+FloatToStr(sunnn) ;
end;
Если в инструкции for вместо слова to записать downto, то после очередного выполнения инструкций цикла, значение счетчика будет не увеличиваться, а уменьшаться.
Дата добавления: 2015-03-19; просмотров: 1278;