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

Мансуров. Основы программирования в среде Lazarus. 2010

.pdf
Скачиваний:
55
Добавлен:
27.04.2021
Размер:
6.3 Mб
Скачать

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

var X: integer;

begin

writeln(UTF8ToConsole ('Введите значение Х' ));

readln(X);

if X < 2 then

begin

// начало составного оператора

writeln(UTF8ToConsole('Выполнение программы по условию true'));

writeln('X = ', X);

end

// конец составного оператора

{ составной оператор считается как бы одним оператором, поэтому перед else ;

не ставится}

else

begin

// начало составного оператора

writeln(UTF8ToConsole('Выполнение программы по условию false'));

writeln('X = ', X) ;

end; // конец составного оператора

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Иллюстрация в общем виде: составной оператор записывается внутри

служебных слов begin и end:

begin

s1;

s2;

s3;

s4;

end;

111

2.1 Основные элементы языка

____________________________________________________________________

где S1, S2, S3, S4 - операторы Паскаля, в том числе и составные опера-

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

 

begin

 

s1;

 

s2;

 

begin

 

p1;

Составной

begin

оператор

 

v1;

 

 

s3

 

 

 

p2

 

 

v2;

 

 

 

 

 

end;

 

 

 

p3;

 

 

 

end;

 

 

 

s4;

 

end;

Рис. 2.53. Вложенные составные операторы

Здесь s3 и p2 также составные операторы.

Условные операторы также могут быть вложены друг в друга.

if x < 2 then if y > 0

then s:= s + 1 else s:= s - 1;

Соответствующая блок-схема приведена на рис. 2.54.

112

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

нет

 

да

 

 

 

 

 

 

 

 

 

 

 

x<2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y>0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S:=S-1

 

 

 

 

 

 

S:=S+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 2.54. Блок-схема выполнения вложенных условных операторов

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

Операторы цикла используются для организации многократного повторе-

ния выполнения одних и тех же операторов. В языке Паскаль существует три типа операторов цикла.

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

Этот оператор имеет вид:

while условие do оператор;

где условие – булевское выражение, оператор – любой оператор Паскаля, в

частности может быть и составным оператором. Слова while и do являются служебными словами, а оператор после do часто называют телом цикла. Вы-

полняется этот оператор следующим образом: сначала вычисляется значение булевого выражения. Если это значение есть true, то выполняется оператор после слова do и снова происходит возврат к вычислению булевого выражения.

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

т. е. оператор после служебного слова do уже не выполняется, а будет выпол-

113

2.1 Основные элементы языка

____________________________________________________________________

няться следующий после оператора цикла оператор.

В данном операторе вычисление выражения происходит раньше, чем будет выполняться оператор после do, поэтому он и называется оператор цикла с предусловием. Может так случиться, что оператор после do не будет выпол-

нен вообще, если значение условия с первого раза будет false.

Структурная схема цикла с предусловием

false

условие

нет

true да

Оператор

Рис. 2.55. Структурная схема цикла с предусловием

2.1.23.2. Оператор цикла с постусловием

Этот оператор имеет вид: repeat оператор until условие;

где оператор – любой оператор Паскаля, в том числе и составной, условие

– булевское выражение.

repeat и until - служебные слова.

Этот оператор выполняется следующим образом: сначала выполняется оператор следующий за служебным словом repeat, затем вычисляется значе-

ние булевского выражения (условия). Если значение условия false, то проис-

ходит возврат к выполнению оператора и после этого снова вычисляется значе-

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

ского выражения false. Как только условие станет true, выполнение опера-

тора цикла прекращается.

114

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

Структурная схема оператора

Оператор

нет

условие

false

да true

Рис. 2.56. Структурная схема цикла с постусловием

В отличие от оператора цикла while-do здесь оператор будет выполнен хотя бы один раз, независимо от значения условий.

Предупреждение! Чтобы рассмотренные выше операторы цикла выполня-

лись конечное число раз, при построении цикла необходимо предусмотреть,

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

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

вия принимало бы false(для оператора while-do)или true(для опера-

тора repeatuntil).

В противном случае цикл будет повторяться бесконечное число раз и про-

грамма "зациклится". Ответственность за правильное применение этих опера-

торов цикла несет на себе программист!

 

