Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

03_Циклы Delphie / Метод указание 3

.doc
Скачиваний:
21
Добавлен:
27.04.2015
Размер:
48.13 Кб
Скачать

Лабораторная работа № 3

Организация циклов в Delphi

При решении многих задач вычислительный процесс имеет циклический характер. Это означает, что часть операторов многократно выполняется при различных значениях переменных.

В языке Turbo Pascal имеется три вида операторов цикла: оператор с предварительным условием (предусловием); оператор цикла с последующим условием (постусловием); оператор цикла с параметром.

Операторы для записи цикла являются сложными, так как в их состав входят другие операторы.

Для всех операторов цикла характерна следующая особенность. Повторяющиеся вычисления записываются всего лишь один раз. Вход в цикл возможен только через его начало. Переменные оператора цикла должны быть определены до входа в циклическую часть. Необходимо предусмотреть выход из цикла: или по естественному его окончанию, или по оператору перехода. Если этого не предусмотреть, то циклические вычисления будут выполняться бесконечно. В этом случае говорят, что произошло «зацикливание» выполнения программы.

Оператор цикла с параметром

Если число повторений цикла заранее известно, то чаще всего применяется оператор цикла с параметром.

Форма записи оператора цикла с параметром:

FOR I:=M1 TO M2 DO

BEGIN

{операторы циклической части программы}

END;

Или

FOR I:=M1 DOWNTO M2 DO

BEGIN

{операторы циклической части программы}

END;

Здесь I – параметр цикла, M1 и M2 – начальное и конечное значения параметра цикла.

Циклическая часть программы выполняется для каждого значения параметра цикла от его начального значения до конечного значения включительно. Тип параметра цикла обязательно должен совпадать с типом начального и конечного значений цикла. В качестве параметра цикла нельзя использовать переменные вещественного типа. Шаг изменения параметра цикла всегда равен 1 (первый вариант записи, значение параметра цикла возрастает) или -1 (второй вариант записи, значение параметра цикла убывает).

Итак, оператор цикла с параметром позволяет осуществить последовательный перебор значений параметра в любом из двух направлений, но с приращением, равным единице. В том случае, если шаг приращения отличен от единицы или заранее не известно количество повторений цикла, необходимо применять один из двух других видов оператора цикла.

Оператор цикла с предварительным условием

Цикл с предварительным условием (с предусловием) используется, как правило, в тех случаях, когда заранее неизвестно число повторений цикла.

Форма записи оператора цикла с предусловием;

WHILE <логическое выражение> DO

BEGIN

{операторы циклической части программы }

END;

Оператор цикла действует следующим образом. Предварительно проверяется значение логического выражения. Пока оно истинно, выполняются операторы циклической части. Как только оно становится ложным, происходит выход из цикла. Если с самого начала значение логического выражения ложно, то операторы циклической части не выполнятся ни разу.

Если в циклической части стоит всего один оператор, то операторные скобки BEGIN – END можно не указывать и оператор цикла принимает вид

WHILE <логическое выражение> DO оператор

Оператор цикла с последующим условием

Оператор цикла с последующим условием (с постусловием) похож на оператор цикла с предусловием, но условие вычисляется и проверяется после выполнения операторов, составляющий тело цикла. Оператор цикла с постусловием имеет вид:

REPEAT

{операторы циклической части программы}

UNTIL <логическое выражение>

Оператор цикла с постусловием действует следующим образом. Операторы циклической части выполняются повторно (по крайней мере один раз) до тех пор, пока значение логического выражения ложно. Условием прекращения циклических вычислений является истинное значение логического выражения. Итак, сначала выполняется циклическая часть, а затем проверяется условие. Эти действия прямо противоположны действиям оператора цикла с предусловием, где сначала проверяется условие, а затем выполняются операторы циклической части.

Нижняя граница операторов циклической части четко обозначена ключевым словом UNTIL, поэтому нет необходимости заключать операторы циклической части в операторные скобки BEGIN – END. В то же время наличие этих скобок не является ошибкой.

Пример 1. Напечатать таблицу квадратов и квадратных корней для первых 100 натуральных чисел.

1 – й способ (оператор цикла с предусловием)

program tabl;

var num,s1:integer;

s2:real;

begin

num:=1;

while num <= 100 do begin

s1:=sqr(num);

s2:=sqrt(num);

writeln(‘число ’,num:3,’ квадрат ’,s1:5,’кв. корень’,s2:5:2);

num:=num + 1;

end;

end.

