Операторы циклов в Паскале. Структурные команды перехода. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операторы циклов в Паскале. Структурные команды перехода.



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

Б программировании постоянно возникают задачи, требующие для своего реше-

ния многократного повторения одной и той же последовательности действий или

однообразной обработки однородных объемов информации (массивов). Напри-

мер, когда требуется определить сумму всех элементов массива, найти его элемент

с максимальным значением, вычислить квадраты всех элементов и так далее.

В Паскале имеется несколько операторов, позволяющих организовать подобную

работу наглядно и эффективно. Операторы, предназначенные для многократного

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

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

рений, и тело цикла — повторяемое действие.

Оператор цикла записывается так:

for переменная-счетчик:= выражение-1 to выражение-2 do

повторяемое-действие;

Переменная-счетчик должна быть объявлена перед логическим блоком, в котором

этот оператор расположен, то есть если оператор цикла используется внутри под-

программы, то в качестве счетчика должна выступать локальная переменная.

ЗАМЕЧАНИЕ Это сделано с целью максимально оптимизировать быстродействие

оператора цикла, ориентированного на многократные интенсивные

вычисления. Переменные-счетчики представляют собой, как правило,

быстрые регистры процессора, а не обычные ячейки оперативной

памяти.

Первоначально, перед первым выполнением тела цикла, счетчик получает значе-

ние, равное результату вычисления, выражен ия-1. Переменная-счетчик должна обя-

зательно относиться к одному из перечислимых типов. Выражение-2 определяет

конечное значение, по достижении которого счетчиком тело цикла будет выпол-

нено в последний раз.

После очередного выполнения тела цикла счетчик принимает значение, следующее

за текущим (точнее, это будет значение, равное SuccQ от текущего). Затем выпол-

няется проверка, не превышено ли конечное значение выражения-2 (значения и

начального, и конечного выражений вычисляются только один раз перед первым

выполнением тела цикла). Если оно превышено, то работа оператора цикла закан-

чивается. В противном случае тело цикла выполняется еще раз.

Рассмотрим пример подпрограммы, вычисляющей факториал числа N. Для этого

требуется последовательно перемножить все числа от 1 до N. Наиболее компактно

такие вычисления реализуются с помощью оператора цикла.

function Factorialf N: integer ]: integer;

var i, R: integer;

begin

if N <= 0 then

begin

Операторы 75

Result:= 0;

Exit

end;

R:= 1;

for i:= 1 to N do

R:= R * i;

Result:= R;

end;

Счетчик i будет последовательно принимать значения от 1 до значения параметра N, а

s переменной R будет храниться промежуточное значение результата. Обратите

внимание на условный оператор, который проверяет корректность значения параметра

(оно должно быть положительным числом). Если значение параметра N меньше

или равно нулю, то значение факториала принимается равным нулю без вычисле-

ний, после чего происходит выход из подпрограммы с помощью процедуры Exit.

В Паскале имеется еще одна форма записи оператора цикла. Она предназначена

для использования в случаях, когда счетчик должен последовательно принимать

не возрастающие, а убывающие значения.

for счетчик:= выражение-1 downto выражение-2 do

тело-цикла;

Значение счетчика в этом случае будет не увеличиваться, а уменьшаться (как при

вызове процедуры PredQ). Соответственно, необходимо, чтобы значение выраже-

ния-2 было меньше значения выражения-1. Тип счетчика — не обязательно целое

число. Это может быть, в частности, перечислимый тип.

type TLoop = (MinVal, AveVal, MaxVal);

var L: TLoop;

Begin

for L:= MinVal to MaxVal do

Условный оператор цикла

Оператор for удобно применять, когда заранее известно, сколько раз требуется

выполнить тело цикла (например, при обработке всех элементов массива). Но в

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

происходит, если вычисление значения функции заканчивается по достижении

заданной точности, если выполнение операторов зависит от информации, введен-

ной пользователем, если надо найти в массиве элемент с конкретным значением и

так далее. В таких случаях правильнее использовать условный оператор цикла:

while условие do

тело-цикла;

Тело цикла будет выполняться, пока истинно условие (логическое выражение,

воз вращающее значение типа Boolean). В отличие от оператора for условие окончания

цикла каждый раз вычисляется заново. Это позволяет гибко управлять числом повто-

рений цикла.

76 Урок 1. Язык Delphi [Object Pascal] и его использование

ВНИМАНИЕ Если перед выполнением оператора while значение условия рав-

но False, тело цикла не будет выполнено ни разу.

Допустим, надо написать программу, которая вычисляет факториал вводимого с

клавиатуры числа, но делает это не один раз, а многократно — до тех пор, пока

человек не введет число 0, служащее условным признаком завершения работы про-

граммы. Используя ранее подготовленную подпрограмму Factorial, такую программу

можно записать следующим образом:

program Projectl;

{SAPPTYPE CONSOLE}

uses sysutils;

/ / здесь следует

// описание подпрограммы Factorial

var N: integer;

begin

N:= 1,-

while N o 0 do

begin

ReadLn(N);

WriteLnf Factorial (N)),-

end;

end.

При выполнении тела цикла вводится начальное значение для вычисления факто-

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

пор, пока введенное значение не окажется равным нулю, после чего работа про-

граммы завершится. Первый оператор присваивания N :- \ нужен, чтобы войти в

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

ПОДСКАЗКА Надо внимательно следить за вычислением условия завершения.

Если в случае с оператором for число повторений цикла известно

компилятору заранее, то в случае с оператором while контроль

завершения цикла полностью возлагается на программиста.

Иногда оператор while может повторять тело цикла бесконечное

число раз, что приводит к зацикливанию и ≪зависанию≫ программы.



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 295; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.228.40 (0.016 с.)