100

Пример: Вычислить S

x

 

x 1

program sum_1; {Вариант 1 цикл с предусловием} {$mode objfpc}{$H+}

uses

CRT, FileUtil; var x, Sum: integer; begin

115

2.1 Основные элементы языка

____________________________________________________________________

Sum:= 0; // в этой переменной накапливается сумма

x:= 1;

while x <= 100 do

begin

Sum:= Sum + x;

x:= x + 1;

end;

writeln('Sum= ',Sum);

writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;

end.

program sum_2; {Вариант 2 цикл с постусловием} {$mode objfpc}{$H+}

uses

CRT, FileUtil; var x, Sum: integer; begin

Sum:= 0; // в этой переменной накапливается сумма x:= 1;

repeat

Sum:= Sum + x; x:= x + 1;

until x > 100; writeln('Sum= ',Sum);

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

116

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

Пример: Вычислить функцию:

x2 1, x 0

y 0, x 0

для х [-10, 10] c шагом 1

 

x2 1, x 0

Напишем программу вычисления функции с использованием оператора if…then и оператора цикла while…do:

program fun_1;{Вариант 1} {$mode objfpc}{$H+} uses

CRT, FileUtil; var

x, y: integer; begin

x:=-10;

while x <= 10 do begin

if x > 0 then y:= sqr(x) + 1;

if x = 0 then y:= 0;

if x < 0 then y:= sqr(x) - 1;

writeln('x= ', x, ' y= ', y); x:= x + 1;

end;

writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey; end.

117

2.1 Основные элементы языка

____________________________________________________________________

Напишем программу вычисления этой же функции с использованием опе-

ратора if…then…else и оператора цикла while…do:

program fun_2;{Вариант 2} {$mode objfpc}{$H+} uses

CRT, FileUtil; var

x, y: integer; begin

x:=-10;

while x <= 10 do begin

if x > 0 then y:= sqr(x) + 1

else

if x = 0 then y:= 0

else

y:= sqr(x) - 1;

writeln('x= ', x ,' y= ', y); x:= x + 1;

end;

writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;

end.

В программах fun_1 и fun_2, как вы могли заметить, использовались со-

ставные операторы.

118

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

program fun_3;{Вариант 3 с использованием оператора цикла с постусло-

вием}

{$mode objfpc}{$H+} uses

CRT, FileUtil; var

x, y: integer; begin

x:=-10; repeat

if x > 0 then y:= sqr(x) + 1;

if x = 0 then y:= 0;

if x < 0 then y:= sqr(x) - 1;

writeln('x= ', x, ' y= ', y); x:= x + 1;

until x > 10;

writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;

end.

Заметим, что в операторе цикла с постусловием, если после слова repeat

используется не один, а несколько операторов, то не обязательно использовать операторные скобки begin и end, поскольку служебные слова repeat и until сами выполняют роль операторных скобок.

119

2.1 Основные элементы языка

____________________________________________________________________

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

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

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

for переменная:= выражение 1 to выражение 2 do оператор;

где for, to, do – служебные слова; переменнаяпеременная целого типа,

называемая индексом или параметром цикла.

Выражение 1, выражение 2 – арифметические выражения целого типа, т.е.

значения выражений должны быть целыми;

оператор – простой или составной оператор.

Для того чтобы оператор цикла выполнялся хотя бы один раз, значение выражения 1 должно быть меньше или равно значению выражения 2 (на прак-

тике значения выражения 1 всегда меньше значения выражения 2). Оператор работает следующим образом: вначале переменной (параметру цикла) при-

сваивается значение выражения 1, затем сравнивается значение параметра цик-

ла и значение выражения 2. Если параметр цикла меньше значения выражения

2, то выполняется оператор после слова do. Затем параметр цикла увеличива-

ется на 1, после этого вновь сравнивается значение параметра цикла и выраже-

ние 2, если параметр цикла меньше, то вновь выполняется оператор после слова do. И так продолжается до тех пор, пока параметр цикла не станет больше выражения 2. Как только это происходит, оператор цикла заканчивается.

Пример: давайте вычислим снова значения функции

x2 1, x 0

y 0, x 0

для х [-10, 10] c шагом 1

 

x2 1, x 0

120