Первоначальное значение переменной NUM равно 1. Оно задается оператором присваивания. Затем проверяется условие NUM <= 1. Естественно, что 1 <= 100 истинно, поэтому выполняется составной оператор, стоящий после ключевого слова DO (его часто называют телом цикла). Он вычисляет и выдает на печать значения квадрата и квадратного корня для числа 1, а также увеличивает значение переменной NUM на единицу. Теперь ее значение равно 2, условие цикла остается истинным и цикл выполняется еще раз. Последний раз цикл выполнится для значения NUM, равного 100, поскольку условие 100 <= 100 истинно. Внутри цикла произойдет очередное увеличение переменной NUM на единицу, и ее значение станет равным 101. Очередная проверка условия цикла даст значение условия FALSE и выполнение цикла прекратится.

2 – й способ (оператор цикла с постусловием)

program tabl;

var num,s1:integer;

s2:real;

begin

num:=1;

repeat

s1:=sqr(num);

s2:=sqrt(num);

writeln (‘число ’,num:3,’ квадрат ’,s1:5,’кв. корень’,s2:5:2);

num:=num+1;

until num > 100;

end.

Когда переменная NUM принимает последовательно значения 1, 2, , 100, значение условия NUM > 100 остается ложным и для них цикл выполняется. Как только переменная NUM принимает значение 101, то условие NUM > 100 становится истинным и выполнение цикла прекращается. В операторе REPEAT разрешается использовать произвольное число операторов без операторных скобок BEGIN – END.

При использовании как цикла WHILE, так и цикла REPEAT необходимо принудительно увеличивать значение переменной NUM. Если этого не делать, то цикл никогда не завершится. Действительно, в этом случае переменная NUM всегда остается равной 1. Условие NUM <= 1 никогда не станет ложным, а условие NUM > 100 никогда не станет истинным. В результате оба цикла будут выполняться бесконечно долго.

3 – й способ (оператор цикла с параметром)

program tabl;

var num,s1:integer;

s2:real;

begin

for num:=1 to 100 do begin

s1:=sqr(num);

s2:=sqrt(num);

writeln(‘число ’,num:3,’ квадрат ’,s1:5,’кв. корень’,s2:5:2);

end;

end.

При использовании цикла FOR нет необходимости принудительно увеличивать значение параметра цикла. Такое увеличение производится автоматически. Поскольку множество значений, которое присваивается параметру цикла, конечно, то после конечного числа выполнений тела цикла весь цикл обязательно завершится.

При решении задач с использованием операторов цикла очень часто встречаются три типовых алгоритма: Вычисление суммы, количества и произведения.

  • Подсчет суммы

Первоначальное значение S:=0;

Подсчет в цикле:

S:=S+{текущее слагаемое}

  • Подсчет количества

Первоначальное значение K:=0;

Подсчет в цикле:

K:=k+1;

  • Подсчет произведения

Первоначальное значение P:=1;

Подсчет в цикле

P:=p*{текущий множитель}

Пример 2. Найти сумму вводимых с клавиатуры положительных чисел. Сигналом к окончанию ввода является ввод нуля, символизирующего конец последовательности .

Program primer2;

Var a,s: real;

Begin

S:=0;

Writeln (‘ Введите положит. число ’);

While a<>0 do

Begin

If a>0 then s:=s+a;

Read (a);

End;

Write (‘Сумма положит. чисел= ‘,s:8:2);

readln

End.

Пример 3. Вычислить факториал числа N (произведение целых чисел от 1 до N)

Program primer3;

Var n,p,I: integer;

Begin

Writeln(‘Введите число n’);

. readln (n);

p:=1;

for I:=1 to n do

p:=p*I;

writeln (‘факториал числа ’,n,’=’,p)

end.

Пример 4. Вложенные циклы.

Циклы могут быть вложены один в другой. Иначе их называют сложными циклами. При использовании вложенных циклов необходимо составлять программу таким образом, чтобы внутренний цикл полностью укладывался в циклическую часть внешнего цикла. Внутренний цикл может также в свою очередь содержать другой внутренний цикл.

Вычислить значение переменной Y = 2K + N при значениях переменных N = 1,2,3 и K = 2,4,6,8.

Если перебирать все значения N и K, получим 12 значений Y.

Program cikl;

Var n,k,y:integer;

Begin

For n:=1 to 3 do

begin

K:=2;

While k <= 8 do

begin

Y:=2*k + n;

Writeln (‘n=’,n:3,’k=’,k:3,’y=’,y:3);

K:=k+2

End;

End

End.

Соседние файлы в папке 03_Циклы Delphie