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


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



ЗНАЕТЕ ЛИ ВЫ?

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



Repeat <тело цикла> Until <условие>

Блок операторов независимо от значения условия будет выполнен хотябы один раз. Цикл заканчивается, если после очередного исполнения блока операторов условие имеет значение true.

Пример: программа запрашивает ввод одного символа и выводит его ASCII - код, пока не будет введен пустой символ:

Program Code;
Const
Cr = 13;
Var
Ch:Char;
Begin
Repeat
Readln (Ch);
Writeln (Ch,' = ', Ord (Ch));
Until Ord (Ch) = Cr
End.

 

Оператор выбора одного из вариантов.

Case <ключ выбора> Of <список выбора> Else <оператор> End;

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

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

2 2
*
Признаком конца работы служит ввод любого символа, отличного от +, -, /, *.

Программа:
Program Calc;
Var
Operation: Char; {Знак Операции}
X, Y, Z: Real;
Stop: Boolean;
Begin
Stop:= False;
repeat
Writeln; {Пустая Строка - Разделитель}
Write ('X, Y = ');
Readln (X,Y);
Write ('Операция: ');
Readln (Operation);
Case Operation Of
'+': Z: = X+Y;
'-': Z: = X-Y;
'*': Z: = X*Y;
'/': Z: = X/Y;
Else
Stop:= True;
End;
If Not Stop Then
Writeln('Z = ',Z);
Until Stop;
End.

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

Оператор безуслов ного перехода на строку с меткой.

Goto <метка>

Метка, должна быть описана в разделе описаний. Метка, описанная в процедуре (функции) локализуется в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.

 

СТРУКТУРИРОВАННЫЕ ОПЕРАТОРЫ ЯЗЫКА ПАСКАЛЬ.ОПЕРАТОРЫ FOR, WHILE, REPEAT.ОСОБЕННОСТИ.

Структурированными являются такие операторы, которые состоят из других операторов. К ним относятся:

  • составной оператор;
  • условный оператор IF;
  • условный оператор CASE;
  • оператор цикла REPEAT;
  • оператор цикла WHILE;
  • оператор цикла FOR;
  • оператор над записями WITH.

Оператор над записями WITH будет рассмотрен в разделе 6.4, остальные - в данном разделе.

Составной оператор

Составной оператор представляет собой совокупность последовательно выполняемых операторов, заключенных в операторные скобки begin и end:

begin
<оператор 1>;
<оператор 2>;
...
<оператор N>
end;

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

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

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

Можно считать, что и само тело программы, т. к. оно заключено в операторные скобки begin и end, тоже является составным оператором.

Условный оператор IF

Оператор IF реализует алгоритмическую конструкцию РАЗВИЛКА и изменяет порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Существует два варианта оператора:

if S then A
else В; {полная развилка}
и
if S then А; {укороченная развилка}

В этих операторах:
S - некоторое логическое выражение, истинность которого проверяется;
А - оператор, который выполняется, если выражение S истинно;
В - оператор, который выполняется, если выражение S ложно.

Так как условный оператор IF является единым предложением, ни перед then, ни перед else точку с запятой ставить нельзя. Примеры использования оператора:

if X < 0 then X:= -Y;
if X < 1.5 then Z:= X + Y
else Z:= 1.5;

Пример. Ввести целое число и вывести символ, соответствующий этому числу в кодировке ASCII, если такой символ есть, или сообщение, что такого символа нет (управляющие символы не учитываются).

program EXAMPLE5;
var X: Integer;
begin
Write('Введите целое число: ');
ReadLn(X);
if (X > 31) and (X < 256) then
WriteLn('Соответствующий символ - ', Chr(X))
else
WriteLn('Такого символа НЕТ')
end.

Условный оператор CASE

С помощью этого оператора можно выбрать вариант из любого количества вариантов. Структура этого оператора в Turbo Pascal:

case S of
C1:Instruction1;
C2:Instruction2;
CN: InstructionN;
else Instruction
end;

В этой структуре:

S - выражение порядкового типа, значение которого вычисляется;

C1, C2,..., CN - константы, с которыми сравнивается значение выражения S;

Instruction1, Instruction2,..., InstructionN - операторы, из которых выполняется ТОТ, с константой которого совпадает значение выражения S;

Instruction - оператор, который выполняется, если значение выражения S не совпадает ни с одной из констант С1,..., CN.

Ветвь оператора else является необязательной. Если она отсутствует и значение выражения S не совпадет ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора IF перед словом else точку с запятой можно ставить.

Если для нескольких констант нужно выполнять один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если возможно), сопроводив их одним оператором.

Пример.

case I of
0, 2, 4, 6, 8: WriteLnC'Четная цифра');
1, 3, 5, 7, 9: WriteLn('Нечетная цифра');
10..100: WriteLn('Число от 10 до 100');
else
WriteLn('Отрицательное число или больше 100')
end;

