Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Условные операторы Pascal-Паскаль

Операторы цикла while, repeat, for

Цикл while-do (цикл с предусловием - ред.)

Общий вид записи:

While <условие> do begin

<инструкция 1>;

...

<инструкция n>

End

Инструкция while-do выполняется следующим образом: Сначала проверяется условие. Если оно истинно, выполняются <инструкция 1>...<инструкция n> и так далее. Если же условие ложно, выполнение инструкции считается законченным, и программа переходит к обработке следующих команд. Таким образом, если условие с самого начала оказалось ложным, <инструкция 1>...<инструкция n> не будут выполнены ни разу. В цикле while-do <условие> - это условие выполнения цикла: пока оно истинно, программа из цикла не выйдет. В том случае, если внутри цикла стоит только один оператор, пара begin - end может отсутствовать, если операторов больше одного, то пара begin - end обязательна, так как иначе будет выполнятся только одна инструкция, стоящая сразу после слова do.

Пример: Надо вычислить сумму S=1+1/2+1/3+...+1/50

VAR S: REAL; N:INTEGER;

BEGIN

S:=0; N:=1;

WHILE N<=50 DO

BEGIN

S:=S+1/N;

N:=N+1;

END;

WRITELN(' S=',S);

END.

Цикл repeat-until (цикл с постусловием - ред.)

Общий вид записи:

Repeat

<инструкция 1>;

...

<инструкция n>

until <условие>;

Инструкция repeat-until выполняется следующим образом : сначала выполняются инструкции <инструкция 1>...<инструкция n>. Затем проверяется условие. Если оно ложно , происходит возврат с выполнению инструкций <инструкция 1>...<инструкция n>. Если условие истинно, цикл считается выполненным и программа переходит к обработке следующих команд. Таким образом в цикле repeat-until <условие> - это условие завершения цикла: цикл повторяется, пока оно ложно.

Пример.

VAR S: REAL; N:INTEGER;

BEGIN

S:=0; N:=1;

REPEAT

S:=S+1/N;

N:=N+1;

UNTIL N>50;

WRITELN(' S=',S);

END.

Цикл for (цикл со счётчиком - ред.)

Общий вид:

FOR I:=N1 TO N2 DO ST

I - переменная цикла, N1- начальное значение цикла, N2- конечное значение цикла, ST- оператор (простой или составной). I,N1,N2 должны быть одного и того же типа, но не real. I принимает последовательные значения данного типа от N1 до N2. Если N1 и N2 - целые числа, а I - целая переменная, то шаг всегда равен единице.

Пример:

VAR S: REAL; N:INTEGER;

BEGIN

S:=0;

FOR I:=1 TO 50 DO

S:=S+1/I;

WRITELN(' S=',S);

END.

Цикл по убывающим значениям параметра I от N2 до N1 имеет вид:

For I:=N2 downto N1 do ST;

Пример:

For I:=20 downto 1 do A:=A+1;

I изменяется от 20 до 1 с шагом -1.

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

Последовательность рекуррентная, если любой член последовательности, начиная с некоторого, выражается через предшествующие члены. При этом способе задания последовательности указывают ее первый член (или несколько начальных членов) и формулу, позволяющую определить любой член последовательности по известным предшествующим членам.

Пример: Числа Фибоначи.

а1=1, а2=1, аn+2=an+an+1
Имеем

a3=a1+a2=1+1=2;

a4=a2+a3=1+2=3;

a5=a3+a4=2+3=5;

a6=a4+a5=3+5=8;

a7=a5+a6=5+8=13;

a8=a6+a7=8+13=21; ...

В итоге получаем последовательность 1, 1, 2, 3, 5, 8, 13, 21, 34, ... Каждый ее член, кроме первых двух, равен сумме двух предшествующих ему членов. Пример программы вывода 50 первых членов последовательности Фибоначи:

Var an,anp1, anp2,i: integer;

Begin

An:=1;

Anp1:=1;

Writeln ('1, 1')

For i:=3 to 50 do

