Турбо Паскаль 7.0Рефераты >> Программирование и компьютеры >> Турбо Паскаль 7.0
Операторы тела цикла выполняются только один раз, если верхнее и нижнее значения счетчика совпадают. Если в операторе for to последнее значение счетчика цикла меньше первого, то тело цикла не выполняется ни одного раза. В операторе for downto цикл не выполняется, если последнее значение счетчика больше первого.
Программа с циклом for, которая вычисляет сумму N членов гармонического ряда1:
Program Sum; {сумма N членов гармонического ряда}
var x: byte; {счетчик цикла}
s : real; {сумма ряда}
N : byte; {число членов ряда}
begin
Write('N = '); ReadLn(N); {ввод числа членов ряда}
s := 0; {начальное значение суммы}
тогх:= 1 toNdos:=s+ 1/х; {подсчет суммы}
WriteLn( 'S = ', s); {вывод результата}
ReadLn {ожидание нажатия клавиши Enter}
end.
Оператор, следующий после слова do, может быть составным (представлять собой группу операторов).
Пример. Найти нечетные и кратные трем числа в диапазоне от 30 до 60 включительно. Распечатать их в порядке убывания.
Условие нечетности целого числа — Odd(J). Условие кратности трем — равенство нулю остатка от деления i mod 3=0. Нас интересуют числа, удовлетворяющие обоим условиям, то есть числа, для которых истинно Odd(i) and (i mod 3 = 0). Убывающий порядок следования чисел обеспечивает оператор for downto. Таким образом, программа будет иметь вид
Program Sample;
var i: byte;
begin
for i := 60 downto 30 do {цикл по убывающей от 60 до 30}
if Odd(i) and (i mod 3=0) then WriteLn(i) end.
В результате выполнении программы получим в столбик значения 57, 51,45,39, 33.
В приведенном примере многократно повторялся один оператор, однако во многих случаях необходимо повторять группу операторов. Вспомним, что говорилось в предыдущей главе о вложенности операторов друг в друга. Чтобы использовать вместо одного оператора группу, нужно эту группу превратить в один сложный оператор. Осуществляется это с помощью так называемых «программных скобок» — операторов begin и end.
begin
<оператор1>;
< оператор 2>;
< оператор М> end;
Любая группа операторов, начинающаяся со слова begin и кончающаяся словом end в любой конструкции языка Паскаль может использоваться как один сложный оператор. Сложный оператор, в свою очередь, может иметь в своем составе сложные операторы следующего уровня вложенности и так далее. Операторы begin и end подобны открывающим и закрывающим скобкам, и на их употребление накладываются те же ограничения, что и на обыкновенные скобки в арифметических выражениях: каждой «открывающей скобке» begin должна соответствовать «закрывающая скобка» end. Слово end не может предшествовать парному ему слову begin. При компиляции программы проверяется правильность расстановки скобок и дается сообщение об ошибке. Это сообщение не всегда попадает в то место, где действительно нужна скобка, поэтому не спешите вставлять операторы туда, куда предлагает компилятор, а тщательно проанализируйте Вашу программу.
Пример. Имеется логическое выражение not a and b xor с. Требуется вывести на печать значения логических переменных а, Ь, с, при которых данное выражение истинно. Мы предлагаем перебор всех возможных значений а, b, с с проверкой выполнения условия для каждого сочетания значений.
Program Sample;
Vara, b, с : boolean;
begin
for a := false to true do
for b := false to true do
for с := false to true do
if not a and b xor с then
begin
Write('a=',a);
Write('b=',b);
WriteLn('c=',c)
End
End.
В результате выполнения этой программы на экран будет выведено:
a =FALSE
b =FALSE
с =TRUE
a =FALSE
b =TRUE
с =FALSE
a =TRUE
b =FALSE
c =TRUE
a =TRUE
b =TRUE
с =TRUE
Программа состоит из одного сложного оператора for a := false to true do, в который вложены последовательно еще два оператора for и оператор if. Часть then последнего содержит сложный оператор, состоящий из трех простых операторов, охваченных программными скобками begin и end.
Циклы с логическими условиями
Введенный в предыдущей главе оператор цикла for обеспечивает выполнение цикла заданное количество раз, однако часто циклические действия заканчиваются по условию, то есть выполняются до достижения определенного результата. В Паскале есть два таких оператора цикла, отличающиеся тем, что в одном из них условие проверяется в начале цикла (while .do), а в другом — в конце цикла (repeat .until).
Оператор while do
Оператор цикла while (пока, в то время как) имеет вид:
While <логическое выражение> do <тело цикла>;
Цикл While обеспечивает выполнение тела цикла, следующего за словом do до тех пор, пока условие имеет значение true (истина). В качестве тела цикла может использоваться простой или сложный оператор. Условие проверяется перед началом каждого выполнения тела цикла, поэтому, если до первого выполнения цикла условие имеет значение false (ложь), оператор не выполняется ни одного раза (рис. 5.2).
Пример. Необходимо преобразовать значение угла в градусах к стандартному диапазону ±180° путем исключения полных оборотов окружности ±360°. Эта процедура может быть выполнена с помощью оператора цикла
While abs(Angle) > 180 do
if Angle > 0 then Angle := Angle — 360
else Angle := Angle + 360;
Оператор while в начале цикла проверяет, превышает ли угол по абсолютному значению 180 градусов. Если это не справедливо, тело цикла не выполняется. Если угол больше допустимого, начинается выполнение цикла.
Цикл состоит из оператора if. Допустим, угол равен —700. Тогда условие Angle > 0 в операторе if имеет значение false, при этом выполняется часть else оператора if, и угол получит значение —340. Снова происходит проверка условия выполнения цикла, и цикл выполняется второй раз, после чего угол равен 20. При третьей проверке условия выполнения цикла он заканчивается, поскольку условие его выполнения Abs(20)>180 приняло значение false.
Оператор repeat . until .
Оператор цикла repeat . until . (повторять до тех пор, пока) имеет вид Repeat <тело цикла> until -<логическое выражение>;
Принципиальное отличие оператора repeat .until от оператора while .do в том, что проверка условия производится не перед началом выполнения оператора, а в его конце, когда решается вопрос, повторить ли еще раз действия. Поэтому тело этого цикла всегда выполняется по крайней мере один раз (рис. 5.3). Это важное отличие: приведенный для цикла while . do пример реализовать с оператором цикла repeat . until невозможно без дополнительных проверок и усложнений.
Второе отличие от оператора while .do — в логике завершения цикла. Цикл оператора repeat .until выполняется до тех пор, пока не станет истинным логическое выражение, следующее за словом until. Таким образом, использование логического выражения здесь имеет противоположный оператору while .do смысл. Здесь при истинности логического выражения (условия) цикл прекращается, а у оператора while .do при истинности логического выражения цикл продолжается.