Пример использования оператора CASE приведен также в п. 16.3.21.

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

Оператор цикла REPEAT организует выполнение цикла, состоящего из любого числа операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла осуществляется при истинности некоторого логического выражения. Структура этого оператора:

repeat
Instruction1;
Instruction2;
...
InstructionN
until S;

В этой структуре:

Instruction1, Instruction2,..., InstructionN - выполняемые операторы, составляющие тело цикла;

S - логическое выражение, истинность которого проверяется в конце каждой итерации.

Так как слова repeat и until являются своеобразными операторными скобками, точку с запятой перед словом until ставить не обязательно.

Пример. Усовершенствованная программа, вычисляющая сумму двух чисел (см. пример п. 2).

program EXAMPLE6;
var
X, Y, Sum: Real;
Ch: Char;
begin
repeat {начало цикла}
Write(' Введите числа Х и Y ');
ReadLn(X, Y);
Sum:= X + Y;
WriteLn(' Сумма чисел X и Y равна ',Sum);
Write('Завершить программу? ');
ReadLn(Ch);
until (UpCase(Ch) = 'Y') or (Ch = 'д') or (Ch = 'Д')
{UpCase - получение заглавной буквы}
end.

 

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

Оператор цикла WHILE организует выполнение одного оператора неизвестное заранее число раз. Выход из цикла осуществляется, если некоторое логическое выражение окажется ложным. Так как истинность логического выражения проверяется в начале каждой итерации, тело цикла может не выполняться ни разу. Структура оператора цикла имеет вид:

while S do
Instruction;

В этой структуре:

S - логическое выражение, истинность которого проверяется в начале каждой итерации;

Instruction - выполняемый оператор цикла.

Пример. Найти все делители целого положительного числа (кроме 1 и самого числа).

program EXAMPLE7;
var
X: Integer;
Half: Integer;
Divider: Integer;
i: Integer;
begin
repeat
Write('Введите число больше нуля: ');
ReadLn(X);
if X <= 0 then
WriteLn('Неправильный ввод')
until X > 0;
Half:= X div 2;
Divider:= 2;
I:= 0;
while Divider <= Half do
begin
if X mod Divider = 0 then
begin
Inc(i); {увеличение счетчика на единицу}
WriteLn(i, ' -й делитель равен: ', Divider)
end;
Inc(Divider) {увеличение делителя на единицу}
end;
if i = 0 then
WriteLn('Делителей нет');
WriteLn('Конец решения')
End.

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

Оператор цикла FOR организует выполнение одного оператора заранее известное число раз. Существует два варианта оператора:

For Param:=Start to Finish do Instruction;
For Param:=Start downto Finish do Instruction;

В этих операторах:

Param - параметр цикла, являющийся переменной порядкового типа;

Start - выражение, определяющее начальное значение параметра цикла;

Finish - выражение, определяющее конечное значение параметра цикла;

Instruction - выполняемый оператор.

Start и Finish должны быть совместимы для присваивания с параметром цикла (см. п. 9.3).

Цикл действует таким образом. Сначала вычисляются и запоминаются начальное - Start и конечное - Finish значения параметра цикла. Далее параметру цикла Param присваивается начальное значение Start. Затем значение параметра цикла сравнивается со значением Finish. Далее, пока параметр цикла меньше или равен конечному значению (в первом варианте оператора) или больше или равен конечному значению (во втором варианте), выполняется очередная итерация цикла; в противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение оператора Instruction, а затем присваивание параметру цикла следующего большего значения (в первом варианте оператора) или следующего меньшего значения (во втором варианте).

Естественно, что, если в первом варианте значение Start больше Finish или во втором варианте меньше Finish, оператор не выполняется ни разу.

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

Пример. Вывести на экран буквы от Z до A.

program EXAMPLE8;
var i: Char;
begin
for i: = 'Z' downto 'A' do
Write(i);
WriteLn
end.

Пример. Вычислить 101 значение sin x с заданным шагом и вывести первое отрицательное значение синуса.

program EXAMPLE9;
label l;
var Si: array[0..100] of Real; {массив вещественных чисел}
Step: Real;
X: Real;
i: Integer;
begin
Write('Введите шаг вычисления: ');
ReadLn(Step);
X:= 0; {начальный аргумент}
for i:= 0 to 100 do
begin
Si[I]:=Sin(X);
X:= X + Step
end;
for i:=0 to 100 do
if Si[I] < 0 then
begin
WriteLn('Первое отрицательное значение синуса: ', Si[I], ' Номер элемента: ', i);
goto 1;
end;
WriteLn('Нет отрицательного значения');
1:
end.



Поделиться:


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

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