Begin

Anp2:=an+anp1;

Writeln(',',anp2);

An:=anp1;

Anp1:=anp2;

End;

End.

 

Условные операторы Pascal-Паскаль

Условные операторы позволяют выбирать для выполнения те или иные части программы в зависимости от некоторых условий. Если, например, в программе используются вещественные переменные x и z, и на каком-то этапе решения задачи требуется вычислить z=max(x, y), то желаемый результат получается в результате выполнения либо оператора присваивания z:=x, либо оператора присваивания z:=y. Поскольку значения переменных x и y заранее неизвестны, а определяются в процессе вычислений, то в программе необходимо предусмотреть оба эти оператора присваивания. Однако на самом деле должен выполниться один из них. Поэтому в программе должно содержаться указание о том, в каком случае надо выбирать для исполнения тот или иной оператор присваивания.

Это указание естественно сформулировать с использованием отношения x>y. Если это отношение при текущих значениях x и y справедливо (принимает значение true), то для исполнения должен выбираться оператор z:=x; в противном случае для исполнения должен выбираться оператор z:=y (при x=y безразлично, какой оператор выполнять, так что выполнение оператора z:=y в этом случае даст правильный результат).

Для задания подобного рода разветвляющихся вычислительных процессов в языках программирования существуют условные операторы. Рассмотрим полный условный оператор Паскаля:

if B then S1 else S2

Здесь if (если), then (то) и else (иначе) являются служебными словами,В – логическое выражение, а S1 и S2 – операторы.

Выполнение такого условного оператора в Паскале сводится к выполнению одного из входящих в него операторов S1 или S2: если заданное в операторе условие выполняется (логическое выражение В принимает значение true), то выполняется оператор S1, в противном случае выполняется оператор S2.

Алгоритм решения упомянутой выше задачи вычисления z= max( x, y) можно задать в виде условного оператора Паскаля

if x>y then z:= x else z:= y

При формулировании алгоритмов весьма типичной является такая ситуация, когда на определенном этапе вычислительного процесса какие-либо действия надо выполнить только при выполнении некоторого условия, а если это условие не выполняется, то на данном этапе вообще не нужно выполнять никаких действий. Простейшим примером такой ситуации является замена текущего значения переменной х на абсолютную величину этого значения: если x<0, то необходимо выполнить оператор присваивания x:= - x; если же x>=0, то текущее значение х должно остаться без изменений, т.е. на данном этапе вообще не надо выполнять каких-либо действий.

В подобных ситуациях удобна сокращенная форма записи условного оператора в Паскале:

if B then S

Правило выполнения сокращенного условного оператора Паскаля достаточно очевидно: если значение логического выражения В есть true, то выполняется оператор S; в противном случае никаких иных действий не производится.

В языке программирования Паскаль в условном операторе между then и else, а также после else по синтаксису может стоять только один оператор. Если же при выполнении (или невыполнении) заданного условия надо выполнить некоторую последовательность действий, то их надо объединить в единый, составной оператор, т.е. заключить эту последовательность действий в операторные скобки begin... end (это важно!). Если, например, при x< y надо поменять местами значения этих переменных, то условный оператор будет записан следующим образом в Паскале:

if x<y then begin r:=x; x:=y; y:=r end

Наличие сокращенной формы условного оператора Паскаля требует большой осторожности при использовании. Например, условный оператор

if B1 then if B2 then S1 else S2

допускает, вообще говоря, две разные трактовки:

  • как полный условный оператор Паскаля вида

ifB1 then begin
if B2 then S1 end
else S2

  • как сокращенный условный оператор Паскаля вида

if B1 then begin
if B2 then S1 else S2 end

По правилам Паскаля имеет место вторая трактовка, т.е. считается, что каждое слово else соответствует первому предшествующему ему слову then. Для избежания возможных ошибок и недоразумений можно порекомендовать во всех подобных случаях четко выделять желаемую форму условного оператора Паскаля путем взятия в операторные скобки.




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.